{"version":3,"file":"ethlete-components.mjs","sources":["../../../../libs/components/src/lib/accordion/accordion-errors.ts","../../../../libs/components/src/lib/accordion/headless/accordion.tokens.ts","../../../../libs/components/src/lib/accordion/headless/accordion-group.directive.ts","../../../../libs/components/src/lib/accordion/headless/accordion-panel.directive.ts","../../../../libs/components/src/lib/accordion/headless/internals/register-part.ts","../../../../libs/components/src/lib/accordion/headless/accordion-templates.directive.ts","../../../../libs/components/src/lib/accordion/headless/accordion-trigger.directive.ts","../../../../libs/components/src/lib/accordion/headless/accordion.directive.ts","../../../../libs/components/src/lib/accordion/accordion-group.component.ts","../../../../libs/components/src/lib/icon/headless/align-icons.ts","../../../../libs/components/src/lib/icon/headless/arrow-out-up-right-icon.ts","../../../../libs/components/src/lib/icon/headless/arrow-right-icon.ts","../../../../libs/components/src/lib/icon/headless/arrow-up-icon.ts","../../../../libs/components/src/lib/icon/headless/arrows-left-right-icon.ts","../../../../libs/components/src/lib/icon/headless/bold-icon.ts","../../../../libs/components/src/lib/icon/headless/calendar-icon.ts","../../../../libs/components/src/lib/icon/headless/check-icon.ts","../../../../libs/components/src/lib/icon/headless/chevron-icon.ts","../../../../libs/components/src/lib/icon/headless/circle-check-icon.ts","../../../../libs/components/src/lib/icon/headless/circle-info-icon.ts","../../../../libs/components/src/lib/icon/headless/clipboard-check-icon.ts","../../../../libs/components/src/lib/icon/headless/clock-icon.ts","../../../../libs/components/src/lib/icon/headless/code-block-icon.ts","../../../../libs/components/src/lib/icon/headless/code-icon.ts","../../../../libs/components/src/lib/icon/headless/ellipsis-icon.ts","../../../../libs/components/src/lib/icon/headless/ellipsis-vertical-icon.ts","../../../../libs/components/src/lib/icon/headless/eye-icons.ts","../../../../libs/components/src/lib/icon/headless/eyedropper-icon.ts","../../../../libs/components/src/lib/icon/headless/file-icon.ts","../../../../libs/components/src/lib/icon/headless/filter-icon.ts","../../../../libs/components/src/lib/icon/headless/floppy-disk-icon.ts","../../../../libs/components/src/lib/icon/headless/focus-frame-icon.ts","../../../../libs/components/src/lib/icon/headless/grid-2x2-icon.ts","../../../../libs/components/src/lib/icon/headless/heading-1-icon.ts","../../../../libs/components/src/lib/icon/headless/heading-2-icon.ts","../../../../libs/components/src/lib/icon/headless/heading-3-icon.ts","../../../../libs/components/src/lib/icon/headless/icon-errors.ts","../../../../libs/components/src/lib/icon/headless/icon-provider.ts","../../../../libs/components/src/lib/icon/headless/icon.directive.ts","../../../../libs/components/src/lib/icon/headless/image-icon.ts","../../../../libs/components/src/lib/icon/headless/italic-icon.ts","../../../../libs/components/src/lib/icon/headless/link-icon.ts","../../../../libs/components/src/lib/icon/headless/list-bulleted-icon.ts","../../../../libs/components/src/lib/icon/headless/list-numbered-icon.ts","../../../../libs/components/src/lib/icon/headless/location-icon.ts","../../../../libs/components/src/lib/icon/headless/lock-icon.ts","../../../../libs/components/src/lib/icon/headless/minus-icon.ts","../../../../libs/components/src/lib/icon/headless/paragraph-icon.ts","../../../../libs/components/src/lib/icon/headless/pause-icon.ts","../../../../libs/components/src/lib/icon/headless/pencil-icon.ts","../../../../libs/components/src/lib/icon/headless/play-icon.ts","../../../../libs/components/src/lib/icon/headless/plus-icon.ts","../../../../libs/components/src/lib/icon/headless/quote-icon.ts","../../../../libs/components/src/lib/icon/headless/rotate-right-icon.ts","../../../../libs/components/src/lib/icon/headless/star-icon.ts","../../../../libs/components/src/lib/icon/headless/strikethrough-icon.ts","../../../../libs/components/src/lib/icon/headless/table-icon.ts","../../../../libs/components/src/lib/icon/headless/thumbtack-icon.ts","../../../../libs/components/src/lib/icon/headless/times-icon.ts","../../../../libs/components/src/lib/icon/headless/trash-icon.ts","../../../../libs/components/src/lib/icon/headless/triangle-exclamation-icon.ts","../../../../libs/components/src/lib/icon/headless/trophy-icon.ts","../../../../libs/components/src/lib/icon/headless/underline-icon.ts","../../../../libs/components/src/lib/icon/headless/undo-redo-icons.ts","../../../../libs/components/src/lib/icon/headless/upload-icon.ts","../../../../libs/components/src/lib/icon/icon.imports.ts","../../../../libs/components/src/lib/accordion/accordion.component.ts","../../../../libs/components/src/lib/accordion/accordion.component.html","../../../../libs/components/src/lib/accordion/accordion.imports.ts","../../../../libs/components/src/lib/avatar/avatar.component.ts","../../../../libs/components/src/lib/avatar/avatar-group.component.ts","../../../../libs/components/src/lib/avatar/avatar.imports.ts","../../../../libs/components/src/lib/badge/badge.component.ts","../../../../libs/components/src/lib/badge/badge.imports.ts","../../../../libs/components/src/lib/banner/banner-labels.ts","../../../../libs/components/src/lib/focus-ring/focus-ring-styles.component.ts","../../../../libs/components/src/lib/focus-ring/focus-ring.directive.ts","../../../../libs/components/src/lib/loader/loader-labels.ts","../../../../libs/components/src/lib/loader/brand-loader/brand-loader.component.ts","../../../../libs/components/src/lib/loader/progress-bar/progress-bar.component.ts","../../../../libs/components/src/lib/loader/spinner/spinner.component.ts","../../../../libs/components/src/lib/button/button-properties-styles.component.ts","../../../../libs/components/src/lib/button/button-styles.directive.ts","../../../../libs/components/src/lib/button/headless/button.directive.ts","../../../../libs/components/src/lib/button/headless/button-color.directive.ts","../../../../libs/components/src/lib/button/headless/split-button-errors.ts","../../../../libs/components/src/lib/button/headless/split-button.directive.ts","../../../../libs/components/src/lib/button/headless/split-button-action.directive.ts","../../../../libs/components/src/lib/button/headless/split-button-trigger.directive.ts","../../../../libs/components/src/lib/button/button.component.ts","../../../../libs/components/src/lib/button/icon-button.component.ts","../../../../libs/components/src/lib/banner/banner.component.ts","../../../../libs/components/src/lib/banner/banner.component.html","../../../../libs/components/src/lib/banner/banner.imports.ts","../../../../libs/components/src/lib/match/match-errors.ts","../../../../libs/components/src/lib/match/headless/match-card.tokens.ts","../../../../libs/components/src/lib/match/headless/match-card-parts.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-formats.ts","../../../../libs/components/src/lib/match/match-labels.ts","../../../../libs/components/src/lib/match/match-participant-name.ts","../../../../libs/components/src/lib/match/headless/match-card.directive.ts","../../../../libs/components/src/lib/match/integrations/ethlete.ts","../../../../libs/components/src/lib/picture/picture-config.ts","../../../../libs/components/src/lib/picture/picture-slots.directive.ts","../../../../libs/components/src/lib/picture/picture.types.ts","../../../../libs/components/src/lib/picture/picture.utils.ts","../../../../libs/components/src/lib/picture/picture.component.ts","../../../../libs/components/src/lib/picture/picture.component.html","../../../../libs/components/src/lib/picture/picture.imports.ts","../../../../libs/components/src/lib/skeleton/skeleton-item.component.ts","../../../../libs/components/src/lib/skeleton/skeleton-text.component.ts","../../../../libs/components/src/lib/skeleton/skeleton.component.ts","../../../../libs/components/src/lib/skeleton/skeleton.imports.ts","../../../../libs/components/src/lib/match/match-participant.component.ts","../../../../libs/components/src/lib/match/match-score.component.ts","../../../../libs/components/src/lib/match/match-card.component.ts","../../../../libs/components/src/lib/match/match-card.component.html","../../../../libs/components/src/lib/match/match.imports.ts","../../../../libs/components/src/lib/match/match.types.ts","../../../../libs/components/src/lib/bracket/integrations/ethlete.ts","../../../../libs/components/src/lib/bracket/bracket-card-context.ts","../../../../libs/components/src/lib/bracket/bracket-density.ts","../../../../libs/components/src/lib/bracket/bracket-labels.ts","../../../../libs/components/src/lib/bracket/bracket-default-continue.component.ts","../../../../libs/components/src/lib/bracket/bracket-default-final-match.component.ts","../../../../libs/components/src/lib/bracket/bracket-default-match.component.ts","../../../../libs/components/src/lib/bracket/bracket-default-round-header.component.ts","../../../../libs/components/src/lib/bracket/bracket-components.ts","../../../../libs/components/src/lib/bracket/bracket.config.ts","../../../../libs/components/src/lib/bracket/bracket-grid.ts","../../../../libs/components/src/lib/bracket/bracket-layout.ts","../../../../libs/components/src/lib/bracket/bracket-fits-width.ts","../../../../libs/components/src/lib/bracket/bracket-participants.component.ts","../../../../libs/components/src/lib/bracket/bracket-pick-card.component.ts","../../../../libs/components/src/lib/bracket/bracket-pick-card.component.html","../../../../libs/components/src/lib/bracket/bracket-rounds-list.component.ts","../../../../libs/components/src/lib/bracket/bracket-rounds-list.component.html","../../../../libs/components/src/lib/bracket/journey-highlight.ts","../../../../libs/components/src/lib/bracket/bracket-input-transforms.ts","../../../../libs/components/src/lib/bracket/bracket.component.ts","../../../../libs/components/src/lib/bracket/bracket.component.html","../../../../libs/components/src/lib/bracket/bracket.imports.ts","../../../../libs/components/src/lib/bracket/layouts/draw-elimination-edges.ts","../../../../libs/components/src/lib/bracket/layouts/double-elimination-bracket-layout.ts","../../../../libs/components/src/lib/bracket/layouts/single-elimination-bracket-layout.ts","../../../../libs/components/src/lib/bracket/layouts/swiss/bracket-swiss-styles.component.ts","../../../../libs/components/src/lib/bracket/layouts/swiss/swiss-bracket-layout.ts","../../../../libs/components/src/lib/button/fab.component.ts","../../../../libs/components/src/lib/button/split-button.component.ts","../../../../libs/components/src/lib/button/text-button.component.ts","../../../../libs/components/src/lib/button/window-control-button.component.ts","../../../../libs/components/src/lib/button/button.imports.ts","../../../../libs/components/src/lib/overlay/alert-dialog/alert-dialog-labels.ts","../../../../libs/components/src/lib/overlay/overlay-errors.ts","../../../../libs/components/src/lib/overlay/overlay-ref.ts","../../../../libs/components/src/lib/overlay/overlay-definition.ts","../../../../libs/components/src/lib/overlay/normalize-class-list.ts","../../../../libs/components/src/lib/overlay/overlay-config-merger.ts","../../../../libs/components/src/lib/overlay/overlay-has-backdrop.ts","../../../../libs/components/src/lib/overlay/overlay-container.component.ts","../../../../libs/components/src/lib/overlay/overlay-container.component.html","../../../../libs/components/src/lib/overlay/strategies/overlay-arrow-styles.component.ts","../../../../libs/components/src/lib/overlay/strategies/overlay-origin.ts","../../../../libs/components/src/lib/overlay/strategies/overlay-strategy-controller.ts","../../../../libs/components/src/lib/overlay/overlay-manager.ts","../../../../libs/components/src/lib/overlay/overlay-opener.ts","../../../../libs/components/src/lib/overlay/strategies/overlay-strategy-config-merger.ts","../../../../libs/components/src/lib/overlay/strategies/dialog-styles.component.ts","../../../../libs/components/src/lib/overlay/strategies/dialog.strategy.ts","../../../../libs/components/src/lib/overlay/get-closest-overlay.ts","../../../../libs/components/src/lib/overlay/overlay-main-styles.component.ts","../../../../libs/components/src/lib/overlay/overlay-main.directive.ts","../../../../libs/components/src/lib/overlay/overlay-body.component.ts","../../../../libs/components/src/lib/overlay/overlay-footer.directive.ts","../../../../libs/components/src/lib/overlay/overlay-header.directive.ts","../../../../libs/components/src/lib/overlay/overlay-title.directive.ts","../../../../libs/components/src/lib/overlay/alert-dialog/alert-dialog.component.ts","../../../../libs/components/src/lib/overlay/alert-dialog/alert-dialog-opener.ts","../../../../libs/components/src/lib/overlay/overlay-template-host.component.ts","../../../../libs/components/src/lib/overlay/overlay-template-host.component.html","../../../../libs/components/src/lib/overlay/strategies/anchored.strategy.ts","../../../../libs/components/src/lib/overlay/strategies/anchored-dialog-styles.component.ts","../../../../libs/components/src/lib/overlay/strategies/anchored-dialog.strategy.ts","../../../../libs/components/src/lib/internals/pointer-gesture-target.ts","../../../../libs/components/src/lib/overlay/strategies/overlay-drag-to-dismiss.ts","../../../../libs/components/src/lib/overlay/strategies/sheet-strategy-hooks.ts","../../../../libs/components/src/lib/overlay/strategies/sheet-styles.component.ts","../../../../libs/components/src/lib/overlay/strategies/bottom-sheet.strategy.ts","../../../../libs/components/src/lib/overlay/strategies/overlay-origin-clone.component.ts","../../../../libs/components/src/lib/overlay/strategies/fullscreen-animation.ts","../../../../libs/components/src/lib/overlay/strategies/full-screen-dialog-styles.component.ts","../../../../libs/components/src/lib/overlay/strategies/full-screen.strategy.ts","../../../../libs/components/src/lib/overlay/strategies/left-sheet.strategy.ts","../../../../libs/components/src/lib/overlay/strategies/right-sheet.strategy.ts","../../../../libs/components/src/lib/overlay/strategies/presets.ts","../../../../libs/components/src/lib/overlay/strategies/top-sheet.strategy.ts","../../../../libs/components/src/lib/overlay/headless/overlay.directive.ts","../../../../libs/components/src/lib/overlay/headless/overlay-anchor.directive.ts","../../../../libs/components/src/lib/overlay/headless/overlay-surface.directive.ts","../../../../libs/components/src/lib/overlay/headless/overlay-trigger.directive.ts","../../../../libs/components/src/lib/overlay/overlay-close.directive.ts","../../../../libs/components/src/lib/overlay/overlay-header-template.directive.ts","../../../../libs/components/src/lib/overlay/routing/overlay-router.ts","../../../../libs/components/src/lib/overlay/utils/overlay-unsaved-changes-guard.ts","../../../../libs/components/src/lib/overlay/overlay-scroll-blocker.ts","../../../../libs/components/src/lib/overlay/overlay.imports.ts","../../../../libs/components/src/lib/overlay/query-param-overlay-link.directive.ts","../../../../libs/components/src/lib/overlay/routing/overlay-back-or-close.directive.ts","../../../../libs/components/src/lib/overlay/routing/overlay-route-header-template-outlet.component.ts","../../../../libs/components/src/lib/overlay/routing/overlay-router-link.directive.ts","../../../../libs/components/src/lib/overlay/routing/overlay-router-outlet-disabled-template.directive.ts","../../../../libs/components/src/lib/overlay/sidebar/overlay-sidebar-page.component.ts","../../../../libs/components/src/lib/overlay/sidebar/sidebar-overlay.ts","../../../../libs/components/src/lib/overlay/routing/overlay-shared-route-template.directive.ts","../../../../libs/components/src/lib/overlay/routing/overlay-router-outlet.component.ts","../../../../libs/components/src/lib/overlay/routing/overlay-shared-route-template-outlet.component.ts","../../../../libs/components/src/lib/overlay/sidebar/overlay-sidebar.component.ts","../../../../libs/components/src/lib/toggletip/headless/toggletip-close.directive.ts","../../../../libs/components/src/lib/toggletip/toggletip-errors.ts","../../../../libs/components/src/lib/overlay/floating-panel-styles.component.ts","../../../../libs/components/src/lib/toggletip/toggletip.component.ts","../../../../libs/components/src/lib/toggletip/toggletip.component.html","../../../../libs/components/src/lib/toggletip/toggletip.utils.ts","../../../../libs/components/src/lib/toggletip/headless/toggletip.directive.ts","../../../../libs/components/src/lib/toggletip/headless/toggletip-trigger.directive.ts","../../../../libs/components/src/lib/toggletip/toggletip.imports.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb-errors.ts","../../../../libs/components/src/lib/breadcrumb/headless/breadcrumb.tokens.ts","../../../../libs/components/src/lib/breadcrumb/headless/breadcrumb-templates.directive.ts","../../../../libs/components/src/lib/breadcrumb/headless/breadcrumb-item.directive.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb-manager.ts","../../../../libs/components/src/lib/breadcrumb/headless/breadcrumb-segment.directive.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb-labels.ts","../../../../libs/components/src/lib/breadcrumb/headless/breadcrumb.directive.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb-overflow.component.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb-collapse.directive.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb.component.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb.component.html","../../../../libs/components/src/lib/breadcrumb/breadcrumb-outlet.component.ts","../../../../libs/components/src/lib/breadcrumb/seo/breadcrumb-seo.directive.ts","../../../../libs/components/src/lib/breadcrumb/breadcrumb.imports.ts","../../../../libs/components/src/lib/calendar/calendar-errors.ts","../../../../libs/components/src/lib/calendar/calendar-labels.ts","../../../../libs/components/src/lib/calendar/headless/calendar-range-strategy.ts","../../../../libs/components/src/lib/internals/form-input-target.ts","../../../../libs/components/src/lib/internals/number-attributes.ts","../../../../libs/components/src/lib/calendar/headless/internals/calendar-month.ts","../../../../libs/components/src/lib/calendar/headless/internals/calendar-view.ts","../../../../libs/components/src/lib/calendar/headless/internals/calendar-keyboard.ts","../../../../libs/components/src/lib/calendar/headless/internals/calendar-selection.ts","../../../../libs/components/src/lib/calendar/headless/calendar.directive.ts","../../../../libs/components/src/lib/calendar/headless/calendar-grid.directive.ts","../../../../libs/components/src/lib/calendar/headless/calendar-cell.directive.ts","../../../../libs/components/src/lib/calendar/calendar-header.directive.ts","../../../../libs/components/src/lib/calendar/calendar-coarse-grid-styles.component.ts","../../../../libs/components/src/lib/calendar/calendar-comparison-band-styles.component.ts","../../../../libs/components/src/lib/calendar/calendar-week-numbers-styles.component.ts","../../../../libs/components/src/lib/calendar/calendar.component.ts","../../../../libs/components/src/lib/calendar/calendar.component.html","../../../../libs/components/src/lib/calendar/calendar.imports.ts","../../../../libs/components/src/lib/card/card.component.ts","../../../../libs/components/src/lib/card/card.imports.ts","../../../../libs/components/src/lib/carousel/carousel-errors.ts","../../../../libs/components/src/lib/carousel/carousel-labels.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-errors.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-active-child.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-buttons.component.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-buttons.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-darken.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-drag.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-ignore-child.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-loading-template.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-masks.component.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-navigation.component.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-navigation.directive.ts","../../../../libs/components/src/lib/scrollable/headless/scrollable-snap.directive.ts","../../../../libs/components/src/lib/scrollable/scrollable.component.ts","../../../../libs/components/src/lib/scrollable/scrollable.component.html","../../../../libs/components/src/lib/scrollable/scrollable.imports.ts","../../../../libs/components/src/lib/carousel/carousel-autoplay-styles.component.ts","../../../../libs/components/src/lib/carousel/headless/carousel.tokens.ts","../../../../libs/components/src/lib/carousel/headless/carousel-autoplay.directive.ts","../../../../libs/components/src/lib/carousel/headless/carousel-controls.directive.ts","../../../../libs/components/src/lib/carousel/headless/carousel-item.directive.ts","../../../../libs/components/src/lib/carousel/headless/carousel-slide.directive.ts","../../../../libs/components/src/lib/carousel/carousel-transition-styles.component.ts","../../../../libs/components/src/lib/carousel/headless/internals/carousel-loop.ts","../../../../libs/components/src/lib/carousel/headless/internals/carousel-scroll-settled.ts","../../../../libs/components/src/lib/carousel/headless/internals/carousel-slide-progress.ts","../../../../libs/components/src/lib/carousel/headless/carousel.directive.ts","../../../../libs/components/src/lib/carousel/carousel.component.ts","../../../../libs/components/src/lib/carousel/carousel.component.html","../../../../libs/components/src/lib/carousel/carousel.imports.ts","../../../../libs/components/src/lib/chart/chart-axis.component.ts","../../../../libs/components/src/lib/chart/chart-data-table.component.ts","../../../../libs/components/src/lib/chart/chart-grid.component.ts","../../../../libs/components/src/lib/chart/chart-legend.component.ts","../../../../libs/components/src/lib/chart/chart-tooltip.component.ts","../../../../libs/components/src/lib/chart/headless/chart-plot.directive.ts","../../../../libs/components/src/lib/chart/chart-errors.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-plot-check.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-format.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-scale.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-series.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-stack.ts","../../../../libs/components/src/lib/chart/headless/bar-chart.directive.ts","../../../../libs/components/src/lib/tooltip/tooltip-errors.ts","../../../../libs/components/src/lib/tooltip/tooltip.component.ts","../../../../libs/components/src/lib/tooltip/tooltip.component.html","../../../../libs/components/src/lib/tooltip/tooltip.utils.ts","../../../../libs/components/src/lib/tooltip/headless/tooltip.directive.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-mark.directive.ts","../../../../libs/components/src/lib/chart/bar-chart.component.ts","../../../../libs/components/src/lib/chart/bar-chart.component.html","../../../../libs/components/src/lib/chart/headless/bar-chart-plot.directive.ts","../../../../libs/components/src/lib/chart/line-chart-errors.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-line.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-time-scale.ts","../../../../libs/components/src/lib/chart/headless/line-chart.directive.ts","../../../../libs/components/src/lib/chart/headless/line-chart-slice.directive.ts","../../../../libs/components/src/lib/chart/pie-chart-errors.ts","../../../../libs/components/src/lib/chart/headless/internals/chart-arc.ts","../../../../libs/components/src/lib/chart/headless/pie-chart.directive.ts","../../../../libs/components/src/lib/chart/line-chart-tooltip.component.ts","../../../../libs/components/src/lib/chart/line-chart.component.ts","../../../../libs/components/src/lib/chart/line-chart.component.html","../../../../libs/components/src/lib/chart/pie-chart.component.ts","../../../../libs/components/src/lib/chart/pie-chart.component.html","../../../../libs/components/src/lib/chart/sankey-chart-errors.ts","../../../../libs/components/src/lib/chart/headless/internals/sankey-layout.ts","../../../../libs/components/src/lib/chart/headless/sankey-chart.directive.ts","../../../../libs/components/src/lib/chart/sankey-chart.component.ts","../../../../libs/components/src/lib/chart/sankey-chart.component.html","../../../../libs/components/src/lib/chart/chart.imports.ts","../../../../libs/components/src/lib/chip/chip-labels.ts","../../../../libs/components/src/lib/chip/headless/chip-errors.ts","../../../../libs/components/src/lib/chip/headless/chip.tokens.ts","../../../../libs/components/src/lib/chip/headless/chip.directive.ts","../../../../libs/components/src/lib/chip/headless/chip-remove.directive.ts","../../../../libs/components/src/lib/chip/chip.component.ts","../../../../libs/components/src/lib/chip/chip.component.html","../../../../libs/components/src/lib/chip/chip.imports.ts","../../../../libs/components/src/lib/command-palette/command-palette-errors.ts","../../../../libs/components/src/lib/command-palette/command-palette-registry.ts","../../../../libs/components/src/lib/command-palette/headless/internals/fuzzy-match.ts","../../../../libs/components/src/lib/command-palette/headless/internals/rank-commands.ts","../../../../libs/components/src/lib/command-palette/headless/command-palette.directive.ts","../../../../libs/components/src/lib/command-palette/headless/command-palette-search.directive.ts","../../../../libs/components/src/lib/kbd/kbd-keys.ts","../../../../libs/components/src/lib/kbd/kbd-match.ts","../../../../libs/components/src/lib/kbd/kbd.component.ts","../../../../libs/components/src/lib/kbd/kbd.imports.ts","../../../../libs/components/src/lib/command-palette/command-palette-item.component.ts","../../../../libs/components/src/lib/command-palette/command-palette-item.component.html","../../../../libs/components/src/lib/command-palette/command-palette-labels.ts","../../../../libs/components/src/lib/command-palette/command-palette.component.ts","../../../../libs/components/src/lib/command-palette/command-palette.component.html","../../../../libs/components/src/lib/command-palette/command-palette.overlay.ts","../../../../libs/components/src/lib/command-palette/command-palette-shortcut.directive.ts","../../../../libs/components/src/lib/command-palette/command-palette.imports.ts","../../../../libs/components/src/lib/copy-button/copy-button.directive.ts","../../../../libs/components/src/lib/copy-button/copy-button.imports.ts","../../../../libs/components/src/lib/description-list/description-list.component.ts","../../../../libs/components/src/lib/description-list/description-list.imports.ts","../../../../libs/components/src/lib/divider/divider.component.ts","../../../../libs/components/src/lib/divider/divider.imports.ts","../../../../libs/components/src/lib/empty-state/empty-state.component.ts","../../../../libs/components/src/lib/empty-state/empty-state.imports.ts","../../../../libs/components/src/lib/filter-overlay/filter-overlay-labels.ts","../../../../libs/components/src/lib/filter-overlay/filter-overlay.ts","../../../../libs/components/src/lib/filter-overlay/filter-overlay-errors.ts","../../../../libs/components/src/lib/filter-overlay/filter-overlay-preview.ts","../../../../libs/components/src/lib/filter-overlay/headless/filter-overlay-controls.directive.ts","../../../../libs/components/src/lib/filter-overlay/filter-overlay.imports.ts","../../../../libs/components/src/lib/floating-action/floating-action-errors.ts","../../../../libs/components/src/lib/floating-action/headless/floating-action.tokens.ts","../../../../libs/components/src/lib/floating-action/headless/floating-action-parts.directive.ts","../../../../libs/components/src/lib/floating-action/floating-action-styles.component.ts","../../../../libs/components/src/lib/floating-action/floating-action.types.ts","../../../../libs/components/src/lib/floating-action/headless/floating-action.directive.ts","../../../../libs/components/src/lib/floating-action/floating-action.imports.ts","../../../../libs/components/src/lib/forms/cascader/cascader-errors.ts","../../../../libs/components/src/lib/forms/cascader/cascader-from-query.ts","../../../../libs/components/src/lib/forms/cascader/cascader-labels.ts","../../../../libs/components/src/lib/forms/cascader/cascader-breadcrumb-styles.component.ts","../../../../libs/components/src/lib/forms/cascader/cascader-sheet-styles.component.ts","../../../../libs/components/src/lib/forms/form-field/headless/form-field.tokens.ts","../../../../libs/components/src/lib/forms/form-field/headless/accessible-name-control.directive.ts","../../../../libs/components/src/lib/forms/form-field/headless/field-warnings.ts","../../../../libs/components/src/lib/forms/form-field/headless/form-field-errors.ts","../../../../libs/components/src/lib/forms/form-field/headless/form-field.directive.ts","../../../../libs/components/src/lib/forms/form-field/headless/support-presentation.ts","../../../../libs/components/src/lib/forms/form-field/headless/form-support.ts","../../../../libs/components/src/lib/forms/form-field/headless/anchored-panel-controller.ts","../../../../libs/components/src/lib/forms/form-field/headless/interactive-element.ts","../../../../libs/components/src/lib/forms/form-field/headless/label.directive.ts","../../../../libs/components/src/lib/forms/form-field/headless/overlay-surface-context.ts","../../../../libs/components/src/lib/forms/form-field/headless/register-singleton.ts","../../../../libs/components/src/lib/forms/form-field/form-field-labels.ts","../../../../libs/components/src/lib/forms/form-field/form-field-text-shell-styles.component.ts","../../../../libs/components/src/lib/forms/form-field/headless/text-shell-control.directive.ts","../../../../libs/components/src/lib/forms/form-field/headless/text-field-control.directive.ts","../../../../libs/components/src/lib/internals/typeahead.ts","../../../../libs/components/src/lib/forms/cascader/headless/internals/cascader-tree.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-column.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-node.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-search-option.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-search.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-surface.directive.ts","../../../../libs/components/src/lib/forms/cascader/headless/cascader-trigger.directive.ts","../../../../libs/components/src/lib/forms/cascader/cascader-panel.component.ts","../../../../libs/components/src/lib/scrollbar/scrollbar-errors.ts","../../../../libs/components/src/lib/scrollbar/headless/internals/scrollbar-geometry.ts","../../../../libs/components/src/lib/scrollbar/headless/internals/scrollbar-host-class.ts","../../../../libs/components/src/lib/scrollbar/headless/scrollbar.directive.ts","../../../../libs/components/src/lib/scrollbar/headless/scrollbar-thumb.directive.ts","../../../../libs/components/src/lib/scrollbar/scrollbar.component.ts","../../../../libs/components/src/lib/scrollbar/scrollbar.imports.ts","../../../../libs/components/src/lib/forms/form-field/form-field-control-suffix-styles.component.ts","../../../../libs/components/src/lib/forms/form-field/partials/control-suffix.directive.ts","../../../../libs/components/src/lib/forms/form-field/partials/form-field-barrier.directive.ts","../../../../libs/components/src/lib/forms/form-field/partials/input-prefix.directive.ts","../../../../libs/components/src/lib/forms/form-field/partials/input-suffix.directive.ts","../../../../libs/components/src/lib/forms/cascader/cascader.component.ts","../../../../libs/components/src/lib/forms/cascader/cascader.component.html","../../../../libs/components/src/lib/forms/cascader/cascader.imports.ts","../../../../libs/components/src/lib/forms/checkbox/headless/checkbox.directive.ts","../../../../libs/components/src/lib/forms/checkbox/checkbox.component.ts","../../../../libs/components/src/lib/forms/checkbox/checkbox.component.html","../../../../libs/components/src/lib/forms/checkbox/checkbox.imports.ts","../../../../libs/components/src/lib/forms/choice-field/choice-field-card-styles.component.ts","../../../../libs/components/src/lib/forms/selection-card-styles.component.ts","../../../../libs/components/src/lib/forms/selection-card.types.ts","../../../../libs/components/src/lib/forms/form-field/form-error.component.ts","../../../../libs/components/src/lib/forms/form-field/form-support-styles.component.ts","../../../../libs/components/src/lib/forms/form-field/form-warning.component.ts","../../../../libs/components/src/lib/forms/form-field/partials/form-support.component.ts","../../../../libs/components/src/lib/forms/form-field/partials/form-support.component.html","../../../../libs/components/src/lib/forms/form-field/form-field.variants.ts","../../../../libs/components/src/lib/forms/choice-field/choice-field.component.ts","../../../../libs/components/src/lib/forms/choice-field/choice-field.component.html","../../../../libs/components/src/lib/forms/form-field/hint.component.ts","../../../../libs/components/src/lib/forms/choice-field/choice-field.imports.ts","../../../../libs/components/src/lib/forms/color-input/color-input-errors.ts","../../../../libs/components/src/lib/forms/color-input/color-input-labels.ts","../../../../libs/components/src/lib/forms/color-input/color-input.types.ts","../../../../libs/components/src/lib/forms/color-input/headless/internals/color-convert.ts","../../../../libs/components/src/lib/forms/color-input/color-input-validators.ts","../../../../libs/components/src/lib/forms/form-field/form-field.component.ts","../../../../libs/components/src/lib/forms/form-field/form-field.component.html","../../../../libs/components/src/lib/forms/masked-input/headless/input-mask-host.ts","../../../../libs/components/src/lib/forms/input/input.types.ts","../../../../libs/components/src/lib/forms/input/headless/input.directive.ts","../../../../libs/components/src/lib/forms/input/headless/number-input.directive.ts","../../../../libs/components/src/lib/forms/input/headless/internals/password-strength.ts","../../../../libs/components/src/lib/forms/input/headless/password-input.directive.ts","../../../../libs/components/src/lib/forms/input/input.component.ts","../../../../libs/components/src/lib/forms/input/input.component.html","../../../../libs/components/src/lib/forms/color-input/headless/internals/color-picker-overlay.ts","../../../../libs/components/src/lib/forms/color-input/headless/internals/color-picker-state.ts","../../../../libs/components/src/lib/forms/color-input/headless/color-input.directive.ts","../../../../libs/components/src/lib/forms/color-input/headless/internals/color-picker-engine.ts","../../../../libs/components/src/lib/forms/color-input/headless/color-picker-area.directive.ts","../../../../libs/components/src/lib/forms/color-input/headless/color-picker-channel.directive.ts","../../../../libs/components/src/lib/forms/color-input/headless/color-picker-surface.directive.ts","../../../../libs/components/src/lib/forms/color-input/headless/color-picker-trigger.directive.ts","../../../../libs/components/src/lib/forms/color-input/headless/internals/eye-dropper.ts","../../../../libs/components/src/lib/forms/color-input/color-picker-panel.component.ts","../../../../libs/components/src/lib/forms/color-input/color-picker-panel.component.html","../../../../libs/components/src/lib/forms/color-input/color-input.component.ts","../../../../libs/components/src/lib/forms/color-input/color-input.component.html","../../../../libs/components/src/lib/forms/color-input/color-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/date-input/date-input-errors.ts","../../../../libs/components/src/lib/forms/masked-input/masked-input-errors.ts","../../../../libs/components/src/lib/forms/masked-input/headless/input-mask.types.ts","../../../../libs/components/src/lib/forms/masked-input/headless/internals/mask-engine.ts","../../../../libs/components/src/lib/forms/masked-input/headless/internals/pattern-mask.ts","../../../../libs/components/src/lib/forms/masked-input/headless/input-mask.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-labels.ts","../../../../libs/components/src/lib/forms/date-time/date-picker-panel.component.ts","../../../../libs/components/src/lib/forms/date-time/picker/date-picker-host.ts","../../../../libs/components/src/lib/forms/date-time/picker/date-picker-surface.directive.ts","../../../../libs/components/src/lib/forms/date-time/picker/date-picker-trigger.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-picker-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/picker-input-commit.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-picker-overlay.ts","../../../../libs/components/src/lib/forms/date-time/internals/display-format-mask.ts","../../../../libs/components/src/lib/forms/date-time/internals/picker-input-base.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-picker-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-value.ts","../../../../libs/components/src/lib/forms/date-time/internals/precision-format.ts","../../../../libs/components/src/lib/forms/date-time/date-input/headless/date-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-input/headless/date-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-input/date-input.component.ts","../../../../libs/components/src/lib/forms/date-time/date-input/date-input.component.html","../../../../libs/components/src/lib/forms/date-time/date-input/date-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/date-range-input/date-range-input-errors.ts","../../../../libs/components/src/lib/forms/date-time/date-range-presets.component.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-range-picker-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-time-format-split.ts","../../../../libs/components/src/lib/forms/date-time/internals/time-zone.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-range-picker-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-range-presets-state.ts","../../../../libs/components/src/lib/forms/date-time/date-range-input/headless/date-range-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-range-input/headless/date-range-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-range-input/date-range-input.component.ts","../../../../libs/components/src/lib/forms/date-time/date-range-input/date-range-input.component.html","../../../../libs/components/src/lib/forms/date-time/date-range-input/date-range-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/date-range-presets.ts","../../../../libs/components/src/lib/forms/date-time/date-time-input/date-time-input-errors.ts","../../../../libs/components/src/lib/time-picker/time-picker-errors.ts","../../../../libs/components/src/lib/time-picker/headless/internals/time-availability.ts","../../../../libs/components/src/lib/time-picker/headless/internals/time-format.ts","../../../../libs/components/src/lib/time-picker/time-picker-labels.ts","../../../../libs/components/src/lib/time-picker/headless/time-picker.directive.ts","../../../../libs/components/src/lib/time-picker/headless/time-picker-column.directive.ts","../../../../libs/components/src/lib/time-picker/headless/time-picker-option.directive.ts","../../../../libs/components/src/lib/time-picker/time-picker.component.ts","../../../../libs/components/src/lib/time-picker/time-picker.component.html","../../../../libs/components/src/lib/time-picker/time-picker.imports.ts","../../../../libs/components/src/lib/tabs/tab-scale-styles.component.ts","../../../../libs/components/src/lib/forms/selection-list/headless/selection-list.tokens.ts","../../../../libs/components/src/lib/forms/selection-list/headless/selection-list-control.directive.ts","../../../../libs/components/src/lib/forms/selection-list/headless/internals/selection-state.ts","../../../../libs/components/src/lib/forms/selection-list/headless/selection-list.directive.ts","../../../../libs/components/src/lib/forms/description/description.component.ts","../../../../libs/components/src/lib/forms/selection-list/headless/selection-option.directive.ts","../../../../libs/components/src/lib/forms/selection-list/segmented-button-group/segmented-button-group.component.ts","../../../../libs/components/src/lib/forms/selection-list/segmented-button-group/segmented-button-group.component.html","../../../../libs/components/src/lib/forms/selection-list/segmented-button-group/segmented-button.component.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-time-panes.directive.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-time-merge.ts","../../../../libs/components/src/lib/forms/date-time/internals/time-parse.ts","../../../../libs/components/src/lib/forms/date-time/internals/date-time-parse.ts","../../../../libs/components/src/lib/forms/date-time/internals/pending-date-time.ts","../../../../libs/components/src/lib/forms/date-time/date-time-input/headless/date-time-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-input/headless/date-time-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-input/date-time-input.component.ts","../../../../libs/components/src/lib/forms/date-time/date-time-input/date-time-input.component.html","../../../../libs/components/src/lib/forms/date-time/date-time-input/date-time-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/date-time-range-input-errors.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/headless/date-time-range-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/headless/date-time-range-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/date-time-range-input.component.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/date-time-range-input.component.html","../../../../libs/components/src/lib/forms/date-time/date-time-range-input/date-time-range-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/date-time-range-validators.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/duration-input-errors.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/headless/internals/duration-format.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/headless/duration-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/headless/duration-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/duration-input.component.ts","../../../../libs/components/src/lib/forms/date-time/duration-input/duration-input.component.html","../../../../libs/components/src/lib/forms/date-time/duration-input/duration-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/time-input/time-input-errors.ts","../../../../libs/components/src/lib/forms/date-time/time-input/headless/time-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/time-input/headless/time-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/time-input/time-input.component.ts","../../../../libs/components/src/lib/forms/date-time/time-input/time-input.component.html","../../../../libs/components/src/lib/forms/date-time/time-input/time-input.imports.ts","../../../../libs/components/src/lib/forms/date-time/time-range-input/time-range-input-errors.ts","../../../../libs/components/src/lib/forms/date-time/time-range-input/headless/time-range-input.directive.ts","../../../../libs/components/src/lib/forms/date-time/time-range-input/headless/time-range-input-field.directive.ts","../../../../libs/components/src/lib/forms/date-time/time-range-input/time-range-input.component.ts","../../../../libs/components/src/lib/forms/date-time/time-range-input/time-range-input.component.html","../../../../libs/components/src/lib/forms/date-time/time-range-input/time-range-input.imports.ts","../../../../libs/components/src/lib/forms/description/description.imports.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone-labels.ts","../../../../libs/components/src/lib/forms/dropzone/headless/dropzone-entry.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone-item.component.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone-item.component.html","../../../../libs/components/src/lib/forms/dropzone/dropzone-preview-styles.component.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone-readonly-styles.component.ts","../../../../libs/components/src/lib/forms/dropzone/headless/dropzone-errors.ts","../../../../libs/components/src/lib/forms/dropzone/headless/dropzone-validation.ts","../../../../libs/components/src/lib/forms/dropzone/headless/dropzone.directive.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone.component.ts","../../../../libs/components/src/lib/forms/dropzone/dropzone.component.html","../../../../libs/components/src/lib/forms/dropzone/dropzone.imports.ts","../../../../libs/components/src/lib/forms/dropzone/headless/dropzone-upload.ts","../../../../libs/components/src/lib/forms/form/focus-first-invalid-field.ts","../../../../libs/components/src/lib/forms/form/form.directive.ts","../../../../libs/components/src/lib/forms/form/form.imports.ts","../../../../libs/components/src/lib/forms/form-field/counter.component.ts","../../../../libs/components/src/lib/forms/form-field/form-field.imports.ts","../../../../libs/components/src/lib/forms/input/input-labels.ts","../../../../libs/components/src/lib/forms/input/number-input.component.ts","../../../../libs/components/src/lib/forms/input/number-input.component.html","../../../../libs/components/src/lib/tooltip/tooltip.imports.ts","../../../../libs/components/src/lib/forms/input/password-input.component.ts","../../../../libs/components/src/lib/forms/input/password-input.component.html","../../../../libs/components/src/lib/forms/input/input.imports.ts","../../../../libs/components/src/lib/forms/masked-input/masked-input.imports.ts","../../../../libs/components/src/lib/forms/masked-input/masks/card-mask.ts","../../../../libs/components/src/lib/forms/masked-input/masks/currency-mask.ts","../../../../libs/components/src/lib/forms/masked-input/masks/iban-mask.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor-errors.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/headless/multi-language-rich-text-editor.directive.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor-validators.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-labels.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-tools.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-core.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-features.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-history.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-inline-marks.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-keymap.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-lists.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-paste.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-errors.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-codec.token.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-history.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-token.ts","../../../../libs/components/src/lib/forms/form-field/form-field-rich-text-styles.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/rich-text-editor.directive.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/rich-text-editor-floating-toolbar.directive.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/headless/rich-text-editor-link-editor.directive.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-popup.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-popup.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-trigger-detection.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-trigger-source.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/rich-text-editor-triggers.directive.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.token.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-floating-toolbar.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-image-editor.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-image-editor.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.token.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-link-editor.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-palette.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-palette.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-palette.imports.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-token-providers.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-trigger.ts","../../../../libs/components/src/lib/menu/menu-errors.ts","../../../../libs/components/src/lib/internals/dom-order.ts","../../../../libs/components/src/lib/menu/headless/internals/menu-hover-intent.ts","../../../../libs/components/src/lib/menu/headless/menu.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-context-trigger.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-trigger.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-item.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-panel.directive.ts","../../../../libs/components/src/lib/menu/menu-search-styles.component.ts","../../../../libs/components/src/lib/menu/menu-search-spinner.component.ts","../../../../libs/components/src/lib/menu/menu-scrollbar.component.ts","../../../../libs/components/src/lib/menu/headless/menu-search.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-selection-group.tokens.ts","../../../../libs/components/src/lib/menu/headless/menu-selection-group.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-selection-item.directive.ts","../../../../libs/components/src/lib/menu/headless/menu-surface.directive.ts","../../../../libs/components/src/lib/menu/menu-checkbox-group.component.ts","../../../../libs/components/src/lib/menu/menu-checkbox-item.component.ts","../../../../libs/components/src/lib/menu/menu-selection-item.component.html","../../../../libs/components/src/lib/menu/menu-group-label.component.ts","../../../../libs/components/src/lib/menu/menu-item-submenu-icon.component.ts","../../../../libs/components/src/lib/menu/menu-item.component.ts","../../../../libs/components/src/lib/menu/menu-item.component.html","../../../../libs/components/src/lib/menu/menu-item-shortcut.component.ts","../../../../libs/components/src/lib/menu/menu-radio-group.component.ts","../../../../libs/components/src/lib/menu/menu-radio-item.component.ts","../../../../libs/components/src/lib/menu/menu-separator.component.ts","../../../../libs/components/src/lib/menu/menu.component.ts","../../../../libs/components/src/lib/menu/menu.component.html","../../../../libs/components/src/lib/menu/menu.imports.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-align-tool.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-align-tool.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-align.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-autoformat.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-autoformat.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-blockquote.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-tool-icons.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-blockquote.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-code-block.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-code-block.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-headings.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-heading-tool.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-heading-tool.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-heading.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/headless/internals/rich-text-editor-dom-links.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-link.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-default-tools.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-image-upload.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-image-styles.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-image-tool.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-image.util.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-image.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-styles.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-table.util.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-tool.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-table-tool.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/tools/rich-text-editor-table.provider.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-trigger-with-query.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor-triggers.imports.ts","../../../../libs/components/src/lib/toolbar/headless/toolbar.types.ts","../../../../libs/components/src/lib/toolbar/headless/toolbar.directive.ts","../../../../libs/components/src/lib/toolbar/toolbar.component.ts","../../../../libs/components/src/lib/toolbar/toolbar.imports.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-content-styles.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor.component.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor.component.html","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-editor.imports.ts","../../../../libs/components/src/lib/forms/rich-text-editor/rich-text-viewer.component.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/tools/multi-language-rich-text-editor-language-tool.component.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/tools/multi-language-rich-text-editor-language-tool.component.html","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/tools/multi-language-rich-text-editor-language.provider.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor.component.ts","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor.component.html","../../../../libs/components/src/lib/forms/multi-language-rich-text-editor/multi-language-rich-text-editor.imports.ts","../../../../libs/components/src/lib/forms/otp-input/headless/otp-input.directive.ts","../../../../libs/components/src/lib/forms/otp-input/otp-input.component.ts","../../../../libs/components/src/lib/forms/otp-input/otp-input.component.html","../../../../libs/components/src/lib/forms/otp-input/otp-input.imports.ts","../../../../libs/components/src/lib/forms/phone-input/headless/phone-countries.ts","../../../../libs/components/src/lib/forms/phone-input/phone-input-errors.ts","../../../../libs/components/src/lib/forms/phone-input/headless/phone-input.directive.ts","../../../../libs/components/src/lib/forms/phone-input/headless/phone-input-field.directive.ts","../../../../libs/components/src/lib/forms/phone-input/headless/phone-input-flag.directive.ts","../../../../libs/components/src/lib/forms/phone-input/phone-input-labels.ts","../../../../libs/components/src/lib/forms/select/select-errors.ts","../../../../libs/components/src/lib/internals/virtual-window.ts","../../../../libs/components/src/lib/forms/select/select-extras-styles.component.ts","../../../../libs/components/src/lib/forms/select/headless/select.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-all-option.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-listbox.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-option-group.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-option-template.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-option.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-options.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-search.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-state-templates.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-surface.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-trigger.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-value.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-viewport.directive.ts","../../../../libs/components/src/lib/forms/select/headless/select-virtual-option.directive.ts","../../../../libs/components/src/lib/forms/select/select-all-option.component.ts","../../../../libs/components/src/lib/forms/select/select-labels.ts","../../../../libs/components/src/lib/forms/select/select-option-group.component.ts","../../../../libs/components/src/lib/forms/select/select-option.component.ts","../../../../libs/components/src/lib/forms/select/select-option.component.html","../../../../libs/components/src/lib/forms/select/select-options-paging.ts","../../../../libs/components/src/lib/forms/select/select-options-from-query.ts","../../../../libs/components/src/lib/forms/select/select-options-from-v2-query.ts","../../../../libs/components/src/lib/forms/select/select-panel.component.ts","../../../../libs/components/src/lib/forms/select/select-virtual-option.component.ts","../../../../libs/components/src/lib/forms/select/select.component.ts","../../../../libs/components/src/lib/forms/select/select.component.html","../../../../libs/components/src/lib/forms/select/select.imports.ts","../../../../libs/components/src/lib/forms/phone-input/phone-input.component.ts","../../../../libs/components/src/lib/forms/phone-input/phone-input.component.html","../../../../libs/components/src/lib/forms/phone-input/phone-input.imports.ts","../../../../libs/components/src/lib/forms/rating/rating-errors.ts","../../../../libs/components/src/lib/forms/rating/headless/rating.directive.ts","../../../../libs/components/src/lib/forms/rating/headless/rating-icon.directive.ts","../../../../libs/components/src/lib/forms/rating/rating.component.ts","../../../../libs/components/src/lib/forms/rating/rating.component.html","../../../../libs/components/src/lib/forms/rating/rating.imports.ts","../../../../libs/components/src/lib/forms/selection-list/checkbox-group/checkbox-group-select-all.component.ts","../../../../libs/components/src/lib/forms/selection-list/checkbox-group/checkbox-group.component.ts","../../../../libs/components/src/lib/forms/selection-list/checkbox-group/checkbox-group.component.html","../../../../libs/components/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.ts","../../../../libs/components/src/lib/forms/selection-list/checkbox-group/checkbox-option.component.html","../../../../libs/components/src/lib/forms/selection-list/radio-group/radio-group.component.ts","../../../../libs/components/src/lib/forms/selection-list/radio-group/radio-group.component.html","../../../../libs/components/src/lib/forms/selection-list/radio-group/radio.component.ts","../../../../libs/components/src/lib/forms/selection-list/radio-group/radio.component.html","../../../../libs/components/src/lib/forms/selection-list/selection-list.imports.ts","../../../../libs/components/src/lib/forms/slider/slider-errors.ts","../../../../libs/components/src/lib/forms/slider/headless/internals/slider-engine.ts","../../../../libs/components/src/lib/forms/slider/headless/slider.tokens.ts","../../../../libs/components/src/lib/forms/slider/headless/range-slider.directive.ts","../../../../libs/components/src/lib/forms/slider/headless/slider-thumb-label.directive.ts","../../../../libs/components/src/lib/forms/slider/headless/slider-thumb.directive.ts","../../../../libs/components/src/lib/forms/slider/headless/slider-track.directive.ts","../../../../libs/components/src/lib/forms/slider/headless/slider.directive.ts","../../../../libs/components/src/lib/forms/slider/slider-labels.ts","../../../../libs/components/src/lib/forms/slider/range-slider.component.ts","../../../../libs/components/src/lib/forms/slider/range-slider.component.html","../../../../libs/components/src/lib/forms/slider/slider.component.ts","../../../../libs/components/src/lib/forms/slider/slider.component.html","../../../../libs/components/src/lib/forms/slider/slider.imports.ts","../../../../libs/components/src/lib/forms/switch/headless/switch.directive.ts","../../../../libs/components/src/lib/forms/switch/switch.component.ts","../../../../libs/components/src/lib/forms/switch/switch.component.html","../../../../libs/components/src/lib/forms/switch/switch.imports.ts","../../../../libs/components/src/lib/forms/tag-input/tag-input-errors.ts","../../../../libs/components/src/lib/forms/tag-input/headless/tag-input.directive.ts","../../../../libs/components/src/lib/forms/tag-input/headless/tag-input-field.directive.ts","../../../../libs/components/src/lib/forms/tag-input/tag-input.component.ts","../../../../libs/components/src/lib/forms/tag-input/tag-input.component.html","../../../../libs/components/src/lib/forms/tag-input/tag-input.imports.ts","../../../../libs/components/src/lib/forms/textarea/headless/internals/textarea-autosize.ts","../../../../libs/components/src/lib/forms/form-field/form-field-textarea-styles.component.ts","../../../../libs/components/src/lib/forms/textarea/textarea-autosize-styles.component.ts","../../../../libs/components/src/lib/forms/textarea/headless/textarea.directive.ts","../../../../libs/components/src/lib/forms/textarea/textarea.component.ts","../../../../libs/components/src/lib/forms/textarea/textarea.component.html","../../../../libs/components/src/lib/forms/textarea/textarea.imports.ts","../../../../libs/components/src/lib/grid/grid-errors.ts","../../../../libs/components/src/lib/grid/headless/grid-config.ts","../../../../libs/components/src/lib/grid/headless/grid.tokens.ts","../../../../libs/components/src/lib/grid/headless/internals/auto-scroll.ts","../../../../libs/components/src/lib/grid/headless/internals/grid-math.ts","../../../../libs/components/src/lib/grid/headless/internals/layout-engine.ts","../../../../libs/components/src/lib/grid/headless/internals/responsive.ts","../../../../libs/components/src/lib/grid/headless/internals/serialization.ts","../../../../libs/components/src/lib/grid/headless/grid.directive.ts","../../../../libs/components/src/lib/grid/headless/grid-item.directive.ts","../../../../libs/components/src/lib/grid/headless/grid-drag.directive.ts","../../../../libs/components/src/lib/grid/headless/grid-resize.directive.ts","../../../../libs/components/src/lib/grid/headless/grid.types.ts","../../../../libs/components/src/lib/grid/headless/grid-adapter.ts","../../../../libs/components/src/lib/grid/grid-labels.ts","../../../../libs/components/src/lib/grid/grid-item-toolbar.component.ts","../../../../libs/components/src/lib/grid/grid-item.component.ts","../../../../libs/components/src/lib/grid/grid-item-default-actions.component.ts","../../../../libs/components/src/lib/grid/grid.component.ts","../../../../libs/components/src/lib/grid/grid-debug.component.ts","../../../../libs/components/src/lib/grid/grid.imports.ts","../../../../libs/components/src/lib/masonry/masonry-errors.ts","../../../../libs/components/src/lib/masonry/headless/masonry.tokens.ts","../../../../libs/components/src/lib/masonry/headless/masonry-item.directive.ts","../../../../libs/components/src/lib/masonry/masonry-styles.component.ts","../../../../libs/components/src/lib/masonry/headless/internals/masonry-layout.ts","../../../../libs/components/src/lib/masonry/headless/internals/masonry-resize-settled.ts","../../../../libs/components/src/lib/masonry/headless/masonry.directive.ts","../../../../libs/components/src/lib/masonry/masonry.imports.ts","../../../../libs/components/src/lib/notification/notification-config.ts","../../../../libs/components/src/lib/notification/notification-errors.ts","../../../../libs/components/src/lib/notification/headless/notification.directive.ts","../../../../libs/components/src/lib/notification/headless/notification-action.directive.ts","../../../../libs/components/src/lib/notification/headless/notification-dismiss.directive.ts","../../../../libs/components/src/lib/notification/notification-stack-context.token.ts","../../../../libs/components/src/lib/notification/headless/notification-stack.directive.ts","../../../../libs/components/src/lib/notification/headless/notification-item.directive.ts","../../../../libs/components/src/lib/notification/headless/notification-swipe-to-dismiss.directive.ts","../../../../libs/components/src/lib/notification/notification-labels.ts","../../../../libs/components/src/lib/notification/notification-promise.ts","../../../../libs/components/src/lib/notification/notification-ref.ts","../../../../libs/components/src/lib/notification/notification.component.ts","../../../../libs/components/src/lib/notification/notification.component.html","../../../../libs/components/src/lib/notification/notification-stack.component.ts","../../../../libs/components/src/lib/notification/notification-stack.component.html","../../../../libs/components/src/lib/notification/notification-manager.ts","../../../../libs/components/src/lib/notification/notification.imports.ts","../../../../libs/components/src/lib/pagination/pagination-labels.ts","../../../../libs/components/src/lib/pagination/paginate.ts","../../../../libs/components/src/lib/pagination/headless/pagination.directive.ts","../../../../libs/components/src/lib/pagination/page-size-select.component.ts","../../../../libs/components/src/lib/pagination/pagination.component.ts","../../../../libs/components/src/lib/pagination/pagination.component.html","../../../../libs/components/src/lib/pagination/pagination.imports.ts","../../../../libs/components/src/lib/pagination/seo/pagination-seo.directive.ts","../../../../libs/components/src/lib/progress-steps/progress-step.component.ts","../../../../libs/components/src/lib/progress-steps/progress-step.component.html","../../../../libs/components/src/lib/progress-steps/progress-steps.component.ts","../../../../libs/components/src/lib/progress-steps/progress-steps.imports.ts","../../../../libs/components/src/lib/query-error/query-error-errors.ts","../../../../libs/components/src/lib/query-error/headless/query-error.tokens.ts","../../../../libs/components/src/lib/query-error/headless/query-error-slots.directive.ts","../../../../libs/components/src/lib/query-error/query-error-labels.ts","../../../../libs/components/src/lib/query-error/headless/query-error.directive.ts","../../../../libs/components/src/lib/query-error/query-error-legacy.ts","../../../../libs/components/src/lib/query-error/query-error.component.ts","../../../../libs/components/src/lib/query-error/query-error.component.html","../../../../libs/components/src/lib/query-error/query-error.imports.ts","../../../../libs/components/src/lib/scheduler/scheduler-errors.ts","../../../../libs/components/src/lib/scheduler/scheduler-labels.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-tree.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler.directive.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-agenda.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler-agenda.directive.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler-edit-surface.directive.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler-features.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-month.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler-month.directive.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-business-hours.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-clock.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-time-grid.ts","../../../../libs/components/src/lib/scheduler/headless/scheduler-time-grid.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-action-add-appointment.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-action-add-sub-appointment.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-action-delete.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-appointment-styles.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-agenda-view.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-agenda-view.component.html","../../../../libs/components/src/lib/scheduler/scheduler-appointment-drag-styles.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-appointment-drag.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-chain-count.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-chain-count.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-color-dot.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-color-dot.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-location.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-location.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-time-range.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-time-range.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-title.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-badge-title.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-color.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-color.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-description.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-description.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-location.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-location.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-time-range.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-time-range.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-title.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-title.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-surface.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-surface.component.html","../../../../libs/components/src/lib/scheduler/scheduler-swipe-navigation.directive.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-surface.token.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-drag-gesture.ts","../../../../libs/components/src/lib/scheduler/headless/internals/scheduler-keyboard.ts","../../../../libs/components/src/lib/scheduler/scheduler-month-view.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-month-view.component.html","../../../../libs/components/src/lib/scheduler/scheduler-time-grid-view.component.ts","../../../../libs/components/src/lib/scheduler/scheduler-time-grid-view.component.html","../../../../libs/components/src/lib/scheduler/scheduler.component.ts","../../../../libs/components/src/lib/scheduler/scheduler.component.html","../../../../libs/components/src/lib/scheduler/scheduler.imports.ts","../../../../libs/components/src/lib/scheduler/scheduler-edit-surface.provider.ts","../../../../libs/components/src/lib/standings/standings-labels.ts","../../../../libs/components/src/lib/standings/standings-errors.ts","../../../../libs/components/src/lib/standings/headless/standings.directive.ts","../../../../libs/components/src/lib/standings/headless/standings-pick.directive.ts","../../../../libs/components/src/lib/standings/headless/standings-pick-mark.directive.ts","../../../../libs/components/src/lib/standings/integrations/ethlete.ts","../../../../libs/components/src/lib/standings/standings-pick.component.ts","../../../../libs/components/src/lib/standings/standings-pick.component.html","../../../../libs/components/src/lib/standings/standings.component.ts","../../../../libs/components/src/lib/standings/standings.component.html","../../../../libs/components/src/lib/standings/standings.imports.ts","../../../../libs/components/src/lib/stream/consent/headless/stream-consent.directive.ts","../../../../libs/components/src/lib/stream/consent/headless/stream-consent-accept.directive.ts","../../../../libs/components/src/lib/stream/consent/stream-consent-config.ts","../../../../libs/components/src/lib/stream/stream-labels.ts","../../../../libs/components/src/lib/stream/stream-overlay-card-styles.component.ts","../../../../libs/components/src/lib/stream/consent/stream-consent.component.ts","../../../../libs/components/src/lib/stream/error/headless/stream-player-error.directive.ts","../../../../libs/components/src/lib/stream/error/stream-player-error-config.ts","../../../../libs/components/src/lib/stream/error/stream-player-error.component.ts","../../../../libs/components/src/lib/stream/loading/stream-player-loading-config.ts","../../../../libs/components/src/lib/stream/loading/stream-player-loading.component.ts","../../../../libs/components/src/lib/stream/pip/headless/internals/pip-animation.ts","../../../../libs/components/src/lib/stream/pip/pip-chrome.config.ts","../../../../libs/components/src/lib/stream/stream-manager-styles.component.ts","../../../../libs/components/src/lib/stream/stream-manager.ts","../../../../libs/components/src/lib/stream/pip-manager.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-chrome-ref.token.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-entry.token.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-back.directive.ts","../../../../libs/components/src/lib/stream/stream-manager.types.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-bring-back.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-cell.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-chrome-animations.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-chrome-state.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-collapse-overlay.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-title-bar-template.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-title-bar.directive.ts","../../../../libs/components/src/lib/stream/stream-pip.token.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-window-aspect-ratio.token.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-window-params.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/internals/pip-window-position.ts","../../../../libs/components/src/lib/stream/pip/headless/internals/pip-window-size.ts","../../../../libs/components/src/lib/stream/pip/pip-window.component.ts","../../../../libs/components/src/lib/stream/pip/pip-window.component.html","../../../../libs/components/src/lib/stream/pip/headless/pip-close.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-grid-toggle.directive.ts","../../../../libs/components/src/lib/stream/pip/headless/pip-stage.directive.ts","../../../../libs/components/src/lib/stream/pip/pip-player.component.ts","../../../../libs/components/src/lib/stream/pip/pip-chrome.component.ts","../../../../libs/components/src/lib/stream/pip/pip-chrome.component.html","../../../../libs/components/src/lib/stream/pip/pip-slot-placeholder-config.ts","../../../../libs/components/src/lib/stream/pip/pip-slot-placeholder.component.ts","../../../../libs/components/src/lib/stream/stream-errors.ts","../../../../libs/components/src/lib/stream/pip-chrome-manager.ts","../../../../libs/components/src/lib/stream/stream-config.ts","../../../../libs/components/src/lib/stream/stream-player.ts","../../../../libs/components/src/lib/stream/stream.types.ts","../../../../libs/components/src/lib/stream/stream-player-slot.ts","../../../../libs/components/src/lib/stream/stream-player-slot-styles.component.ts","../../../../libs/components/src/lib/stream/stream-player-slot.directive.ts","../../../../libs/components/src/lib/stream/platform/dailymotion/headless/dailymotion-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/dailymotion/headless/dailymotion-player.directive.ts","../../../../libs/components/src/lib/stream/platform/dailymotion/dailymotion-player.component.ts","../../../../libs/components/src/lib/stream/platform/dailymotion/dailymotion-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/facebook/headless/facebook-player-params.directive.ts","../../../../libs/components/src/lib/stream/stream-script-loader.ts","../../../../libs/components/src/lib/stream/platform/facebook/headless/facebook-player.directive.ts","../../../../libs/components/src/lib/stream/platform/facebook/facebook-player.component.ts","../../../../libs/components/src/lib/stream/platform/facebook/facebook-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/kick/headless/kick-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/kick/headless/kick-player.directive.ts","../../../../libs/components/src/lib/stream/platform/kick/kick-player.component.ts","../../../../libs/components/src/lib/stream/platform/kick/kick-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/soop/headless/soop-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/soop/headless/soop-player.directive.ts","../../../../libs/components/src/lib/stream/platform/soop/soop-player.component.ts","../../../../libs/components/src/lib/stream/platform/soop/soop-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/tiktok/headless/tiktok-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/tiktok/headless/tiktok-player.directive.ts","../../../../libs/components/src/lib/stream/platform/tiktok/tiktok-player.component.ts","../../../../libs/components/src/lib/stream/platform/tiktok/tiktok-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/twitch/headless/twitch-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/twitch/headless/twitch-player.directive.ts","../../../../libs/components/src/lib/stream/platform/twitch/twitch-player.component.ts","../../../../libs/components/src/lib/stream/platform/twitch/twitch-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/vimeo/headless/vimeo-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/vimeo/headless/vimeo-player.directive.ts","../../../../libs/components/src/lib/stream/platform/vimeo/vimeo-player.component.ts","../../../../libs/components/src/lib/stream/platform/vimeo/vimeo-player-slot.component.ts","../../../../libs/components/src/lib/stream/platform/youtube/headless/youtube-player-params.directive.ts","../../../../libs/components/src/lib/stream/platform/youtube/headless/youtube-player.directive.ts","../../../../libs/components/src/lib/stream/platform/youtube/youtube-player.component.ts","../../../../libs/components/src/lib/stream/platform/youtube/headless/youtube-player-slot.directive.ts","../../../../libs/components/src/lib/stream/platform/youtube/youtube-player-slot.component.ts","../../../../libs/components/src/lib/stream/stream-pip.provider.ts","../../../../libs/components/src/lib/stream/stream.imports.ts","../../../../libs/components/src/lib/table/headless/table-column-state.ts","../../../../libs/components/src/lib/table/table-errors.ts","../../../../libs/components/src/lib/table/headless/table-csv-export.ts","../../../../libs/components/src/lib/table/headless/table-csv-rows-from-pages.ts","../../../../libs/components/src/lib/table/headless/table-features.ts","../../../../libs/components/src/lib/table/headless/table-filter.ts","../../../../libs/components/src/lib/table/headless/table-quick-filter.ts","../../../../libs/components/src/lib/table/headless/table-footer.directive.ts","../../../../libs/components/src/lib/table/headless/table-labels.ts","../../../../libs/components/src/lib/table/headless/table-rows-source.ts","../../../../libs/components/src/lib/table/headless/table-rows-from-query.ts","../../../../libs/components/src/lib/table/headless/table-rows-from-v2-query.ts","../../../../libs/components/src/lib/table/headless/table-sort.ts","../../../../libs/components/src/lib/table/headless/table-state-url.ts","../../../../libs/components/src/lib/table/headless/table-state-storage.ts","../../../../libs/components/src/lib/table/table-card-surface.directive.ts","../../../../libs/components/src/lib/table/table-row-box-styles.component.ts","../../../../libs/components/src/lib/table/table-sort-priority-styles.component.ts","../../../../libs/components/src/lib/table/table.component.ts","../../../../libs/components/src/lib/table/table.component.html","../../../../libs/components/src/lib/table/headless/table-state-persistence.directive.ts","../../../../libs/components/src/lib/table/headless/table-templates.ts","../../../../libs/components/src/lib/table/headless/index.ts","../../../../libs/components/src/lib/table/table-cell-error-tooltip.directive.ts","../../../../libs/components/src/lib/table/table-cell-error-mark.component.ts","../../../../libs/components/src/lib/table/table-column-chooser.component.ts","../../../../libs/components/src/lib/table/table-column-chooser.component.html","../../../../libs/components/src/lib/table/table-column-menu.directive.ts","../../../../libs/components/src/lib/table/table-column-menu-trigger.component.ts","../../../../libs/components/src/lib/table/table-column-menu-trigger.component.html","../../../../libs/components/src/lib/table/table-csv-export.directive.ts","../../../../libs/components/src/lib/table/table-detail-styles.component.ts","../../../../libs/components/src/lib/table/table-drag-scroll-styles.component.ts","../../../../libs/components/src/lib/table/table-drag-scroll.directive.ts","../../../../libs/components/src/lib/table/table-keyboard-nav.directive.ts","../../../../libs/components/src/lib/table/table-row-detail.component.ts","../../../../libs/components/src/lib/table/table-row-expansion.directive.ts","../../../../libs/components/src/lib/table/table-expander-cell.component.ts","../../../../libs/components/src/lib/table/table-filters.directive.ts","../../../../libs/components/src/lib/table/table-filter-trigger.component.ts","../../../../libs/components/src/lib/table/table-filter-trigger.component.html","../../../../libs/components/src/lib/table/table-group-headers.directive.ts","../../../../libs/components/src/lib/table/table-group-header-row.component.ts","../../../../libs/components/src/lib/table/table-inline-edit-styles.component.ts","../../../../libs/components/src/lib/table/table-inline-edit.directive.ts","../../../../libs/components/src/lib/table/table-page-sticky-header-styles.component.ts","../../../../libs/components/src/lib/table/table-page-sticky-header.directive.ts","../../../../libs/components/src/lib/table/table-reorder.directive.ts","../../../../libs/components/src/lib/table/table-reorder-overlay.component.ts","../../../../libs/components/src/lib/table/table-row-router-link.directive.ts","../../../../libs/components/src/lib/table/table-resize.directive.ts","../../../../libs/components/src/lib/table/table-resize-grip.component.ts","../../../../libs/components/src/lib/table/table-selection.directive.ts","../../../../libs/components/src/lib/table/table-select-cell.component.ts","../../../../libs/components/src/lib/table/table-sticky-columns.directive.ts","../../../../libs/components/src/lib/table/table-skeleton.directive.ts","../../../../libs/components/src/lib/table/table-skeleton-rows.component.ts","../../../../libs/components/src/lib/table/table-virtual-scroll-styles.component.ts","../../../../libs/components/src/lib/table/table-virtual-scroll.directive.ts","../../../../libs/components/src/lib/table/table.imports.ts","../../../../libs/components/src/lib/tabs/tab-errors.ts","../../../../libs/components/src/lib/tabs/headless/tab-bar.tokens.ts","../../../../libs/components/src/lib/tabs/headless/tab-bar-trigger.directive.ts","../../../../libs/components/src/lib/tabs/headless/tab-bar-underline.directive.ts","../../../../libs/components/src/lib/tabs/headless/tab-bar.types.ts","../../../../libs/components/src/lib/tabs/headless/tab-bar.directive.ts","../../../../libs/components/src/lib/tabs/nav-tabs/headless/nav-tabs.tokens.ts","../../../../libs/components/src/lib/tabs/nav-tabs/headless/nav-tab-link.directive.ts","../../../../libs/components/src/lib/tabs/nav-tabs/headless/nav-tabs-registry.ts","../../../../libs/components/src/lib/tabs/nav-tabs/headless/nav-tabs-outlet.directive.ts","../../../../libs/components/src/lib/tabs/nav-tabs/headless/nav-tabs.directive.ts","../../../../libs/components/src/lib/tabs/tab-bar-styles.component.ts","../../../../libs/components/src/lib/tabs/nav-tabs/nav-tab-link-styles.component.ts","../../../../libs/components/src/lib/tabs/nav-tabs/nav-tab-link.component.ts","../../../../libs/components/src/lib/tabs/nav-tabs/nav-tabs-outlet.component.ts","../../../../libs/components/src/lib/tabs/tab-sizes.ts","../../../../libs/components/src/lib/tabs/nav-tabs/nav-tabs.component.ts","../../../../libs/components/src/lib/tabs/nav-tabs/overlay-nav-tab-link.component.ts","../../../../libs/components/src/lib/tabs/tabs/headless/tab-group.tokens.ts","../../../../libs/components/src/lib/tabs/tabs/headless/tab-group.directive.ts","../../../../libs/components/src/lib/tabs/tabs/headless/tab-panel.directive.ts","../../../../libs/components/src/lib/tabs/tabs/headless/tab-trigger.directive.ts","../../../../libs/components/src/lib/tabs/tabs/tab-label.directive.ts","../../../../libs/components/src/lib/tabs/tabs/tab.component.ts","../../../../libs/components/src/lib/tabs/tabs/tab-group.component.ts","../../../../libs/components/src/lib/tabs/tabs.imports.ts","../../../../libs/components/src/lib/timeline/timeline-item.component.ts","../../../../libs/components/src/lib/timeline/timeline-item.component.html","../../../../libs/components/src/lib/timeline/timeline.component.ts","../../../../libs/components/src/lib/timeline/timeline.imports.ts","../../../../libs/components/src/lib/tree/tree-errors.ts","../../../../libs/components/src/lib/tree/headless/internals/tree-data.ts","../../../../libs/components/src/lib/tree/headless/tree.types.ts","../../../../libs/components/src/lib/tree/headless/tree.directive.ts","../../../../libs/components/src/lib/tree/headless/tree-node.directive.ts","../../../../libs/components/src/lib/tree/headless/tree-node-def.directive.ts","../../../../libs/components/src/lib/tree/tree-marker.component.ts","../../../../libs/components/src/lib/tree/tree.component.ts","../../../../libs/components/src/lib/tree/tree.component.html","../../../../libs/components/src/lib/tree/tree.imports.ts","../../../../libs/components/src/lib/version.ts","../../../../libs/components/src/ethlete-components.ts"],"sourcesContent":["// codes 3600-3699\nexport const ACCORDION_ERROR_CODES = {\n  /** An accordion part (`etAccordionTrigger`, `etAccordionPanel`, a slot template) was used outside an `[etAccordion]`. */\n  PART_OUTSIDE_ACCORDION: 3600,\n  /** An `[etAccordion]` rendered no `etAccordionTrigger`, so nothing can expand it. */\n  MISSING_TRIGGER: 3601,\n  /** An `[etAccordion]` rendered no `etAccordionPanel`, so it has nothing to expand. */\n  MISSING_PANEL: 3602,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { AccordionDirective } from './accordion.directive';\nimport { AccordionGroupDirective } from './accordion-group.directive';\n\nexport const ACCORDION_TOKEN = new InjectionToken<AccordionDirective>('ACCORDION_TOKEN');\n\nexport const ACCORDION_GROUP_TOKEN = new InjectionToken<AccordionGroupDirective>('ACCORDION_GROUP_TOKEN');\n","import { Directive, booleanAttribute, computed, effect, input, signal, untracked } from '@angular/core';\nimport { ACCORDION_GROUP_TOKEN } from './accordion.tokens';\nimport { AccordionDirective } from './accordion.directive';\n\n/**\n * A set of accordions that know about each other: optionally single-open (`autoCloseOthers`), and\n * navigable between headers with the arrow keys - the part of the ARIA accordion pattern a lone\n * disclosure can't provide.\n *\n * Purely behavioral; the default `et-accordion-group` adds the chrome. Accordions register\n * themselves, so nesting one inside another group's panel does the expected thing (it joins the\n * nearest group).\n *\n * @example\n * <div etAccordionGroup autoCloseOthers>\n *   <et-accordion label=\"Shipping\">…</et-accordion>\n *   <et-accordion label=\"Returns\">…</et-accordion>\n * </div>\n */\n@Directive({\n  selector: '[etAccordionGroup]',\n  exportAs: 'etAccordionGroup',\n  providers: [{ provide: ACCORDION_GROUP_TOKEN, useExisting: AccordionGroupDirective }],\n  host: {\n    '(keydown)': 'moveFocusOnArrowKeys($event)',\n  },\n})\nexport class AccordionGroupDirective {\n  /**\n   * Keep at most one panel open: expanding one collapses the rest. Off by default, which lets readers\n   * compare two sections side by side - turn it on when the panels are long enough that several open\n   * at once buries the headers below.\n   */\n  public autoCloseOthers = input(false, { transform: booleanAttribute });\n\n  /**\n   * Keep at least one panel open: collapsing the last open one does nothing. Pair it with\n   * `autoCloseOthers` for a radio-like group where exactly one section is open at a time.\n   *\n   * It gates the user's own toggle - the trigger, and `toggle()`. `close()`, `closeAll()` and writing\n   * `[(isOpen)]` still collapse the panel, the same way they ignore `disabled`: this is about what the\n   * header does when clicked, not a lock on the state.\n   *\n   * A group that starts with nothing open stays that way until the user opens something; it does not\n   * force a panel open to satisfy the rule.\n   */\n  public preventCloseLast = input(false, { transform: booleanAttribute });\n\n  /**\n   * Move focus between headers with `ArrowUp`/`ArrowDown` (and jump with `Home`/`End`), as the ARIA\n   * accordion pattern suggests. Turn off if the surrounding UI needs those keys - a group inside a\n   * scroll container that pages with the arrow keys, for instance. @default true\n   */\n  public arrowKeyNavigation = input(true, { transform: booleanAttribute });\n\n  private registeredAccordions = signal<AccordionDirective[]>([]);\n\n  /**\n   * The group's accordions in DOM order. Registration order follows creation order, which is not the\n   * same thing once a `@for` re-orders its items, so this sorts by document position instead - the\n   * order the arrow keys have to follow.\n   */\n  public accordions = computed(() =>\n    [...this.registeredAccordions()].sort((a, b) =>\n      a.elementRef.nativeElement.compareDocumentPosition(b.elementRef.nativeElement) & Node.DOCUMENT_POSITION_FOLLOWING\n        ? -1\n        : 1,\n    ),\n  );\n\n  /**\n   * The accordions that were open the last time single-open ran. `autoCloseOthers` needs to know\n   * which panel *just* opened - not merely which ones are open - and that is a diff against the\n   * previous state, so it is kept outside the reactive graph rather than being derived from it.\n   */\n  private previouslyOpen = new Set<AccordionDirective>();\n\n  constructor() {\n    effect(() => {\n      // read every child's open state so this re-runs whenever any of them toggles\n      const openAccordions = this.accordions().filter((accordion) => accordion.isOpen());\n      const autoCloseOthers = this.autoCloseOthers();\n\n      untracked(() => this.enforceSingleOpen(openAccordions, autoCloseOthers));\n    });\n  }\n\n  /** Collapse every accordion in the group. */\n  public closeAll() {\n    for (const accordion of this.accordions()) {\n      accordion.close();\n    }\n  }\n\n  /** Expand every accordion in the group. Does nothing while `autoCloseOthers` is on - it would immediately undo itself. */\n  public openAll() {\n    if (this.autoCloseOthers()) return;\n\n    for (const accordion of this.accordions()) {\n      accordion.open();\n    }\n  }\n\n  /**\n   * @internal Whether an accordion's own toggle may collapse it - see {@link preventCloseLast}. Asked\n   * by the accordion rather than enforced from here, because \"the user tried to close it\" is only\n   * visible at the toggle; from the group's side a closed panel is just a closed panel.\n   */\n  public canCollapse(accordion: AccordionDirective) {\n    if (!this.preventCloseLast()) return true;\n\n    const open = this.accordions().filter((candidate) => candidate.isOpen());\n\n    return open.length > 1 || !open.includes(accordion);\n  }\n\n  /** @internal */\n  public registerAccordion(accordion: AccordionDirective) {\n    this.registeredAccordions.update((accordions) => [...accordions, accordion]);\n  }\n\n  /** @internal */\n  public unregisterAccordion(accordion: AccordionDirective) {\n    this.registeredAccordions.update((accordions) => accordions.filter((a) => a !== accordion));\n    this.previouslyOpen.delete(accordion);\n  }\n\n  /**\n   * Arrow-key navigation across the headers. Only acts when the key came from a registered trigger, so\n   * the same keys keep working normally inside panel content (a text field, a nested scroller).\n   */\n  protected moveFocusOnArrowKeys(event: KeyboardEvent) {\n    if (!this.arrowKeyNavigation()) return;\n\n    const accordions = this.accordions();\n    const target = event.target;\n    const currentIndex = accordions.findIndex((accordion) => accordion.trigger()?.elementRef.nativeElement === target);\n\n    if (currentIndex === -1) return;\n\n    const nextIndex = this.resolveNextIndex(event.key, currentIndex);\n\n    if (nextIndex === null) return;\n\n    event.preventDefault();\n    accordions[nextIndex]?.trigger()?.elementRef.nativeElement.focus();\n  }\n\n  private enforceSingleOpen(openAccordions: AccordionDirective[], autoCloseOthers: boolean) {\n    if (!autoCloseOthers || openAccordions.length <= 1) {\n      this.previouslyOpen = new Set(openAccordions);\n\n      return;\n    }\n\n    // The panel that just opened wins. When several were already open - two `isOpenByDefault`, or\n    // `autoCloseOthers` switched on later - the first in DOM order does.\n    const keep = openAccordions.find((accordion) => !this.previouslyOpen.has(accordion)) ?? openAccordions[0];\n\n    // Record the settled state before closing anything: `close()` re-triggers the effect, and it must\n    // not read a stale set and treat the survivor as freshly opened all over again.\n    this.previouslyOpen = keep ? new Set([keep]) : new Set();\n\n    for (const accordion of openAccordions) {\n      if (accordion !== keep) {\n        accordion.close();\n      }\n    }\n  }\n\n  /** The header to focus for a navigation key, or `null` for any other key. Wraps around at both ends. */\n  private resolveNextIndex(key: string, currentIndex: number) {\n    const count = this.accordions().length;\n\n    switch (key) {\n      case 'ArrowDown':\n        return (currentIndex + 1) % count;\n      case 'ArrowUp':\n        return (currentIndex - 1 + count) % count;\n      case 'Home':\n        return 0;\n      case 'End':\n        return count - 1;\n      default:\n        return null;\n    }\n  }\n}\n","import { Directive, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { ACCORDION_ERROR_CODES } from '../accordion-errors';\nimport { ACCORDION_TOKEN } from './accordion.tokens';\n\n/**\n * The collapsible region of an `[etAccordion]`. Labelled by the trigger, and `inert` while collapsed\n * so nothing inside it can be focused, clicked or read out.\n *\n * It carries no styles: `data-open` is the hook to hang the collapse on (the default `et-accordion`\n * animates a `grid-template-rows` track off it, and hides the collapsed panel from find-in-page with\n * `visibility`). Keeping the content mounted while collapsed is deliberate - see\n * `etAccordionContent` for the deferred alternative.\n */\n@Directive({\n  selector: '[etAccordionPanel]',\n  exportAs: 'etAccordionPanel',\n  host: {\n    role: 'region',\n    '[attr.id]': 'accordion?.PANEL_ID',\n    '[attr.aria-labelledby]': 'accordion?.TRIGGER_ID',\n    '[attr.data-open]': 'accordion?.isOpen() ? \"\" : null',\n    '[attr.inert]': 'accordion?.isOpen() ? null : \"\"',\n  },\n})\nexport class AccordionPanelDirective {\n  protected accordion = inject(ACCORDION_TOKEN, { optional: true });\n  private hostElement = injectHostElement();\n\n  constructor() {\n    this.accordion?.registerPanel(this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.accordion) {\n          throw new RuntimeError(\n            ACCORDION_ERROR_CODES.PART_OUTSIDE_ACCORDION,\n            '[AccordionPanelDirective] etAccordionPanel must be placed inside an [etAccordion] element (e.g. <et-accordion>).',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, WritableSignal, inject } from '@angular/core';\n\n/**\n * Points a \"one of these at a time\" slot at `instance`, and clears it again when `instance` is\n * destroyed - so a conditionally rendered trigger, panel or slot template can come and go without\n * leaving a dead reference behind.\n *\n * Must be called from the registering directive's constructor: it takes its teardown from *that*\n * directive's `DestroyRef`, not the accordion's.\n */\nexport const registerPart = <T>(target: WritableSignal<T | null> | undefined, instance: T) => {\n  if (!target) return;\n\n  target.set(instance);\n\n  inject(DestroyRef).onDestroy(() => {\n    if (target() === instance) {\n      target.set(null);\n    }\n  });\n};\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { ACCORDION_ERROR_CODES } from '../accordion-errors';\nimport { ACCORDION_TOKEN } from './accordion.tokens';\nimport { registerPart } from './internals/register-part';\n\n/** `'AccordionLabelDirective'` → the `etAccordionLabel` selector it is applied with. */\nconst selectorOf = (directiveName: string) => `et${directiveName.replace('Directive', '')}`;\n\nconst assertInsideAccordion = ({\n  accordion,\n  directiveName,\n  element,\n}: {\n  accordion: unknown;\n  directiveName: string;\n  element: Comment;\n}) => {\n  if (ngDevMode) {\n    afterNextRender(() => {\n      if (!accordion) {\n        throw new RuntimeError(\n          ACCORDION_ERROR_CODES.PART_OUTSIDE_ACCORDION,\n          `[${directiveName}] ${selectorOf(directiveName)} must be placed inside an [etAccordion] element ` +\n            '(e.g. <et-accordion>).',\n          { element },\n        );\n      }\n    });\n  }\n};\n\n/**\n * Replaces the default accordion's plain-text `label` with a template, for a header that needs markup\n * - an icon, a badge, a count.\n *\n * @example\n * <et-accordion>\n *   <ng-template etAccordionLabel>\n *     <et-icon name=\"warning\" /> Unsaved changes\n *   </ng-template>\n *   …\n * </et-accordion>\n */\n@Directive({\n  selector: 'ng-template[etAccordionLabel]',\n  exportAs: 'etAccordionLabel',\n})\nexport class AccordionLabelDirective {\n  private accordion = inject(ACCORDION_TOKEN, { optional: true });\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerPart(this.accordion?.labelTemplate, this);\n\n    assertInsideAccordion({\n      accordion: this.accordion,\n      directiveName: 'AccordionLabelDirective',\n      element: this.hostElement,\n    });\n  }\n}\n\n/**\n * Secondary header content, rendered between the label and the chevron of the default accordion - a\n * summary of what's inside (\"3 items\", \"Optional\"), not a second label.\n */\n@Directive({\n  selector: 'ng-template[etAccordionHint]',\n  exportAs: 'etAccordionHint',\n})\nexport class AccordionHintDirective {\n  private accordion = inject(ACCORDION_TOKEN, { optional: true });\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerPart(this.accordion?.hintTemplate, this);\n\n    assertInsideAccordion({\n      accordion: this.accordion,\n      directiveName: 'AccordionHintDirective',\n      element: this.hostElement,\n    });\n  }\n}\n\n/**\n * Panel content that is only created the first time the accordion expands - use it instead of\n * projecting the content directly when the panel holds something expensive (a table, a chart, a\n * component that fetches).\n *\n * Projected content (plain children of `<et-accordion>`) is created with its parent, whether the\n * panel ever opens or not; a template isn't. Once created it stays mounted, so collapsing keeps the\n * content's state and has something to animate.\n *\n * @example\n * <et-accordion label=\"Revenue\">\n *   <ng-template etAccordionContent>\n *     <app-revenue-chart />\n *   </ng-template>\n * </et-accordion>\n */\n@Directive({\n  selector: 'ng-template[etAccordionContent]',\n  exportAs: 'etAccordionContent',\n})\nexport class AccordionContentDirective {\n  private accordion = inject(ACCORDION_TOKEN, { optional: true });\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerPart(this.accordion?.contentTemplate, this);\n\n    assertInsideAccordion({\n      accordion: this.accordion,\n      directiveName: 'AccordionContentDirective',\n      element: this.hostElement,\n    });\n  }\n}\n","import { Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { ACCORDION_ERROR_CODES } from '../accordion-errors';\nimport { ACCORDION_TOKEN } from './accordion.tokens';\n\n/**\n * The header control that expands and collapses its `[etAccordion]`. Wires up `aria-expanded`,\n * `aria-controls` and the id the panel points back at, and toggles on click.\n *\n * Put it on a native `<button>` (inside a heading element or a `role=\"heading\"` wrapper, as the\n * default `et-accordion` does) - that is what gives you Enter/Space, focus and the right role for\n * free. A disabled accordion marks its trigger `aria-disabled` instead of natively disabling it, so\n * the header stays reachable and announces why it won't open.\n */\n@Directive({\n  selector: '[etAccordionTrigger]',\n  exportAs: 'etAccordionTrigger',\n  host: {\n    // an accordion header never submits the form it happens to sit in\n    type: 'button',\n    '[attr.id]': 'accordion?.TRIGGER_ID',\n    // no `aria-controls` while the panel isn't in the DOM - a reference to a missing id is worse than none\n    '[attr.aria-controls]': 'accordion?.panel() ? accordion?.PANEL_ID : null',\n    '[attr.aria-expanded]': 'accordion?.isOpen() ?? false',\n    '[attr.aria-disabled]': 'accordion?.disabled() ? \"true\" : null',\n    '(click)': 'accordion?.toggle()',\n  },\n})\nexport class AccordionTriggerDirective {\n  protected accordion = inject(ACCORDION_TOKEN, { optional: true });\n\n  /** @internal The element the group focuses when navigating between headers with the arrow keys. */\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    this.accordion?.registerTrigger(this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.accordion) {\n          throw new RuntimeError(\n            ACCORDION_ERROR_CODES.PART_OUTSIDE_ACCORDION,\n            '[AccordionTriggerDirective] etAccordionTrigger must be placed inside an [etAccordion] element (e.g. <et-accordion>).',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { ACCORDION_ERROR_CODES } from '../accordion-errors';\nimport { ACCORDION_GROUP_TOKEN, ACCORDION_TOKEN } from './accordion.tokens';\nimport { AccordionPanelDirective } from './accordion-panel.directive';\nimport {\n  AccordionContentDirective,\n  AccordionHintDirective,\n  AccordionLabelDirective,\n} from './accordion-templates.directive';\nimport { AccordionTriggerDirective } from './accordion-trigger.directive';\nimport { registerPart } from './internals/register-part';\n\n/**\n * One disclosure: a trigger that expands a panel. Owns the open state, the ids that wire the two\n * together for assistive tech, and the \"has ever been open\" flag lazy content hangs off. No visual\n * opinion - bring your own template, or use the default `et-accordion`.\n *\n * A single accordion is a complete disclosure on its own; put several inside an `[etAccordionGroup]`\n * to get single-open behavior and arrow-key navigation between their triggers.\n *\n * @example\n * <div etAccordion #shipping=\"etAccordion\">\n *   <h3><button etAccordionTrigger type=\"button\">Shipping</button></h3>\n *   <div etAccordionPanel>Ships in 2–4 days.</div>\n * </div>\n */\n@Directive({\n  selector: '[etAccordion]',\n  exportAs: 'etAccordion',\n  providers: [{ provide: ACCORDION_TOKEN, useExisting: AccordionDirective }],\n  host: {\n    '[attr.data-open]': 'isOpen() ? \"\" : null',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n  },\n})\nexport class AccordionDirective {\n  private group = inject(ACCORDION_GROUP_TOKEN, { optional: true });\n\n  /** @internal The host element, used by the group to order its accordions the way the DOM does. */\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** Whether the panel is expanded. Two-way bindable. */\n  public isOpen = model(false);\n\n  /**\n   * Expand on first render. Only the initial value is honored - a later change never reopens a panel\n   * the user has since closed. Use `[(isOpen)]` to drive the state over time.\n   */\n  public isOpenByDefault = input(false, { transform: booleanAttribute });\n\n  /**\n   * Refuse to toggle. The trigger stays focusable and is marked `aria-disabled` rather than natively\n   * disabled, so screen-reader users can still reach the header and hear that it can't be expanded.\n   */\n  public disabled = input(false, { transform: booleanAttribute });\n\n  public readonly ID = createComponentId('et-accordion');\n  public readonly TRIGGER_ID = `${this.ID}-trigger`;\n  public readonly PANEL_ID = `${this.ID}-panel`;\n\n  /** @internal */\n  public trigger = signal<AccordionTriggerDirective | null>(null);\n\n  /** @internal */\n  public panel = signal<AccordionPanelDirective | null>(null);\n\n  /** @internal The `etAccordionLabel` slot, when one is projected. */\n  public labelTemplate = signal<AccordionLabelDirective | null>(null);\n\n  /** @internal The `etAccordionHint` slot, when one is projected. */\n  public hintTemplate = signal<AccordionHintDirective | null>(null);\n\n  /** @internal The `etAccordionContent` slot - panel content deferred until the first expand. */\n  public contentTemplate = signal<AccordionContentDirective | null>(null);\n\n  /**\n   * Whether content that is only created on demand should exist by now: `false` until the first\n   * expand, `true` forever after. Deferred content stays mounted once created - unmounting it on\n   * collapse would throw away its state and leave nothing to animate the collapse with.\n   */\n  public hasBeenOpened = linkedSignal<boolean, boolean>({\n    source: () => this.isOpen(),\n    computation: (isOpen, previous) => isOpen || (previous?.value ?? false),\n  });\n\n  constructor() {\n    // Seeding, not syncing: read `isOpenByDefault` once (after the first binding has been applied)\n    // and then stop listening, so a re-render can't yank a closed panel back open.\n    const seed = effect(() => {\n      const isOpenByDefault = this.isOpenByDefault();\n\n      untracked(() => {\n        if (isOpenByDefault) {\n          this.isOpen.set(true);\n        }\n\n        seed.destroy();\n      });\n    });\n\n    // Registered from the constructor rather than an effect, so the group sees its accordions in\n    // creation order and, crucially, is told when one is destroyed - a `@for` that drops an item must\n    // not leave a dead accordion in the group's list.\n    this.group?.registerAccordion(this);\n\n    inject(DestroyRef).onDestroy(() => this.group?.unregisterAccordion(this));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.trigger()) {\n          throw new RuntimeError(\n            ACCORDION_ERROR_CODES.MISSING_TRIGGER,\n            '[AccordionDirective] No [etAccordionTrigger] was found inside this accordion, so nothing can expand it. ' +\n              'Add an element (ideally a <button> inside a heading) with the etAccordionTrigger directive.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        // Only an accordion that is *open* is definitely broken without a panel. A closed one may\n        // simply be rendering its panel conditionally (`@if (accordion.isOpen())`), which is a valid\n        // way to build one - the trigger drops its `aria-controls` while the panel doesn't exist.\n        if (this.isOpen() && !this.panel()) {\n          throw new RuntimeError(\n            ACCORDION_ERROR_CODES.MISSING_PANEL,\n            '[AccordionDirective] This accordion is open but no [etAccordionPanel] was found inside it, so there is ' +\n              'nothing to expand. Add an element with the etAccordionPanel directive.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Expand the panel. No-op while `disabled`. */\n  public open() {\n    if (this.disabled()) return;\n\n    this.isOpen.set(true);\n  }\n\n  /** Collapse the panel. Works even while `disabled` - a disabled accordion can still be closed programmatically. */\n  public close() {\n    this.isOpen.set(false);\n  }\n\n  /**\n   * Expand or collapse the panel - what the trigger calls. No-op while `disabled`, and no-op when this\n   * is the last open panel of a group with `preventCloseLast`.\n   */\n  public toggle() {\n    if (this.disabled()) return;\n\n    if (this.isOpen()) {\n      if (this.group && !this.group.canCollapse(this)) return;\n\n      this.isOpen.set(false);\n\n      return;\n    }\n\n    this.isOpen.set(true);\n  }\n\n  /** @internal Call from the trigger's constructor - it takes over the teardown from the caller's `DestroyRef`. */\n  public registerTrigger(trigger: AccordionTriggerDirective) {\n    registerPart(this.trigger, trigger);\n  }\n\n  /**\n   * @internal Call from the panel's constructor. Registration is undone on destroy: a panel may be\n   * rendered conditionally, and a destroyed one has to stop being *the* panel (the trigger drops its\n   * `aria-controls` while there is none).\n   */\n  public registerPanel(panel: AccordionPanelDirective) {\n    registerPart(this.panel, panel);\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { AccordionGroupDirective } from './headless';\n\n/**\n * A stack of `<et-accordion>`s: separated by hairlines, optionally single-open, and navigable between\n * headers with the arrow keys (via the headless {@link AccordionGroupDirective}).\n *\n * @example\n * <et-accordion-group autoCloseOthers>\n *   <et-accordion label=\"Shipping\">Ships in 2–4 days.</et-accordion>\n *   <et-accordion label=\"Returns\">30 days, no questions asked.</et-accordion>\n * </et-accordion-group>\n */\n@Component({\n  selector: 'et-accordion-group',\n  template: '<ng-content />',\n  styleUrl: './accordion-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: AccordionGroupDirective,\n      inputs: ['autoCloseOthers', 'preventCloseLast', 'arrowKeyNavigation'],\n    },\n  ],\n  host: {\n    class: 'et-accordion-group',\n  },\n})\nexport class AccordionGroupComponent {}\n","import { IconDefinition } from './icon-provider';\n\nconst svg = (lines: string) =>\n  `<svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\"\n    stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\">${lines}</svg>`;\n\n// Custom icons - horizontal rules representing text-align.\nexport const ALIGN_LEFT_ICON: IconDefinition = {\n  name: 'et-align-left',\n  data: /* @__PURE__ */ svg(`<line x1=\"2.5\" y1=\"4\" x2=\"13.5\" y2=\"4\"/><line x1=\"2.5\" y1=\"8\" x2=\"9.5\" y2=\"8\"/>\n    <line x1=\"2.5\" y1=\"12\" x2=\"12\" y2=\"12\"/>`),\n};\n\nexport const ALIGN_CENTER_ICON: IconDefinition = {\n  name: 'et-align-center',\n  data: /* @__PURE__ */ svg(`<line x1=\"2.5\" y1=\"4\" x2=\"13.5\" y2=\"4\"/><line x1=\"4.5\" y1=\"8\" x2=\"11.5\" y2=\"8\"/>\n    <line x1=\"3.5\" y1=\"12\" x2=\"12.5\" y2=\"12\"/>`),\n};\n\nexport const ALIGN_RIGHT_ICON: IconDefinition = {\n  name: 'et-align-right',\n  data: /* @__PURE__ */ svg(`<line x1=\"2.5\" y1=\"4\" x2=\"13.5\" y2=\"4\"/><line x1=\"6.5\" y1=\"8\" x2=\"13.5\" y2=\"8\"/>\n    <line x1=\"4\" y1=\"12\" x2=\"13.5\" y2=\"12\"/>`),\n};\n\nexport const ALIGN_JUSTIFY_ICON: IconDefinition = {\n  name: 'et-align-justify',\n  data: /* @__PURE__ */ svg(`<line x1=\"2.5\" y1=\"4\" x2=\"13.5\" y2=\"4\"/><line x1=\"2.5\" y1=\"8\" x2=\"13.5\" y2=\"8\"/>\n    <line x1=\"2.5\" y1=\"12\" x2=\"13.5\" y2=\"12\"/>`),\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const ARROW_OUT_UP_RIGHT_ICON: IconDefinition = {\n  name: 'et-arrow-out-up-right',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        fill=\"currentColor\"\n        d=\"M5 6.75A1.75 1.75 0 0 1 6.75 5h4.5a.75.75 0 0 1 0 1.5h-4.5a.25.25 0 0 0-.25.25v10.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-4.5a.75.75 0 0 1 1.5 0v4.5A1.75 1.75 0 0 1 17.25 19H6.75A1.75 1.75 0 0 1 5 17.25V6.75Z\"\n      />\n      <path\n        fill=\"currentColor\"\n        d=\"M11.5 5.75c0-.414.336-.75.75-.75h6c.414 0 .75.336.75.75v6a.75.75 0 0 1-1.5 0V7.56l-6.72 6.72a.75.75 0 1 1-1.06-1.06l6.72-6.72h-4.19a.75.75 0 0 1-.75-.75Z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const ARROW_RIGHT_ICON: IconDefinition = {\n  name: 'et-arrow-right',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M4 12h14\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M13 7l5 5-5 5\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/**\n * Upward arrow. Rotate it 180° for the downward one - see the table's sort indicator.\n *\n * Drawn to fill its viewBox and sit centred in it (the shaft spans 3.5–20.5 of 24, so the glyph's\n * midpoint is the box's). An arrow inset from its own box renders far smaller than the text it sits\n * beside, and off-centre against it, however carefully the box itself is aligned.\n */\nexport const ARROW_UP_ICON: IconDefinition = {\n  name: 'et-arrow-up',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M12 20.5V3.5\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M5.5 10L12 3.5 18.5 10\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/** Arrows pointing apart along the inline axis - a \"fit to width\" action (the table's autosize). */\nexport const ARROWS_LEFT_RIGHT_ICON: IconDefinition = {\n  name: 'et-arrows-left-right',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M3.5 12h17\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M8 7.5L3.5 12 8 16.5\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M16 7.5L20.5 12 16 16.5\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const BOLD_ICON: IconDefinition = {\n  name: 'et-bold',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"12\" font-size=\"12\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">B</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const CALENDAR_ICON: IconDefinition = {\n  name: 'et-calendar',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"16.5\" rx=\"3\" />\n      <path d=\"M8 2.5v4M16 2.5v4M3.5 10h17\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const CHECK_ICON: IconDefinition = {\n  name: 'et-check',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const CHEVRON_ICON: IconDefinition = {\n  name: 'et-chevron',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M244.7 116.7c6.2-6.2 16.4-6.2 22.6 0l192 192c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L256 150.6 75.3 331.3c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l192-192z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const CIRCLE_CHECK_ICON: IconDefinition = {\n  name: 'et-circle-check',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335.1 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const CIRCLE_INFO_ICON: IconDefinition = {\n  name: 'et-circle-info',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336l24 0 0-64-24 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l48 0c13.3 0 24 10.7 24 24l0 88 8 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-80 0c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const CLIPBOARD_CHECK_ICON: IconDefinition = {\n  name: 'et-clipboard-check',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M9 4.5h6\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n      />\n      <path\n        d=\"M9 3h6a1.5 1.5 0 0 1 1.5 1.5V6H18a2 2 0 0 1 2 2v10.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 4 18.5V8a2 2 0 0 1 2-2h1.5V4.5A1.5 1.5 0 0 1 9 3z\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M8.5 13l2.2 2.2 4.8-4.9\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const CLOCK_ICON: IconDefinition = {\n  name: 'et-clock',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"8.75\" />\n      <path d=\"M12 7.5V12l3 2\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon: the inline-code chevrons inside a block, so it reads as a fenced block next to\n// `et-code` (the inline mark) in the same toolbar.\nexport const CODE_BLOCK_ICON: IconDefinition = {\n  name: 'et-code-block',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\"\n      stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <rect x=\"1.75\" y=\"2.75\" width=\"12.5\" height=\"10.5\" rx=\"2\" />\n      <path d=\"M6.75 6.5 5 8l1.75 1.5\" />\n      <path d=\"M9.25 6.5 11 8 9.25 9.5\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const CODE_ICON: IconDefinition = {\n  name: 'et-code',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\"\n      stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <path d=\"M5.5 5 2.5 8l3 3\" />\n      <path d=\"M10.5 5l3 3-3 3\" />\n      <path d=\"M9 3.5 7 12.5\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/** Horizontal three-dot glyph - the breadcrumb's \"show the hidden levels\" trigger. */\nexport const ELLIPSIS_ICON: IconDefinition = {\n  name: 'et-ellipsis',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <circle cx=\"5\" cy=\"12\" r=\"1.75\" fill=\"currentColor\" />\n      <circle cx=\"12\" cy=\"12\" r=\"1.75\" fill=\"currentColor\" />\n      <circle cx=\"19\" cy=\"12\" r=\"1.75\" fill=\"currentColor\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/** Vertical three-dot \"more actions\" glyph - the table's column menu trigger. */\nexport const ELLIPSIS_VERTICAL_ICON: IconDefinition = {\n  name: 'et-ellipsis-vertical',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <circle cx=\"12\" cy=\"5\" r=\"1.75\" fill=\"currentColor\" />\n      <circle cx=\"12\" cy=\"12\" r=\"1.75\" fill=\"currentColor\" />\n      <circle cx=\"12\" cy=\"19\" r=\"1.75\" fill=\"currentColor\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const EYE_ICON: IconDefinition = {\n  name: 'et-eye',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\"\n      />\n    </svg>\n  `,\n};\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const EYE_SLASH_ICON: IconDefinition = {\n  name: 'et-eye-slash',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const EYEDROPPER_ICON: IconDefinition = {\n  name: 'et-eyedropper',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <path d=\"m3 21 1-1h3l8.5-8.5\" />\n      <path d=\"M4 20v-3l8.5-8.5\" />\n      <path d=\"m15 6 2.9-2.9a2.05 2.05 0 0 1 2.9 2.9L17.9 8.9l.4.4a2.05 2.05 0 0 1-2.9 2.9l-3.6-3.6a2.05 2.05 0 0 1 2.9-2.9l.3.3Z\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const FILE_ICON: IconDefinition = {\n  name: 'et-file',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        d=\"M13 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V9m-6-6 6 6m-6-6v6h6\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/** Funnel glyph for a column's filter menu trigger. */\nexport const FILTER_ICON: IconDefinition = {\n  name: 'et-filter',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <path fill=\"currentColor\" d=\"M1 2h14l-5.5 6.5V14L6.5 12V8.5z\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const FLOPPY_DISK_ICON: IconDefinition = {\n  name: 'et-floppy-disk',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M5 3h11l3 3v13a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V3z\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M8 3v6h7V3\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M8 17h8\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const FOCUS_FRAME_ICON: IconDefinition = {\n  name: 'et-focus-frame',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        fill=\"currentColor\"\n        fill-rule=\"evenodd\"\n        d=\"M5.75 4A1.75 1.75 0 0 0 4 5.75v12.5C4 19.216 4.784 20 5.75 20h12.5A1.75 1.75 0 0 0 20 18.25V5.75A1.75 1.75 0 0 0 18.25 4H5.75Zm0 1.5a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V5.75a.25.25 0 0 0-.25-.25H5.75Z\"\n        clip-rule=\"evenodd\"\n      />\n      <rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1.25\" fill=\"currentColor\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const GRID_2X2_ICON: IconDefinition = {\n  name: 'et-grid-2x2',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        fill=\"currentColor\"\n        fill-rule=\"evenodd\"\n        d=\"M5.75 4A1.75 1.75 0 0 0 4 5.75v12.5C4 19.216 4.784 20 5.75 20h12.5A1.75 1.75 0 0 0 20 18.25V5.75A1.75 1.75 0 0 0 18.25 4H5.75Zm0 1.5a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V5.75a.25.25 0 0 0-.25-.25H5.75Z\"\n        clip-rule=\"evenodd\"\n      />\n      <rect x=\"11.25\" y=\"5.5\" width=\"1.5\" height=\"13\" fill=\"currentColor\" />\n      <rect x=\"5.5\" y=\"11.25\" width=\"13\" height=\"1.5\" fill=\"currentColor\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const HEADING_1_ICON: IconDefinition = {\n  name: 'et-heading-1',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"12\" font-size=\"11\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">H1</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const HEADING_2_ICON: IconDefinition = {\n  name: 'et-heading-2',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"12\" font-size=\"11\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">H2</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const HEADING_3_ICON: IconDefinition = {\n  name: 'et-heading-3',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"12\" font-size=\"11\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">H3</text>\n    </svg>\n  `,\n};\n","// codes 1800-1899\nexport const ICON_ERROR_CODES = {\n  NO_ICONS_PROVIDED: 1800,\n  ICON_NOT_FOUND: 1801,\n  INVALID_SVG: 1802,\n  MISSING_XMLNS: 1803,\n  MISSING_DIMENSIONS: 1804,\n  HARDCODED_COLOR: 1805,\n  DUPLICATE_ICON_NAME: 1806,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { ICON_ERROR_CODES } from './icon-errors';\n\nexport type IconDefinition = {\n  name: string;\n  /**\n   * Optional style variant (e.g. `'solid'`, `'light'`, `'regular'`). Lets the same icon\n   * `name` exist in several styles without encoding the style into the name. Icons\n   * registered without a variant are matched by their bare name.\n   */\n  variant?: string;\n  data: string;\n};\n\n/**\n * Augmentable registry for the literal set of icon names an app uses. Empty by default,\n * which keeps `etIcon` typed as plain `string`. The `@ethlete/components:icons` generator\n * writes an augmentation for this interface, or you can augment it manually:\n *\n * ```ts\n * declare module '@ethlete/components' {\n *   interface EthleteIconNameRegistry {\n *     name: 'shield' | 'plus';\n *   }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteIconNameRegistry {}\n\n/**\n * Augmentable registry for the literal set of icon variants an app uses. Empty by default,\n * which keeps the `variant` input typed as plain `string`. See {@link EthleteIconNameRegistry}.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-empty-interface, @typescript-eslint/consistent-type-definitions\nexport interface EthleteIconVariantRegistry {}\n\nexport type RegisteredIconName = EthleteIconNameRegistry extends { name: infer N extends string } ? N : string;\nexport type RegisteredIconVariant = EthleteIconVariantRegistry extends { name: infer V extends string } ? V : string;\n\n/** Variant the {@link IconDirective} falls back to when `etIcon` is used without an explicit `variant`. */\nexport const DEFAULT_ICON_VARIANT = 'solid';\n\n/** Composite registry key for an icon `name` plus an optional `variant`. */\nexport const iconRegistryKey = (name: string, variant?: string | null) => (variant ? `${name}::${variant}` : name);\n\nexport const ICONS_TOKEN = new InjectionToken<Record<string, IconDefinition>>('ET_ICONS_TOKEN');\n\n/**\n * Application-level icon overrides, merged on top of the icons a component self-registers\n * via {@link provideIcons}. See {@link provideIconOverrides}.\n */\nexport const ICON_OVERRIDES_TOKEN = new InjectionToken<Record<string, IconDefinition>>('ET_ICON_OVERRIDES_TOKEN');\n\nconst buildIconMap = (source: string, icons: IconDefinition[]) => {\n  const map: Record<string, IconDefinition> = {};\n\n  for (const def of icons) {\n    const key = iconRegistryKey(def.name, def.variant);\n\n    if (map[key]) {\n      throw new RuntimeError(\n        ICON_ERROR_CODES.DUPLICATE_ICON_NAME,\n        `[${source}] Icon with name \"${def.name}\"${\n          def.variant ? ` and variant \"${def.variant}\"` : ''\n        } already exists. Please provide unique icon name/variant combinations.`,\n      );\n    }\n\n    map[key] = def;\n  }\n\n  return map;\n};\n\nexport const provideIcons = (...icons: IconDefinition[]) => ({\n  provide: ICONS_TOKEN,\n  useValue: buildIconMap('provideIcons', icons),\n});\n\n/**\n * Canonical list of the icon names the SDK ships built-in and renders from its own\n * components (select chevron, picker calendar/clock, close buttons, rich-text tools, …).\n * It's the set you can target with {@link provideIconOverrides} to swap the default artwork.\n *\n * Keep this in sync when adding or removing a built-in `et-*` icon under\n * `libs/components/src/lib/icon/headless/`.\n */\nexport const ET_BUILT_IN_ICON_NAMES = [\n  'et-align-center',\n  'et-align-justify',\n  'et-align-left',\n  'et-align-right',\n  'et-arrow-out-up-right',\n  'et-arrow-right',\n  'et-arrow-up',\n  'et-arrows-left-right',\n  'et-bold',\n  'et-calendar',\n  'et-check',\n  'et-chevron',\n  'et-circle-check',\n  'et-circle-info',\n  'et-clipboard-check',\n  'et-clock',\n  'et-code',\n  'et-code-block',\n  'et-ellipsis',\n  'et-ellipsis-vertical',\n  'et-eye',\n  'et-eye-slash',\n  'et-eyedropper',\n  'et-file',\n  'et-filter',\n  'et-floppy-disk',\n  'et-focus-frame',\n  'et-grid-2x2',\n  'et-heading-1',\n  'et-heading-2',\n  'et-heading-3',\n  'et-image',\n  'et-italic',\n  'et-link',\n  'et-list-bulleted',\n  'et-list-numbered',\n  'et-location',\n  'et-lock',\n  'et-minus',\n  'et-paragraph',\n  'et-pause',\n  'et-pencil',\n  'et-play',\n  'et-plus',\n  'et-quote',\n  'et-redo',\n  'et-rotate-right',\n  'et-star',\n  'et-strikethrough',\n  'et-table',\n  'et-thumbtack',\n  'et-times',\n  'et-trash',\n  'et-triangle-exclamation',\n  'et-trophy',\n  'et-underline',\n  'et-undo',\n  'et-upload',\n] as const;\n\n/** Union of the SDK's built-in icon names - see {@link ET_BUILT_IN_ICON_NAMES}. */\nexport type EtBuiltInIconName = (typeof ET_BUILT_IN_ICON_NAMES)[number];\n\n/**\n * An icon passed to {@link provideIconOverrides}. Identical to {@link IconDefinition}, but\n * `name` autocompletes to the built-in {@link EtBuiltInIconName} set (the icons worth\n * overriding) while still accepting any other string for registering brand-new names.\n */\nexport type IconOverride = Omit<IconDefinition, 'name'> & {\n  // `string & {}` keeps the literal suggestions from collapsing to plain `string`.\n  name: EtBuiltInIconName | (string & {});\n};\n\n/**\n * Overrides the SDK's built-in icons app-wide (or for a subtree). Provide it once in your\n * application providers with icons whose `name`/`variant` match the built-ins you want to\n * replace - e.g. your own Font Awesome set generated via the `@ethlete/components:icons`\n * generator - and every component that renders that icon picks up your version, without\n * touching the component's own `provideIcons()` registration.\n *\n * `name` autocompletes to the built-in {@link ET_BUILT_IN_ICON_NAMES} set, so you don't have\n * to guess which names exist; passing any other string registers a brand-new icon.\n *\n * Overrides are keyed by name/variant and merged *on top of* the component-level registry,\n * so unlisted icons keep their built-in defaults.\n *\n * ```ts\n * // app.config.ts\n * providers: [\n *   provideIconOverrides(\n *     { name: 'et-chevron', data: myChevronSvg },\n *     { name: 'et-times', data: myTimesSvg },\n *   ),\n * ],\n * ```\n */\nexport const provideIconOverrides = (...icons: IconOverride[]) => ({\n  provide: ICON_OVERRIDES_TOKEN,\n  useValue: buildIconMap('provideIconOverrides', icons),\n});\n","import { booleanAttribute, computed, Directive, inject, InjectionToken, input, InputSignal } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { RuntimeError } from '@ethlete/core';\nimport { ICON_ERROR_CODES } from './icon-errors';\nimport {\n  DEFAULT_ICON_VARIANT,\n  ICON_OVERRIDES_TOKEN,\n  iconRegistryKey,\n  ICONS_TOKEN,\n  RegisteredIconName,\n  RegisteredIconVariant,\n} from './icon-provider';\n\nexport const ICON_DIRECTIVE_TOKEN = new InjectionToken<IconDirective>('ET_ICON_DIRECTIVE_TOKEN');\n\nconst SVG_COLOR_ATTRIBUTES = ['fill', 'stroke', 'stop-color', 'stop-opacity'];\n\n@Directive({\n  selector: '[etIcon]',\n  providers: [\n    {\n      provide: ICON_DIRECTIVE_TOKEN,\n      useExisting: IconDirective,\n    },\n  ],\n  host: {\n    '[innerHTML]': 'iconSrc()',\n    // Decorative by default - an icon almost always repeats a label right next to it, and announcing\n    // it again is noise. A `label` flips it to a real image with a name; see the input.\n    '[attr.aria-hidden]': 'label() ? null : \"true\"',\n    '[attr.role]': 'label() ? \"img\" : null',\n    '[attr.aria-label]': 'label()',\n    '[class]': 'hostClasses()',\n    '[style.display]': '\"flex\"',\n    '[style.align-items]': '\"center\"',\n    '[style.justify-content]': '\"center\"',\n  },\n})\nexport class IconDirective {\n  private icons = inject(ICONS_TOKEN, { optional: true });\n  private iconOverrides = inject(ICON_OVERRIDES_TOKEN, { optional: true });\n  private sanitizer = inject(DomSanitizer);\n\n  public iconNameToUse: InputSignal<RegisteredIconName> = input.required<RegisteredIconName>({ alias: 'etIcon' });\n\n  public variant: InputSignal<RegisteredIconVariant | undefined> = input<RegisteredIconVariant | undefined>(undefined);\n\n  public allowHardcodedColor = input(false, { transform: booleanAttribute });\n\n  /**\n   * Give the icon an accessible name, for the case where it **is** the content rather than decoration:\n   * a status glyph alone in a table cell, a lone icon button's only child, a checkmark that is the\n   * whole answer.\n   *\n   * Without it the icon is `aria-hidden` - the right default, since an icon normally sits beside the\n   * text it illustrates and repeating it is noise. With it the host becomes `role=\"img\"` with this as\n   * its `aria-label`, so the meaning survives for a screen reader.\n   *\n   * Name what the icon **means**, not what it depicts: `'Verified'`, not `'checkmark'`.\n   */\n  public label = input<string | null>(null);\n\n  // App-level overrides win over the icons a component self-registers, keyed by name/variant.\n  // Names absent from the override map keep their built-in default.\n  private registry = this.icons || this.iconOverrides ? { ...this.icons, ...this.iconOverrides } : null;\n\n  private resolvedIcon = computed(() => {\n    if (!this.registry) {\n      return null;\n    }\n\n    const name = this.iconNameToUse();\n    const variant = this.variant();\n\n    // Explicit variant → exact match only. Otherwise prefer a variant-less registration\n    // (the built-in et-* icons) before falling back to the default `solid` variant.\n    const candidateKeys = variant\n      ? [iconRegistryKey(name, variant)]\n      : [iconRegistryKey(name), iconRegistryKey(name, DEFAULT_ICON_VARIANT)];\n\n    for (const key of candidateKeys) {\n      const icon = this.registry[key];\n\n      if (icon) {\n        return icon;\n      }\n    }\n\n    throw new RuntimeError(\n      ICON_ERROR_CODES.ICON_NOT_FOUND,\n      `[IconDirective] Icon \"${name}\"${\n        variant ? ` (variant \"${variant}\")` : ''\n      } not found. Available icons: ${Object.keys(this.registry).join(', ')}.`,\n    );\n  });\n\n  public iconSrc = computed(() => {\n    const icon = this.resolvedIcon();\n\n    if (!icon) {\n      return null;\n    }\n\n    const svg = icon.data.trim();\n    const label = iconRegistryKey(icon.name, icon.variant);\n\n    if (ngDevMode) {\n      if (!svg.includes('<svg')) {\n        throw new RuntimeError(\n          ICON_ERROR_CODES.INVALID_SVG,\n          `[IconDirective] Icon \"${label}\" is not a valid SVG. The data must contain an <svg> element.`,\n        );\n      }\n\n      if (!svg.includes('xmlns=\"http://www.w3.org/2000/svg\"')) {\n        throw new RuntimeError(\n          ICON_ERROR_CODES.MISSING_XMLNS,\n          `[IconDirective] Icon \"${label}\" is missing xmlns=\"http://www.w3.org/2000/svg\". Add the attribute to the <svg> element.`,\n        );\n      }\n\n      if (!svg.includes('width=\"100%\"') || !svg.includes('height=\"100%\"')) {\n        throw new RuntimeError(\n          ICON_ERROR_CODES.MISSING_DIMENSIONS,\n          `[IconDirective] Icon \"${label}\" is missing width=\"100%\" and/or height=\"100%\". Add both attributes to the <svg> element.`,\n        );\n      }\n\n      if (!this.allowHardcodedColor()) {\n        for (const colorAttribute of SVG_COLOR_ATTRIBUTES) {\n          for (const [, value] of svg.matchAll(new RegExp(`\\\\b${colorAttribute}=\"([^\"]*)\"`, 'g'))) {\n            if (value !== 'currentColor' && value !== 'none') {\n              throw new RuntimeError(\n                ICON_ERROR_CODES.HARDCODED_COLOR,\n                `[IconDirective] Icon \"${label}\" uses the hardcoded value \"${value}\" for \"${colorAttribute}\". Use currentColor instead, or set [allowHardcodedColor]=\"true\".`,\n              );\n            }\n          }\n        }\n      }\n    }\n\n    return this.sanitizer.bypassSecurityTrustHtml(svg);\n  });\n\n  public hostClasses = computed(() => {\n    const name = this.iconNameToUse();\n    const variant = this.variant();\n    const base = `et-icon et-icon--${name}`;\n\n    return variant ? `${base} et-icon--${name}--${variant}` : base;\n  });\n\n  constructor() {\n    if (!this.registry) {\n      throw new RuntimeError(\n        ICON_ERROR_CODES.NO_ICONS_PROVIDED,\n        '[IconDirective] No icons provided. Register icons via provideIcons() in the component or application providers.',\n      );\n    }\n  }\n}\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const IMAGE_ICON: IconDefinition = {\n  name: 'et-image',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l96 0 32 0 208 0c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const ITALIC_ICON: IconDefinition = {\n  name: 'et-italic',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text\n        x=\"8\"\n        y=\"12\"\n        font-size=\"12\"\n        font-style=\"italic\"\n        font-family=\"serif\"\n        text-anchor=\"middle\"\n        fill=\"currentColor\"\n      >I</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const LINK_ICON: IconDefinition = {\n  name: 'et-link',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\">\n      <path\n        d=\"M6.5 9.5l3-3M7 4.5l1-1a2.5 2.5 0 013.5 3.5l-1 1M9 11.5l-1 1A2.5 2.5 0 014.5 9l1-1\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.4\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const LIST_BULLETED_ICON: IconDefinition = {\n  name: 'et-list-bulleted',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\">\n      <circle cx=\"2.5\" cy=\"4\" r=\"1.2\" fill=\"currentColor\" />\n      <circle cx=\"2.5\" cy=\"8\" r=\"1.2\" fill=\"currentColor\" />\n      <circle cx=\"2.5\" cy=\"12\" r=\"1.2\" fill=\"currentColor\" />\n      <path d=\"M6 4h8M6 8h8M6 12h8\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const LIST_NUMBERED_ICON: IconDefinition = {\n  name: 'et-list-numbered',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\">\n      <path d=\"M6 4h8M6 8h8M6 12h8\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n      <text x=\"1\" y=\"5.4\" font-size=\"5\" fill=\"currentColor\">1</text>\n      <text x=\"1\" y=\"9.6\" font-size=\"5\" fill=\"currentColor\">2</text>\n      <text x=\"1\" y=\"13.8\" font-size=\"5\" fill=\"currentColor\">3</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const LOCATION_ICON: IconDefinition = {\n  name: 'et-location',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <path d=\"M12 21s-7-6.2-7-11.5A7 7 0 0 1 19 9.5C19 14.8 12 21 12 21z\" />\n      <circle cx=\"12\" cy=\"9.5\" r=\"2.25\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const LOCK_ICON: IconDefinition = {\n  name: 'et-lock',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M144 144l0 48 160 0 0-48c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192l0-48C80 64.5 144.5 0 224 0s144 64.5 144 144l0 48 48 0c26.5 0 48 21.5 48 48l0 224c0 26.5-21.5 48-48 48L32 512c-26.5 0-48-21.5-48-48L-16 240c0-26.5 21.5-48 48-48l48 0zm144 184c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40s17.9 40 40 40z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const MINUS_ICON: IconDefinition = {\n  name: 'et-minus',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const PARAGRAPH_ICON: IconDefinition = {\n  name: 'et-paragraph',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"12\" font-size=\"12\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">¶</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const PAUSE_ICON: IconDefinition = {\n  name: 'et-pause',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path fill=\"currentColor\" d=\"M7 4h3.5a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z\" />\n      <path fill=\"currentColor\" d=\"M13.5 4H17a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-3.5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const PENCIL_ICON: IconDefinition = {\n  name: 'et-pencil',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M4 20l4.2-1 9.3-9.3a1.8 1.8 0 0 0 0-2.5l-.7-.7a1.8 1.8 0 0 0-2.5 0L5 15.8 4 20z\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M12.8 7.2l4 4\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const PLAY_ICON: IconDefinition = {\n  name: 'et-play',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path fill=\"currentColor\" d=\"M8 5.14a1 1 0 0 1 1.52-.85l10 6.86a1 1 0 0 1 0 1.7l-10 6.86A1 1 0 0 1 8 18.86z\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const PLUS_ICON: IconDefinition = {\n  name: 'et-plus',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M12 5v14\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n      />\n      <path\n        d=\"M5 12h14\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.8\"\n        stroke-linecap=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Two filled quotation marks - the block-quote tool's mark, drawn rather than typeset so it doesn't\n// depend on the font's glyph.\nexport const QUOTE_ICON: IconDefinition = {\n  name: 'et-quote',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        d=\"M10 6.5C7 7.5 5.5 10 5.5 13v4.5h5V12H8c0-2 .7-3.3 2-4zm9 0c-3 1-4.5 3.5-4.5 6.5v4.5h5V12H17c0-2 .7-3.3 2-4z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const ROTATE_RIGHT_ICON: IconDefinition = {\n  name: 'et-rotate-right',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        d=\"M4 9a8 8 0 0 1 14-3m2-3v6h-6m6 6a8 8 0 0 1-14 3m-2 3v-6h6\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const STAR_ICON: IconDefinition = {\n  name: 'et-star',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const STRIKETHROUGH_ICON: IconDefinition = {\n  name: 'et-strikethrough',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text\n        x=\"8\"\n        y=\"12\"\n        font-size=\"12\"\n        text-decoration=\"line-through\"\n        text-anchor=\"middle\"\n        fill=\"currentColor\"\n      >S</text>\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const TABLE_ICON: IconDefinition = {\n  name: 'et-table',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\"\n      stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <rect x=\"2\" y=\"2.5\" width=\"12\" height=\"11\" rx=\"1.5\" />\n      <line x1=\"2\" y1=\"6.2\" x2=\"14\" y2=\"6.2\" />\n      <line x1=\"2\" y1=\"9.9\" x2=\"14\" y2=\"9.9\" />\n      <line x1=\"6.7\" y1=\"2.5\" x2=\"6.7\" y2=\"13.5\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n/** A pushpin - what the table's column menu pins a column with. */\nexport const THUMBTACK_ICON: IconDefinition = {\n  name: 'et-thumbtack',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path\n        d=\"M9 3.5h6M10 3.5v5.5L6.5 14h11L14 9V3.5M12 14v6.5\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const TIMES_ICON: IconDefinition = {\n  name: 'et-times',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M324.5 411.1c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L214.6 256 347.1 123.5c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L192 233.4 59.6 100.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L169.4 256 36.9 388.5c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L192 278.6 324.5 411.1z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const TRASH_ICON: IconDefinition = {\n  name: 'et-trash',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <path d=\"M4 7h16\" />\n      <path d=\"M9 7V4.5A1.5 1.5 0 0 1 10.5 3h3A1.5 1.5 0 0 1 15 4.5V7\" />\n      <path d=\"M6 7l1 13a2 2 0 0 0 2 1.9h6a2 2 0 0 0 2-1.9l1-13\" />\n      <path d=\"M10 11v6\" />\n      <path d=\"M14 11v6\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Font Awesome Pro 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.\nexport const TRIANGLE_EXCLAMATION_ICON: IconDefinition = {\n  name: 'et-triangle-exclamation',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill=\"currentColor\"\n        d=\"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S489.3 480 475.1 480H36.9c-14.3 0-27.6-7.7-34.8-20.2s-7-27.6 .2-40.1l216-368C225.6 39.5 238.7 32 252.9 32h3.1zm0 128c-13.3 0-24 10.7-24 24v112c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0-64 0 32 32 0 1 0 64 0z\"\n      />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const TROPHY_ICON: IconDefinition = {\n  name: 'et-trophy',\n  data: `\n    <svg\n      width=\"100%\"\n      height=\"100%\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"1.8\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    >\n      <path d=\"M7 4h10v5a5 5 0 0 1-10 0V4Z\" />\n      <path d=\"M7 5.5H4.5v1.75a3.25 3.25 0 0 0 2.9 3.23\" />\n      <path d=\"M17 5.5h2.5v1.75a3.25 3.25 0 0 1-2.9 3.23\" />\n      <path d=\"M12 14v3.5\" />\n      <path d=\"M8.5 20.5h7l-.75-3h-5.5l-.75 3Z\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\n// Custom icon.\nexport const UNDERLINE_ICON: IconDefinition = {\n  name: 'et-underline',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n      <text x=\"8\" y=\"10.5\" font-size=\"10\" font-weight=\"700\" text-anchor=\"middle\" fill=\"currentColor\">U</text>\n      <line x1=\"4\" y1=\"13.5\" x2=\"12\" y2=\"13.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n    </svg>\n  `,\n};\n","import { IconDefinition } from './icon-provider';\n\nconst svg = (path: string) =>\n  `<svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        d=\"${path}\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `;\n\n// U-turn arrows: the arrow head, then the line running into the half-circle it turns around.\nexport const UNDO_ICON: IconDefinition = {\n  name: 'et-undo',\n  data: /* @__PURE__ */ svg('M9.5 15 4.5 10l5-5M4.5 10h9a5.5 5.5 0 0 1 0 11h-3'),\n};\n\nexport const REDO_ICON: IconDefinition = {\n  name: 'et-redo',\n  data: /* @__PURE__ */ svg('M14.5 15l5-5-5-5M19.5 10h-9a5.5 5.5 0 0 0 0 11h3'),\n};\n","import { IconDefinition } from './icon-provider';\n\nexport const UPLOAD_ICON: IconDefinition = {\n  name: 'et-upload',\n  data: `\n    <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        d=\"M12 16V4m0 0 4 4m-4-4-4 4M4 16v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"\n        stroke=\"currentColor\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `,\n};\n","import { IconDirective } from './headless/icon.directive';\n\nexport const ICON_IMPORTS = [IconDirective] as const;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, inject, input } from '@angular/core';\nimport { CHEVRON_ICON, IconDirective, provideIcons } from '../icon';\nimport { AccordionDirective, AccordionPanelDirective, AccordionTriggerDirective } from './headless';\n\n/** The heading level the accordion's header reports to assistive tech. */\nexport type AccordionHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/**\n * The default disclosure: a header that expands a panel, themed and animated, driven by the headless\n * {@link AccordionDirective}.\n *\n * Works standalone; put several inside an `<et-accordion-group>` for single-open behavior and\n * arrow-key navigation between the headers. Panel content is projected as children - reach for\n * `<ng-template etAccordionContent>` instead when it is expensive enough that it shouldn't exist\n * before the first expand.\n *\n * @example\n * <et-accordion label=\"Shipping\" [(isOpen)]=\"showsShipping\">\n *   Ships in 2–4 days.\n * </et-accordion>\n */\n@Component({\n  selector: 'et-accordion',\n  templateUrl: './accordion.component.html',\n  styleUrl: './accordion.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [AccordionPanelDirective, AccordionTriggerDirective, IconDirective, NgTemplateOutlet],\n  providers: [provideIcons(CHEVRON_ICON)],\n  hostDirectives: [\n    {\n      directive: AccordionDirective,\n      inputs: ['isOpen', 'isOpenByDefault', 'disabled'],\n      outputs: ['isOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-accordion',\n  },\n})\nexport class AccordionComponent {\n  protected accordion = inject(AccordionDirective);\n\n  /** The header text. Use `<ng-template etAccordionLabel>` when the header needs markup instead. */\n  public label = input('');\n\n  /**\n   * What the header reports as its heading level, so the accordion slots into the page's outline\n   * instead of flattening it. The header is a `role=\"heading\"` element rather than an `<h1>`–`<h6>`\n   * (one element, any level), which assistive tech treats identically. @default 3\n   */\n  public headingLevel = input<AccordionHeadingLevel>(3);\n}\n","<div [attr.aria-level]=\"headingLevel()\" class=\"et-accordion-heading\" role=\"heading\">\n  <button class=\"et-accordion-trigger\" etAccordionTrigger type=\"button\">\n    <span class=\"et-accordion-label\">\n      @if (accordion.labelTemplate(); as labelTemplate) {\n        <ng-container [ngTemplateOutlet]=\"labelTemplate.templateRef\" />\n      } @else {\n        {{ label() }}\n      }\n    </span>\n\n    @if (accordion.hintTemplate(); as hintTemplate) {\n      <span class=\"et-accordion-hint\">\n        <ng-container [ngTemplateOutlet]=\"hintTemplate.templateRef\" />\n      </span>\n    }\n\n    <i class=\"et-accordion-chevron\" etIcon=\"et-chevron\"></i>\n  </button>\n</div>\n\n<div class=\"et-accordion-panel\" etAccordionPanel>\n  <!-- The clip window, and nothing else: it has to shrink past its content and hide the overflow while\n       the track collapses, so it can carry no padding of its own (see the CSS). -->\n  <div class=\"et-accordion-panel-clip\">\n    <div class=\"et-accordion-panel-body\">\n      <ng-content />\n\n      @if (accordion.contentTemplate(); as contentTemplate) {\n        @if (accordion.hasBeenOpened()) {\n          <ng-container [ngTemplateOutlet]=\"contentTemplate.templateRef\" />\n        }\n      }\n    </div>\n  </div>\n</div>\n","import { AccordionGroupComponent } from './accordion-group.component';\nimport { AccordionComponent } from './accordion.component';\nimport {\n  AccordionContentDirective,\n  AccordionDirective,\n  AccordionGroupDirective,\n  AccordionHintDirective,\n  AccordionLabelDirective,\n  AccordionPanelDirective,\n  AccordionTriggerDirective,\n} from './headless';\n\n/** The accordion, its group, the slot templates, and the headless directives to build your own. */\nexport const ACCORDION_IMPORTS = [\n  AccordionComponent,\n  AccordionGroupComponent,\n  AccordionLabelDirective,\n  AccordionHintDirective,\n  AccordionContentDirective,\n  AccordionDirective,\n  AccordionTriggerDirective,\n  AccordionPanelDirective,\n  AccordionGroupDirective,\n] as const;\n","import { Component, ViewEncapsulation, computed, input, linkedSignal } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\n\nexport const AVATAR_SIZES = {\n  XS: 'xs',\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n  XL: 'xl',\n} as const;\n\nexport type AvatarSize = (typeof AVATAR_SIZES)[keyof typeof AVATAR_SIZES];\n\nexport const AVATAR_SHAPES = {\n  CIRCLE: 'circle',\n  SQUARE: 'square',\n} as const;\n\nexport type AvatarShape = (typeof AVATAR_SHAPES)[keyof typeof AVATAR_SHAPES];\n\nconst initialsFromName = (name: string) => {\n  const words = name.trim().split(/\\s+/).filter(Boolean);\n  const first = words[0]?.[0] ?? '';\n  const last = words.length > 1 ? (words[words.length - 1]?.[0] ?? '') : '';\n\n  return (first + last).toUpperCase();\n};\n\n/**\n * A user/entity representation: an image, falling back to initials derived from `name`, falling back\n * to projected content (e.g. an icon) when neither is set. A failed image load falls back the same way.\n *\n * Also an attribute selector, so an avatar that has to be a link or a button is written as one -\n * `routerLink`, `href` and click handlers stay on the consumer's own element.\n *\n * @example\n * <et-avatar src=\"/jane.jpg\" name=\"Jane Doe\" />\n * <et-avatar name=\"Jane Doe\" color=\"brand\" />\n * <et-avatar><et-icon [definition]=\"USER_ICON\" /></et-avatar>\n * <a [routerLink]=\"['/users', user.id]\" [name]=\"user.name\" et-avatar></a>\n */\n@Component({\n  selector: 'et-avatar, [et-avatar]',\n  template: `\n    @if (imageVisible()) {\n      <img [src]=\"src()\" [alt]=\"name() ?? ''\" (error)=\"markImageFailed()\" class=\"et-avatar-image\" />\n    } @else if (initials()) {\n      <span class=\"et-avatar-initials\">{{ initials() }}</span>\n    } @else {\n      <ng-content />\n    }\n  `,\n  styleUrl: './avatar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-avatar',\n    '[attr.data-size]': 'size()',\n    '[attr.data-shape]': 'shape()',\n  },\n})\nexport class AvatarComponent {\n  public src = input<string | null>(null);\n  public name = input<string | null>(null);\n  public size = input<AvatarSize>(AVATAR_SIZES.MD);\n  public shape = input<AvatarShape>(AVATAR_SHAPES.CIRCLE);\n\n  protected initials = computed(() => {\n    const name = this.name();\n\n    return name ? initialsFromName(name) : null;\n  });\n\n  private imageFailed = linkedSignal<string | null, boolean>({\n    source: () => this.src(),\n    computation: () => false,\n  });\n\n  protected imageVisible = computed(() => !!this.src() && !this.imageFailed());\n\n  protected markImageFailed() {\n    this.imageFailed.set(true);\n  }\n}\n","import {\n  Component,\n  computed,\n  contentChildren,\n  effect,\n  ElementRef,\n  input,\n  numberAttribute,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AvatarComponent, AVATAR_SHAPES, AVATAR_SIZES } from './avatar.component';\n\n/**\n * Overlaps a row of `et-avatar`s into a stack, each one ringed so it reads apart from its neighbor.\n * Project the avatars you want shown, in order.\n *\n * Past `maxVisible` the group hides the rest and appends a `+N` avatar of its own, matching the first\n * projected avatar's size and shape. Without it every projected avatar is shown, and a \"+N\" you\n * project yourself is just another avatar.\n *\n * @example\n * <et-avatar-group [maxVisible]=\"3\">\n *   @for (member of members(); track member.id) {\n *     <et-avatar [name]=\"member.name\" [src]=\"member.avatarUrl\" />\n *   }\n * </et-avatar-group>\n */\n@Component({\n  selector: 'et-avatar-group',\n  template: `\n    <ng-content />\n\n    @if (overflowCount() > 0) {\n      <et-avatar [size]=\"overflowSize()\" [shape]=\"overflowShape()\" class=\"et-avatar-group-overflow\"\n        >+{{ overflowCount() }}</et-avatar\n      >\n    }\n  `,\n  styleUrl: './avatar-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [AvatarComponent],\n  host: {\n    class: 'et-avatar-group',\n  },\n})\nexport class AvatarGroupComponent {\n  /**\n   * How many of the projected avatars to show. The rest are hidden and counted into a trailing `+N`\n   * avatar. Unset shows all of them.\n   */\n  public maxVisible = input(undefined, {\n    transform: (value: unknown) =>\n      value === undefined || value === null || value === '' ? undefined : numberAttribute(value),\n  });\n\n  private projectedAvatars = contentChildren(AvatarComponent, { descendants: true });\n  private projectedElements = contentChildren(AvatarComponent, { descendants: true, read: ElementRef });\n\n  protected overflowCount = computed(() => {\n    const max = this.maxVisible();\n\n    if (max === undefined) return 0;\n\n    return Math.max(this.projectedAvatars().length - Math.max(max, 0), 0);\n  });\n\n  // The overflow avatar is the group's own, so it has to be told what the projected ones look like.\n  protected overflowSize = computed(() => this.projectedAvatars()[0]?.size() ?? AVATAR_SIZES.MD);\n  protected overflowShape = computed(() => this.projectedAvatars()[0]?.shape() ?? AVATAR_SHAPES.CIRCLE);\n\n  constructor() {\n    effect(() => {\n      const max = this.maxVisible();\n      const elements = this.projectedElements();\n\n      // Hiding is a DOM write rather than a class the avatar carries: which avatars are over the limit\n      // is the group's business, and an avatar projected from a `@for` cannot be bound from here.\n      elements.forEach((element, index) => {\n        element.nativeElement.hidden = max !== undefined && index >= Math.max(max, 0);\n      });\n    });\n  }\n}\n","import { AvatarComponent } from './avatar.component';\nimport { AvatarGroupComponent } from './avatar-group.component';\n\nexport const AVATAR_IMPORTS = [AvatarComponent, AvatarGroupComponent] as const;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\n\nexport const BADGE_VARIANTS = {\n  FILLED: 'filled',\n  TONAL: 'tonal',\n  OUTLINE: 'outline',\n} as const;\n\nexport type BadgeVariant = (typeof BADGE_VARIANTS)[keyof typeof BADGE_VARIANTS];\n\nexport const BADGE_SIZES = {\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n} as const;\n\nexport type BadgeSize = (typeof BADGE_SIZES)[keyof typeof BADGE_SIZES];\n\nexport const BADGE_ICON_ALIGNMENTS = {\n  START: 'start',\n  END: 'end',\n} as const;\n\nexport type BadgeIconAlignment = (typeof BADGE_ICON_ALIGNMENTS)[keyof typeof BADGE_ICON_ALIGNMENTS];\n\n/**\n * A small, non-interactive pill for a status word or a count - \"Active\", \"Beta\", \"3 new\". Unlike\n * `et-chip`, it never removes itself and carries no selection state; reach for a chip when the value\n * is removable or selectable.\n *\n * An element carrying `etIcon` is projected into the badge's icon slot and sized to the badge's own\n * font size; everything else becomes the label.\n *\n * @example\n * <et-badge color=\"success\">Active</et-badge>\n * <et-badge variant=\"outline\">Beta</et-badge>\n * <et-badge size=\"lg\"><i etIcon=\"et-check\"></i>Verified</et-badge>\n */\n@Component({\n  selector: 'et-badge',\n  template: `\n    @if (iconAlignment() === 'start') {\n      <div class=\"et-badge-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    <ng-content />\n\n    @if (iconAlignment() === 'end') {\n      <div class=\"et-badge-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    <ng-template #iconTpl>\n      <ng-content select=\"[etIcon]\" />\n    </ng-template>\n  `,\n  styleUrl: './badge.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  hostDirectives: [\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-badge',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-icon-alignment]': 'iconAlignment()',\n  },\n})\nexport class BadgeComponent {\n  public variant = input<BadgeVariant>(BADGE_VARIANTS.TONAL);\n  public size = input<BadgeSize>(BADGE_SIZES.MD);\n  public iconAlignment = input<BadgeIconAlignment>(BADGE_ICON_ALIGNMENTS.START);\n}\n","import { BadgeComponent } from './badge.component';\n\nexport const BADGE_IMPORTS = [BadgeComponent] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings a banner renders itself. Its heading, description and actions are yours; dismissal is its own. */\nexport type BannerLabels = {\n  /** Accessible label for a dismissible banner's dismiss button. */\n  dismiss: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_BANNER_LABELS: BannerLabels = {\n  dismiss: 'Dismiss',\n};\n\nconst BANNER_LABELS_DEF = /* @__PURE__ */ defineLabels<BannerLabels>('BANNER_LABELS', DEFAULT_BANNER_LABELS);\n\n/**\n * Localize a banner's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_BANNER_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideBannerLabels({ dismiss: 'Schließen' });\n */\nexport const provideBannerLabels = /* @__PURE__ */ toProvideFn(BANNER_LABELS_DEF);\nexport const injectBannerLabels = /* @__PURE__ */ toInjectFn(BANNER_LABELS_DEF);\nexport const BANNER_LABELS = /* @__PURE__ */ toToken(BANNER_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-focus-ring-styles',\n  template: '',\n  styleUrl: './focus-ring-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FocusRingStylesComponent {}\n","import { Directive, booleanAttribute, effect, input, signal } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\nimport { FocusRingStylesComponent } from './focus-ring-styles.component';\n\n@Directive({\n  selector: '[etFocusRing]',\n  host: {\n    '[class.et-focus-ring]': '!focusRingDisabled()',\n    '[class.et-focus-ring--active]': 'active()',\n    '(keydown.enter)': 'active.set(true)',\n    '(keyup.enter)': 'active.set(false)',\n    '(keydown.space)': 'active.set(true)',\n    '(keyup.space)': 'active.set(false)',\n    '(blur)': 'active.set(false)',\n  },\n})\nexport class FocusRingDirective {\n  private styleManager = injectStyleManager();\n\n  /**\n   * Suppresses the ring on this element. Named for the directive, not `disabled`: on a native\n   * control an input called `disabled` swallows the element's own `[disabled]` binding, leaving the\n   * button enabled.\n   */\n  public focusRingDisabled = input(false, { transform: booleanAttribute });\n\n  protected active = signal(false);\n\n  constructor() {\n    effect(() => {\n      if (this.focusRingDisabled()) {\n        return;\n      }\n\n      this.styleManager.mount(FocusRingStylesComponent);\n    });\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * What a busy indicator announces. A spinner, a brand loader and a skeleton are all shapes with no\n * text, so this is the only thing a screen reader has to go on.\n *\n * One set for all of them on purpose: an app that translates \"Loading\" should not have to say so once\n * per component. `et-skeleton`'s `loadingAllyText` still overrides it per instance where something more\n * specific reads better (\"Loading results\").\n */\nexport type LoaderLabels = {\n  /** Announced by an indeterminate loader - the spinner, the brand loader, a stream's loading overlay. */\n  loading: string;\n  /** Announced in place of a skeleton's shapes, which are `aria-hidden`. */\n  loadingContent: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_LOADER_LABELS: LoaderLabels = {\n  loading: 'Loading',\n  loadingContent: 'Loading…',\n};\n\nconst LOADER_LABELS_DEF = /* @__PURE__ */ defineLabels<LoaderLabels>('LOADER_LABELS', DEFAULT_LOADER_LABELS);\n\n/**\n * Localize what loaders announce for everything below this injector, and read the set in effect here as\n * a signal. Partial - whatever you leave out keeps its {@link DEFAULT_LOADER_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideLoaderLabels({ loading: 'Lädt', loadingContent: 'Lädt…' });\n */\nexport const provideLoaderLabels = /* @__PURE__ */ toProvideFn(LOADER_LABELS_DEF);\nexport const injectLoaderLabels = /* @__PURE__ */ toInjectFn(LOADER_LABELS_DEF);\nexport const LOADER_LABELS = /* @__PURE__ */ toToken(LOADER_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectLoaderLabels } from '../loader-labels';\n\nconst BRAND_E_PATH =\n  'M15.905 6.21401C15.7794 6.8902 16.2818 7.51877 16.9517 7.51877H23.8598L22.9201 12.3378H15.6817C15.1048 12.3378 14.6071 12.7569 14.5001 13.3378C14.4861 13.4188 14.4768 13.4997 14.4768 13.5811C14.4768 14.2426 15.0071 14.8092 15.6817 14.8092H23.9435L22.9201 19.9997H6.79183L7.2198 17.814H7.64313C7.94085 17.814 8.20601 17.6907 8.40139 17.495C8.59212 17.2954 8.71307 17.0235 8.71307 16.7235C8.71307 16.1188 8.23858 15.6331 7.64778 15.6288H2.73534C2.14919 15.6288 1.67004 15.1426 1.67004 14.5378C1.67004 14.2383 1.791 13.9621 1.98172 13.7664C2.17711 13.5711 2.44227 13.4473 2.73534 13.4473H8.07111L8.96428 8.88115H9.39226C9.68533 8.88115 9.95049 8.75686 10.1459 8.5621C10.3366 8.3621 10.4576 8.08591 10.4576 7.78543C10.4576 7.18543 9.9784 6.69543 9.39226 6.69543H4.48447C3.89367 6.69543 3.41452 6.20448 3.41452 5.60496C3.41452 5.30448 3.53547 5.02877 3.7262 4.82829C3.92158 4.63353 4.19139 4.50924 4.48447 4.50924H10.2436C10.5366 4.50924 10.8064 4.3902 10.9972 4.1902C11.1879 3.99496 11.3089 3.72401 11.3089 3.41877C11.3089 2.81401 10.8344 2.32829 10.2436 2.32829H1.06994C0.479149 2.32829 0 1.83829 0 1.23305C0 0.933054 0.12095 0.656864 0.31168 0.461626C0.507061 0.266864 0.776873 0.142578 1.06994 0.142578H26.4369L25.4135 5.33305H16.9517C16.4446 5.33305 16.0027 5.70496 15.905 6.21401Z';\n\nconst BRAND_E_OUTLINE_PATH =\n  'M1.07 0.14 L26.44 0.14 L25.41 5.33 L16.95 5.33 C16.44 5.33 16.0 5.70 15.91 6.21 C15.78 6.89 16.28 7.52 16.95 7.52 L23.86 7.52 L22.92 12.34 L15.68 12.34 C15.10 12.34 14.61 12.76 14.50 13.34 C14.49 13.42 14.48 13.50 14.48 13.58 C14.48 14.24 15.01 14.81 15.68 14.81 L23.94 14.81 L22.92 20.0 L6.79 20.0 L7.22 17.81 L7.64 17.81 C7.94 17.81 8.21 17.69 8.40 17.50 C8.59 17.30 8.71 17.02 8.71 16.72 C8.71 16.12 8.24 15.63 7.65 15.63 L2.74 15.63 C2.15 15.63 1.67 15.14 1.67 14.54 C1.67 14.24 1.79 13.96 1.98 13.77 C2.18 13.57 2.44 13.45 2.74 13.45 L8.07 13.45 L8.96 8.88 L9.39 8.88 C9.69 8.88 9.95 8.76 10.15 8.56 C10.34 8.36 10.46 8.09 10.46 7.79 C10.46 7.19 9.98 6.70 9.39 6.70 L4.48 6.70 C3.89 6.70 3.41 6.20 3.41 5.60 C3.41 5.30 3.54 5.03 3.73 4.83 C3.92 4.63 4.19 4.51 4.48 4.51 L10.24 4.51 C10.54 4.51 10.81 4.39 10.997 4.19 C11.188 3.99 11.31 3.72 11.31 3.42 C11.31 2.81 10.83 2.33 10.24 2.33 L1.07 2.33 C0.48 2.33 0 1.84 0 1.23 C0 0.93 0.12 0.66 0.31 0.46 C0.51 0.27 0.78 0.14 1.07 0.14 Z';\n\nlet nextId = 0;\n\n@Component({\n  selector: 'et-brand-loader',\n  template: `\n    <svg class=\"et-brand-loader__svg\" viewBox=\"0 0 26.4369 20\" aria-hidden=\"true\">\n      <defs>\n        <clipPath [attr.id]=\"SHAPE_CLIP_ID\" clipPathUnits=\"userSpaceOnUse\">\n          <path [attr.d]=\"PATH\" />\n        </clipPath>\n\n        <clipPath [attr.id]=\"FILL_CLIP_ID\" clipPathUnits=\"userSpaceOnUse\">\n          <rect class=\"et-brand-loader__fill-clip-rect\" x=\"0\" y=\"0\" width=\"0\" height=\"20\" />\n        </clipPath>\n      </defs>\n\n      <path [attr.d]=\"PATH\" class=\"et-brand-loader__ghost\" />\n\n      <path [attr.d]=\"OUTLINE_PATH\" [attr.clip-path]=\"shapeClip\" class=\"et-brand-loader__outline\" pathLength=\"100\" />\n\n      <path [attr.d]=\"PATH\" [attr.clip-path]=\"fillClip\" class=\"et-brand-loader__fill\" />\n    </svg>\n  `,\n  styleUrl: './brand-loader.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-brand-loader',\n    role: 'progressbar',\n    '[attr.aria-label]': 'labels().loading',\n  },\n})\nexport class BrandLoaderComponent {\n  protected labels = injectLoaderLabels();\n\n  public readonly PATH = BRAND_E_PATH;\n  public readonly OUTLINE_PATH = BRAND_E_OUTLINE_PATH;\n\n  public readonly SHAPE_CLIP_ID = `et-brand-loader-shape-${nextId}`;\n  public shapeClip = `url(#${this.SHAPE_CLIP_ID})`;\n\n  public readonly FILL_CLIP_ID = `et-brand-loader-fill-${nextId}`;\n  public fillClip = `url(#${this.FILL_CLIP_ID})`;\n\n  constructor() {\n    nextId++;\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, input, numberAttribute } from '@angular/core';\n\n@Component({\n  selector: 'et-progress-bar',\n  template: `\n    <div class=\"et-progress-bar__track\" aria-hidden=\"true\">\n      <div\n        [style.transform]=\"indeterminate() ? '' : 'scaleX(' + clampedValue() / 100 + ')'\"\n        class=\"et-progress-bar__bar et-progress-bar__bar--primary\"\n      >\n        <span class=\"et-progress-bar__bar-inner\"></span>\n      </div>\n      <div class=\"et-progress-bar__bar et-progress-bar__bar--secondary\">\n        <span class=\"et-progress-bar__bar-inner\"></span>\n      </div>\n    </div>\n  `,\n  styleUrl: './progress-bar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-progress-bar',\n    '[class.et-progress-bar--indeterminate]': 'indeterminate()',\n    role: 'progressbar',\n    '[attr.aria-valuenow]': 'indeterminate() ? null : clampedValue()',\n    '[attr.aria-valuemin]': 'indeterminate() ? null : 0',\n    '[attr.aria-valuemax]': 'indeterminate() ? null : 100',\n  },\n})\nexport class ProgressBarComponent {\n  public value = input(0, { transform: numberAttribute });\n  public indeterminate = input(false, { transform: booleanAttribute });\n\n  public clampedValue = computed(() => Math.max(0, Math.min(100, this.value())));\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ViewEncapsulation,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  numberAttribute,\n} from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\n\nconst BASE_STROKE_WIDTH = 10;\n\n@Component({\n  selector: 'et-spinner',\n  template: `\n    <ng-template #circle>\n      <svg\n        [attr.viewBox]=\"viewBox()\"\n        class=\"et-spinner-circle-graphic\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        focusable=\"false\"\n      >\n        <circle\n          [attr.r]=\"circleRadius()\"\n          [style.stroke-dasharray.px]=\"strokeCircumference()\"\n          [style.stroke-dashoffset.px]=\"strokeCircumference() / 2\"\n          [style.stroke-width.%]=\"circleStrokeWidth()\"\n          cx=\"50%\"\n          cy=\"50%\"\n        />\n      </svg>\n    </ng-template>\n\n    @if (track()) {\n      <div class=\"et-spinner-track-container\" aria-hidden=\"true\">\n        <svg\n          [attr.viewBox]=\"viewBox()\"\n          class=\"et-spinner-track-graphic\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          focusable=\"false\"\n        >\n          <circle\n            [attr.r]=\"circleRadius()\"\n            [style.stroke-dasharray.px]=\"strokeCircumference()\"\n            [style.stroke-width.%]=\"circleStrokeWidth()\"\n            class=\"et-spinner-track-circle\"\n            cx=\"50%\"\n            cy=\"50%\"\n          />\n        </svg>\n      </div>\n    }\n\n    @if (determinate()) {\n      <svg\n        [attr.viewBox]=\"viewBox()\"\n        class=\"et-spinner-determinate-graphic\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        focusable=\"false\"\n        aria-hidden=\"true\"\n      >\n        <circle\n          [attr.r]=\"circleRadius()\"\n          [style.stroke-dasharray.px]=\"strokeCircumference()\"\n          [style.stroke-dashoffset.px]=\"determinateDashOffset()\"\n          [style.stroke-width.%]=\"circleStrokeWidth()\"\n          class=\"et-spinner-determinate-circle\"\n          cx=\"50%\"\n          cy=\"50%\"\n        />\n      </svg>\n    } @else {\n      <div class=\"et-spinner-indeterminate-container\" aria-hidden=\"true\">\n        <div class=\"et-spinner-layer\">\n          <div class=\"et-spinner-circle-clipper et-spinner-circle-left\">\n            <ng-container [ngTemplateOutlet]=\"circle\" />\n          </div>\n          <div class=\"et-spinner-gap-patch\">\n            <ng-container [ngTemplateOutlet]=\"circle\" />\n          </div>\n          <div class=\"et-spinner-circle-clipper et-spinner-circle-right\">\n            <ng-container [ngTemplateOutlet]=\"circle\" />\n          </div>\n        </div>\n      </div>\n    }\n  `,\n  styleUrl: './spinner.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  hostDirectives: [\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-spinner',\n    '[class.et-spinner--determinate]': 'determinate()',\n    '[class.et-spinner--themed]': 'hasExplicitColor()',\n    '[style.--et-spinner-size.px]': 'diameter()',\n    '[style.--et-spinner-stroke-width.px]': 'strokeWidth()',\n    role: 'progressbar',\n    '[attr.aria-valuenow]': 'determinate() ? clampedValue() : null',\n    '[attr.aria-valuemin]': 'determinate() ? 0 : null',\n    '[attr.aria-valuemax]': 'determinate() ? 100 : null',\n  },\n})\nexport class SpinnerComponent {\n  private provideColor = inject(ProvideColorDirective);\n\n  public diameter = input(18, { transform: numberAttribute });\n  public strokeWidth = input(2.25, { transform: numberAttribute });\n  public track = input(false, { transform: booleanAttribute });\n  public value = input(0, { transform: numberAttribute });\n  public determinate = input(false, { transform: booleanAttribute });\n\n  /**\n   * Whether `color` was set on this spinner. The theme colour is deliberately gated on the input rather than\n   * applied whenever a colour scope resolves: a spinner without `color` must keep inheriting `currentColor`\n   * from its context (a button's label, muted body text), even when it sits inside an ancestor `et-color--*`\n   * scope.\n   */\n  protected hasExplicitColor = computed(() => (this.provideColor.color() ?? null) !== null);\n\n  public circleRadius = computed(() => Math.max(1, (this.diameter() - BASE_STROKE_WIDTH) / 2));\n\n  public normalizedStrokeWidth = computed(() => (this.strokeWidth() / this.diameter()) * 100);\n\n  public viewBox = computed(() => {\n    const diameter = this.circleRadius() * 2 + this.strokeWidth();\n\n    return `0 0 ${diameter} ${diameter}`;\n  });\n\n  public strokeCircumference = computed(() => 2 * Math.PI * this.circleRadius());\n\n  public circleStrokeWidth = computed(() => this.normalizedStrokeWidth());\n\n  public clampedValue = computed(() => Math.max(0, Math.min(100, this.value())));\n\n  public determinateDashOffset = computed(() => {\n    const circumference = this.strokeCircumference();\n\n    return circumference - (this.clampedValue() / 100) * circumference;\n  });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-button-properties-styles',\n  template: '',\n  styleUrl: './button-properties-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ButtonPropertiesStylesComponent {}\n","import { Directive } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\nimport { ButtonPropertiesStylesComponent } from './button-properties-styles.component';\n\n@Directive({\n  selector: '[etButtonStyles]',\n})\nexport class ButtonStylesDirective {\n  private styleManager = injectStyleManager();\n\n  constructor() {\n    this.styleManager.mount(ButtonPropertiesStylesComponent);\n  }\n}\n","import { Directive, ElementRef, booleanAttribute, computed, inject, input, numberAttribute } from '@angular/core';\nimport { SurfaceInteractiveDirective } from '@ethlete/core';\n\nexport const BUTTON_TYPES = {\n  BUTTON: 'button',\n  SUBMIT: 'submit',\n  RESET: 'reset',\n} as const;\n\ntype ButtonType = (typeof BUTTON_TYPES)[keyof typeof BUTTON_TYPES];\n\n@Directive({\n  selector: '[etButton]',\n  exportAs: 'etButton',\n  hostDirectives: [SurfaceInteractiveDirective],\n  host: {\n    '[attr.data-loading]': 'loading() ? true : null',\n    '[attr.data-pressed]': 'pressed() ? true : null',\n    '[attr.disabled]': 'IS_BUTTON && disabled() ? \"\" : null',\n    '[attr.aria-busy]': 'loading() ? true : null',\n    '[attr.aria-disabled]': 'isInactive() ? true : null',\n    '[attr.aria-pressed]': 'ariaPressed()',\n    '[attr.type]': 'IS_BUTTON ? type() : null',\n    '[attr.tabindex]': 'IS_ANCHOR && disabled() ? -1 : ownTabIndex',\n    '(click)': 'blockInactiveClick($event)',\n  },\n})\nexport class ButtonDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public disabled = input(false, { transform: booleanAttribute });\n  public loading = input(false, { transform: booleanAttribute });\n  public type = input<ButtonType>('button');\n  /**\n   * Makes the button a toggle: any bound boolean announces `aria-pressed`, including `false` for the\n   * off state. Leave it unset on a button that is not a toggle.\n   */\n  public pressed = input<boolean | undefined, unknown>(undefined, {\n    transform: (value) => (value === undefined || value === null ? undefined : booleanAttribute(value)),\n  });\n  public emitAriaPressed = input(true, { transform: booleanAttribute });\n\n  /**\n   * How far along the work behind `loading` is, as a percentage (`0`-`100`). Leave it unset for work\n   * of unknown length - the loading spinner then stays indeterminate.\n   */\n  public progress = input<number | null, number | string | null | undefined>(null, {\n    transform: (value) => (value === null || value === undefined || value === '' ? null : numberAttribute(value)),\n  });\n\n  // Without this the host binding would write `null` over a `tabindex` the consumer put on the\n  // element, silently pulling an opted-out control back into the tab order.\n  protected readonly ownTabIndex = this.elementRef.nativeElement.getAttribute('tabindex');\n\n  public readonly IS_BUTTON = this.elementRef.nativeElement.tagName === 'BUTTON';\n  public readonly IS_ANCHOR = this.elementRef.nativeElement.tagName === 'A';\n\n  public isToggle = computed(() => this.pressed() !== undefined);\n\n  protected ariaPressed = computed(() => (this.emitAriaPressed() && this.isToggle() ? String(this.pressed()) : null));\n\n  public isInactive = computed(() => this.disabled() || this.loading());\n\n  public hasProgress = computed(() => this.progress() !== null);\n\n  // A loading button sets no native `disabled`, so it keeps DOM focus and its place in the tab\n  // order. Nothing else stops the click a keyboard activation dispatches.\n  protected blockInactiveClick(event: MouseEvent) {\n    if (!this.isInactive()) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n}\n","import { Directive, effect, inject, input, untracked } from '@angular/core';\nimport { ColorThemeInput, ProvideColorDirective } from '@ethlete/core';\nimport { ButtonDirective } from './button.directive';\n\nexport const INHERIT_COLOR = 'inherit';\n\n/**\n * A color theme name (or theme object), `surface` for the ambient surface's neutral swatch, or\n * `inherit` for whatever color theme surrounds the button.\n */\nexport type ButtonColor = ColorThemeInput | typeof INHERIT_COLOR;\n\n@Directive({\n  selector: '[etButtonColor]',\n  hostDirectives: [ProvideColorDirective],\n})\nexport class ButtonColorDirective {\n  private provideColor = inject(ProvideColorDirective);\n  private buttonDir = inject(ButtonDirective);\n\n  /**\n   * The color theme the button renders in. Defaults to the surrounding one; pass `surface` to take\n   * the neutral colors of the surface the button sits on, so a secondary action reads as chrome\n   * without a neutral color theme being registered.\n   */\n  public color = input<ButtonColor | undefined>(undefined);\n\n  /**\n   * The color theme to swap to while the button is `pressed` - `inherit` for a toggle that stays\n   * neutral until it is active and then picks up the surrounding theme. Defaults to `color`, so a\n   * pressed button keeps its resting theme and only its variant changes.\n   */\n  public pressedColor = input<ButtonColor | undefined>(undefined);\n\n  constructor() {\n    effect(() => {\n      const pressedColor = this.pressedColor();\n      const color = this.buttonDir.pressed() && pressedColor !== undefined ? pressedColor : this.color();\n\n      untracked(() => {\n        if (color === undefined) {\n          this.provideColor.clearForcedColor();\n\n          return;\n        }\n\n        this.provideColor.forceColor(color === INHERIT_COLOR ? null : color);\n      });\n    });\n  }\n}\n","// codes 2300-2399\nexport const SPLIT_BUTTON_ERROR_CODES = {\n  MISSING_ACTION: 2300,\n  MISSING_TRIGGER: 2301,\n  ACTION_OUTSIDE_SPLIT_BUTTON: 2302,\n  TRIGGER_OUTSIDE_SPLIT_BUTTON: 2303,\n  DUPLICATE_ACTION: 2304,\n  DUPLICATE_TRIGGER: 2305,\n} as const;\n","import { Directive, afterNextRender, computed, signal } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SplitButtonActionDirective } from './split-button-action.directive';\nimport { SPLIT_BUTTON_ERROR_CODES } from './split-button-errors';\nimport { SplitButtonTriggerDirective } from './split-button-trigger.directive';\n\n@Directive({\n  selector: '[etSplitButton]',\n  exportAs: 'etSplitButton',\n  host: {\n    role: 'group',\n  },\n})\nexport class SplitButtonDirective {\n  private hostElement = injectHostElement();\n\n  private actions = signal<SplitButtonActionDirective[]>([]);\n  private triggers = signal<SplitButtonTriggerDirective[]>([]);\n\n  /** The action segment of the group, or `null` while none is registered. */\n  public registeredAction = computed(() => this.actions()[0] ?? null);\n\n  /** The trigger segment of the group, or `null` while none is registered. */\n  public registeredTrigger = computed(() => this.triggers()[0] ?? null);\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.registeredAction()) {\n          throw new RuntimeError(\n            SPLIT_BUTTON_ERROR_CODES.MISSING_ACTION,\n            '[SplitButtonDirective] A required [etSplitButtonAction] element was not found. ' +\n              'Add a button with the etSplitButtonAction directive.',\n            { element: this.hostElement },\n          );\n        }\n\n        if (this.actions().length > 1) {\n          throw new RuntimeError(\n            SPLIT_BUTTON_ERROR_CODES.DUPLICATE_ACTION,\n            '[SplitButtonDirective] A split button groups exactly two segments, but ' +\n              `${this.actions().length} [etSplitButtonAction] elements were found. Remove the extra ones.`,\n            { element: this.hostElement },\n          );\n        }\n\n        if (!this.registeredTrigger()) {\n          throw new RuntimeError(\n            SPLIT_BUTTON_ERROR_CODES.MISSING_TRIGGER,\n            '[SplitButtonDirective] A required [etSplitButtonTrigger] element was not found. ' +\n              'Add a button with the etSplitButtonTrigger directive.',\n            { element: this.hostElement },\n          );\n        }\n\n        if (this.triggers().length > 1) {\n          throw new RuntimeError(\n            SPLIT_BUTTON_ERROR_CODES.DUPLICATE_TRIGGER,\n            '[SplitButtonDirective] A split button groups exactly two segments, but ' +\n              `${this.triggers().length} [etSplitButtonTrigger] elements were found. Remove the extra ones.`,\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public registerAction(action: SplitButtonActionDirective) {\n    this.actions.update((actions) => [...actions, action]);\n  }\n\n  /** @internal */\n  public unregisterAction(action: SplitButtonActionDirective) {\n    this.actions.update((actions) => actions.filter((candidate) => candidate !== action));\n  }\n\n  /** @internal */\n  public registerTrigger(trigger: SplitButtonTriggerDirective) {\n    this.triggers.update((triggers) => [...triggers, trigger]);\n  }\n\n  /** @internal */\n  public unregisterTrigger(trigger: SplitButtonTriggerDirective) {\n    this.triggers.update((triggers) => triggers.filter((candidate) => candidate !== trigger));\n  }\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SPLIT_BUTTON_ERROR_CODES } from './split-button-errors';\nimport { SplitButtonDirective } from './split-button.directive';\n\n@Directive({\n  selector: '[etSplitButtonAction]',\n  exportAs: 'etSplitButtonAction',\n  host: {\n    class: 'et-split-button-action',\n  },\n})\nexport class SplitButtonActionDirective {\n  private splitButton = inject(SplitButtonDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  constructor() {\n    if (ngDevMode && !this.splitButton) {\n      throw new RuntimeError(\n        SPLIT_BUTTON_ERROR_CODES.ACTION_OUTSIDE_SPLIT_BUTTON,\n        '[SplitButtonActionDirective] etSplitButtonAction must be placed inside an [etSplitButton] element.',\n        { element: this.hostElement },\n      );\n    }\n\n    this.splitButton?.registerAction(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.splitButton?.unregisterAction(this);\n    });\n  }\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SPLIT_BUTTON_ERROR_CODES } from './split-button-errors';\nimport { SplitButtonDirective } from './split-button.directive';\n\n@Directive({\n  selector: '[etSplitButtonTrigger]',\n  exportAs: 'etSplitButtonTrigger',\n  host: {\n    class: 'et-split-button-trigger',\n  },\n})\nexport class SplitButtonTriggerDirective {\n  private splitButton = inject(SplitButtonDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  constructor() {\n    if (ngDevMode && !this.splitButton) {\n      throw new RuntimeError(\n        SPLIT_BUTTON_ERROR_CODES.TRIGGER_OUTSIDE_SPLIT_BUTTON,\n        '[SplitButtonTriggerDirective] etSplitButtonTrigger must be placed inside an [etSplitButton] element.',\n        { element: this.hostElement },\n      );\n    }\n\n    this.splitButton?.registerTrigger(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.splitButton?.unregisterTrigger(this);\n    });\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { SpinnerComponent } from '../loader';\nimport { ButtonStylesDirective } from './button-styles.directive';\nimport { ButtonColorDirective, ButtonDirective } from './headless';\n\nexport const BUTTON_SIZES = {\n  XS: 'xs',\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n  XL: 'xl',\n} as const;\n\nexport type ButtonSize = (typeof BUTTON_SIZES)[keyof typeof BUTTON_SIZES];\n\nexport const BUTTON_ICON_ALIGNMENTS = {\n  START: 'start',\n  END: 'end',\n} as const;\n\nexport type ButtonIconAlignment = (typeof BUTTON_ICON_ALIGNMENTS)[keyof typeof BUTTON_ICON_ALIGNMENTS];\n\nexport const BUTTON_VARIANTS = {\n  FILLED: 'filled',\n  OUTLINE: 'outline',\n  TONAL: 'tonal',\n  TRANSPARENT: 'transparent',\n} as const;\n\nexport type ButtonVariant = (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS];\n\nexport const BUTTON_SPINNER_CONFIG: Record<ButtonSize, { diameter: number; strokeWidth: number }> = {\n  xs: { diameter: 12, strokeWidth: 1.5 },\n  sm: { diameter: 14, strokeWidth: 1.75 },\n  md: { diameter: 16, strokeWidth: 2 },\n  lg: { diameter: 20, strokeWidth: 2.5 },\n  xl: { diameter: 24, strokeWidth: 3 },\n};\n\nconst PRESSED_VARIANT_MAP: Record<ButtonVariant, string> = {\n  filled: 'outline',\n  outline: 'filled',\n  tonal: 'filled',\n  transparent: 'tonal',\n};\n\n@Component({\n  selector: '[et-button]',\n  template: `\n    @if (iconAlignment() === 'start') {\n      <div class=\"et-button-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    <div class=\"et-button-contents\">\n      <ng-content />\n    </div>\n\n    @if (iconAlignment() === 'end') {\n      <div class=\"et-button-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    @if (buttonDir.loading()) {\n      <div class=\"et-button-loader\" aria-hidden=\"true\">\n        <et-spinner\n          [diameter]=\"spinnerConfig().diameter\"\n          [strokeWidth]=\"spinnerConfig().strokeWidth\"\n          [determinate]=\"buttonDir.hasProgress()\"\n          [track]=\"buttonDir.hasProgress()\"\n          [value]=\"buttonDir.progress() ?? 0\"\n          class=\"et-button-loader-spinner\"\n        />\n      </div>\n    }\n\n    <ng-template #iconTpl>\n      <ng-content select=\"[etIcon]\" />\n    </ng-template>\n  `,\n  styleUrl: './button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet, SpinnerComponent],\n  hostDirectives: [\n    {\n      directive: ButtonDirective,\n      inputs: ['disabled', 'loading', 'progress', 'type', 'pressed'],\n    },\n    ButtonStylesDirective,\n    ColorInteractiveDirective,\n    FocusRingDirective,\n    {\n      directive: ButtonColorDirective,\n      inputs: ['color', 'pressedColor'],\n    },\n  ],\n  host: {\n    class: 'et-button',\n    '[attr.data-icon-alignment]': 'iconAlignment()',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-pressed-variant]': 'pressedVariant()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class ButtonComponent {\n  protected buttonDir = inject(ButtonDirective);\n\n  public variant = input<ButtonVariant>(BUTTON_VARIANTS.FILLED);\n  public size = input<ButtonSize>(BUTTON_SIZES.MD);\n  public iconAlignment = input<ButtonIconAlignment>(BUTTON_ICON_ALIGNMENTS.START);\n\n  public canAnimate = createCanAnimateSignal();\n\n  public spinnerConfig = computed(() => BUTTON_SPINNER_CONFIG[this.size()]);\n\n  public pressedVariant = computed(() => (this.buttonDir.pressed() ? PRESSED_VARIANT_MAP[this.variant()] : null));\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { SpinnerComponent } from '../loader';\nimport { ButtonStylesDirective } from './button-styles.directive';\nimport { BUTTON_SIZES, BUTTON_SPINNER_CONFIG, BUTTON_VARIANTS, ButtonSize } from './button.component';\nimport { ButtonColorDirective, ButtonDirective } from './headless';\n\ntype IconButtonVariant = (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS];\n\nconst PRESSED_VARIANT_MAP: Record<IconButtonVariant, string> = {\n  filled: 'transparent',\n  outline: 'filled',\n  tonal: 'filled',\n  transparent: 'tonal',\n};\n\n@Component({\n  selector: '[et-icon-button]',\n  template: `\n    <div class=\"et-icon-button-icon\">\n      <ng-content select=\"[etIcon]\" />\n    </div>\n\n    @if (buttonDir.loading()) {\n      <div class=\"et-button-loader\" aria-hidden=\"true\">\n        <et-spinner\n          [diameter]=\"spinnerConfig().diameter\"\n          [strokeWidth]=\"spinnerConfig().strokeWidth\"\n          [determinate]=\"buttonDir.hasProgress()\"\n          [track]=\"buttonDir.hasProgress()\"\n          [value]=\"buttonDir.progress() ?? 0\"\n          class=\"et-button-loader-spinner\"\n        />\n      </div>\n    }\n  `,\n  styleUrl: './icon-button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [SpinnerComponent],\n  hostDirectives: [\n    {\n      directive: ButtonDirective,\n      inputs: ['disabled', 'loading', 'progress', 'type', 'pressed', 'emitAriaPressed'],\n    },\n    ButtonStylesDirective,\n    ColorInteractiveDirective,\n    FocusRingDirective,\n    {\n      directive: ButtonColorDirective,\n      inputs: ['color', 'pressedColor'],\n    },\n  ],\n  host: {\n    class: 'et-icon-button',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-pressed-variant]': 'pressedVariant()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class IconButtonComponent {\n  protected buttonDir = inject(ButtonDirective);\n\n  public variant = input<IconButtonVariant>(BUTTON_VARIANTS.TRANSPARENT);\n  public size = input<ButtonSize>(BUTTON_SIZES.MD);\n\n  public canAnimate = createCanAnimateSignal();\n\n  public spinnerConfig = computed(() => BUTTON_SPINNER_CONFIG[this.size()]);\n\n  public pressedVariant = computed(() => (this.buttonDir.pressed() ? PRESSED_VARIANT_MAP[this.variant()] : null));\n}\n","import {\n  Component,\n  Injector,\n  ViewEncapsulation,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  runInInjectionContext,\n} from '@angular/core';\nimport {\n  ColorTheme,\n  ProvideColorDirective,\n  RegisteredColorThemeName,\n  injectErrorTheme,\n  injectSuccessTheme,\n  injectWarningTheme,\n} from '@ethlete/core';\nimport { IconButtonComponent } from '../button/icon-button.component';\nimport { ICON_IMPORTS, TIMES_ICON, provideIcons } from '../icon';\nimport { injectBannerLabels } from './banner-labels';\n\nexport const BANNER_TYPES = {\n  INFO: 'info',\n  SUCCESS: 'success',\n  WARNING: 'warning',\n  ERROR: 'error',\n} as const;\n\nexport type BannerType = (typeof BANNER_TYPES)[keyof typeof BANNER_TYPES];\n\nexport type BannerLiveRegion = 'alert' | 'status';\n\nconst ALERT_BANNER_TYPES: ReadonlySet<BannerType> = /* @__PURE__ */ new Set([BANNER_TYPES.WARNING, BANNER_TYPES.ERROR]);\n\n/**\n * A static, dismissible page or section message - icon/description/actions are yours to project,\n * unlike `et-notification`, which is a transient, manager-driven toast.\n *\n * @example\n * <et-banner type=\"error\" heading=\"Something went wrong\" description=\"Please try again.\" dismissible>\n *   <i etIcon=\"et-triangle-exclamation\"></i>\n *   <button et-text-button etBannerAction type=\"button\">Retry</button>\n * </et-banner>\n */\n@Component({\n  selector: 'et-banner',\n  templateUrl: './banner.component.html',\n  styleUrl: './banner.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent, ...ICON_IMPORTS],\n  // viewProviders, not providers: this must only resolve the dismiss icon in the component's own\n  // template, never for a consumer's projected `[etIcon]` - `provideIcons` is a single value provider,\n  // so on `providers` it would shadow whatever icon set the consumer registered for their own content.\n  viewProviders: [provideIcons(TIMES_ICON)],\n  hostDirectives: [ProvideColorDirective],\n  host: {\n    class: 'et-banner',\n    '[attr.role]': 'resolvedRole()',\n    '[attr.data-type]': 'type()',\n  },\n})\nexport class BannerComponent {\n  private provideColor = inject(ProvideColorDirective);\n  private injector = inject(Injector);\n\n  protected resolvedLabels = injectBannerLabels();\n\n  public heading = input<string>();\n  public description = input<string>();\n  public type = input<BannerType>(BANNER_TYPES.INFO);\n  public dismissible = input(false, { transform: booleanAttribute });\n\n  /**\n   * Overrides the live-region role `type` would pick. Pass `null` for a banner nested inside something\n   * that already announces - two live regions read the same message twice.\n   */\n  public liveRegion = input<BannerLiveRegion | null | undefined>(undefined);\n\n  /**\n   * Overrides the type's default color theme. `info` has no semantic theme of its own (there is no\n   * app-registered `type: 'info'` slot), so pass a theme name to color an informational banner -\n   * otherwise it renders untinted.\n   */\n  public color = input<RegisteredColorThemeName | ColorTheme | null>(null);\n\n  public dismiss = output<void>();\n\n  protected resolvedRole = computed((): BannerLiveRegion | null => {\n    const liveRegion = this.liveRegion();\n\n    if (liveRegion !== undefined) return liveRegion;\n\n    return ALERT_BANNER_TYPES.has(this.type()) ? 'alert' : 'status';\n  });\n\n  constructor() {\n    // Only the type actually in use is injected, and only once it's rendered: an app that only ever\n    // shows `info`/`error` banners shouldn't have to register `warning`/`success` themes it never renders.\n    effect(() => {\n      const explicitColor = this.color();\n\n      if (explicitColor) {\n        this.provideColor.forceColor(explicitColor);\n\n        return;\n      }\n\n      const type = this.type();\n\n      if (type === BANNER_TYPES.INFO) {\n        this.provideColor.clearForcedColor();\n\n        return;\n      }\n\n      const theme = runInInjectionContext(this.injector, () => {\n        if (type === BANNER_TYPES.SUCCESS) return injectSuccessTheme();\n        if (type === BANNER_TYPES.WARNING) return injectWarningTheme();\n        return injectErrorTheme();\n      });\n\n      this.provideColor.forceColor(theme);\n    });\n  }\n}\n","<ng-content select=\"[etIcon]\" />\n\n<div class=\"et-banner-content\">\n  @if (heading(); as heading) {\n    <p class=\"et-banner-heading\">{{ heading }}</p>\n  }\n\n  <ng-content select=\"[etBannerHeading]\" />\n\n  @if (description(); as description) {\n    <p class=\"et-banner-description\">{{ description }}</p>\n  }\n\n  <ng-content select=\"[etBannerBody]\" />\n\n  <ng-content select=\"[etBannerAction]\" />\n</div>\n\n@if (dismissible()) {\n  <!-- No [color]: the host's color scope is the one all of this projects into, and the button inherits it. -->\n  <button\n    [attr.aria-label]=\"resolvedLabels().dismiss\"\n    (click)=\"dismiss.emit()\"\n    class=\"et-banner-dismiss-btn\"\n    et-icon-button\n    size=\"xs\"\n    type=\"button\"\n  >\n    <i etIcon=\"et-times\"></i>\n  </button>\n}\n","import { BannerComponent } from './banner.component';\n\nexport const BANNER_IMPORTS = [BannerComponent] as const;\n","// codes 4300-4399\nexport const MATCH_ERROR_CODES = {\n  /** A match part (`etMatchCardScore`, …) was used outside an `[etMatchCard]`. */\n  PART_OUTSIDE_MATCH_CARD: 4300,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { MatchCardDirective } from './match-card.directive';\n\nexport const MATCH_CARD_TOKEN = new InjectionToken<MatchCardDirective>('MATCH_CARD_TOKEN');\n","import { afterNextRender, computed, Directive, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { MATCH_ERROR_CODES } from '../match-errors';\nimport { MATCH_CARD_TOKEN } from './match-card.tokens';\n\n/**\n * Every part reads its state off the card it sits in, so one outside a card is a template mistake rather\n * than a degraded card. Checked after render, since the parent registers during construction.\n */\nconst assertInsideMatchCard = (card: unknown, selector: string) => {\n  if (!ngDevMode) return;\n\n  const element = injectHostElement();\n\n  afterNextRender(() => {\n    if (card) return;\n\n    throw new RuntimeError(\n      MATCH_ERROR_CODES.PART_OUTSIDE_MATCH_CARD,\n      `[${selector}] ${selector} must be placed inside an [etMatchCard] element (e.g. <et-match-card>).`,\n      { element },\n    );\n  });\n};\n\n/**\n * Marks the element that announces the score. It is a polite, atomic live region, so a score arriving\n * over a poll or a socket is read as one value (`\"2 : 1\"`) rather than digit by digit - and only when it\n * changes, never on first render.\n *\n * The default card puts this on a visually hidden element and hides the drawn digits from assistive tech,\n * which is what keeps the score from being read three times over.\n */\n@Directive({\n  selector: '[etMatchCardScore]',\n  exportAs: 'etMatchCardScore',\n  host: {\n    'aria-live': 'polite',\n    'aria-atomic': 'true',\n  },\n})\nexport class MatchCardScoreDirective {\n  private card = inject(MATCH_CARD_TOKEN, { optional: true });\n\n  constructor() {\n    assertInsideMatchCard(this.card, 'etMatchCardScore');\n  }\n}\n\n/**\n * Marks the row that carries the match's label, its live badge and its kick-off. Hidden from assistive\n * tech: all three are already in the card's composed accessible name, and reading them again as loose\n * fragments is what makes a list of these unbearable to listen to.\n */\n@Directive({\n  selector: '[etMatchCardMeta]',\n  exportAs: 'etMatchCardMeta',\n  host: {\n    'aria-hidden': 'true',\n  },\n})\nexport class MatchCardMetaDirective {\n  private card = inject(MATCH_CARD_TOKEN, { optional: true });\n\n  constructor() {\n    assertInsideMatchCard(this.card, 'etMatchCardMeta');\n  }\n}\n\n/**\n * Marks the per-game breakdown of a series (Bo3/Bo5) and names it from the `gameScores` label. The\n * explicit `role=\"list\"` is not redundant: a list whose `list-style` is removed loses its role in Safari,\n * and this one is always styled.\n */\n@Directive({\n  selector: '[etMatchCardGameScores]',\n  exportAs: 'etMatchCardGameScores',\n  host: {\n    role: 'list',\n    '[attr.aria-label]': 'ariaLabel()',\n  },\n})\nexport class MatchCardGameScoresDirective {\n  private card = inject(MATCH_CARD_TOKEN, { optional: true });\n\n  protected ariaLabel = computed(() => this.card?.resolvedLabels().gameScores ?? null);\n\n  constructor() {\n    assertInsideMatchCard(this.card, 'etMatchCardGameScores');\n  }\n}\n","import { effect, InjectionToken, Provider, inject } from '@angular/core';\nimport { injectLocale } from '@ethlete/core';\nimport { Locale } from 'date-fns';\n\n/**\n * The wire format date controls read and write their string values in\n * (a date-fns format string). Defaults to ISO 8601 with offset.\n */\nexport const DATE_FORMAT = new InjectionToken<string>('DATE_FORMAT', {\n  providedIn: 'root',\n  factory: () => \"yyyy-MM-dd'T'HH:mm:ssxxx\",\n});\n\n/** The wire format time controls read and write their string values in. */\nexport const TIME_FORMAT = new InjectionToken<string>('TIME_FORMAT', {\n  providedIn: 'root',\n  factory: () => 'HH:mm',\n});\n\n/**\n * The date-fns `Locale` used for display formatting and calendar labels.\n * `null` falls back to date-fns' built-in default (en-US).\n *\n * It does not follow `provideLocale()`: an app that sets `provideLocale('de')` must also\n * `provideDateLocale(de)` - {@link injectDateLocale} warns in dev mode when it hasn't.\n */\nexport const DATE_LOCALE = new InjectionToken<Locale | null>('DATE_LOCALE', {\n  providedIn: 'root',\n  factory: () => null,\n});\n\nexport const provideDateFormat = (format: string): Provider => ({ provide: DATE_FORMAT, useValue: format });\n\nexport const provideTimeFormat = (format: string): Provider => ({ provide: TIME_FORMAT, useValue: format });\n\nexport const provideDateLocale = (locale: Locale): Provider => ({ provide: DATE_LOCALE, useValue: locale });\n\nexport const injectDateFormat = () => inject(DATE_FORMAT);\n\nexport const injectTimeFormat = () => inject(TIME_FORMAT);\n\nlet warnedAboutMissingDateLocale = false;\n\nexport const injectDateLocale = () => {\n  const dateLocale = inject(DATE_LOCALE);\n\n  if (ngDevMode && !dateLocale) {\n    const { currentLocale } = injectLocale();\n\n    effect(() => {\n      const locale = currentLocale();\n\n      if (warnedAboutMissingDateLocale || locale.toLowerCase().startsWith('en')) return;\n\n      warnedAboutMissingDateLocale = true;\n\n      console.warn(\n        `[ethlete] provideLocale('${locale}') is set but DATE_LOCALE is not, so dates and calendar ` +\n          `names stay in en-US. Import the matching date-fns locale and add ` +\n          `provideDateLocale(...) next to provideLocale().`,\n      );\n    });\n  }\n\n  return dateLocale;\n};\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\nimport { NormalizedMatchResultKind, NormalizedMatchStatus } from './match.types';\n\n/** The two headline values of a match, for the label that turns them into a phrase. */\nexport type MatchResultNameContext = {\n  /** The home side's value, as drawn (`'2'`, `'3'`), or `null` when the match reports no values. */\n  home: string | null;\n  /** The away side's value, as drawn, or `null`. */\n  away: string | null;\n  /** What the two values are - see {@link NormalizedMatchResultKind}. */\n  kind: NormalizedMatchResultKind;\n  /** The winning side's display name, or `null` while undecided or drawn. */\n  winner: string | null;\n  /** The `scoreSeparator` in effect, passed in so this label honours an override of it. */\n  separator: string;\n};\n\n/** What a match card announces about itself, once composed. */\nexport type MatchCardNameContext = {\n  /** The home side's display name, or the `tbd` label when the slot is empty. */\n  home: string;\n  /** The away side's display name, or the `tbd` label. */\n  away: string;\n  /**\n   * How it stands, as the `resultName` label phrased it (`'2 : 1'`, `'FC Berlin won'`), or `null`\n   * before there is a result.\n   */\n  result: string | null;\n  /** What the underlying two values are, in case the phrasing should turn on it. */\n  resultKind: NormalizedMatchResultKind;\n  /** The winning side's display name, or `null` while undecided or drawn. */\n  winner: string | null;\n  /** The kick-off, already formatted for the active locale, or `null` when unscheduled. */\n  startTime: string | null;\n  status: NormalizedMatchStatus;\n  /** The match's own `label` (`'Grand Final'`), or `null` when it has none. */\n  label: string | null;\n};\n\n/**\n * Every string the match components render or announce. Defaults are English\n * ({@link DEFAULT_MATCH_LABELS}); override them app-wide with {@link provideMatchLabels} or per\n * instance via the `labels` input.\n */\nexport type MatchLabels = {\n  /** Stands in for a participant that isn't decided yet. */\n  tbd: string;\n  /** The live badge's text. */\n  live: string;\n  /** Announced for a finished match, and shown where a status word is drawn. */\n  finished: string;\n  /** Announced for a match that hasn't started. */\n  scheduled: string;\n  /** Separates the two scores, e.g. `' : '`. Also used to build the accessible name. */\n  scoreSeparator: string;\n  /**\n   * How the result is announced - which is not how it is drawn. `'W'` beside `'L'` reads fine and\n   * listens terribly, so a match with no values to read names its winner instead, and `points` says\n   * what the numbers are.\n   */\n  resultName: (context: MatchResultNameContext) => string;\n  /** Sits between the two sides in the wide row, where a match has no result yet. */\n  versus: string;\n  /** The winning side's letter, for a match whose `resultKind` is `'outcome'`. */\n  outcomeWin: string;\n  /** The losing side's letter. */\n  outcomeLoss: string;\n  /** Both sides' letter for a drawn match. */\n  outcomeDraw: string;\n  /** Accessible name for a participant's emblem - the image is decorative beside the name. */\n  emblemAlt: (participant: string) => string;\n  /** A participant's seed, e.g. `'Seed 3'`. */\n  seed: (seed: number) => string;\n  /**\n   * The card's whole accessible name. One string per card, so a screen reader reads the match rather\n   * than walking six unrelated fragments.\n   */\n  matchName: (context: MatchCardNameContext) => string;\n  /** Names the per-game breakdown of a series for assistive tech. */\n  gameScores: string;\n  /** One game of a series, e.g. `'Game 2: 13 : 11'`. */\n  gameScore: (game: number, score: string) => string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_MATCH_LABELS: MatchLabels = {\n  tbd: 'TBD',\n  live: 'Live',\n  finished: 'Finished',\n  scheduled: 'Scheduled',\n  scoreSeparator: ' : ',\n  resultName: ({ home, away, kind, winner, separator }) => {\n    // Nothing numeric to read: a competition that reports only wins and losses still has an outcome,\n    // and \"W\" is not it.\n    if (home === null || away === null) return winner ? `${winner} won` : 'Draw';\n\n    const pair = `${home}${separator}${away}`;\n\n    return kind === 'points' ? `${pair} points` : pair;\n  },\n  versus: 'vs',\n  outcomeWin: 'W',\n  outcomeLoss: 'L',\n  outcomeDraw: 'D',\n  emblemAlt: (participant) => `${participant} emblem`,\n  seed: (seed) => `Seed ${seed}`,\n  matchName: ({ home, away, result, startTime, status, label }) => {\n    const kickOff = status === 'live' ? null : startTime;\n    const state = status === 'live' ? 'Live' : status === 'finished' ? 'Finished' : null;\n    const matchUp = label ? `${label}: ${home} vs. ${away}` : `${home} vs. ${away}`;\n\n    return [matchUp, result, kickOff, state].filter(Boolean).join(', ');\n  },\n  gameScores: 'Games',\n  gameScore: (game, score) => `Game ${game}: ${score}`,\n};\n\nconst MATCH_LABELS_DEF = /* @__PURE__ */ defineLabels<MatchLabels>('MATCH_LABELS', DEFAULT_MATCH_LABELS);\n\n/**\n * Localize the match components' strings for everything below this injector, and read the set in\n * effect here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_MATCH_LABELS}\n * value. See {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideMatchLabels({\n *   tbd: 'Offen',\n *   live: 'Live',\n *   matchName: ({ home, away, result }) => `${home} gegen ${away}${result ? `, ${result}` : ''}`,\n * });\n */\nexport const provideMatchLabels = /* @__PURE__ */ toProvideFn(MATCH_LABELS_DEF);\nexport const injectMatchLabels = /* @__PURE__ */ toInjectFn(MATCH_LABELS_DEF);\nexport const MATCH_LABELS = /* @__PURE__ */ toToken(MATCH_LABELS_DEF);\n","import { MatchLabels } from './match-labels';\nimport { NormalizedMatchParticipant } from './match.types';\n\nexport type MatchParticipantDisplayNameOptions = {\n  /** The side to name. `null` is a TBD slot, which is named by the `tbd` label. */\n  participant: NormalizedMatchParticipant | null;\n  /** The label set in effect - supplies `tbd` when there is nothing else to say. */\n  labels: MatchLabels;\n  /** Prefer the short `code` over the full name, for a narrow column. @default false */\n  compact?: boolean;\n};\n\n/**\n * What one side of a match is called, in one string. Extracted so the fallback chain exists once: the\n * participant primitive renders it, and a match card composes its accessible name from it without\n * reaching into the rendered participants.\n *\n * Compact prefers the code and falls back to the name, because a participant with no code still has to\n * be readable in a narrow column. Non-compact does the reverse - a name is what a participant is\n * called, and the code is what's left when the API hasn't sent one.\n */\nexport const matchParticipantDisplayName = ({ participant, labels, compact }: MatchParticipantDisplayNameOptions) => {\n  if (!participant) return labels.tbd;\n\n  const name = compact ? (participant.code ?? participant.name) : (participant.name ?? participant.code);\n\n  return name ?? labels.tbd;\n};\n","import {\n  booleanAttribute,\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  linkedSignal,\n  output,\n  untracked,\n} from '@angular/core';\nimport { format } from 'date-fns';\nimport { injectDateLocale } from '../../forms/date-time/date-time-formats';\nimport { injectMatchLabels, MatchLabels } from '../match-labels';\nimport { matchParticipantDisplayName } from '../match-participant-name';\nimport { NormalizedGameScore, NormalizedMatch } from '../match.types';\nimport { MATCH_CARD_TOKEN } from './match-card.tokens';\n\nexport const MATCH_CARD_SIZES = {\n  /** Let the card's own width decide - the container-query default. */\n  AUTO: 'auto',\n  /** Always the dense row: short codes, no per-game breakdown. */\n  COMPACT: 'compact',\n  /** Always the featured card: big emblems, per-game breakdown, sides stacked. */\n  EXPANDED: 'expanded',\n  /** Always the wide row: the two sides face each other across the middle, results meeting in it. */\n  WIDE: 'wide',\n} as const;\n\nexport type MatchCardSize = (typeof MATCH_CARD_SIZES)[keyof typeof MATCH_CARD_SIZES];\n\n/**\n * The kick-off format when none is given: the active locale's short date and short time. Deliberately\n * unambiguous rather than pretty - a match list spanning a season can't rely on \"Sat 15:30\".\n */\nexport const DEFAULT_MATCH_CARD_START_TIME_FORMAT = 'P p';\n\n/** Elements that are focusable and clickable on their own, so the card doesn't have to fake it. */\nconst NATIVELY_INTERACTIVE_TAGS = ['A', 'BUTTON'];\n\n/** One side's headline value changing - a goal, a map win, a correction. */\nexport type MatchScoreChange = {\n  side: 'home' | 'away';\n  /** The value before, as it was on the match. */\n  from: number | string | null;\n  /** The value now. */\n  to: number | string | null;\n  /** How much it moved, when both values are numbers - `null` for anything else. */\n  delta: number | null;\n};\n\n/** Both sides at once, since a corrected result can move both. */\ntype MatchScoreTransition = {\n  home: MatchScoreChange | null;\n  away: MatchScoreChange | null;\n};\n\nconst NO_TRANSITION: MatchScoreTransition = { home: null, away: null };\n\nconst scoreChange = ({ side, from, to }: Omit<MatchScoreChange, 'delta'>): MatchScoreChange => ({\n  side,\n  from,\n  to,\n  delta: typeof from === 'number' && typeof to === 'number' ? to - from : null,\n});\n\n/**\n * Headless match card: takes a {@link NormalizedMatch} and works out everything a card draws - the\n * score as one string, the kick-off in the active locale, who won, and the single composed name the\n * whole thing announces itself by.\n *\n * It imposes no template. Put it on the element that *is* the card, and read the state off it:\n *\n * @example\n * <a [match]=\"match()\" [routerLink]=\"['/matches', match().id]\" etMatchCard>\n *   <span>{{ card.homeName() }}</span>\n *   <span etMatchCardScore>{{ card.result() }}</span>\n *   <span>{{ card.awayName() }}</span>\n * </a>\n *\n * **One interactive element.** The accessible name lands on the host, so the host is what should be the\n * link or the button - `<a etMatchCard routerLink>`, or composed with\n * [`etQueryParamOverlayLink`](/components/overlay-openers) for a shareable detail overlay. Nothing\n * inside a card may be a second click target; an affordance that needs its own (a pin, a follow button)\n * belongs next to the card, not in it.\n */\n@Directive({\n  selector: '[etMatchCard]',\n  exportAs: 'etMatchCard',\n  providers: [{ provide: MATCH_CARD_TOKEN, useExisting: MatchCardDirective }],\n  host: {\n    '[attr.data-status]': 'match().status',\n    '[attr.data-size]': 'size()',\n    '[attr.data-result-kind]': 'match().resultKind',\n    '[attr.data-winner]': 'match().winnerSide',\n    '[attr.data-interactive]': 'isInteractive() ? \"\" : null',\n    '[attr.data-hide-names]': 'hideNames() ? \"\" : null',\n    '[attr.aria-label]': 'accessibleName()',\n    // A card that isn't a link is still one thing rather than six loose fragments - but an unlabelled\n    // `div` can't carry a name, so it becomes a group. A link or button already has a role of its own.\n    '[attr.role]': 'isInteractive() ? null : \"group\"',\n  },\n})\nexport class MatchCardDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private injectedLabels = injectMatchLabels();\n  private dateLocale = injectDateLocale();\n\n  /** The match to draw, already normalized - see {@link NormalizedMatch} and the `integrations/` adapters. */\n  public match = input.required<NormalizedMatch>();\n\n  /**\n   * Which layout to render. `auto` (the default) lets the card's own inline size decide via a container\n   * query - dense row, then featured card, then wide row as it gets wider; the other three fix it, for\n   * a consumer who wants the same card everywhere regardless of width.\n   *\n   * Only an explicit `compact` swaps participant names for their short codes - a text change can't come\n   * out of a container query, so `auto` keeps full names and lets them ellipsize.\n   *\n   * @default 'auto'\n   */\n  public size = input<MatchCardSize>(MATCH_CARD_SIZES.AUTO);\n\n  /** Show each participant's seeding position, when they have one. @default false */\n  public showSeeds = input(false, { transform: booleanAttribute });\n\n  /**\n   * Draw emblems only, no names. For the densest cell there is - a bracket that has to fit six rounds on\n   * a phone. The names stay in the card's accessible name and in each emblem's `alt`, so nothing is lost\n   * to assistive tech; give participants an `emblem` before turning this on, or every row looks alike.\n   *\n   * @default false\n   */\n  public hideNames = input(false, { transform: booleanAttribute });\n\n  /**\n   * The date-fns format the kick-off is drawn in. `null` uses\n   * {@link DEFAULT_MATCH_CARD_START_TIME_FORMAT}; a rail of today's matches usually wants just `'p'`.\n   */\n  public startTimeFormat = input<string | null>(null);\n\n  /**\n   * Whether this card is a click target. `null` (the default) infers it from the host element, which is\n   * right whenever the card is an `<a>` or `<button>`. Set it explicitly for a host that is interactive\n   * some other way - a `<div>` wired to an overlay opener with its own `role` and `tabindex`.\n   */\n  public interactive = input<boolean | null>(null);\n\n  /**\n   * Animate the headline values when they change - the score ticker and the accent flash on the side that\n   * scored. Only ever while the match is **live**: a finished score arriving with the page, or a corrected\n   * result hours later, is not a moment worth animating.\n   *\n   * @default true\n   */\n  public animateScoreChanges = input(true, { transform: booleanAttribute });\n\n  /** Override this instance's strings - see {@link provideMatchLabels} for the app-wide version. */\n  public labels = input<Partial<MatchLabels> | null>(null);\n\n  /**\n   * Fires whenever a headline value changes after the first render - the hook for the effects this library\n   * deliberately doesn't ship (a sound, confetti, a toast). Both sides can fire from one update.\n   */\n  public scoreChange = output<MatchScoreChange>();\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<MatchLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  private readonly IS_NATIVELY_INTERACTIVE = NATIVELY_INTERACTIVE_TAGS.includes(this.elementRef.nativeElement.tagName);\n\n  /** Whether the card acts as a click target, and should therefore look and feel like one. */\n  public isInteractive = computed(() => this.interactive() ?? this.IS_NATIVELY_INTERACTIVE);\n\n  public isLive = computed(() => this.match().status === 'live');\n  public isFinished = computed(() => this.match().status === 'finished');\n  public isScheduled = computed(() => this.match().status === 'scheduled');\n\n  /**\n   * Whether participants render as short codes. Tied to an explicit `compact`, not to the rendered\n   * width - see the `size` input.\n   */\n  public showsShortNames = computed(() => this.size() === MATCH_CARD_SIZES.COMPACT);\n\n  /** The home side's name as it is announced: the full name, even where the card draws a code. */\n  public homeName = computed(() =>\n    matchParticipantDisplayName({ participant: this.match().home, labels: this.resolvedLabels() }),\n  );\n\n  /** The away side's name as it is announced. */\n  public awayName = computed(() =>\n    matchParticipantDisplayName({ participant: this.match().away, labels: this.resolvedLabels() }),\n  );\n\n  /** Whether the result is reported as W/L/D rather than as a pair of values. */\n  public isOutcomeResult = computed(() => this.match().resultKind === 'outcome');\n\n  /**\n   * Whether the card draws the two headline values. The three result forms are mutually exclusive, so\n   * this is false for an `outcome` match however many numbers happen to be on it.\n   */\n  public drawsScore = computed(\n    () => !this.isOutcomeResult() && this.match().homeScore !== null && this.match().awayScore !== null,\n  );\n\n  /**\n   * Whether the card draws W/L/D letters. Only once the match is over - before that an `outcome`\n   * competition has nothing to say about it, and the kick-off carries the card instead.\n   */\n  public drawsOutcome = computed(() => this.isOutcomeResult() && this.isFinished());\n\n  /** The winning side's display name, or `null` while the match is undecided or drawn. */\n  public winnerName = computed(() => {\n    const winnerSide = this.match().winnerSide;\n\n    if (!winnerSide) return null;\n\n    return winnerSide === 'home' ? this.homeName() : this.awayName();\n  });\n\n  /**\n   * Whether the drawn values should roll when they change. Live only: a finished score arriving with the\n   * page is not a moment, and animating it would say one happened.\n   */\n  public animatesScoreChanges = computed(() => this.animateScoreChanges() && this.isLive());\n\n  /** The home side's W/L/D letter, or `null` when outcomes aren't drawn or the match isn't over. */\n  public homeOutcome = computed(() => this.outcomeFor('home'));\n\n  /** The away side's W/L/D letter, or `null`. */\n  public awayOutcome = computed(() => this.outcomeFor('away'));\n\n  /**\n   * What goes between the two sides where they face each other: the score separator once there is\n   * something to separate, otherwise the `versus` label. Only drawn in the wide arrangement - stacked,\n   * the two sides need nothing between them.\n   */\n  public separatorText = computed(() => {\n    const labels = this.resolvedLabels();\n\n    return this.drawsScore() || this.drawsOutcome() ? labels.scoreSeparator.trim() : labels.versus;\n  });\n\n  /**\n   * How the match stands, as one announced string - `'2 : 1'`, `'3 : 0 points'`, `'FC Berlin won'`.\n   * Composed by the `resultName` label, because what the two values *mean* varies per competition (see\n   * `NormalizedMatchResultKind`), and because a match reported only as a win and a loss still has\n   * an outcome to announce while having nothing to read. `null` while there is neither.\n   */\n  public result = computed(() => {\n    const { homeScore, awayScore, resultKind } = this.match();\n    const drawsScore = this.drawsScore();\n\n    if (!drawsScore && !this.drawsOutcome()) return null;\n\n    return this.resolvedLabels().resultName({\n      home: drawsScore ? `${homeScore}` : null,\n      away: drawsScore ? `${awayScore}` : null,\n      kind: resultKind,\n      winner: this.winnerName(),\n      separator: this.resolvedLabels().scoreSeparator,\n    });\n  });\n\n  /** The per-game breakdown of a series, or `null` for a single game. */\n  public gameScores = computed(() => this.match().gameScores);\n\n  /**\n   * What changed since the last update, per side. A `linkedSignal` rather than an effect writing state:\n   * the comparison *is* derived from the score pair, and the previous pair is the one thing a computed\n   * cannot see on its own.\n   *\n   * The first render has no previous pair and therefore no changes - a list arriving with scores already\n   * on it must not animate.\n   */\n  private scoreTransition = linkedSignal<\n    { home: number | string | null; away: number | string | null },\n    MatchScoreTransition\n  >({\n    source: () => ({ home: this.match().homeScore, away: this.match().awayScore }),\n    computation: (source, previous) => {\n      if (!previous) return NO_TRANSITION;\n\n      return {\n        home:\n          source.home === previous.source.home\n            ? null\n            : scoreChange({ side: 'home', from: previous.source.home, to: source.home }),\n        away:\n          source.away === previous.source.away\n            ? null\n            : scoreChange({ side: 'away', from: previous.source.away, to: source.away }),\n      };\n    },\n  });\n\n  /** The kick-off in the active locale, or `null` when the match is unscheduled. */\n  public formattedStartTime = computed(() => {\n    const startTime = this.match().startTime;\n\n    if (!startTime) return null;\n\n    return format(startTime, this.startTimeFormat() ?? DEFAULT_MATCH_CARD_START_TIME_FORMAT, {\n      locale: this.dateLocale ?? undefined,\n    });\n  });\n\n  /**\n   * The whole card as one string, from the `matchName` label. This is the card's accessible name, which\n   * is why nothing inside it needs one: a screen reader reads the match, not six unrelated fragments.\n   */\n  public accessibleName = computed(() =>\n    this.resolvedLabels().matchName({\n      home: this.homeName(),\n      away: this.awayName(),\n      result: this.result(),\n      resultKind: this.match().resultKind,\n      winner: this.winnerName(),\n      startTime: this.formattedStartTime(),\n      status: this.match().status,\n      label: this.match().label,\n    }),\n  );\n\n  constructor() {\n    effect(() => {\n      const transition = this.scoreTransition();\n\n      untracked(() => {\n        for (const change of [transition.home, transition.away]) {\n          if (change) this.scoreChange.emit(change);\n        }\n      });\n    });\n  }\n\n  /** One game of the series, as the same `'13 : 11'` shape the headline score uses. */\n  public gameScoreText({ home, away }: NormalizedGameScore) {\n    return `${home}${this.resolvedLabels().scoreSeparator}${away}`;\n  }\n\n  /**\n   * Derived rather than data: `winnerSide` already says who won, so a consumer never has to denormalize\n   * that into two letters.\n   */\n  private outcomeFor(side: 'home' | 'away') {\n    if (!this.drawsOutcome()) return null;\n\n    const { winnerSide } = this.match();\n    const labels = this.resolvedLabels();\n\n    if (!winnerSide) return labels.outcomeDraw;\n\n    return winnerSide === side ? labels.outcomeWin : labels.outcomeLoss;\n  }\n}\n","import {\n  NormalizedGameScore,\n  NormalizedMatch,\n  NormalizedMatchParticipant,\n  NormalizedMatchStatus,\n  NormalizedMedia,\n} from '../match.types';\n\n/** The media fields {@link normalizeEthleteMedia} reads. Any API variant's media model with these fields fits. */\nexport type EthleteMediaInput = {\n  original?: string | null;\n  path: string | null;\n};\n\n/** The participant fields {@link normalizeEthleteParticipant} reads; `gamertag` exists on player participants only. */\nexport type EthleteParticipantInput = {\n  id: string;\n  name: string | null;\n  code: string | null;\n  emblem: EthleteMediaInput | null;\n  footballClubEmblem?: EthleteMediaInput | null;\n  gamertag?: string | null;\n};\n\n/** The match lifecycle states of the Ethlete API. */\nexport type EthleteMatchStatusInput = 'preparing' | 'started' | 'finished' | 'published' | 'hidden';\n\n/** A side's score on a match or a game. */\nexport type EthleteScoreInput = {\n  score: number | null;\n};\n\n/** The game fields {@link normalizeEthleteMatch} reads to build the series breakdown. */\nexport type EthleteGameInput = {\n  homeScore: EthleteScoreInput | null;\n  awayScore: EthleteScoreInput | null;\n  matchGameNumber?: number | null;\n};\n\n/** The match fields {@link normalizeEthleteMatch} reads. Pass your API variant's own match model; extra fields are ignored. */\nexport type EthleteMatchInput = {\n  id: string;\n  status: EthleteMatchStatusInput | null;\n  startTime: string | null;\n  home: EthleteParticipantInput | null;\n  away: EthleteParticipantInput | null;\n  homeScore: EthleteScoreInput | null;\n  awayScore: EthleteScoreInput | null;\n  games: readonly EthleteGameInput[];\n  winningSide: 'home' | 'away' | null;\n  matchNumber?: number | null;\n};\n\n/**\n * `EthleteMediaInput` → the shape `et-picture` takes. The API hands back one URL, so there is nothing to build\n * a candidate set from - `original` is the full-size asset and `path` the stored one.\n */\nexport const normalizeEthleteMedia = (media: EthleteMediaInput | null | undefined): NormalizedMedia | null => {\n  const src = media?.original ?? media?.path ?? null;\n\n  return src ? { defaultSrc: src } : null;\n};\n\n/**\n * `EthleteParticipantInput` → {@link NormalizedMatchParticipant}. A player participant's `gamertag` is\n * the name people actually know them by, so it wins over the account's `name`; a team has no gamertag\n * and falls through to it.\n */\nexport const normalizeEthleteParticipant = (\n  participant: EthleteParticipantInput | null | undefined,\n): NormalizedMatchParticipant | null => {\n  if (!participant) return null;\n\n  return {\n    id: participant.id,\n    name: participant.gamertag ?? participant.name,\n    code: participant.code,\n    // Left to the consumer: the second line is usually the org or club behind the participant, which is\n    // a relationship the list views don't carry - and a player's real name under their gamertag is not\n    // a default worth shipping.\n    subtitle: null,\n    emblem: normalizeEthleteMedia(participant.emblem ?? participant.footballClubEmblem),\n    // The list views carry no seeding; a consumer with one fills it in after normalizing.\n    seed: null,\n  };\n};\n\n/**\n * `EthleteMatchStatusInput` → the three states presentation turns on. `preparing` is \"not started yet\";\n * `started` is the only live one; `finished` and `published` are both over, differing only in whether\n * the result has been released, which is not a thing a card draws differently. `hidden` shouldn't\n * reach a card at all - treated as scheduled rather than throwing, since a hidden match rendering as\n * \"not started\" is a great deal better than a crash in a list.\n */\nexport const normalizeEthleteMatchStatus = (\n  status: EthleteMatchStatusInput | null | undefined,\n): NormalizedMatchStatus => {\n  switch (status) {\n    case 'started':\n      return 'live';\n    case 'finished':\n    case 'published':\n      return 'finished';\n    default:\n      return 'scheduled';\n  }\n};\n\nconst normalizeGameScores = (match: EthleteMatchInput): NormalizedGameScore[] | null => {\n  const games = match.games\n    .filter((game) => (game.homeScore?.score ?? null) !== null || (game.awayScore?.score ?? null) !== null)\n    // `matchGameNumber` is the authoritative order; the array's own order is the API's to change.\n    .sort((a, b) => (a.matchGameNumber ?? 0) - (b.matchGameNumber ?? 0))\n    .map((game) => ({ home: game.homeScore?.score ?? 0, away: game.awayScore?.score ?? 0 }));\n\n  // A single game is the match, and its score is already the headline one - repeating it as a\n  // \"series\" breakdown of one would be noise.\n  return games.length > 1 ? games : null;\n};\n\n/**\n * `EthleteMatchInput` (e.g. `MatchListView` / `DetailedMatchListView`) → {@link NormalizedMatch}, ready for `et-match-card`.\n *\n * A plain function, like the bracket's own integrations: call it wherever the data arrives, or pass\n * it as the bracket's match normalizer. Another API writes its own `(data) => NormalizedMatch` and\n * everything in this domain works the same.\n *\n * @example\n * protected matches = computed(() => this.query.response()?.items.map(normalizeEthleteMatch) ?? []);\n */\nexport const normalizeEthleteMatch = (match: EthleteMatchInput): NormalizedMatch => ({\n  id: match.id,\n  status: normalizeEthleteMatchStatus(match.status),\n  startTime: match.startTime ? new Date(match.startTime) : null,\n  home: normalizeEthleteParticipant(match.home),\n  away: normalizeEthleteParticipant(match.away),\n  homeScore: match.homeScore?.score ?? null,\n  awayScore: match.awayScore?.score ?? null,\n  // The API's `score` is the match score - goals, rounds, or games won in a series. A competition that\n  // wants table points or plain outcomes on the card maps those in itself and says so here.\n  resultKind: 'score',\n  gameScores: normalizeGameScores(match),\n  winnerSide: match.winningSide,\n  // `matchNumber` is the number within the round, which is what a bracket cell says; `number` is the\n  // running one across the whole competition and reads as noise on a card.\n  label: typeof match.matchNumber === 'number' ? `Match ${match.matchNumber}` : null,\n});\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { PictureConfig } from './picture.types';\n\nconst DEFAULT_PICTURE_CONFIG: PictureConfig = {\n  baseUrl: undefined,\n};\n\nconst PICTURE_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<PictureConfig>(DEFAULT_PICTURE_CONFIG, {\n  name: 'PictureConfig',\n});\n\n/**\n * App- or route-wide picture defaults. Provide it where the media host is known - usually the app config, or\n * a route that talks to a different CDN.\n *\n * @example\n * providers: [providePictureConfig({ baseUrl: 'https://cdn.example.com' })]\n */\nexport const providePictureConfig = /* @__PURE__ */ toProvideFn(PICTURE_CONFIG_DEF);\nexport const injectPictureConfig = /* @__PURE__ */ toInjectFn(PICTURE_CONFIG_DEF);\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * What to show while the image is still loading - a blurred `data:` URI, a solid block, a\n * [skeleton](/components/skeleton). Optional; without it the space simply stays empty.\n *\n * @example\n * <ng-template etPicturePlaceholder><et-skeleton-item shape=\"rect\" /></ng-template>\n */\n@Directive({ selector: 'ng-template[etPicturePlaceholder]' })\nexport class PicturePlaceholderDirective {\n  public templateRef = inject<TemplateRef<void>>(TemplateRef);\n}\n\n/**\n * What to show when the image fails to load. Optional - without it a broken image renders as the browser's\n * broken-image icon, which is rarely what a page wants.\n *\n * @example\n * <ng-template etPictureError><p>This image is unavailable.</p></ng-template>\n */\n@Directive({ selector: 'ng-template[etPictureError]' })\nexport class PictureErrorDirective {\n  public templateRef = inject<TemplateRef<void>>(TemplateRef);\n}\n","/**\n * One candidate set for a `<picture>`, i.e. one `<source>` element.\n *\n * @see https://web.dev/learn/design/responsive-images\n */\nexport type PictureSource = {\n  /**\n   * The image's mime type, e.g. `image/webp`. Inferred from the URL when omitted; a URL it can't be\n   * inferred from logs an error in dev mode rather than throwing, since the browser copes without it.\n   */\n  type?: string | null;\n\n  /**\n   * A single URL, or a comma-separated candidate list with descriptors.\n   *\n   * With **width** descriptors (`400w`) you must also give `sizes`, or the browser has no way to know how\n   * much of the viewport the image will occupy. With **density** descriptors (`2x`) you must not - the\n   * browser picks by device pixel ratio. The two forms can't be mixed in one srcset.\n   *\n   * @example 'https://example.com/hero.jpg'\n   * @example 'https://example.com/hero.jpg 1x, https://example.com/hero@2x.jpg 2x'\n   * @example 'https://example.com/hero-400.jpg 400w, https://example.com/hero-800.jpg 800w'\n   */\n  srcset: string;\n\n  /**\n   * How much space the image will take, so the browser can pick a candidate before it has laid the page\n   * out. Only meaningful alongside width descriptors. Falls back to the picture's own `sizes`.\n   *\n   * @example '100vw'\n   * @example '(min-width: 800px) 50vw, 100vw'\n   */\n  sizes?: string | null;\n\n  /**\n   * The media query this source applies to - this is what makes art direction possible, as opposed to\n   * merely picking a resolution.\n   *\n   * @example '(min-width: 800px)'\n   * @example '(orientation: portrait)'\n   */\n  media?: string | null;\n};\n\nexport type PictureConfig = {\n  /**\n   * Prefixed onto every relative `srcset` entry, so sources can be authored as API paths. Absolute URLs\n   * and `data:` URIs are left alone.\n   */\n  baseUrl?: string;\n};\n\n/** Where the `<img>` has got to. `'loading'` until the browser reports either way. */\nexport const PICTURE_STATES = {\n  LOADING: 'loading',\n  LOADED: 'loaded',\n  ERROR: 'error',\n} as const;\n\nexport type PictureState = (typeof PICTURE_STATES)[keyof typeof PICTURE_STATES];\n","import { inferMimeType } from '@ethlete/core';\nimport { PictureConfig, PictureSource } from './picture.types';\n\n/**\n * The first URL out of a srcset, for the `<img src>` fallback a `<picture>` still needs - a browser that\n * matches no `<source>` (or doesn't support `<picture>` at all) loads the `img`.\n *\n * Descriptors are stripped, and a `data:` URI is returned whole rather than split on its commas - base64\n * payloads contain them, so treating one as a candidate list would truncate the image.\n */\nexport const extractFirstImageUrl = (source: string | PictureSource | null): string | null => {\n  const srcset = typeof source === 'string' ? source : source?.srcset;\n\n  if (!srcset) return null;\n\n  if (srcset.trimStart().startsWith('data:')) {\n    return srcset.trim() || null;\n  }\n\n  const firstCandidate = srcset.split(',')[0]?.trim();\n\n  return firstCandidate?.split(' ')[0] || null;\n};\n\n/**\n * A source in its full form, with the mime type filled in from the URL where it wasn't given. The type is\n * what lets a browser skip a `<source>` it can't decode without downloading it, so it is worth inferring -\n * but a URL that carries no extension (a signed CDN URL, an API endpoint) can't be inferred from, which\n * warns in dev rather than throwing: the browser will simply try the source.\n */\nexport const normalizePictureSource = (source: string | PictureSource): PictureSource => {\n  if (typeof source === 'string') {\n    return { type: inferMimeType(source), srcset: source, media: null, sizes: null };\n  }\n\n  const type = source.type || inferMimeType(source.srcset);\n\n  if (!type && ngDevMode) {\n    console.warn(\n      `[et-picture] Could not infer a mime type from srcset \"${source.srcset}\". ` +\n        'Pass `type` explicitly so browsers can skip formats they cannot decode.',\n    );\n  }\n\n  return { type, srcset: source.srcset, media: source.media ?? null, sizes: source.sizes ?? null };\n};\n\n/** `sizes` as the attribute wants it. An array is the readable way to author one, so both forms are taken. */\nexport const normalizePictureSizes = (sizes: string | string[] | null | undefined): string | null => {\n  if (!sizes) return null;\n\n  return Array.isArray(sizes) ? sizes.join(', ') || null : sizes;\n};\n\n/**\n * A single URL prefixed with the base, unless it is already absolute or a data URI. Exactly one slash joins\n * them however each side is written - cdk produced `host//path` when both carried one.\n */\nconst withBaseUrl = (url: string, baseUrl: string) => {\n  if (url.startsWith('http') || url.startsWith('data:')) return url;\n\n  return `${baseUrl.replace(/\\/+$/, '')}/${url.replace(/^\\/+/, '')}`;\n};\n\n/**\n * A source with the configured `baseUrl` applied, so sources can be authored as the paths an API returns.\n *\n * Applied **per candidate**, which is what makes a relative multi-candidate srcset work: cdk prefixed the\n * srcset as one string, so `'a.jpg 1x, b.jpg 2x'` left the second candidate unresolved. A `data:` URI is\n * passed through whole - its base64 payload contains commas, so it is not a candidate list.\n */\nexport const withPictureBaseUrl = (source: PictureSource, config: PictureConfig | null): PictureSource => {\n  const baseUrl = config?.baseUrl;\n\n  if (!baseUrl || source.srcset.trimStart().startsWith('data:')) return source;\n\n  const srcset = source.srcset\n    .split(',')\n    .map((candidate) => {\n      const [url, ...descriptors] = candidate.trim().split(/\\s+/);\n\n      if (!url) return null;\n\n      return [withBaseUrl(url, baseUrl), ...descriptors].join(' ');\n    })\n    .filter((candidate): candidate is string => candidate !== null)\n    .join(', ');\n\n  return { ...source, srcset };\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ViewEncapsulation,\n  booleanAttribute,\n  computed,\n  contentChild,\n  input,\n  linkedSignal,\n  numberAttribute,\n  output,\n} from '@angular/core';\nimport { injectPictureConfig } from './picture-config';\nimport { PictureErrorDirective, PicturePlaceholderDirective } from './picture-slots.directive';\nimport { PICTURE_STATES, PictureSource, PictureState } from './picture.types';\nimport {\n  extractFirstImageUrl,\n  normalizePictureSizes,\n  normalizePictureSource,\n  withPictureBaseUrl,\n} from './picture.utils';\n\n/**\n * A responsive image: `<figure><picture><source…><img></picture><figcaption></figure>` from a list of sources.\n *\n * Two different jobs share the one element, and it is worth knowing which one you are doing. Several\n * candidates in a **single** source's `srcset` is *resolution switching* - the same picture at several sizes,\n * and the browser picks. Several **sources** with `media` queries is *art direction* - a different crop for a\n * phone than for a desktop, which no `srcset` can express. `type` on a source is a third axis: offer AVIF\n * before JPEG and a browser that can't decode it skips to the next without downloading anything.\n *\n * Reserve the space the image will occupy - `width`/`height`, or `aspectRatio` when only the ratio is known -\n * or the page will shift when it loads.\n *\n * @example\n * <et-picture\n *   [sources]=\"[\n *     { srcset: 'hero-wide.avif', media: '(min-width: 800px)' },\n *     { srcset: 'hero-tall.avif' },\n *   ]\"\n *   defaultSrc=\"hero.jpg\"\n *   alt=\"The stadium at kickoff\"\n *   [aspectRatio]=\"16 / 9\"\n * />\n */\n@Component({\n  selector: 'et-picture',\n  templateUrl: './picture.component.html',\n  styleUrl: './picture.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: 'et-picture',\n    '[attr.data-state]': 'state()',\n    '[attr.data-fit]': 'fit()',\n    '[style.--_et-picture-fit]': 'fit()',\n    '[attr.data-aspect-ratio]': 'reservedAspectRatio()',\n    '[style.--_et-picture-aspect-ratio]': 'reservedAspectRatio()',\n  },\n})\nexport class PictureComponent {\n  private config = injectPictureConfig({ optional: true });\n\n  /**\n   * The `<source>` candidates, in the order the browser should consider them - first match wins, so put the\n   * most specific `media` and the most modern `type` first. A plain string is shorthand for\n   * `{ srcset: theString }`.\n   */\n  public sources = input<(PictureSource | string)[]>([]);\n\n  /**\n   * The `<img>` behind the sources: what a browser loads when no `<source>` matched, and the element every\n   * `<picture>` needs - a `<picture>` with no `<img>` renders nothing at all. Give it the most compatible\n   * format you have.\n   */\n  public defaultSrc = input<PictureSource | string | null>(null);\n\n  /**\n   * The image's alternative text. **Required**, because an image without it is invisible to a screen reader\n   * and unaccounted for by a linter - pass `''` for a decorative image, which is a deliberate statement that\n   * it carries no information.\n   */\n  public alt = input.required<string>();\n\n  /** A visible caption, rendered as `<figcaption>` after the image. Omit for an image that needs none. */\n  public figcaption = input<string | null>(null);\n\n  /**\n   * Load this image eagerly and at high priority, instead of lazily. For the one image that is the largest\n   * thing in the initial viewport (a hero, a header) - it is usually the page's Largest Contentful Paint, and\n   * lazy-loading it delays the metric it defines. Never for images below the fold. @default false\n   */\n  public priority = input(false, { transform: booleanAttribute });\n\n  /**\n   * The image's intrinsic width in px, set as the `width` attribute. Together with `height` this reserves the\n   * space before the image arrives, which is what stops the page shifting.\n   */\n  public width = input(null, { transform: numberAttribute });\n\n  /** The image's intrinsic height in px, set as the `height` attribute. */\n  public height = input(null, { transform: numberAttribute });\n\n  /**\n   * The ratio to hold the image's box at, e.g. `16 / 9`. The alternative to `width`/`height` for a responsive\n   * image whose rendered size is decided by CSS: without a `width`, the image fills the host's inline size at\n   * this ratio, and the box is reserved before the image - or its URL - arrives.\n   */\n  public aspectRatio = input<number | string | null>(null);\n\n  /**\n   * How much space the image will occupy, for sources using width descriptors. Takes the attribute's own\n   * comma-separated form, or an array of its parts, which is easier to read.\n   *\n   * @example [sizes]=\"['(min-width: 800px) 50vw', '100vw']\"\n   */\n  public sizes = input(null, { transform: normalizePictureSizes });\n\n  /**\n   * How the image fills its box. Setting it makes the `<img>` fill the host, so the host's own size (a class, an\n   * `aspectRatio`, a grid cell) decides the box and this decides what the image does inside it. Requires the\n   * host to have a definite size in both axes. Omit for the default flow layout, where the image sizes itself.\n   */\n  public fit = input<'contain' | 'cover' | 'fill' | 'none' | 'scale-down' | null>(null);\n\n  /** The image finished loading, with the intrinsic pixel dimensions the browser decoded. */\n  public imgLoad = output<{ naturalWidth: number; naturalHeight: number }>();\n\n  /** The image failed to load - a dead URL, a network error, an undecodable file. */\n  public imgError = output<void>();\n\n  protected placeholder = contentChild(PicturePlaceholderDirective);\n  protected errorSlot = contentChild(PictureErrorDirective);\n\n  protected reservedAspectRatio = computed(() => (this.width() === null ? this.aspectRatio() : null));\n\n  protected resolvedSources = computed(() =>\n    this.sources().map((source) => withPictureBaseUrl(normalizePictureSource(source), this.config)),\n  );\n\n  protected resolvedDefaultSource = computed(() => {\n    const defaultSrc = this.defaultSrc();\n\n    return defaultSrc ? withPictureBaseUrl(normalizePictureSource(defaultSrc), this.config) : null;\n  });\n\n  /** The `src` for the fallback `<img>`, which needs a single URL rather than a candidate list. */\n  protected defaultSrcUrl = computed(() => extractFirstImageUrl(this.resolvedDefaultSource()));\n\n  /**\n   * What everything learnt from the last load resets on: a picture pointed at a new URL - or at new sources,\n   * which decide the image just as much - is loading again, and a state that stayed `'loaded'` would leave the\n   * placeholder hidden for the second image.\n   */\n  private loadResetKey = computed<unknown[]>(() => [this.defaultSrcUrl(), this.sources()]);\n\n  private loadState = linkedSignal<unknown[], PictureState>({\n    source: () => this.loadResetKey(),\n    computation: () => PICTURE_STATES.LOADING,\n  });\n\n  private loadedSize = linkedSignal<unknown[], { width: number; height: number } | null>({\n    source: () => this.loadResetKey(),\n    computation: () => null,\n  });\n\n  /**\n   * Where the image has got to, as a signal rather than only a pair of events - so a template can react to it\n   * without keeping its own copy. Also on the host as `data-state`, for styling. Sources without a\n   * `defaultSrc` render no `<img>`, so nothing can ever load - that is an error, not a pending load.\n   */\n  public state = computed(() => {\n    if (this.sources().length && !this.defaultSrcUrl()) {\n      if (ngDevMode) {\n        console.warn(\n          '[et-picture] `sources` is set but `defaultSrc` is not. Without it no <img> renders and nothing loads - pass `defaultSrc`.',\n        );\n      }\n\n      return PICTURE_STATES.ERROR;\n    }\n\n    return this.loadState();\n  });\n\n  /**\n   * The image's intrinsic pixel dimensions, once the browser has decoded them. `null` while loading and after a\n   * failure, so a template can wait for a real measurement rather than guess one.\n   */\n  public naturalSize = computed(() => this.loadedSize());\n\n  /**\n   * The intrinsic ratio as a single number in CSS `aspect-ratio` orientation - width over height. `null`\n   * whenever `naturalSize()` is.\n   */\n  public naturalAspectRatio = computed(() => {\n    const size = this.naturalSize();\n\n    return size && size.height ? size.width / size.height : null;\n  });\n\n  protected markLoaded(event: Event) {\n    const img = event.target as HTMLImageElement;\n\n    this.loadedSize.set({ width: img.naturalWidth, height: img.naturalHeight });\n    this.loadState.set(PICTURE_STATES.LOADED);\n    this.imgLoad.emit({ naturalWidth: img.naturalWidth, naturalHeight: img.naturalHeight });\n  }\n\n  protected markFailed() {\n    this.loadedSize.set(null);\n    this.loadState.set(PICTURE_STATES.ERROR);\n    this.imgError.emit();\n  }\n}\n","<figure class=\"et-picture-figure\">\n  <picture class=\"et-picture-picture\">\n    @for (source of resolvedSources(); track source.srcset) {\n      <source\n        [attr.type]=\"source.type\"\n        [attr.srcset]=\"source.srcset\"\n        [attr.sizes]=\"source.sizes ?? sizes()\"\n        [attr.media]=\"source.media\"\n      />\n    }\n\n    @if (resolvedDefaultSource(); as source) {\n      <img\n        [attr.srcset]=\"source.srcset\"\n        [attr.src]=\"defaultSrcUrl()\"\n        [attr.sizes]=\"source.sizes ?? sizes()\"\n        [attr.alt]=\"alt()\"\n        [attr.width]=\"width()\"\n        [attr.height]=\"height()\"\n        [attr.loading]=\"priority() ? 'eager' : 'lazy'\"\n        [attr.fetchpriority]=\"priority() ? 'high' : 'auto'\"\n        [style.aspect-ratio]=\"aspectRatio()\"\n        (load)=\"markLoaded($event)\"\n        (error)=\"markFailed()\"\n        class=\"et-picture-img\"\n      />\n    }\n\n    <!-- Overlaid rather than swapped in: the img has to stay in the DOM to keep loading, and replacing it\n         would restart the request. -->\n    @if (state() === 'loading' && placeholder()) {\n      <span class=\"et-picture-slot\" aria-hidden=\"true\">\n        <ng-container [ngTemplateOutlet]=\"placeholder()!.templateRef\" />\n      </span>\n    }\n\n    @if (state() === 'error' && errorSlot()) {\n      <span class=\"et-picture-slot\">\n        <ng-container [ngTemplateOutlet]=\"errorSlot()!.templateRef\" />\n      </span>\n    }\n  </picture>\n\n  @if (figcaption()) {\n    <figcaption class=\"et-picture-figcaption\">{{ figcaption() }}</figcaption>\n  }\n</figure>\n","import { PictureErrorDirective, PicturePlaceholderDirective } from './picture-slots.directive';\nimport { PictureComponent } from './picture.component';\n\nexport const PICTURE_IMPORTS = [PictureComponent, PicturePlaceholderDirective, PictureErrorDirective] as const;\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/** The common placeholder shapes. Anything else is your own CSS on the item. */\nexport type SkeletonShape = 'text' | 'rect' | 'circle';\n\n/**\n * One placeholder shape inside an `<et-skeleton>`. Sized by `shape` for the usual cases and by\n * `--et-skeleton-size` / plain CSS for everything else. Hidden from assistive tech - the container's\n * text is the announcement.\n *\n * @example\n * <et-skeleton-item shape=\"text\" />\n * <et-skeleton-item shape=\"circle\" style=\"--et-skeleton-size: 40px\" />\n * <et-skeleton-item style=\"block-size: 120px; border-radius: 12px\" />\n */\n@Component({\n  selector: 'et-skeleton-item',\n  template: '',\n  styleUrl: './skeleton.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-skeleton-item',\n    'aria-hidden': 'true',\n    '[attr.data-shape]': 'shape()',\n  },\n})\nexport class SkeletonItemComponent {\n  /**\n   * `'text'` (default) is a line of text's height, so it sits in running copy without changing the\n   * layout; `'rect'` is a block you size yourself; `'circle'` is square-and-round for an avatar.\n   */\n  public shape = input<SkeletonShape>('text');\n}\n","import { Component, computed, input, numberAttribute, ViewEncapsulation } from '@angular/core';\nimport { SkeletonItemComponent } from './skeleton-item.component';\n\n/**\n * A paragraph of placeholder lines - the shape almost every skeleton needs, so it isn't worth writing\n * out. The last line is short, which is what makes a block of bars read as text rather than a table.\n *\n * @example\n * <et-skeleton><et-skeleton-text lines=\"3\" /></et-skeleton>\n */\n@Component({\n  selector: 'et-skeleton-text',\n  template: `\n    @for (line of lineList(); track line) {\n      <et-skeleton-item [style.inline-size.%]=\"line\" shape=\"text\" />\n    }\n  `,\n  styleUrl: './skeleton.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [SkeletonItemComponent],\n  host: {\n    class: 'et-skeleton-text',\n  },\n})\nexport class SkeletonTextComponent {\n  /** How many lines to draw. @default 3 */\n  public lines = input(3, { transform: numberAttribute });\n\n  /** Width (%) of the last line - a full-width final line reads as a block, not a paragraph. @default 60 */\n  public lastLineWidth = input(60, { transform: numberAttribute });\n\n  protected lineList = computed(() => {\n    const lines = Math.max(1, this.lines());\n\n    return Array.from({ length: lines }, (_, index) => (index === lines - 1 ? this.lastLineWidth() : 100));\n  });\n}\n","import { booleanAttribute, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { injectLoaderLabels } from '../loader';\n\n/**\n * A loading placeholder: a box (or several) standing in for content that hasn't arrived, with an\n * optional shimmer sweeping across.\n *\n * Light by default - the container announces the wait to assistive tech and owns the animation switch;\n * the shapes are `<et-skeleton-item>`s sized by your own CSS, or by their `shape` for the common cases.\n * Colors come from the surface tokens, so a skeleton reads correctly on any surface it is placed on.\n *\n * @example\n * <et-skeleton>\n *   <et-skeleton-item shape=\"circle\" style=\"--et-skeleton-size: 40px\" />\n *   <et-skeleton-text lines=\"3\" />\n * </et-skeleton>\n */\n@Component({\n  selector: 'et-skeleton',\n  template: `<span class=\"et-skeleton-ally-text\">{{ resolvedLoadingAllyText() }}</span\n    ><ng-content />`,\n  styleUrl: './skeleton.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-skeleton',\n    role: 'status',\n    'aria-busy': 'true',\n    '[class.et-skeleton--animated]': 'animated()',\n  },\n})\nexport class SkeletonComponent {\n  private labels = injectLoaderLabels();\n\n  /**\n   * What a screen reader announces in place of the shapes, which are `aria-hidden` - they carry no\n   * information, and reading \"loading\" once is the whole message. `null` (the default) uses\n   * `LOADER_LABELS`' `loadingContent`; set it for something more specific (\"Loading results\").\n   */\n  public loadingAllyText = input<string | null>(null);\n\n  /**\n   * Run the shimmer. Off leaves a static placeholder - the same shapes without motion, which is what\n   * you want inside something that already animates (an opening panel), or on a very long list.\n   * Independent of `prefers-reduced-motion`, which drops the shimmer regardless. @default true\n   */\n  public animated = input(true, { transform: booleanAttribute });\n\n  /** The announcement in effect: this instance's `loadingAllyText`, else `LOADER_LABELS`. */\n  protected resolvedLoadingAllyText = computed(() => this.loadingAllyText() ?? this.labels().loadingContent);\n}\n","import { SkeletonItemComponent } from './skeleton-item.component';\nimport { SkeletonTextComponent } from './skeleton-text.component';\nimport { SkeletonComponent } from './skeleton.component';\n\n/** The skeleton container, its shapes and the multi-line text helper. */\nexport const SKELETON_IMPORTS = [SkeletonComponent, SkeletonItemComponent, SkeletonTextComponent] as const;\n","import { booleanAttribute, Component, computed, ElementRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { PICTURE_IMPORTS } from '../picture';\nimport { SKELETON_IMPORTS } from '../skeleton';\nimport { injectMatchLabels, MatchLabels } from './match-labels';\nimport { matchParticipantDisplayName } from './match-participant-name';\nimport { NormalizedMatchParticipant } from './match.types';\n\n/**\n * One side of a match, drawn: emblem, name, and an optional seed. Used inside `et-match-card` and on\n * its own wherever a team or player is listed - a roster, a standings row, a filter chip's content.\n *\n * A `null` participant is a **TBD slot**, not an error: a bracket match whose feeder hasn't finished\n * has a real place in the layout and no name to put in it. It renders the `tbd` label against an empty\n * emblem frame, so the row keeps its height and nothing jumps when the name arrives.\n *\n * `compact` swaps the name for the participant's `code` where it has one - the same participant, in a\n * bracket column that can't hold \"Neon Esports Berlin\".\n *\n * **Put it on an `<a>` or a `<button>`** to make the whole thing one click target - a player card that\n * opens a profile, a team row that filters a list. It detects that itself: the host is then named after the\n * participant (so the link doesn't read \"FC Berlin emblem FC Berlin\"), takes the shared focus ring, and gets\n * an interactive hover.\n *\n * @example\n * <et-match-participant [participant]=\"match().home\" />\n *\n * @example\n * <!-- a bracket cell -->\n * <et-match-participant [participant]=\"match().away\" compact showSeed />\n *\n * @example\n * <!-- a player card that navigates -->\n * <a [participant]=\"player()\" [routerLink]=\"['/players', player().id]\" et-match-participant showSeed></a>\n */\n@Component({\n  selector: 'et-match-participant, [et-match-participant]',\n  template: `\n    <span class=\"et-match-participant-emblem\">\n      @if (emblem(); as media) {\n        <et-picture\n          [sources]=\"media.sources ?? []\"\n          [defaultSrc]=\"media.defaultSrc ?? null\"\n          [alt]=\"emblemAlt()\"\n          class=\"et-match-participant-picture\"\n          fit=\"contain\"\n        >\n          <ng-template etPictureError>\n            <span class=\"et-match-participant-emblem-mark\" aria-hidden=\"true\">{{ emblemMark() }}</span>\n          </ng-template>\n        </et-picture>\n      } @else if (loading()) {\n        <et-skeleton-item class=\"et-match-participant-bone\" shape=\"circle\" />\n      } @else if (participant()) {\n        <span class=\"et-match-participant-emblem-mark\" aria-hidden=\"true\">{{ emblemMark() }}</span>\n      }\n    </span>\n\n    @if (loading() && !participant()) {\n      <et-skeleton-item class=\"et-match-participant-name-bone\" shape=\"text\" />\n    } @else {\n      <span class=\"et-match-participant-names\">\n        <span [class.et-match-participant-name--tbd]=\"!participant()\" class=\"et-match-participant-name\">\n          {{ displayName() }}\n        </span>\n\n        @if (subtitle(); as subtitle) {\n          <span class=\"et-match-participant-subtitle\">{{ subtitle }}</span>\n        }\n      </span>\n    }\n\n    @if (showSeed() && participant()?.seed !== null && participant()?.seed !== undefined) {\n      <span [attr.aria-label]=\"seedLabel()\" class=\"et-match-participant-seed\">{{ participant()?.seed }}</span>\n    }\n  `,\n  styleUrl: './match-participant.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [PICTURE_IMPORTS, SKELETON_IMPORTS],\n  hostDirectives: [FocusRingDirective],\n  host: {\n    class: 'et-match-participant',\n    '[attr.data-compact]': 'compact() ? \"\" : null',\n    '[attr.data-tbd]': 'participant() ? null : \"\"',\n    '[attr.data-interactive]': 'isInteractive() ? \"\" : null',\n    // One name for the whole control, or the link reads its emblem's alt text and then the same name again.\n    '[attr.aria-label]': 'isInteractive() ? displayName() : null',\n  },\n})\nexport class MatchParticipantComponent {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private injectedLabels = injectMatchLabels();\n\n  /** The side to draw. `null` is a TBD slot - see the component's docs. */\n  public participant = input<NormalizedMatchParticipant | null>(null);\n\n  /** Prefer the short `code` over the full name, for a narrow column. @default false */\n  public compact = input(false, { transform: booleanAttribute });\n\n  /** Show the seeding position beside the name, when the participant has one. @default false */\n  public showSeed = input(false, { transform: booleanAttribute });\n\n  /**\n   * Draw placeholders instead of an empty slot while the participant is still being fetched. Distinct\n   * from a `null` participant, which is a decided *absence* - TBD - rather than a pending one.\n   * @default false\n   */\n  public loading = input(false, { transform: booleanAttribute });\n\n  /**\n   * Whether this is a click target. `null` (the default) infers it from the host element, which is right\n   * whenever it sits on an `<a>` or `<button>`. Set it for a host that is interactive some other way.\n   */\n  public interactive = input<boolean | null>(null);\n\n  /** Override this instance's strings - see {@link provideMatchLabels} for the app-wide version. */\n  public labels = input<Partial<MatchLabels> | null>(null);\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<MatchLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  private readonly IS_NATIVELY_INTERACTIVE = ['A', 'BUTTON'].includes(this.elementRef.nativeElement.tagName);\n\n  /** Whether this acts as a click target, and should therefore look and feel like one. */\n  public isInteractive = computed(() => this.interactive() ?? this.IS_NATIVELY_INTERACTIVE);\n\n  protected emblem = computed(() => this.participant()?.emblem ?? null);\n\n  /**\n   * The quieter second line, where there is one. Dropped in compact: the point of compact is that the\n   * row fits a bracket column, and a second line is the first thing that stops fitting.\n   */\n  protected subtitle = computed(() => (this.compact() ? null : this.participant()?.subtitle) ?? null);\n\n  /**\n   * What this side is called, in one string - also what the card composes its accessible name from. The\n   * fallback chain itself lives in {@link matchParticipantDisplayName}, so the card can reach the same\n   * answer without a rendered participant to ask.\n   */\n  public displayName = computed(() =>\n    matchParticipantDisplayName({\n      participant: this.participant(),\n      labels: this.resolvedLabels(),\n      compact: this.compact(),\n    }),\n  );\n\n  protected emblemAlt = computed(() => this.resolvedLabels().emblemAlt(this.displayName()));\n\n  /** Only ever drawn for a participant: a TBD slot has no name to take a letter from. */\n  protected emblemMark = computed(() => this.displayName().trim().charAt(0).toUpperCase());\n\n  protected seedLabel = computed(() => {\n    const seed = this.participant()?.seed;\n\n    return seed === null || seed === undefined ? null : this.resolvedLabels().seed(seed);\n  });\n}\n","import { booleanAttribute, Component, computed, input, linkedSignal, signal, ViewEncapsulation } from '@angular/core';\n\n/**\n * One drawn value of a match, which rolls when it changes: the old value leaves upward as the new one\n * arrives from below, with a brief accent flash behind them.\n *\n * Both values are **real elements** for the length of the animation, which is the only honest way to\n * cross them - this library never clones a node to animate it (a clone outlives the component that\n * styled it). The outgoing one is dropped on its own `animationend`, so nothing here runs a timer.\n *\n * A change is anything the bound `value` does after the first render. `animate` gates the movement, not\n * the update: with it off the value simply changes, which is what a finished match wants.\n */\n@Component({\n  selector: 'et-match-score',\n  template: `\n    @for (digit of digits(); track digit.key) {\n      <span [attr.data-state]=\"digit.state\" (animationend)=\"settle()\" class=\"et-match-score-digit\">\n        {{ digit.value }}\n      </span>\n    }\n\n    @for (flash of flashes(); track flash) {\n      <span (animationend)=\"settleFlash()\" class=\"et-match-score-flash\" aria-hidden=\"true\"></span>\n    }\n  `,\n  styleUrl: './match-score.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-match-score',\n  },\n})\nexport class MatchScoreComponent {\n  /** The value to draw. Anything printable - a score, table points, a W. */\n  public value = input.required<string>();\n\n  /** Roll the value when it changes. @default false */\n  public animate = input(false, { transform: booleanAttribute });\n\n  /**\n   * The value's history as one number: it goes up on every change, which is what makes `@for` replace the\n   * element and the CSS animation run again. `previous` is what the outgoing element draws.\n   */\n  private revision = linkedSignal<string, { key: number; previous: string | null }>({\n    source: () => this.value(),\n    computation: (_value, previous) => ({\n      key: (previous?.value.key ?? 0) + 1,\n      previous: previous ? previous.source : null,\n    }),\n  });\n\n  /** The revision whose animation has finished - up to date means nothing is moving. */\n  private settledKey = signal(0);\n\n  private isRolling = computed(() => {\n    const { key, previous } = this.revision();\n\n    return this.animate() && previous !== null && this.settledKey() !== key;\n  });\n\n  protected digits = computed(() => {\n    const { key, previous } = this.revision();\n    const rolling = this.isRolling();\n    const current = { key, value: this.value(), state: rolling ? 'in' : 'static' };\n\n    if (!rolling || previous === null) return [current];\n\n    // Negative keys for the outgoing element, so the two never collide in the same `@for`.\n    return [{ key: -key, value: previous, state: 'out' }, current];\n  });\n\n  protected flashes = computed(() => (this.isRolling() ? [this.revision().key] : []));\n\n  /** The roll is over: drop the outgoing value. Fires once per element, hence the idempotent set. */\n  protected settle() {\n    this.settledKey.set(this.revision().key);\n  }\n\n  protected settleFlash() {\n    this.settle();\n  }\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorTheme, injectColorThemes, ProvideColorDirective, RegisteredColorThemeName } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport {\n  MatchCardDirective,\n  MatchCardGameScoresDirective,\n  MatchCardMetaDirective,\n  MatchCardScoreDirective,\n} from './headless';\nimport { MatchParticipantComponent } from './match-participant.component';\nimport { MatchScoreComponent } from './match-score.component';\n\n/**\n * The default match card: both sides with their emblems, the score or the kick-off, the per-game\n * breakdown of a series, a live badge, and the winner emphasized once there is one. Driven by the\n * headless {@link MatchCardDirective}.\n *\n * **One card, three layouts.** It measures itself with a container query: under 320px the dense row a\n * bracket column or a list needs, above it the featured card with big emblems and the game-score\n * breakdown, and from 560px the wide row where the two sides face each other across the middle. Same\n * DOM throughout; set `size` to pin one.\n *\n * **Make the host the link.** The card's whole accessible name lands on its host element, so putting the\n * card on an `<a>` gives you one correctly named link and nothing to fix:\n *\n * @example\n * <a [match]=\"match()\" [routerLink]=\"['/matches', match().id]\" et-match-card></a>\n *\n * @example\n * <!-- non-interactive, e.g. a results table -->\n * <et-match-card [match]=\"match()\" size=\"compact\" />\n */\n@Component({\n  selector: 'et-match-card, [et-match-card]',\n  templateUrl: './match-card.component.html',\n  styleUrl: './match-card.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MatchParticipantComponent,\n    MatchScoreComponent,\n    MatchCardMetaDirective,\n    MatchCardScoreDirective,\n    MatchCardGameScoresDirective,\n    ProvideColorDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: MatchCardDirective,\n      inputs: [\n        'match',\n        'size',\n        'showSeeds',\n        'hideNames',\n        'startTimeFormat',\n        'interactive',\n        'labels',\n        'animateScoreChanges',\n      ],\n      outputs: ['scoreChange'],\n    },\n    FocusRingDirective,\n  ],\n  host: {\n    class: 'et-match-card',\n  },\n})\nexport class MatchCardComponent {\n  protected card = inject(MatchCardDirective);\n\n  private colorThemes = injectColorThemes({ optional: true });\n\n  /**\n   * The color theme the live badge is drawn in. `null` (the default) uses the app's `type: 'error'`\n   * theme, which is the red a live badge is expected to be - and falls through to the ambient color\n   * scope in an app that registered none. Theme names are the app's own, so this takes one of them (or\n   * the theme object).\n   */\n  public liveColor = input<RegisteredColorThemeName | ColorTheme | null>(null);\n\n  protected liveColorTheme = computed<RegisteredColorThemeName | ColorTheme | null>(\n    () => this.liveColor() ?? this.colorThemes?.find((theme) => theme.type === 'error') ?? null,\n  );\n}\n","<!-- Everything mode-dependent lives on this element rather than the host: a container query can only\n     style descendants of its container, and the host is the container. -->\n<div class=\"et-match-card-content\">\n  @if (card.match().label || card.isLive() || card.formattedStartTime()) {\n    <div class=\"et-match-card-meta\" etMatchCardMeta>\n      @if (card.match().label; as label) {\n        <span class=\"et-match-card-label\">{{ label }}</span>\n      }\n\n      @if (card.isLive()) {\n        <span [etProvideColor]=\"liveColorTheme()\" class=\"et-match-card-live\">\n          <span class=\"et-match-card-live-dot\"></span>\n          {{ card.resolvedLabels().live }}\n        </span>\n      } @else if (card.formattedStartTime(); as startTime) {\n        <span class=\"et-match-card-time\">{{ startTime }}</span>\n      }\n    </div>\n  }\n\n  <div class=\"et-match-card-sides\">\n    <!-- `data-participant-id` names which side is whose, for anything around the card that reasons about\n         a participant rather than a match — the bracket's journey highlight is the first such thing. -->\n    <div [attr.data-participant-id]=\"card.match().home?.id ?? null\" class=\"et-match-card-side\" data-side=\"home\">\n      <et-match-participant\n        [participant]=\"card.match().home\"\n        [compact]=\"card.showsShortNames()\"\n        [showSeed]=\"card.showSeeds()\"\n        [labels]=\"card.labels()\"\n        class=\"et-match-card-participant\"\n      />\n\n      <!-- One of the two, never both: a competition reports a score, table points, or a win — see\n           `resultKind`. Both are hidden from assistive tech, which gets the phrased result from the live\n           region below instead. -->\n      @if (card.drawsScore()) {\n        <et-match-score\n          [value]=\"card.match().homeScore + ''\"\n          [animate]=\"card.animatesScoreChanges()\"\n          class=\"et-match-card-score\"\n          aria-hidden=\"true\"\n        />\n      } @else if (card.homeOutcome(); as outcome) {\n        <span class=\"et-match-card-outcome\" aria-hidden=\"true\">{{ outcome }}</span>\n      }\n    </div>\n\n    <!-- Only laid out in the wide arrangement, where the two sides' results meet and need something\n         between them: the score separator, or \"vs\" when there is no result yet. -->\n    <span class=\"et-match-card-versus\" aria-hidden=\"true\">{{ card.separatorText() }}</span>\n\n    <div [attr.data-participant-id]=\"card.match().away?.id ?? null\" class=\"et-match-card-side\" data-side=\"away\">\n      <et-match-participant\n        [participant]=\"card.match().away\"\n        [compact]=\"card.showsShortNames()\"\n        [showSeed]=\"card.showSeeds()\"\n        [labels]=\"card.labels()\"\n        class=\"et-match-card-participant\"\n      />\n\n      @if (card.drawsScore()) {\n        <et-match-score\n          [value]=\"card.match().awayScore + ''\"\n          [animate]=\"card.animatesScoreChanges()\"\n          class=\"et-match-card-score\"\n          aria-hidden=\"true\"\n        />\n      } @else if (card.awayOutcome(); as outcome) {\n        <span class=\"et-match-card-outcome\" aria-hidden=\"true\">{{ outcome }}</span>\n      }\n    </div>\n  </div>\n\n  @if (card.gameScores(); as gameScores) {\n    <ol class=\"et-match-card-games\" etMatchCardGameScores>\n      @for (gameScore of gameScores; track $index) {\n        <li\n          [attr.aria-label]=\"card.resolvedLabels().gameScore($index + 1, card.gameScoreText(gameScore))\"\n          class=\"et-match-card-game\"\n        >\n          {{ card.gameScoreText(gameScore) }}\n        </li>\n      }\n    </ol>\n  }\n\n  <!-- Always in the DOM, even while empty: a live region has to exist before the value lands in it, or\n       the first score of a match that just kicked off is announced by nobody. It carries the phrased\n       result rather than the drawn pair, since 'W' beside 'L' is nothing to listen to. -->\n  <span class=\"et-match-card-announcement\" etMatchCardScore>{{ card.result() }}</span>\n</div>\n","import {\n  MatchCardDirective,\n  MatchCardGameScoresDirective,\n  MatchCardMetaDirective,\n  MatchCardScoreDirective,\n} from './headless';\nimport { MatchCardComponent } from './match-card.component';\nimport { MatchParticipantComponent } from './match-participant.component';\nimport { MatchScoreComponent } from './match-score.component';\n\n/**\n * The participant display primitive (`<et-match-participant>`) - emblem, name and optional seed for one\n * side of a match. Standalone as well as inside a card: a roster, a standings cell, a filter chip.\n * Pulls in [`et-picture`](/components/picture) and the skeleton.\n */\nexport const MATCH_PARTICIPANT_IMPORTS = [MatchParticipantComponent] as const;\n\n/**\n * The match card (`<et-match-card>` / `<a et-match-card>`), the participant primitive it draws, and the\n * headless directive plus parts to build a card of your own.\n */\nexport const MATCH_CARD_IMPORTS = [\n  MatchCardComponent,\n  MatchParticipantComponent,\n  MatchScoreComponent,\n  MatchCardDirective,\n  MatchCardMetaDirective,\n  MatchCardScoreDirective,\n  MatchCardGameScoresDirective,\n] as const;\n","import { PictureSource } from '../picture';\n\n/**\n * An image in the form `et-picture` consumes. Deliberately not a backend's media shape: an adapter\n * maps whatever the API returns into this, so the components never learn one API's field names.\n */\nexport type NormalizedMedia = {\n  /** Candidate sources, as `et-picture`'s `sources` takes them. */\n  sources?: (PictureSource | string)[];\n  /** The fallback the browser uses when no source matches - and the whole image for a plain URL. */\n  defaultSrc?: PictureSource | string | null;\n};\n\n/** One side of a match: a team, a player, a club. `null` on a match stands for a TBD slot. */\nexport type NormalizedMatchParticipant = {\n  id: string;\n  /** Display name - team name, gamertag. `null` when the API has none yet. */\n  name: string | null;\n  /** Short code for compact rendering (`'FCB'`). Falls back to `name` when absent. */\n  code: string | null;\n  /**\n   * A quieter second line under the name: the org behind an esports roster, the club behind a squad,\n   * the region behind a player. `null` for the common one-line case, and never drawn in a dense row -\n   * a bracket column has no space for it.\n   */\n  subtitle: string | null;\n  /** The emblem/avatar. */\n  emblem: NormalizedMedia | null;\n  /** Seeding position, when the competition has one. */\n  seed: number | null;\n};\n\n/**\n * How far along a match is. Three states, because that is what presentation turns on - an API's\n * richer lifecycle (`preparing`/`published`/`hidden`/…) is the adapter's to collapse.\n */\nexport type NormalizedMatchStatus = 'scheduled' | 'live' | 'finished';\n\n/** One game of a series (a map, a leg), as its two scores. */\nexport type NormalizedGameScore = {\n  home: number;\n  away: number;\n};\n\n/**\n * How a competition reports its results - and therefore the **one** thing a card draws for each side.\n * Never two of them: a cell showing `2` and `W` next to each other says the same thing twice.\n *\n * - `score` - goals, rounds, or games won in a series: `2` and `1`. From `homeScore`/`awayScore`.\n * - `points` - what the match is worth in a table: `3` and `0`, or `1` each for a draw. Same two fields.\n * - `outcome` - a win, a loss, a draw: `W`, `L`, `D`. **Derived from `winnerSide`**, so `homeScore` and\n *   `awayScore` are ignored and a consumer never denormalizes a result into two letters. It also means a\n *   screen reader hears \"FC Berlin won\" rather than the letter \"W\".\n */\nexport type NormalizedMatchResultKind = 'score' | 'points' | 'outcome';\n\n/** What a match card knows about how one of its participant slots was filled. */\nexport type NormalizedMatchSideState = 'occupied' | 'predicted' | 'unresolvable' | 'unavailable';\n\n/**\n * A match, in the shape this library's match components render. **Every backend maps into it** - the\n * Ethlete adapter in `integrations/` is the first-class example, not the model. Keep an\n * adapter of your own to this shape and everything here works; anything more exotic belongs in a card\n * of your own.\n *\n * Deliberately presentation-oriented and minimal: what a card draws, and nothing else.\n */\nexport type NormalizedMatch = {\n  id: string;\n  status: NormalizedMatchStatus;\n  /** Kick-off. `null` when unscheduled - the card then shows neither a time nor a countdown. */\n  startTime: Date | null;\n  /** The two sides. `null` is a TBD slot: a bracket match whose feeder hasn't finished. */\n  home: NormalizedMatchParticipant | null;\n  away: NormalizedMatchParticipant | null;\n  /** Defaults to `occupied` when `home` is present and `unavailable` otherwise. */\n  homeState?: NormalizedMatchSideState;\n  /** Defaults to `occupied` when `away` is present and `unavailable` otherwise. */\n  awayState?: NormalizedMatchSideState;\n  /**\n   * The headline value each side shows, drawn as-is: goals, rounds, games won in a series, or table\n   * points - say which in {@link resultKind}. A string is allowed for an API that reports something else\n   * entirely (`'-'`, `'1.5'`). `null` when there is none, which is when the card shows the kick-off\n   * instead. Both are **ignored** for `resultKind: 'outcome'`, which draws W/L/D off `winnerSide`.\n   */\n  homeScore: number | string | null;\n  awayScore: number | string | null;\n  /** Which of the three result forms this match reports - exactly one of them. */\n  resultKind: NormalizedMatchResultKind;\n  /**\n   * Per-game scores, in order. A best-of-N match has up to N of them (Bo3, Bo5, Bo7 - the map or leg\n   * scores that add up to the headline result). `null` for a single-game match, whose one game score\n   * *is* the headline result and would only be repeated by listing it.\n   */\n  gameScores: NormalizedGameScore[] | null;\n  /** Who won, once it is decided. `null` while undecided or drawn. */\n  winnerSide: 'home' | 'away' | null;\n  /** Free text naming this match - `'Match 3'`, `'Grand Final'`. */\n  label: string | null;\n};\n\nexport const resolveNormalizedMatchSideState = (\n  match: NormalizedMatch,\n  side: 'home' | 'away',\n): NormalizedMatchSideState => match[`${side}State`] ?? (match[side] ? 'occupied' : 'unavailable');\n","import {\n  BracketRoundType,\n  COMMON_BRACKET_ROUND_TYPE,\n  DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE,\n  SINGLE_ELIMINATION_BRACKET_ROUND_TYPE,\n  SWISS_BRACKET_ROUND_TYPE,\n  TOURNAMENT_MODE,\n  TournamentMode,\n} from '../core';\nimport { BracketDataSource, BracketMatchSource, BracketRoundSource } from './base';\nimport { RuntimeError } from '@ethlete/core';\nimport { EthleteMatchInput, EthleteMatchStatusInput, NormalizedMatch, normalizeEthleteMatch } from '../../match';\nimport { BRACKET_ERROR_CODES } from '../bracket-errors';\nimport { BracketMatch } from '../linked';\n\n/** The round kinds of the Ethlete API. */\nexport type EthleteRoundTypeInput =\n  'normal' | 'third_place' | 'final' | 'reverse_final' | 'winner_bracket' | 'loser_bracket';\n\n/** The stage kinds of the Ethlete API, carried on each match as `matchType`. */\nexport type EthleteStageTypeInput =\n  'single_elimination' | 'double_elimination' | 'league' | 'pools' | 'groups' | 'fifa_swiss';\n\n/** The round fields {@link generateBracketDataForEthlete} reads. */\nexport type EthleteRoundInput = {\n  id: string;\n  name: string | null;\n  type: EthleteRoundTypeInput;\n};\n\n/** The match fields {@link generateBracketDataForEthlete} reads. */\nexport type EthleteBracketMatchInput = {\n  id: string;\n  home: { id: string } | null;\n  away: { id: string } | null;\n  winningSide: 'home' | 'away' | null;\n  status: EthleteMatchStatusInput | null;\n  matchType: EthleteStageTypeInput | null;\n};\n\n/** One round with its matches, as the Ethlete API returns a stage. Your own round and match types flow through to the bracket's `data`. */\nexport type EthleteRoundWithMatchesInput<\n  TRound extends EthleteRoundInput = EthleteRoundInput,\n  TMatch extends EthleteBracketMatchInput = EthleteBracketMatchInput,\n> = {\n  round: TRound;\n  matches: readonly TMatch[];\n};\n\nexport const generateRoundTypeFromEthleteRoundType = (\n  type: EthleteRoundTypeInput,\n  tournamentMode: TournamentMode,\n  roundMatchCount: number,\n  // eslint-disable-next-line max-params -- round-type derivation keyed on three independent facts (type, mode, matchCount)\n): BracketRoundType => {\n  switch (type) {\n    case 'normal':\n      switch (tournamentMode) {\n        case 'single-elimination':\n          // This might break if the single elimination contains a 3rd place match + round\n          if (roundMatchCount === 1) {\n            return COMMON_BRACKET_ROUND_TYPE.FINAL;\n          } else {\n            return SINGLE_ELIMINATION_BRACKET_ROUND_TYPE.SINGLE_ELIMINATION_BRACKET;\n          }\n        case 'swiss-with-elimination':\n          return SWISS_BRACKET_ROUND_TYPE.SWISS;\n        default:\n          throw new RuntimeError(\n            BRACKET_ERROR_CODES.MODE_UNSUPPORTED,\n            `Unsupported tournament mode for a normal type round: ${tournamentMode}`,\n          );\n      }\n    case 'third_place':\n      return COMMON_BRACKET_ROUND_TYPE.THIRD_PLACE;\n    case 'final':\n      return COMMON_BRACKET_ROUND_TYPE.FINAL;\n    case 'reverse_final':\n      return DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.REVERSE_FINAL;\n    case 'winner_bracket':\n      return DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.UPPER_BRACKET;\n    case 'loser_bracket':\n      return DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.LOWER_BRACKET;\n  }\n};\n\nexport const generateTournamentModeFormEthleteRounds = (\n  source: readonly EthleteRoundWithMatchesInput[],\n): TournamentMode => {\n  const firstDrawnRound = source.find((round) => round.matches.length > 0);\n  const firstMatch = firstDrawnRound?.matches[0];\n\n  if (!source.length) throw new RuntimeError(BRACKET_ERROR_CODES.SOURCE_EMPTY, 'No rounds found');\n  if (!firstDrawnRound || !firstMatch) throw new RuntimeError(BRACKET_ERROR_CODES.SOURCE_EMPTY, 'No matches found');\n\n  switch (firstMatch.matchType) {\n    case 'fifa_swiss': {\n      const lastRound = source[source.length - 1];\n\n      if (!lastRound) throw new RuntimeError(BRACKET_ERROR_CODES.SOURCE_EMPTY, 'No last round found');\n\n      if (lastRound.matches.length !== firstDrawnRound.matches.length) {\n        return TOURNAMENT_MODE.SWISS_WITH_ELIMINATION;\n      } else {\n        throw new RuntimeError(\n          BRACKET_ERROR_CODES.MODE_UNSUPPORTED,\n          'Unsupported tournament mode: swiss without elimination',\n        );\n      }\n    }\n    case 'double_elimination':\n      return TOURNAMENT_MODE.DOUBLE_ELIMINATION;\n    case 'single_elimination':\n      return TOURNAMENT_MODE.SINGLE_ELIMINATION;\n    default:\n      throw new RuntimeError(\n        BRACKET_ERROR_CODES.MODE_UNSUPPORTED,\n        `Unsupported tournament mode: ${firstMatch.matchType}`,\n      );\n  }\n};\n\nexport const generateBracketDataForEthlete = <\n  TRound extends EthleteRoundInput,\n  TMatch extends EthleteBracketMatchInput,\n>(\n  source: readonly EthleteRoundWithMatchesInput<TRound, TMatch>[],\n): BracketDataSource<TRound, TMatch> => {\n  const tournamentMode = generateTournamentModeFormEthleteRounds(source);\n\n  const bracketData: BracketDataSource<TRound, TMatch> = {\n    rounds: [],\n    matches: [],\n    mode: tournamentMode,\n  };\n\n  for (const currentItem of source) {\n    if (bracketData.rounds.some((r) => r.id === currentItem.round.id)) {\n      throw new RuntimeError(\n        BRACKET_ERROR_CODES.DUPLICATE_ROUND,\n        `Round with id ${currentItem.round.id} already exists in the bracket data.`,\n      );\n    }\n\n    const roundType = generateRoundTypeFromEthleteRoundType(\n      currentItem.round.type,\n      tournamentMode,\n      currentItem.matches.length,\n    );\n\n    const bracketRound: BracketRoundSource<TRound> = {\n      type: roundType,\n      id: currentItem.round.id,\n      data: currentItem.round,\n      name: currentItem.round.name || currentItem.round.type,\n    };\n\n    bracketData.rounds.push(bracketRound);\n\n    for (const match of currentItem.matches) {\n      if (bracketData.matches.some((m) => m.id === match.id)) {\n        throw new RuntimeError(\n          BRACKET_ERROR_CODES.DUPLICATE_MATCH,\n          `Match with id ${match.id} already exists in the bracket data.`,\n        );\n      }\n\n      const bracketMatch: BracketMatchSource<TMatch> = {\n        id: match.id,\n        data: match,\n        roundId: currentItem.round.id,\n        home: match.home?.id || null,\n        away: match.away?.id || null,\n        winner: match.winningSide,\n        status: match.status === 'published' ? 'completed' : 'pending',\n      };\n\n      bracketData.matches.push(bracketMatch);\n    }\n  }\n\n  return bracketData;\n};\n\n/**\n * The normalizer the bracket's default cards need, for a source built by\n * {@link generateBracketDataForEthlete} - the two halves of the same integration, kept apart because the\n * layout engine has no business knowing what a `MatchListView` is.\n *\n * @example\n * provideBracketConfig({ matchNormalizer: normalizeEthleteBracketMatch });\n */\nexport const normalizeEthleteBracketMatch = <TRound, TMatch extends EthleteMatchInput>(\n  match: BracketMatch<TRound, TMatch>,\n): NormalizedMatch => normalizeEthleteMatch(match.data);\n","import { afterNextRender, computed, inject, InjectionToken, Signal } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { MatchCardSize, NormalizedMatch } from '../match';\nimport { BRACKET_ERROR_CODES } from './bracket-errors';\nimport { BracketMatch } from './linked';\n\n/**\n * Turns one of *your* bracket matches into the shape the default cards draw\n * ({@link NormalizedMatch}). The bracket itself never looks inside `TMatchData` - it carries your\n * payload from the data source to the cards untouched - so this is the one place a shape is named.\n *\n * It receives the whole linked match rather than just `data`, which means a consumer whose payload\n * holds nothing presentational can still build a card out of what the bracket knows: participant ids,\n * `winnerSide`, `status`, the round.\n *\n * @example\n * provideBracketConfig({ matchNormalizer: (match) => normalizeEthleteMatch(match.data) });\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type BracketMatchNormalizer<TRoundData = any, TMatchData = any> = (\n  match: BracketMatch<TRoundData, TMatchData>,\n) => NormalizedMatch;\n\n/**\n * What the bracket's default cards need from the bracket around them. Provided by `et-bracket`, which\n * resolves each value from its own input first and its `provideBracketConfig` second.\n *\n * A card of your own doesn't need any of this - it gets everything through its inputs - which is why\n * every member here is read optionally.\n */\nexport type BracketCardContext = {\n  /** The normalizer in effect, or `null` when the app registered none. */\n  resolvedMatchNormalizer: Signal<BracketMatchNormalizer | null>;\n  /** The `aria-level` the default round headers announce themselves at. */\n  resolvedRoundHeaderLevel: Signal<number>;\n  /**\n   * The `size` the default **final** card pins its `et-match-card` to.\n   *\n   * `'auto'` in the grid, where a cell has a deliberate width and letting the card measure it is the\n   * point - a narrow final column should land on the dense row rather than crop. A list row is instead\n   * as wide as the page, so an unpinned final would flip to the wide side-by-side arrangement past\n   * 560px while every row above it stayed dense.\n   */\n  resolvedFinalMatchCardSize: Signal<MatchCardSize>;\n};\n\nexport const BRACKET_CARD_CONTEXT = new InjectionToken<BracketCardContext>('BRACKET_CARD_CONTEXT');\n\n/**\n * The normalized match a default card draws, or `null` when there is no normalizer to produce one.\n *\n * Dev mode throws instead of rendering an empty card: a bracket whose cards silently show nothing is a\n * much worse afternoon than one that says which provider is missing.\n *\n * Named `create…` rather than `inject…` even though it injects: it takes the card's own match input, so\n * it has to be declared after it - which the class-member-order rule only allows for non-`inject` members.\n *\n * @internal\n */\nexport const createNormalizedBracketMatch = <TRoundData, TMatchData>(\n  bracketMatch: Signal<BracketMatch<TRoundData, TMatchData>>,\n) => {\n  const context = inject(BRACKET_CARD_CONTEXT, { optional: true });\n  const hostElement = injectHostElement();\n\n  const normalizer = computed(() => context?.resolvedMatchNormalizer() ?? null);\n\n  if (ngDevMode) {\n    afterNextRender(() => {\n      if (normalizer()) return;\n\n      throw new RuntimeError(\n        BRACKET_ERROR_CODES.MISSING_MATCH_NORMALIZER,\n        \"[BracketComponent] The bracket's default match cards need a matchNormalizer to know how to read your \" +\n          'match data. Add one to provideBracketConfig({ matchNormalizer: (match) => … }) or bind ' +\n          '[matchNormalizer] on <et-bracket> - or supply your own matchComponent / finalMatchComponent instead.',\n        { element: hostElement },\n      );\n    });\n  }\n\n  return computed(() => {\n    const normalize = normalizer();\n\n    return normalize ? normalize(bracketMatch()) : null;\n  });\n};\n","import { BracketLayoutConfig } from './bracket.config';\n\nexport const BRACKET_DENSITY = {\n  /** The shipped sizing: a 250px column with room for emblems, names and a score. */\n  DEFAULT: 'default',\n  /** Roughly two thirds the size, for a full bracket inside an article column or a phone. */\n  COMPACT: 'compact',\n} as const;\n\nexport type BracketDensity = (typeof BRACKET_DENSITY)[keyof typeof BRACKET_DENSITY];\n\n/**\n * What a density is: a set of layout defaults, applied under anything you set yourself.\n *\n * `compact`'s column is deliberately under the match card's own 150px minimal threshold, so the cards\n * inside it drop their emblems and shrink their type without the bracket having to say so - one number\n * here changes the whole look. The curves come down with the columns: a 10px radius on a 40px connector\n * reads as a kink rather than a curve.\n */\nexport const BRACKET_DENSITY_PRESETS: Record<BracketDensity, Partial<BracketLayoutConfig>> = {\n  default: {},\n  compact: {\n    columnWidth: 140,\n    matchHeight: 52,\n    finalColumnWidth: 200,\n    finalMatchHeight: 132,\n    roundHeaderHeight: 34,\n    roundHeaderGap: 12,\n    columnGap: 32,\n    rowGap: 16,\n    rowRoundGap: 12,\n    lineStartingCurveAmount: 6,\n    continueColumnWidth: 140,\n    continueElementHeight: 52,\n    swissGroupPadding: 6,\n  },\n};\n","import { BracketSlotSource } from '@ethlete/bracket';\nimport { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the bracket's default cards render or announce. Defaults are English\n * ({@link DEFAULT_BRACKET_LABELS}); override them app-wide with {@link provideBracketLabels}.\n *\n * The match cards themselves draw no strings of their own - those come from the match domain's\n * `provideMatchLabels`, since the cards are `et-match-card`s.\n */\nexport type BracketLabels = {\n  /** A round header's match count, e.g. `'4 matches'`. */\n  roundMatchCount: (matches: number) => string;\n  /** The continue card's headline, e.g. `'2 winners advance'`. */\n  winnersAdvance: (winners: number) => string;\n  /** Names the continue card for assistive tech, since its own text is a fragment. */\n  continueLabel: (winners: number) => string;\n  /** Announced on the final's card once it has a winner. */\n  champion: (participant: string) => string;\n  /** Announced on the final's card while it is still to be played. */\n  championPending: string;\n  /** Heads the winners-bracket rounds in a double-elimination `et-bracket-rounds-list`. */\n  upperBracketSection: string;\n  /** Heads the losers-bracket rounds in a double-elimination `et-bracket-rounds-list`. */\n  lowerBracketSection: string;\n  /** Heads the deciding rounds - grand final, bracket reset, third place - in a rounds list. */\n  finalsSection: string;\n  /** A slot an earlier match's winner walks into. */\n  slotMatchWinner: string;\n  /** A slot an earlier match's loser drops into. */\n  slotMatchLoser: string;\n  /** A slot a place in a standing feeds, e.g. `'Group A position 2'`. Either part may be unknown. */\n  slotStandingRank: (standing: string | null, rank: number | null) => string;\n  /** A slot reserved for a seeding position, e.g. `'Seed 3'`. */\n  slotSeed: (seed: number | null) => string;\n  /** A slot a swiss round's draw fills, which only happens once the round is scheduled. */\n  slotSwissBucket: string;\n  /** A slot nobody plays in. */\n  slotBye: string;\n  /** A slot whoever qualifies from another competition arrives in. */\n  slotExternal: string;\n  /** A slot the competition says nothing at all about. */\n  slotUnknown: string;\n  /**\n   * A pick-card side the viewer could reach by predicting the round that feeds it, and hasn't. The\n   * card's `earlierRoundsClosed` input swaps it for {@link BracketLabels.slotNotPredicted}.\n   */\n  slotPredictEarlierRound: string;\n  /** The same side once no earlier round is left to predict, so the invitation would be a dead end. */\n  slotNotPredicted: string;\n  /** Names the `et-bracket-participants` legend for assistive tech. */\n  participantsLegend: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_BRACKET_LABELS: BracketLabels = {\n  roundMatchCount: (matches) => `${matches} ${matches === 1 ? 'match' : 'matches'}`,\n  winnersAdvance: (winners) => `${winners} ${winners === 1 ? 'winner' : 'winners'} advance`,\n  continueLabel: (winners) => `${winners} ${winners === 1 ? 'winner' : 'winners'} advance to the next stage`,\n  champion: (participant) => `Champion: ${participant}`,\n  championPending: 'Champion not decided yet',\n  upperBracketSection: 'Upper bracket',\n  lowerBracketSection: 'Lower bracket',\n  finalsSection: 'Finals',\n  slotMatchWinner: 'Winner of an earlier match',\n  slotMatchLoser: 'Loser of an earlier match',\n  slotStandingRank: (standing, rank) => {\n    if (standing && rank !== null) return `${standing} position ${rank}`;\n\n    return standing ?? (rank === null ? 'A standing position' : `Standing position ${rank}`);\n  },\n  slotSeed: (seed) => (seed === null ? 'A seeded slot' : `Seed ${seed}`),\n  slotSwissBucket: 'Drawn once the round is scheduled',\n  slotBye: 'Bye',\n  slotExternal: 'Arrives from another competition',\n  slotUnknown: 'Not known yet',\n  slotPredictEarlierRound: 'Predict the earlier round first',\n  slotNotPredicted: 'Not predicted',\n  participantsLegend: 'Participants',\n};\n\nconst BRACKET_LABELS_DEF = /* @__PURE__ */ defineLabels<BracketLabels>('BRACKET_LABELS', DEFAULT_BRACKET_LABELS);\n\n/**\n * Localize the bracket's default cards for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_BRACKET_LABELS} value.\n *\n * @example\n * provideBracketLabels({\n *   roundMatchCount: (matches) => `${matches} Spiele`,\n *   winnersAdvance: (winners) => `${winners} kommen weiter`,\n * });\n */\nexport const provideBracketLabels = /* @__PURE__ */ toProvideFn(BRACKET_LABELS_DEF);\nexport const injectBracketLabels = /* @__PURE__ */ toInjectFn(BRACKET_LABELS_DEF);\nexport const BRACKET_LABELS = /* @__PURE__ */ toToken(BRACKET_LABELS_DEF);\n\n/**\n * What a slot with no participant in it is, in one line - the winner of an earlier match, a place in a\n * standing, a seed, a bye. `source.label` always wins: where the competition worded the slot itself,\n * this repeats that word rather than inventing one. A slot with no source at all reads as unknown.\n *\n * @example\n * describeBracketSlot(bracketMatch.homeSource, injectBracketLabels()());\n */\nexport const describeBracketSlot = (source: BracketSlotSource | null | undefined, labels: BracketLabels) => {\n  if (!source) return labels.slotUnknown;\n  if (source.label) return source.label;\n\n  switch (source.kind) {\n    case 'match-outcome':\n      return source.role === 'loser' ? labels.slotMatchLoser : labels.slotMatchWinner;\n    case 'standing-rank':\n      return labels.slotStandingRank(source.standingName ?? null, source.rank);\n    case 'seed':\n      return labels.slotSeed(source.seed ?? null);\n    case 'swiss-bucket':\n      return labels.slotSwissBucket;\n    case 'bye':\n      return labels.slotBye;\n    case 'external':\n      return labels.slotExternal;\n  }\n};\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { ARROW_RIGHT_ICON, ICON_IMPORTS, provideIcons } from '../icon';\nimport { injectBracketLabels } from './bracket-labels';\nimport { BracketMatch } from './linked';\n\n/**\n * The bracket's default continue cell: the \"and then?\" at the end of a stage that feeds a later one\n * rather than crowning a winner. Says how many winners advance, and carries an accessible label of its\n * own - its visible text is a fragment, and a fragment is not a name.\n *\n * Only rendered when `showContinueElement` is on and the layout runs left to right.\n */\n@Component({\n  selector: 'et-bracket-default-continue',\n  template: `\n    <i [etIcon]=\"ARROW_RIGHT\" class=\"et-bracket-default-continue-icon\" aria-hidden=\"true\"></i>\n\n    <span class=\"et-bracket-default-continue-text\" aria-hidden=\"true\">{{ advanceText() }}</span>\n  `,\n  styleUrl: './bracket-default-continue.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ICON_IMPORTS],\n  providers: [provideIcons(ARROW_RIGHT_ICON)],\n  host: {\n    class: 'et-bracket-default-continue-host',\n    role: 'group',\n    '[attr.aria-label]': 'accessibleName()',\n  },\n})\nexport class BracketDefaultContinueComponent<TRoundData = unknown, TMatchData = unknown> {\n  private labels = injectBracketLabels();\n\n  public bracketMatches = input.required<BracketMatch<TRoundData, TMatchData>[]>();\n\n  protected readonly ARROW_RIGHT = ARROW_RIGHT_ICON.name;\n\n  protected advanceText = computed(() => this.labels().winnersAdvance(this.bracketMatches().length));\n\n  protected accessibleName = computed(() => this.labels().continueLabel(this.bracketMatches().length));\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ICON_IMPORTS, provideIcons, TROPHY_ICON } from '../icon';\nimport {\n  injectMatchLabels,\n  MATCH_CARD_IMPORTS,\n  MATCH_CARD_SIZES,\n  MatchCardSize,\n  matchParticipantDisplayName,\n} from '../match';\nimport { BRACKET_CARD_CONTEXT, createNormalizedBracketMatch } from './bracket-card-context';\nimport { injectBracketLabels } from './bracket-labels';\nimport { BracketMatch, BracketRound, BracketRoundSwissGroup } from './linked';\n\n/**\n * The bracket's default **final** cell - deliberately not the same card as every other round. The match\n * inside it is a full [`et-match-card`](/components/match), so it keeps the accessible name, the score\n * live region and the series breakdown; around it sit the things only a final gets: the round's name\n * under a trophy, an accent frame in the color theme in scope, and - once the match is decided - a\n * champion line naming the winner.\n *\n * The bracket's `finalColumnWidth` / `finalMatchHeight` defaults (360×200) are sized for exactly this;\n * shrink them and the card inside falls back to the dense row rather than cropping.\n *\n * Replace it with `finalMatchComponent` when your brand wants its own hero treatment - that is the\n * expected thing to do with this one.\n */\n@Component({\n  selector: 'et-bracket-default-final-match',\n  template: `\n    @if (normalizedMatch(); as match) {\n      <div class=\"et-bracket-final-header\">\n        <i [etIcon]=\"TROPHY\" class=\"et-bracket-final-trophy\" aria-hidden=\"true\"></i>\n        <span class=\"et-bracket-final-round\">{{ bracketRound().name }}</span>\n      </div>\n\n      <!-- The size comes from the host: auto in the grid, where the final column is wide enough for the\n           featured card and a narrower one should land on the dense row rather than crop; pinned in a\n           rounds list, where the row is as wide as the page. -->\n      <et-match-card [match]=\"match\" [size]=\"cardSize()\" class=\"et-bracket-final-card\" />\n\n      <p class=\"et-bracket-final-champion\">{{ championText() }}</p>\n    }\n  `,\n  styleUrl: './bracket-default-final-match.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MATCH_CARD_IMPORTS, ICON_IMPORTS],\n  providers: [provideIcons(TROPHY_ICON)],\n  host: {\n    class: 'et-bracket-final-host',\n    '[attr.data-decided]': 'championName() ? \"\" : null',\n  },\n})\nexport class BracketDefaultFinalMatchComponent<TRoundData = unknown, TMatchData = unknown> {\n  private bracketLabels = injectBracketLabels();\n  private matchLabels = injectMatchLabels();\n  private cardContext = inject(BRACKET_CARD_CONTEXT, { optional: true });\n\n  public bracketRound = input.required<BracketRound<TRoundData, TMatchData>>();\n  public bracketMatch = input.required<BracketMatch<TRoundData, TMatchData>>();\n  public bracketRoundSwissGroup = input.required<BracketRoundSwissGroup<TRoundData, TMatchData> | null>();\n\n  protected normalizedMatch = createNormalizedBracketMatch(this.bracketMatch);\n\n  protected cardSize = computed<MatchCardSize>(\n    () => this.cardContext?.resolvedFinalMatchCardSize() ?? MATCH_CARD_SIZES.AUTO,\n  );\n\n  protected readonly TROPHY = TROPHY_ICON.name;\n\n  /** The champion's display name, or `null` while the final is undecided or drawn. */\n  protected championName = computed(() => {\n    const match = this.normalizedMatch();\n    const winnerSide = match?.winnerSide;\n\n    if (!match || !winnerSide) return null;\n\n    return matchParticipantDisplayName({\n      participant: winnerSide === 'home' ? match.home : match.away,\n      labels: this.matchLabels(),\n    });\n  });\n\n  /**\n   * The champion line, which says something either way: a final with no winner yet is the most looked-at\n   * cell in the bracket, so leaving its space blank would just look broken.\n   */\n  protected championText = computed(() => {\n    const championName = this.championName();\n    const labels = this.bracketLabels();\n\n    return championName ? labels.champion(championName) : labels.championPending;\n  });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { MATCH_CARD_IMPORTS } from '../match';\nimport { createNormalizedBracketMatch } from './bracket-card-context';\nimport { BracketMatch, BracketRound, BracketRoundSwissGroup } from './linked';\n\n/**\n * The bracket's default match cell: an [`et-match-card`](/components/match) at `compact`, which is the\n * density a bracket column has room for - two rows, short codes, the winner emphasized.\n *\n * It reads your match through the registered `matchNormalizer`, so the bracket engine stays ignorant of\n * your API's shape. No normalizer, no card: dev mode throws\n * [`ET3412`](/components/error-codes#bracket-et34xx) naming the provider to add.\n *\n * **Not a link.** The bracket can't know your routes, and this card won't guess: to make cells navigate,\n * pass a `matchComponent` of your own that wraps `et-match-card` on an `<a>`. It is four lines, and the\n * guide has them.\n */\n@Component({\n  selector: 'et-bracket-default-match',\n  template: `\n    @if (normalizedMatch(); as match) {\n      <et-match-card [match]=\"match\" class=\"et-bracket-default-match-card\" size=\"compact\" />\n    }\n  `,\n  styleUrl: './bracket-default-match.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MATCH_CARD_IMPORTS],\n  host: {\n    class: 'et-bracket-default-match-host',\n  },\n})\nexport class BracketDefaultMatchComponent<TRoundData = unknown, TMatchData = unknown> {\n  public bracketRound = input.required<BracketRound<TRoundData, TMatchData>>();\n  public bracketMatch = input.required<BracketMatch<TRoundData, TMatchData>>();\n  public bracketRoundSwissGroup = input.required<BracketRoundSwissGroup<TRoundData, TMatchData> | null>();\n\n  protected normalizedMatch = createNormalizedBracketMatch(this.bracketMatch);\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { BRACKET_CARD_CONTEXT } from './bracket-card-context';\nimport { injectBracketLabels } from './bracket-labels';\nimport { BracketRound, BracketRoundSwissGroup } from './linked';\n\n/**\n * The bracket's default column header: the round's name, its swiss group's name where there is one, and\n * how many matches it holds.\n *\n * It is a **real heading** (`role=\"heading\"` with an `aria-level`), which is what turns a wall of\n * absolutely-positioned cells into something a screen reader can navigate by structure. The level comes\n * from the bracket's `roundHeaderLevel` - set that to sit correctly in your page's outline rather than\n * assuming this one is right.\n */\n@Component({\n  selector: 'et-bracket-default-round-header',\n  template: `\n    <span class=\"et-bracket-default-round-header-name\">{{ bracketRound().name }}</span>\n\n    @if (bracketRoundSwissGroup()?.name; as groupName) {\n      <span class=\"et-bracket-default-round-header-group\">{{ groupName }}</span>\n    }\n\n    <span class=\"et-bracket-default-round-header-count\">{{ matchCountLabel() }}</span>\n  `,\n  styleUrl: './bracket-default-round-header.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-bracket-default-round-header-host',\n    role: 'heading',\n    '[attr.aria-level]': 'headingLevel()',\n  },\n})\nexport class BracketDefaultRoundHeaderComponent<TRoundData = unknown, TMatchData = unknown> {\n  private cardContext = inject(BRACKET_CARD_CONTEXT, { optional: true });\n  private labels = injectBracketLabels();\n\n  public bracketRound = input.required<BracketRound<TRoundData, TMatchData>>();\n  public bracketRoundSwissGroup = input.required<BracketRoundSwissGroup<TRoundData, TMatchData> | null>();\n\n  protected headingLevel = computed(() => this.cardContext?.resolvedRoundHeaderLevel() ?? 3);\n\n  protected matchCountLabel = computed(() => this.labels().roundMatchCount(this.bracketRound().matchCount));\n}\n","import { COMMON_BRACKET_ROUND_TYPE, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE } from './core';\nimport {\n  BracketComponents,\n  BracketContinueComponent,\n  BracketMatchComponent,\n  BracketRoundHeaderComponent,\n} from '@ethlete/bracket';\nimport { Bracket, BracketRound } from './linked/bracket';\nimport { BracketDefaultContinueComponent } from './bracket-default-continue.component';\nimport { BracketDefaultFinalMatchComponent } from './bracket-default-final-match.component';\nimport { BracketDefaultMatchComponent } from './bracket-default-match.component';\nimport { BracketDefaultRoundHeaderComponent } from './bracket-default-round-header.component';\nimport { BracketConfig } from './bracket.config';\n\n/**\n * The cards a host component was told to draw with, each `undefined` where its input was left unset.\n *\n * @internal\n */\nexport type BracketComponentOverrides<TRoundData, TMatchData> = {\n  roundHeader?: BracketRoundHeaderComponent<TRoundData, TMatchData>;\n  match?: BracketMatchComponent<TRoundData, TMatchData>;\n  finalMatch?: BracketMatchComponent<TRoundData, TMatchData>;\n  continue?: BracketContinueComponent<TRoundData, TMatchData>;\n};\n\n/**\n * Which component draws each kind of cell: the host's own inputs first, the active layout's cards\n * second (`swissBracketLayout({ matchComponent })`), `provideBracketConfig` third, the shipped\n * defaults last.\n *\n * Shared so that every representation of a bracket - the grid and the rounds list - picks the same card\n * for the same source.\n *\n * @internal\n */\nexport const resolveBracketComponents = <TRoundData, TMatchData>(\n  overrides: BracketComponentOverrides<TRoundData, TMatchData>,\n  config: BracketConfig<TRoundData, TMatchData>,\n  layoutComponents: BracketComponentOverrides<TRoundData, TMatchData> | undefined,\n  // eslint-disable-next-line max-params -- the precedence chain, one argument per link\n): BracketComponents<TRoundData, TMatchData> => ({\n  match: overrides.match ?? layoutComponents?.match ?? config.matchComponent ?? BracketDefaultMatchComponent,\n  finalMatch:\n    overrides.finalMatch ??\n    layoutComponents?.finalMatch ??\n    config.finalMatchComponent ??\n    BracketDefaultFinalMatchComponent,\n  roundHeader:\n    overrides.roundHeader ??\n    layoutComponents?.roundHeader ??\n    config.roundHeaderComponent ??\n    BracketDefaultRoundHeaderComponent,\n  continue:\n    overrides.continue ?? layoutComponents?.continue ?? config.continueComponent ?? BracketDefaultContinueComponent,\n});\n\n/**\n * Whether a round's matches get the *final* card rather than the ordinary one.\n *\n * The last match played is the one that decides the tournament, which in a double elimination bracket\n * with a bracket-reset final is the reverse final rather than the grand final - mirrors the rule the grid\n * applies in `createBracketSubColumnRelativeToFirstRound`.\n *\n * @internal\n */\nexport const usesBracketFinalCard = <TRoundData, TMatchData>(\n  round: BracketRound<TRoundData, TMatchData>,\n  bracket: Bracket<TRoundData, TMatchData>,\n) => {\n  const hasReverseFinal = !!bracket.roundsByType.get(DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.REVERSE_FINAL)?.first();\n\n  return (\n    round.type ===\n    (hasReverseFinal ? DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.REVERSE_FINAL : COMMON_BRACKET_ROUND_TYPE.FINAL)\n  );\n};\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { BracketMatchNormalizer } from './bracket-card-context';\nimport { BracketDensity } from './bracket-density';\nimport { BracketLayout } from './bracket-layout';\nimport { BracketContinueComponent, BracketMatchComponent, BracketRoundHeaderComponent } from '@ethlete/bracket';\n\nexport const BRACKET_ROUND_HEADER_ALIGN = {\n  START: 'start',\n  CENTER: 'center',\n} as const;\n\nexport type BracketRoundHeaderAlign = (typeof BRACKET_ROUND_HEADER_ALIGN)[keyof typeof BRACKET_ROUND_HEADER_ALIGN];\n\n/**\n * Default values for the et-bracket component inputs. Inputs set on the component\n * always win over the config.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type BracketConfig<TRoundData = any, TMatchData = any> = {\n  /**\n   * The ways of drawing a bracket this app ships, one per tournament mode - see {@link BracketLayout}.\n   * Only the factories you call here end up in your bundle; a source whose mode has no entry throws\n   * `ET3413`. A host's `layouts` input replaces this list entirely for that instance.\n   *\n   * @example\n   * provideBracketConfig({ layouts: [singleEliminationBracketLayout(), swissBracketLayout()] });\n   */\n  layouts?: readonly BracketLayout<TRoundData, TMatchData>[];\n\n  columnWidth?: number;\n  matchHeight?: number;\n  finalMatchHeight?: number;\n  finalColumnWidth?: number;\n  roundHeaderHeight?: number;\n  roundHeaderGap?: number;\n  columnGap?: number;\n  rowGap?: number;\n  rowRoundGap?: number;\n  /** The round whose density determines vertical spacing. `null` uses the opening round. */\n  rowSpanRoundId?: string | null;\n  /**\n   * How far below the top of the final's card a third place match sits, in px, folding it into the\n   * final's column and moving its round header above its own card. `null` gives it a column of its own.\n   *\n   * Only a single elimination layout has a column to fold: a double elimination grid already hangs the\n   * third place under its final.\n   */\n  thirdPlaceTopOffset?: number | null;\n  /**\n   * What the final keeps between its round header and its card, in px, where that is more than\n   * `roundHeaderGap` - room for a trophy line or a stage label. `null` gives it the same gap as every\n   * other round.\n   *\n   * The room goes to the final's column alone; widening `roundHeaderGap` instead lowers the card of\n   * every round.\n   */\n  finalRoundHeaderGap?: number | null;\n  /**\n   * Where a round header sits over its column. `'center'` is the one round of a narrow panel, where the\n   * header names the panel rather than labelling a column it starts.\n   *\n   * A header that fills its column - the shipped one does - looks the same either way.\n   */\n  alignRoundHeaders?: BracketRoundHeaderAlign;\n  /**\n   * How much room to keep to the inline start of `focusRoundId`, in px - the gutter a one-round panel\n   * puts its navigation in, and that a card badge may straddle the card's edge into.\n   */\n  focusInset?: number;\n  lineStartingCurveAmount?: number;\n  lineEndingCurveAmount?: number;\n  lineWidth?: number;\n  lineDashArray?: number;\n  lineDashOffset?: number;\n  disableJourneyHighlight?: boolean;\n  swissGroupPadding?: number;\n  swissGroupBorderRadius?: number;\n  /**\n   * The size everything is drawn at - `'default'`, or `'compact'` for a bracket in an article column or\n   * a phone. A preset under everything else: any setting above still wins over it. See\n   * {@link BRACKET_DENSITY_PRESETS}.\n   */\n  density?: BracketDensity;\n  hideRoundHeaders?: boolean;\n  showContinueElement?: boolean;\n  continueColumnWidth?: number;\n  continueElementHeight?: number;\n  continueLineDashArray?: number;\n\n  roundHeaderComponent?: BracketRoundHeaderComponent<TRoundData, TMatchData>;\n  matchComponent?: BracketMatchComponent<TRoundData, TMatchData>;\n  finalMatchComponent?: BracketMatchComponent<TRoundData, TMatchData>;\n  continueComponent?: BracketContinueComponent<TRoundData, TMatchData>;\n\n  /**\n   * How to read your match data - required by the **default** cards, ignored by cards of your own. See\n   * {@link BracketMatchNormalizer}; the Ethlete integration ships a ready-made one.\n   */\n  matchNormalizer?: BracketMatchNormalizer<TRoundData, TMatchData>;\n  /**\n   * The `aria-level` the default round headers announce themselves at. Match it to where the bracket\n   * sits in your page's heading outline - a bracket under an `<h2>` section wants `3`.\n   */\n  roundHeaderLevel?: number;\n};\n\n/**\n * The settings that describe how a bracket is *drawn*, as opposed to what draws it - everything in\n * {@link BracketConfig} except the layouts, the component slots and the normalizer.\n */\nexport type BracketLayoutConfig = Omit<\n  BracketConfig,\n  | 'layouts'\n  | 'roundHeaderComponent'\n  | 'matchComponent'\n  | 'finalMatchComponent'\n  | 'continueComponent'\n  | 'matchNormalizer'\n>;\n\n/**\n * The value every {@link BracketLayoutConfig} setting falls back to when neither an input, a density\n * preset nor `provideBracketConfig` supplies one.\n *\n * It exists so the component and the standalone helpers that have to predict its layout\n * ({@link bracketNaturalWidth}) can never drift apart - the type makes leaving a new setting out a\n * compile error.\n */\nexport const BRACKET_DEFAULTS: Required<BracketLayoutConfig> = {\n  columnWidth: 250,\n  matchHeight: 75,\n  // Sized for the shipped final card, which is a header, an expanded match card and a champion line\n  // stacked - the previous 300×75 fitted the debug placeholder and nothing else. A custom final card that\n  // wants the old box sets these back.\n  finalMatchHeight: 200,\n  finalColumnWidth: 360,\n  roundHeaderHeight: 50,\n  roundHeaderGap: 20,\n  columnGap: 60,\n  rowGap: 30,\n  rowRoundGap: 20,\n  rowSpanRoundId: null,\n  thirdPlaceTopOffset: null,\n  finalRoundHeaderGap: null,\n  alignRoundHeaders: BRACKET_ROUND_HEADER_ALIGN.START,\n  focusInset: 0,\n  lineStartingCurveAmount: 10,\n  lineEndingCurveAmount: 0,\n  lineWidth: 2,\n  lineDashArray: 0,\n  lineDashOffset: 0,\n  disableJourneyHighlight: false,\n  swissGroupPadding: 10,\n  swissGroupBorderRadius: 12,\n  density: 'default',\n  hideRoundHeaders: false,\n  showContinueElement: false,\n  continueColumnWidth: 250,\n  continueElementHeight: 75,\n  continueLineDashArray: 6,\n  roundHeaderLevel: 3,\n};\n\nconst BRACKET_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<BracketConfig>({}, { name: 'BracketConfig' });\n\nexport const provideBracketConfig = /* @__PURE__ */ toProvideFn(BRACKET_CONFIG_DEF);\nexport const injectBracketConfig = /* @__PURE__ */ toInjectFn(BRACKET_CONFIG_DEF);\n","import { BRACKET_DENSITY_PRESETS } from './bracket-density';\nimport { BRACKET_DEFAULTS, BracketLayoutConfig } from './bracket.config';\nimport { BRACKET_DATA_LAYOUT, BracketDataLayout } from './core/layout';\nimport { CreateBracketGridConfig } from '@ethlete/bracket';\n\n/**\n * Every layout setting, resolved to a concrete value - no `undefined`, no \"fall back to the config\".\n * Produced by {@link resolveBracketLayoutSettings}.\n *\n * @internal\n */\nexport type BracketLayoutSettings = Required<BracketLayoutConfig>;\n\nconst LAYOUT_KEYS = /* @__PURE__ */ Object.keys(BRACKET_DEFAULTS) as (keyof BracketLayoutSettings)[];\n\n/**\n * Resolves a partial config in the order the bracket documents: what you set, then the density preset,\n * then {@link BRACKET_DEFAULTS}.\n *\n * @internal\n */\nexport const resolveBracketLayoutSettings = (config: BracketLayoutConfig): BracketLayoutSettings => {\n  const settings: BracketLayoutSettings = {\n    ...BRACKET_DEFAULTS,\n    ...BRACKET_DENSITY_PRESETS[config.density ?? BRACKET_DEFAULTS.density],\n  };\n\n  // Key by key rather than one spread: a config carrying an explicit `undefined` (which is what an\n  // unbound component input hands over) must leave the preset's value standing, not clobber it.\n  for (const key of LAYOUT_KEYS) {\n    const value = config[key];\n\n    if (value !== undefined) {\n      (settings as Record<string, unknown>)[key] = value;\n    }\n  }\n\n  return settings;\n};\n\n/**\n * Translates the resolved settings into what the grid builders take - the two differ where a flag zeroes\n * a measurement (hidden round headers) or turns a pair of them into an object (the continue column).\n * The data layout comes from the active {@link BracketLayout}, not from the settings.\n *\n * @internal\n */\nexport const createBracketGridConfig = (\n  settings: BracketLayoutSettings,\n  dataLayout: BracketDataLayout,\n): CreateBracketGridConfig => ({\n  includeRoundHeaders: !settings.hideRoundHeaders,\n  columnGap: settings.columnGap,\n  rowRoundGap: settings.rowRoundGap,\n  columnWidth: settings.columnWidth,\n  matchHeight: settings.matchHeight,\n  roundHeaderHeight: settings.hideRoundHeaders ? 0 : settings.roundHeaderHeight,\n  rowGap: settings.rowGap,\n  rowSpanRoundId: settings.rowSpanRoundId,\n  layout: dataLayout,\n  finalMatchHeight: settings.finalMatchHeight,\n  finalColumnWidth: settings.finalColumnWidth,\n  roundHeaderGap: settings.hideRoundHeaders ? 0 : settings.roundHeaderGap,\n  finalRoundHeaderGap: settings.hideRoundHeaders ? null : settings.finalRoundHeaderGap,\n  thirdPlaceTopOffset: settings.thirdPlaceTopOffset,\n  swissGroupPadding: settings.swissGroupPadding,\n  swissGroupBorderWidth: settings.lineWidth,\n  continueElement:\n    settings.showContinueElement && dataLayout === BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT\n      ? {\n          columnWidth: settings.continueColumnWidth,\n          elementHeight: settings.continueElementHeight,\n        }\n      : null,\n});\n","import { Type } from '@angular/core';\nimport { BracketComponentOverrides } from './bracket-components';\nimport { BracketLayoutSettings } from './bracket-grid';\nimport { BracketLabels } from './bracket-labels';\nimport { BracketDataLayout } from './core/layout';\nimport { TournamentMode } from './core/tournament';\nimport {\n  BracketComponents,\n  BracketDrawing,\n  ComputedBracketGrid,\n  CreateBracketGridConfig,\n  resolveBracketLayout as resolveBracketLayoutCore,\n} from '@ethlete/bracket';\nimport { Bracket, BracketRound } from './linked/bracket';\nimport { BracketRoundMapWithSwissData, BracketSwissColors } from './linked/swiss';\n\n/**\n * What {@link BracketLayout.drawEdges} gets to work with: the grid it is connecting and the resolved\n * settings of the host that built it.\n */\nexport type BracketDrawEdgesContext<TRoundData = unknown, TMatchData = unknown> = {\n  grid: ComputedBracketGrid<TRoundData, TMatchData>;\n  /** Every layout setting in effect on the host, resolved - inputs, config, density preset, defaults. */\n  settings: BracketLayoutSettings;\n  /** Unique per host instance - prefix any `id` the SVG mints (gradients) so two brackets can coexist. */\n  idPrefix: string;\n  /** The host's `swissColors` input, when set. Layouts that draw no swiss groups ignore it. */\n  colors?: BracketSwissColors;\n};\n\n/**\n * A section a round renders under in `<et-bracket-rounds-list>` - the heading is `name`, and rounds\n * whose consecutive sections share an `id` render under one heading.\n */\nexport type BracketListSection = {\n  id: string;\n  name: string | null;\n};\n\n/**\n * Everything one way of drawing a bracket knows how to do, as a plain value: how to position the\n * matches into a grid and how to draw the lines between them, plus the optional hooks the rounds list\n * and the card resolution ask for.\n *\n * Register the layouts your app renders with `provideBracketConfig({ layouts: [...] })` (or hand them\n * to the `layouts` input) - each one comes from a factory like `singleEliminationBracketLayout()`.\n * **Only the factories you call end up in your bundle**; a source whose `mode` has no registered\n * layout throws `ET3413` rather than rendering wrong.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type BracketLayout<TRoundData = any, TMatchData = any> = {\n  /** Names the layout in errors and devtools - `'single-elimination-mirrored'`. */\n  name: string;\n\n  /**\n   * The tournament mode this layout draws; what {@link resolveBracketLayout} keys on. Several layouts\n   * may serve the same mode (`doubleEliminationBracketLayout()` and its mirrored variant) - the first\n   * match in the registered array wins.\n   */\n  mode: TournamentMode;\n\n  /**\n   * How the engine orders and splits the rounds before this layout ever sees them - `'mirrored'` halves\n   * each round up to the first one it cannot halve. An engine detail carried by the layout, not a\n   * consumer knob.\n   *\n   * @internal\n   */\n  dataLayout: BracketDataLayout;\n\n  /** Positions the linked bracket's rounds and matches into a grid of columns. */\n  // eslint-disable-next-line max-params -- grid builder signature (data, options, components)\n  createGrid: (\n    bracket: Bracket<TRoundData, TMatchData>,\n    options: CreateBracketGridConfig,\n    components: BracketComponents<TRoundData, TMatchData>,\n  ) => ComputedBracketGrid<TRoundData, TMatchData>;\n\n  /**\n   * Describes what goes between the cells - the connectors, and any group borders behind them - as data\n   * the host renders with `@for`. See {@link BracketDrawing}: give an edge an `id` that survives a\n   * re-layout, or it will be replaced instead of animated.\n   */\n  drawEdges: (context: BracketDrawEdgesContext<TRoundData, TMatchData>) => BracketDrawing;\n\n  /**\n   * Splits rounds into standings groups for `<et-bracket-rounds-list>` - a swiss round lists each\n   * win/loss group under its own header. Layouts without groups leave this unset.\n   */\n  listGrouping?: (\n    bracket: Bracket<TRoundData, TMatchData>,\n  ) => BracketRoundMapWithSwissData<TRoundData, TMatchData> | null;\n\n  /**\n   * Sections a round under a heading in `<et-bracket-rounds-list>` - double elimination separates\n   * upper bracket, lower bracket and finals. Unset renders every round under no heading.\n   */\n  // eslint-disable-next-line max-params -- (round, bracket, labels) mirrors the list's question\n  listSection?: (\n    round: BracketRound<TRoundData, TMatchData>,\n    bracket: Bracket<TRoundData, TMatchData>,\n    labels: BracketLabels,\n  ) => BracketListSection;\n\n  /**\n   * Per-layout default cards, sitting between the host's inputs and the app config: input →\n   * these → `provideBracketConfig` components → shipped defaults.\n   */\n  components?: BracketComponentOverrides<TRoundData, TMatchData>;\n\n  /**\n   * Styles-only components the host mounts (once, app-wide) while this layout renders - CSS only\n   * brackets with this layout need, kept out of every other consumer's document.\n   */\n  styles?: readonly Type<unknown>[];\n};\n\n/**\n * The layout drawing a source: the first registered layout whose `mode` matches. Throws `ET3413` when\n * none does - a bracket never silently renders a mode it was not given the code for.\n *\n * @internal\n */\nexport const resolveBracketLayout = <TRoundData, TMatchData>(\n  layouts: readonly BracketLayout<TRoundData, TMatchData>[] | undefined,\n  mode: TournamentMode,\n): BracketLayout<TRoundData, TMatchData> => {\n  return resolveBracketLayoutCore(layouts, mode);\n};\n","import { BracketDataSource } from './integrations';\nimport { createBracket } from './linked/bracket';\nimport { resolveBracketComponents } from './bracket-components';\nimport { createBracketGridConfig, resolveBracketLayoutSettings } from './bracket-grid';\nimport { resolveBracketLayout } from './bracket-layout';\nimport { BracketConfig } from './bracket.config';\n\n/**\n * How wide `<et-bracket>` would draw this source, in px - the width it needs before it starts\n * scrolling sideways.\n *\n * It answers the question by laying the bracket out for real rather than estimating from the round\n * count, because a double-elimination grid's width is not a multiple of anything: a wider final column,\n * a continue column, and front-padded rounds all move it.\n *\n * Cheap enough to call from a `computed()` over the source, and no more expensive than the render it\n * predicts - but it is not free, so key it on the source rather than on the observed width.\n *\n * @param source The same source you would pass to `<et-bracket>`.\n * @param config The settings the bracket will run with - the object you pass to\n *   `provideBracketConfig`, or the subset you bind as inputs, **including its `layouts`** (the width\n *   of a bracket is the layout's answer). Anything else left out uses `BRACKET_DEFAULTS`.\n *\n * @example\n * const naturalWidth = bracketNaturalWidth(source, {\n *   layouts: [singleEliminationBracketLayout()],\n *   columnWidth: 200,\n * });\n */\nexport const bracketNaturalWidth = <TRoundData, TMatchData>(\n  source: BracketDataSource<TRoundData, TMatchData>,\n  config: BracketConfig<TRoundData, TMatchData> = {},\n) => {\n  const layout = resolveBracketLayout(config.layouts, source.mode);\n  const settings = resolveBracketLayoutSettings(config);\n  const bracketData = createBracket(source, { layout: layout.dataLayout });\n  const components = resolveBracketComponents({}, config, layout.components);\n  const grid = layout.createGrid(bracketData, createBracketGridConfig(settings, layout.dataLayout), components);\n\n  return grid.raw.grid.dimensions.width;\n};\n\n/**\n * Whether the bracket fits into `availableWidth` px without scrolling - the decision behind swapping\n * `<et-bracket>` for [`<et-bracket-rounds-list>`](/components/bracket#responsive-switching) on a narrow\n * screen.\n *\n * Measure a container that does **not** grow with its content (a scroll container's parent, not the\n * scroll container), or the answer is always yes.\n *\n * @example\n * // in a component that hosts one representation or the other\n * private dimensions = signalHostElementDimensions();\n *\n * protected fitsBracket = computed(() =>\n *   bracketFitsWidth(this.source(), BRACKET_CONFIG, this.dimensions().client?.width ?? 0),\n * );\n */\nexport const bracketFitsWidth = <TRoundData, TMatchData>(\n  source: BracketDataSource<TRoundData, TMatchData>,\n  config: BracketConfig<TRoundData, TMatchData>,\n  availableWidth: number,\n  // eslint-disable-next-line max-params -- (source, config, width) reads as the question it answers\n) => bracketNaturalWidth(source, config) <= availableWidth;\n","import { Component, ViewEncapsulation, input, model } from '@angular/core';\nimport { ButtonComponent } from '../button/button.component';\nimport { injectBracketLabels } from './bracket-labels';\n\n/** One entry of an `et-bracket-participants` legend. */\nexport type BracketParticipantsEntry = {\n  id: string;\n  name: string;\n};\n\n/**\n * A participants legend with one pin toggle per participant. Bind `focusedParticipantId` two-way to\n * the same signal as the bracket's, so a toggle pins that participant's journey and a second press\n * drops it.\n *\n * @example\n * <et-bracket-participants [participants]=\"teams()\" [(focusedParticipantId)]=\"focusedTeamId\" />\n * <et-bracket [(focusedParticipantId)]=\"focusedTeamId\" [source]=\"source()\" />\n */\n@Component({\n  selector: 'et-bracket-participants',\n  template: `\n    @for (participant of participants(); track participant.id) {\n      <button\n        [pressed]=\"focusedParticipantId() === participant.id\"\n        (click)=\"togglePin(participant.id)\"\n        class=\"et-bracket-participants-toggle\"\n        et-button\n        size=\"sm\"\n        variant=\"outline\"\n        type=\"button\"\n      >\n        {{ participant.name }}\n      </button>\n    }\n  `,\n  styleUrl: './bracket-participants.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ButtonComponent],\n  host: {\n    class: 'et-bracket-participants',\n    role: 'group',\n    '[attr.aria-label]': 'labels().participantsLegend',\n  },\n})\nexport class BracketParticipantsComponent {\n  protected labels = injectBracketLabels();\n\n  public participants = input.required<readonly BracketParticipantsEntry[]>();\n\n  /** Two-way. The pinned participant, shared with the bracket's own `focusedParticipantId`. */\n  public focusedParticipantId = model<string | null>(null);\n\n  protected togglePin(participantId: string) {\n    this.focusedParticipantId.update((current) => (current === participantId ? null : participantId));\n  }\n}\n","import { booleanAttribute, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ColorThemeInput, injectColorThemes, ProvideColorDirective } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { MatchParticipantComponent, NormalizedMatch, resolveNormalizedMatchSideState } from '../match';\nimport { describeBracketSlot, injectBracketLabels } from './bracket-labels';\nimport { MatchParticipantSide } from './core';\nimport { BracketMatch } from './linked';\n\n/** How the card's note line reads. */\nexport const BRACKET_PICK_CARD_NOTE_TONE = {\n  /** A remark: quiet text under the card, nothing else changes. */\n  MUTED: 'muted',\n  /** Something is wrong with the pick on this card - the card is outlined as well. */\n  INVALID: 'invalid',\n} as const;\n\nexport type BracketPickCardNoteTone = (typeof BRACKET_PICK_CARD_NOTE_TONE)[keyof typeof BRACKET_PICK_CARD_NOTE_TONE];\n\nlet uniqueId = 0;\n\n/**\n * One bracket match as a cell the viewer picks a winner in. Bind the linked `bracketMatch`, your\n * `normalized` view of it and the `pickedSide` you hold; write `(pick)` back to your own state.\n *\n * Both sides have to be resolved before either becomes a control, so a partial matchup, a bye, and a\n * side no pick reaches are non-focusable text rather than a dead button. Three separate things stop a\n * pick, and they are not interchangeable: `locked` (the deadline passed - the picks stay visible and\n * stop changing), `disabled` (this viewer may not pick here at all) and `readonly` (a results view,\n * where the side the match decided against reads as the loser).\n *\n * @example\n * <et-bracket-pick-card\n *   [bracketMatch]=\"bracketMatch()\"\n *   [normalized]=\"normalized()\"\n *   [pickedSide]=\"pickedSide()\"\n *   [note]=\"note()\"\n *   (pick)=\"savePick($event)\"\n * />\n */\n@Component({\n  selector: 'et-bracket-pick-card',\n  templateUrl: './bracket-pick-card.component.html',\n  styleUrl: './bracket-pick-card.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FocusRingDirective, MatchParticipantComponent, NgTemplateOutlet, ProvideColorDirective],\n  host: {\n    class: 'et-bracket-pick-card',\n    '[attr.data-locked]': 'locked() ? \"\" : null',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-readonly]': 'readonly() ? \"\" : null',\n    '[attr.data-note-tone]': 'note() ? noteTone() : null',\n  },\n})\nexport class BracketPickCardComponent<TRoundData = unknown, TMatchData = unknown> {\n  private labels = injectBracketLabels();\n\n  public bracketMatch = input.required<BracketMatch<TRoundData, TMatchData>>();\n  public normalized = input.required<NormalizedMatch>();\n\n  /** Which side the viewer picked, or `null` for no pick yet. */\n  public pickedSide = input<MatchParticipantSide | null>(null);\n\n  /** The deadline for this match has passed: the pick stays visible and stops being changeable. */\n  public locked = input(false, { transform: booleanAttribute });\n\n  /** This viewer may not pick here at all - not signed in, not entered, not their bracket. */\n  public disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * A results view rather than a second way to pick: nothing is selectable, no pick marks are drawn,\n   * and once the match is decided the side it decided against is dimmed.\n   */\n  public readonly = input(false, { transform: booleanAttribute });\n\n  /**\n   * No earlier round is left to predict, so a side no pick of this viewer reaches states that rather\n   * than inviting a prediction that can no longer be made.\n   */\n  public earlierRoundsClosed = input(false, { transform: booleanAttribute });\n\n  public predictedLabel = input('Prediction');\n\n  /**\n   * One line drawn under the card, outside its box, so it never takes height from the card. What it\n   * should say is the app's call - a lock, a stale pick, a pick that followed its participant here.\n   */\n  public note = input<string | null>(null);\n\n  /** How the `note` reads - see {@link BRACKET_PICK_CARD_NOTE_TONE}. @default 'muted' */\n  public noteTone = input<BracketPickCardNoteTone>(BRACKET_PICK_CARD_NOTE_TONE.MUTED);\n\n  public pick = output<MatchParticipantSide>();\n\n  /** Resolved optionally: only an invalid note reads it, so a card in an app with none still works. */\n  private readonly ERROR_COLOR_THEME =\n    injectColorThemes({ optional: true })?.find((theme) => theme.type === 'error') ?? null;\n\n  protected readonly NOTE_ID = `et-bracket-pick-card-note-${uniqueId++}`;\n\n  protected noteColorTheme = computed<ColorThemeInput>(() =>\n    this.noteTone() === BRACKET_PICK_CARD_NOTE_TONE.INVALID ? this.ERROR_COLOR_THEME : null,\n  );\n\n  protected sides = computed(() => {\n    const bracketMatch = this.bracketMatch();\n    const normalized = this.normalized();\n    const labels = this.labels();\n    const isReadonly = this.readonly();\n    const decidedSide = normalized.winnerSide;\n    const sideItems = (['home', 'away'] as const).map((side) => {\n      const state = resolveNormalizedMatchSideState(normalized, side);\n      const source = side === 'home' ? bracketMatch.homeSource : bracketMatch.awaySource;\n\n      return { side, state, source, participant: normalized[side] };\n    });\n    const matchIsSelectable = sideItems.every(\n      ({ participant, source, state }) =>\n        participant !== null && (state === 'occupied' || state === 'predicted') && source?.kind !== 'bye',\n    );\n\n    return sideItems.map(({ side, state, source, participant }) => {\n      const selected = this.pickedSide() === side;\n      const selectable = matchIsSelectable && !this.locked() && !this.disabled() && !isReadonly;\n\n      return {\n        side,\n        state,\n        participant,\n        selected,\n        selectable,\n        showMark: !isReadonly && (selectable || selected),\n        dimmed: isReadonly && decidedSide !== null && decidedSide !== side,\n        emptyLabel:\n          state === 'unresolvable'\n            ? this.earlierRoundsClosed()\n              ? labels.slotNotPredicted\n              : labels.slotPredictEarlierRound\n            : describeBracketSlot(source, labels),\n      };\n    });\n  });\n}\n","<div class=\"et-bracket-pick-card-box\">\n  <div class=\"et-bracket-pick-card-sides\">\n    @for (item of sides(); track item.side) {\n      @if (item.selectable) {\n        <button\n          [attr.aria-pressed]=\"item.selected\"\n          [attr.aria-describedby]=\"note() ? NOTE_ID : null\"\n          [attr.data-participant-id]=\"item.participant?.id ?? null\"\n          [attr.data-side-state]=\"item.state\"\n          (click)=\"pick.emit(item.side)\"\n          class=\"et-bracket-pick-card-side\"\n          etFocusRing\n          type=\"button\"\n        >\n          <ng-container [ngTemplateOutlet]=\"sideBody\" [ngTemplateOutletContext]=\"{ item: item }\" />\n        </button>\n      } @else {\n        <div\n          [attr.data-selected]=\"item.selected ? '' : null\"\n          [attr.data-dimmed]=\"item.dimmed ? '' : null\"\n          [attr.data-participant-id]=\"item.participant?.id ?? null\"\n          [attr.data-side-state]=\"item.state\"\n          class=\"et-bracket-pick-card-side\"\n        >\n          <ng-container [ngTemplateOutlet]=\"sideBody\" [ngTemplateOutletContext]=\"{ item: item }\" />\n        </div>\n      }\n    }\n  </div>\n\n  <ng-content select=\"[etBracketPickCardScore]\" />\n</div>\n\n<!--\n  Absolutely positioned over and under the card rather than after it: the bracket cell's height\n  belongs to the card, and a line in the flow would take that height from it and squash its two rows.\n-->\n@if (note(); as noteText) {\n  <span [etProvideColor]=\"noteColorTheme()\" class=\"et-bracket-pick-card-note-layer\">\n    @if (noteTone() === 'invalid') {\n      <span class=\"et-bracket-pick-card-invalid-outline\" aria-hidden=\"true\"></span>\n    }\n\n    <span [id]=\"NOTE_ID\" class=\"et-bracket-pick-card-note\">{{ noteText }}</span>\n  </span>\n}\n\n<ng-template #sideBody let-item=\"item\">\n  @if (item.participant) {\n    <et-match-participant [participant]=\"item.participant\" compact />\n  } @else {\n    <span class=\"et-bracket-pick-card-empty\">{{ item.emptyLabel }}</span>\n  }\n\n  @if (item.state === 'predicted') {\n    <span class=\"et-bracket-pick-card-predicted\">{{ predictedLabel() }}</span>\n  }\n\n  @if (item.showMark) {\n    <span class=\"et-bracket-pick-card-mark\" aria-hidden=\"true\"></span>\n  }\n</ng-template>\n","import { NgComponentOutlet } from '@angular/common';\nimport { booleanAttribute, Component, computed, input, numberAttribute, Type, ViewEncapsulation } from '@angular/core';\nimport { BRACKET_DATA_LAYOUT } from './core';\nimport { BracketContinueComponent, BracketMatchComponent, BracketRoundHeaderComponent } from '@ethlete/bracket';\nimport { MATCH_CARD_SIZES, MatchCardSize } from '../match';\nimport { BracketDataSource } from './integrations';\nimport { BracketMatch, BracketRound, createBracket } from './linked/bracket';\nimport { BracketRoundSwissGroup } from './linked/swiss';\nimport { BRACKET_CARD_CONTEXT, BracketMatchNormalizer } from './bracket-card-context';\nimport { resolveBracketComponents, usesBracketFinalCard } from './bracket-components';\nimport { injectBracketLabels } from './bracket-labels';\nimport { BracketLayout, resolveBracketLayout } from './bracket-layout';\nimport { BRACKET_DEFAULTS, injectBracketConfig } from './bracket.config';\n\n/**\n * One header and the matches under it: a round, or - in a swiss stage, where a round is drawn as several\n * standings groups - one group of one round.\n */\nexport type BracketRoundsListBlock<TRoundData, TMatchData> = {\n  /** Unique among the rendered blocks; a swiss round contributes one per group. */\n  id: string;\n  round: BracketRound<TRoundData, TMatchData>;\n  swissGroup: BracketRoundSwissGroup<TRoundData, TMatchData> | null;\n  matches: BracketMatch<TRoundData, TMatchData>[];\n};\n\n/**\n * A run of rounds under a shared heading. Double elimination has three - the winners bracket, the losers\n * bracket, and the deciding rounds; a layout without a `listSection` hook is one unnamed section.\n */\nexport type BracketRoundsListSection<TRoundData, TMatchData> = {\n  id: string;\n  /** `null` for the single section of a source that needs no dividing. */\n  name: string | null;\n  blocks: BracketRoundsListBlock<TRoundData, TMatchData>[];\n};\n\n/**\n * The same tournament as [`<et-bracket>`](/components/bracket), drawn as a vertical list of rounds\n * instead of a connected grid - the representation that survives a phone, a blog column, or a\n * match-day page.\n *\n * It takes the same `BracketDataSource`, resolves the same cards through the same\n * `provideBracketConfig`, and reads your matches through the same `matchNormalizer`, so switching\n * between the two representations costs nothing but the `@if`. What it drops is everything a narrow\n * column can't show: the connector lines and the journey highlight that rides on them.\n *\n * **Not a fallback only.** A list of \"who plays whom this round\" is the right thing on a match-day page\n * however much room there is.\n *\n * @example\n * <et-bracket-rounds-list [source]=\"source()\" />\n *\n * @example\n * <!-- one round at a time, driven by your own tabs -->\n * <et-bracket-rounds-list [source]=\"source()\" [selectedRoundId]=\"roundId()\" />\n */\n@Component({\n  selector: 'et-bracket-rounds-list',\n  templateUrl: './bracket-rounds-list.component.html',\n  styleUrl: './bracket-rounds-list.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgComponentOutlet],\n  // The same contract `et-bracket` provides, so the shipped cards work identically in both.\n  providers: [{ provide: BRACKET_CARD_CONTEXT, useExisting: BracketRoundsListComponent }],\n  host: {\n    class: 'et-bracket-rounds-list-host',\n  },\n})\nexport class BracketRoundsListComponent<TRoundData = unknown, TMatchData = unknown> {\n  private config = injectBracketConfig();\n  private labels = injectBracketLabels();\n\n  public source = input.required<BracketDataSource<TRoundData, TMatchData>>();\n\n  /**\n   * Render only this round, by its id in the source. `null` (the default) stacks every round - set it\n   * from a tab bar or a select to page through a long tournament instead.\n   */\n  public selectedRoundId = input<string | null>(null);\n\n  /**\n   * The layouts this instance may draw with, replacing the `provideBracketConfig` list entirely -\n   * see {@link BracketLayout}. The list draws no grid, but it asks the matching layout how to group\n   * (swiss standings groups) and section (double elimination's brackets) the rounds, and which cards\n   * are its defaults. A source nothing matches throws `ET3413`, same as `<et-bracket>`.\n   */\n  public layouts = input<readonly BracketLayout<TRoundData, TMatchData>[] | undefined>(undefined);\n\n  public hideRoundHeaders = input(this.config.hideRoundHeaders ?? BRACKET_DEFAULTS.hideRoundHeaders, {\n    transform: booleanAttribute,\n  });\n\n  public roundHeaderComponent = input<BracketRoundHeaderComponent<TRoundData, TMatchData> | undefined>();\n  public matchComponent = input<BracketMatchComponent<TRoundData, TMatchData> | undefined>();\n  public finalMatchComponent = input<BracketMatchComponent<TRoundData, TMatchData> | undefined>();\n\n  /** Unused here - the list draws no continue element - and accepted so the two hosts take the same bindings. */\n  public continueComponent = input<BracketContinueComponent<TRoundData, TMatchData> | undefined>();\n\n  /**\n   * How to read your match data, for the **default** cards - see {@link BracketMatchNormalizer}. Cards of\n   * your own get the match through their inputs and need none of this.\n   */\n  public matchNormalizer = input<BracketMatchNormalizer<TRoundData, TMatchData> | undefined>();\n\n  /** The `aria-level` the default round headers announce themselves at. @default 3 */\n  public roundHeaderLevel = input(this.config.roundHeaderLevel ?? BRACKET_DEFAULTS.roundHeaderLevel, {\n    transform: numberAttribute,\n  });\n\n  /** @internal The normalizer in effect, read by the default cards through `BRACKET_CARD_CONTEXT`. */\n  public resolvedMatchNormalizer = computed<BracketMatchNormalizer | null>(\n    () => this.matchNormalizer() ?? this.config.matchNormalizer ?? null,\n  );\n\n  /** @internal The heading level in effect, read by the default round headers. */\n  public resolvedRoundHeaderLevel = computed(() => this.roundHeaderLevel());\n\n  /**\n   * @internal The featured card, pinned. A list row is as wide as the page it sits in, and an unpinned\n   * final measuring that would flip to the wide side-by-side arrangement past 560px while every dense\n   * row above it stayed as it was.\n   */\n  public resolvedFinalMatchCardSize = computed<MatchCardSize>(() => MATCH_CARD_SIZES.EXPANDED);\n\n  /**\n   * The layout answering for this source - see the `layouts` input. Resolved even though the list draws\n   * no grid: the grouping/sectioning hooks and the per-layout cards live on it, and a mode the app never\n   * registered should fail the same loud way in both representations.\n   */\n  private resolvedLayout = computed(() =>\n    resolveBracketLayout<TRoundData, TMatchData>(\n      this.layouts() ?? (this.config.layouts as readonly BracketLayout<TRoundData, TMatchData>[] | undefined),\n      this.source().mode,\n    ),\n  );\n\n  /**\n   * Always built left-to-right, whatever the layout's own fold is: a mirrored layout splits a round in\n   * two halves with synthetic ids, which is a statement about where cells sit on a canvas and means\n   * nothing in a list.\n   */\n  public bracketData = computed(() => createBracket(this.source(), { layout: BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT }));\n\n  /** The section heading sits one level above the round headers it covers. */\n  protected sectionHeadingLevel = computed(() => Math.max(1, this.resolvedRoundHeaderLevel() - 1));\n\n  private components = computed(() =>\n    resolveBracketComponents(\n      {\n        roundHeader: this.roundHeaderComponent(),\n        match: this.matchComponent(),\n        finalMatch: this.finalMatchComponent(),\n      },\n      this.config,\n      this.resolvedLayout().components,\n    ),\n  );\n\n  protected sections = computed<BracketRoundsListSection<TRoundData, TMatchData>[]>(() => {\n    const layout = this.resolvedLayout();\n    const bracket = this.bracketData();\n    const swissGroups = layout.listGrouping?.(bracket) ?? null;\n    const selectedRoundId = this.selectedRoundId();\n    const labels = this.labels();\n    const sections = new Map<string, BracketRoundsListSection<TRoundData, TMatchData>>();\n\n    for (const round of bracket.rounds.values()) {\n      if (selectedRoundId !== null && round.id !== selectedRoundId) continue;\n\n      const { id, name } = layout.listSection?.(round, bracket, labels) ?? { id: 'all', name: null };\n      const section = sections.get(id) ?? { id, name, blocks: [] };\n\n      sections.set(id, section);\n\n      // A swiss round is several standings groups drawn under their own headers, the way the grid draws\n      // them; every other round is one block.\n      const groups = swissGroups?.get(round.id)?.groups;\n\n      if (groups) {\n        for (const group of groups.values()) {\n          if (!group.matches.size) continue;\n\n          section.blocks.push({\n            id: `${round.id}--${group.id}`,\n            round,\n            swissGroup: group,\n            matches: Array.from(group.matches.values()),\n          });\n        }\n      } else {\n        section.blocks.push({\n          id: round.id,\n          round,\n          swissGroup: null,\n          matches: Array.from(round.matches.values()),\n        });\n      }\n    }\n\n    return Array.from(sections.values());\n  });\n\n  /**\n   * Which component draws a block's matches - the deciding round gets the final card here just as it does\n   * in the grid.\n   */\n  protected matchComponentFor(block: BracketRoundsListBlock<TRoundData, TMatchData>): Type<unknown> {\n    const components = this.components();\n    const component = usesBracketFinalCard(block.round, this.bracketData()) ? components.finalMatch : components.match;\n\n    return component as Type<unknown>;\n  }\n\n  protected roundHeaderComponentFor(): Type<unknown> {\n    return this.components().roundHeader as Type<unknown>;\n  }\n}\n","@for (section of sections(); track section.id) {\n  <section [attr.data-section]=\"section.id\" class=\"et-bracket-rounds-list-section\">\n    @if (section.name; as name) {\n      <span [attr.aria-level]=\"sectionHeadingLevel()\" class=\"et-bracket-rounds-list-section-name\" role=\"heading\">\n        {{ name }}\n      </span>\n    }\n\n    @for (block of section.blocks; track block.id) {\n      <div class=\"et-bracket-rounds-list-block\">\n        @if (!hideRoundHeaders()) {\n          <div class=\"et-bracket-rounds-list-round-header\">\n            <ng-container\n              *ngComponentOutlet=\"\n                roundHeaderComponentFor();\n                inputs: { bracketRound: block.round, bracketRoundSwissGroup: block.swissGroup }\n              \"\n            />\n          </div>\n        }\n\n        <ul class=\"et-bracket-rounds-list-matches\">\n          @for (match of block.matches; track match.id) {\n            <li class=\"et-bracket-rounds-list-match\">\n              <ng-container\n                *ngComponentOutlet=\"\n                  matchComponentFor(block);\n                  inputs: {\n                    bracketRound: block.round,\n                    bracketMatch: match,\n                    bracketRoundSwissGroup: block.swissGroup,\n                  }\n                \"\n              />\n            </li>\n          }\n        </ul>\n      </div>\n    }\n  </section>\n}\n","import { Signal } from '@angular/core';\nimport { AngularRenderer } from '@ethlete/core';\nimport { Bracket } from './linked';\n\nconst PARTICIPANT_SHORT_ID_PATTERN = /^p\\d+$/;\n\nexport const JOURNEY_HOVER_HOST_CLASS = 'et-bracket-host--journey-hover';\n/** Set on top of the hover class while a journey is pinned, so CSS can dim the rest harder. */\nexport const JOURNEY_FOCUS_HOST_CLASS = 'et-bracket-host--journey-focused';\nexport const JOURNEY_ACTIVE_ELEMENT_CLASS = 'et-bracket-journey-active';\n/** The match a highlighted participant went out in. */\nexport const JOURNEY_ENDPOINT_ELEMENT_CLASS = 'et-bracket-journey-endpoint';\n/** That participant's own row inside it - the one that lost. */\nexport const JOURNEY_ELIMINATED_ELEMENT_CLASS = 'et-bracket-journey-eliminated';\n\n/**\n * The attribute a card puts on each participant's row so hovering it highlights that participant\n * alone rather than both sides of the match. The shipped `et-match-card` sets it; a card of your own\n * opts in by setting it too, and behaves like the whole-match highlight without it.\n */\nexport const BRACKET_PARTICIPANT_ATTRIBUTE = 'data-participant-id';\n\n/** The attribute the bracket puts on each match cell, so a journey can name where it ended. */\nexport const BRACKET_MATCH_ATTRIBUTE = 'data-match-id';\n\n/** What the highlight needs to know about one participant to draw their journey. */\nexport type BracketJourneyParticipant = {\n  id: string;\n  /** The `p<n>` class the grid marks this participant's matches and connectors with. */\n  shortId: string;\n  /** The match their run ended in, or `null` while they are still in the tournament. */\n  eliminatedAtMatchId: string | null;\n};\n\nexport type SetupJourneyHighlightConfig = {\n  host: HTMLElement;\n  renderer: AngularRenderer;\n  /** Read on each pointer event rather than at setup, so new bracket data needs no new listeners. */\n  participants: Signal<BracketJourneyParticipant[]>;\n  /** Called when the bracket itself drops the pin - Escape, or a click on empty bracket space. */\n  onFocusChange: (participantId: string | null) => void;\n};\n\n/** Lets the component push `focusedParticipantId` in, and tear the listeners down. */\nexport type JourneyHighlightController = {\n  /**\n   * Sets the pinned participant and re-marks the journey in effect. Call it after every render, not\n   * from an effect: the marks are classes on cells and connector paths the render just replaced.\n   */\n  setFocused: (participantId: string | null) => void;\n  destroy: () => void;\n};\n\n/**\n * Reduces the linked bracket to what the highlight reads on a pointer event.\n *\n * A participant is out when every match of theirs is decided and the last of them is one they lost -\n * both halves matter: a pending lower-bracket match means the loss above it wasn't the end, and a\n * champion who dropped a set in the winners bracket lost a match without ever going out.\n *\n * @internal\n */\nexport const createBracketJourneyParticipants = <TRoundData, TMatchData>(\n  bracket: Bracket<TRoundData, TMatchData>,\n): BracketJourneyParticipant[] =>\n  Array.from(bracket.participants.values()).map((participant) => {\n    const matches = Array.from(participant.matches.values());\n    const lastMatch = matches[matches.length - 1];\n    const isOut = !!lastMatch && matches.every((match) => !!match.winner) && lastMatch.winner?.id !== participant.id;\n\n    return {\n      id: participant.id,\n      shortId: participant.shortId,\n      eliminatedAtMatchId: isOut ? lastMatch.id : null,\n    };\n  });\n\n/**\n * `:focus-visible` is what tells a tab from a click, but not every engine a test or an old browser runs\n * in can match it - and an unknown pseudo-class throws rather than returning `false`.\n */\nconst isFocusVisible = (element: Element) => {\n  try {\n    return element.matches(':focus-visible');\n  } catch {\n    return false;\n  }\n};\n\nconst getParticipantShortIds = (element: Element | null) =>\n  element ? Array.from(element.classList).filter((cls) => PARTICIPANT_SHORT_ID_PATTERN.test(cls)) : [];\n\nexport const setupJourneyHighlight = (config: SetupJourneyHighlightConfig): JourneyHighlightController => {\n  const { host, renderer, participants, onFocusChange } = config;\n\n  // Every class this module added, with the element it went on: an endpoint match carries a second\n  // class on top of the journey one, so removing by element alone would leave one of them behind.\n  let activeMarks: { element: Element; className: string }[] = [];\n  let renderedKey = '';\n  let renderedPinned = false;\n\n  /** The transient journey under the pointer or the focus ring. */\n  let previewedIds: string[] = [];\n  /**\n   * The pinned one, which outranks it until it is dropped. Held as an id rather than a resolved\n   * participant: a source that does not contain it yet must keep the pin, because the next one may.\n   */\n  let focusedId: string | null = null;\n  let stopListeningForEscape: (() => void) | null = null;\n\n  const clear = () => {\n    for (const { element, className } of activeMarks) {\n      renderer.removeClass(element as HTMLElement, className);\n    }\n\n    renderer.removeClass(host, JOURNEY_HOVER_HOST_CLASS);\n    renderer.removeClass(host, JOURNEY_FOCUS_HOST_CLASS);\n    activeMarks = [];\n    renderedKey = '';\n    renderedPinned = false;\n  };\n\n  const mark = (element: Element, className: string) => {\n    renderer.addClass(element as HTMLElement, className);\n    activeMarks.push({ element, className });\n  };\n\n  /** Crosses out the losing row in the match a participant went out in, and stops there. */\n  const markElimination = (participant: BracketJourneyParticipant) => {\n    if (!participant.eliminatedAtMatchId) return;\n\n    // eslint-disable-next-line ethlete/no-dom-query -- runs outside Angular on pointer events over cells rendered by ngComponentOutlet, which carry no directive token; matching the attribute in JS rather than in the selector keeps an id with a quote in it from breaking the query\n    const cells = Array.from(host.querySelectorAll(`[${BRACKET_MATCH_ATTRIBUTE}]`));\n\n    for (const cell of cells) {\n      if (cell.getAttribute(BRACKET_MATCH_ATTRIBUTE) !== participant.eliminatedAtMatchId) continue;\n\n      mark(cell, JOURNEY_ENDPOINT_ELEMENT_CLASS);\n\n      // eslint-disable-next-line ethlete/no-dom-query -- same: the rows belong to whichever card the consumer plugged in\n      for (const row of Array.from(cell.querySelectorAll(`[${BRACKET_PARTICIPANT_ATTRIBUTE}]`))) {\n        if (row.getAttribute(BRACKET_PARTICIPANT_ATTRIBUTE) === participant.id) {\n          mark(row, JOURNEY_ELIMINATED_ELEMENT_CLASS);\n        }\n      }\n    }\n  };\n\n  /** Draws whichever journey is in effect - the pin if there is one, the preview otherwise. */\n  const render = () => {\n    const known = participants();\n    const journey = (focusedId ? [focusedId] : previewedIds)\n      .map((id) => known.find((participant) => participant.id === id))\n      .filter((participant) => !!participant);\n    const pinned = !!focusedId && journey.length > 0;\n    const key = journey.map((participant) => participant.shortId).join(' ');\n\n    if (key === renderedKey && pinned === renderedPinned) return;\n\n    clear();\n\n    if (!key) return;\n\n    for (const participant of journey) {\n      // eslint-disable-next-line ethlete/no-dom-query -- matches are keyed by dynamically generated short-id classes on ngComponentOutlet hosts and raw SVG nodes, unreachable via a directive token\n      for (const element of Array.from(host.querySelectorAll(`.${participant.shortId}`))) {\n        mark(element, JOURNEY_ACTIVE_ELEMENT_CLASS);\n      }\n\n      markElimination(participant);\n    }\n\n    renderer.addClass(host, JOURNEY_HOVER_HOST_CLASS);\n\n    if (pinned) renderer.addClass(host, JOURNEY_FOCUS_HOST_CLASS);\n\n    renderedKey = key;\n    renderedPinned = pinned;\n  };\n\n  /** The journey a pointer or focus ring on this element is asking about. */\n  const journeyAt = (target: Element | null): BracketJourneyParticipant[] => {\n    const known = participants();\n\n    // A participant's own row wins over the match around it: hovering one side of a card is a question\n    // about that side, and answering it with both journeys is the thing this replaced.\n    // eslint-disable-next-line ethlete/no-dom-query -- pointer hit-testing outside Angular; the row is part of whichever card the consumer plugged in\n    const row = target?.closest(`[${BRACKET_PARTICIPANT_ATTRIBUTE}]`) ?? null;\n    const rowParticipant = row\n      ? known.find((participant) => participant.id === row.getAttribute(BRACKET_PARTICIPANT_ATTRIBUTE))\n      : undefined;\n\n    if (rowParticipant) return [rowParticipant];\n\n    // Card chrome or a connector line: both participants, as before.\n    // eslint-disable-next-line ethlete/no-dom-query -- walks up to the hovered match element or SVG path, which carry no directive token\n    const container = target?.closest('.et-bracket-element--match, path') ?? null;\n\n    return getParticipantShortIds(container)\n      .map((shortId) => known.find((participant) => participant.shortId === shortId))\n      .filter((participant) => !!participant);\n  };\n\n  const preview = (journey: BracketJourneyParticipant[]) => {\n    previewedIds = journey.map((participant) => participant.id);\n    render();\n  };\n\n  const onKeyDown = (event: Event) => {\n    if ((event as KeyboardEvent).key !== 'Escape' || !focusedId) return;\n\n    setFocused(null);\n    onFocusChange(null);\n  };\n\n  const setFocused = (participantId: string | null) => {\n    if (participantId !== focusedId) {\n      focusedId = participantId;\n\n      // On the document, and only while something is pinned. The pin is usually set from a control\n      // *outside* the bracket (a participants list), so focus is rarely inside it - a listener on the host\n      // would mean Escape worked only in the one case where the user had already tabbed into the bracket.\n      stopListeningForEscape?.();\n      stopListeningForEscape = focusedId ? renderer.listen(host.ownerDocument, 'keydown', onKeyDown) : null;\n    }\n\n    // Never through the render guard: the caller is a render pass, and the cells the marks sat on may\n    // now hold other matches - or, for the connectors, be detached nodes replaced by a fresh parse.\n    clear();\n    render();\n  };\n\n  const onMouseOver = (event: Event) => preview(journeyAt(event.target as Element | null));\n\n  const onMouseLeave = () => preview([]);\n\n  // Tabbing to a linked card previews both its journeys - the same affordance a pointer gets, for the\n  // one element in a cell that can hold focus. Never pins: the card's own click is its click.\n  const onFocusIn = (event: Event) => {\n    const target = event.target as Element | null;\n\n    preview(target && isFocusVisible(target) ? journeyAt(target) : []);\n  };\n\n  const onFocusOut = () => preview([]);\n\n  // Clicking past the cards drops the pin. A click on a cell is left alone: it belongs to whatever the\n  // card does with it, and a pin that rides on a card tap is the surprise this feature avoids.\n  const onClick = (event: Event) => {\n    const target = event.target as Element | null;\n\n    // eslint-disable-next-line ethlete/no-dom-query -- hit-testing outside Angular against outlet-rendered cells\n    if (target?.closest('.et-bracket-element--match')) return;\n    if (!focusedId) return;\n\n    setFocused(null);\n    onFocusChange(null);\n  };\n\n  const teardowns = [\n    renderer.listen(host, 'mouseover', onMouseOver),\n    renderer.listen(host, 'mouseleave', onMouseLeave),\n    renderer.listen(host, 'focusin', onFocusIn),\n    renderer.listen(host, 'focusout', onFocusOut),\n    renderer.listen(host, 'click', onClick),\n  ];\n\n  return {\n    setFocused,\n    destroy: () => {\n      for (const teardown of teardowns) teardown();\n\n      stopListeningForEscape?.();\n      stopListeningForEscape = null;\n      clear();\n    },\n  };\n};\n","import { booleanAttribute, numberAttribute } from '@angular/core';\n\n/** What a numeric input accepts before its transform runs - a bound number, or a static attribute. */\nexport type OptionalNumberInput = number | string | undefined | null;\n\n/** Likewise for a flag, where a bare attribute (`hideRoundHeaders`) arrives as an empty string. */\nexport type OptionalBooleanInput = boolean | string | undefined | null;\n\n/**\n * `numberAttribute`, except that an explicit `undefined` stays `undefined` instead of becoming `NaN`.\n *\n * The bracket's layout inputs are overrides on top of a density preset and the shipped defaults, so\n * \"not set\" has to survive as a value the resolver can fall through.\n *\n * @internal\n */\nexport const optionalNumberAttribute = (value: OptionalNumberInput): number | undefined =>\n  value === undefined || value === null ? undefined : numberAttribute(value);\n\n/**\n * Likewise, except that `null` survives as `null`: it is the \"off\" value of a setting whose default is\n * `null` (`thirdPlaceTopOffset`), so an instance has to be able to bind it to opt out of an app-wide\n * number.\n *\n * @internal\n */\nexport const nullableNumberAttribute = (value: OptionalNumberInput): number | null | undefined => {\n  if (value === undefined) return undefined;\n\n  return value === null ? null : numberAttribute(value);\n};\n\n/** `booleanAttribute` with the same treatment - see {@link optionalNumberAttribute}. @internal */\nexport const optionalBooleanAttribute = (value: OptionalBooleanInput): boolean | undefined =>\n  value === undefined || value === null ? undefined : booleanAttribute(value);\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n  afterRenderEffect,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  model,\n  NgZone,\n  numberAttribute,\n  signal,\n  Type,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { createComponentId, injectRenderer, injectStyleManager } from '@ethlete/core';\nimport {\n  BracketContinueComponent,\n  FinalizedBracketElement,\n  BracketMatchComponent,\n  BracketRoundHeaderComponent,\n} from '@ethlete/bracket';\nimport { BracketDataSource } from './integrations';\nimport { MATCH_CARD_SIZES, MatchCardSize } from '../match';\nimport {\n  createBracketJourneyParticipants,\n  JourneyHighlightController,\n  setupJourneyHighlight as setupJourneyHighlightListeners,\n} from './journey-highlight';\nimport { createBracket } from './linked/bracket';\nimport { BracketSwissColors } from './linked/swiss';\nimport { BRACKET_CARD_CONTEXT, BracketMatchNormalizer } from './bracket-card-context';\nimport { resolveBracketComponents } from './bracket-components';\nimport { BracketDensity } from './bracket-density';\nimport { createBracketGridConfig, resolveBracketLayoutSettings } from './bracket-grid';\nimport {\n  nullableNumberAttribute,\n  OptionalBooleanInput,\n  optionalBooleanAttribute,\n  OptionalNumberInput,\n  optionalNumberAttribute,\n} from './bracket-input-transforms';\nimport { BracketLayout, resolveBracketLayout } from './bracket-layout';\nimport { BRACKET_DEFAULTS, BracketRoundHeaderAlign, injectBracketConfig } from './bracket.config';\n\n@Component({\n  selector: 'et-bracket',\n  templateUrl: './bracket.component.html',\n  styleUrl: './bracket.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgComponentOutlet],\n  // What the default cards read: this component resolves each value from its own input first and the\n  // app-wide config second, so a card never has to know where a setting came from.\n  providers: [{ provide: BRACKET_CARD_CONTEXT, useExisting: BracketComponent }],\n  host: {\n    class: 'et-bracket-host',\n  },\n})\nexport class BracketComponent<TRoundData = unknown, TMatchData = unknown> {\n  private config = injectBracketConfig();\n\n  public source = input.required<BracketDataSource<TRoundData, TMatchData>>();\n\n  // Every layout input is an *override*, left `undefined` when unbound: what draws is resolved in\n  // `settings`, where an unset input falls through to the density preset and then to the shipped\n  // default. Binding `undefined` deliberately is therefore the same as not binding at all.\n  public columnWidth = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public matchHeight = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public finalMatchHeight = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public finalColumnWidth = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public roundHeaderHeight = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public roundHeaderGap = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public columnGap = input<number | undefined, OptionalNumberInput>(undefined, { transform: optionalNumberAttribute });\n  public rowGap = input<number | undefined, OptionalNumberInput>(undefined, { transform: optionalNumberAttribute });\n  public rowRoundGap = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public rowSpanRoundId = input<string | null | undefined>(undefined);\n  public thirdPlaceTopOffset = input<number | null | undefined, OptionalNumberInput>(undefined, {\n    transform: nullableNumberAttribute,\n  });\n  public finalRoundHeaderGap = input<number | null | undefined, OptionalNumberInput>(undefined, {\n    transform: nullableNumberAttribute,\n  });\n  public alignRoundHeaders = input<BracketRoundHeaderAlign | undefined>(undefined);\n\n  /** Move this round to the inline start without changing the bracket's vertical density. */\n  public focusRoundId = input<string | null>(null);\n\n  /**\n   * Room kept to the inline start of `focusRoundId`, in px - the gutter a one-round panel puts its\n   * navigation in, and that a card badge may straddle the card's edge into.\n   */\n  public focusInset = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public lineStartingCurveAmount = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public lineEndingCurveAmount = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public lineWidth = input<number | undefined, OptionalNumberInput>(undefined, { transform: optionalNumberAttribute });\n  public lineDashArray = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public lineDashOffset = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public disableJourneyHighlight = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n    transform: optionalBooleanAttribute,\n  });\n  public swissGroupPadding = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public swissGroupBorderRadius = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public swissColors = input<BracketSwissColors | undefined>(undefined);\n\n  /**\n   * The layouts this instance may draw with, replacing the `provideBracketConfig` list entirely -\n   * see {@link BracketLayout}. The first entry whose `mode` matches the source draws it; a source\n   * nothing matches throws `ET3413`.\n   *\n   * @example\n   * <et-bracket [layouts]=\"layouts\" [source]=\"source()\" />\n   */\n  public layouts = input<readonly BracketLayout<TRoundData, TMatchData>[] | undefined>(undefined);\n\n  /**\n   * The size everything is drawn at. `'compact'` is roughly two thirds of the default - a column narrow\n   * enough that the cards inside it drop to codes and a score, which is what fits a full bracket into an\n   * article column. Anything you set yourself still wins over it.\n   */\n  public density = input<BracketDensity | undefined>(undefined);\n\n  public hideRoundHeaders = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n    transform: optionalBooleanAttribute,\n  });\n\n  public showContinueElement = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n    transform: optionalBooleanAttribute,\n  });\n  public continueColumnWidth = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public continueElementHeight = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n  public continueLineDashArray = input<number | undefined, OptionalNumberInput>(undefined, {\n    transform: optionalNumberAttribute,\n  });\n\n  public roundHeaderComponent = input<BracketRoundHeaderComponent<TRoundData, TMatchData> | undefined>();\n  public matchComponent = input<BracketMatchComponent<TRoundData, TMatchData> | undefined>();\n  public finalMatchComponent = input<BracketMatchComponent<TRoundData, TMatchData> | undefined>();\n  public continueComponent = input<BracketContinueComponent<TRoundData, TMatchData> | undefined>();\n\n  /**\n   * How to read your match data, for the **default** cards - see {@link BracketMatchNormalizer}. Cards of\n   * your own get the match through their inputs and need none of this.\n   */\n  public matchNormalizer = input<BracketMatchNormalizer<TRoundData, TMatchData> | undefined>();\n\n  /** The `aria-level` the default round headers announce themselves at. @default 3 */\n  public roundHeaderLevel = input(this.config.roundHeaderLevel ?? BRACKET_DEFAULTS.roundHeaderLevel, {\n    transform: numberAttribute,\n  });\n\n  /**\n   * The participant whose journey stays lit, by their id in the source - the pinned counterpart to the\n   * hover highlight, and the only one touch and keyboard users get.\n   *\n   * Two-way, and **driven from outside**: a participants list beside the bracket, a query param, a\n   * search box. The bracket never pins on a card tap - a card's click belongs to the card - but it does\n   * drop the pin when <kbd>Escape</kbd> is pressed inside it or a click lands past the cells, and writes\n   * the `null` back through this model.\n   *\n   * @example\n   * <et-bracket [(focusedParticipantId)]=\"focusedTeamId\" [source]=\"source()\" />\n   */\n  public focusedParticipantId = model<string | null>(null);\n\n  /** @internal The normalizer in effect, read by the default cards through `BRACKET_CARD_CONTEXT`. */\n  public resolvedMatchNormalizer = computed<BracketMatchNormalizer | null>(\n    () => this.matchNormalizer() ?? this.config.matchNormalizer ?? null,\n  );\n\n  /** @internal The heading level in effect, read by the default round headers. */\n  public resolvedRoundHeaderLevel = computed(() => this.roundHeaderLevel());\n\n  /**\n   * @internal Left to the card: a grid cell's width is this component's decision, and `finalColumnWidth`\n   * is how a consumer asks for a smaller final.\n   */\n  public resolvedFinalMatchCardSize = computed<MatchCardSize>(() => MATCH_CARD_SIZES.AUTO);\n\n  private elementId = createComponentId('et-bracket');\n\n  private journeyController = signal<JourneyHighlightController | null>(null);\n\n  /**\n   * Every layout value in effect: this component's inputs first, `provideBracketConfig` second, the\n   * density preset third, the shipped defaults last. Read this rather than the inputs - an input alone\n   * is only half the answer.\n   */\n  public settings = computed(() =>\n    resolveBracketLayoutSettings({\n      ...this.config,\n      density: this.density() ?? this.config.density,\n      columnWidth: this.columnWidth() ?? this.config.columnWidth,\n      matchHeight: this.matchHeight() ?? this.config.matchHeight,\n      finalMatchHeight: this.finalMatchHeight() ?? this.config.finalMatchHeight,\n      finalColumnWidth: this.finalColumnWidth() ?? this.config.finalColumnWidth,\n      roundHeaderHeight: this.roundHeaderHeight() ?? this.config.roundHeaderHeight,\n      roundHeaderGap: this.roundHeaderGap() ?? this.config.roundHeaderGap,\n      columnGap: this.columnGap() ?? this.config.columnGap,\n      rowGap: this.rowGap() ?? this.config.rowGap,\n      rowRoundGap: this.rowRoundGap() ?? this.config.rowRoundGap,\n      rowSpanRoundId: this.rowSpanRoundId() === undefined ? this.config.rowSpanRoundId : this.rowSpanRoundId(),\n      thirdPlaceTopOffset:\n        this.thirdPlaceTopOffset() === undefined ? this.config.thirdPlaceTopOffset : this.thirdPlaceTopOffset(),\n      finalRoundHeaderGap:\n        this.finalRoundHeaderGap() === undefined ? this.config.finalRoundHeaderGap : this.finalRoundHeaderGap(),\n      alignRoundHeaders: this.alignRoundHeaders() ?? this.config.alignRoundHeaders,\n      focusInset: this.focusInset() ?? this.config.focusInset,\n      lineStartingCurveAmount: this.lineStartingCurveAmount() ?? this.config.lineStartingCurveAmount,\n      lineEndingCurveAmount: this.lineEndingCurveAmount() ?? this.config.lineEndingCurveAmount,\n      lineWidth: this.lineWidth() ?? this.config.lineWidth,\n      lineDashArray: this.lineDashArray() ?? this.config.lineDashArray,\n      lineDashOffset: this.lineDashOffset() ?? this.config.lineDashOffset,\n      disableJourneyHighlight: this.disableJourneyHighlight() ?? this.config.disableJourneyHighlight,\n      swissGroupPadding: this.swissGroupPadding() ?? this.config.swissGroupPadding,\n      swissGroupBorderRadius: this.swissGroupBorderRadius() ?? this.config.swissGroupBorderRadius,\n      hideRoundHeaders: this.hideRoundHeaders() ?? this.config.hideRoundHeaders,\n      showContinueElement: this.showContinueElement() ?? this.config.showContinueElement,\n      continueColumnWidth: this.continueColumnWidth() ?? this.config.continueColumnWidth,\n      continueElementHeight: this.continueElementHeight() ?? this.config.continueElementHeight,\n      continueLineDashArray: this.continueLineDashArray() ?? this.config.continueLineDashArray,\n      roundHeaderLevel: this.roundHeaderLevel(),\n    }),\n  );\n\n  /**\n   * The layout drawing this source: the first entry of the `layouts` input - or, when that is unbound,\n   * of `provideBracketConfig` - whose `mode` matches. Throws `ET3413` when nothing matches.\n   */\n  private resolvedLayout = computed(() =>\n    resolveBracketLayout<TRoundData, TMatchData>(\n      this.layouts() ?? (this.config.layouts as readonly BracketLayout<TRoundData, TMatchData>[] | undefined),\n      this.source().mode,\n    ),\n  );\n\n  public bracketData = computed(() => createBracket(this.source(), { layout: this.resolvedLayout().dataLayout }));\n\n  private journeyParticipants = computed(() => createBracketJourneyParticipants(this.bracketData()));\n\n  public bracketGrid = computed(() => {\n    const layout = this.resolvedLayout();\n    const bracketData = this.bracketData();\n    const options = createBracketGridConfig(this.settings(), layout.dataLayout);\n\n    const components = resolveBracketComponents(\n      {\n        roundHeader: this.roundHeaderComponent(),\n        match: this.matchComponent(),\n        finalMatch: this.finalMatchComponent(),\n        continue: this.continueComponent(),\n      },\n      this.config,\n      layout.components,\n    );\n\n    return layout.createGrid(bracketData, options, components);\n  });\n\n  /** The connectors, group borders and gradients the active layout draws for this grid. */\n  public drawing = computed(() =>\n    this.resolvedLayout().drawEdges({\n      grid: this.bracketGrid(),\n      settings: this.settings(),\n      idPrefix: this.elementId,\n      colors: this.swissColors(),\n    }),\n  );\n\n  protected focusRoundOffset = computed(() => {\n    const focusRoundId = this.focusRoundId();\n\n    if (!focusRoundId) return 0;\n\n    const column = this.bracketGrid().columns.find((candidate) =>\n      candidate.elements.some(\n        (element) =>\n          'round' in element &&\n          (element.round.id === focusRoundId || element.round.id.startsWith(`${focusRoundId}--half-`)),\n      ),\n    );\n\n    return (column?.dimensions.left ?? 0) - this.settings().focusInset;\n  });\n\n  constructor() {\n    this.setupJourneyHighlight();\n    this.setupLayoutStyles();\n  }\n\n  /**\n   * Narrows a finalized element's component (a union of differently-shaped `Type`s) to the\n   * `Type<unknown>` that `NgComponentOutlet` expects, keeping the cast out of the template.\n   */\n  protected componentFor(element: FinalizedBracketElement<TRoundData, TMatchData>): Type<unknown> {\n    return element.component as Type<unknown>;\n  }\n\n  /**\n   * CSS an optional layout brings along (the swiss group border) mounts app-wide on first use - the\n   * style manager dedupes by type, so a page of swiss brackets injects one `<style>`.\n   */\n  private setupLayoutStyles() {\n    const styleManager = injectStyleManager();\n\n    effect(() => {\n      for (const styles of this.resolvedLayout().styles ?? []) {\n        styleManager.mount(styles);\n      }\n    });\n  }\n\n  private setupJourneyHighlight() {\n    const renderer = injectRenderer();\n    const ngZone = inject(NgZone);\n    const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    const host = elementRef.nativeElement;\n\n    const journeyHighlightDisabled = computed(() => this.settings().disableJourneyHighlight);\n\n    effect((onCleanup) => {\n      if (journeyHighlightDisabled()) {\n        this.journeyController.set(null);\n\n        return;\n      }\n\n      const controller = ngZone.runOutsideAngular(() =>\n        setupJourneyHighlightListeners({\n          host,\n          renderer,\n          participants: this.journeyParticipants,\n          // The bracket only ever *drops* the pin (Escape, a click past the cards), and does it from\n          // outside Angular - so the write back into the model has to re-enter.\n          onFocusChange: (participantId) => ngZone.run(() => this.focusedParticipantId.set(participantId)),\n        }),\n      );\n\n      this.journeyController.set(controller);\n\n      // via onCleanup, not a returned function: effect() ignores what the callback returns, so the\n      // listeners would stack up on every re-run and outlive the component.\n      onCleanup(() => controller.destroy());\n    });\n\n    // After render, not in an effect: the marks are classes on cells the grid's `@for` re-uses and on\n    // connector paths a redraw re-parses, so they have to be re-applied once the new nodes exist - an\n    // effect runs before the view is refreshed and would mark the old drawing. Reading the grid is what\n    // makes a new source (or new settings) re-run this at all.\n    afterRenderEffect(() => {\n      this.bracketGrid();\n      this.journeyController()?.setFocused(this.focusedParticipantId());\n    });\n  }\n}\n","@if (bracketGrid(); as grid) {\n  <section\n    [style.width.px]=\"grid.raw.grid.dimensions.width\"\n    [style.height.px]=\"grid.raw.grid.dimensions.height\"\n    [style.transform]=\"'translateX(' + -focusRoundOffset() + 'px)'\"\n    class=\"et-bracket et-bracket--{{ bracketData().mode }}\"\n  >\n    @let drawn = drawing();\n\n    <svg class=\"et-bracket-svg\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      @if (drawn.gradients.length) {\n        <defs>\n          @for (gradient of drawn.gradients; track gradient.id) {\n            <linearGradient\n              [attr.id]=\"gradient.id\"\n              [attr.x1]=\"gradient.fromX\"\n              [attr.x2]=\"gradient.toX\"\n              gradientUnits=\"userSpaceOnUse\"\n              y1=\"0\"\n              y2=\"0\"\n            >\n              @for (stop of gradient.stops; track $index) {\n                <stop [attr.offset]=\"stop.offset\" [attr.stop-color]=\"stop.color\" />\n              }\n            </linearGradient>\n          }\n        </defs>\n      }\n\n      @for (rect of drawn.rects; track rect.id) {\n        <rect\n          [attr.x]=\"rect.x\"\n          [attr.y]=\"rect.y\"\n          [attr.width]=\"rect.width\"\n          [attr.height]=\"rect.height\"\n          [attr.rx]=\"rect.radius\"\n          [attr.stroke]=\"rect.stroke\"\n          [attr.stroke-width]=\"rect.strokeWidth\"\n          [attr.class]=\"rect.cssClass\"\n          fill=\"none\"\n        />\n      }\n\n      <!-- Both: the attribute is what draws the line, and the CSS `d` property is the only one a\n           transition can animate. A browser without it keeps the attribute and skips the animation. -->\n      @for (edge of drawn.edges; track edge.id) {\n        <path\n          [attr.d]=\"edge.d\"\n          [style.d]=\"edge.cssPath\"\n          [attr.stroke]=\"edge.stroke\"\n          [attr.stroke-width]=\"edge.strokeWidth\"\n          [attr.stroke-dasharray]=\"edge.dashArray\"\n          [attr.stroke-dashoffset]=\"edge.dashOffset\"\n          [attr.class]=\"edge.cssClass\"\n          fill=\"none\"\n        />\n      }\n    </svg>\n\n    @for (round of grid.columns; track $index) {\n      <ul\n        [style.width.px]=\"round.dimensions.width\"\n        [style.height.px]=\"round.dimensions.height\"\n        [style.transform]=\"'translate(' + round.dimensions.left + 'px, ' + round.dimensions.top + 'px)'\"\n        class=\"et-bracket-round\"\n      >\n        @for (element of round.elements; track $index) {\n          @let inputs =\n            element.type === 'header'\n              ? { bracketRound: element.round, bracketRoundSwissGroup: element.roundSwissGroup }\n              : element.type === 'continue'\n                ? { bracketMatches: element.matches }\n                : {\n                    bracketRound: element.round,\n                    bracketMatch: element.match,\n                    bracketRoundSwissGroup: element.roundSwissGroup,\n                  };\n\n          @let highlightClass = element.type === 'match' ? element.classes : '';\n\n          <!-- The cell names its match so a journey can say where it ended — see journey-highlight.ts. -->\n          @let matchId = element.type === 'match' ? element.match.id : null;\n\n          <!-- Moved with `translate`, not with `top`/`left`: a squeeze moves every cell of every round at\n               once, as one transition, without the page laying out again per frame. -->\n          @let inlineOffset = element.dimensions.left - round.dimensions.left;\n          @let blockOffset = element.dimensions.top - round.dimensions.top;\n\n          <li\n            [attr.data-match-id]=\"matchId\"\n            [attr.data-align]=\"element.type === 'header' ? settings().alignRoundHeaders : null\"\n            [style.width.px]=\"element.dimensions.width\"\n            [style.height.px]=\"element.dimensions.height\"\n            [style.transform]=\"'translate(' + inlineOffset + 'px, ' + blockOffset + 'px)'\"\n            class=\"et-bracket-element et-bracket-element--{{ element.type }} {{ highlightClass }}\"\n          >\n            <ng-container *ngComponentOutlet=\"componentFor(element); inputs: inputs\" />\n          </li>\n        }\n      </ul>\n    }\n  </section>\n}\n","import { BracketParticipantsComponent } from './bracket-participants.component';\nimport { BracketPickCardComponent } from './bracket-pick-card.component';\nimport { BracketRoundsListComponent } from './bracket-rounds-list.component';\nimport { BracketComponent } from './bracket.component';\n\nexport const BRACKET_IMPORTS = [\n  BracketComponent,\n  BracketParticipantsComponent,\n  BracketPickCardComponent,\n  BracketRoundsListComponent,\n] as const;\n","import { BracketDrawEdgesContext } from '../bracket-layout';\nimport { drawMan } from '@ethlete/bracket';\n\n/**\n * The connector drawing every elimination layout shares - single and double, folded or not - mapping\n * the host's resolved settings onto {@link drawMan}'s dimensions.\n *\n * @internal\n */\nexport const drawEliminationEdges = <TRoundData, TMatchData>(\n  context: BracketDrawEdgesContext<TRoundData, TMatchData>,\n) => {\n  const { grid, settings } = context;\n\n  return drawMan({\n    columnGap: settings.columnGap,\n    upperLowerGap: settings.rowRoundGap,\n    columnWidth: settings.columnWidth,\n    matchHeight: settings.matchHeight,\n    roundHeaderHeight: settings.hideRoundHeaders ? 0 : settings.roundHeaderHeight,\n    rowGap: settings.rowGap,\n    bracketGrid: grid,\n    curve: {\n      lineEndingCurveAmount: settings.lineEndingCurveAmount,\n      lineStartingCurveAmount: settings.lineStartingCurveAmount,\n    },\n    path: {\n      dashArray: settings.lineDashArray,\n      dashOffset: settings.lineDashOffset,\n      width: settings.lineWidth,\n    },\n    continuePath: {\n      dashArray: settings.continueLineDashArray,\n      dashOffset: settings.lineDashOffset,\n      width: settings.lineWidth,\n    },\n  });\n};\n","import { BracketLayout, BracketListSection } from '../bracket-layout';\nimport { BracketLabels } from '../bracket-labels';\nimport { BRACKET_DATA_LAYOUT } from '../core/layout';\nimport { COMMON_BRACKET_ROUND_TYPE, DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE } from '../core/round';\nimport { TOURNAMENT_MODE } from '../core/tournament';\nimport { createDoubleEliminationGrid, createStackedDoubleEliminationGrid } from '@ethlete/bracket';\nimport { BracketRound } from '../linked/bracket';\nimport { drawEliminationEdges } from './draw-elimination-edges';\n\n/**\n * Where a double elimination round sits in `<et-bracket-rounds-list>`: the winners bracket, the losers\n * bracket, or the deciding rounds.\n */\nconst doubleEliminationListSection = <TRoundData, TMatchData>(\n  round: BracketRound<TRoundData, TMatchData>,\n  labels: BracketLabels,\n): BracketListSection => {\n  switch (round.type) {\n    case DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.UPPER_BRACKET:\n      return { id: 'upper', name: labels.upperBracketSection };\n\n    case DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.LOWER_BRACKET:\n      return { id: 'lower', name: labels.lowerBracketSection };\n\n    // The grand final, the bracket reset and the third-place playoff - everything a double elimination\n    // source has left once the two brackets are accounted for.\n    case COMMON_BRACKET_ROUND_TYPE.FINAL:\n    case DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE.REVERSE_FINAL:\n    case COMMON_BRACKET_ROUND_TYPE.THIRD_PLACE:\n    default:\n      return { id: 'finals', name: labels.finalsSection };\n  }\n};\n\n/**\n * Draws a double elimination source left to right - upper bracket over lower bracket, converging on the\n * grand final (and the bracket reset, when the source has one). What a `mode` of `'double-elimination'`\n * renders once this is registered.\n *\n * @example\n * provideBracketConfig({ layouts: [doubleEliminationBracketLayout()] });\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const doubleEliminationBracketLayout = <TRoundData = any, TMatchData = any>(): BracketLayout<\n  TRoundData,\n  TMatchData\n> => ({\n  name: 'double-elimination',\n  mode: TOURNAMENT_MODE.DOUBLE_ELIMINATION,\n  dataLayout: BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT,\n  createGrid: createDoubleEliminationGrid,\n  drawEdges: drawEliminationEdges,\n  // eslint-disable-next-line max-params -- the contract's (round, bracket, labels) shape\n  listSection: (round, _bracket, labels) => doubleEliminationListSection(round, labels),\n});\n\n/**\n * The mirrored variant of {@link doubleEliminationBracketLayout}: two stacked blocks, the winners\n * bracket above the losers bracket, each folded around its own centre. A block's deciding rounds - the\n * grand final and the bracket reset above, the third-place playoff below - hang vertically under the\n * round its two halves converge on.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const mirroredDoubleEliminationBracketLayout = <TRoundData = any, TMatchData = any>(): BracketLayout<\n  TRoundData,\n  TMatchData\n> => ({\n  name: 'double-elimination-mirrored',\n  mode: TOURNAMENT_MODE.DOUBLE_ELIMINATION,\n  dataLayout: BRACKET_DATA_LAYOUT.MIRRORED,\n  createGrid: createStackedDoubleEliminationGrid,\n  drawEdges: drawEliminationEdges,\n  // eslint-disable-next-line max-params -- the contract's (round, bracket, labels) shape\n  listSection: (round, _bracket, labels) => doubleEliminationListSection(round, labels),\n});\n","import { BracketLayout } from '../bracket-layout';\nimport { BRACKET_DATA_LAYOUT } from '../core/layout';\nimport { TOURNAMENT_MODE } from '../core/tournament';\nimport { createSingleEliminationGrid } from '@ethlete/bracket';\nimport { drawEliminationEdges } from './draw-elimination-edges';\n\n/**\n * Draws a single elimination source left to right, converging on the final - what a `mode` of\n * `'single-elimination'` renders once this is registered.\n *\n * @example\n * provideBracketConfig({ layouts: [singleEliminationBracketLayout()] });\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const singleEliminationBracketLayout = <TRoundData = any, TMatchData = any>(): BracketLayout<\n  TRoundData,\n  TMatchData\n> => ({\n  name: 'single-elimination',\n  mode: TOURNAMENT_MODE.SINGLE_ELIMINATION,\n  dataLayout: BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT,\n  createGrid: createSingleEliminationGrid,\n  drawEdges: drawEliminationEdges,\n});\n\n/**\n * The mirrored variant of {@link singleEliminationBracketLayout}: the bracket folds in half up to the\n * first round it cannot halve, which - with every round after it - is drawn whole in the middle. Half\n * the height, roughly double the width, the shape a poster or a broadcast graphic wants.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const mirroredSingleEliminationBracketLayout = <TRoundData = any, TMatchData = any>(): BracketLayout<\n  TRoundData,\n  TMatchData\n> => ({\n  name: 'single-elimination-mirrored',\n  mode: TOURNAMENT_MODE.SINGLE_ELIMINATION,\n  dataLayout: BRACKET_DATA_LAYOUT.MIRRORED,\n  createGrid: createSingleEliminationGrid,\n  drawEdges: drawEliminationEdges,\n});\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The swiss group border color, carried by a styles-only component so only apps that register\n * `swissBracketLayout()` inject it - mounted once, app-wide, via the style manager.\n *\n * @internal\n */\n@Component({\n  selector: 'et-bracket-swiss-styles',\n  template: '',\n  styleUrl: './bracket-swiss-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class BracketSwissStylesComponent {}\n","import { BracketLayout } from '../../bracket-layout';\nimport { BRACKET_DATA_LAYOUT } from '../../core/layout';\nimport { TOURNAMENT_MODE } from '../../core/tournament';\nimport { BracketMatchComponent, BracketRoundHeaderComponent, createSwissGrid, drawSwissMan } from '@ethlete/bracket';\nimport { BracketSwissColors, generateBracketRoundSwissGroupMaps } from '../../linked/swiss';\nimport { BracketSwissStylesComponent } from './bracket-swiss-styles.component';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SwissBracketLayoutOptions<TRoundData = any, TMatchData = any> = {\n  /**\n   * Colors for the group borders and connection lines - see {@link BracketSwissColors}. A host's\n   * `swissColors` input still wins over this, per instance.\n   */\n  colors?: BracketSwissColors;\n\n  /**\n   * Cards drawn for swiss sources only, sitting between a host's inputs and the app-wide\n   * `provideBracketConfig` components - a swiss stage often wants a denser card than the\n   * elimination stage next to it.\n   */\n  matchComponent?: BracketMatchComponent<TRoundData, TMatchData>;\n  roundHeaderComponent?: BracketRoundHeaderComponent<TRoundData, TMatchData>;\n};\n\n/**\n * Draws a swiss stage (with elimination) as standings groups per round - winners climbing, losers\n * sinking, group-to-group connection lines instead of match-to-match. What a `mode` of\n * `'swiss-with-elimination'` renders once this is registered.\n *\n * @example\n * provideBracketConfig({ layouts: [swissBracketLayout()] });\n *\n * @example\n * swissBracketLayout({ colors: { positive: 'var(--my-win-color)' } })\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const swissBracketLayout = <TRoundData = any, TMatchData = any>(\n  options: SwissBracketLayoutOptions<TRoundData, TMatchData> = {},\n): BracketLayout<TRoundData, TMatchData> => ({\n  name: 'swiss-with-elimination',\n  mode: TOURNAMENT_MODE.SWISS_WITH_ELIMINATION,\n  dataLayout: BRACKET_DATA_LAYOUT.LEFT_TO_RIGHT,\n  createGrid: createSwissGrid,\n  drawEdges: (context) =>\n    drawSwissMan({\n      bracketGrid: context.grid,\n      curve: {\n        lineStartingCurveAmount: context.settings.lineStartingCurveAmount,\n      },\n      path: {\n        dashArray: context.settings.lineDashArray,\n        dashOffset: context.settings.lineDashOffset,\n        width: context.settings.lineWidth,\n      },\n      groupBorder: {\n        padding: context.settings.swissGroupPadding,\n        radius: context.settings.swissGroupBorderRadius,\n        width: context.settings.lineWidth,\n      },\n      colors: context.colors ?? options.colors,\n      idPrefix: context.idPrefix,\n    }),\n  listGrouping: generateBracketRoundSwissGroupMaps,\n  components: {\n    match: options.matchComponent,\n    roundHeader: options.roundHeaderComponent,\n  },\n  styles: [BracketSwissStylesComponent],\n});\n","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { createCanAnimateSignal, ProvideColorDirective } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { SpinnerComponent } from '../loader';\nimport { ButtonStylesDirective } from './button-styles.directive';\nimport {\n  BUTTON_ICON_ALIGNMENTS,\n  BUTTON_SIZES,\n  BUTTON_SPINNER_CONFIG,\n  BUTTON_VARIANTS,\n  ButtonIconAlignment,\n  ButtonSize,\n} from './button.component';\nimport { ButtonDirective } from './headless';\n\ntype FabVariant = (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS];\n\n@Component({\n  selector: '[et-fab]',\n  template: `\n    @if (iconAlignment() === 'start') {\n      <div class=\"et-fab-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n    <div class=\"et-fab-contents\">\n      <div class=\"et-fab-contents-inner\"><ng-content /></div>\n    </div>\n    @if (iconAlignment() === 'end') {\n      <div class=\"et-fab-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    @if (buttonDir.loading()) {\n      <div class=\"et-button-loader\" aria-hidden=\"true\">\n        <et-spinner\n          [diameter]=\"spinnerConfig().diameter\"\n          [strokeWidth]=\"spinnerConfig().strokeWidth\"\n          [determinate]=\"buttonDir.hasProgress()\"\n          [track]=\"buttonDir.hasProgress()\"\n          [value]=\"buttonDir.progress() ?? 0\"\n          class=\"et-button-loader-spinner\"\n        />\n      </div>\n    }\n\n    <ng-template #iconTpl>\n      <ng-content select=\"[etIcon]\" />\n    </ng-template>\n  `,\n  styleUrl: './fab.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet, SpinnerComponent],\n  hostDirectives: [\n    {\n      directive: ButtonDirective,\n      inputs: ['disabled', 'loading', 'progress', 'type'],\n    },\n    ButtonStylesDirective,\n    FocusRingDirective,\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-fab',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-expanded]': 'expandedAttr()',\n    '[attr.data-icon-alignment]': 'iconAlignment()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class FabComponent {\n  protected buttonDir = inject(ButtonDirective);\n\n  public variant = input<FabVariant>(BUTTON_VARIANTS.FILLED);\n  public size = input<ButtonSize>(BUTTON_SIZES.MD);\n  public expanded = input(false, { transform: booleanAttribute });\n  public iconAlignment = input<ButtonIconAlignment>(BUTTON_ICON_ALIGNMENTS.START);\n\n  public canAnimate = createCanAnimateSignal();\n\n  public spinnerConfig = computed(() => BUTTON_SPINNER_CONFIG[this.size()]);\n\n  public expandedAttr = computed(() => (this.expanded() ? true : null));\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { SplitButtonDirective } from './headless';\n\n@Component({\n  selector: 'et-split-button',\n  template: `<ng-content />`,\n  styleUrl: './split-button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [SplitButtonDirective],\n  host: {\n    class: 'et-split-button',\n  },\n})\nexport class SplitButtonComponent {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal, ProvideColorDirective } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { SpinnerComponent } from '../loader';\nimport { ButtonStylesDirective } from './button-styles.directive';\nimport {\n  BUTTON_ICON_ALIGNMENTS,\n  BUTTON_SIZES,\n  BUTTON_SPINNER_CONFIG,\n  ButtonIconAlignment,\n  ButtonSize,\n} from './button.component';\nimport { ButtonDirective } from './headless';\n\n@Component({\n  selector: '[et-text-button]',\n  template: `\n    @if (iconAlignment() === 'start') {\n      <div class=\"et-text-button-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    <div class=\"et-text-button-contents\">\n      <ng-content />\n    </div>\n\n    @if (iconAlignment() === 'end') {\n      <div class=\"et-text-button-icon\">\n        <ng-container *ngTemplateOutlet=\"iconTpl\" />\n      </div>\n    }\n\n    @if (buttonDir.loading()) {\n      <div class=\"et-button-loader\" aria-hidden=\"true\">\n        <et-spinner\n          [diameter]=\"spinnerConfig().diameter\"\n          [strokeWidth]=\"spinnerConfig().strokeWidth\"\n          [determinate]=\"buttonDir.hasProgress()\"\n          [track]=\"buttonDir.hasProgress()\"\n          [value]=\"buttonDir.progress() ?? 0\"\n          class=\"et-button-loader-spinner\"\n        />\n      </div>\n    }\n\n    <ng-template #iconTpl>\n      <ng-content select=\"[etIcon]\" />\n    </ng-template>\n  `,\n  styleUrl: './text-button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet, SpinnerComponent],\n  hostDirectives: [\n    {\n      directive: ButtonDirective,\n      inputs: ['disabled', 'loading', 'progress', 'type'],\n    },\n    ButtonStylesDirective,\n    ColorInteractiveDirective,\n    FocusRingDirective,\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-text-button',\n    '[attr.data-icon-alignment]': 'iconAlignment()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class TextButtonComponent {\n  protected buttonDir = inject(ButtonDirective);\n\n  public size = input<ButtonSize>(BUTTON_SIZES.MD);\n  public iconAlignment = input<ButtonIconAlignment>(BUTTON_ICON_ALIGNMENTS.START);\n\n  public canAnimate = createCanAnimateSignal();\n\n  public spinnerConfig = computed(() => BUTTON_SPINNER_CONFIG[this.size()]);\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal, ProvideColorDirective } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { SpinnerComponent } from '../loader';\nimport { ButtonStylesDirective } from './button-styles.directive';\nimport { ButtonDirective } from './headless';\n\nexport const WINDOW_CONTROL_BUTTON_SIZES = {\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n} as const;\n\nexport type WindowControlButtonSize = (typeof WINDOW_CONTROL_BUTTON_SIZES)[keyof typeof WINDOW_CONTROL_BUTTON_SIZES];\n\nexport const WINDOW_CONTROL_BUTTON_KINDS = {\n  DEFAULT: 'default',\n  CLOSE: 'close',\n} as const;\n\nexport type WindowControlButtonKind = (typeof WINDOW_CONTROL_BUTTON_KINDS)[keyof typeof WINDOW_CONTROL_BUTTON_KINDS];\n\nconst WINDOW_CONTROL_BUTTON_SPINNER_CONFIG: Record<WindowControlButtonSize, { diameter: number; strokeWidth: number }> =\n  {\n    sm: { diameter: 12, strokeWidth: 2 },\n    md: { diameter: 14, strokeWidth: 2 },\n    lg: { diameter: 16, strokeWidth: 2.5 },\n  };\n\n@Component({\n  selector: '[et-window-control-button]',\n  template: `\n    <div class=\"et-window-control-button-icon\">\n      <ng-content />\n    </div>\n\n    @if (buttonDir.loading()) {\n      <div class=\"et-button-loader\" aria-hidden=\"true\">\n        <et-spinner\n          [diameter]=\"spinnerConfig().diameter\"\n          [strokeWidth]=\"spinnerConfig().strokeWidth\"\n          [determinate]=\"buttonDir.hasProgress()\"\n          [track]=\"buttonDir.hasProgress()\"\n          [value]=\"buttonDir.progress() ?? 0\"\n          class=\"et-button-loader-spinner\"\n        />\n      </div>\n    }\n  `,\n  styleUrl: './window-control-button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [SpinnerComponent],\n  hostDirectives: [\n    {\n      directive: ButtonDirective,\n      inputs: ['disabled', 'loading', 'progress', 'type', 'pressed'],\n    },\n    ButtonStylesDirective,\n    ColorInteractiveDirective,\n    FocusRingDirective,\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-window-control-button',\n    '[attr.data-kind]': 'kind()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class WindowControlButtonComponent {\n  protected buttonDir = inject(ButtonDirective);\n\n  public size = input<WindowControlButtonSize>(WINDOW_CONTROL_BUTTON_SIZES.MD);\n  public kind = input<WindowControlButtonKind>(WINDOW_CONTROL_BUTTON_KINDS.DEFAULT);\n\n  public canAnimate = createCanAnimateSignal();\n\n  protected spinnerConfig = computed(() => WINDOW_CONTROL_BUTTON_SPINNER_CONFIG[this.size()]);\n}\n","import { ButtonComponent } from './button.component';\nimport { FabComponent } from './fab.component';\nimport {\n  ButtonDirective,\n  SplitButtonActionDirective,\n  SplitButtonDirective,\n  SplitButtonTriggerDirective,\n} from './headless';\nimport { IconButtonComponent } from './icon-button.component';\nimport { SplitButtonComponent } from './split-button.component';\nimport { TextButtonComponent } from './text-button.component';\nimport { WindowControlButtonComponent } from './window-control-button.component';\n\nexport const BUTTON_IMPORTS = [\n  ButtonComponent,\n  FabComponent,\n  IconButtonComponent,\n  SplitButtonComponent,\n  TextButtonComponent,\n  WindowControlButtonComponent,\n  ButtonDirective,\n  SplitButtonDirective,\n  SplitButtonActionDirective,\n  SplitButtonTriggerDirective,\n] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The action labels of the dialogs opened by `createAlertDialogOpener`. Titles and messages are always yours. */\nexport type AlertDialogLabels = {\n  /** The confirm dialog's accepting action. */\n  confirm: string;\n  /** The confirm dialog's cancelling action. */\n  cancel: string;\n  /** The alert dialog's only action. */\n  acknowledge: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_ALERT_DIALOG_LABELS: AlertDialogLabels = {\n  confirm: 'Confirm',\n  cancel: 'Cancel',\n  acknowledge: 'OK',\n};\n\nconst ALERT_DIALOG_LABELS_DEF = /* @__PURE__ */ defineLabels<AlertDialogLabels>(\n  'ALERT_DIALOG_LABELS',\n  DEFAULT_ALERT_DIALOG_LABELS,\n);\n\n/**\n * Localize the confirm and alert dialog actions for everything below this injector, and read the set in effect here\n * as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_ALERT_DIALOG_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideAlertDialogLabels({ confirm: 'Bestätigen', cancel: 'Abbrechen' });\n */\nexport const provideAlertDialogLabels = /* @__PURE__ */ toProvideFn(ALERT_DIALOG_LABELS_DEF);\nexport const injectAlertDialogLabels = /* @__PURE__ */ toInjectFn(ALERT_DIALOG_LABELS_DEF);\nexport const ALERT_DIALOG_LABELS = /* @__PURE__ */ toToken(ALERT_DIALOG_LABELS_DEF);\n","// codes 1200-1299\nexport const OVERLAY_ERROR_CODES = {\n  MISSING_OVERLAY_SURFACE: 1200,\n  TRIGGER_OUTSIDE_OVERLAY: 1201,\n  ANCHOR_OUTSIDE_OVERLAY: 1202,\n  SURFACE_OUTSIDE_OVERLAY: 1203,\n  MULTIPLE_LAYOUT_CLASSES: 1204,\n  NO_CLOSEST_OVERLAY: 1205,\n  NESTED_OVERLAY_MAIN: 1206,\n  REF_OUTSIDE_OVERLAY: 1207,\n  MISSING_OVERLAY_MAIN: 1208,\n  MISSING_ANIMATION_ORIGIN: 1209,\n  EMPTY_STRATEGIES: 1210,\n} as const;\n","import { InjectionToken, TemplateRef, computed, signal } from '@angular/core';\nimport {\n  OverlayRuntimeCloseEvent,\n  OverlayRuntimeCloseGuard,\n  OverlayRuntimeCloseSource,\n  OverlayRuntimePositionStrategy,\n  OverlayRuntimeRef,\n} from '@ethlete/core';\nimport { Observable, Subject, take, tap } from 'rxjs';\nimport { OverlayConfig } from './overlay-config';\n\n/** A synchronous veto for a pending overlay close - see {@link OverlayRuntimeCloseGuard}. */\nexport type OverlayCloseGuard<TResult = unknown> = OverlayRuntimeCloseGuard<TResult | undefined>;\n\nexport const createOverlayRef = <TComponent extends object, TResult = unknown>(config: OverlayConfig) => {\n  let id = '';\n  let _runtimeRef: OverlayRuntimeRef<TComponent, TResult> | null = null;\n  let _componentInstanceOverride: (() => TComponent | null) | null = null;\n\n  const _headerTemplates = signal<TemplateRef<unknown>[]>([]);\n  const headerTemplate = computed(() => _headerTemplates().at(-1) ?? null);\n\n  const afterOpened$ = new Subject<void>();\n  const beforeClosed$ = new Subject<TResult | undefined>();\n  const beforeClosedEvent$ = new Subject<OverlayRuntimeCloseEvent<TResult | undefined>>();\n  const afterClosed$ = new Subject<TResult | undefined>();\n  const afterClosedEvent$ = new Subject<OverlayRuntimeCloseEvent<TResult | undefined>>();\n  // Guards live here (not on the runtime ref directly) because the mounted component - where a guard\n  // is registered - is constructed before `attachRuntime` runs. A single aggregate guard is wired to\n  // the runtime ref on attach and reads this set live, so guards registered either side of attach work.\n  const closeGuards = new Set<OverlayCloseGuard<TResult>>();\n\n  const componentInstance = () => {\n    if (_componentInstanceOverride) {\n      return _componentInstanceOverride();\n    }\n\n    return _runtimeRef?.componentInstance() ?? null;\n  };\n\n  const elements = () => {\n    return _runtimeRef?.elements ?? null;\n  };\n\n  const close = (result?: TResult) => {\n    _runtimeRef?.close(result);\n  };\n\n  /**\n   * Re-applies positioning with a new strategy in place, without remounting the overlay.\n   * Note: a strategy-controller breakpoint switch will override this with its own strategy again.\n   */\n  const updatePositionStrategy = (strategy: OverlayRuntimePositionStrategy) => {\n    _runtimeRef?.updatePositionStrategy(strategy);\n  };\n\n  /** @internal Close the overlay while reporting how the close was initiated. */\n  const closeVia = (source: OverlayRuntimeCloseSource, result?: TResult) => {\n    _runtimeRef?.close(result, source);\n  };\n\n  /**\n   * Register a synchronous veto for pending closes. Return `false` from the guard to keep the\n   * overlay open. An async decision (e.g. a confirm dialog) belongs in the guard's owner, which\n   * re-issues the close via {@link forceClose} once resolved. Returns an unregister function.\n   */\n  const registerCloseGuard = (guard: OverlayCloseGuard<TResult>): (() => void) => {\n    closeGuards.add(guard);\n\n    return () => closeGuards.delete(guard);\n  };\n\n  /** Close the overlay bypassing every registered close guard - used to commit a close a guard\n   *  previously vetoed (e.g. after an async confirm resolved). */\n  const forceClose = (source: OverlayRuntimeCloseSource = 'api', result?: TResult) => {\n    _runtimeRef?.forceClose(result, source);\n  };\n\n  /** @internal Reroutes `componentInstance` to the content component when a container is mounted. */\n  const attachComponentInstanceOverride = (getter: () => TComponent | null) => {\n    _componentInstanceOverride = getter;\n  };\n\n  const afterOpened = (): Observable<void> => {\n    return afterOpened$.asObservable();\n  };\n\n  const beforeClosed = (): Observable<TResult | undefined> => {\n    return beforeClosed$.asObservable();\n  };\n\n  /** Like `beforeClosed`, but also reports how the close was initiated. */\n  const beforeClosedEvent = (): Observable<OverlayRuntimeCloseEvent<TResult | undefined>> => {\n    return beforeClosedEvent$.asObservable();\n  };\n\n  const afterClosed = (): Observable<TResult | undefined> => {\n    return afterClosed$.asObservable();\n  };\n\n  /** Like `afterClosed`, but also reports how the close was initiated (`escape`,\n   *  `outside-pointer`, `api`, …) - e.g. to restore focus on an explicit dismiss without\n   *  stealing it from whatever an outside-pointer close was aimed at. */\n  const afterClosedEvent = (): Observable<OverlayRuntimeCloseEvent<TResult | undefined>> => {\n    return afterClosedEvent$.asObservable();\n  };\n\n  const attachRuntime = (runtimeRef: OverlayRuntimeRef<TComponent, TResult>) => {\n    _runtimeRef = runtimeRef;\n    id = runtimeRef.id;\n\n    // One aggregate guard, reading the live set - any single guard vetoing vetoes the close.\n    runtimeRef.registerCloseGuard((event) => {\n      for (const guard of closeGuards) {\n        if (!guard(event)) {\n          return false;\n        }\n      }\n\n      return true;\n    });\n\n    runtimeRef\n      .afterOpened()\n      .pipe(\n        take(1),\n        tap(() => {\n          afterOpened$.next();\n          afterOpened$.complete();\n        }),\n      )\n      .subscribe();\n\n    runtimeRef\n      .beforeClosed()\n      .pipe(\n        take(1),\n        tap((event) => {\n          beforeClosed$.next(event.result);\n          beforeClosed$.complete();\n          beforeClosedEvent$.next(event);\n          beforeClosedEvent$.complete();\n        }),\n      )\n      .subscribe();\n\n    runtimeRef\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap((event) => {\n          afterClosed$.next(event.result);\n          afterClosed$.complete();\n          afterClosedEvent$.next(event);\n          afterClosedEvent$.complete();\n        }),\n      )\n      .subscribe();\n  };\n\n  return {\n    get id() {\n      return id;\n    },\n    get elements() {\n      return elements();\n    },\n\n    config,\n\n    headerTemplate,\n    /**\n     * @internal Registers a header template and returns its unregister function. The latest\n     * registration still alive is the active one.\n     */\n    registerHeaderTemplate: (template: TemplateRef<unknown>) => {\n      _headerTemplates.update((templates) => [...templates.filter((t) => t !== template), template]);\n\n      return () => _headerTemplates.update((templates) => templates.filter((t) => t !== template));\n    },\n\n    componentInstance,\n    close,\n    closeVia,\n    registerCloseGuard,\n    forceClose,\n    updatePositionStrategy,\n    attachComponentInstanceOverride,\n    afterOpened,\n    beforeClosed,\n    beforeClosedEvent,\n    afterClosed,\n    afterClosedEvent,\n    attachRuntime,\n  };\n};\n\nexport type OverlayRef<TComponent extends object = object, TResult = unknown> = ReturnType<\n  typeof createOverlayRef<TComponent, TResult>\n>;\n\nexport const OVERLAY_REF = new InjectionToken<OverlayRef>('OverlayRef');\n","import { ModelSignal, Type, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { OverlayConfig } from './overlay-config';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\n/** The name of the model the overlay component must expose to participate in query-param sync. */\nexport const OVERLAY_QUERY_PARAM_INPUT_NAME = 'overlayQueryParam';\n\n/** The shape a component must have to be usable with {@link defineQueryParamOverlay}. */\nexport type QueryParamOverlayHost = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  overlayQueryParam: ModelSignal<any>;\n};\n\n/** Extracts the query param value type from the component's `overlayQueryParam` model. */\nexport type QueryParamOverlayValue<TComponent> = TComponent extends { overlayQueryParam: ModelSignal<infer TValue> }\n  ? Extract<TValue, string>\n  : string;\n\nexport type OverlayDefinitionConfig<TComponent extends object> = OverlayConfig & {\n  /** The overlay component. */\n  component: Type<TComponent>;\n};\n\nexport type QueryParamOverlayDefinitionConfig<TComponent extends object> = OverlayDefinitionConfig<TComponent> & {\n  /** The query param key that drives the overlay's open/close lifecycle. */\n  queryParamKey: string;\n};\n\nexport type OverlayDefinition<TComponent extends object = object, TResult = unknown> = {\n  kind: 'overlay';\n\n  /** The overlay component. */\n  component: Type<TComponent>;\n\n  /** The base overlay config. Opener- and per-open configs are merged on top of it additively. */\n  config: OverlayConfig;\n\n  /**\n   * Returns the typed overlay ref. Must be called in the injection context of a component\n   * opened via this definition.\n   * @throws RuntimeError if called outside of an open overlay.\n   */\n  injectRef: () => OverlayRef<TComponent, TResult>;\n};\n\nexport type QueryParamOverlayDefinition<TComponent extends object = object, TResult = unknown> = Omit<\n  OverlayDefinition<TComponent, TResult>,\n  'kind'\n> & {\n  kind: 'queryParamOverlay';\n\n  /** The query param key that drives the overlay's open/close lifecycle. */\n  queryParamKey: string;\n};\n\nconst injectOverlayRefOrThrow = <TComponent extends object, TResult>() => {\n  const overlayRef = inject(OVERLAY_REF, { optional: true });\n\n  if (!overlayRef) {\n    throw new RuntimeError(\n      OVERLAY_ERROR_CODES.REF_OUTSIDE_OVERLAY,\n      '[Overlay] injectRef() must be called inside a component opened via this overlay definition.',\n    );\n  }\n\n  return overlayRef as OverlayRef<TComponent, TResult>;\n};\n\n/**\n * Defines an overlay at module scope: the component plus its base config (strategies, classes,\n * bindings, providers, …), without any dependency injection. Consumers turn the definition into\n * something that can open the overlay via `createOverlayOpener`, and the overlay component\n * itself accesses its typed ref via `definition.injectRef()`.\n *\n * @example\n * export const productOverlay = defineOverlay<ProductOverlayComponent, ProductResult>({\n *   component: ProductOverlayComponent,\n *   strategies: dialogOverlayStrategy({ maxWidth: '480px' }),\n * });\n */\nexport const defineOverlay = <TComponent extends object, TResult = unknown>(\n  config: OverlayDefinitionConfig<TComponent>,\n): OverlayDefinition<TComponent, TResult> => {\n  const { component, ...overlayConfig } = config;\n\n  return {\n    kind: 'overlay',\n    component,\n    config: overlayConfig,\n    injectRef: () => injectOverlayRefOrThrow<TComponent, TResult>(),\n  };\n};\n\n/**\n * Defines an overlay whose lifecycle is driven by a URL query param: it opens while the param is\n * present and closes (clearing the param) when dismissed. The component must expose an\n * `overlayQueryParam` {@link https://angular.dev/api/core/model | model} - it receives the param\n * value and is kept in two-way sync with the URL.\n *\n * Because opens are triggered by URL state, there is no per-open config; `bindings` and\n * `providers` set on the definition (or on the opener) are applied on every open.\n *\n * @example\n * export const productOverlay = defineQueryParamOverlay({\n *   component: ProductOverlayComponent, // exposes `overlayQueryParam = model<string>()`\n *   queryParamKey: 'product',\n *   strategies: dialogOverlayStrategy({ maxWidth: '480px' }),\n * });\n */\nexport const defineQueryParamOverlay = <TComponent extends QueryParamOverlayHost, TResult = unknown>(\n  config: QueryParamOverlayDefinitionConfig<TComponent>,\n): QueryParamOverlayDefinition<TComponent, TResult> => {\n  const { component, queryParamKey, ...overlayConfig } = config;\n\n  return {\n    kind: 'queryParamOverlay',\n    component,\n    queryParamKey,\n    config: overlayConfig,\n    injectRef: () => injectOverlayRefOrThrow<TComponent, TResult>(),\n  };\n};\n","export const normalizeClassList = (value?: string | string[]): string[] => {\n  if (!value) {\n    return [];\n  }\n\n  return Array.isArray(value) ? value : [value];\n};\n","import { Binding, StaticProvider } from '@angular/core';\nimport { normalizeClassList } from './normalize-class-list';\nimport { OverlayConfig } from './overlay-config';\n\nconst CLASS_KEYS = ['hostClass', 'backdropClass', 'panelClass'] as const;\n\n/**\n * Merges overlay configs from least to most specific (e.g. definition → opener → per-open).\n *\n * - `bindings`, `directives` and `providers` are concatenated in layer order - a later binding or\n *   provider for the same input/token wins, matching Angular semantics.\n * - `hostClass`, `backdropClass` and `panelClass` are normalized to arrays, concatenated and deduped.\n * - Every other key is taken from the last layer that sets it to a value other than `undefined`\n *   (an explicit `null`, e.g. on the aria fields, does override earlier layers).\n */\nexport const mergeOverlayConfigs = (...configs: (OverlayConfig | undefined)[]): OverlayConfig => {\n  const merged: OverlayConfig = {};\n  const bindings: Binding[] = [];\n  const directives: NonNullable<OverlayConfig['directives']> = [];\n  const providers: StaticProvider[] = [];\n  const classes: Record<(typeof CLASS_KEYS)[number], string[]> = {\n    hostClass: [],\n    backdropClass: [],\n    panelClass: [],\n  };\n\n  for (const config of configs) {\n    if (!config) continue;\n\n    const {\n      bindings: layerBindings,\n      directives: layerDirectives,\n      providers: layerProviders,\n      hostClass,\n      backdropClass,\n      panelClass,\n      ...scalars\n    } = config;\n\n    bindings.push(...(layerBindings ?? []));\n    directives.push(...(layerDirectives ?? []));\n    providers.push(...(layerProviders ?? []));\n    classes.hostClass.push(...normalizeClassList(hostClass));\n    classes.backdropClass.push(...normalizeClassList(backdropClass));\n    classes.panelClass.push(...normalizeClassList(panelClass));\n\n    for (const [key, value] of Object.entries(scalars)) {\n      if (value === undefined) continue;\n\n      (merged as Record<string, unknown>)[key] = value;\n    }\n  }\n\n  if (bindings.length) {\n    merged.bindings = bindings;\n  }\n\n  if (directives.length) {\n    merged.directives = directives;\n  }\n\n  if (providers.length) {\n    merged.providers = providers;\n  }\n\n  for (const key of CLASS_KEYS) {\n    const classList = [...new Set(classes[key])];\n\n    if (classList.length) {\n      merged[key] = classList;\n    }\n  }\n\n  return merged;\n};\n","import { InjectionToken, Signal } from '@angular/core';\nimport { OverlayConfig } from './overlay-config';\nimport { OverlayBreakpointConfig } from './strategies/overlay-strategy.types';\n\n/**\n * Whether an overlay renders a backdrop: `hasBackdrop` on the overlay config wins, then the active\n * strategy's own default, then the mode (a modal overlay has one).\n */\nexport const resolveOverlayHasBackdrop = (config: OverlayConfig, strategyConfig?: OverlayBreakpointConfig) =>\n  config.hasBackdrop ?? strategyConfig?.hasBackdrop ?? config.mode !== 'non-modal';\n\n/** @internal The resolved backdrop state of the active strategy, for the container's elevation. */\nexport const OVERLAY_HAS_BACKDROP = new InjectionToken<Signal<boolean>>('OverlayHasBackdrop');\n","import {\n  ApplicationRef,\n  Binding,\n  Component,\n  ComponentRef,\n  DestroyRef,\n  ElementRef,\n  Type,\n  ViewContainerRef,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  ANIMATED_LIFECYCLE_TOKEN,\n  AnimatedLifecycleDirective,\n  COLOR_PROVIDER,\n  ProvideColorDirective,\n  ProvideSurfaceDirective,\n  SURFACE_PROVIDER,\n  SurfaceTheme,\n  SurfaceType,\n  createCssSurfaceName,\n  injectBoundaryElement,\n  injectRenderer,\n  injectSurfaceContextTracker,\n  injectSurfaceThemes,\n  injectSurfaceThemesPrefix,\n  provideBoundaryElement,\n  resolveAppRootColorProvider,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { OverlayConfig } from './overlay-config';\nimport { OVERLAY_HAS_BACKDROP, resolveOverlayHasBackdrop } from './overlay-has-backdrop';\nimport { OVERLAY_REF } from './overlay-ref';\n\n@Component({\n  selector: 'et-overlay-container',\n  templateUrl: './overlay-container.component.html',\n  styleUrl: './overlay-container.component.css',\n  encapsulation: ViewEncapsulation.None,\n  providers: [provideBoundaryElement()],\n  hostDirectives: [AnimatedLifecycleDirective, ProvideColorDirective, ProvideSurfaceDirective],\n  host: {\n    class: 'et-overlay',\n    '[class.et-with-default-animation]': '!overlayRef.config.customAnimated',\n  },\n})\nexport class OverlayContainerComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private ownSurfaceProvider = inject(ProvideSurfaceDirective);\n  private parentColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n  private parentSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n  private destroyRef = inject(DestroyRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private appRef = inject(ApplicationRef);\n  private mountedHasBackdrop = inject(OVERLAY_HAS_BACKDROP, { optional: true });\n\n  protected overlayRef = inject(OVERLAY_REF);\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  private surfacePrefix = injectSurfaceThemesPrefix({ optional: true });\n  private surfaceContextTracker = injectSurfaceContextTracker();\n  private renderer = injectRenderer();\n\n  public rootBoundary = injectBoundaryElement();\n\n  public component = input.required<Type<object>>();\n  public componentBindings = input<Binding[] | undefined>(undefined);\n  public componentDirectives = input<OverlayConfig['directives'] | undefined>(undefined);\n\n  public renderArrow = input(false, { transform: booleanAttribute });\n  public renderDragHandle = input(false, { transform: booleanAttribute });\n\n  private contentOutlet = viewChild.required('contentOutlet', { read: ViewContainerRef });\n  public animatedLifecycle = signal(inject(ANIMATED_LIFECYCLE_TOKEN));\n  public contentComponentRef = signal<ComponentRef<object> | null>(null);\n\n  constructor() {\n    // The pane is detached DOM: element DI only reaches a color provider when the opener passed a\n    // viewContainerRef/injector. Without one, fall back to the provider on the bootstrapped root\n    // component (e.g. added via hostDirectives on the app component) so an app-wide forced color\n    // still propagates into overlays.\n    const contextColorProvider = this.parentColorProvider ?? resolveAppRootColorProvider(this.appRef);\n\n    if (contextColorProvider) {\n      this.ownColorProvider.syncWithProvider(contextColorProvider);\n    }\n\n    if (this.surfaceThemes) {\n      // Resolve the surface the overlay's trigger visually sits on, so the overlay elevates one\n      // level above it. The trigger keeps its *declaration* injector even when projected/portaled\n      // into another overlay, so DI (`parentSurfaceProvider`) reports the wrong surface for a\n      // trigger rendered inside a dialog/menu pane, and reports nothing for the anchored panel\n      // overlays (select/menu/date) which mount with no DI link to the trigger at all. The\n      // trigger's nearest painted surface ancestor *in the DOM* is authoritative in every case -\n      // an overlay pane and a plain elevated card both carry the surface class - so read that,\n      // and fall back to DI (openers that pass a viewContainerRef but no origin).\n      const parentSurface = this.resolveOriginSurface() ?? this.parentDiSurface();\n      const parentType = parentSurface?.type ?? 'dark';\n      const surfaceThemes = this.surfaceThemes;\n      const hasBackdrop = computed(\n        () => this.mountedHasBackdrop?.() ?? resolveOverlayHasBackdrop(this.overlayRef.config),\n      );\n      const elevation = computed(() => (hasBackdrop() || !parentSurface ? 1 : parentSurface.elevation + 1));\n      let unregister: (() => void) | null = null;\n\n      const applyElevation = (level: number) => {\n        const resolved = resolveSurfaceByElevation(surfaceThemes, parentType, level);\n\n        if (resolved) {\n          this.ownSurfaceProvider.forceSurface(resolved.name);\n        }\n\n        unregister?.();\n        unregister = this.surfaceContextTracker.register(parentType, level, this.elementRef.nativeElement);\n      };\n\n      let appliedElevation = untracked(elevation);\n\n      applyElevation(appliedElevation);\n\n      effect(() => {\n        const level = elevation();\n\n        if (level === appliedElevation) return;\n\n        appliedElevation = level;\n        untracked(() => applyElevation(level));\n      });\n\n      this.destroyRef.onDestroy(() => unregister?.());\n    }\n\n    this.rootBoundary.override.set(this.elementRef.nativeElement);\n\n    afterNextRender(() => {\n      const host = this.elementRef.nativeElement;\n\n      // A sheet's enter spring briefly overshoots past its docked edge; a box-shadow fills the gap\n      // (see the CSS). Its color must match the sheet's *actually painted* surface, which can live\n      // on nested content one elevation above the host's own forced surface - so measure the\n      // painted pane rather than trusting the host's --et-surface-background-solid token, which\n      // would be a shade off. Falls back to the token (CSS default) when nothing paints.\n      if (host.classList.contains('et-with-default-animation') && this.isSheetHost(host)) {\n        const sheetPane = this.resolvePaintedPaneElement(host);\n        const sheetBackground = getComputedStyle(sheetPane).backgroundColor;\n        const sheetPaints =\n          !!sheetBackground && sheetBackground !== 'transparent' && sheetBackground !== 'rgba(0, 0, 0, 0)';\n\n        if (sheetPaints) {\n          this.renderer.setCssProperties(host, { '--_et-overlay-overshoot-fill': sheetBackground });\n        }\n      }\n\n      if (!this.renderArrow()) return;\n\n      const pane = this.resolvePaintedPaneElement(host);\n      const style = getComputedStyle(pane);\n      const props: Record<string, string> = {};\n      const borderWidth = parseFloat(style.borderTopWidth) || 0;\n\n      const background = style.backgroundColor;\n      const panePaints = !!background && background !== 'transparent' && background !== 'rgba(0, 0, 0, 0)';\n\n      if (panePaints) {\n        // continue the pane's background and match its border exactly - including no border at\n        // all when the pane has none, so a 0px width is forwarded rather than left to the fallback\n        props['--_et-overlay-arrow-pane-background'] = background;\n        props['--_et-overlay-arrow-pane-border-width'] = `${borderWidth}px`;\n        props['--_et-overlay-arrow-pane-border-color'] = borderWidth ? style.borderTopColor : 'transparent';\n      } else if (borderWidth) {\n        // no painted pane found: only forward a real border and let the surface-token fallback\n        // fill the background\n        props['--_et-overlay-arrow-pane-border-width'] = `${borderWidth}px`;\n        props['--_et-overlay-arrow-pane-border-color'] = style.borderTopColor;\n      }\n\n      if (Object.keys(props).length) {\n        this.renderer.setCssProperties(host, props);\n      }\n    });\n\n    this.animatedLifecycle()\n      .state$.pipe(\n        tap((state) => {\n          const backdrop = this.overlayRef.elements?.backdropElement();\n          if (!backdrop) return;\n\n          if (state === 'entering' || state === 'entered') {\n            this.renderer.addClass(backdrop, 'et-overlay-backdrop--visible');\n          } else if (state === 'leaving' || state === 'left') {\n            this.renderer.removeClass(backdrop, 'et-overlay-backdrop--visible');\n          }\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    effect(() => {\n      const outlet = this.contentOutlet();\n      const component = this.component();\n\n      untracked(() => {\n        this.contentComponentRef()?.destroy();\n\n        const componentRef = outlet.createComponent(component, {\n          bindings: this.componentBindings() ?? [],\n          directives: this.componentDirectives() ?? [],\n        });\n\n        this.contentComponentRef.set(componentRef);\n      });\n    });\n\n    this.destroyRef.onDestroy(() => this.contentComponentRef()?.destroy());\n  }\n\n  /**\n   * The element whose surface the container should visually continue (for the arrow's background\n   * and the sheet overshoot filler): the host itself when it paints the pane (custom panelClass,\n   * dialog), otherwise the first painted element in the rendered content (menu/tooltip/date-picker\n   * paint a nested element, potentially at a higher elevation than the host's forced surface).\n   */\n  private parentDiSurface(): { elevation: number; type: SurfaceType } | null {\n    const provider = this.parentSurfaceProvider;\n\n    if (!provider) return null;\n\n    return { elevation: provider.elevation(), type: provider.surfaceType() ?? 'dark' };\n  }\n\n  /**\n   * The surface of the nearest ancestor of the overlay's origin (trigger) that paints a resolved\n   * surface - walking the real DOM so it sees *through* the portal/projection boundary that hides\n   * the true parent surface from DI. Returns null when there is no origin element or no surfaced\n   * ancestor (the overlay then falls back to DI, and ultimately to elevation 1).\n   */\n  private resolveOriginSurface(): { elevation: number; type: SurfaceType } | null {\n    const themes = this.surfaceThemes;\n\n    if (!themes) return null;\n\n    const origin = this.resolveOriginElement();\n\n    if (!origin) return null;\n\n    const prefix = this.surfacePrefix || 'et';\n    const themeByClass = new Map<string, SurfaceTheme>();\n\n    for (const theme of themes) {\n      themeByClass.set(`${prefix}-surface--${createCssSurfaceName(theme.name)}`, theme);\n    }\n\n    for (let el: Element | null = origin; el; el = el.parentElement) {\n      for (const cls of Array.from(el.classList)) {\n        const theme = themeByClass.get(cls);\n\n        if (theme) return { elevation: theme.elevation, type: theme.type };\n      }\n    }\n\n    return null;\n  }\n\n  private resolveOriginElement(): Element | null {\n    const origin = this.overlayRef.config.origin;\n\n    if (origin instanceof Element) return origin;\n\n    if (origin instanceof Event) {\n      const target = origin.target ?? origin.currentTarget;\n\n      return target instanceof Element ? target : null;\n    }\n\n    return null;\n  }\n\n  private isSheetHost(host: HTMLElement) {\n    return (\n      host.classList.contains('et-overlay--bottom-sheet') ||\n      host.classList.contains('et-overlay--top-sheet') ||\n      host.classList.contains('et-overlay--left-sheet') ||\n      host.classList.contains('et-overlay--right-sheet')\n    );\n  }\n\n  private resolvePaintedPaneElement(host: HTMLElement): HTMLElement {\n    const isPainted = (el: HTMLElement) => {\n      const background = getComputedStyle(el).backgroundColor;\n      return !!background && background !== 'transparent' && background !== 'rgba(0, 0, 0, 0)';\n    };\n\n    if (isPainted(host)) return host;\n\n    const content = this.contentComponentRef()?.location.nativeElement as HTMLElement | undefined;\n    if (!content) return host;\n    if (isPainted(content)) return content;\n\n    // the painted pane varies per overlay kind (.et-menu, .et-tooltip__surface, …) with no\n    // shared hook, so scan the rendered content for the first element that actually paints\n    // eslint-disable-next-line ethlete/no-dom-query -- one-off measurement in afterNextRender; no stable directive hook across overlay kinds\n    for (const el of Array.from(content.querySelectorAll<HTMLElement>('*'))) {\n      if (isPainted(el)) return el;\n    }\n\n    return host;\n  }\n}\n","@if (renderDragHandle()) {\n  <div class=\"et-overlay-container-drag-handle\"></div>\n}\n<ng-container #contentOutlet />\n@if (renderArrow()) {\n  <div class=\"et-overlay-arrow\" et-floating-arrow></div>\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The floating-ui-positioned arrow's chrome, as a styles-only component mounted whenever a\n * strategy's config sets `arrow: true` (anchored dialogs, tooltips, toggletips, arrowed menus).\n *\n * Referenced only when a mounted strategy opts into an arrow, so an overlay that never renders\n * one does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-arrow-styles',\n  template: '',\n  styleUrl: './overlay-arrow-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class OverlayArrowStylesComponent {}\n","import { isElement } from '@ethlete/core';\n\nexport const isHtmlElement = (element: unknown): element is HTMLElement => element instanceof HTMLElement;\nexport const isTouchEvent = (event: Event): event is TouchEvent => event.type[0] === 't';\nexport const isPointerEvent = (event: Event): event is PointerEvent => event.type[0] === 'c';\n\nexport const findNextRelevantHtmlElement = (element: HTMLElement | null, depth = 0): HTMLElement | null => {\n  if (!element || depth === 10) return null;\n\n  if (element.tagName === 'A' || element.tagName === 'BUTTON') {\n    return element;\n  }\n\n  return findNextRelevantHtmlElement(element.parentElement, depth + 1);\n};\n\nexport const getOriginCoordinatesAndDimensions = (origin: Element | Event | undefined) => {\n  if (!origin) return null;\n\n  if (isHtmlElement(origin)) {\n    const rect = (findNextRelevantHtmlElement(origin) ?? origin).getBoundingClientRect();\n\n    return {\n      x: rect.left + rect.width / 2,\n      y: rect.top + rect.height / 2,\n      width: rect.width,\n      height: rect.height,\n      element: origin,\n    };\n  }\n\n  if (isElement(origin)) return null;\n\n  if (isTouchEvent(origin) || isPointerEvent(origin)) {\n    const target = origin.target as HTMLElement;\n    const relevantElement = findNextRelevantHtmlElement(target) ?? target;\n    const rect = relevantElement.getBoundingClientRect();\n\n    return {\n      x: rect.left + rect.width / 2,\n      y: rect.top + rect.height / 2,\n      width: rect.width,\n      height: rect.height,\n      element: relevantElement,\n    };\n  }\n\n  return null;\n};\n","import {\n  DOCUMENT,\n  EnvironmentInjector,\n  Signal,\n  computed,\n  createEnvironmentInjector,\n  effect,\n  linkedSignal,\n  runInInjectionContext,\n  signal,\n  untracked,\n} from '@angular/core';\nimport {\n  AnimatedLifecycleDirective,\n  OverlayRuntimeAnimationDelegate,\n  OverlayRuntimePositionStrategy,\n  OverlayRuntimeRef,\n  RuntimeError,\n  animationDebugLog,\n  equal,\n  injectBreakpointObserver,\n  injectRenderer,\n  injectStyleManager,\n  isElement,\n  isHTMLElement,\n  nextFrame,\n} from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { normalizeClassList } from '../normalize-class-list';\nimport { OverlayConfig } from '../overlay-config';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { resolveOverlayHasBackdrop } from '../overlay-has-backdrop';\nimport { OverlayRef } from '../overlay-ref';\nimport { OverlayArrowStylesComponent } from './overlay-arrow-styles.component';\nimport { findNextRelevantHtmlElement } from './overlay-origin';\nimport { OverlayBreakpointConfig, OverlayStrategy, OverlayStrategyContext } from './overlay-strategy.types';\n\nexport type OverlayStrategyControllerMountConfig = {\n  positionStrategy: OverlayRuntimePositionStrategy;\n  paneClass: string[];\n  hostClass: string[];\n  animationDelegate: OverlayRuntimeAnimationDelegate;\n  renderArrow: boolean;\n  renderDragHandle: boolean;\n  hasBackdrop: boolean;\n};\n\nexport type OverlayStrategyController = {\n  /** Values the overlay manager merges into the runtime mount config before mounting. */\n  initialMountConfig: OverlayStrategyControllerMountConfig;\n\n  /** Whether the active strategy renders an arrow - follows breakpoint switches. */\n  renderArrow: Signal<boolean>;\n\n  /** Whether the active strategy renders a drag handle - follows breakpoint switches. */\n  renderDragHandle: Signal<boolean>;\n\n  /** Whether the overlay renders a backdrop under the active strategy - follows breakpoint switches. */\n  hasBackdrop: Signal<boolean>;\n\n  /** Wires strategy lifecycle hooks and breakpoint switching. Must be called right after mounting. */\n  attach: (runtimeRef: OverlayRuntimeRef<object, unknown>, overlayRef: OverlayRef<object, unknown>) => void;\n};\n\n/** Set by the overlay container while the overlay is open - see `overlay-container.component.css`. */\nconst BACKDROP_VISIBLE_CLASS = 'et-overlay-backdrop--visible';\n\n/**\n * `documentClass` and `bodyClass` land on elements every open overlay shares, so they are reference\n * counted per element: two open full-screen dialogs both want the same document class, and the\n * first one to close must not strip it from the other. Every add must go through\n * `retainSharedClasses` and every remove through `releaseSharedClasses`.\n */\nconst sharedClassCounts = /* @__PURE__ */ new WeakMap<HTMLElement, Map<string, number>>();\n\nconst coerceCssPixelValue = (value: number | string) => {\n  return typeof value === 'number' ? `${value}px` : value;\n};\n\nexport const createOverlayStrategyController = (\n  config: OverlayConfig,\n  parentInjector: EnvironmentInjector,\n): OverlayStrategyController => {\n  const childInjector = createEnvironmentInjector([], parentInjector);\n  const renderer = runInInjectionContext(childInjector, () => injectRenderer());\n  const breakpointObserver = runInInjectionContext(childInjector, () => injectBreakpointObserver());\n  const styleManager = runInInjectionContext(childInjector, () => injectStyleManager());\n\n  /** The strategy's CSS ships with the strategy, so it has to be in the document before it renders. */\n  const mountStrategyStyles = (strategyConfig: OverlayBreakpointConfig) => {\n    if (strategyConfig.stylesComponent) {\n      styleManager.mount(strategyConfig.stylesComponent);\n    }\n\n    if (strategyConfig.arrow) {\n      styleManager.mount(OverlayArrowStylesComponent);\n    }\n  };\n\n  const origin = config.origin;\n  // event origins climb to the nearest clickable element (e.g. the button instead of its icon)\n  const originElement = isElement(origin)\n    ? origin\n    : origin && isHTMLElement(origin.target)\n      ? (findNextRelevantHtmlElement(origin.target) ?? origin.target)\n      : undefined;\n\n  // The overlay mounts into its origin's document (see the overlay manager), so `documentClass` and\n  // `bodyClass` have to land on that document too - scroll locks and the like are for the window the\n  // overlay is actually in.\n  const document = originElement?.ownerDocument ?? childInjector.get(DOCUMENT);\n\n  const strategyBreakpoints = untracked(() => runInInjectionContext(childInjector, () => config.strategies?.() ?? []));\n\n  const breakpointMatchResults = untracked(() =>\n    runInInjectionContext(childInjector, () =>\n      strategyBreakpoints.map((breakpointEntry) =>\n        breakpointEntry.breakpoint\n          ? {\n              isActive: breakpointObserver.observeBreakpoint({ min: breakpointEntry.breakpoint }),\n              strategy: breakpointEntry.strategy,\n              size:\n                typeof breakpointEntry.breakpoint === 'number'\n                  ? breakpointEntry.breakpoint\n                  : breakpointObserver.getBreakpointSize(breakpointEntry.breakpoint, 'min'),\n            }\n          : {\n              isActive: signal(true),\n              strategy: breakpointEntry.strategy,\n              size: 0,\n            },\n      ),\n    ),\n  );\n\n  if (!breakpointMatchResults.length) {\n    throw new RuntimeError(\n      OVERLAY_ERROR_CODES.EMPTY_STRATEGIES,\n      '[Overlay] `strategies` resolved to an empty array. It must return at least one entry.',\n    );\n  }\n\n  const smallestEntry = breakpointMatchResults.reduce((prev, curr) => (prev.size <= curr.size ? prev : curr));\n\n  if (ngDevMode && smallestEntry.size > 0) {\n    console.warn(\n      '[Overlay] `strategies` has no entry without a `breakpoint`, so nothing matches below the smallest one. Falling back to the smallest entry - add a base entry to make the fallback explicit.',\n    );\n  }\n\n  // seeded with the smallest entry so an all-breakpoints array still resolves below its smallest one\n  const getHighestMatchedStrategy = () =>\n    breakpointMatchResults\n      .filter((entry) => entry.isActive())\n      .reduce((prev, curr) => (prev.size > curr.size ? prev : curr), smallestEntry).strategy;\n\n  let activeStrategy = untracked(() => getHighestMatchedStrategy());\n  const activeStrategyConfig = signal(activeStrategy.config);\n\n  mountStrategyStyles(activeStrategy.config);\n  let attachedRuntimeRef: OverlayRuntimeRef<object, unknown> | null = null;\n  let attachedOverlayRef: OverlayRef<object, unknown> | null = null;\n\n  let cachedLifecycle: AnimatedLifecycleDirective | null = null;\n\n  // the runtime clears the component instance on close, so the lifecycle is cached for onAfterLeave\n  const getLifecycle = (): AnimatedLifecycleDirective | null => {\n    const instance = attachedRuntimeRef?.componentInstance() as {\n      animatedLifecycle?: () => AnimatedLifecycleDirective;\n    } | null;\n\n    cachedLifecycle = instance?.animatedLifecycle?.() ?? cachedLifecycle;\n\n    return cachedLifecycle;\n  };\n\n  const buildContext = (\n    strategyConfig: OverlayBreakpointConfig,\n    previousConfig?: OverlayBreakpointConfig,\n  ): OverlayStrategyContext | null => {\n    const runtimeRef = attachedRuntimeRef;\n    const overlayRef = attachedOverlayRef;\n    const lifecycle = getLifecycle();\n\n    if (!runtimeRef || !overlayRef || !lifecycle) return null;\n\n    return {\n      overlayRef,\n      runtimeRef,\n      containerEl: runtimeRef.elements.paneElement,\n      hostEl: runtimeRef.elements.hostElement,\n      backdropEl: runtimeRef.elements.backdropElement(),\n      lifecycle,\n      config: strategyConfig,\n      previousConfig,\n      origin,\n    };\n  };\n\n  const resolvePositionStrategy = (strategyConfig: OverlayBreakpointConfig): OverlayRuntimePositionStrategy => {\n    return strategyConfig.positionStrategy?.(originElement) ?? { kind: 'global' };\n  };\n\n  const composeMaxSize = (value: number | string | undefined, cssVar: string) => {\n    if (value === undefined) return `var(${cssVar})`;\n\n    const cssValue = coerceCssPixelValue(value);\n\n    return `min(${cssValue}, var(${cssVar}, ${cssValue}))`;\n  };\n\n  const composeMinSize = (value: number | string | undefined, cssVar: string) => {\n    if (value === undefined) return null;\n\n    const cssValue = coerceCssPixelValue(value);\n\n    return `min(${cssValue}, var(${cssVar}, ${cssValue}))`;\n  };\n\n  const applySizingStyles = (paneElement: HTMLElement, strategyConfig: OverlayBreakpointConfig) => {\n    renderer.setStyle(paneElement, {\n      maxWidth: composeMaxSize(strategyConfig.maxWidth, '--et-overlay-max-width'),\n      maxHeight: composeMaxSize(strategyConfig.maxHeight, '--et-overlay-max-height'),\n      minWidth: composeMinSize(strategyConfig.minWidth, '--et-overlay-max-width'),\n      minHeight: composeMinSize(strategyConfig.minHeight, '--et-overlay-max-height'),\n      width: strategyConfig.width ? coerceCssPixelValue(strategyConfig.width) : null,\n      height: strategyConfig.height ? coerceCssPixelValue(strategyConfig.height) : null,\n    });\n  };\n\n  const applyClassChange = (element: HTMLElement, change: { prev?: string | string[]; curr?: string | string[] }) => {\n    const { prev, curr } = change;\n\n    if (equal(prev, curr)) return;\n\n    if (prev) {\n      renderer.removeClass(element, ...normalizeClassList(prev));\n    }\n\n    if (curr) {\n      renderer.addClass(element, ...normalizeClassList(curr));\n    }\n  };\n\n  const retainSharedClasses = (element: HTMLElement, classes: string[]) => {\n    if (!classes.length) return;\n\n    let counts = sharedClassCounts.get(element);\n\n    if (!counts) {\n      counts = new Map();\n      sharedClassCounts.set(element, counts);\n    }\n\n    for (const className of classes) {\n      const count = (counts.get(className) ?? 0) + 1;\n\n      counts.set(className, count);\n\n      if (count === 1) {\n        renderer.addClass(element, className);\n      }\n    }\n  };\n\n  const releaseSharedClasses = (element: HTMLElement, classes: string[]) => {\n    const counts = sharedClassCounts.get(element);\n\n    if (!counts) return;\n\n    for (const className of classes) {\n      const count = (counts.get(className) ?? 1) - 1;\n\n      if (count > 0) {\n        counts.set(className, count);\n\n        continue;\n      }\n\n      counts.delete(className);\n      renderer.removeClass(element, className);\n    }\n  };\n\n  const applySharedClassChange = (\n    element: HTMLElement,\n    change: { prev?: string | string[]; curr?: string | string[] },\n  ) => {\n    const { prev, curr } = change;\n\n    if (equal(prev, curr)) return;\n\n    // retained before the previous set is released, so a class both configs ask for is never dropped\n    retainSharedClasses(element, normalizeClassList(curr));\n    releaseSharedClasses(element, normalizeClassList(prev));\n  };\n\n  const applyClasses = (options: {\n    runtimeRef: OverlayRuntimeRef<object, unknown>;\n    prevConfig: OverlayBreakpointConfig | undefined;\n    currConfig: OverlayBreakpointConfig;\n  }) => {\n    const { runtimeRef, prevConfig, currConfig } = options;\n    const { paneElement, hostElement } = runtimeRef.elements;\n    const backdropElement = runtimeRef.elements.backdropElement();\n\n    applyClassChange(paneElement, { prev: prevConfig?.containerClass, curr: currConfig.containerClass });\n    applyClassChange(hostElement, { prev: prevConfig?.hostClass, curr: currConfig.hostClass });\n    applySharedClassChange(document.documentElement, {\n      prev: prevConfig?.documentClass,\n      curr: currConfig.documentClass,\n    });\n    applySharedClassChange(document.body, { prev: prevConfig?.bodyClass, curr: currConfig.bodyClass });\n\n    if (backdropElement) {\n      applyClassChange(backdropElement, { prev: prevConfig?.backdropClass, curr: currConfig.backdropClass });\n    }\n  };\n\n  const releaseClassesFromDocumentAndBody = (strategyConfig: OverlayBreakpointConfig) => {\n    releaseSharedClasses(document.documentElement, normalizeClassList(strategyConfig.documentClass));\n    releaseSharedClasses(document.body, normalizeClassList(strategyConfig.bodyClass));\n  };\n\n  /**\n   * A backdrop the switch just added has missed the enter transition that fades one in, so it is\n   * faded in from the next frame instead. Must run before `applyClasses`, which puts the strategy's\n   * own classes on whatever element exists afterwards.\n   */\n  const applyBackdrop = (runtimeRef: OverlayRuntimeRef<object, unknown>, strategyConfig: OverlayBreakpointConfig) => {\n    const hadBackdrop = !!runtimeRef.elements.backdropElement();\n\n    runtimeRef.updateBackdrop(resolveOverlayHasBackdrop(config, strategyConfig));\n\n    const backdropElement = runtimeRef.elements.backdropElement();\n    const lifecycleState = getLifecycle()?.state$.value;\n    const isVisible = lifecycleState === 'entering' || lifecycleState === 'entered';\n\n    if (hadBackdrop || !backdropElement || !isVisible) return;\n\n    nextFrame(() => renderer.addClass(backdropElement, BACKDROP_VISIBLE_CLASS));\n  };\n\n  const switchStrategy = (currStrategy: OverlayStrategy, prevStrategy: OverlayStrategy) => {\n    const runtimeRef = attachedRuntimeRef;\n    if (!runtimeRef) return;\n\n    const context = buildContext(currStrategy.config, prevStrategy.config);\n\n    if (context) {\n      prevStrategy.onSwitchedAwayFrom?.(context);\n      currStrategy.onSwitchedTo?.(context);\n    }\n\n    activeStrategy = currStrategy;\n    activeStrategyConfig.set(currStrategy.config);\n\n    mountStrategyStyles(currStrategy.config);\n    applyBackdrop(runtimeRef, currStrategy.config);\n    applyClasses({ runtimeRef, prevConfig: prevStrategy.config, currConfig: currStrategy.config });\n    runtimeRef.updatePositionStrategy(resolvePositionStrategy(currStrategy.config));\n    // re-position clears inline pane styles, so sizing must be re-applied afterwards\n    applySizingStyles(runtimeRef.elements.paneElement, currStrategy.config);\n  };\n\n  const animationDelegate: OverlayRuntimeAnimationDelegate = {\n    enter: ({ lifecycle }) => {\n      const strategy = activeStrategy;\n      const context = buildContext(strategy.config);\n\n      animationDebugLog(\n        `strategy ${config.id}`,\n        `delegate enter → ${strategy.onBeforeEnter && context ? 'onBeforeEnter' : 'lifecycle.enter()'}`,\n      );\n\n      if (strategy.onBeforeEnter && context) {\n        strategy.onBeforeEnter(context);\n      } else {\n        lifecycle.enter();\n      }\n    },\n    leave: ({ lifecycle }) => {\n      const strategy = activeStrategy;\n      const context = buildContext(strategy.config);\n\n      animationDebugLog(\n        `strategy ${config.id}`,\n        `delegate leave → ${strategy.onBeforeLeave && context ? 'onBeforeLeave' : 'lifecycle.leave()'}`,\n      );\n\n      if (strategy.onBeforeLeave && context) {\n        strategy.onBeforeLeave(context);\n      } else {\n        lifecycle.leave();\n      }\n    },\n  };\n\n  const attach = (runtimeRef: OverlayRuntimeRef<object, unknown>, overlayRef: OverlayRef<object, unknown>) => {\n    attachedRuntimeRef = runtimeRef;\n    attachedOverlayRef = overlayRef;\n\n    applySizingStyles(runtimeRef.elements.paneElement, activeStrategy.config);\n\n    const backdropElement = runtimeRef.elements.backdropElement();\n    if (backdropElement) {\n      applyClassChange(backdropElement, { curr: activeStrategy.config.backdropClass });\n    }\n\n    retainSharedClasses(document.documentElement, normalizeClassList(activeStrategy.config.documentClass));\n    retainSharedClasses(document.body, normalizeClassList(activeStrategy.config.bodyClass));\n\n    runtimeRef\n      .afterOpened()\n      .pipe(\n        tap(() => {\n          const strategy = activeStrategy;\n          const context = buildContext(strategy.config);\n\n          if (strategy.onAfterEnter && context) {\n            strategy.onAfterEnter(context);\n          }\n        }),\n      )\n      .subscribe();\n\n    runtimeRef\n      .afterClosed()\n      .pipe(\n        tap(() => {\n          const strategy = activeStrategy;\n          const context = buildContext(strategy.config);\n\n          if (strategy.onAfterLeave && context) {\n            strategy.onAfterLeave(context);\n          }\n\n          releaseClassesFromDocumentAndBody(strategy.config);\n          childInjector.destroy();\n        }),\n      )\n      .subscribe();\n\n    const highestMatchedStrategy = linkedSignal<\n      OverlayStrategy,\n      {\n        currentStrategy: OverlayStrategy;\n        previousStrategy: OverlayStrategy | undefined;\n      }\n    >({\n      source: getHighestMatchedStrategy,\n      computation: (source, prev) => ({\n        currentStrategy: source,\n        previousStrategy: prev?.source,\n      }),\n    });\n\n    let isFirstRun = true;\n    untracked(() =>\n      effect(\n        () => {\n          const { currentStrategy, previousStrategy } = highestMatchedStrategy();\n\n          if (isFirstRun) {\n            isFirstRun = false;\n\n            return;\n          }\n\n          if (!previousStrategy || previousStrategy.id === currentStrategy.id) return;\n\n          untracked(() => switchStrategy(currentStrategy, previousStrategy));\n        },\n        { injector: childInjector },\n      ),\n    );\n  };\n\n  return {\n    initialMountConfig: {\n      positionStrategy: resolvePositionStrategy(activeStrategy.config),\n      paneClass: normalizeClassList(activeStrategy.config.containerClass),\n      hostClass: normalizeClassList(activeStrategy.config.hostClass),\n      animationDelegate,\n      renderArrow: activeStrategy.config.arrow ?? false,\n      renderDragHandle: !!activeStrategy.config.dragToDismiss,\n      hasBackdrop: resolveOverlayHasBackdrop(config, activeStrategy.config),\n    },\n    renderArrow: computed(() => activeStrategyConfig().arrow ?? false),\n    renderDragHandle: computed(() => !!activeStrategyConfig().dragToDismiss),\n    hasBackdrop: computed(() => resolveOverlayHasBackdrop(config, activeStrategyConfig())),\n    attach,\n  };\n};\n","import { DOCUMENT, EnvironmentInjector, Type, computed, inject, inputBinding } from '@angular/core';\nimport {\n  anchoredOverlayPosition,\n  defineRootProvider,\n  injectOverlayRuntime,\n  isElement,\n  OverlayRuntimeRef,\n  resolveOverlayLayer,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { normalizeClassList } from './normalize-class-list';\nimport { OverlayConfig } from './overlay-config';\nimport { OverlayContainerComponent } from './overlay-container.component';\nimport { OVERLAY_HAS_BACKDROP, resolveOverlayHasBackdrop } from './overlay-has-backdrop';\nimport { OVERLAY_REF, OverlayRef, createOverlayRef } from './overlay-ref';\nimport { createOverlayStrategyController } from './strategies/overlay-strategy-controller';\n\nexport type OverlayManager = {\n  open: <TComponent extends object, TResult = unknown>(\n    component: Type<TComponent>,\n    config?: OverlayConfig,\n  ) => OverlayRef<TComponent, TResult>;\n  openOverlays: ReturnType<typeof computed<OverlayRef<object, unknown>[]>>;\n};\n\nlet overlayId = 0;\n\nconst isValidOriginElement = (element: Element | null): element is Element => {\n  if (!isElement(element)) return false;\n\n  const tagName = element.tagName.toLowerCase();\n  return tagName !== 'html' && tagName !== 'body';\n};\n\nconst resolveOrigin = (origin: Element | Event | undefined, document: Document) => {\n  if (origin) return origin;\n\n  const activeElement = document.activeElement;\n  return isValidOriginElement(activeElement) ? activeElement : undefined;\n};\n\n/**\n * The document an overlay mounts into: its origin's, so an overlay opened from an element living in\n * another same-origin window (e.g. a panel adopted by a pop-up) opens in that window.\n */\nconst resolveOriginDocument = (origin: Element | Event | undefined, fallback: Document) => {\n  if (isElement(origin)) return origin.ownerDocument;\n  if (origin && origin.target instanceof Node) return origin.target.ownerDocument ?? fallback;\n\n  return fallback;\n};\n\n/**\n * The stacking level an overlay opened from `origin` mounts at: whatever the nearest ancestor\n * declaring `data-et-overlay-layer` says, so an overlay opened from inside an always-on-top surface\n * (the query devtools panel, say) is not painted behind it.\n */\nconst resolveZIndex = (origin: Element | Event | undefined, document: Document) => {\n  const resolved = resolveOrigin(origin, document);\n\n  if (isElement(resolved)) {\n    return resolveOverlayLayer(resolved);\n  }\n\n  return resolveOverlayLayer(resolved?.target instanceof Element ? resolved.target : null);\n};\n\nconst OVERLAY_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n  (): OverlayManager => {\n    const overlayRuntime = injectOverlayRuntime();\n    const injector = inject(EnvironmentInjector);\n    const document = inject(DOCUMENT);\n    const runtimeToOverlayRef = new WeakMap<OverlayRuntimeRef<object, unknown>, OverlayRef<object, unknown>>();\n\n    const openOverlays = computed(() => {\n      return overlayRuntime\n        .openEntries()\n        .map((runtimeRef) => runtimeToOverlayRef.get(runtimeRef))\n        .filter((overlayRef): overlayRef is OverlayRef<object, unknown> => overlayRef !== undefined);\n    });\n\n    const open = <TComponent extends object, TResult = unknown>(\n      component: Type<TComponent>,\n      config: OverlayConfig = {},\n    ) => {\n      if (config.strategies) {\n        return openWithStrategies<TComponent, TResult>(component, config);\n      }\n\n      const id = config.id ?? `et-overlay-${++overlayId}`;\n      const overlayRef = createOverlayRef<TComponent, TResult>(config);\n      const modal = config.mode !== 'non-modal';\n      const role = config.role ?? (modal ? 'dialog' : undefined);\n      const disableClose = config.disableClose ?? false;\n      const positionStrategy = isElement(config.origin)\n        ? anchoredOverlayPosition({ referenceElement: config.origin })\n        : {\n            kind: 'center' as const,\n          };\n      const runtimeRef = overlayRuntime.mount<TComponent, TResult>({\n        id,\n        component,\n        document: resolveOriginDocument(config.origin, document),\n        zIndex: config.zIndex ?? resolveZIndex(config.origin, document),\n        viewContainerRef: config.viewContainerRef,\n        injector: config.injector,\n        providers: [{ provide: OVERLAY_REF, useValue: overlayRef }, ...(config.providers ?? [])],\n        bindings: config.bindings,\n        role,\n        positionStrategy,\n        hasBackdrop: resolveOverlayHasBackdrop(config),\n        modal,\n        autoFocus: config.autoFocus,\n        restoreFocus: config.restoreFocus,\n        closeOnEscape: disableClose ? false : (config.closeOnEscape ?? true),\n        closeOnOutsidePointer: disableClose ? false : (config.closeOnOutsidePointer ?? true),\n        passive: config.passive,\n        ariaDescribedBy: config.ariaDescribedBy,\n        ariaLabelledBy: config.ariaLabelledBy,\n        ariaLabel: config.ariaLabel,\n        hostClass: normalizeClassList(config.hostClass),\n        backdropClass: normalizeClassList(config.backdropClass),\n        paneClass: normalizeClassList(config.panelClass),\n      });\n\n      overlayRef.attachRuntime(runtimeRef);\n      runtimeToOverlayRef.set(\n        runtimeRef as OverlayRuntimeRef<object, unknown>,\n        overlayRef as OverlayRef<object, unknown>,\n      );\n\n      return overlayRef;\n    };\n\n    const openWithStrategies = <TComponent extends object, TResult = unknown>(\n      component: Type<TComponent>,\n      config: OverlayConfig,\n    ) => {\n      const id = config.id ?? `et-overlay-${++overlayId}`;\n      const resolvedConfig: OverlayConfig = {\n        ...config,\n        id,\n        origin: resolveOrigin(config.origin, document),\n      };\n\n      const overlayRef = createOverlayRef<TComponent, TResult>(resolvedConfig);\n      const controller = createOverlayStrategyController(resolvedConfig, injector);\n      const modal = resolvedConfig.mode !== 'non-modal';\n      const role = resolvedConfig.role ?? (modal ? 'dialog' : undefined);\n      const disableClose = resolvedConfig.disableClose ?? false;\n\n      const runtimeRef = overlayRuntime.mount<OverlayContainerComponent, TResult>({\n        id,\n        component: OverlayContainerComponent,\n        document: resolveOriginDocument(resolvedConfig.origin, document),\n        zIndex: resolvedConfig.zIndex ?? resolveZIndex(resolvedConfig.origin, document),\n        viewContainerRef: resolvedConfig.viewContainerRef,\n        injector: resolvedConfig.injector,\n        providers: [\n          { provide: OVERLAY_REF, useValue: overlayRef },\n          { provide: OVERLAY_HAS_BACKDROP, useValue: controller.hasBackdrop },\n          ...(resolvedConfig.providers ?? []),\n        ],\n        bindings: [\n          inputBinding('component', () => component),\n          inputBinding('componentBindings', () => resolvedConfig.bindings),\n          inputBinding('componentDirectives', () => resolvedConfig.directives),\n          inputBinding('renderArrow', () => controller.renderArrow()),\n          inputBinding('renderDragHandle', () => controller.renderDragHandle()),\n        ],\n        role,\n        positionStrategy: controller.initialMountConfig.positionStrategy,\n        animationDelegate: controller.initialMountConfig.animationDelegate,\n        hasBackdrop: controller.initialMountConfig.hasBackdrop,\n        modal,\n        autoFocus: resolvedConfig.autoFocus,\n        restoreFocus: resolvedConfig.restoreFocus,\n        closeOnEscape: disableClose ? false : (resolvedConfig.closeOnEscape ?? true),\n        closeOnOutsidePointer: disableClose ? false : (resolvedConfig.closeOnOutsidePointer ?? true),\n        passive: resolvedConfig.passive,\n        ariaDescribedBy: resolvedConfig.ariaDescribedBy,\n        ariaLabelledBy: resolvedConfig.ariaLabelledBy,\n        ariaLabel: resolvedConfig.ariaLabel,\n        hostClass: [...normalizeClassList(resolvedConfig.hostClass), ...controller.initialMountConfig.hostClass],\n        // the strategy's own backdrop classes are applied by the controller - the backdrop element is\n        // re-created when a switch turns it back on, and only the config's classes survive that\n        backdropClass: normalizeClassList(resolvedConfig.backdropClass),\n        paneClass: [...normalizeClassList(resolvedConfig.panelClass), ...controller.initialMountConfig.paneClass],\n      });\n\n      const typedRuntimeRef = runtimeRef as unknown as OverlayRuntimeRef<TComponent, TResult>;\n\n      overlayRef.attachRuntime(typedRuntimeRef);\n      overlayRef.attachComponentInstanceOverride(\n        () => (runtimeRef.componentInstance()?.contentComponentRef()?.instance as TComponent | null) ?? null,\n      );\n      controller.attach(runtimeRef as OverlayRuntimeRef<object, unknown>, overlayRef as OverlayRef<object, unknown>);\n\n      runtimeToOverlayRef.set(\n        runtimeRef as OverlayRuntimeRef<object, unknown>,\n        overlayRef as OverlayRef<object, unknown>,\n      );\n\n      return overlayRef;\n    };\n\n    return {\n      open,\n      openOverlays,\n    };\n  },\n  { name: 'OverlayManager' },\n);\n\nexport const provideOverlayManager = /* @__PURE__ */ toProvideFn(OVERLAY_MANAGER_DEF);\nexport const injectOverlayManager = /* @__PURE__ */ toInjectFn(OVERLAY_MANAGER_DEF);\n","import {\n  DestroyRef,\n  EffectRef,\n  Injector,\n  ViewContainerRef,\n  WritableSignal,\n  effect,\n  inject,\n  inputBinding,\n  isSignal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { injectQueryParam } from '@ethlete/core';\nimport { take, tap } from 'rxjs';\nimport { OverlayConfig } from './overlay-config';\nimport { mergeOverlayConfigs } from './overlay-config-merger';\nimport {\n  OVERLAY_QUERY_PARAM_INPUT_NAME,\n  OverlayDefinition,\n  QueryParamOverlayDefinition,\n  QueryParamOverlayValue,\n} from './overlay-definition';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OverlayRef } from './overlay-ref';\n\n/** Per-open config overrides. The component and `strategies` are fixed by the definition. */\nexport type OverlayOpenConfig = Omit<OverlayConfig, 'strategies'>;\n\nexport type OverlayLifecycleConfig<TResult = unknown> = {\n  /** A callback function to be executed once the overlay has been closed */\n  afterClosed?: (result: TResult | null) => void;\n\n  /** A callback function to be executed before the overlay is closed */\n  beforeClosed?: (result: TResult | null) => void;\n\n  /** A callback function to be executed once the overlay has been opened */\n  afterOpened?: () => void;\n};\n\n/**\n * Lifecycle callbacks plus overlay config overrides applied on every open. The config is merged\n * additively on top of the definition's config (`bindings`, `providers` and class lists are\n * concatenated; scalars override).\n *\n * Note for query-param overlays: an `origin` set here anchors every URL-driven open, including\n * deep links where the originating element may not exist - omitting it is usually right (the\n * overlay then falls back to the currently focused element).\n */\nexport type OverlayOpenerConfig<TResult = unknown> = OverlayLifecycleConfig<TResult> & OverlayOpenConfig;\n\n/**\n * Per-open config for a standard opener: config overrides plus lifecycle callbacks that apply to\n * this open only, in addition to the opener's own callbacks.\n */\nexport type OverlayOpenerOpenConfig<TResult = unknown> = OverlayOpenConfig & OverlayLifecycleConfig<TResult>;\n\nexport type OverlayOpener<TComponent extends object = object, TResult = unknown> = {\n  /** Open the overlay. Per-open config is merged additively on top of the definition and opener configs. */\n  open: (config?: OverlayOpenerOpenConfig<TResult>) => OverlayRef<TComponent, TResult>;\n};\n\nexport type SingleOverlayOpener<TComponent extends object = object, TResult = unknown> = {\n  /**\n   * Open the overlay, replacing the one the slot has open. Returns `null` while the previous overlay\n   * is still deciding whether to close (e.g. a pending unsaved-changes confirm) - the open then runs\n   * once it closes with source `'replace'`, and is dropped if it closes any other way.\n   */\n  open: (config?: OverlayOpenerOpenConfig<TResult>) => OverlayRef<TComponent, TResult> | null;\n};\n\n/**\n * One open overlay shared by several single openers, created with {@link createOverlaySingleSlot}.\n * Opening through any of them replaces the overlay any of them has open.\n */\nexport type OverlaySingleSlot = {\n  /** @internal */\n  open: (openFn: () => OverlayRef | null) => OverlayRef | null;\n};\n\n/**\n * Creates a slot that lets several single openers share one open overlay:\n * `createOverlayOpener(a, { single: slot })` and `createOverlayOpener(b, { single: slot })`.\n */\nexport const createOverlaySingleSlot = (): OverlaySingleSlot => {\n  let current: OverlayRef | null = null;\n  let waiting: (() => OverlayRef | null) | null = null;\n\n  const track = (ref: OverlayRef | null) => {\n    current = ref;\n\n    ref\n      ?.beforeClosedEvent()\n      .pipe(\n        take(1),\n        tap((event) => {\n          if (current !== ref) return;\n\n          current = null;\n\n          const next = waiting;\n          waiting = null;\n\n          if (next && event.source === 'replace') track(next());\n        }),\n      )\n      .subscribe();\n\n    return ref;\n  };\n\n  const open = (openFn: () => OverlayRef | null) => {\n    const previous = current;\n\n    if (!previous) return track(openFn());\n\n    waiting = openFn;\n    previous.closeVia('replace');\n\n    return current !== previous ? current : null;\n  };\n\n  return { open };\n};\n\nexport type OverlaySingleOpenerConfig<TResult = unknown> = OverlayOpenerConfig<TResult> & {\n  /**\n   * Keep at most one overlay of this opener open: `open()` closes the open one with source\n   * `'replace'` (guardable, e.g. by `createOverlayUnsavedChangesGuard`) and opens the new one once it\n   * does. Pass an {@link OverlaySingleSlot} instead to share the one overlay across several openers.\n   */\n  single: 'replace' | OverlaySingleSlot;\n};\n\nexport type QueryParamOverlayOpener<TQueryParam extends string = string> = {\n  /** Open the overlay by writing the given value to the query param. */\n  open: (value: TQueryParam) => void;\n\n  /** Close the overlay by removing the query param. */\n  close: () => void;\n};\n\ntype CreateOverlayOpenerFn = {\n  <TComponent extends object, TResult>(\n    definition: QueryParamOverlayDefinition<TComponent, TResult>,\n    config?: OverlayOpenerConfig<TResult>,\n  ): QueryParamOverlayOpener<QueryParamOverlayValue<TComponent>>;\n  <TComponent extends object, TResult>(\n    definition: OverlayDefinition<TComponent, TResult>,\n    config: OverlaySingleOpenerConfig<TResult>,\n  ): SingleOverlayOpener<TComponent, TResult>;\n  <TComponent extends object, TResult>(\n    definition: OverlayDefinition<TComponent, TResult>,\n    config?: OverlayOpenerConfig<TResult>,\n  ): OverlayOpener<TComponent, TResult>;\n};\n\nconst isWritableSignal = <T>(value: unknown): value is WritableSignal<T> =>\n  isSignal(value) && typeof (value as { set?: unknown }).set === 'function';\n\nconst splitOpenerConfig = <TResult>(config: OverlayOpenerConfig<TResult> | undefined) => {\n  const { afterClosed, beforeClosed, afterOpened, ...overlayConfig } = config ?? {};\n\n  const lifecycle: OverlayLifecycleConfig<TResult> = { afterClosed, beforeClosed, afterOpened };\n\n  return { lifecycle, overlayConfig };\n};\n\ntype AttachLifecycleOptions<TComponent extends object, TResult> = {\n  overlayRef: OverlayRef<TComponent, TResult>;\n  lifecycle: OverlayLifecycleConfig<TResult>;\n  destroyRef: DestroyRef;\n};\n\nconst attachLifecycle = <TComponent extends object, TResult>(options: AttachLifecycleOptions<TComponent, TResult>) => {\n  const { overlayRef, lifecycle, destroyRef } = options;\n  const { afterClosed, beforeClosed, afterOpened } = lifecycle;\n\n  if (afterClosed) {\n    overlayRef\n      .afterClosed()\n      .pipe(\n        tap((result) => afterClosed(result ?? null)),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  }\n\n  if (beforeClosed) {\n    overlayRef\n      .beforeClosed()\n      .pipe(\n        tap((result) => beforeClosed(result ?? null)),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  }\n\n  if (afterOpened) {\n    overlayRef\n      .afterOpened()\n      .pipe(\n        tap(() => afterOpened()),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  }\n};\n\nconst createStandardOverlayOpener = <TComponent extends object, TResult>(\n  definition: OverlayDefinition<TComponent, TResult>,\n  openerConfig?: OverlayOpenerConfig<TResult> | OverlaySingleOpenerConfig<TResult>,\n): OverlayOpener<TComponent, TResult> | SingleOverlayOpener<TComponent, TResult> => {\n  const overlayManager = injectOverlayManager();\n  const destroyRef = inject(DestroyRef);\n  const fallbackViewContainerRef = inject(ViewContainerRef, { optional: true }) ?? undefined;\n  const { single, ...sharedConfig } = (openerConfig ?? {}) as Partial<OverlaySingleOpenerConfig<TResult>>;\n  const { lifecycle, overlayConfig } = splitOpenerConfig(sharedConfig);\n  const slot = single === 'replace' ? createOverlaySingleSlot() : (single ?? null);\n\n  let destroyed = false;\n  destroyRef.onDestroy(() => (destroyed = true));\n\n  const openNow = (config?: OverlayOpenerOpenConfig<TResult>) => {\n    const { lifecycle: openLifecycle, overlayConfig: openConfig } = splitOpenerConfig(config);\n\n    const overlayRef = overlayManager.open<TComponent, TResult>(\n      definition.component,\n      mergeOverlayConfigs({ viewContainerRef: fallbackViewContainerRef }, definition.config, overlayConfig, openConfig),\n    );\n\n    attachLifecycle({ overlayRef, lifecycle, destroyRef });\n    attachLifecycle({ overlayRef, lifecycle: openLifecycle, destroyRef });\n\n    return overlayRef;\n  };\n\n  if (!slot) return { open: openNow };\n\n  return {\n    open: (config) =>\n      slot.open(() => (destroyed ? null : (openNow(config) as unknown as OverlayRef))) as OverlayRef<\n        TComponent,\n        TResult\n      > | null,\n  };\n};\n\nconst createQueryParamOverlayOpener = <TComponent extends object, TResult>(\n  definition: QueryParamOverlayDefinition<TComponent, TResult>,\n  openerConfig?: OverlayOpenerConfig<TResult>,\n): QueryParamOverlayOpener => {\n  const overlayManager = injectOverlayManager();\n  const router = inject(Router);\n  const destroyRef = inject(DestroyRef);\n  const injector = inject(Injector);\n  const fallbackViewContainerRef = inject(ViewContainerRef, { optional: true }) ?? undefined;\n  const queryParamValue = injectQueryParam(definition.queryParamKey);\n  const { lifecycle, overlayConfig } = splitOpenerConfig(openerConfig);\n\n  let overlayRef: OverlayRef<TComponent, TResult> | null = null;\n  let modelSyncEffect: EffectRef | null = null;\n\n  const updateQueryParam = (value: string | null) =>\n    router.navigate([], { queryParams: { [definition.queryParamKey]: value }, queryParamsHandling: 'merge' });\n\n  const queryParamModel = () => {\n    const instance = overlayRef?.componentInstance() as Record<string, unknown> | null;\n\n    return isWritableSignal<string>(instance?.[OVERLAY_QUERY_PARAM_INPUT_NAME])\n      ? (instance[OVERLAY_QUERY_PARAM_INPUT_NAME] as WritableSignal<string>)\n      : null;\n  };\n\n  const teardown = () => {\n    modelSyncEffect?.destroy();\n    modelSyncEffect = null;\n  };\n\n  // The consumer's callbacks and the URL-sync wiring are composed into a single lifecycle\n  // config so each open attaches exactly one set of subscriptions.\n  const composedLifecycle: OverlayLifecycleConfig<TResult> = {\n    afterClosed: lifecycle.afterClosed,\n    afterOpened: () => {\n      lifecycle.afterOpened?.();\n\n      const model = queryParamModel();\n\n      if (!model) return;\n\n      // Keep the URL in sync when the overlay writes to its model.\n      modelSyncEffect = effect(\n        () => {\n          const modelValue = model();\n          untracked(() => updateQueryParam(modelValue));\n        },\n        { injector },\n      );\n    },\n    beforeClosed: (result) => {\n      lifecycle.beforeClosed?.(result);\n\n      teardown();\n      overlayRef = null;\n      updateQueryParam(null);\n    },\n  };\n\n  const openOverlay = (value: string) => {\n    // The seeded query-param binding is the last merge layer so it wins over any conflicting\n    // binding from the definition or opener config; two-way sync is wired up in afterOpened.\n    const ref = overlayManager.open<TComponent, TResult>(\n      definition.component,\n      mergeOverlayConfigs({ viewContainerRef: fallbackViewContainerRef }, definition.config, overlayConfig, {\n        bindings: [inputBinding(OVERLAY_QUERY_PARAM_INPUT_NAME, () => value)],\n      }),\n    );\n\n    attachLifecycle({ overlayRef: ref, lifecycle: composedLifecycle, destroyRef });\n\n    overlayRef = ref;\n  };\n\n  effect(() => {\n    const value = queryParamValue();\n\n    untracked(() => {\n      if (!value) {\n        overlayRef?.close();\n\n        return;\n      }\n\n      if (overlayRef) {\n        // The overlay is already open and the param changed externally - push it into the model.\n        queryParamModel()?.set(value);\n\n        return;\n      }\n\n      openOverlay(value);\n    });\n  });\n\n  destroyRef.onDestroy(() => {\n    teardown();\n\n    const openRef = overlayRef;\n\n    if (!openRef) return;\n\n    overlayRef = null;\n\n    // clearing the param is what normally closes the overlay, but the effect doing that is destroyed\n    // with this context - and the overlay outlives it, so it has to be closed directly\n    openRef.close();\n    updateQueryParam(null);\n  });\n\n  return {\n    open: (value) => updateQueryParam(value),\n    close: () => updateQueryParam(null),\n  };\n};\n\n/**\n * Creates an opener for the given overlay definition. Must be called in an injection context.\n *\n * - For a `defineOverlay` definition the opener exposes `open(config?)`, returning the typed\n *   `OverlayRef`. With `single: 'replace'` it keeps at most one overlay open and `open()` returns\n *   `OverlayRef | null` - see {@link OverlaySingleOpenerConfig}.\n * - For a `defineQueryParamOverlay` definition the opener drives the overlay through the URL:\n *   `open(value)` writes the query param and `close()` clears it. It also reacts to external\n *   URL changes (deep links, browser navigation) for as long as the injection context lives.\n *\n * @example\n * readonly product = createOverlayOpener(productOverlay, {\n *   afterClosed: (result) => console.log(result),\n * });\n */\nexport const createOverlayOpener: CreateOverlayOpenerFn = ((\n  definition: OverlayDefinition | QueryParamOverlayDefinition,\n  config?: OverlayOpenerConfig,\n) =>\n  definition.kind === 'queryParamOverlay'\n    ? createQueryParamOverlayOpener(definition, config)\n    : createStandardOverlayOpener(definition, config)) as CreateOverlayOpenerFn;\n","import { RuntimeError } from '@ethlete/core';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { OverlayBreakpointConfig } from './overlay-strategy.types';\n\nexport const OVERLAY_CONFIG_CLASS_KEYS = /* @__PURE__ */ new Set([\n  'containerClass',\n  'hostClass',\n  'backdropClass',\n  'documentClass',\n  'bodyClass',\n]);\n\nexport const mergeOverlayBreakpointConfigs = (...configs: OverlayBreakpointConfig[]): OverlayBreakpointConfig => {\n  const combinedConfig: OverlayBreakpointConfig = {};\n\n  for (const config of configs) {\n    for (const key in config) {\n      if (!Object.prototype.hasOwnProperty.call(config, key)) continue;\n\n      const typedKey = key as keyof OverlayBreakpointConfig;\n      const newValue = config[typedKey];\n\n      if (newValue === undefined) continue;\n\n      if (OVERLAY_CONFIG_CLASS_KEYS.has(key)) {\n        const existing = combinedConfig[typedKey];\n\n        const newArray = Array.isArray(newValue) ? newValue : [newValue as string];\n        const existingArray = existing ? (Array.isArray(existing) ? existing : [existing as string]) : [];\n\n        const merged = [...existingArray, ...newArray];\n\n        const layoutClassCount = merged.filter((value) => value.startsWith('et-overlay--')).length;\n        if (layoutClassCount > 1) {\n          throw new RuntimeError(\n            OVERLAY_ERROR_CODES.MULTIPLE_LAYOUT_CLASSES,\n            `Multiple layout classes are not allowed in config key \"${typedKey}\". Overwrite the layout class instead of combining strategies that each provide one.`,\n          );\n        }\n\n        (combinedConfig[typedKey] as unknown) = merged;\n      } else {\n        (combinedConfig[typedKey] as unknown) = newValue;\n      }\n    }\n  }\n\n  return combinedConfig;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The dialog's default enter/leave animation, as a styles-only component mounted by the dialog\n * strategy.\n *\n * Referenced only from that strategy, so an app that never opens one does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-dialog-styles',\n  template: '',\n  styleUrl: './dialog-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DialogStylesComponent {}\n","import { defineRootProvider, defineStaticRootProvider, randomId, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategy, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { DialogStylesComponent } from './dialog-styles.component';\n\nconst DIALOG_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    // Percentages, not viewport units: the pane is the item of a full-size grid cell, and that cell is\n    // what a reservation shrinks. `80vh` would size a dialog against space a docked panel covers.\n    maxHeight: '80%',\n    maxWidth: '80%',\n    width: 'min(512px, 80%)',\n    containerClass: 'et-overlay--dialog',\n    stylesComponent: DialogStylesComponent,\n    positionStrategy: () => ({ kind: 'global' }),\n  },\n  {\n    name: 'Dialog Overlay Strategy Defaults',\n  },\n);\n\nexport const provideDialogStrategyDefaults = /* @__PURE__ */ toProvideFn(DIALOG_STRATEGY_DEFAULTS_DEF);\nexport const injectDialogStrategyDefaults = /* @__PURE__ */ toInjectFn(DIALOG_STRATEGY_DEFAULTS_DEF);\n\nconst DIALOG_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectDialogStrategyDefaults();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}): OverlayStrategy => {\n      const cfg = mergeOverlayBreakpointConfigs(defaults, config);\n\n      return {\n        id: randomId(),\n        config: cfg,\n        onBeforeEnter: (context) => context.lifecycle.enter(),\n        onBeforeLeave: (context) => context.lifecycle.leave(),\n      };\n    };\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Dialog Overlay Strategy',\n  },\n);\n\nexport const provideDialogStrategy = /* @__PURE__ */ toProvideFn(DIALOG_STRATEGY_DEF);\nexport const injectDialogStrategy = /* @__PURE__ */ toInjectFn(DIALOG_STRATEGY_DEF);\n\nexport const dialogOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectDialogStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import { ElementRef } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { OverlayRef } from './overlay-ref';\n\nexport const getClosestOverlay = (element: ElementRef<HTMLElement>, openOverlays: OverlayRef<object, unknown>[]) => {\n  const nativeElement = element.nativeElement;\n\n  return openOverlays.find((overlay) => overlay.elements?.paneElement.contains(nativeElement)) ?? null;\n};\n\nconst resolveOriginElement = (origin: Element | Event | undefined): Element | null => {\n  if (origin instanceof Element) {\n    return origin;\n  }\n\n  if (origin instanceof Event && origin.target instanceof Element) {\n    return origin.target;\n  }\n\n  return null;\n};\n\nexport type OverlayTreeContainmentOptions = {\n  /** The pointerdown/click target to test. */\n  target: Node;\n  /** The panel whose tree defines \"inside\" - typically the anchored panel's own pane. */\n  rootPane: HTMLElement;\n  /** All currently open overlays (from the overlay manager). */\n  openOverlays: OverlayRef<object, unknown>[];\n};\n\n/**\n * True when `target` is inside `rootPane` or inside any open overlay transitively anchored from\n * within it. A nested popover (a select body, menu, tooltip, …) opened from inside a panel mounts\n * as a sibling pane in the overlay root - not a DOM descendant - so a plain `pane.contains(target)`\n * misses it. An anchored panel uses this so a pointerdown in a child popover it opened does not read\n * as an outside-close. Nesting is resolved by each overlay's `origin` (its anchor/trigger element)\n * living inside an ancestor pane, so popovers nested several levels deep are covered.\n */\nexport const isTargetInsideOverlayTree = ({ target, rootPane, openOverlays }: OverlayTreeContainmentOptions) => {\n  const treePanes = new Set<HTMLElement>([rootPane]);\n\n  // Grow the set until no newly-anchored pane is added - an overlay whose origin sits inside a pane\n  // already in the tree is itself part of the tree, and may in turn anchor deeper ones.\n  let grew = true;\n  while (grew) {\n    grew = false;\n\n    for (const overlay of openOverlays) {\n      const pane = overlay.elements?.paneElement;\n\n      if (!pane || treePanes.has(pane)) {\n        continue;\n      }\n\n      const originElement = resolveOriginElement(overlay.config.origin);\n\n      if (originElement && [...treePanes].some((treePane) => treePane.contains(originElement))) {\n        treePanes.add(pane);\n        grew = true;\n      }\n    }\n  }\n\n  return [...treePanes].some((pane) => pane.contains(target));\n};\n\nexport type ResolveClosestOverlayOptions = {\n  overlayRef: OverlayRef<object, unknown> | null;\n  element: ElementRef<HTMLElement>;\n  openOverlays: OverlayRef<object, unknown>[];\n};\n\n/** Returns the given ref or resolves the overlay the element is rendered inside of. Throws if neither exists. */\nexport const resolveClosestOverlay = (options: ResolveClosestOverlayOptions): OverlayRef<object, unknown> => {\n  const { overlayRef, element, openOverlays } = options;\n  const resolved = overlayRef ?? getClosestOverlay(element, openOverlays);\n\n  if (!resolved) {\n    throw new RuntimeError(\n      OVERLAY_ERROR_CODES.NO_CLOSEST_OVERLAY,\n      '[Overlay] No overlay found. The element must be rendered inside an open overlay.',\n    );\n  }\n\n  return resolved;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The header/body/footer grid chrome for an overlay's structured content, as a styles-only\n * component mounted by `OverlayMainDirective`.\n *\n * `OverlayHeaderDirective`, `OverlayBodyComponent` and `OverlayFooterDirective` all require an\n * `OverlayMainDirective` ancestor, so mounting from its constructor guarantees this sheet is in\n * the document before any of them can render. Referenced only through `OVERLAY_CONTENT_IMPORTS`,\n * so an overlay with fully custom content does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-main-styles',\n  template: '',\n  styleUrl: './overlay-main-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class OverlayMainStylesComponent {}\n\n/** @internal */\nexport const mountOverlayMainStyles = () => injectStyleManager().mount(OverlayMainStylesComponent);\n","import { Directive, ElementRef, InjectionToken, OnInit, booleanAttribute, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { injectOverlayManager } from './overlay-manager';\nimport { mountOverlayMainStyles } from './overlay-main-styles.component';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nexport const OVERLAY_MAIN_TOKEN = new InjectionToken<OverlayMainDirective>('OVERLAY_MAIN_TOKEN');\n\n@Directive({\n  selector: '[etOverlayMain], et-overlay-main',\n  providers: [\n    {\n      provide: OVERLAY_MAIN_TOKEN,\n      useExisting: OverlayMainDirective,\n    },\n  ],\n  host: {\n    '[class.et-overlay-main]': 'enabled()',\n  },\n})\nexport class OverlayMainDirective implements OnInit {\n  private parent = inject(OVERLAY_MAIN_TOKEN, { optional: true, skipSelf: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private overlayManager = injectOverlayManager();\n\n  public enabled = input(true, { alias: 'etOverlayMain', transform: booleanAttribute });\n\n  constructor() {\n    mountOverlayMainStyles();\n  }\n\n  public ngOnInit() {\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n\n    if (this.parent) {\n      if (this.overlayRef.id === this.parent.overlayRef?.id && this.parent.enabled() && this.enabled()) {\n        throw new RuntimeError(\n          OVERLAY_ERROR_CODES.NESTED_OVERLAY_MAIN,\n          '[OverlayMainDirective] An overlay must not contain nested <et-overlay-main> elements or etOverlayMain directives.',\n        );\n      }\n    }\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  InjectionToken,\n  OnInit,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport {\n  RuntimeError,\n  ScrollObserverDirective,\n  ScrollObserverEndDirective,\n  ScrollObserverStartDirective,\n  nextFrame,\n  provideBoundaryElement,\n  signalElementScrollState,\n} from '@ethlete/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { OVERLAY_MAIN_TOKEN } from './overlay-main.directive';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nexport const OVERLAY_BODY_TOKEN = new InjectionToken<OverlayBodyComponent>('OVERLAY_BODY_TOKEN');\n\nexport type OverlayBodyDividerType = 'static' | 'dynamic' | false;\n\n@Component({\n  selector: '[et-overlay-body], et-overlay-body',\n  template: `\n    <div class=\"et-overlay-body-container\">\n      <div class=\"et-overlay-body-start-element\" etScrollObserverStart></div>\n      <ng-content />\n      <div class=\"et-overlay-body-end-element\" etScrollObserverEnd></div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [ScrollObserverStartDirective, ScrollObserverEndDirective],\n  providers: [\n    {\n      provide: OVERLAY_BODY_TOKEN,\n      useExisting: OverlayBodyComponent,\n    },\n    provideBoundaryElement(),\n  ],\n  hostDirectives: [ScrollObserverDirective],\n  host: {\n    class: 'et-overlay-body',\n    '[class.et-overlay-body--render-dividers]': 'dividersEnabled()',\n    '[class.et-overlay-body--dynamic-dividers]': 'dynamicDividersEnabled()',\n    '[class.et-overlay-body--enable-divider-animations]': 'enableDividerAnimations()',\n    '[class.et-scrollable-body--can-scroll]': 'canScroll()',\n    '[class.et-scrollable-body--is-at-start]': 'this.dynamicDividersEnabled() ? this.isAtStart() : null',\n    '[class.et-scrollable-body--is-at-end]': 'this.dynamicDividersEnabled() ? this.isAtEnd() : null',\n  },\n})\nexport class OverlayBodyComponent implements OnInit {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private scrollObserver = inject(ScrollObserverDirective);\n  private overlayManager = injectOverlayManager();\n  private overlayMain = inject(OVERLAY_MAIN_TOKEN, { optional: true });\n\n  public dividers = input<OverlayBodyDividerType>(false);\n\n  public dividersEnabled = computed(() => this.dividers() === 'dynamic' || this.dividers() === 'static');\n  public dynamicDividersEnabled = computed(() => this.dividers() === 'dynamic');\n\n  public containerScrollState = signalElementScrollState(this.elementRef);\n\n  public canScroll = computed(() => this.containerScrollState().canScroll);\n\n  public isAtStart = computed(() => {\n    if (!this.canScroll()) return true;\n    return this.scrollObserver.isAtStart();\n  });\n  public isAtEnd = computed(() => {\n    if (!this.canScroll()) return true;\n    return this.scrollObserver.isAtEnd();\n  });\n\n  public enableDividerAnimations = signal(false);\n\n  constructor() {\n    this.scrollObserver.enabled.set(this.dynamicDividersEnabled);\n\n    nextFrame(() => this.enableDividerAnimations.set(true));\n  }\n\n  public ngOnInit() {\n    if (!this.overlayMain) {\n      throw new RuntimeError(\n        OVERLAY_ERROR_CODES.MISSING_OVERLAY_MAIN,\n        '[OverlayBodyComponent] An overlay body must be used inside an <et-overlay-main> element or a host with the etOverlayMain directive.',\n      );\n    }\n\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n  }\n\n  public scrollToTop(behavior?: ScrollBehavior) {\n    this.elementRef.nativeElement.scrollTo({ top: 0, behavior });\n  }\n}\n","import { Directive, ElementRef, InjectionToken, OnInit, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { OVERLAY_MAIN_TOKEN } from './overlay-main.directive';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nexport const OVERLAY_FOOTER_TOKEN = new InjectionToken<OverlayFooterDirective>('OVERLAY_FOOTER_TOKEN');\n\n@Directive({\n  selector: '[etOverlayFooter], et-overlay-footer',\n  providers: [\n    {\n      provide: OVERLAY_FOOTER_TOKEN,\n      useExisting: OverlayFooterDirective,\n    },\n  ],\n  host: {\n    class: 'et-overlay-footer',\n  },\n})\nexport class OverlayFooterDirective implements OnInit {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private overlayManager = injectOverlayManager();\n  private overlayMain = inject(OVERLAY_MAIN_TOKEN, { optional: true });\n\n  public ngOnInit() {\n    if (!this.overlayMain) {\n      throw new RuntimeError(\n        OVERLAY_ERROR_CODES.MISSING_OVERLAY_MAIN,\n        '[OverlayFooterDirective] An overlay footer must be used inside an <et-overlay-main> element or a host with the etOverlayMain directive.',\n      );\n    }\n\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n  }\n}\n","import { Directive, ElementRef, InjectionToken, OnInit, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { OVERLAY_ERROR_CODES } from './overlay-errors';\nimport { OVERLAY_MAIN_TOKEN } from './overlay-main.directive';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nexport const OVERLAY_HEADER_TOKEN = new InjectionToken<OverlayHeaderDirective>('OVERLAY_HEADER_TOKEN');\n\n@Directive({\n  selector: '[etOverlayHeader], et-overlay-header',\n  providers: [\n    {\n      provide: OVERLAY_HEADER_TOKEN,\n      useExisting: OverlayHeaderDirective,\n    },\n  ],\n  host: {\n    class: 'et-overlay-header',\n  },\n})\nexport class OverlayHeaderDirective implements OnInit {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private overlayManager = injectOverlayManager();\n  private overlayMain = inject(OVERLAY_MAIN_TOKEN, { optional: true });\n\n  public ngOnInit() {\n    if (!this.overlayMain) {\n      throw new RuntimeError(\n        OVERLAY_ERROR_CODES.MISSING_OVERLAY_MAIN,\n        '[OverlayHeaderDirective] An overlay header must be used inside an <et-overlay-main> element or a host with the etOverlayMain directive.',\n      );\n    }\n\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n  }\n}\n","import { Directive, ElementRef, OnInit, inject, input } from '@angular/core';\nimport { injectRenderer } from '@ethlete/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nlet uniqueId = 0;\n\n@Directive({\n  selector: '[et-overlay-title], [etOverlayTitle]',\n  exportAs: 'etOverlayTitle',\n  host: {\n    '[attr.id]': 'this.id()',\n  },\n})\nexport class OverlayTitleDirective implements OnInit {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private overlayManager = injectOverlayManager();\n  private renderer = injectRenderer();\n\n  // eslint-disable-next-line ethlete/no-native-html-input-name -- deliberately drives the host [attr.id] and aria-labelledby\n  public id = input(`et-overlay-title-${uniqueId++}`);\n\n  public ngOnInit() {\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n\n    Promise.resolve().then(() => {\n      const overlayRef = this.overlayRef;\n      const hostElement = overlayRef?.elements?.hostElement;\n\n      if (!overlayRef || !hostElement) return;\n\n      if (!overlayRef.config.ariaLabel && !hostElement.getAttribute('aria-labelledby')) {\n        this.renderer.setAttribute(hostElement, 'aria-labelledby', this.id());\n      }\n    });\n  }\n}\n","import { Component, InjectionToken, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { ColorTheme, injectErrorTheme } from '@ethlete/core';\nimport { ButtonComponent } from '../../button/button.component';\nimport { OverlayBodyComponent } from '../overlay-body.component';\nimport { OverlayFooterDirective } from '../overlay-footer.directive';\nimport { OverlayHeaderDirective } from '../overlay-header.directive';\nimport { OverlayMainDirective } from '../overlay-main.directive';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { OverlayTitleDirective } from '../overlay-title.directive';\nimport { injectAlertDialogLabels } from './alert-dialog-labels';\n\nexport const ALERT_DIALOG_INITIAL_FOCUS_ATTRIBUTE = 'data-et-alert-dialog-initial-focus';\n\nexport type AlertDialogContent = {\n  kind: 'confirm' | 'alert';\n  title: string;\n  message: string | null;\n  messageId: string;\n  confirmLabel: string | null;\n  cancelLabel: string | null;\n  acknowledgeLabel: string | null;\n  destructive: boolean;\n};\n\nexport const ALERT_DIALOG_CONTENT = new InjectionToken<AlertDialogContent>('ALERT_DIALOG_CONTENT');\n\n@Component({\n  selector: 'et-alert-dialog',\n  template: `\n    <div etOverlayHeader>\n      <h2 class=\"et-alert-dialog-title\" et-overlay-title>{{ content.title }}</h2>\n    </div>\n\n    @if (content.message) {\n      <div et-overlay-body>\n        <p [id]=\"content.messageId\" class=\"et-alert-dialog-message\">{{ content.message }}</p>\n      </div>\n    }\n\n    <div class=\"et-alert-dialog-actions\" etOverlayFooter>\n      @if (content.kind === 'confirm') {\n        <button\n          (click)=\"overlayRef.close(false)\"\n          et-button\n          variant=\"outline\"\n          type=\"button\"\n          data-et-alert-dialog-initial-focus\n        >\n          {{ cancelLabel() }}\n        </button>\n        <button [color]=\"confirmColor\" (click)=\"overlayRef.close(true)\" et-button variant=\"filled\" type=\"button\">\n          {{ confirmLabel() }}\n        </button>\n      } @else {\n        <button\n          (click)=\"overlayRef.close(true)\"\n          et-button\n          variant=\"filled\"\n          type=\"button\"\n          data-et-alert-dialog-initial-focus\n        >\n          {{ acknowledgeLabel() }}\n        </button>\n      }\n    </div>\n  `,\n  styleUrl: './alert-dialog.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ButtonComponent,\n    OverlayBodyComponent,\n    OverlayFooterDirective,\n    OverlayHeaderDirective,\n    OverlayTitleDirective,\n  ],\n  hostDirectives: [OverlayMainDirective],\n  host: {\n    class: 'et-alert-dialog',\n    '[attr.data-kind]': 'content.kind',\n  },\n})\nexport class AlertDialogComponent {\n  private labels = injectAlertDialogLabels();\n\n  protected overlayRef = inject(OVERLAY_REF);\n  protected content = inject(ALERT_DIALOG_CONTENT);\n  protected confirmColor: ColorTheme | undefined = this.content.destructive ? injectErrorTheme() : undefined;\n\n  protected confirmLabel = computed(() => this.content.confirmLabel ?? this.labels().confirm);\n  protected cancelLabel = computed(() => this.content.cancelLabel ?? this.labels().cancel);\n  protected acknowledgeLabel = computed(() => this.content.acknowledgeLabel ?? this.labels().acknowledge);\n}\n","import { Observable, defer, finalize, map, tap } from 'rxjs';\nimport { defineOverlay } from '../overlay-definition';\nimport { createOverlayOpener } from '../overlay-opener';\nimport { dialogOverlayStrategy } from '../strategies/dialog.strategy';\nimport { ALERT_DIALOG_CONTENT, AlertDialogComponent, AlertDialogContent } from './alert-dialog.component';\n\nexport type AlertDialogConfig = {\n  /** The dialog's heading, and its accessible name. */\n  title: string;\n  /** Body text, announced as the dialog's description. Line breaks are kept. */\n  message?: string;\n  /** Overrides `ALERT_DIALOG_LABELS.acknowledge` for this dialog. */\n  acknowledgeLabel?: string;\n  /** The element or event the dialog was opened from. Defaults to the focused element. */\n  origin?: HTMLElement | Event;\n};\n\nexport type ConfirmDialogConfig = Omit<AlertDialogConfig, 'acknowledgeLabel'> & {\n  /** Overrides `ALERT_DIALOG_LABELS.confirm` for this dialog. Name the action (\"Delete project\"), not \"OK\". */\n  confirmLabel?: string;\n  /** Overrides `ALERT_DIALOG_LABELS.cancel` for this dialog. */\n  cancelLabel?: string;\n  /** Renders the confirm action in the app's `type: 'error'` color theme. */\n  destructive?: boolean;\n};\n\nexport type AlertDialogOpener = {\n  /**\n   * A cold observable: subscribing opens a confirm dialog, which emits `true` when the confirm action is\n   * pressed and `false` on cancel or <kbd>Escape</kbd>, then completes. Unsubscribing early closes the dialog.\n   */\n  confirm: (config: ConfirmDialogConfig) => Observable<boolean>;\n  /**\n   * A cold observable: subscribing opens an alert dialog, which emits once when it is acknowledged or\n   * dismissed with <kbd>Escape</kbd>, then completes. Unsubscribing early closes the dialog.\n   */\n  alert: (config: AlertDialogConfig) => Observable<void>;\n};\n\nconst alertDialogOverlay = /* @__PURE__ */ defineOverlay<AlertDialogComponent, boolean>({\n  component: AlertDialogComponent,\n  strategies: /* @__PURE__ */ dialogOverlayStrategy({ width: 'min(420px, 80%)' }),\n  role: 'alertdialog',\n  closeOnOutsidePointer: false,\n  autoFocus: '[data-et-alert-dialog-initial-focus]',\n});\n\nlet nextMessageId = 0;\n\n/**\n * Creates an opener for confirm and alert dialogs (`role=\"alertdialog\"`). Must be called in an injection context.\n * Initial focus lands on the least destructive action, a press outside the dialog does nothing, and the action\n * labels come from `ALERT_DIALOG_LABELS` unless the call overrides them.\n *\n * @example\n * private dialogs = createAlertDialogOpener();\n *\n * protected deleteProject() {\n *   this.dialogs\n *     .confirm({ title: 'Delete project?', confirmLabel: 'Delete', destructive: true })\n *     .pipe(filter(Boolean), switchMap(() => this.api.deleteProject()))\n *     .subscribe();\n * }\n */\nexport const createAlertDialogOpener = (): AlertDialogOpener => {\n  const opener = createOverlayOpener(alertDialogOverlay);\n\n  const open = (content: Omit<AlertDialogContent, 'messageId'>, origin: HTMLElement | Event | undefined) =>\n    defer(() => {\n      const messageId = `et-alert-dialog-message-${nextMessageId++}`;\n      let settled = false;\n\n      const ref = opener.open({\n        origin,\n        ariaDescribedBy: content.message ? messageId : null,\n        providers: [{ provide: ALERT_DIALOG_CONTENT, useValue: { ...content, messageId } }],\n      });\n\n      return ref.afterClosed().pipe(\n        tap(() => (settled = true)),\n        map((result) => result === true),\n        finalize(() => {\n          if (!settled) ref.close();\n        }),\n      );\n    });\n\n  return {\n    confirm: (config) =>\n      open(\n        {\n          kind: 'confirm',\n          title: config.title,\n          message: config.message ?? null,\n          confirmLabel: config.confirmLabel ?? null,\n          cancelLabel: config.cancelLabel ?? null,\n          acknowledgeLabel: null,\n          destructive: config.destructive ?? false,\n        },\n        config.origin,\n      ),\n    alert: (config) =>\n      open(\n        {\n          kind: 'alert',\n          title: config.title,\n          message: config.message ?? null,\n          confirmLabel: null,\n          cancelLabel: null,\n          acknowledgeLabel: config.acknowledgeLabel ?? null,\n          destructive: false,\n        },\n        config.origin,\n      ).pipe(map((): void => undefined)),\n  };\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, TemplateRef, ViewEncapsulation, input } from '@angular/core';\nimport { OverlaySurfaceContext } from './headless/overlay-surface.directive';\n\n@Component({\n  selector: 'et-overlay-template-host',\n  templateUrl: './overlay-template-host.component.html',\n  styleUrl: './overlay-template-host.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: 'et-overlay-template-host',\n  },\n})\nexport class OverlayTemplateHostComponent {\n  protected template = input.required<TemplateRef<OverlaySurfaceContext>>();\n  protected context = input.required<OverlaySurfaceContext>();\n}\n","<ng-container [ngTemplateOutlet]=\"template()\" [ngTemplateOutletContext]=\"context()\" />\n","import {\n  OverlayRuntimePositionStrategy,\n  OverlayRuntimeShiftOptions,\n  anchoredOverlayPosition,\n  enableAnchoredOverlayPositionExtras,\n  randomId,\n} from '@ethlete/core';\nimport { OffsetOptions, Padding, Placement } from '@floating-ui/dom';\nimport { OverlayBreakpointConfig, OverlayStrategy, OverlayStrategyBreakpoint } from './overlay-strategy.types';\n\nexport type AnchoredOverlayStrategyOptions = {\n  containerClass?: string | string[];\n  hostClass?: string | string[];\n  maxWidth?: number | string;\n  maxHeight?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n\n  placement?: Placement;\n  fallbackPlacements?: Placement[];\n  offset?: OffsetOptions | null;\n  arrowPadding?: Padding | null;\n  viewportPadding?: Padding | null;\n  shift?: boolean | OverlayRuntimeShiftOptions;\n  autoResize?: boolean;\n  /**\n   * Minimum space (px) the placement's own side must offer before the pane moves to the opposite one.\n   * Keeps a scrollable pane below its field with a shorter list rather than flipping it above, and -\n   * unlike `fallbackPlacements` - is never re-decided by the pane's content changing while it is\n   * open. Requires `autoResize`; replaces `fallbackPlacements`.\n   */\n  minAvailableSpace?: number;\n  autoHide?: boolean;\n  autoCloseIfReferenceHidden?: boolean;\n  mirrorWidth?: boolean;\n\n  /** Render a floating-ui-positioned arrow on the container pointing at the origin. */\n  arrow?: boolean;\n};\n\nexport type CenteredOverlayStrategyOptions = {\n  containerClass?: string | string[];\n  hostClass?: string | string[];\n  maxWidth?: number | string;\n  maxHeight?: number | string;\n  minWidth?: number | string;\n  minHeight?: number | string;\n};\n\nexport type AnchoredPositionOptions = Pick<\n  AnchoredOverlayStrategyOptions,\n  | 'placement'\n  | 'fallbackPlacements'\n  | 'offset'\n  | 'arrowPadding'\n  | 'viewportPadding'\n  | 'shift'\n  | 'autoResize'\n  | 'minAvailableSpace'\n  | 'autoHide'\n  | 'autoCloseIfReferenceHidden'\n  | 'mirrorWidth'\n>;\n\nexport const buildAnchoredRuntimePositionStrategy =\n  (options: AnchoredPositionOptions = {}) =>\n  (origin?: Element): OverlayRuntimePositionStrategy => {\n    // the strategy exposes autoResize/autoHide/arrow, all of which need the extra middleware\n    enableAnchoredOverlayPositionExtras();\n\n    return origin\n      ? anchoredOverlayPosition({\n          referenceElement: origin,\n          placement: options.placement,\n          fallbackPlacements: options.fallbackPlacements,\n          offset: options.offset,\n          arrowPadding: options.arrowPadding,\n          viewportPadding: options.viewportPadding,\n          shift: options.shift,\n          autoResize: options.autoResize,\n          minAvailableSpace: options.minAvailableSpace,\n          autoHide: options.autoHide,\n          autoCloseIfReferenceHidden: options.autoCloseIfReferenceHidden,\n          mirrorWidth: options.mirrorWidth,\n        })\n      : { kind: 'global' };\n  };\n\nconst buildAnchoredConfig = (options: AnchoredOverlayStrategyOptions): OverlayBreakpointConfig => ({\n  containerClass: options.containerClass,\n  hostClass: options.hostClass,\n  maxWidth: options.maxWidth,\n  maxHeight: options.maxHeight,\n  minWidth: options.minWidth,\n  minHeight: options.minHeight,\n  arrow: options.arrow,\n  positionStrategy: buildAnchoredRuntimePositionStrategy(options),\n});\n\nexport const anchoredOverlayStrategy = (\n  options: AnchoredOverlayStrategyOptions = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategy: OverlayStrategy = {\n      id: randomId(),\n      config: buildAnchoredConfig(options),\n    };\n\n    return [{ strategy }];\n  };\n};\n\nexport const centeredOverlayStrategy = (\n  options: CenteredOverlayStrategyOptions = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategy: OverlayStrategy = {\n      id: randomId(),\n      config: {\n        containerClass: options.containerClass,\n        hostClass: options.hostClass,\n        maxWidth: options.maxWidth,\n        maxHeight: options.maxHeight,\n        minWidth: options.minWidth,\n        minHeight: options.minHeight,\n        positionStrategy: () => ({ kind: 'center' }),\n      },\n    };\n\n    return [{ strategy }];\n  };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The anchored dialog's default enter/leave animation, as a styles-only component mounted by the\n * anchored-dialog strategy.\n *\n * Referenced only from that strategy, so an app that never opens one does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-anchored-dialog-styles',\n  template: '',\n  styleUrl: './anchored-dialog-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AnchoredDialogStylesComponent {}\n","import {\n  defineRootProvider,\n  defineStaticRootProvider,\n  forceReflow,\n  injectRenderer,\n  nextFrame,\n  randomId,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { AnchoredPositionOptions, buildAnchoredRuntimePositionStrategy } from './anchored.strategy';\nimport { getOriginCoordinatesAndDimensions } from './overlay-origin';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport {\n  OverlayBreakpointConfig,\n  OverlayStrategy,\n  OverlayStrategyBreakpoint,\n  OverlayStrategyContext,\n} from './overlay-strategy.types';\nimport { AnchoredDialogStylesComponent } from './anchored-dialog-styles.component';\n\nconst DEFAULT_ANCHORED_DIALOG_POSITION: AnchoredPositionOptions = {\n  placement: 'bottom-end',\n  fallbackPlacements: ['top-end', 'bottom-start', 'top-start'],\n  offset: 10,\n  arrowPadding: 16,\n  shift: true,\n  autoResize: true,\n};\n\nexport type AnchoredDialogOverlayStrategyOptions = Partial<OverlayBreakpointConfig> & AnchoredPositionOptions;\n\nconst ANCHORED_DIALOG_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    maxHeight: '80vh',\n    maxWidth: '80vw',\n    minWidth: '288px',\n    containerClass: 'et-overlay--anchored-dialog',\n    stylesComponent: AnchoredDialogStylesComponent,\n    positionStrategy: /* @__PURE__ */ buildAnchoredRuntimePositionStrategy(DEFAULT_ANCHORED_DIALOG_POSITION),\n    applyTransformOrigin: true,\n    arrow: true,\n    hasBackdrop: false,\n  },\n  {\n    name: 'Anchored Dialog Overlay Strategy Defaults',\n  },\n);\n\nexport const provideAnchoredDialogStrategyDefaults = /* @__PURE__ */ toProvideFn(ANCHORED_DIALOG_STRATEGY_DEFAULTS_DEF);\nexport const injectAnchoredDialogStrategyDefaults = /* @__PURE__ */ toInjectFn(ANCHORED_DIALOG_STRATEGY_DEFAULTS_DEF);\n\nconst ANCHORED_DIALOG_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectAnchoredDialogStrategyDefaults();\n    const renderer = injectRenderer();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}): OverlayStrategy => {\n      const cfg = mergeOverlayBreakpointConfigs(defaults, config);\n\n      // must run while the pane is untransformed - both hooks are called before the enter/leave classes land\n      const applyOriginTransformOrigin = (context: OverlayStrategyContext, origin: { x: number; y: number }) => {\n        const { containerEl } = context;\n        const overlayRect = containerEl.getBoundingClientRect();\n\n        renderer.setStyle(containerEl, {\n          transformOrigin: `${origin.x - overlayRect.left}px ${origin.y - overlayRect.top}px`,\n        });\n      };\n\n      return {\n        id: randomId(),\n        config: cfg,\n\n        onBeforeEnter: (context) => {\n          if (!context.origin || !cfg.applyTransformOrigin) {\n            context.lifecycle.enter();\n\n            return;\n          }\n\n          const originData = getOriginCoordinatesAndDimensions(context.origin);\n          if (!originData) {\n            context.lifecycle.enter();\n\n            return;\n          }\n\n          applyOriginTransformOrigin(context, originData);\n\n          forceReflow(context.containerEl);\n\n          nextFrame(() => {\n            context.lifecycle.enter();\n          });\n        },\n\n        onSwitchedAwayFrom: (context) => {\n          renderer.setStyle(context.containerEl, { transformOrigin: null });\n        },\n\n        onBeforeLeave: (context) => {\n          if (!context.origin || !cfg.applyTransformOrigin) {\n            context.lifecycle.leave();\n\n            return;\n          }\n\n          const originData = getOriginCoordinatesAndDimensions(context.origin);\n          if (!originData) {\n            context.lifecycle.leave();\n\n            return;\n          }\n\n          applyOriginTransformOrigin(context, originData);\n          context.lifecycle.leave();\n        },\n      };\n    };\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Anchored Dialog Overlay Strategy',\n  },\n);\n\nexport const provideAnchoredDialogStrategy = /* @__PURE__ */ toProvideFn(ANCHORED_DIALOG_STRATEGY_DEF);\nexport const injectAnchoredDialogStrategy = /* @__PURE__ */ toInjectFn(ANCHORED_DIALOG_STRATEGY_DEF);\n\nexport const anchoredDialogOverlayStrategy = (\n  options: AnchoredDialogOverlayStrategyOptions = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectAnchoredDialogStrategy();\n\n    const {\n      placement,\n      fallbackPlacements,\n      offset,\n      arrowPadding,\n      viewportPadding,\n      shift,\n      autoResize,\n      minAvailableSpace,\n      autoHide,\n      autoCloseIfReferenceHidden,\n      mirrorWidth,\n      positionStrategy,\n      ...breakpointConfig\n    } = options;\n\n    const config: Partial<OverlayBreakpointConfig> = {\n      ...breakpointConfig,\n      positionStrategy:\n        positionStrategy ??\n        buildAnchoredRuntimePositionStrategy({\n          placement: placement ?? DEFAULT_ANCHORED_DIALOG_POSITION.placement,\n          fallbackPlacements: fallbackPlacements ?? DEFAULT_ANCHORED_DIALOG_POSITION.fallbackPlacements,\n          offset: offset ?? DEFAULT_ANCHORED_DIALOG_POSITION.offset,\n          arrowPadding: arrowPadding ?? DEFAULT_ANCHORED_DIALOG_POSITION.arrowPadding,\n          viewportPadding,\n          shift: shift ?? DEFAULT_ANCHORED_DIALOG_POSITION.shift,\n          autoResize: autoResize ?? DEFAULT_ANCHORED_DIALOG_POSITION.autoResize,\n          minAvailableSpace,\n          autoHide,\n          autoCloseIfReferenceHidden,\n          mirrorWidth,\n        }),\n    };\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","/** Elements whose own pointer handling wins over a drag gesture on an ancestor. */\nexport const isInteractivePointerTarget = (target: HTMLElement) => {\n  const tag = target.tagName.toLowerCase();\n\n  return tag === 'input' || tag === 'textarea' || tag === 'select' || tag === 'button' || tag === 'a';\n};\n\n/** `touch-action` values that leave the axis to whatever wants to pan on it. */\nconst PANNABLE_TOUCH_ACTIONS = {\n  x: ['auto', 'manipulation', 'pan-x', 'pan-left', 'pan-right'],\n  y: ['auto', 'manipulation', 'pan-y', 'pan-up', 'pan-down'],\n} as const;\n\n/**\n * Whether something between the pointer and `boundary` has taken `axis` for its own gesture - a\n * color picker area at `touch-action: none`, a vertical slider at `pan-x`. That is the same\n * declaration the browser intersects up the tree to decide who gets a touch, so honoring it keeps\n * one answer for both: a drag starting on such a surface belongs to it, not to the boundary.\n */\nexport const claimsPointerAxis = (target: HTMLElement, options: { boundary: HTMLElement; axis: 'x' | 'y' }) => {\n  const pannable = PANNABLE_TOUCH_ACTIONS[options.axis];\n\n  for (let node: HTMLElement | null = target; node && node !== options.boundary; node = node.parentElement) {\n    const touchAction = getComputedStyle(node).touchAction;\n\n    if (!pannable.some((value) => touchAction.includes(value))) return true;\n  }\n\n  return false;\n};\n","import {\n  AngularRenderer,\n  SwipeTracker,\n  createSwipeTracker,\n  elementCanScroll,\n  matchesReducedMotion,\n} from '@ethlete/core';\nimport { Subject, Subscription, filter, fromEvent, takeUntil, tap, timer } from 'rxjs';\nimport { claimsPointerAxis, isInteractivePointerTarget } from '../../internals/pointer-gesture-target';\nimport { OverlayRef } from '../overlay-ref';\nimport {\n  OverlayDragToDismissConfig,\n  OverlayDragToDismissDirection,\n  OverlayDragToDismissPhysicalDirection,\n} from './overlay-strategy.types';\n\n/** The momentum a dismissing gesture had when the pointer let go, so the exit can carry it. */\nexport type DragDismissMomentum = {\n  /** Release speed along the dismiss axis in px/s. Always positive. */\n  speed: number;\n\n  /** How far the overlay still has to travel to clear its docked edge, in px. */\n  remainingDistance: number;\n};\n\nexport type DragToDismissContext = {\n  element: HTMLElement;\n  overlayRef: OverlayRef<object, unknown>;\n  config: OverlayDragToDismissConfig;\n  renderer: AngularRenderer;\n\n  /**\n   * Called immediately before the gesture closes the overlay, with the momentum of the release. The\n   * sheet strategy uses it to give the leave transition the speed of the swipe instead of a fixed\n   * duration - see `createSheetStrategy`.\n   */\n  onDismiss?: (momentum: DragDismissMomentum) => void;\n};\n\nexport type DragToDismissRef = {\n  unsubscribe: () => void;\n};\n\n/** The config with its direction resolved to a physical one, so the gesture math stays direction-agnostic. */\ntype ResolvedDragToDismissConfig = Omit<OverlayDragToDismissConfig, 'direction'> & {\n  direction: OverlayDragToDismissPhysicalDirection;\n};\n\n/** Distance the pointer must travel along the dismiss axis before the overlay starts following it. */\nconst COMMIT_THRESHOLD_PX = 8;\n\n/** Bounds for momentum-derived durations, so a crawl never stalls and a hard flick still animates. */\nconst MIN_MOMENTUM_DURATION_MS = 100;\nconst MAX_MOMENTUM_DURATION_MS = 350;\n\n/** Below this release speed the gesture reads as parking the overlay, not throwing it. */\nconst MIN_MOMENTUM_SPEED = 50;\n\n/**\n * Maps a logical direction onto the physical axis it points at for the element's writing direction.\n * Physical directions are returned as-is - they mean what they say in every writing direction.\n */\nconst resolvePhysicalDirection = (\n  direction: OverlayDragToDismissDirection,\n  el: HTMLElement,\n): OverlayDragToDismissPhysicalDirection => {\n  if (direction !== 'to-inline-start' && direction !== 'to-inline-end') {\n    return direction;\n  }\n\n  const isRtl = getComputedStyle(el).direction === 'rtl';\n  const pointsToStart = direction === 'to-inline-start';\n\n  return pointsToStart === isRtl ? 'to-right' : 'to-left';\n};\n\nconst isVerticalDismiss = (direction: OverlayDragToDismissPhysicalDirection) =>\n  direction === 'to-bottom' || direction === 'to-top';\n\n/** The dismiss axis as a set of conversions, so the gesture math never re-tests the direction. */\ntype DismissAxis = {\n  /** Projects a vector (movement, velocity, …) onto the axis, positive toward dismissal. */\n  project: (x: number, y: number) => number;\n\n  /** Turns an offset (`0` = docked, positive = toward dismissal) into a CSS transform. */\n  transform: (offset: number) => string;\n\n  /** The overlay's own size along the axis - the distance a full dismissal covers. */\n  extentOf: (el: HTMLElement) => number;\n};\n\nconst createDismissAxis = (direction: OverlayDragToDismissPhysicalDirection): DismissAxis => {\n  const isVertical = isVerticalDismiss(direction);\n  const sign = direction === 'to-bottom' || direction === 'to-right' ? 1 : -1;\n\n  return {\n    project: (x, y) => (isVertical ? y : x) * sign,\n    transform: (offset) => (isVertical ? `translateY(${offset * sign}px)` : `translateX(${offset * sign}px)`),\n    extentOf: (el) => (isVertical ? el.offsetHeight : el.offsetWidth),\n  };\n};\n\n/**\n * The time the pointer itself would have needed to cover `distance` at its release speed, clamped to\n * stay readable as an animation. This is what makes a settle feel like a continuation of the swipe\n * rather than a fixed transition tacked onto its end.\n */\nconst momentumDuration = (distance: number, speed: number) => {\n  if (speed < MIN_MOMENTUM_SPEED) return MIN_MOMENTUM_DURATION_MS;\n\n  const ideal = (Math.abs(distance) / speed) * 1000;\n\n  return Math.min(MAX_MOMENTUM_DURATION_MS, Math.max(MIN_MOMENTUM_DURATION_MS, ideal));\n};\n\n/** Where the overlay goes once the pointer lifts. */\ntype SwipeEndResolution =\n  | { readonly kind: 'settle'; readonly offset: number; readonly speed: number }\n  | { readonly kind: 'dismiss'; readonly speed: number; readonly remainingDistance: number };\n\n/**\n * Resting offsets along the dismiss axis, docked first. `snapPoints` are fractions of the axis, and\n * the docked position is always one of them whether or not the consumer listed it.\n */\nconst resolveSnapOffsets = (snapPoints: number[], axisExtent: number) =>\n  [...new Set([0, ...snapPoints])]\n    .filter((point) => point >= 0 && point < 1)\n    .sort((a, b) => a - b)\n    .map((point) => point * axisExtent);\n\ntype SwipeEndInput = {\n  /** Where the overlay sits when the pointer lifts, in px along the dismiss axis. */\n  currentOffset: number;\n\n  /** Release velocity projected onto the dismiss axis. Positive points toward dismissal. */\n  velocity: number;\n\n  config: ResolvedDragToDismissConfig;\n\n  axisExtent: number;\n};\n\n/**\n * Picks the target for a release against a set of snap offsets: a flick advances one offset in its\n * own direction, a slow release settles at the nearest one. Running out of offsets in the dismiss\n * direction means the overlay leaves.\n */\nconst resolveSnapEnd = (input: SwipeEndInput & { offsets: number[] }): SwipeEndResolution => {\n  const { currentOffset, velocity, offsets, axisExtent } = input;\n  const { minVelocityToDismiss = 150 } = input.config;\n  const speed = Math.abs(velocity);\n  const dismiss = { kind: 'dismiss', speed, remainingDistance: axisExtent - currentOffset } as const;\n\n  if (speed >= minVelocityToDismiss) {\n    const isFlickingAway = velocity > 0;\n    // The 1px slack keeps a flick started exactly at a snap point from picking that same point.\n    const next = isFlickingAway\n      ? offsets.find((offset) => offset > currentOffset + 1)\n      : [...offsets].reverse().find((offset) => offset < currentOffset - 1);\n\n    if (next === undefined) {\n      // Nothing left to advance to: away means out, back means the overlay is already docked.\n      return isFlickingAway ? dismiss : { kind: 'settle', offset: 0, speed };\n    }\n\n    return { kind: 'settle', offset: next, speed };\n  }\n\n  // A slow release settles wherever it is closest to - including the fully-dismissed position, which\n  // is what makes an overlay dragged most of the way out finish the job instead of springing back.\n  const nearest = [...offsets, axisExtent].reduce((best, offset) =>\n    Math.abs(offset - currentOffset) < Math.abs(best - currentOffset) ? offset : best,\n  );\n\n  return nearest === axisExtent ? dismiss : { kind: 'settle', offset: nearest, speed };\n};\n\nconst resolveSwipeEnd = (input: SwipeEndInput): SwipeEndResolution => {\n  const { currentOffset, velocity, axisExtent } = input;\n  const { minDistanceToDismiss = 150, minVelocityToDismiss = 150, snapPoints } = input.config;\n\n  if (snapPoints?.length) {\n    return resolveSnapEnd({ ...input, offsets: resolveSnapOffsets(snapPoints, axisExtent) });\n  }\n\n  if (currentOffset >= minDistanceToDismiss || velocity >= minVelocityToDismiss) {\n    return { kind: 'dismiss', speed: Math.abs(velocity), remainingDistance: axisExtent - currentOffset };\n  }\n\n  return { kind: 'settle', offset: 0, speed: Math.abs(velocity) };\n};\n\nconst recursiveFindScrollableParent = (\n  el: HTMLElement,\n  direction: OverlayDragToDismissPhysicalDirection,\n): HTMLElement | null => {\n  if (!el) return null;\n\n  if (isVerticalDismiss(direction)) {\n    if (elementCanScroll(el, 'y')) {\n      return el;\n    }\n  } else {\n    if (elementCanScroll(el, 'x')) {\n      return el;\n    }\n  }\n\n  if (!el.parentElement || el.classList.contains('et-overlay')) return null;\n\n  return recursiveFindScrollableParent(el.parentElement, direction);\n};\n\nconst shouldCancelDragForScrollableElement = (\n  scrollableElement: HTMLElement,\n  direction: OverlayDragToDismissPhysicalDirection,\n) => {\n  if (direction === 'to-bottom') {\n    return scrollableElement.scrollTop !== 0;\n  } else if (direction === 'to-top') {\n    return Math.round(scrollableElement.scrollTop) !== scrollableElement.scrollHeight - scrollableElement.clientHeight;\n  } else if (direction === 'to-right') {\n    return scrollableElement.scrollLeft !== 0;\n  } else {\n    return Math.round(scrollableElement.scrollLeft) !== scrollableElement.scrollWidth - scrollableElement.clientWidth;\n  }\n};\n\n/**\n * Enables drag-to-dismiss functionality on an overlay element.\n * Returns a cleanup function to disable the feature.\n */\nexport const enableDragToDismiss = (context: DragToDismissContext): DragToDismissRef => {\n  const { element: el, overlayRef, renderer, onDismiss } = context;\n  const config: ResolvedDragToDismissConfig = {\n    ...context.config,\n    direction: resolvePhysicalDirection(context.config.direction, el),\n  };\n  const axis = createDismissAxis(config.direction);\n  const dismissAxisName = isVerticalDismiss(config.direction) ? 'y' : 'x';\n  const document = el.ownerDocument;\n  const stop$ = new Subject<void>();\n\n  let tracker: SwipeTracker | null = null;\n  let activePointerId: number | null = null;\n  let isCommitted = false;\n  let axisExtent = 0;\n\n  /** Where the overlay sits right now, in px along the dismiss axis. Non-zero while at a snap point. */\n  let currentOffset = 0;\n  /** Where it sat when the current gesture began, so a drag composes with the offset it started from. */\n  let gestureStartOffset = 0;\n  /** The in-flight settle transition, if any. */\n  let settleSub: Subscription | null = null;\n\n  let isSelectionActive = false;\n  let savedUserSelect: string | null = null;\n\n  const unlockSelection = () => {\n    if (savedUserSelect === null) return;\n    renderer.setStyle(document.body, { userSelect: savedUserSelect || null });\n    savedUserSelect = null;\n  };\n\n  const lockSelection = () => {\n    if (savedUserSelect !== null) return;\n    savedUserSelect = document.body.style.userSelect ?? '';\n    renderer.setStyle(document.body, { userSelect: 'none' });\n  };\n\n  /** Drops the gesture state. The overlay keeps whatever transform it currently has. */\n  const forgetGesture = () => {\n    tracker = null;\n    activePointerId = null;\n    isCommitted = false;\n  };\n\n  /**\n   * Drops the inline transition, which lands the overlay on its settle target instantly. Only the\n   * docked position may drop the inline transform too - a snap point has to keep holding the overlay\n   * in place once the transition is gone.\n   */\n  const finishSettle = () => {\n    settleSub?.unsubscribe();\n    settleSub = null;\n    renderer.setStyle(el, currentOffset ? { transition: null } : { transition: null, transform: null });\n  };\n\n  const settleAt = (offset: number, speed: number) => {\n    const duration = Math.round(\n      matchesReducedMotion(el) ? MIN_MOMENTUM_DURATION_MS : momentumDuration(offset - currentOffset, speed),\n    );\n\n    currentOffset = offset;\n    settleSub?.unsubscribe();\n\n    renderer.setStyle(el, {\n      transition: `transform ${duration}ms var(--ease-out-3)`,\n      transform: axis.transform(offset),\n    });\n\n    settleSub = timer(duration).pipe(takeUntil(stop$), tap(finishSettle)).subscribe();\n  };\n\n  const cancelDrag = () => {\n    unlockSelection();\n    settleAt(gestureStartOffset, 0);\n    forgetGesture();\n  };\n\n  const endGesture = () => {\n    const wasCommitted = isCommitted;\n    const activeTracker = tracker;\n\n    unlockSelection();\n    forgetGesture();\n\n    if (!wasCommitted || !activeTracker || isSelectionActive) return;\n\n    const { pixelPerSecondX, pixelPerSecondY } = activeTracker.end();\n    const velocity = axis.project(pixelPerSecondX, pixelPerSecondY);\n    const resolution = resolveSwipeEnd({ currentOffset, velocity, config, axisExtent });\n\n    if (resolution.kind === 'dismiss') {\n      onDismiss?.({ speed: resolution.speed, remainingDistance: resolution.remainingDistance });\n      overlayRef.closeVia('drag');\n\n      return;\n    }\n\n    settleAt(resolution.offset, resolution.speed);\n  };\n\n  fromEvent<PointerEvent>(el, 'pointerdown')\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      tap((event) => {\n        if (isSelectionActive || activePointerId !== null) return;\n        if (!event.isPrimary || (event.pointerType === 'mouse' && event.button !== 0)) return;\n        if (isInteractivePointerTarget(event.target as HTMLElement)) return;\n        if (claimsPointerAxis(event.target as HTMLElement, { boundary: el, axis: dismissAxisName })) return;\n\n        // A settle still animating would otherwise smooth the drag and leave the overlay's real\n        // position behind its tracked one. Land it first so the finger takes over from a known spot.\n        finishSettle();\n\n        tracker = createSwipeTracker(event);\n        activePointerId = event.pointerId;\n        isCommitted = false;\n        gestureStartOffset = currentOffset;\n        axisExtent = axis.extentOf(el);\n      }),\n    )\n    .subscribe();\n\n  fromEvent<Event>(document, 'selectionchange')\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      tap(() => {\n        const selection = document.getSelection();\n\n        if (!selection || !selection.toString().length) {\n          isSelectionActive = false;\n\n          return;\n        }\n\n        isSelectionActive = true;\n\n        if (isCommitted) {\n          cancelDrag();\n        } else {\n          forgetGesture();\n        }\n      }),\n    )\n    .subscribe();\n\n  // Pointer events cannot suppress native scrolling - `preventDefault` on `pointermove` is ignored,\n  // and `touch-action` is no help here because it would also disable scrolling inside the overlay\n  // body, which pans on the very axis the gesture uses. So the gesture itself runs on pointer events\n  // while this one non-passive listener does nothing but keep the page still once it has committed.\n  fromEvent<TouchEvent>(el, 'touchmove', { passive: false })\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      tap((event) => {\n        if (isCommitted && event.cancelable) event.preventDefault();\n      }),\n    )\n    .subscribe();\n\n  // Listening on the document rather than the element covers the pre-commit moves, which happen\n  // before `setPointerCapture` retargets anything to the overlay.\n  fromEvent<PointerEvent>(document, 'pointermove')\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      filter((event) => event.pointerId === activePointerId),\n      tap((event) => {\n        if (tracker === null || isSelectionActive) return;\n\n        const { movementX, movementY } = tracker.update(event);\n        const travelled = axis.project(movementX, movementY);\n\n        if (!isCommitted) {\n          // Travel back toward the docked edge only counts when there is somewhere to go back to:\n          // sitting at a snap point it drags the overlay in, but fully docked it is not this\n          // gesture's business and must stay available to whatever else wants the pointer.\n          const committedDistance = gestureStartOffset > 0 ? Math.abs(travelled) : travelled;\n\n          if (committedDistance < COMMIT_THRESHOLD_PX) return;\n\n          // The threshold doubles as the window in which the browser may claim the gesture for a\n          // scroll: touch input starting on already-scrolled content is a scroll, not a drag.\n          if (event.pointerType !== 'mouse') {\n            const scrollable = recursiveFindScrollableParent(event.target as HTMLElement, config.direction);\n\n            if (scrollable && shouldCancelDragForScrollableElement(scrollable, config.direction)) {\n              forgetGesture();\n\n              return;\n            }\n          }\n\n          isCommitted = true;\n          el.setPointerCapture(event.pointerId);\n          lockSelection();\n        }\n\n        currentOffset = Math.min(Math.max(0, gestureStartOffset + travelled), axisExtent);\n        renderer.setStyle(el, { transform: axis.transform(currentOffset) });\n      }),\n    )\n    .subscribe();\n\n  fromEvent<PointerEvent>(document, 'pointerup')\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      filter((event) => event.pointerId === activePointerId),\n      tap(endGesture),\n    )\n    .subscribe();\n\n  // The browser took the gesture over (a native scroll won the disambiguation, the pointer left the\n  // window). Put the overlay back where the gesture started rather than acting on an input the user\n  // never completed.\n  fromEvent<PointerEvent>(document, 'pointercancel')\n    .pipe(\n      takeUntil(stop$),\n      takeUntil(overlayRef.afterClosed()),\n      filter((event) => event.pointerId === activePointerId),\n      tap(() => {\n        if (isCommitted) {\n          cancelDrag();\n        } else {\n          forgetGesture();\n        }\n      }),\n    )\n    .subscribe();\n\n  return {\n    unsubscribe: () => {\n      unlockSelection();\n      stop$.next();\n      stop$.complete();\n    },\n  };\n};\n","import { AngularRenderer, matchesReducedMotion, randomId } from '@ethlete/core';\nimport { DragDismissMomentum, DragToDismissRef, enableDragToDismiss } from './overlay-drag-to-dismiss';\nimport { OverlayBreakpointConfig, OverlayStrategy, OverlayStrategyContext } from './overlay-strategy.types';\n\n/** Bounds for the momentum-driven exit, matching the drag gesture's own settle animation. */\nconst MIN_LEAVE_DURATION_MS = 100;\nconst MAX_LEAVE_DURATION_MS = 350;\n\n/** Below this release speed the swipe carries no momentum worth handing off. */\nconst MIN_LEAVE_SPEED = 50;\n\n/**\n * Gives the leave transition the speed the swipe had when it let go, instead of the fixed duration\n * the stylesheet uses for every other close. Only the duration is overridden - position is already\n * continuous, because the drag's inline transform is what the leave transition starts from.\n */\nconst applyDismissMomentum = (\n  { el, momentum }: { el: HTMLElement; momentum: DragDismissMomentum },\n  renderer: AngularRenderer,\n) => {\n  if (momentum.speed < MIN_LEAVE_SPEED || matchesReducedMotion(el)) return;\n\n  const ideal = (momentum.remainingDistance / momentum.speed) * 1000;\n  const duration = Math.round(Math.min(MAX_LEAVE_DURATION_MS, Math.max(MIN_LEAVE_DURATION_MS, ideal)));\n\n  renderer.setStyle(el, { transitionDuration: `${duration}ms` });\n};\n\n/** Shared strategy shape for all sheet variants: default enter/leave animations plus drag-to-dismiss. */\nexport const createSheetStrategy = (config: OverlayBreakpointConfig, renderer: AngularRenderer): OverlayStrategy => {\n  let dragToDismissRef: DragToDismissRef | undefined;\n  let dismissMomentum: DragDismissMomentum | null = null;\n\n  const attachDragToDismiss = (context: OverlayStrategyContext) => {\n    if (!config.dragToDismiss) return;\n\n    dragToDismissRef = enableDragToDismiss({\n      config: config.dragToDismiss,\n      element: context.containerEl,\n      overlayRef: context.overlayRef,\n      renderer,\n      onDismiss: (momentum) => (dismissMomentum = momentum),\n    });\n  };\n\n  const detachDragToDismiss = () => {\n    dragToDismissRef?.unsubscribe();\n    dragToDismissRef = undefined;\n  };\n\n  return {\n    id: randomId(),\n    config,\n    onBeforeEnter: (context) => {\n      // A close interrupted by a re-open must not inherit the previous swipe's duration.\n      renderer.setStyle(context.containerEl, { transitionDuration: null });\n      dismissMomentum = null;\n      context.lifecycle.enter();\n    },\n    onAfterEnter: (context) => attachDragToDismiss(context),\n    onSwitchedTo: attachDragToDismiss,\n    onSwitchedAwayFrom: detachDragToDismiss,\n    onBeforeLeave: (context) => {\n      detachDragToDismiss();\n\n      if (dismissMomentum) {\n        applyDismissMomentum({ el: context.containerEl, momentum: dismissMomentum }, renderer);\n        dismissMomentum = null;\n      }\n\n      context.lifecycle.leave();\n    },\n  };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The four sheet strategies' default enter/leave animations and overshoot filler, as a styles-only\n * component mounted by whichever sheet strategy is in play.\n *\n * Referenced only from that strategy, so an app that never opens one does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-sheet-styles',\n  template: '',\n  styleUrl: './sheet-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SheetStylesComponent {}\n","import { defineRootProvider, defineStaticRootProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { createSheetStrategy } from './sheet-strategy-hooks';\nimport { SheetStylesComponent } from './sheet-styles.component';\n\nconst BOTTOM_SHEET_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    width: '100%',\n    maxHeight: 'calc(100% - 72px)',\n    maxWidth: '640px',\n    containerClass: 'et-overlay--bottom-sheet',\n    stylesComponent: SheetStylesComponent,\n    positionStrategy: () => ({ kind: 'global', vertical: 'end' }),\n    dragToDismiss: {\n      direction: 'to-bottom',\n    },\n  },\n  {\n    name: 'Bottom Sheet Overlay Strategy Defaults',\n  },\n);\n\nexport const provideBottomSheetStrategyDefaults = /* @__PURE__ */ toProvideFn(BOTTOM_SHEET_STRATEGY_DEFAULTS_DEF);\nexport const injectBottomSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(BOTTOM_SHEET_STRATEGY_DEFAULTS_DEF);\n\nconst BOTTOM_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectBottomSheetStrategyDefaults();\n    const renderer = injectRenderer();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}) =>\n      createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Bottom Sheet Overlay Strategy',\n  },\n);\n\nexport const provideBottomSheetStrategy = /* @__PURE__ */ toProvideFn(BOTTOM_SHEET_STRATEGY_DEF);\nexport const injectBottomSheetStrategy = /* @__PURE__ */ toInjectFn(BOTTOM_SHEET_STRATEGY_DEF);\n\nexport const bottomSheetOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectBottomSheetStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AnimatedLifecycleDirective } from '@ethlete/core';\n\n@Component({\n  selector: 'et-overlay-origin-clone',\n  template: '<ng-content />',\n  styleUrl: './overlay-origin-clone.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [AnimatedLifecycleDirective],\n  host: {\n    class: 'et-overlay-origin-clone',\n    inert: 'true',\n    // Forces a component ID distinct from the identical @ethlete/cdk twin (NG0912).\n    'data-et-components': '',\n  },\n})\nexport class OverlayOriginCloneComponent {\n  public animatedLifecycle = inject(AnimatedLifecycleDirective);\n}\n","import { ApplicationRef, ComponentRef, EnvironmentInjector, createComponent } from '@angular/core';\nimport {\n  AngularRenderer,\n  RuntimeError,\n  animationDebugLog,\n  forceReflow,\n  matchesReducedMotion,\n  nextFrame,\n} from '@ethlete/core';\nimport { filter, take, tap, timer } from 'rxjs';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { getOriginCoordinatesAndDimensions } from './overlay-origin';\nimport { OverlayOriginCloneComponent } from './overlay-origin-clone.component';\nimport { OverlayStrategyContext } from './overlay-strategy.types';\n\nexport type ViewportTransformData = {\n  viewportWidth: number;\n  viewportHeight: number;\n  rect: DOMRect;\n  scaleUpX: number;\n  scaleUpY: number;\n  viewportCenterX: number;\n  viewportCenterY: number;\n  buttonCenterX: number;\n  buttonCenterY: number;\n  cloneTranslateX: number;\n  cloneTranslateY: number;\n  containerTranslateX: number;\n  containerTranslateY: number;\n  scaleX: number;\n  scaleY: number;\n};\n\nexport type FullscreenAnimationCancellable = {\n  unsubscribe: () => void;\n};\n\nexport type FullscreenAnimationState = {\n  readonly originElement: HTMLElement | null;\n  readonly cloneComponentRef: ComponentRef<OverlayOriginCloneComponent> | null;\n  readonly subscriptions: FullscreenAnimationCancellable[];\n  readonly isOriginHidden: boolean;\n};\n\nexport type FullscreenAnimationDeps = {\n  readonly injector: EnvironmentInjector;\n  readonly document: Document;\n  readonly appRef: ApplicationRef;\n  readonly renderer: AngularRenderer;\n};\n\nconst REDUCED_ANIMATION_THRESHOLD_WIDTH = 1000;\nconst REDUCED_ANIMATION_SCALE = 0.75;\nconst CLONE_ANIMATION_TIMEOUT_MS = 500;\n\nconst REDUCED_ANIMATION_CLASS = 'et-overlay--full-screen-dialog--reduced-animation';\n\nconst ORIGIN_ATTR_OPACITY = 'data-et-origin-opacity';\nconst ORIGIN_ATTR_TRANSITION = 'data-et-origin-transition';\nconst ORIGIN_ATTR_HIDDEN_COUNT = 'data-et-origin-hidden-count';\n\nconst captureOriginStyles = (renderer: AngularRenderer, element: HTMLElement) => {\n  if (!element.hasAttribute(ORIGIN_ATTR_OPACITY)) {\n    renderer.setAttribute(element, ORIGIN_ATTR_OPACITY, element.style.opacity);\n    renderer.setAttribute(element, ORIGIN_ATTR_TRANSITION, element.style.transition);\n  }\n};\n\nconst getHiddenCount = (element: HTMLElement) => {\n  const count = element.getAttribute(ORIGIN_ATTR_HIDDEN_COUNT);\n  return count ? parseInt(count, 10) : 0;\n};\n\nconst incrementHiddenCount = (renderer: AngularRenderer, element: HTMLElement) => {\n  const count = getHiddenCount(element);\n  renderer.setAttribute(element, ORIGIN_ATTR_HIDDEN_COUNT, String(count + 1));\n};\n\nconst decrementHiddenCount = (renderer: AngularRenderer, element: HTMLElement) => {\n  const count = getHiddenCount(element);\n  const newCount = Math.max(0, count - 1);\n\n  if (newCount === 0) {\n    renderer.removeAttribute(element, ORIGIN_ATTR_HIDDEN_COUNT);\n  } else {\n    renderer.setAttribute(element, ORIGIN_ATTR_HIDDEN_COUNT, String(newCount));\n  }\n\n  return newCount;\n};\n\nconst getOriginalStyles = (element: HTMLElement): { opacity: string; transition: string } => {\n  return {\n    opacity: element.getAttribute(ORIGIN_ATTR_OPACITY) ?? '',\n    transition: element.getAttribute(ORIGIN_ATTR_TRANSITION) ?? '',\n  };\n};\n\nconst clearOriginAttributes = (renderer: AngularRenderer, element: HTMLElement) => {\n  renderer.removeAttribute(element, ORIGIN_ATTR_OPACITY, ORIGIN_ATTR_TRANSITION, ORIGIN_ATTR_HIDDEN_COUNT);\n};\n\nconst getViewportSize = (document: Document) => {\n  const visualViewport = (document.defaultView as Window | null)?.visualViewport;\n\n  if (visualViewport) {\n    return { width: visualViewport.width, height: visualViewport.height };\n  }\n\n  return {\n    width: document.documentElement.clientWidth,\n    height: document.documentElement.clientHeight,\n  };\n};\n\nconst calculateViewportTransforms = (originElement: HTMLElement, document: Document): ViewportTransformData => {\n  const { width: viewportWidth, height: viewportHeight } = getViewportSize(document);\n  const rect = originElement.getBoundingClientRect();\n\n  const scaleUpX = viewportWidth / rect.width;\n  const scaleUpY = viewportHeight / rect.height;\n\n  const viewportCenterX = viewportWidth / 2;\n  const viewportCenterY = viewportHeight / 2;\n\n  const buttonCenterX = rect.left + rect.width / 2;\n  const buttonCenterY = rect.top + rect.height / 2;\n\n  const cloneTranslateX = viewportCenterX - buttonCenterX;\n  const cloneTranslateY = viewportCenterY - buttonCenterY;\n\n  const containerTranslateX = buttonCenterX - viewportCenterX;\n  const containerTranslateY = buttonCenterY - viewportCenterY;\n\n  const scaleX = rect.width / viewportWidth;\n  const scaleY = rect.height / viewportHeight;\n\n  return {\n    viewportWidth,\n    viewportHeight,\n    rect,\n    scaleUpX,\n    scaleUpY,\n    viewportCenterX,\n    viewportCenterY,\n    buttonCenterX,\n    buttonCenterY,\n    cloneTranslateX,\n    cloneTranslateY,\n    containerTranslateX,\n    containerTranslateY,\n    scaleX,\n    scaleY,\n  };\n};\n\nconst shouldUseReducedAnimation = (options: {\n  document: Document;\n  originElement: HTMLElement | null;\n  applyTransformOrigin: boolean;\n}) => {\n  const viewportWidth = options.document.documentElement.clientWidth;\n\n  if (matchesReducedMotion(options.document.documentElement)) return true;\n  if (viewportWidth >= REDUCED_ANIMATION_THRESHOLD_WIDTH) return true;\n  if (!options.originElement) return true;\n  if (!options.applyTransformOrigin) return true;\n\n  return false;\n};\n\nconst applyCloneElementStyles = (options: {\n  renderer: AngularRenderer;\n  cloneEl: HTMLElement;\n  rect: DOMRect;\n  transforms: Pick<ViewportTransformData, 'cloneTranslateX' | 'cloneTranslateY' | 'scaleUpX' | 'scaleUpY'>;\n}) => {\n  const { renderer, cloneEl, rect, transforms } = options;\n\n  renderer.setStyle(cloneEl, {\n    top: `${rect.top}px`,\n    left: `${rect.left}px`,\n    width: `${rect.width}px`,\n    height: `${rect.height}px`,\n  });\n\n  renderer.setCssProperties(cloneEl, {\n    '--enter-from-translate-x': '0px',\n    '--enter-from-translate-y': '0px',\n    '--enter-from-scale-x': '1',\n    '--enter-from-scale-y': '1',\n    '--enter-to-translate-x': `${transforms.cloneTranslateX}px`,\n    '--enter-to-translate-y': `${transforms.cloneTranslateY}px`,\n    '--enter-to-scale-x': `${transforms.scaleUpX}`,\n    '--enter-to-scale-y': `${transforms.scaleUpY}`,\n    '--leave-from-translate-x': `${transforms.cloneTranslateX}px`,\n    '--leave-from-translate-y': `${transforms.cloneTranslateY}px`,\n    '--leave-from-scale-x': `${transforms.scaleUpX}`,\n    '--leave-from-scale-y': `${transforms.scaleUpY}`,\n    '--leave-to-translate-x': '0px',\n    '--leave-to-translate-y': '0px',\n    '--leave-to-scale-x': '1',\n    '--leave-to-scale-y': '1',\n  });\n};\n\nconst applyContainerElementStyles = (options: {\n  renderer: AngularRenderer;\n  containerEl: HTMLElement;\n  rect: DOMRect;\n  transforms: Pick<ViewportTransformData, 'scaleX' | 'scaleY' | 'containerTranslateX' | 'containerTranslateY'>;\n}) => {\n  const { renderer, containerEl, rect, transforms } = options;\n\n  renderer.setCssProperties(containerEl, {\n    '--origin-width': `${rect.width}px`,\n    '--origin-height': `${rect.height}px`,\n    '--origin-scale-x': `${transforms.scaleX}`,\n    '--origin-scale-y': `${transforms.scaleY}`,\n    '--origin-translate-x': `${transforms.containerTranslateX}px`,\n    '--origin-translate-y': `${transforms.containerTranslateY}px`,\n  });\n};\n\nconst applyReducedAnimationStyles = (options: {\n  renderer: AngularRenderer;\n  containerEl: HTMLElement;\n  originElement: HTMLElement | null;\n  applyTransformOrigin: boolean;\n  document: Document;\n}) => {\n  const { renderer, containerEl, originElement, applyTransformOrigin, document } = options;\n\n  renderer.setCssProperties(containerEl, {\n    '--origin-scale-x': `${REDUCED_ANIMATION_SCALE}`,\n    '--origin-scale-y': `${REDUCED_ANIMATION_SCALE}`,\n    '--origin-translate-x': '0px',\n    '--origin-translate-y': '0px',\n  });\n\n  // Apply transform origin if we have an origin element\n  if (originElement && applyTransformOrigin) {\n    const rect = originElement.getBoundingClientRect();\n    const { width: viewportWidth, height: viewportHeight } = getViewportSize(document);\n\n    // Calculate transform origin as percentage from viewport center\n    const originX = ((rect.left + rect.width / 2) / viewportWidth) * 100;\n    const originY = ((rect.top + rect.height / 2) / viewportHeight) * 100;\n\n    renderer.setStyle(containerEl, { transformOrigin: `${originX}% ${originY}%` });\n  } else {\n    renderer.setStyle(containerEl, { transformOrigin: 'center center' });\n  }\n\n  renderer.addClass(containerEl, REDUCED_ANIMATION_CLASS);\n};\n\nconst removeReducedAnimationClass = (renderer: AngularRenderer, containerEl: HTMLElement) => {\n  renderer.removeClass(containerEl, REDUCED_ANIMATION_CLASS);\n};\n\nexport const cleanupFullscreenAnimationStyles = (options: {\n  containerEl: HTMLElement;\n  renderer: AngularRenderer;\n  state: FullscreenAnimationState | null;\n}) => {\n  const { containerEl, renderer, state } = options;\n\n  removeReducedAnimationClass(renderer, containerEl);\n\n  renderer.setCssProperties(containerEl, {\n    '--origin-width': null,\n    '--origin-height': null,\n    '--origin-scale-x': null,\n    '--origin-scale-y': null,\n    '--origin-translate-x': null,\n    '--origin-translate-y': null,\n  });\n\n  renderer.setStyle(containerEl, { transformOrigin: null });\n\n  if (state?.originElement && state.isOriginHidden) {\n    restoreOriginElement(renderer, state.originElement);\n  }\n};\n\n// Reparented into the clone host, the content has lost the layout context that sized it - a grid\n// cell, a flex parent, a percentage against a scroll container - so it has to be pinned to the\n// measured box. Left alone it re-derives an intrinsic size and re-resolves its own `%` offsets\n// against the host, and the clone stops matching the element it came from.\nconst pinClonedContentToRect = (options: { renderer: AngularRenderer; content: HTMLElement; rect: DOMRect }) => {\n  const { renderer, content, rect } = options;\n\n  renderer.setStyle(content, {\n    inset: '0',\n    boxSizing: 'border-box',\n    width: `${rect.width}px`,\n    height: `${rect.height}px`,\n  });\n};\n\nconst updateCloneLeaveAnimationStyles = (options: {\n  renderer: AngularRenderer;\n  cloneEl: HTMLElement;\n  rect: DOMRect;\n  transforms: Pick<ViewportTransformData, 'cloneTranslateX' | 'cloneTranslateY' | 'scaleUpX' | 'scaleUpY'>;\n}) => {\n  const { renderer, cloneEl, rect, transforms } = options;\n\n  renderer.setStyle(cloneEl, {\n    top: `${rect.top}px`,\n    left: `${rect.left}px`,\n    width: `${rect.width}px`,\n    height: `${rect.height}px`,\n  });\n\n  const clonedContent = cloneEl.firstElementChild;\n\n  if (clonedContent instanceof HTMLElement) {\n    pinClonedContentToRect({ renderer, content: clonedContent, rect });\n  }\n\n  renderer.setCssProperties(cloneEl, {\n    '--leave-from-translate-x': `${transforms.cloneTranslateX}px`,\n    '--leave-from-translate-y': `${transforms.cloneTranslateY}px`,\n    '--leave-from-scale-x': `${transforms.scaleUpX}`,\n    '--leave-from-scale-y': `${transforms.scaleUpY}`,\n    '--leave-to-translate-x': '0px',\n    '--leave-to-translate-y': '0px',\n    '--leave-to-scale-x': '1',\n    '--leave-to-scale-y': '1',\n  });\n};\n\nconst createOriginClone = (options: {\n  originElement: HTMLElement;\n  rect: DOMRect;\n  deps: FullscreenAnimationDeps;\n}): ComponentRef<OverlayOriginCloneComponent> => {\n  const { originElement, rect, deps } = options;\n  const { injector, appRef, document, renderer } = deps;\n\n  const cloneComponentRef = createComponent(OverlayOriginCloneComponent, {\n    environmentInjector: injector,\n  });\n\n  const clonedContent = originElement.cloneNode(true) as HTMLElement;\n  const computedStyle = document.defaultView?.getComputedStyle(originElement);\n\n  renderer.setStyle(clonedContent, {\n    margin: '0',\n    position: 'relative',\n    display: computedStyle?.display ?? null,\n  });\n\n  pinClonedContentToRect({ renderer, content: clonedContent, rect });\n\n  renderer.appendChild(cloneComponentRef.location.nativeElement, clonedContent);\n\n  appRef.attachView(cloneComponentRef.hostView);\n  renderer.appendChild(document.body, cloneComponentRef.location.nativeElement);\n\n  return cloneComponentRef;\n};\n\nconst hideOriginElement = (renderer: AngularRenderer, element: HTMLElement) => {\n  captureOriginStyles(renderer, element);\n  incrementHiddenCount(renderer, element);\n\n  renderer.setStyle(element, {\n    transition: 'none',\n    opacity: '0',\n  });\n};\n\nconst restoreOriginElement = (renderer: AngularRenderer, element: HTMLElement) => {\n  const remainingCount = decrementHiddenCount(renderer, element);\n\n  if (remainingCount === 0) {\n    const { opacity, transition } = getOriginalStyles(element);\n\n    renderer.setStyle(element, {\n      transition: 'none',\n      opacity: opacity || null,\n    });\n\n    forceReflow(element);\n\n    nextFrame(() => {\n      renderer.setStyle(element, {\n        transition: transition || null,\n      });\n    });\n\n    clearOriginAttributes(renderer, element);\n  }\n};\n\nconst createInitialState = (origin: Element | Event | undefined): FullscreenAnimationState => {\n  const originData = getOriginCoordinatesAndDimensions(origin);\n  const originElement = originData?.element ?? null;\n\n  return {\n    originElement,\n    cloneComponentRef: null,\n    subscriptions: [],\n    isOriginHidden: false,\n  };\n};\n\nconst unsubscribeAll = (state: FullscreenAnimationState) => {\n  state.subscriptions.forEach((sub) => sub.unsubscribe());\n};\n\nconst runAnimationFrame = (element: HTMLElement, callback: () => void): FullscreenAnimationCancellable => {\n  let isCancelled = false;\n\n  forceReflow(element);\n\n  nextFrame(() => {\n    if (isCancelled) return;\n\n    callback();\n  });\n\n  return {\n    unsubscribe: () => {\n      isCancelled = true;\n    },\n  };\n};\n\nconst destroyClone = (cloneComponentRef: ComponentRef<OverlayOriginCloneComponent> | null, appRef: ApplicationRef) => {\n  if (cloneComponentRef && !cloneComponentRef.hostView.destroyed) {\n    appRef.detachView(cloneComponentRef.hostView);\n    cloneComponentRef.destroy();\n  }\n};\n\nexport const startFullscreenEnterAnimation = (options: {\n  context: OverlayStrategyContext;\n  deps: FullscreenAnimationDeps;\n  applyTransformOrigin: boolean;\n  skipAnimation: boolean;\n}): FullscreenAnimationState => {\n  const { context, deps, applyTransformOrigin, skipAnimation } = options;\n  const { containerEl, lifecycle } = context;\n  const { renderer, document } = deps;\n\n  const state = createInitialState(context.origin);\n\n  const useReduced = shouldUseReducedAnimation({ document, originElement: state.originElement, applyTransformOrigin });\n\n  animationDebugLog('fullscreen', `enter start (reduced ${useReduced}, skipAnimation ${skipAnimation})`);\n\n  if (useReduced) {\n    applyReducedAnimationStyles({\n      renderer,\n      containerEl,\n      originElement: state.originElement,\n      applyTransformOrigin,\n      document,\n    });\n\n    if (skipAnimation) {\n      lifecycle.forceEnteredState();\n    } else {\n      state.subscriptions.push(runAnimationFrame(containerEl, () => lifecycle.enter()));\n    }\n\n    return state;\n  }\n\n  removeReducedAnimationClass(renderer, containerEl);\n\n  if (!state.originElement) {\n    throw new RuntimeError(\n      OVERLAY_ERROR_CODES.MISSING_ANIMATION_ORIGIN,\n      '[startFullscreenEnterAnimation] The full-screen enter animation grows the overlay out of its origin element, so it cannot run without one. Pass `origin` in the overlay config, or let the strategy fall back to the reduced animation.',\n      { context },\n    );\n  }\n\n  const transforms = calculateViewportTransforms(state.originElement, document);\n  const cloneComponentRef = createOriginClone({ originElement: state.originElement, rect: transforms.rect, deps });\n  const cloneEl = cloneComponentRef.location.nativeElement as HTMLElement;\n\n  applyCloneElementStyles({ renderer, cloneEl, rect: transforms.rect, transforms });\n  applyContainerElementStyles({ renderer, containerEl, rect: transforms.rect, transforms });\n  renderer.setStyle(containerEl, { transformOrigin: 'center center' });\n\n  const mutableState = { isOriginHidden: false };\n\n  const newState: FullscreenAnimationState = {\n    ...state,\n    cloneComponentRef,\n    get isOriginHidden() {\n      return mutableState.isOriginHidden;\n    },\n  };\n\n  if (skipAnimation) {\n    cloneComponentRef.instance.animatedLifecycle.forceEnteredState();\n    lifecycle.forceEnteredState();\n    hideOriginElement(renderer, state.originElement);\n    mutableState.isOriginHidden = true;\n  } else {\n    newState.subscriptions.push(\n      runAnimationFrame(cloneEl, () => {\n        cloneComponentRef.instance.animatedLifecycle.enter();\n        lifecycle.enter();\n        hideOriginElement(renderer, state.originElement as HTMLElement);\n        mutableState.isOriginHidden = true;\n      }),\n    );\n  }\n\n  return newState;\n};\n\nexport const startFullscreenLeaveAnimation = (options: {\n  context: OverlayStrategyContext;\n  state: FullscreenAnimationState;\n  deps: FullscreenAnimationDeps;\n  applyTransformOrigin: boolean;\n}): FullscreenAnimationState => {\n  const { context, state, deps, applyTransformOrigin } = options;\n  const { containerEl, lifecycle } = context;\n  const { renderer, document } = deps;\n\n  unsubscribeAll(state);\n\n  const useReduced = shouldUseReducedAnimation({ document, originElement: state.originElement, applyTransformOrigin });\n\n  animationDebugLog('fullscreen', `leave start (reduced ${useReduced}, lifecycle state \"${lifecycle.state$.value}\")`);\n\n  if (useReduced) {\n    destroyClone(state.cloneComponentRef, deps.appRef);\n\n    if (state.originElement && state.isOriginHidden) {\n      restoreOriginElement(renderer, state.originElement);\n    }\n\n    applyReducedAnimationStyles({\n      renderer,\n      containerEl,\n      originElement: state.originElement,\n      applyTransformOrigin,\n      document,\n    });\n    lifecycle.leave();\n\n    return {\n      ...state,\n      cloneComponentRef: null,\n      subscriptions: [],\n      isOriginHidden: false,\n    };\n  }\n\n  removeReducedAnimationClass(renderer, containerEl);\n\n  if (!state.originElement) {\n    lifecycle.leave();\n\n    return state;\n  }\n\n  const transforms = calculateViewportTransforms(state.originElement, document);\n\n  let { cloneComponentRef } = state;\n  let isOriginHidden = state.isOriginHidden;\n\n  if (!cloneComponentRef) {\n    cloneComponentRef = createOriginClone({ originElement: state.originElement, rect: transforms.rect, deps });\n    const cloneEl = cloneComponentRef.location.nativeElement as HTMLElement;\n\n    applyCloneElementStyles({ renderer, cloneEl, rect: transforms.rect, transforms });\n    applyContainerElementStyles({ renderer, containerEl, rect: transforms.rect, transforms });\n    renderer.setStyle(containerEl, { transformOrigin: 'center center' });\n\n    cloneComponentRef.instance.animatedLifecycle.forceEnteredState();\n    forceReflow(cloneEl);\n\n    hideOriginElement(renderer, state.originElement);\n    isOriginHidden = true;\n\n    nextFrame(() => {\n      cloneComponentRef?.instance.animatedLifecycle.leave();\n      lifecycle.leave();\n    });\n\n    return {\n      ...state,\n      cloneComponentRef,\n      subscriptions: [],\n      isOriginHidden,\n    };\n  } else {\n    const cloneState = cloneComponentRef.instance.animatedLifecycle.state$.value;\n\n    if (cloneState === 'init') {\n      destroyClone(cloneComponentRef, deps.appRef);\n\n      if (isOriginHidden) {\n        restoreOriginElement(renderer, state.originElement);\n        isOriginHidden = false;\n      } else {\n        hideOriginElement(renderer, state.originElement);\n        isOriginHidden = true;\n      }\n\n      applyReducedAnimationStyles({\n        renderer,\n        containerEl,\n        originElement: state.originElement,\n        applyTransformOrigin,\n        document,\n      });\n      lifecycle.leave();\n\n      return {\n        ...state,\n        cloneComponentRef: null,\n        subscriptions: [],\n        isOriginHidden,\n      };\n    }\n\n    if (cloneState === 'entering') {\n      const cloneEl = cloneComponentRef.location.nativeElement as HTMLElement;\n\n      updateCloneLeaveAnimationStyles({ renderer, cloneEl, rect: transforms.rect, transforms });\n      applyContainerElementStyles({ renderer, containerEl, rect: transforms.rect, transforms });\n\n      if (!isOriginHidden) {\n        hideOriginElement(renderer, state.originElement);\n        isOriginHidden = true;\n      }\n\n      cloneComponentRef.instance.animatedLifecycle.leave();\n      lifecycle.leave();\n\n      return {\n        ...state,\n        cloneComponentRef,\n        subscriptions: [],\n        isOriginHidden,\n      };\n    }\n\n    if (cloneState !== 'entered') {\n      cloneComponentRef.instance.animatedLifecycle.forceEnteredState();\n    }\n\n    if (!isOriginHidden) {\n      hideOriginElement(renderer, state.originElement);\n      isOriginHidden = true;\n    }\n  }\n\n  const cloneEl = cloneComponentRef.location.nativeElement as HTMLElement;\n\n  updateCloneLeaveAnimationStyles({ renderer, cloneEl, rect: transforms.rect, transforms });\n  applyContainerElementStyles({ renderer, containerEl, rect: transforms.rect, transforms });\n\n  cloneComponentRef.instance.animatedLifecycle.leave();\n  lifecycle.leave();\n\n  return {\n    ...state,\n    cloneComponentRef,\n    subscriptions: [],\n    isOriginHidden,\n  };\n};\n\nexport const cleanupFullscreenAnimation = (state: FullscreenAnimationState, deps: FullscreenAnimationDeps) => {\n  const { renderer, appRef } = deps;\n\n  unsubscribeAll(state);\n\n  const isActuallyHidden = state.originElement ? getHiddenCount(state.originElement) > 0 : false;\n\n  if (state.cloneComponentRef && !isActuallyHidden) {\n    destroyClone(state.cloneComponentRef, appRef);\n\n    return;\n  }\n\n  const restoreOrigin = () => {\n    if (state.originElement && isActuallyHidden) {\n      restoreOriginElement(renderer, state.originElement);\n    }\n  };\n\n  if (!state.cloneComponentRef) {\n    restoreOrigin();\n\n    return;\n  }\n\n  const cloneRef = state.cloneComponentRef;\n\n  if (cloneRef.hostView.destroyed) {\n    restoreOrigin();\n\n    return;\n  }\n\n  const cloneState = cloneRef.instance.animatedLifecycle.state$.value;\n\n  if (cloneState === 'left') {\n    destroyClone(cloneRef, appRef);\n    restoreOrigin();\n\n    return;\n  }\n\n  if (cloneState === 'leaving') {\n    let cleaned = false;\n\n    const doCleanup = () => {\n      if (cleaned) {\n        return;\n      }\n      cleaned = true;\n      destroyClone(cloneRef, appRef);\n      restoreOrigin();\n    };\n\n    const stateSub = cloneRef.instance.animatedLifecycle.state$\n      .pipe(\n        filter((s) => s === 'left'),\n        take(1),\n        tap(() => doCleanup()),\n      )\n      .subscribe();\n\n    const timeoutSub = timer(CLONE_ANIMATION_TIMEOUT_MS)\n      .pipe(\n        tap(() => {\n          stateSub.unsubscribe();\n          doCleanup();\n        }),\n      )\n      .subscribe();\n\n    stateSub.add(() => timeoutSub.unsubscribe());\n\n    return;\n  }\n\n  destroyClone(cloneRef, appRef);\n  restoreOrigin();\n};\n\nexport const abortFullscreenAnimation = (options: {\n  context: OverlayStrategyContext;\n  state: FullscreenAnimationState;\n  deps: FullscreenAnimationDeps;\n}) => {\n  const { context, state, deps } = options;\n  const { renderer, appRef } = deps;\n\n  unsubscribeAll(state);\n  destroyClone(state.cloneComponentRef, appRef);\n\n  cleanupFullscreenAnimationStyles({ containerEl: context.containerEl, renderer, state });\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The full-screen dialog's default enter/leave animation, as a styles-only component mounted by the\n * full-screen strategy.\n *\n * Referenced only from that strategy, so an app that never opens one does not bundle its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-overlay-full-screen-dialog-styles',\n  template: '',\n  styleUrl: './full-screen-dialog-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FullScreenDialogStylesComponent {}\n","import { ApplicationRef, DOCUMENT, EnvironmentInjector, inject } from '@angular/core';\nimport {\n  defineRootProvider,\n  defineStaticRootProvider,\n  injectRenderer,\n  randomId,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport {\n  FullscreenAnimationDeps,\n  FullscreenAnimationState,\n  abortFullscreenAnimation,\n  cleanupFullscreenAnimation,\n  startFullscreenEnterAnimation,\n  startFullscreenLeaveAnimation,\n} from './fullscreen-animation';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategy, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { FullScreenDialogStylesComponent } from './full-screen-dialog-styles.component';\n\nconst FULLSCREEN_DIALOG_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    width: '100%',\n    height: '100%',\n    containerClass: 'et-overlay--full-screen-dialog',\n    stylesComponent: FullScreenDialogStylesComponent,\n    positionStrategy: () => ({ kind: 'global', horizontal: 'stretch', vertical: 'stretch' }),\n    documentClass: 'et-overlay--full-screen-dialog-document',\n    applyTransformOrigin: true,\n    backdropClass: 'et-overlay-backdrop--hidden',\n  },\n  {\n    name: 'Fullscreen Dialog Overlay Strategy Defaults',\n  },\n);\n\nexport const provideFullscreenDialogStrategyDefaults = /* @__PURE__ */ toProvideFn(\n  FULLSCREEN_DIALOG_STRATEGY_DEFAULTS_DEF,\n);\nexport const injectFullscreenDialogStrategyDefaults = /* @__PURE__ */ toInjectFn(\n  FULLSCREEN_DIALOG_STRATEGY_DEFAULTS_DEF,\n);\n\nconst FULLSCREEN_DIALOG_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectFullscreenDialogStrategyDefaults();\n    const injector = inject(EnvironmentInjector);\n    const document = inject(DOCUMENT);\n    const appRef = inject(ApplicationRef);\n    const renderer = injectRenderer();\n\n    const deps: FullscreenAnimationDeps = { injector, document, appRef, renderer };\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}): OverlayStrategy => {\n      const cfg = mergeOverlayBreakpointConfigs(defaults, config);\n\n      let animationState: FullscreenAnimationState | null = null;\n\n      return {\n        id: randomId(),\n        config: cfg,\n\n        onBeforeEnter: (context) => {\n          animationState = startFullscreenEnterAnimation({\n            context,\n            deps,\n            applyTransformOrigin: cfg.applyTransformOrigin ?? true,\n            skipAnimation: false,\n          });\n        },\n\n        onSwitchedAwayFrom: (context) => {\n          if (animationState) {\n            abortFullscreenAnimation({ context, state: animationState, deps });\n            animationState = null;\n          }\n        },\n\n        onSwitchedTo: (context) => {\n          if (!animationState) {\n            animationState = startFullscreenEnterAnimation({\n              context,\n              deps,\n              applyTransformOrigin: cfg.applyTransformOrigin ?? true,\n              skipAnimation: true,\n            });\n          }\n        },\n\n        onBeforeLeave: (context) => {\n          if (animationState) {\n            animationState = startFullscreenLeaveAnimation({\n              context,\n              state: animationState,\n              deps,\n              applyTransformOrigin: cfg.applyTransformOrigin ?? true,\n            });\n          } else {\n            context.lifecycle.leave();\n          }\n        },\n\n        onAfterLeave: () => {\n          if (animationState) {\n            cleanupFullscreenAnimation(animationState, deps);\n            animationState = null;\n          }\n        },\n      };\n    };\n\n    return { build };\n  },\n  {\n    name: 'Fullscreen Dialog Overlay Strategy',\n  },\n);\n\nexport const provideFullscreenDialogStrategy = /* @__PURE__ */ toProvideFn(FULLSCREEN_DIALOG_STRATEGY_DEF);\nexport const injectFullscreenDialogStrategy = /* @__PURE__ */ toInjectFn(FULLSCREEN_DIALOG_STRATEGY_DEF);\n\nexport const fullScreenDialogOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectFullscreenDialogStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import { defineRootProvider, defineStaticRootProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { createSheetStrategy } from './sheet-strategy-hooks';\nimport { SheetStylesComponent } from './sheet-styles.component';\n\nconst LEFT_SHEET_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    width: '100%',\n    height: '100%',\n    maxWidth: '640px',\n    containerClass: 'et-overlay--left-sheet',\n    stylesComponent: SheetStylesComponent,\n    positionStrategy: () => ({ kind: 'global', horizontal: 'start' }),\n    dragToDismiss: {\n      direction: 'to-inline-start',\n    },\n  },\n  {\n    name: 'Left Sheet Overlay Strategy Defaults',\n  },\n);\n\nexport const provideLeftSheetStrategyDefaults = /* @__PURE__ */ toProvideFn(LEFT_SHEET_STRATEGY_DEFAULTS_DEF);\nexport const injectLeftSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(LEFT_SHEET_STRATEGY_DEFAULTS_DEF);\n\nconst LEFT_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectLeftSheetStrategyDefaults();\n    const renderer = injectRenderer();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}) =>\n      createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Left Sheet Overlay Strategy',\n  },\n);\n\nexport const provideLeftSheetStrategy = /* @__PURE__ */ toProvideFn(LEFT_SHEET_STRATEGY_DEF);\nexport const injectLeftSheetStrategy = /* @__PURE__ */ toInjectFn(LEFT_SHEET_STRATEGY_DEF);\n\nexport const leftSheetOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectLeftSheetStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import { defineRootProvider, defineStaticRootProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { createSheetStrategy } from './sheet-strategy-hooks';\nimport { SheetStylesComponent } from './sheet-styles.component';\n\nconst RIGHT_SHEET_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    width: '100%',\n    height: '100%',\n    maxWidth: '640px',\n    containerClass: 'et-overlay--right-sheet',\n    stylesComponent: SheetStylesComponent,\n    positionStrategy: () => ({ kind: 'global', horizontal: 'end' }),\n    dragToDismiss: {\n      direction: 'to-inline-end',\n    },\n  },\n  {\n    name: 'Right Sheet Overlay Strategy Defaults',\n  },\n);\n\nexport const provideRightSheetStrategyDefaults = /* @__PURE__ */ toProvideFn(RIGHT_SHEET_STRATEGY_DEFAULTS_DEF);\nexport const injectRightSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(RIGHT_SHEET_STRATEGY_DEFAULTS_DEF);\n\nconst RIGHT_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectRightSheetStrategyDefaults();\n    const renderer = injectRenderer();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}) =>\n      createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Right Sheet Overlay Strategy',\n  },\n);\n\nexport const provideRightSheetStrategy = /* @__PURE__ */ toProvideFn(RIGHT_SHEET_STRATEGY_DEF);\nexport const injectRightSheetStrategy = /* @__PURE__ */ toInjectFn(RIGHT_SHEET_STRATEGY_DEF);\n\nexport const rightSheetOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectRightSheetStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import { Breakpoint } from '@ethlete/core';\nimport { injectBottomSheetStrategy } from './bottom-sheet.strategy';\nimport { injectDialogStrategy } from './dialog.strategy';\nimport { injectFullscreenDialogStrategy } from './full-screen.strategy';\nimport { OverlayBreakpointConfig, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { injectRightSheetStrategy } from './right-sheet.strategy';\n\nexport const transformingBottomSheetToDialogOverlayStrategy = (customConfig?: {\n  bottomSheet?: OverlayBreakpointConfig;\n  dialog?: OverlayBreakpointConfig;\n  breakpoint?: Breakpoint | number;\n}): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const dialogStrategy = injectDialogStrategy();\n    const bottomSheetStrategy = injectBottomSheetStrategy();\n\n    return [\n      {\n        strategy: bottomSheetStrategy.build(customConfig?.bottomSheet),\n      },\n      {\n        breakpoint: customConfig?.breakpoint ?? 'md',\n        strategy: dialogStrategy.build(customConfig?.dialog),\n      },\n    ];\n  };\n};\n\nexport const transformingFullScreenDialogToRightSheetOverlayStrategy = (customConfig?: {\n  fullScreenDialog?: OverlayBreakpointConfig;\n  rightSheet?: OverlayBreakpointConfig;\n  breakpoint?: Breakpoint | number;\n}): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const rightSheetStrategy = injectRightSheetStrategy();\n    const fullscreenDialogStrategy = injectFullscreenDialogStrategy();\n\n    return [\n      {\n        strategy: fullscreenDialogStrategy.build(customConfig?.fullScreenDialog),\n      },\n      {\n        breakpoint: customConfig?.breakpoint ?? 'md',\n        strategy: rightSheetStrategy.build(customConfig?.rightSheet),\n      },\n    ];\n  };\n};\n\nexport const transformingFullScreenDialogToDialogOverlayStrategy = (customConfig?: {\n  fullScreenDialog?: OverlayBreakpointConfig;\n  dialog?: OverlayBreakpointConfig;\n  breakpoint?: Breakpoint | number;\n}): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const dialogStrategy = injectDialogStrategy();\n    const fullscreenDialogStrategy = injectFullscreenDialogStrategy();\n\n    return [\n      {\n        strategy: fullscreenDialogStrategy.build(customConfig?.fullScreenDialog),\n      },\n      {\n        breakpoint: customConfig?.breakpoint ?? 'md',\n        strategy: dialogStrategy.build(customConfig?.dialog),\n      },\n    ];\n  };\n};\n","import { defineRootProvider, defineStaticRootProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { mergeOverlayBreakpointConfigs } from './overlay-strategy-config-merger';\nimport { OverlayBreakpointConfig, OverlayStrategyBreakpoint } from './overlay-strategy.types';\nimport { createSheetStrategy } from './sheet-strategy-hooks';\nimport { SheetStylesComponent } from './sheet-styles.component';\n\nconst TOP_SHEET_STRATEGY_DEFAULTS_DEF = /* @__PURE__ */ defineStaticRootProvider<OverlayBreakpointConfig>(\n  {\n    width: '100%',\n    maxHeight: 'calc(100% - 72px)',\n    maxWidth: '640px',\n    containerClass: 'et-overlay--top-sheet',\n    stylesComponent: SheetStylesComponent,\n    positionStrategy: () => ({ kind: 'global', vertical: 'start' }),\n    dragToDismiss: {\n      direction: 'to-top',\n    },\n  },\n  {\n    name: 'Top Sheet Overlay Strategy Defaults',\n  },\n);\n\nexport const provideTopSheetStrategyDefaults = /* @__PURE__ */ toProvideFn(TOP_SHEET_STRATEGY_DEFAULTS_DEF);\nexport const injectTopSheetStrategyDefaults = /* @__PURE__ */ toInjectFn(TOP_SHEET_STRATEGY_DEFAULTS_DEF);\n\nconst TOP_SHEET_STRATEGY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const defaults = injectTopSheetStrategyDefaults();\n    const renderer = injectRenderer();\n\n    const build = (config: Partial<OverlayBreakpointConfig> = {}) =>\n      createSheetStrategy(mergeOverlayBreakpointConfigs(defaults, config), renderer);\n\n    return {\n      build,\n    };\n  },\n  {\n    name: 'Top Sheet Overlay Strategy',\n  },\n);\n\nexport const provideTopSheetStrategy = /* @__PURE__ */ toProvideFn(TOP_SHEET_STRATEGY_DEF);\nexport const injectTopSheetStrategy = /* @__PURE__ */ toInjectFn(TOP_SHEET_STRATEGY_DEF);\n\nexport const topSheetOverlayStrategy = (\n  config: Partial<OverlayBreakpointConfig> = {},\n): (() => OverlayStrategyBreakpoint[]) => {\n  return () => {\n    const strategyProvider = injectTopSheetStrategy();\n\n    return [\n      {\n        strategy: strategyProvider.build(config),\n      },\n    ];\n  };\n};\n","import {\n  DestroyRef,\n  Directive,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { OffsetOptions, Padding, Placement } from '@floating-ui/dom';\nimport { take, tap } from 'rxjs';\nimport { OverlayConfig, OverlayAutoFocusTarget, OverlayMode, OverlayRole } from '../overlay-config';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { injectOverlayManager } from '../overlay-manager';\nimport { OverlayRef } from '../overlay-ref';\nimport { OverlayTemplateHostComponent } from '../overlay-template-host.component';\nimport { anchoredOverlayStrategy, centeredOverlayStrategy } from '../strategies';\nimport { OverlayAnchorDirective } from './overlay-anchor.directive';\nimport { OverlaySurfaceContext, OverlaySurfaceDirective } from './overlay-surface.directive';\nimport { OverlayTriggerDirective } from './overlay-trigger.directive';\n\n@Directive({\n  selector: '[etOverlay]',\n  exportAs: 'etOverlay',\n  host: {\n    '[attr.data-overlay-open]': 'open() || null',\n    '[attr.data-overlay-mode]': 'mode()',\n  },\n})\nexport class OverlayDirective {\n  private destroyRef = inject(DestroyRef);\n  private overlayManager = injectOverlayManager();\n  private hostElement = injectHostElement();\n\n  public mode = input<OverlayMode>('non-modal');\n  // eslint-disable-next-line ethlete/no-native-html-input-name -- deliberately sets the overlay's ARIA role\n  public role = input<OverlayRole | undefined>(undefined);\n  public open = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public disableClose = input(false, { transform: booleanAttribute });\n  // eslint-disable-next-line ethlete/no-native-html-input-name -- mirrors the native autofocus behaviour on open\n  public autoFocus = input<OverlayAutoFocusTarget | string | false | undefined>(undefined);\n  public restoreFocus = input(true, { transform: booleanAttribute });\n  public hasBackdrop = input<boolean | undefined>(undefined);\n  public closeOnEscape = input(true, { transform: booleanAttribute });\n  public closeOnOutsidePointer = input(true, { transform: booleanAttribute });\n  public hostClass = input<string | string[] | undefined>(undefined);\n  public backdropClass = input<string | string[] | undefined>(undefined);\n  public panelClass = input<string | string[] | undefined>(undefined);\n  public placement = input<Placement>('bottom');\n  public fallbackPlacements = input<Placement[] | undefined>(undefined);\n  public offset = input<OffsetOptions | null>(8);\n  public viewportPadding = input<Padding | null>(8);\n  public autoResize = input(false, { transform: booleanAttribute });\n  public minAvailableSpace = input<number | undefined>(undefined);\n  public shift = input(true, { transform: booleanAttribute });\n  public autoHide = input(false, { transform: booleanAttribute });\n  public autoCloseIfReferenceHidden = input(false, { transform: booleanAttribute });\n  public mirrorWidth = input(false, { transform: booleanAttribute });\n\n  /** @internal */\n  public registeredAnchor = signal<OverlayAnchorDirective | null>(null);\n  /** @internal */\n  public registeredSurface = signal<OverlaySurfaceDirective | null>(null);\n  /** @internal */\n  public registeredTrigger = signal<OverlayTriggerDirective | null>(null);\n  /** @internal */\n  public overlayRef = signal<OverlayRef<OverlayTemplateHostComponent, unknown> | null>(null);\n\n  public isMounted = computed(() => this.overlayRef() !== null);\n\n  private originElement = computed(() => {\n    return (\n      this.registeredAnchor()?.elementRef?.nativeElement ?? this.registeredTrigger()?.elementRef?.nativeElement ?? null\n    );\n  });\n\n  constructor() {\n    effect(() => {\n      const disabled = this.disabled();\n      const shouldBeOpen = this.open();\n      const currentRef = this.overlayRef();\n\n      if (disabled) {\n        if (currentRef) {\n          untracked(() => this.hide());\n        }\n\n        if (shouldBeOpen) {\n          untracked(() => {\n            this.open.set(false);\n          });\n        }\n\n        return;\n      }\n\n      if (shouldBeOpen && !currentRef) {\n        untracked(() => {\n          this.mountOverlay();\n        });\n\n        return;\n      }\n\n      if (!shouldBeOpen && currentRef) {\n        untracked(() => {\n          currentRef.close();\n        });\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.registeredSurface()) {\n          throw new RuntimeError(\n            OVERLAY_ERROR_CODES.MISSING_OVERLAY_SURFACE,\n            '[OverlayDirective] Overlay surface not found. Add <ng-template etOverlaySurface> inside the [etOverlay] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public show() {\n    if (this.disabled()) {\n      return;\n    }\n\n    if (!this.open()) {\n      this.open.set(true);\n    }\n  }\n\n  public hide(result?: unknown) {\n    this.overlayRef()?.close(result);\n\n    if (this.open()) {\n      this.open.set(false);\n    }\n  }\n\n  public toggle() {\n    if (this.open()) {\n      this.hide();\n\n      return;\n    }\n\n    this.show();\n  }\n\n  /** @internal */\n  public unregisterTrigger(trigger: OverlayTriggerDirective) {\n    if (this.registeredTrigger() === trigger) {\n      this.registeredTrigger.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterAnchor(anchor: OverlayAnchorDirective) {\n    if (this.registeredAnchor() === anchor) {\n      this.registeredAnchor.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterSurface(surface: OverlaySurfaceDirective) {\n    if (this.registeredSurface() === surface) {\n      this.registeredSurface.set(null);\n    }\n  }\n\n  private mountOverlay() {\n    const surface = this.registeredSurface();\n    if (!surface) {\n      return;\n    }\n\n    const templateContext: OverlaySurfaceContext = {\n      $implicit: this,\n      overlay: this,\n      close: (result?: unknown) => this.hide(result),\n    };\n\n    const origin = this.originElement();\n    const isAnchored = this.mode() === 'non-modal' && origin !== null;\n    const config: OverlayConfig = {\n      autoFocus: this.autoFocus(),\n      backdropClass: this.backdropClass(),\n      closeOnEscape: this.closeOnEscape(),\n      closeOnOutsidePointer: this.closeOnOutsidePointer(),\n      bindings: [inputBinding('template', () => surface.templateRef), inputBinding('context', () => templateContext)],\n      disableClose: this.disableClose(),\n      hasBackdrop: this.hasBackdrop(),\n      hostClass: this.hostClass(),\n      mode: this.mode(),\n      origin: isAnchored ? origin : undefined,\n      panelClass: this.panelClass(),\n      strategies: isAnchored\n        ? anchoredOverlayStrategy({\n            containerClass: 'et-overlay--anchored',\n            placement: this.placement(),\n            fallbackPlacements: this.fallbackPlacements(),\n            offset: this.offset(),\n            viewportPadding: this.viewportPadding(),\n            autoResize: this.autoResize(),\n            minAvailableSpace: this.minAvailableSpace(),\n            shift: this.shift(),\n            autoHide: this.autoHide(),\n            autoCloseIfReferenceHidden: this.autoCloseIfReferenceHidden(),\n            mirrorWidth: this.mirrorWidth(),\n          })\n        : centeredOverlayStrategy({\n            containerClass: 'et-overlay--centered',\n          }),\n      restoreFocus: this.restoreFocus(),\n      role: this.role(),\n    };\n    const overlayRef = this.overlayManager.open<OverlayTemplateHostComponent>(OverlayTemplateHostComponent, config);\n\n    this.overlayRef.set(overlayRef);\n\n    overlayRef\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          this.overlayRef.set(null);\n\n          if (this.open()) {\n            this.open.set(false);\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { OverlayDirective } from './overlay.directive';\n\n@Directive({\n  selector: '[etOverlayAnchor]',\n  exportAs: 'etOverlayAnchor',\n})\nexport class OverlayAnchorDirective {\n  private overlay = inject(OverlayDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    this.overlay?.registeredAnchor.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.overlay?.unregisterAnchor(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.overlay) {\n          throw new RuntimeError(\n            OVERLAY_ERROR_CODES.ANCHOR_OUTSIDE_OVERLAY,\n            '[OverlayAnchorDirective] etOverlayAnchor must be placed inside an [etOverlay] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { OverlayDirective } from './overlay.directive';\n\nexport type OverlaySurfaceContext = {\n  $implicit: OverlayDirective;\n  overlay: OverlayDirective;\n  close: (result?: unknown) => void;\n};\n\n@Directive({\n  selector: 'ng-template[etOverlaySurface]',\n  exportAs: 'etOverlaySurface',\n})\nexport class OverlaySurfaceDirective {\n  private overlay = inject(OverlayDirective, { optional: true });\n  public templateRef = inject<TemplateRef<OverlaySurfaceContext>>(TemplateRef);\n  private destroyRef = inject(DestroyRef);\n\n  constructor() {\n    this.overlay?.registeredSurface.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.overlay?.unregisterSurface(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.overlay) {\n          throw new RuntimeError(\n            OVERLAY_ERROR_CODES.SURFACE_OUTSIDE_OVERLAY,\n            '[OverlaySurfaceDirective] etOverlaySurface must be placed inside an [etOverlay] element.',\n            { element: this.templateRef.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { OVERLAY_ERROR_CODES } from '../overlay-errors';\nimport { OverlayDirective } from './overlay.directive';\n\n@Directive({\n  selector: '[etOverlayTrigger]',\n  exportAs: 'etOverlayTrigger',\n  host: {\n    '(click)': 'toggle()',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.data-overlay-open]': 'isOpen() || null',\n  },\n})\nexport class OverlayTriggerDirective {\n  private overlay = inject(OverlayDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    this.overlay?.registeredTrigger.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.overlay?.unregisterTrigger(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.overlay) {\n          throw new RuntimeError(\n            OVERLAY_ERROR_CODES.TRIGGER_OUTSIDE_OVERLAY,\n            '[OverlayTriggerDirective] etOverlayTrigger must be placed inside an [etOverlay] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public toggle() {\n    this.overlay?.toggle();\n  }\n\n  public isOpen() {\n    return this.overlay?.open() ?? false;\n  }\n\n  public expanded() {\n    return this.overlay?.open() ?? null;\n  }\n}\n","import { Directive, ElementRef, OnInit, inject, input } from '@angular/core';\nimport { applyHostListener } from '@ethlete/core';\nimport { getClosestOverlay, resolveClosestOverlay } from './get-closest-overlay';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\n@Directive({\n  selector: '[et-overlay-close], [etOverlayClose]',\n  exportAs: 'etOverlayClose',\n  host: {\n    '[attr.aria-label]': 'ariaLabel() || null',\n    '[attr.type]': 'type()',\n  },\n})\nexport class OverlayCloseDirective implements OnInit {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private overlayManager = injectOverlayManager();\n\n  public ariaLabel = input<string>(undefined, { alias: 'aria-label' });\n  public type = input<'submit' | 'button' | 'reset'>('button');\n\n  public closeResult = input<unknown>(undefined, { alias: 'etOverlayClose' });\n  public closeResultAlt = input<unknown>(undefined, { alias: 'et-overlay-close' });\n\n  constructor() {\n    applyHostListener('click', () => {\n      const overlayRef = this.overlayRef ?? getClosestOverlay(this.elementRef, this.overlayManager.openOverlays());\n\n      overlayRef?.close(this.closeResult() ?? this.closeResultAlt());\n    });\n  }\n\n  public ngOnInit() {\n    this.overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n  }\n}\n","import { Directive, ElementRef, InjectionToken, OnDestroy, OnInit, TemplateRef, inject } from '@angular/core';\nimport { resolveClosestOverlay } from './get-closest-overlay';\nimport { injectOverlayManager } from './overlay-manager';\nimport { OVERLAY_REF, OverlayRef } from './overlay-ref';\n\nexport const OVERLAY_HEADER_TEMPLATE_TOKEN = new InjectionToken<OverlayHeaderTemplateDirective>(\n  'OVERLAY_HEADER_TEMPLATE_TOKEN',\n);\n\n@Directive({\n  selector: 'ng-template[etOverlayHeaderTemplate]',\n  providers: [\n    {\n      provide: OVERLAY_HEADER_TEMPLATE_TOKEN,\n      useExisting: OverlayHeaderTemplateDirective,\n    },\n  ],\n})\nexport class OverlayHeaderTemplateDirective implements OnInit, OnDestroy {\n  private overlayRef: OverlayRef<object, unknown> | null = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public template = inject<TemplateRef<unknown>>(TemplateRef);\n  private overlayManager = injectOverlayManager();\n  private unregister = this.overlayRef?.registerHeaderTemplate(this.template);\n\n  public ngOnInit() {\n    const overlayRef = resolveClosestOverlay({\n      overlayRef: this.overlayRef,\n      element: this.elementRef,\n      openOverlays: this.overlayManager.openOverlays(),\n    });\n\n    if (overlayRef !== this.overlayRef) {\n      this.unregister?.();\n      this.overlayRef = overlayRef;\n      this.unregister = overlayRef.registerHeaderTemplate(this.template);\n    }\n  }\n\n  public ngOnDestroy() {\n    this.unregister?.();\n  }\n}\n","import { Location } from '@angular/common';\nimport {\n  DestroyRef,\n  InjectionToken,\n  Provider,\n  Signal,\n  Type,\n  WritableSignal,\n  computed,\n  effect,\n  inject,\n  isSignal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport {\n  createComponentId,\n  defineProvider,\n  fromNextFrame,\n  injectQueryParam,\n  injectRoute,\n  toInjectFn,\n  toProvideFn,\n  toToken,\n} from '@ethlete/core';\nimport { map, switchMap } from 'rxjs';\nimport { OVERLAY_REF } from '../overlay-ref';\n\nexport const OVERLAY_ROUTER_CONFIG_TOKEN = new InjectionToken<OverlayRouterConfig>('OVERLAY_ROUTER_CONFIG_TOKEN');\n\nexport type OverlayRoute = {\n  /** The component to render. */\n  component: Type<unknown>;\n\n  /**\n   * The route of the page.\n   *\n   * @example\n   * \"/\" // The root route\n   * \"/two\" // The route \"two\"\n   */\n  path: `/${string}`;\n\n  /** The inputs to pass to the component. Signal values are unwrapped. */\n  inputs?: Record<string, unknown>;\n\n  /**\n   * Overrides the animation direction used when navigating to or away from this route.\n   * Useful for routes that conceptually sit \"before\" the others, like a sidebar page that\n   * should slide in from the left. An explicit direction passed to `navigate()` always wins.\n   */\n  navigationDirection?: {\n    /** Direction to play when this route becomes active. */\n    to?: OverlayRouterNavigationDirection;\n\n    /** Direction to play when navigating away from this route. */\n    from?: OverlayRouterNavigationDirection;\n  };\n};\n\nexport type OverlayRouterConfig = {\n  /** The routes to be able to navigate to. */\n  routes: OverlayRoute[];\n\n  /**\n   * The route on which to start.\n   * @default routes[0].path // The first route, or \"/\" if none is defined\n   */\n  initialRoute?: string;\n\n  /**\n   * Mirror the active overlay route into the browser URL as a query param, enabling deep-linking and\n   * browser back/forward integration. Requires the Angular `Router` to be available.\n   *\n   * @default false\n   */\n  syncUrl?: boolean;\n};\n\nexport type OverlayRouterNavigationDirection = 'forward' | 'backward';\n\nexport type OverlayRouterNavigateConfig = {\n  navigationDirection?: OverlayRouterNavigationDirection;\n};\n\nexport type OverlayRouterNavigationGuardContext = {\n  from: string;\n\n  /** The resolved route being navigated to. */\n  to: string;\n};\n\nexport type OverlayRouterNavigationGuard = (context: OverlayRouterNavigationGuardContext) => boolean | Promise<boolean>;\n\nexport type OverlayRouterTransitionType = 'slide' | 'fade' | 'overlay' | 'vertical' | 'none';\n\nexport type OverlayRouterResolvedPath = {\n  route: string;\n  type: 'back' | 'replace-current' | 'absolute' | 'forward';\n};\n\nexport type OverlayRouter = {\n  /** The current route, but delayed by one frame to ensure that the needed animation classes are applied. */\n  currentRoute: Signal<string>;\n\n  /** Routes registered at runtime in addition to the configured ones. */\n  extraRoutes: WritableSignal<OverlayRoute[]>;\n\n  /** The transition to play when navigating between routes. */\n  transitionType: WritableSignal<OverlayRouterTransitionType>;\n\n  /** The direction of the current navigation. */\n  navigationDirection: WritableSignal<OverlayRouterNavigationDirection>;\n\n  /** Whether an in-memory history entry exists to go back to. */\n  canGoBack: Signal<boolean>;\n\n  /**\n   * Whether a navigation is in flight - waiting on a navigation guard, or committed but not yet\n   * observable on `currentRoute`.\n   */\n  navigationPending: Signal<boolean>;\n\n  /** All navigable routes (configured + extra) with signal inputs unwrapped. */\n  routes: Signal<OverlayRoute[]>;\n\n  /** The route currently being displayed. */\n  currentPage: Signal<OverlayRoute | null>;\n\n  navigate: (route: string | (string | number)[], config?: OverlayRouterNavigateConfig) => void;\n\n  /**\n   * Registers a check run before every route change, including the ones the browser's back and\n   * forward buttons trigger. Resolving `false` cancels the navigation. Returns a function that\n   * unregisters the check again.\n   *\n   * @example\n   * inject(DestroyRef).onDestroy(router.registerNavigationGuard(() => confirmDiscard()));\n   */\n  registerNavigationGuard: (guard: OverlayRouterNavigationGuard) => () => void;\n\n  back: () => boolean;\n\n  resolvePath: (route: string | (string | number)[]) => OverlayRouterResolvedPath;\n\n  addRoute: (route: OverlayRoute) => void;\n\n  removeRoute: (path: string) => void;\n\n  /** @internal Returns `true` when the route actually changed. */\n  updateCurrentRoute: (route: string) => boolean;\n\n  /** @internal */\n  navigateToInitialRoute: () => void;\n};\n\nconst OVERLAY_ROUTER_DEF = /* @__PURE__ */ defineProvider(\n  (): OverlayRouter => {\n    const overlayRef = inject(OVERLAY_REF);\n    const config = inject(OVERLAY_ROUTER_CONFIG_TOKEN);\n    const location = inject(Location, { optional: true });\n    const id = createComponentId('ovr');\n    let syncUrl = config.syncUrl ?? false;\n\n    let router: Router | null = null;\n    let route: Signal<string> | null = null;\n\n    const getInitialRoute = () => config.initialRoute ?? config.routes[0]?.path ?? '/';\n\n    const syncCurrentRoute = signal(getInitialRoute());\n\n    /** In-memory navigation history, used to power `back()`/`canGoBack()` independently of the browser. */\n    const history = signal<string[]>([]);\n    const nativeBrowserBackStack = signal<string[]>([]);\n    const pendingNavigations = signal(0);\n\n    // The current route, but delayed by one frame to ensure that the needed animation classes are applied.\n    const currentRoute = toSignal(\n      toObservable(syncCurrentRoute).pipe(switchMap((r) => fromNextFrame().pipe(map(() => r)))),\n      { initialValue: getInitialRoute() },\n    );\n\n    const navigationPending = computed(() => pendingNavigations() > 0 || currentRoute() !== syncCurrentRoute());\n\n    const extraRoutes = signal<OverlayRoute[]>([]);\n\n    const transitionType = signal<OverlayRouterTransitionType>('slide');\n\n    const navigationDirection = signal<OverlayRouterNavigationDirection>('forward');\n\n    const canGoBack = computed(() => history().length > 0);\n\n    const routes = computed(() => {\n      const allRoutes = [...config.routes, ...extraRoutes()];\n\n      return allRoutes.map((r) => ({\n        ...r,\n        inputs: Object.entries(r.inputs ?? {}).reduce(\n          (acc, [key, value]) => {\n            acc[key] = isSignal(value) ? value() : value;\n\n            return acc;\n          },\n          {} as Record<string, unknown>,\n        ),\n      }));\n    });\n\n    const currentPage = computed(() => {\n      const curr = syncCurrentRoute();\n\n      return routes().find((r) => r.path === curr) ?? null;\n    });\n\n    const updateBrowserUrl = (r: string | undefined) => {\n      if (!router || !route) return;\n\n      router.navigate([route()], {\n        queryParams: { [id]: r },\n        queryParamsHandling: 'merge',\n      });\n    };\n\n    const updateCurrentRoute = (r: string) => {\n      if (r === syncCurrentRoute()) return false;\n\n      if (routes().findIndex((rt) => rt.path === r) === -1) {\n        if (ngDevMode) {\n          console.error(`[OverlayRouter] The route \"${r}\" does not exist.`, config);\n        }\n\n        return false;\n      }\n\n      syncCurrentRoute.set(r);\n      updateBrowserUrl(r);\n\n      return true;\n    };\n\n    const resolvePath = (r: string | (string | number)[]): OverlayRouterResolvedPath => {\n      if (Array.isArray(r)) {\n        r = r.join('/');\n      }\n\n      if (r === '') {\n        r = '/';\n      }\n\n      const isAbsolute = r.startsWith('/');\n      const isReplaceCurrent = r.startsWith('./');\n      const isBack = r.startsWith('../');\n      const isForward = !isAbsolute && !isReplaceCurrent && !isBack;\n\n      const curr = syncCurrentRoute();\n\n      if (isForward) {\n        r = `${curr}/${r}`;\n      } else if (isReplaceCurrent) {\n        const currSegments = curr.split('/').filter((s) => s !== '');\n        currSegments.pop();\n\n        const newSegments = r.split('/').filter((s) => s !== '.');\n\n        r = `/${currSegments.concat(newSegments).join('/')}`;\n      } else if (isBack) {\n        const currSegments = curr.split('/').filter((s) => s !== '');\n        const newSegments = r.split('/').filter((s) => s !== '..');\n        const stepsBack = r.split('/').filter((s) => s === '..').length;\n\n        for (let i = 0; i < stepsBack; i++) {\n          currSegments.pop();\n        }\n\n        r = `/${currSegments.concat(newSegments).join('/')}`;\n      }\n\n      return {\n        route: r,\n        type: isBack || r === '/' ? 'back' : isReplaceCurrent ? 'replace-current' : isAbsolute ? 'absolute' : 'forward',\n      };\n    };\n\n    const navigationGuards = new Set<OverlayRouterNavigationGuard>();\n\n    const registerNavigationGuard = (guard: OverlayRouterNavigationGuard) => {\n      navigationGuards.add(guard);\n\n      return () => {\n        navigationGuards.delete(guard);\n      };\n    };\n\n    /**\n     * Answers synchronously for as long as the guards do, and only goes async from the first one that\n     * returns a promise: a route change deferred by a microtask lands after the frame the outlet\n     * measured for its transition.\n     */\n    const canLeave = (from: string, to: string): boolean | Promise<boolean> => {\n      const guards = [...navigationGuards];\n\n      const runFrom = (index: number): boolean | Promise<boolean> => {\n        for (let i = index; i < guards.length; i++) {\n          const mayLeave = guards[i]?.({ from, to }) ?? true;\n\n          if (mayLeave === false) {\n            return false;\n          }\n\n          if (mayLeave !== true) {\n            return mayLeave.then((allowed) => (allowed ? runFrom(i + 1) : false));\n          }\n        }\n\n        return true;\n      };\n\n      return runFrom(0);\n    };\n\n    const whenAllowed = (attempt: { from: string; to: string; allowed: () => void; blocked?: () => void }) => {\n      const result = canLeave(attempt.from, attempt.to);\n\n      if (result === true) {\n        attempt.allowed();\n\n        return;\n      }\n\n      pendingNavigations.update((count) => count + 1);\n\n      void Promise.resolve(result).then((mayLeave) => {\n        pendingNavigations.update((count) => count - 1);\n\n        return mayLeave ? attempt.allowed() : attempt.blocked?.();\n      });\n    };\n\n    const commitNavigation = (commit: {\n      resolvedRoute: OverlayRouterResolvedPath;\n      from: string;\n      navigateConfig?: OverlayRouterNavigateConfig;\n    }) => {\n      const { resolvedRoute, from, navigateConfig } = commit;\n\n      const allRoutes = routes();\n      const targetDirectionHint = allRoutes.find((rt) => rt.path === resolvedRoute.route)?.navigationDirection?.to;\n      const sourceDirectionHint = allRoutes.find((rt) => rt.path === from)?.navigationDirection?.from;\n\n      const defaultDirection = resolvedRoute.type === 'back' ? 'backward' : 'forward';\n\n      const fromIndex = allRoutes.findIndex((rt) => rt.path === from);\n      const targetIndex = allRoutes.findIndex((rt) => rt.path === resolvedRoute.route);\n      const routeOrderDirection =\n        fromIndex === -1 || targetIndex === -1 ? defaultDirection : targetIndex < fromIndex ? 'backward' : 'forward';\n\n      // Route hints and route order only affect the played animation. The history bookkeeping below\n      // must stay tied to the actual navigation semantics, or `back()` would misbehave for them.\n      const historyDirection = navigateConfig?.navigationDirection ?? defaultDirection;\n      const animationDirection =\n        navigateConfig?.navigationDirection ?? targetDirectionHint ?? sourceDirectionHint ?? routeOrderDirection;\n\n      navigationDirection.set(animationDirection);\n\n      if (updateCurrentRoute(resolvedRoute.route)) {\n        history.update((h) => (historyDirection === 'backward' ? h.slice(0, -1) : [...h, from]));\n      }\n    };\n\n    const navigate = (r: string | (string | number)[], navigateConfig?: OverlayRouterNavigateConfig) => {\n      const resolvedRoute = resolvePath(r);\n      const from = syncCurrentRoute();\n\n      if (resolvedRoute.route === from) {\n        return;\n      }\n\n      whenAllowed({\n        from,\n        to: resolvedRoute.route,\n        allowed: () => commitNavigation({ resolvedRoute, from, navigateConfig }),\n      });\n    };\n\n    const back = () => {\n      if (syncUrl && location) {\n        location.back();\n\n        return true;\n      }\n\n      const target = history().at(-1);\n\n      if (target === undefined) {\n        return false;\n      }\n\n      navigate(target, { navigationDirection: 'backward' });\n\n      return true;\n    };\n\n    const addRoute = (r: OverlayRoute) => {\n      extraRoutes.set([...extraRoutes(), r]);\n    };\n\n    const removeRoute = (path: string) => {\n      extraRoutes.set(extraRoutes().filter((r) => r.path !== path));\n    };\n\n    const navigateToInitialRoute = () => {\n      updateCurrentRoute(getInitialRoute());\n    };\n\n    const setupUrlSync = () => {\n      const angularRouter = inject(Router, { optional: true });\n\n      if (!angularRouter) {\n        if (ngDevMode) {\n          console.warn(\n            '[OverlayRouter] `syncUrl` is enabled but no Angular Router is available. URL sync is disabled.',\n          );\n        }\n\n        syncUrl = false;\n\n        return;\n      }\n\n      router = angularRouter;\n      route = injectRoute();\n\n      const currentRouteQueryParam = injectQueryParam(id);\n\n      updateBrowserUrl(syncCurrentRoute());\n\n      let isFirstRouteEvent = true;\n\n      effect(() => {\n        const r = currentRouteQueryParam();\n\n        untracked(() => {\n          if (isFirstRouteEvent) {\n            isFirstRouteEvent = false;\n\n            return;\n          }\n\n          // The user navigated back or forward using the browser history\n          if (!r) {\n            // The route query param no longer exists - close the overlay\n            overlayRef.close();\n          } else if (r !== syncCurrentRoute()) {\n            const navStack = nativeBrowserBackStack();\n            const curr = syncCurrentRoute();\n\n            // An empty nav stack means the only way to have got here is back.\n            const isForward = navStack.length > 0 && r === navStack[navStack.length - 1];\n            const nextStack = !navStack.length ? [curr] : isForward ? navStack.slice(0, -1) : [...navStack, curr];\n\n            const resolvedRoute = resolvePath(r);\n\n            whenAllowed({\n              from: curr,\n              to: resolvedRoute.route,\n              allowed: () => {\n                commitNavigation({\n                  resolvedRoute,\n                  from: curr,\n                  navigateConfig: { navigationDirection: isForward ? 'forward' : 'backward' },\n                });\n                nativeBrowserBackStack.set(nextStack);\n              },\n              // The browser already moved, so a veto has to put the param back or the URL names a\n              // route that is not being rendered.\n              blocked: () => updateBrowserUrl(curr),\n            });\n          } else {\n            // The navigation was triggered by ui interaction. Clear the back nav stack.\n            nativeBrowserBackStack.set([]);\n          }\n        });\n      });\n    };\n\n    if (syncUrl) {\n      setupUrlSync();\n    }\n\n    inject(DestroyRef).onDestroy(() => {\n      if (syncUrl) {\n        // Remove the dialog route from the browser url\n        updateBrowserUrl(undefined);\n      }\n    });\n\n    return {\n      currentRoute,\n      extraRoutes,\n      transitionType,\n      navigationDirection,\n      canGoBack,\n      navigationPending,\n      routes,\n      currentPage,\n      navigate,\n      registerNavigationGuard,\n      back,\n      resolvePath,\n      addRoute,\n      removeRoute,\n      updateCurrentRoute,\n      navigateToInitialRoute,\n    };\n  },\n  { name: 'OverlayRouter' },\n);\n\nexport const provideOverlayRouterService = /* @__PURE__ */ toProvideFn(OVERLAY_ROUTER_DEF);\nexport const injectOverlayRouter = /* @__PURE__ */ toInjectFn(OVERLAY_ROUTER_DEF);\nexport const OVERLAY_ROUTER_TOKEN = /* @__PURE__ */ toToken(OVERLAY_ROUTER_DEF);\n\nexport const provideOverlayRouterConfig = (config: OverlayRouterConfig): Provider[] => {\n  return [\n    {\n      provide: OVERLAY_ROUTER_CONFIG_TOKEN,\n      useValue: config,\n    },\n  ];\n};\n\n/**\n * Provides both the overlay router config and the overlay router itself, so a consumer only needs\n * a single entry in the overlay's `providers` instead of wiring the router separately.\n *\n * @example\n * overlayManager.open(MyOverlay, {\n *   strategies: dialogOverlayStrategy(),\n *   providers: [provideOverlayRouter({ routes: [...] })],\n * });\n */\nexport const provideOverlayRouter = (config: OverlayRouterConfig): Provider[] => {\n  return [...provideOverlayRouterConfig(config), ...provideOverlayRouterService()];\n};\n","import { assertInInjectionContext, DestroyRef, inject, isDevMode } from '@angular/core';\nimport {\n  createUnsavedChangesTracker,\n  CreateUnsavedChangesTrackerConfig,\n  UnsavedChangesTrackerRef,\n} from '@ethlete/core';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { OVERLAY_ROUTER_TOKEN } from '../routing/overlay-router';\n\n/**\n * Which close sources the guard should intercept. All default to `true`.\n * Maps to the runtime's close sources: `outsidePointer` → `outside-pointer`, `escape` → `escape`,\n * `closeCall` → `api` (programmatic `overlayRef.close()`), `drag` → drag-to-dismiss, `replace` → `replace`\n * (a `single` opener opening another overlay in this one's place).\n */\nexport type OverlayUnsavedChangesDismissSources = {\n  outsidePointer?: boolean;\n  escape?: boolean;\n  closeCall?: boolean;\n  drag?: boolean;\n  replace?: boolean;\n};\n\nexport type CreateOverlayUnsavedChangesGuardConfig<T> = CreateUnsavedChangesTrackerConfig<T> & {\n  /** The close sources to guard. All enabled by default. */\n  dismissSources?: OverlayUnsavedChangesDismissSources;\n\n  /**\n   * Also veto [overlay router](../routing/overlay-router) navigations away from the page holding the\n   * guard, so moving between routes prompts the same way dismissing the overlay does. Has no effect\n   * when the overlay has no router.\n   *\n   * @default true\n   */\n  guardRouteChanges?: boolean;\n};\n\nexport type OverlayUnsavedChangesGuardRef<T> = UnsavedChangesTrackerRef<T> & {\n  /** Stop guarding closes and release the guard. Also runs automatically on injector destroy. */\n  destroy: () => void;\n};\n\n/**\n * The overlay flavor of the unsaved-changes family. Injects the current `OVERLAY_REF` and vetoes a\n * dismissal (outside pointer, escape, drag, or a programmatic `close()`) while the watched form has\n * unsaved changes: it runs the `confirm` and only then re-issues the close. Call from an overlay\n * content component's injection context.\n *\n * In a routed overlay it guards route changes away from the page too, so a single call covers both\n * ways the edits can be lost - see `guardRouteChanges`.\n *\n * Being a tracker, it also locks the browser tab while there are changes (`beforeunload`) - configure\n * or disable that via the inherited `tab` option.\n *\n * ```ts\n * guard = createOverlayUnsavedChangesGuard({\n *   source: this.form,                     // a signal-forms FieldTree\n *   confirm: () => this.overlays\n *     .open(ConfirmDiscardComponent)\n *     .afterClosed(),                       // truthy result = discard\n * });\n * ```\n *\n * After a save that keeps the overlay open, call `guard.refreshDefaultValue()` to re-baseline so the\n * saved state no longer counts as unsaved changes.\n */\nexport const createOverlayUnsavedChangesGuard = <T>(\n  config: CreateOverlayUnsavedChangesGuardConfig<T>,\n): OverlayUnsavedChangesGuardRef<T> => {\n  assertInInjectionContext(createOverlayUnsavedChangesGuard);\n\n  const overlayRef = inject(OVERLAY_REF);\n  const overlayRouter = inject(OVERLAY_ROUTER_TOKEN, { optional: true });\n  const destroyRef = inject(DestroyRef);\n  const tracker = createUnsavedChangesTracker(config);\n\n  const dismiss = config.dismissSources ?? {};\n  const guarded: Record<string, boolean> = {\n    'outside-pointer': dismiss.outsidePointer ?? true,\n    escape: dismiss.escape ?? true,\n    api: dismiss.closeCall ?? true,\n    drag: dismiss.drag ?? true,\n    replace: dismiss.replace ?? true,\n  };\n\n  if (isDevMode() && overlayRef.config.disableClose && (dismiss.outsidePointer || dismiss.escape || dismiss.drag)) {\n    console.warn(\n      '[createOverlayUnsavedChangesGuard] The overlay was opened with disableClose: true, so escape, ' +\n        'outside-pointer and drag never fire - only a programmatic close() reaches the guard.',\n    );\n  }\n\n  // While a confirm is pending we keep vetoing further attempts; the async branch re-issues the\n  // close (bypassing this guard) once the user confirms.\n  let checkPending = false;\n\n  const unregister = overlayRef.registerCloseGuard((event) => {\n    if (!guarded[event.source]) {\n      return true;\n    }\n\n    // The session ended underneath the overlay (logout): the edits are unrecoverable, so let it close\n    // instead of prompting over a page the user is being redirected away from.\n    if (tracker.isAbandoned()) {\n      return true;\n    }\n\n    if (!tracker.hasChanges()) {\n      return true;\n    }\n\n    if (checkPending) {\n      return false;\n    }\n\n    checkPending = true;\n\n    tracker\n      .runCheck()\n      .then((confirmed) => {\n        checkPending = false;\n\n        if (confirmed) {\n          overlayRef.forceClose(event.source, event.result);\n        }\n      })\n      .catch(() => {\n        checkPending = false;\n      });\n\n    return false;\n  });\n\n  // `runCheck` passes on its own when there is nothing to discard, but answering `true` synchronously\n  // keeps an unguarded navigation committing in the same task - a promise costs the outlet its\n  // transition origin.\n  const unregisterRouteGuard =\n    overlayRouter && (config.guardRouteChanges ?? true)\n      ? overlayRouter.registerNavigationGuard(() => (tracker.hasChanges() ? tracker.runCheck() : true))\n      : null;\n\n  const destroy = () => {\n    unregister();\n    unregisterRouteGuard?.();\n  };\n\n  destroyRef.onDestroy(destroy);\n\n  return { ...tracker, destroy };\n};\n","import { DOCUMENT, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  createDocumentElementSignal,\n  defineRootProvider,\n  injectRenderer,\n  signalElementScrollState,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { combineLatest, tap } from 'rxjs';\nimport { injectOverlayManager } from './overlay-manager';\n\nconst OVERLAY_SCROLL_BLOCKER_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const overlayManager = injectOverlayManager();\n    const document = inject(DOCUMENT);\n    const renderer = injectRenderer();\n    const documentScrollState = signalElementScrollState(createDocumentElementSignal());\n\n    // A breakpoint switch can give an already open overlay a backdrop (an anchored pane becoming a\n    // bottom sheet), so the backdrop is read as a signal rather than from the static config.\n    const hasBlockingOverlay = computed(() =>\n      overlayManager\n        .openOverlays()\n        .some((overlayRef) => overlayRef.config.mode !== 'non-modal' || !!overlayRef.elements?.backdropElement()),\n    );\n\n    const root = document.documentElement;\n    let savedTop: number | null = null;\n\n    combineLatest([toObservable(hasBlockingOverlay), toObservable(documentScrollState)])\n      .pipe(\n        tap(([hasOpenOverlays, scrollState]) => {\n          if (hasOpenOverlays && scrollState.canScrollVertically && savedTop === null) {\n            savedTop = document.defaultView?.scrollY ?? 0;\n\n            renderer.setStyle(root, {\n              position: 'fixed',\n              top: `-${savedTop}px`,\n              left: '0',\n              right: '0',\n              overflowY: 'scroll',\n            });\n          } else if (!hasOpenOverlays && savedTop !== null) {\n            const top = savedTop;\n            savedTop = null;\n\n            renderer.setStyle(root, {\n              position: null,\n              top: null,\n              left: null,\n              right: null,\n              overflowY: null,\n              scrollBehavior: 'auto',\n            });\n\n            document.defaultView?.scrollTo(0, top);\n\n            renderer.setStyle(root, { scrollBehavior: null });\n          }\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  },\n  { name: 'Overlay Scroll Blocker' },\n);\n\n/**\n * Blocks body scrolling while a modal overlay is open.\n * Register once via `provideOverlay()` (or call `injectOverlayScrollBlocker()` in an environment initializer).\n */\nexport const provideOverlayScrollBlocker = /* @__PURE__ */ toProvideFn(OVERLAY_SCROLL_BLOCKER_DEF);\nexport const injectOverlayScrollBlocker = /* @__PURE__ */ toInjectFn(OVERLAY_SCROLL_BLOCKER_DEF);\n","import { provideEnvironmentInitializer } from '@angular/core';\nimport { OverlayAnchorDirective } from './headless/overlay-anchor.directive';\nimport { OverlaySurfaceDirective } from './headless/overlay-surface.directive';\nimport { OverlayTriggerDirective } from './headless/overlay-trigger.directive';\nimport { OverlayDirective } from './headless/overlay.directive';\nimport { OverlayBodyComponent } from './overlay-body.component';\nimport { OverlayCloseDirective } from './overlay-close.directive';\nimport { OverlayFooterDirective } from './overlay-footer.directive';\nimport { OverlayHeaderDirective } from './overlay-header.directive';\nimport { OverlayMainDirective } from './overlay-main.directive';\nimport { injectOverlayScrollBlocker } from './overlay-scroll-blocker';\nimport { OverlayTitleDirective } from './overlay-title.directive';\n\nexport const OVERLAY_IMPORTS = [\n  OverlayDirective,\n  OverlayTriggerDirective,\n  OverlayAnchorDirective,\n  OverlaySurfaceDirective,\n] as const;\n\nexport const OVERLAY_CONTENT_IMPORTS = [\n  OverlayCloseDirective,\n  OverlayTitleDirective,\n  OverlayHeaderDirective,\n  OverlayBodyComponent,\n  OverlayFooterDirective,\n  OverlayMainDirective,\n] as const;\n\nexport const provideOverlay = () => {\n  return [\n    provideEnvironmentInitializer(() => {\n      injectOverlayScrollBlocker();\n    }),\n  ];\n};\n","import { Directive, effect, inject, input, untracked } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { QueryParamOverlayDefinition } from './overlay-definition';\n\n/**\n * Opens a query-param overlay declaratively by navigating its query param - the counterpart to\n * `createOverlayOpener` for links. Takes the overlay definition itself, so the query param key\n * is never duplicated as a string.\n *\n * @example\n * <a [etQueryParamOverlayLink]=\"productOverlay\" etQueryParamOverlayLinkValue=\"42\">Open product 42</a>\n */\n@Directive({\n  selector: '[etQueryParamOverlayLink]',\n  hostDirectives: [RouterLink],\n})\nexport class QueryParamOverlayLinkDirective {\n  private routerLink = inject(RouterLink);\n\n  /** The query-param overlay definition this link opens. */\n  public definition = input.required<Pick<QueryParamOverlayDefinition, 'queryParamKey'>>({\n    alias: 'etQueryParamOverlayLink',\n  });\n\n  /** The query param value the overlay opens with. */\n  public value = input.required<string | number>({ alias: 'etQueryParamOverlayLinkValue' });\n\n  constructor() {\n    this.routerLink.routerLink = [];\n    this.routerLink.queryParamsHandling = 'merge';\n\n    effect(() => {\n      const definition = this.definition();\n      const value = this.value();\n\n      untracked(() => {\n        this.routerLink.queryParams = { [definition.queryParamKey]: value };\n      });\n    });\n  }\n}\n","import { Directive, ElementRef, InjectionToken, booleanAttribute, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, tap } from 'rxjs';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { injectOverlayRouter } from './overlay-router';\n\nexport const OVERLAY_BACK_OR_CLOSE_TOKEN = new InjectionToken<OverlayBackOrCloseDirective>(\n  'OVERLAY_BACK_OR_CLOSE_TOKEN',\n);\n\n@Directive({\n  selector: '[etOverlayBackOrClose]',\n  providers: [\n    {\n      provide: OVERLAY_BACK_OR_CLOSE_TOKEN,\n      useExisting: OverlayBackOrCloseDirective,\n    },\n  ],\n  host: {\n    class: 'et-overlay-back-or-close',\n    type: 'button',\n  },\n})\nexport class OverlayBackOrCloseDirective {\n  private overlayRef = inject(OVERLAY_REF);\n  private elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n  private router = injectOverlayRouter();\n  public disabled = input(false, { transform: booleanAttribute });\n\n  constructor() {\n    fromEvent<PointerEvent>(this.elementRef.nativeElement, 'click')\n      .pipe(\n        filter(() => !this.disabled()),\n        tap(() => {\n          if (!this.router.back()) {\n            this.overlayRef.close();\n          }\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, inject, viewChild } from '@angular/core';\nimport { ANIMATED_LIFECYCLE_TOKEN, AnimatedIfDirective, AnimatedLifecycleDirective } from '@ethlete/core';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { injectOverlayRouter } from './overlay-router';\n\n@Component({\n  selector: 'et-overlay-route-header-template-outlet',\n  template: `\n    <div class=\"et-overlay-route-header-template-outlet\">\n      <!-- eslint-disable-next-line ethlete/prefer-static-boolean-properties -- skipNextEnter is a two-way model() on the core AnimatedLifecycle directive; no booleanAttribute transform applies -->\n      <div [skipNextEnter]=\"true\" class=\"et-overlay-route-header-template-outlet-item\" etAnimatedLifecycle>\n        <ng-container *etAnimatedIf=\"overlay.headerTemplate()\">\n          <ng-container *ngTemplateOutlet=\"overlay.headerTemplate()\" />\n        </ng-container>\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [AnimatedIfDirective, AnimatedLifecycleDirective, NgTemplateOutlet],\n  host: {\n    class: 'et-overlay-route-header-template-outlet-host',\n    '[class.et-overlay-router-outlet-nav-dir--backward]': \"router.navigationDirection() === 'backward'\",\n    '[class.et-overlay-router-outlet-nav-dir--forward]': \"router.navigationDirection() === 'forward'\",\n  },\n  styles: `\n    .et-overlay-route-header-template-outlet-host {\n      --_et-overlay-router-transition-easing: var(--ease-in-out-5);\n    }\n\n    .et-overlay-route-header-template-outlet {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr);\n      grid-template-rows: minmax(0, 1fr);\n      overflow-x: hidden;\n    }\n\n    .et-overlay-route-header-template-outlet-item {\n      grid-area: 1 / 1 / 2 / 2;\n      pointer-events: none;\n\n      > * {\n        pointer-events: auto;\n      }\n\n      &.et-animation-enter-from {\n        opacity: 0;\n      }\n\n      &.et-animation-leave-to {\n        opacity: 0;\n      }\n\n      &.et-animation-enter-active,\n      &.et-animation-leave-active {\n        transition:\n          transform 300ms var(--_et-overlay-router-transition-easing),\n          opacity 300ms var(--_et-overlay-router-transition-easing);\n      }\n    }\n  `,\n})\nexport class OverlayRouteHeaderTemplateOutletComponent {\n  protected overlay = inject(OVERLAY_REF);\n  protected router = injectOverlayRouter();\n  public animatedLifecycle = viewChild.required(ANIMATED_LIFECYCLE_TOKEN);\n}\n","import { Directive, ElementRef, InjectionToken, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, tap } from 'rxjs';\nimport { OverlayRouterNavigationDirection, injectOverlayRouter } from './overlay-router';\n\nexport const OVERLAY_ROUTER_LINK_TOKEN = new InjectionToken<OverlayRouterLinkDirective>('OVERLAY_ROUTER_LINK_TOKEN');\n\n@Directive({\n  selector: '[etOverlayRouterLink]',\n  providers: [\n    {\n      provide: OVERLAY_ROUTER_LINK_TOKEN,\n      useExisting: OverlayRouterLinkDirective,\n    },\n  ],\n  host: {\n    class: 'et-overlay-router-link',\n    type: 'button',\n    '[attr.aria-current]': \"isActive() ? 'page' : null\",\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[class.et-overlay-router-link--active]': 'isActive()',\n  },\n})\nexport class OverlayRouterLinkDirective {\n  private elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n  private router = injectOverlayRouter();\n  public path = input.required<string | (string | number)[]>({ alias: 'etOverlayRouterLink' });\n  public disabled = input(false, { transform: booleanAttribute });\n  public navigationDirection = input<OverlayRouterNavigationDirection | null>(null);\n\n  public isActive = computed(() => this.router.resolvePath(this.path()).route === this.router.currentRoute());\n\n  constructor() {\n    fromEvent<PointerEvent>(this.elementRef.nativeElement, 'click')\n      .pipe(\n        filter(() => !this.disabled()),\n        tap(() => this.router.navigate(this.path(), { navigationDirection: this.navigationDirection() ?? undefined })),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n}\n","import { Directive, InjectionToken } from '@angular/core';\n\nexport const OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN =\n  new InjectionToken<OverlayRouterOutletDisabledTemplateDirective>('OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN');\n\n@Directive({\n  selector: 'ng-template[etOverlayRouterOutletDisabledTemplate]',\n  providers: [\n    {\n      provide: OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN,\n      useExisting: OverlayRouterOutletDisabledTemplateDirective,\n    },\n  ],\n})\nexport class OverlayRouterOutletDisabledTemplateDirective {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, TemplateRef, ViewEncapsulation, input } from '@angular/core';\nimport { OverlayBodyComponent, OverlayBodyDividerType } from '../overlay-body.component';\nimport { OverlayHeaderDirective } from '../overlay-header.directive';\nimport { OverlayHeaderTemplateDirective } from '../overlay-header-template.directive';\nimport { OverlayMainDirective } from '../overlay-main.directive';\n\n@Component({\n  selector: 'et-overlay-sidebar-page',\n  template: `\n    @if (headerTemplate()?.template; as tpl) {\n      <et-overlay-header>\n        <ng-container *ngTemplateOutlet=\"tpl\" />\n      </et-overlay-header>\n    }\n\n    <et-overlay-body [dividers]=\"pageDividers()\">\n      <ng-container *ngTemplateOutlet=\"bodyTemplate()\" />\n    </et-overlay-body>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [OverlayHeaderDirective, OverlayBodyComponent, NgTemplateOutlet],\n  hostDirectives: [OverlayMainDirective],\n  host: {\n    class: 'et-overlay-sidebar-page-host',\n    // Forces a component ID distinct from the identical @ethlete/cdk twin (NG0912).\n    'data-et-components': '',\n  },\n})\nexport class OverlaySidebarPageComponent {\n  public headerTemplate = input.required<OverlayHeaderTemplateDirective | null>();\n  public bodyTemplate = input.required<TemplateRef<unknown> | null>();\n  public pageDividers = input<OverlayBodyDividerType>(false);\n}\n","import {\n  InjectionToken,\n  Provider,\n  Signal,\n  TemplateRef,\n  WritableSignal,\n  afterNextRender,\n  computed,\n  inject,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  Breakpoint,\n  defineProvider,\n  injectBreakpointObserver,\n  signalElementDimensions,\n  toInjectFn,\n  toProvideFn,\n  toToken,\n} from '@ethlete/core';\nimport { distinctUntilChanged, tap } from 'rxjs';\nimport { OverlayBodyDividerType } from '../overlay-body.component';\nimport { OverlayHeaderTemplateDirective } from '../overlay-header-template.directive';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { injectOverlayRouter } from '../routing/overlay-router';\nimport { OverlaySidebarPageComponent } from './overlay-sidebar-page.component';\n\nexport const SIDEBAR_OVERLAY_CONFIG = new InjectionToken<SidebarOverlayConfig>('SIDEBAR_OVERLAY_CONFIG');\n\nexport type SidebarOverlayConfig = {\n  /**\n   * On mobile devices, the sidebar is shown as a separate page that can be navigated to.\n   * This is the route to that sidebar page.\n   *\n   * @default \"/sidebar\"\n   */\n  sidebarPageRoute?: `/${string}`;\n\n  /**\n   * The width from which the sidebar renders inline (rather than collapsing into a page). Compared\n   * against the overlay's own pane width - not the viewport - so a narrow dialog collapses its\n   * sidebar even on a wide screen. Can be a breakpoint name or a pixel number. Works best with an\n   * overlay that has a defined width.\n   *\n   * @default \"md\"\n   */\n  renderSidebarFrom?: Breakpoint | number;\n};\n\nexport type SidebarOverlay = {\n  /** Whether the sidebar renders inline (`true`) or is collapsed into a navigable page (`false`). */\n  renderSidebar: Signal<boolean>;\n\n  sidebarContentTemplate: WritableSignal<TemplateRef<unknown> | null>;\n  sidebarHeaderTemplate: WritableSignal<OverlayHeaderTemplateDirective | null>;\n  sidebarPageDividers: WritableSignal<OverlayBodyDividerType>;\n};\n\nconst SIDEBAR_OVERLAY_DEF = /* @__PURE__ */ defineProvider(\n  (): SidebarOverlay => {\n    const config = inject(SIDEBAR_OVERLAY_CONFIG);\n    const router = injectOverlayRouter();\n    const overlayRef = inject(OVERLAY_REF);\n    const breakpointObserver = injectBreakpointObserver();\n\n    const threshold =\n      typeof config.renderSidebarFrom === 'number'\n        ? config.renderSidebarFrom\n        : breakpointObserver.getBreakpointSize(config.renderSidebarFrom ?? 'md', 'min');\n\n    const paneElement = signal<HTMLElement | null>(null);\n    const paneDimensions = signalElementDimensions(paneElement);\n\n    const renderSidebar = computed(() => {\n      const width = paneDimensions().offset?.width ?? null;\n\n      return width !== null && width >= threshold;\n    });\n\n    const sidebarContentTemplate = signal<TemplateRef<unknown> | null>(null);\n    const sidebarHeaderTemplate = signal<OverlayHeaderTemplateDirective | null>(null);\n    const sidebarPageDividers = signal<OverlayBodyDividerType>(false);\n\n    afterNextRender(() => paneElement.set(overlayRef.elements?.paneElement ?? null));\n\n    const sidebarPageRoute = config.sidebarPageRoute ?? '/sidebar';\n\n    toObservable(renderSidebar)\n      .pipe(\n        distinctUntilChanged(),\n        tap((render) => {\n          if (render) {\n            router.transitionType.set('vertical');\n            router.removeRoute(sidebarPageRoute);\n\n            // if the user is currently on the sidebar route, navigate to the initial route.\n            if (router.currentRoute() === sidebarPageRoute) {\n              router.navigateToInitialRoute();\n            }\n          } else {\n            router.transitionType.set('overlay');\n\n            router.addRoute({\n              path: sidebarPageRoute,\n              component: OverlaySidebarPageComponent,\n              inputs: {\n                headerTemplate: sidebarHeaderTemplate,\n                bodyTemplate: sidebarContentTemplate,\n                pageDividers: sidebarPageDividers,\n              },\n              // the sidebar conceptually sits to the left of the content pages: it slides in\n              // from the left and content pages slide back in from the right when leaving it\n              navigationDirection: { to: 'backward', from: 'forward' },\n            });\n          }\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    return {\n      renderSidebar,\n      sidebarContentTemplate,\n      sidebarHeaderTemplate,\n      sidebarPageDividers,\n    };\n  },\n  { name: 'SidebarOverlay' },\n);\n\nexport const provideSidebarOverlayService = /* @__PURE__ */ toProvideFn(SIDEBAR_OVERLAY_DEF);\nexport const injectSidebarOverlay = /* @__PURE__ */ toInjectFn(SIDEBAR_OVERLAY_DEF);\nexport const SIDEBAR_OVERLAY_TOKEN = /* @__PURE__ */ toToken(SIDEBAR_OVERLAY_DEF);\n\nexport const provideSidebarOverlayConfig = (config: SidebarOverlayConfig): Provider[] => {\n  return [\n    {\n      provide: SIDEBAR_OVERLAY_CONFIG,\n      useValue: config,\n    },\n  ];\n};\n\n/**\n * Provides both the sidebar config and the sidebar overlay service in one call, mirroring\n * {@link provideOverlayRouter}. Requires an overlay router to also be provided.\n */\nexport const provideSidebarOverlay = (config: SidebarOverlayConfig = {}): Provider[] => {\n  return [...provideSidebarOverlayConfig(config), ...provideSidebarOverlayService()];\n};\n","import { Directive, InjectionToken } from '@angular/core';\n\nexport const OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN = new InjectionToken<OverlaySharedRouteTemplateDirective>(\n  'OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN',\n);\n\n@Directive({\n  selector: 'ng-template[etOverlaySharedRouteTemplate]',\n  providers: [\n    {\n      provide: OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN,\n      useExisting: OverlaySharedRouteTemplateDirective,\n    },\n  ],\n})\nexport class OverlaySharedRouteTemplateDirective {}\n","import { DOCUMENT, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ElementRef,\n  InjectionToken,\n  Injector,\n  TemplateRef,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  contentChild,\n  effect,\n  inject,\n  input,\n  signal,\n  untracked,\n  viewChildren,\n} from '@angular/core';\nimport {\n  AnimatedIfDirective,\n  AnimatedLifecycleDirective,\n  AnimatedLifecycleState,\n  applyInitialFocus,\n  injectRenderer,\n} from '@ethlete/core';\nimport { OverlayMainDirective } from '../overlay-main.directive';\nimport { OVERLAY_REF } from '../overlay-ref';\nimport { injectSidebarOverlay } from '../sidebar/sidebar-overlay';\nimport { injectOverlayRouter } from './overlay-router';\nimport { OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN } from './overlay-router-outlet-disabled-template.directive';\nimport { OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN } from './overlay-shared-route-template.directive';\n\nexport const OVERLAY_ROUTER_OUTLET_TOKEN = new InjectionToken<OverlayRouterOutletComponent>(\n  'OVERLAY_ROUTER_OUTLET_TOKEN',\n);\n\n@Component({\n  selector: 'et-overlay-router-outlet',\n  template: `\n    <ng-template>\n      <ng-content />\n    </ng-template>\n\n    <div class=\"et-overlay-router-outlet\">\n      @for (page of router.routes(); track page.path) {\n        <div\n          #pageWrapper\n          [class.et-overlay-router-outlet-page--active]=\"page === router.currentPage()\"\n          class=\"et-overlay-router-outlet-page\"\n          etAnimatedLifecycle\n          tabindex=\"-1\"\n        >\n          <ng-container *etAnimatedIf=\"page === router.currentPage() && !disabled()\">\n            <ng-container *ngComponentOutlet=\"page.component; inputs: page.inputs\" />\n          </ng-container>\n        </div>\n      }\n\n      @if (outletDisabledTemplate()) {\n        <div\n          (stateChange)=\"disabledPageAnimationStateChange($event)\"\n          class=\"et-overlay-router-outlet-page et-overlay-router-outlet-page--active\"\n          etAnimatedLifecycle\n        >\n          <div *etAnimatedIf=\"disabled()\" [etOverlayMain]=\"hasSidebar\" class=\"et-overlay-router-outlet-disabled-page\">\n            <ng-container *ngTemplateOutlet=\"outletDisabledTemplate()!\" />\n          </div>\n        </div>\n      }\n    </div>\n  `,\n  styleUrl: './overlay-router-outlet.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [AnimatedIfDirective, AnimatedLifecycleDirective, NgComponentOutlet, NgTemplateOutlet, OverlayMainDirective],\n  providers: [\n    {\n      provide: OVERLAY_ROUTER_OUTLET_TOKEN,\n      useExisting: OverlayRouterOutletComponent,\n    },\n  ],\n  host: {\n    class: 'et-overlay-router-outlet-host',\n    '[class.et-overlay-router-outlet-nav-dir--backward]': \"router.navigationDirection() === 'backward'\",\n    '[class.et-overlay-router-outlet-nav-dir--forward]': \"router.navigationDirection() === 'forward'\",\n    '[class.et-overlay-router-outlet-transition--slide]': \"transitionType() === 'slide'\",\n    '[class.et-overlay-router-outlet-transition--fade]': \"transitionType() === 'fade'\",\n    '[class.et-overlay-router-outlet-transition--overlay]': \"transitionType() === 'overlay'\",\n    '[class.et-overlay-router-outlet-transition--vertical]': \"transitionType() === 'vertical'\",\n    '[class.et-overlay-router-outlet-transition--none]': \"transitionType() === 'none'\",\n    '[class.et-overlay-router-outlet--disabled]': 'disabled()',\n    '[class.et-overlay-router-outlet--has-disabled-template]': '!!outletDisabledTemplate()',\n    '[class.et-overlay-router-outlet--has-shared-route-template]': '!!sharedRouteTemplate()',\n  },\n})\nexport class OverlayRouterOutletComponent {\n  private injector = inject(Injector);\n  private overlayRef = inject(OVERLAY_REF, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private document = inject(DOCUMENT);\n  protected router = injectOverlayRouter();\n  private renderer = injectRenderer();\n\n  public disabled = input(false, { transform: booleanAttribute });\n\n  public sharedRouteTemplate = contentChild(OVERLAY_SHARED_ROUTE_TEMPLATE_TOKEN, { read: TemplateRef });\n  public outletDisabledTemplate = contentChild(OVERLAY_ROUTER_OUTLET_DISABLED_TEMPLATE_TOKEN, { read: TemplateRef });\n\n  public pageWrappers = viewChildren<ElementRef<HTMLElement>>('pageWrapper');\n  public readonly hasSidebar = !!injectSidebarOverlay({ optional: true });\n  public wasDisabled = signal(false);\n\n  public keepDisabledTransition = computed(() => this.wasDisabled() || this.disabled());\n\n  public activePageElement = computed(() => {\n    const wrappers = this.pageWrappers();\n    const currentPage = this.router.currentPage();\n    const currentPageIndex = this.router.routes().findIndex((r) => r.path === currentPage?.path);\n\n    return wrappers[currentPageIndex]?.nativeElement ?? null;\n  });\n\n  protected transitionType = computed(() => {\n    const type = this.router.transitionType();\n\n    if (type !== 'none' && this.keepDisabledTransition()) {\n      return 'fade';\n    }\n\n    return type;\n  });\n\n  constructor() {\n    afterNextRender(() => {\n      const paneElement = this.overlayRef?.elements?.paneElement;\n\n      if (!paneElement) return;\n\n      const background = getComputedStyle(paneElement).backgroundColor;\n\n      if (!background || background === 'transparent' || background === 'rgba(0, 0, 0, 0)') return;\n\n      this.renderer.setCssProperty(\n        this.elementRef.nativeElement,\n        '--_et-overlay-router-outlet-page-background',\n        background,\n      );\n    });\n\n    let isFirstNavigation = true;\n\n    effect(() => {\n      this.router.currentPage();\n\n      untracked(() => {\n        if (isFirstNavigation) {\n          isFirstNavigation = false;\n\n          return;\n        }\n\n        afterNextRender(() => this.focusActivePage(), {\n          injector: this.injector,\n        });\n      });\n    });\n  }\n\n  public scrollActivePageTo(options?: ScrollToOptions | undefined) {\n    this.activePageElement()?.scroll(options);\n  }\n\n  public disabledPageAnimationStateChange(state: AnimatedLifecycleState) {\n    if (state === 'entered') {\n      this.wasDisabled.set(true);\n    } else if (state === 'left') {\n      this.wasDisabled.set(false);\n    }\n  }\n\n  /**\n   * Moves focus into the freshly navigated page, mirroring the overlay's own open-time focus behaviour\n   * (first-tabbable by default, so buttons/inputs win over headings). Falls back to the page wrapper when\n   * the page has nothing tabbable. Respects the overlay's `autoFocus` config, including `false`.\n   */\n  private focusActivePage() {\n    const activePage = this.activePageElement();\n\n    if (!activePage) return;\n\n    applyInitialFocus(activePage, this.overlayRef?.config.autoFocus ?? 'first-tabbable', this.document);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { OVERLAY_ROUTER_OUTLET_TOKEN } from './overlay-router-outlet.component';\n\n@Component({\n  selector: 'et-overlay-shared-route-template-outlet',\n  template: `\n    @if (routerOutlet.sharedRouteTemplate(); as tpl) {\n      <ng-container *ngTemplateOutlet=\"tpl\" />\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: 'et-overlay-shared-route-template-outlet-host',\n    // Forces a component ID distinct from the identical @ethlete/cdk twin (NG0912).\n    'data-et-components': '',\n  },\n  styles: `\n    .et-overlay-shared-route-template-outlet-host {\n      display: contents;\n    }\n  `,\n})\nexport class OverlaySharedRouteTemplateOutletComponent {\n  protected routerOutlet = inject(OVERLAY_ROUTER_OUTLET_TOKEN);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, TemplateRef, ViewEncapsulation, contentChild, input, viewChild } from '@angular/core';\nimport { syncSignal } from '@ethlete/core';\nimport { OverlayBodyDividerType } from '../overlay-body.component';\nimport { OVERLAY_HEADER_TEMPLATE_TOKEN } from '../overlay-header-template.directive';\nimport { injectSidebarOverlay } from './sidebar-overlay';\n\n@Component({\n  selector: 'et-overlay-sidebar',\n  template: `\n    <ng-template #sidebarContentTpl>\n      <ng-content />\n    </ng-template>\n\n    @if (sidebar.renderSidebar()) {\n      <ng-container *ngTemplateOutlet=\"sidebarContent()\" />\n    }\n  `,\n  styleUrl: './overlay-sidebar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: 'et-overlay-sidebar-host',\n    '[class.et-overlay-sidebar--visible]': 'sidebar.renderSidebar()',\n  },\n})\nexport class OverlaySidebarComponent {\n  protected sidebar = injectSidebarOverlay();\n  public pageDividers = input<OverlayBodyDividerType>(false);\n  public sidebarContent = viewChild.required<TemplateRef<unknown>>('sidebarContentTpl');\n  public sidebarHeaderContent = contentChild(OVERLAY_HEADER_TEMPLATE_TOKEN);\n\n  constructor() {\n    syncSignal(this.sidebarContent, this.sidebar.sidebarContentTemplate, { skipSyncRead: true });\n    syncSignal(this.sidebarHeaderContent, this.sidebar.sidebarHeaderTemplate);\n    syncSignal(this.pageDividers, this.sidebar.sidebarPageDividers);\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { OVERLAY_REF, OverlayRef } from '../../overlay';\nimport { ToggletipComponent } from '../toggletip.component';\n\n@Directive({\n  selector: '[etToggletipClose]',\n  host: {\n    '(click)': 'overlayRef.close()',\n  },\n})\nexport class ToggletipCloseDirective {\n  protected overlayRef = inject<OverlayRef<ToggletipComponent, unknown>>(OVERLAY_REF);\n}\n","// codes 1500-1599\nexport const TOGGLETIP_ERROR_CODES = {\n  TEMPLATE_TOGGLETIP_REQUIRES_LABEL: 1500,\n  TRIGGER_REQUIRES_BUTTON: 1501,\n  TRIGGER_REQUIRES_TOGGLETIP: 1502,\n} as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The enter/leave animation shared by every anchored floating panel (tooltip, toggletip, menu,\n * and - via the same mount call - any future panel with the same open/close choreography), as a\n * styles-only component mounted by whichever directive opens the panel.\n *\n * A consumer opts in by adding the `et-floating-panel` class to its overlay's `containerClass`\n * and setting `--et-floating-panel-enter-duration`, `--et-floating-panel-leave-duration` and\n * `--et-floating-panel-distance` on that same class, then calling `mountFloatingPanelStyles()`\n * once (e.g. from its directive's constructor).\n *\n * @internal\n */\n@Component({\n  selector: 'et-floating-panel-styles',\n  template: '',\n  styleUrl: './floating-panel-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FloatingPanelStylesComponent {}\n\n/** @internal */\nexport const mountFloatingPanelStyles = () => injectStyleManager().mount(FloatingPanelStylesComponent);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  Injector,\n  TemplateRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  untracked,\n} from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective } from '@ethlete/core';\nimport { ToggletipContent } from './headless/toggletip.directive';\n\n@Component({\n  selector: 'et-toggletip',\n  templateUrl: './toggletip.component.html',\n  styleUrl: './toggletip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-toggletip',\n    '[attr.id]': 'toggletipId()',\n    '[attr.data-has-template]': 'hasTemplate() || null',\n  },\n})\nexport class ToggletipComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private triggerColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n  protected injector = inject(Injector);\n\n  public toggletipId = input.required<string>();\n  protected contentId = input.required<string>();\n  public content = input.required<ToggletipContent>();\n  public colorProvider = input.required<ProvideColorDirective | null>();\n\n  public hasTemplate = computed(() => this.content() instanceof TemplateRef);\n  public contentText = computed<string | null>(() => {\n    const content = this.content();\n    return typeof content === 'string' ? content : null;\n  });\n  public contentTemplate = computed<TemplateRef<unknown> | null>(() => {\n    const content = this.content();\n    return content instanceof TemplateRef ? content : null;\n  });\n\n  constructor() {\n    // the toggletip surface IS the overlay's own surface - paint the overlay's registered elevation\n    // exactly (read from the surface-context tracker), don't stack a level above it\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    effect(() => {\n      const providedColor = this.colorProvider() ?? this.triggerColorProvider ?? null;\n\n      untracked(() => {\n        if (providedColor) {\n          this.ownColorProvider.syncWithProvider(providedColor);\n        }\n      });\n    });\n  }\n}\n","<div class=\"et-toggletip__surface\">\n  <div [attr.id]=\"contentId()\" class=\"et-toggletip__content\">\n    @if (contentText(); as text) {\n      <p class=\"et-toggletip__text\">{{ text }}</p>\n    } @else if (contentTemplate()) {\n      <ng-container [ngTemplateOutlet]=\"contentTemplate()\" [ngTemplateOutletInjector]=\"injector\" />\n    }\n  </div>\n</div>\n","let nextToggletipId = 0;\n\nexport const createToggletipId = (prefix = 'et-toggletip') => {\n  nextToggletipId += 1;\n  return `${prefix}-${nextToggletipId}`;\n};\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  TemplateRef,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { COLOR_PROVIDER, RuntimeError, injectRenderer } from '@ethlete/core';\nimport { OffsetOptions, Padding, Placement } from '@floating-ui/dom';\nimport { tap } from 'rxjs';\nimport { OverlayConfig, OverlayRef, anchoredOverlayStrategy } from '../../overlay';\nimport { mountFloatingPanelStyles } from '../../overlay/floating-panel-styles.component';\nimport { injectOverlayManager } from '../../overlay/overlay-manager';\nimport { TOGGLETIP_ERROR_CODES } from '../toggletip-errors';\nimport { ToggletipComponent } from '../toggletip.component';\nimport { createToggletipId } from '../toggletip.utils';\n\nexport type ToggletipContent = string | TemplateRef<unknown>;\n\n@Directive({\n  selector: '[etToggletip]',\n  exportAs: 'etToggletip',\n  host: {\n    '(click)': 'toggle()',\n    '(keydown.escape)': 'hide()',\n    '[attr.aria-controls]': 'controls()',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.aria-haspopup]': 'popupRole()',\n    '[attr.data-toggletip-open]': 'isOpen() || null',\n  },\n})\nexport class ToggletipDirective {\n  private destroyRef = inject(DestroyRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private colorProvider = inject(COLOR_PROVIDER, { optional: true });\n  private renderer = injectRenderer();\n\n  private overlayManager = injectOverlayManager();\n\n  public content = input<ToggletipContent | null>(null, { alias: 'etToggletip' });\n  public ariaLabel = input<string | null>(null, { alias: 'etToggletipAriaLabel' });\n  public ariaLabelledBy = input<string | null>(null, { alias: 'etToggletipAriaLabelledBy' });\n  public placement = input<Placement>('top');\n  public fallbackPlacements = input<Placement[] | undefined>(undefined);\n  public offset = input<OffsetOptions | null>(10);\n  /**\n   * How close the arrow may get to the panel's corners. Must clear the panel's border radius\n   * (`--_et-toggletip-radius`, 16px) or the arrow's base rides into the rounded corner - which is what\n   * happens on aligned placements (`bottom-end`, `left-start`, …) and whenever `shift` pushes a panel\n   * off center near a viewport edge.\n   */\n  public arrowPadding = input<Padding | null>(20);\n  public viewportPadding = input<Padding | null>(8);\n  public disabled = input(false, { alias: 'etToggletipDisabled', transform: booleanAttribute });\n  public open = model(false, { alias: 'etToggletipOpen' });\n\n  /** @internal Set by `etToggletipTrigger` while its button is inactive; composes with `disabled` instead of overwriting it. */\n  public triggerInactive = signal(false);\n\n  private effectiveDisabled = computed(() => this.disabled() || this.triggerInactive());\n\n  /** @internal */\n  public overlayRef = signal<OverlayRef<ToggletipComponent, unknown> | null>(null);\n\n  private toggletipId = createToggletipId();\n  private contentId = `${this.toggletipId}-content`;\n  private resolvedAriaLabel = computed(() => {\n    if (this.ariaLabelledBy()) {\n      return null;\n    }\n\n    const ariaLabel = this.ariaLabel();\n    if (ariaLabel) {\n      return ariaLabel;\n    }\n\n    const content = this.content();\n    return typeof content === 'string' ? content : null;\n  });\n  private resolvedAriaDescribedBy = computed(() => {\n    const content = this.content();\n\n    if (content instanceof TemplateRef) {\n      return this.contentId;\n    }\n\n    return this.ariaLabel() || this.ariaLabelledBy() ? this.contentId : null;\n  });\n\n  constructor() {\n    mountFloatingPanelStyles();\n\n    effect(() => {\n      const content = this.content();\n      const disabled = this.effectiveDisabled();\n\n      if ((content === null || disabled) && this.open()) {\n        untracked(() => {\n          this.open.set(false);\n        });\n      }\n    });\n\n    effect(() => {\n      const content = this.content();\n      const disabled = this.effectiveDisabled();\n      const open = this.open();\n\n      if (!open || disabled || content === null) {\n        untracked(() => {\n          this.closeOverlay();\n        });\n\n        return;\n      }\n\n      if (!this.overlayRef()) {\n        untracked(() => {\n          this.mountToggletip(content);\n        });\n      }\n    });\n\n    effect(() => {\n      const hostElement = this.overlayRef()?.elements?.hostElement;\n\n      if (!hostElement) {\n        return;\n      }\n\n      this.renderer.setAttributes(hostElement, {\n        'aria-label': this.resolvedAriaLabel(),\n        'aria-labelledby': this.ariaLabelledBy(),\n        'aria-describedby': this.resolvedAriaDescribedBy(),\n      });\n    });\n  }\n\n  public toggle() {\n    if (this.effectiveDisabled() || this.content() === null) {\n      this.hide();\n\n      return;\n    }\n\n    this.open.update((open) => !open);\n  }\n\n  public show() {\n    if (this.effectiveDisabled() || this.content() === null) {\n      return;\n    }\n\n    this.open.set(true);\n  }\n\n  public hide() {\n    this.open.set(false);\n  }\n\n  public isOpen() {\n    return this.open();\n  }\n\n  public controls() {\n    return this.open() ? this.toggletipId : null;\n  }\n\n  public expanded() {\n    return this.content() && !this.effectiveDisabled() ? this.open() : null;\n  }\n\n  public popupRole() {\n    return this.content() && !this.effectiveDisabled() ? 'dialog' : null;\n  }\n\n  private mountToggletip(content: ToggletipContent) {\n    if (this.overlayRef()) {\n      return;\n    }\n\n    if (content instanceof TemplateRef && !this.ariaLabel() && !this.ariaLabelledBy()) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          TOGGLETIP_ERROR_CODES.TEMPLATE_TOGGLETIP_REQUIRES_LABEL,\n          '[ToggletipDirective] Template toggletips require etToggletipAriaLabel or etToggletipAriaLabelledBy so the dialog has an accessible name.',\n        );\n      }\n\n      this.open.set(false);\n\n      return;\n    }\n\n    const hostElement = this.elementRef.nativeElement;\n    const config: OverlayConfig = {\n      id: this.toggletipId,\n      bindings: [\n        inputBinding('toggletipId', () => this.toggletipId),\n        inputBinding('contentId', () => this.contentId),\n        inputBinding('content', () => this.content() ?? content),\n        inputBinding('colorProvider', () => this.colorProvider ?? null),\n      ],\n      role: 'dialog',\n      ariaLabel: this.resolvedAriaLabel(),\n      ariaLabelledBy: this.ariaLabelledBy(),\n      ariaDescribedBy: this.resolvedAriaDescribedBy(),\n      disableClose: false,\n      hasBackdrop: false,\n      mode: 'non-modal',\n      origin: hostElement,\n      closeOnEscape: true,\n      closeOnOutsidePointer: true,\n      panelClass: 'et-toggletip-panel',\n      strategies: anchoredOverlayStrategy({\n        containerClass: ['et-overlay--toggletip', 'et-floating-panel'],\n        arrow: true,\n        placement: this.placement(),\n        fallbackPlacements: this.fallbackPlacements(),\n        offset: this.offset(),\n        arrowPadding: this.arrowPadding(),\n        viewportPadding: this.viewportPadding(),\n        shift: true,\n        autoHide: true,\n        autoCloseIfReferenceHidden: true,\n      }),\n      restoreFocus: true,\n      autoFocus: 'first-tabbable',\n    };\n    const overlayRef = this.overlayManager.open<ToggletipComponent>(ToggletipComponent, config);\n\n    this.overlayRef.set(overlayRef);\n\n    overlayRef\n      .beforeClosed()\n      .pipe(\n        tap(() => {\n          if (this.overlayRef() === overlayRef && this.open()) {\n            this.open.set(false);\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    overlayRef\n      .afterClosed()\n      .pipe(\n        tap(() => {\n          if (this.overlayRef() === overlayRef) {\n            this.overlayRef.set(null);\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private closeOverlay() {\n    this.overlayRef()?.close();\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, effect, inject, untracked } from '@angular/core';\nimport { RuntimeError, setInputSignal } from '@ethlete/core';\nimport { ButtonDirective } from '../../button/headless';\nimport { TOGGLETIP_ERROR_CODES } from '../toggletip-errors';\nimport { ToggletipDirective } from './toggletip.directive';\n\nconst PRESSED_VARIANT_MAP: Record<string, string> = {\n  filled: 'outline',\n  outline: 'filled',\n  tonal: 'filled',\n  transparent: 'tonal',\n};\n\n@Directive({\n  selector: '[etToggletipTrigger]',\n  exportAs: 'etToggletipTrigger',\n  host: {\n    '[attr.data-pressed-variant]': 'pressedVariant()',\n  },\n})\nexport class ToggletipTriggerDirective {\n  private button = inject(ButtonDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private toggletip = inject(ToggletipDirective, { optional: true });\n\n  constructor() {\n    const button = this.button;\n    const toggletip = this.toggletip;\n\n    if (button && toggletip) {\n      effect(() => {\n        const inactive = button.isInactive();\n\n        untracked(() => {\n          toggletip.triggerInactive.set(inactive);\n        });\n      });\n\n      effect(() => {\n        const open = toggletip.open();\n\n        untracked(() => {\n          setInputSignal(button.pressed, open);\n          setInputSignal(button.emitAriaPressed, false);\n        });\n      });\n    }\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.button) {\n          throw new RuntimeError(\n            TOGGLETIP_ERROR_CODES.TRIGGER_REQUIRES_BUTTON,\n            '[ToggletipTriggerDirective] etToggletipTrigger must be used on an element that also has a button directive such as [et-button].',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        if (!this.toggletip) {\n          throw new RuntimeError(\n            TOGGLETIP_ERROR_CODES.TRIGGER_REQUIRES_TOGGLETIP,\n            '[ToggletipTriggerDirective] etToggletipTrigger must be used on the same element as [etToggletip].',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n\n    this.destroyRef.onDestroy(() => {\n      if (!button || !toggletip) {\n        return;\n      }\n\n      toggletip.triggerInactive.set(false);\n      setInputSignal(button.pressed, undefined);\n      setInputSignal(button.emitAriaPressed, true);\n    });\n  }\n\n  public isOpen() {\n    return this.toggletip?.open() ?? false;\n  }\n\n  public pressedVariant() {\n    if (!this.isOpen()) {\n      return null;\n    }\n\n    const variant = this.elementRef.nativeElement.getAttribute('data-variant');\n    return variant ? (PRESSED_VARIANT_MAP[variant] ?? null) : null;\n  }\n}\n","import { ToggletipCloseDirective, ToggletipDirective, ToggletipTriggerDirective } from './headless';\nimport { ToggletipComponent } from './toggletip.component';\n\nexport const TOGGLETIP_IMPORTS = [\n  ToggletipDirective,\n  ToggletipCloseDirective,\n  ToggletipTriggerDirective,\n  ToggletipComponent,\n] as const;\n","// codes 3700-3799\nexport const BREADCRUMB_ERROR_CODES = {\n  /** A breadcrumb part (`etBreadcrumbItemTemplate`, `etBreadcrumbSeparator`) was used outside an `[etBreadcrumb]`. */\n  PART_OUTSIDE_BREADCRUMB: 3700,\n  /** An `[etBreadcrumb]` rendered no `etBreadcrumbItemTemplate`, so there is no trail to show. */\n  MISSING_ITEMS: 3701,\n  /** `etBreadcrumbSeo` can reach neither an `etBreadcrumb` on its element nor a breadcrumb manager. */\n  SEO_OUTSIDE_BREADCRUMB: 3702,\n} as const;\n","import { InjectionToken, Type } from '@angular/core';\nimport { BreadcrumbDirective } from './breadcrumb.directive';\nimport { BreadcrumbSegmentDirective } from './breadcrumb-segment.directive';\n\nexport const BREADCRUMB_TOKEN = new InjectionToken<BreadcrumbDirective>('BREADCRUMB_TOKEN');\n\n/** What a breadcrumb needs from the collapse affordance: the component that renders the crumbs which didn't fit. */\nexport type BreadcrumbCollapseAffordance = {\n  /** Rendered in the overflow slot with `items` (the hidden crumbs) and `crumbTemplate` as inputs. */\n  overflowComponent: Type<unknown>;\n};\n\nexport const BREADCRUMB_COLLAPSE_TOKEN = new InjectionToken<BreadcrumbCollapseAffordance>('BREADCRUMB_COLLAPSE_TOKEN');\n\nexport const BREADCRUMB_SEGMENT_TOKEN = new InjectionToken<BreadcrumbSegmentDirective>('BREADCRUMB_SEGMENT_TOKEN');\n","import { DestroyRef, Directive, afterNextRender, booleanAttribute, inject, input, signal } from '@angular/core';\nimport { RuntimeError, injectHostElement, injectTemplateRef } from '@ethlete/core';\nimport { BREADCRUMB_ERROR_CODES } from '../breadcrumb-errors';\nimport { BREADCRUMB_SEGMENT_TOKEN, BREADCRUMB_TOKEN } from './breadcrumb.tokens';\n\nconst selectorOf = (directiveName: string) => `et${directiveName.replace('Directive', '')}`;\n\nconst assertInsideBreadcrumb = (hasHost: boolean, directiveName: string) => {\n  if (ngDevMode) {\n    const element = injectHostElement<Comment>();\n\n    afterNextRender(() => {\n      if (!hasHost) {\n        throw new RuntimeError(\n          BREADCRUMB_ERROR_CODES.PART_OUTSIDE_BREADCRUMB,\n          `[${directiveName}] ${selectorOf(directiveName)} must be placed inside an [etBreadcrumb] element ` +\n            '(e.g. <et-breadcrumb>) or an <ng-template etBreadcrumbSegment>.',\n          { element },\n        );\n      }\n    });\n  }\n};\n\n/**\n * One crumb of the trail.\n *\n * Put whatever the crumb is inside it: a `routerLink` anchor, plain text for the current page, a\n * `<button>`. Marking it `loading` renders a placeholder instead, for a name that is still being\n * fetched - the crumb keeps its slot in the trail meanwhile.\n *\n * @example\n * <ng-template etBreadcrumbItemTemplate><a etBreadcrumbItem routerLink=\"/teams\">Teams</a></ng-template>\n * <ng-template etBreadcrumbItemTemplate [loading]=\"team.isLoading()\">\n *   <span etBreadcrumbItem>{{ team.name() }}</span>\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etBreadcrumbItemTemplate]',\n  exportAs: 'etBreadcrumbItemTemplate',\n})\nexport class BreadcrumbItemTemplateDirective {\n  private breadcrumb = inject(BREADCRUMB_TOKEN, { optional: true });\n  private segment = inject(BREADCRUMB_SEGMENT_TOKEN, { optional: true });\n\n  public templateRef = injectTemplateRef();\n\n  /** Render a placeholder instead of the crumb, for a label that hasn't arrived yet. @default false */\n  public loading = input(false, { transform: booleanAttribute });\n\n  /**\n   * This crumb's plain-text name for **structured data** - read only by\n   * [`etBreadcrumbSeo`](/components/breadcrumb#seo-structured-data), never rendered.\n   */\n  public name = input<string | null>(null);\n\n  /**\n   * This crumb's **absolute** URL for structured data, same story as {@link name}. Omit it on the last\n   * crumb: the page it names is the page the markup is on.\n   */\n  public url = input<string | null>(null);\n\n  /** @internal Whether this is the last crumb - the current page, which is what `aria-current` goes on. */\n  public isLast = signal(false);\n\n  constructor() {\n    const segment = this.segment;\n\n    if (segment) {\n      segment.registerCrumb(this);\n\n      inject(DestroyRef).onDestroy(() => segment.unregisterCrumb(this));\n    }\n\n    assertInsideBreadcrumb(!!this.breadcrumb || !!segment, 'BreadcrumbItemTemplateDirective');\n  }\n}\n\n/**\n * Replaces the chevron the default breadcrumb draws between crumbs - a slash, a bullet, an icon of your\n * own. Rendered once per gap and hidden from assistive tech either way.\n *\n * Put it inside the `<et-breadcrumb>` (or the outlet), not in a routed view's segment.\n *\n * @example\n * <ng-template etBreadcrumbSeparator>/</ng-template>\n */\n@Directive({\n  selector: 'ng-template[etBreadcrumbSeparator]',\n  exportAs: 'etBreadcrumbSeparator',\n})\nexport class BreadcrumbSeparatorDirective {\n  private breadcrumb = inject(BREADCRUMB_TOKEN, { optional: true });\n\n  public templateRef = injectTemplateRef();\n\n  constructor() {\n    assertInsideBreadcrumb(!!this.breadcrumb, 'BreadcrumbSeparatorDirective');\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { BreadcrumbItemTemplateDirective } from './breadcrumb-templates.directive';\n\n/**\n * The crumb itself, inside an `etBreadcrumbItemTemplate` - an anchor, a `<button>`, or a plain `<span>`\n * for the page you're on. It carries the crumb styling and marks the last crumb `aria-current=\"page\"`.\n *\n * Optional: a crumb template renders whatever it contains. Use it and you get the default look and the\n * `aria-current` wiring for free.\n */\n@Directive({\n  selector: '[etBreadcrumbItem]',\n  exportAs: 'etBreadcrumbItem',\n  host: {\n    class: 'et-breadcrumb-item',\n    '[attr.aria-current]': 'isCurrent() ? \"page\" : null',\n  },\n})\nexport class BreadcrumbItemDirective {\n  private itemTemplate = inject(BreadcrumbItemTemplateDirective, { optional: true });\n\n  protected isCurrent() {\n    return this.itemTemplate?.isLast() ?? false;\n  }\n}\n","import { computed, signal } from '@angular/core';\nimport { defineProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { BreadcrumbSegment } from './breadcrumb.types';\n\nconst BREADCRUMB_MANAGER_DEF = /* @__PURE__ */ defineProvider(\n  () => {\n    const registeredSegments = signal<BreadcrumbSegment[]>([]);\n\n    /**\n     * The registered segments in trail order. That order is **registration order** - which under the\n     * router is view-creation order, i.e. outermost route first - unless a segment sets an explicit\n     * `order`.\n     */\n    const segments = computed(() => {\n      const positioned = registeredSegments().map((segment, index) => ({\n        segment,\n        key: segment.order() ?? index,\n      }));\n\n      // sort() is stable, so equal keys keep registration order\n      return positioned.sort((a, b) => a.key - b.key).map(({ segment }) => segment);\n    });\n\n    /** Every crumb currently contributing to the trail, flattened in segment order. */\n    const crumbs = computed(() => segments().flatMap((segment) => [...segment.crumbs()]));\n\n    return {\n      segments,\n      crumbs,\n\n      /** @internal Called by `etBreadcrumbSegment` while its declaring view is alive. */\n      registerSegment: (segment: BreadcrumbSegment) => registeredSegments.update((segments) => [...segments, segment]),\n\n      /** @internal */\n      unregisterSegment: (segment: BreadcrumbSegment) =>\n        registeredSegments.update((segments) => segments.filter((registered) => registered !== segment)),\n    };\n  },\n  { name: 'Breadcrumb Manager' },\n);\n\n/**\n * Collects the trail from every view that is currently on screen. Each routed view registers only the\n * crumbs it owns via `<ng-template etBreadcrumbSegment>`; the single `<et-breadcrumb-outlet>` in the\n * shell renders all of them, in view order, as one trail.\n *\n * Provide it once, above the outlet and every view that contributes to the trail:\n *\n * @example\n * providers: [provideBreadcrumbManager()]\n */\nexport const provideBreadcrumbManager = /* @__PURE__ */ toProvideFn(BREADCRUMB_MANAGER_DEF);\nexport const injectBreadcrumbManager = /* @__PURE__ */ toInjectFn(BREADCRUMB_MANAGER_DEF);\n","import { DestroyRef, Directive, inject, input, signal } from '@angular/core';\nimport { injectTemplateRef } from '@ethlete/core';\nimport { injectBreadcrumbManager } from '../breadcrumb-manager';\nimport { BreadcrumbCrumb } from '../breadcrumb.types';\nimport { BREADCRUMB_SEGMENT_TOKEN } from './breadcrumb.tokens';\n\n/**\n * This view's contribution to the trail: the crumbs it owns, and nothing above it. Declare one in every\n * routed view that adds a level, and the `<et-breadcrumb-outlet>` in the shell renders all the\n * registered segments as a single trail - so a deep page contributes one crumb rather than restating\n * the whole path.\n *\n * Trail order is the order segments register, which under the router is view-creation order (outermost\n * route first). Declare the segment **unconditionally** to keep that true - a segment behind an `@if`\n * that flips later registers after its own children. When a crumb's label isn't there yet, mark the\n * crumb `loading` instead of withholding the segment. `order` is the escape hatch for a structure that\n * can't follow this.\n *\n * @example\n * // teams-detail-view.component.ts - contributes just the team's own crumb\n * <ng-template etBreadcrumbSegment>\n *   <ng-template etBreadcrumbItemTemplate [loading]=\"team.isLoading()\">\n *     <span etBreadcrumbItem>{{ team.name() }}</span>\n *   </ng-template>\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etBreadcrumbSegment]',\n  exportAs: 'etBreadcrumbSegment',\n  providers: [{ provide: BREADCRUMB_SEGMENT_TOKEN, useExisting: BreadcrumbSegmentDirective }],\n})\nexport class BreadcrumbSegmentDirective {\n  private manager = injectBreadcrumbManager();\n\n  public templateRef = injectTemplateRef();\n\n  /**\n   * Explicit position in the trail, for a structure whose view-creation order doesn't match its\n   * hierarchy. Segments without one keep their registration index, and the two are compared on the same\n   * scale - so `order=\"0\"` pins a segment to the front. @default null\n   */\n  public order = input<number | null>(null);\n\n  /** The crumbs declared inside this segment, in declaration order. */\n  public crumbs = signal<BreadcrumbCrumb[]>([]);\n\n  constructor() {\n    this.manager.registerSegment(this);\n\n    inject(DestroyRef).onDestroy(() => this.manager.unregisterSegment(this));\n  }\n\n  /** @internal Called by a crumb template inside this segment while it exists. */\n  public registerCrumb(crumb: BreadcrumbCrumb) {\n    this.crumbs.update((crumbs) => [...crumbs, crumb]);\n  }\n\n  /** @internal */\n  public unregisterCrumb(crumb: BreadcrumbCrumb) {\n    this.crumbs.update((crumbs) => crumbs.filter((registered) => registered !== crumb));\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the breadcrumb announces. Defaults are English ({@link DEFAULT_BREADCRUMB_LABELS});\n * override them app-wide with {@link provideBreadcrumbLabels} or per instance via the `labels` input.\n */\nexport type BreadcrumbLabels = {\n  /** Accessible label for the navigation landmark. */\n  navigation: string;\n  /** Accessible label for the control that opens the collapsed middle crumbs. */\n  overflow: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_BREADCRUMB_LABELS: BreadcrumbLabels = {\n  navigation: 'Breadcrumb',\n  overflow: 'Show hidden levels',\n};\n\nconst BREADCRUMB_LABELS_DEF = /* @__PURE__ */ defineLabels<BreadcrumbLabels>(\n  'BREADCRUMB_LABELS',\n  DEFAULT_BREADCRUMB_LABELS,\n);\n\n/**\n * Localize the breadcrumb's strings for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_BREADCRUMB_LABELS}\n * value.\n *\n * @example\n * provideBreadcrumbLabels({ navigation: 'Brotkrumen', overflow: 'Ausgeblendete Ebenen anzeigen' });\n */\nexport const provideBreadcrumbLabels = /* @__PURE__ */ toProvideFn(BREADCRUMB_LABELS_DEF);\nexport const injectBreadcrumbLabels = /* @__PURE__ */ toInjectFn(BREADCRUMB_LABELS_DEF);\nexport const BREADCRUMB_LABELS = /* @__PURE__ */ toToken(BREADCRUMB_LABELS_DEF);\n","import {\n  Directive,\n  ElementRef,\n  afterNextRender,\n  afterRenderEffect,\n  booleanAttribute,\n  computed,\n  contentChild,\n  contentChildren,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError, signalHostElementScrollState } from '@ethlete/core';\nimport { BREADCRUMB_ERROR_CODES } from '../breadcrumb-errors';\nimport { BreadcrumbLabels, injectBreadcrumbLabels } from '../breadcrumb-labels';\nimport { BreadcrumbCrumb, BreadcrumbRenderItem } from '../breadcrumb.types';\nimport { BREADCRUMB_COLLAPSE_TOKEN, BREADCRUMB_TOKEN } from './breadcrumb.tokens';\nimport { BreadcrumbItemTemplateDirective, BreadcrumbSeparatorDirective } from './breadcrumb-templates.directive';\n\nconst MIN_COLLAPSIBLE_ITEMS = 3;\n\n/**\n * Headless breadcrumb: owns the trail, decides how much of it fits, and exposes the slots to render. It\n * is the navigation landmark itself (`role=\"navigation\"` + a label), so the element you put it on is the\n * `<nav>`.\n *\n * @example\n * <nav etBreadcrumb>\n *   <ng-template etBreadcrumbItemTemplate><a etBreadcrumbItem routerLink=\"/\">Home</a></ng-template>\n *   <ng-template etBreadcrumbItemTemplate><span etBreadcrumbItem>Invoice 4711</span></ng-template>\n * </nav>\n */\n@Directive({\n  selector: '[etBreadcrumb]',\n  exportAs: 'etBreadcrumb',\n  providers: [{ provide: BREADCRUMB_TOKEN, useExisting: BreadcrumbDirective }],\n  host: {\n    role: 'navigation',\n    '[attr.aria-label]': 'resolvedLabels().navigation',\n    '[attr.data-collapsed]': 'isCollapsed() ? \"\" : null',\n    '[attr.data-measuring]': 'isMeasuring() ? \"\" : null',\n  },\n})\nexport class BreadcrumbDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private injectedLabels = injectBreadcrumbLabels();\n\n  private collapseAffordance = inject(BREADCRUMB_COLLAPSE_TOKEN, { optional: true });\n\n  /**\n   * Move the middle crumbs into an overflow control when the trail doesn't fit. Turn it off to let the\n   * trail be clipped (or wrapped, or scrolled) by your own CSS instead.\n   *\n   * Only has an effect where the collapse affordance is present: apply `etBreadcrumbCollapse` from\n   * `BREADCRUMB_COLLAPSE_IMPORTS` to the breadcrumb (or any ancestor, e.g. the app shell). @default true\n   */\n  public collapse = input(true, { transform: booleanAttribute });\n\n  /**\n   * Per-instance overrides for the breadcrumb's accessible labels, merged over the injected\n   * `BREADCRUMB_LABELS`. Prefer `provideBreadcrumbLabels` for app-wide localization.\n   */\n  public labels = input<Partial<BreadcrumbLabels> | null>(null);\n\n  /** The trail, supplied from outside. `null` (the default) uses the crumbs declared inside instead. */\n  public crumbs = input<readonly BreadcrumbCrumb[] | null>(null);\n\n  private declaredCrumbs = contentChildren(BreadcrumbItemTemplateDirective, { descendants: true });\n\n  /** @internal */\n  public separatorTemplate = contentChild(BreadcrumbSeparatorDirective, { descendants: true });\n\n  private canCollapse = computed(() => this.collapse() && !!this.collapseAffordance);\n\n  /** @internal */\n  public overflowComponent = this.collapseAffordance?.overflowComponent ?? null;\n\n  /** The trail this breadcrumb renders, from whichever of the two sources is in play. */\n  public items = computed<readonly BreadcrumbCrumb[]>(() => this.crumbs() ?? this.declaredCrumbs());\n\n  private scrollState = signalHostElementScrollState();\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<BreadcrumbLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** The width the full trail needs, measured the one time it didn't fit. */\n  private fullTrailWidth = linkedSignal<readonly BreadcrumbCrumb[], number | null>({\n    source: () => this.items(),\n    computation: () => null,\n  });\n\n  private availableWidth = computed(() => this.scrollState().elementDimensions.client?.width ?? 0);\n\n  private hasMeasured = signal(false);\n\n  /** Whether the middle crumbs are currently hidden behind the overflow control. */\n  public isCollapsed = computed(() => {\n    if (!this.canCollapse() || this.items().length < MIN_COLLAPSIBLE_ITEMS) return false;\n\n    const fullTrailWidth = this.fullTrailWidth();\n\n    if (fullTrailWidth === null) return false;\n\n    return this.availableWidth() < fullTrailWidth;\n  });\n\n  /**\n   * Whether a measurement taken while the trail was expanded showed it fitting. Cleared on every change\n   * of the collapsed state, so re-expanding always has to prove the fit again.\n   */\n  private fitConfirmed = linkedSignal<boolean, boolean>({\n    source: () => this.isCollapsed(),\n    computation: () => false,\n  });\n\n  /** @internal */\n  public isMeasuring = computed(() => {\n    if (!this.canCollapse() || this.items().length < MIN_COLLAPSIBLE_ITEMS) return false;\n    if (!this.hasMeasured()) return true;\n\n    return this.fullTrailWidth() !== null && !this.isCollapsed() && !this.fitConfirmed();\n  });\n\n  /** The slots to render: every crumb, or first + overflow + last once collapsed. */\n  public renderedItems = computed<BreadcrumbRenderItem[]>(() => {\n    const items = this.items();\n    const asItems = () => items.map((item): BreadcrumbRenderItem => ({ type: 'item', item }));\n\n    if (!this.isCollapsed()) return asItems();\n\n    const first = items[0];\n    const last = items[items.length - 1];\n\n    if (!first || !last) return asItems();\n\n    return [\n      { type: 'item', item: first },\n      { type: 'overflow', items: items.slice(1, -1) },\n      { type: 'item', item: last },\n    ];\n  });\n\n  constructor() {\n    effect(() => {\n      const items = this.items();\n\n      untracked(() => {\n        for (const [index, item] of items.entries()) {\n          item.isLast.set(index === items.length - 1);\n        }\n      });\n    });\n\n    // Every measurement has to be read here rather than out of the observers: a render hook runs after\n    // change detection but before the browser paints, so it sees the trail that is about to be painted,\n    // while the observers report the DOM as it was before the collapsed and full trail were swapped.\n    // `scrollState` - the host's dimensions or content changed - is the only thing that may be read\n    // reactively: every other signal in play is one `recordMeasurement` writes, so reading it here would\n    // make the effect schedule itself.\n    afterRenderEffect({\n      earlyRead: () => {\n        this.scrollState();\n\n        const element = this.elementRef.nativeElement;\n\n        untracked(() => this.recordMeasurement(element.clientWidth, element.scrollWidth));\n      },\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (this.items().length === 0) {\n          throw new RuntimeError(\n            BREADCRUMB_ERROR_CODES.MISSING_ITEMS,\n            '[BreadcrumbDirective] This breadcrumb has no crumbs. Declare an <ng-template etBreadcrumbItemTemplate> ' +\n              'per crumb inside it, or bind a composed trail via [crumbs] (which is what et-breadcrumb-outlet does).',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  private recordMeasurement(client: number, scroll: number) {\n    if (client === 0) return;\n\n    this.hasMeasured.set(true);\n\n    // A measurement taken while collapsed describes the collapsed trail, so it must not overwrite the\n    // remembered full width - that is the number the trail is re-expanded against.\n    if (!this.canCollapse() || this.isCollapsed()) return;\n\n    if (scroll <= client) {\n      this.fitConfirmed.set(true);\n\n      return;\n    }\n\n    this.fullTrailWidth.set(scroll);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, TemplateRef, ViewEncapsulation, inject, input } from '@angular/core';\nimport { BUTTON_IMPORTS } from '../button';\nimport { ELLIPSIS_ICON, IconDirective, provideIcons } from '../icon';\nimport { TOGGLETIP_IMPORTS } from '../toggletip';\nimport { BreadcrumbCrumb } from './breadcrumb.types';\nimport { BreadcrumbDirective } from './headless';\n\n/**\n * The control the collapsed middle crumbs live behind. Rendered by the breadcrumb in the overflow slot -\n * you never place it yourself; apply `etBreadcrumbCollapse` and the breadcrumb takes it from there.\n */\n@Component({\n  selector: 'et-breadcrumb-overflow',\n  template: `\n    <button\n      [etToggletip]=\"overflow\"\n      [etToggletipAriaLabel]=\"breadcrumb.resolvedLabels().overflow\"\n      [attr.aria-label]=\"breadcrumb.resolvedLabels().overflow\"\n      class=\"et-breadcrumb-overflow-trigger\"\n      et-icon-button\n      etToggletipTrigger\n      color=\"surface\"\n      size=\"xs\"\n      type=\"button\"\n      variant=\"transparent\"\n    >\n      <i etIcon=\"et-ellipsis\"></i>\n    </button>\n\n    <ng-template #overflow>\n      <ol class=\"et-breadcrumb-overflow-list\" data-toggletip-hug>\n        @for (item of items(); track $index) {\n          <li>\n            <ng-container [ngTemplateOutlet]=\"crumbTemplate()\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n          </li>\n        }\n      </ol>\n    </ng-template>\n  `,\n  styleUrl: './breadcrumb-overflow.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [BUTTON_IMPORTS, IconDirective, NgTemplateOutlet, TOGGLETIP_IMPORTS],\n  providers: [provideIcons(ELLIPSIS_ICON)],\n  host: {\n    class: 'et-breadcrumb-overflow',\n  },\n})\nexport class BreadcrumbOverflowComponent {\n  protected breadcrumb = inject(BreadcrumbDirective);\n\n  /** The crumbs that didn't fit, in trail order. */\n  public items = input.required<readonly BreadcrumbCrumb[]>();\n\n  /** The breadcrumb's crumb template, so an overflowed crumb renders exactly like an inline one. */\n  public crumbTemplate = input.required<TemplateRef<{ $implicit: BreadcrumbCrumb }>>();\n}\n","import { Directive } from '@angular/core';\nimport { BreadcrumbOverflowComponent } from './breadcrumb-overflow.component';\nimport { BREADCRUMB_COLLAPSE_TOKEN } from './headless';\n\n/**\n * Lets a breadcrumb move the crumbs that don't fit into an overflow control. Apply it to the breadcrumb\n * (or to `<et-breadcrumb-outlet>`, or to any ancestor - the app shell's root element covers every\n * breadcrumb below it).\n *\n * @example\n * <et-breadcrumb etBreadcrumbCollapse>…</et-breadcrumb>\n */\n@Directive({\n  selector: '[etBreadcrumbCollapse]',\n  exportAs: 'etBreadcrumbCollapse',\n  providers: [{ provide: BREADCRUMB_COLLAPSE_TOKEN, useExisting: BreadcrumbCollapseDirective }],\n})\nexport class BreadcrumbCollapseDirective {\n  /** @internal */\n  public get overflowComponent() {\n    return BreadcrumbOverflowComponent;\n  }\n}\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { CHEVRON_ICON, IconDirective, provideIcons } from '../icon';\nimport { SKELETON_IMPORTS } from '../skeleton';\nimport { BreadcrumbDirective } from './headless';\n\n/**\n * The default breadcrumb: an ordered trail of crumbs separated by chevrons. Driven by the headless\n * {@link BreadcrumbDirective}.\n *\n * Add `etBreadcrumbCollapse` from `BREADCRUMB_COLLAPSE_IMPORTS` and the middle crumbs move into an\n * overflow control when the trail runs out of room (first and last always stay); without it the trail is\n * clipped.\n *\n * The crumbs are `<ng-template etBreadcrumbItemTemplate>`s you declare. For a routed app, don't place\n * this yourself: let each view contribute an\n * `<ng-template etBreadcrumbSegment>` and put one `<et-breadcrumb-outlet>` in the shell, which renders\n * the composed trail through this component.\n *\n * @example\n * <et-breadcrumb>\n *   <ng-template etBreadcrumbItemTemplate><a etBreadcrumbItem routerLink=\"/\">Home</a></ng-template>\n *   <ng-template etBreadcrumbItemTemplate><span etBreadcrumbItem>Invoice 4711</span></ng-template>\n * </et-breadcrumb>\n */\n@Component({\n  selector: 'et-breadcrumb',\n  templateUrl: './breadcrumb.component.html',\n  styleUrl: './breadcrumb.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, NgComponentOutlet, NgTemplateOutlet, SKELETON_IMPORTS],\n  providers: [provideIcons(CHEVRON_ICON)],\n  hostDirectives: [\n    {\n      directive: BreadcrumbDirective,\n      inputs: ['collapse', 'labels', 'crumbs'],\n    },\n  ],\n  host: {\n    class: 'et-breadcrumb',\n  },\n})\nexport class BreadcrumbComponent {\n  protected breadcrumb = inject(BreadcrumbDirective);\n}\n","<ol class=\"et-breadcrumb-list\">\n  @for (slot of breadcrumb.renderedItems(); track $index) {\n    <li [attr.data-type]=\"slot.type\" class=\"et-breadcrumb-slot\">\n      @if (slot.type === 'item') {\n        <ng-container [ngTemplateOutlet]=\"crumb\" [ngTemplateOutletContext]=\"{ $implicit: slot.item }\" />\n      } @else {\n        <ng-container\n          [ngComponentOutlet]=\"breadcrumb.overflowComponent\"\n          [ngComponentOutletInputs]=\"{ items: slot.items, crumbTemplate: crumb }\"\n        />\n      }\n\n      @if (!$last) {\n        <span class=\"et-breadcrumb-separator\" aria-hidden=\"true\">\n          @if (breadcrumb.separatorTemplate(); as separator) {\n            <ng-container [ngTemplateOutlet]=\"separator.templateRef\" />\n          } @else {\n            <i class=\"et-breadcrumb-chevron\" etIcon=\"et-chevron\"></i>\n          }\n        </span>\n      }\n    </li>\n  }\n</ol>\n\n<ng-template #crumb let-item>\n  @if (item.loading()) {\n    <et-skeleton class=\"et-breadcrumb-loading\">\n      <et-skeleton-item shape=\"text\" />\n    </et-skeleton>\n  } @else {\n    <ng-container [ngTemplateOutlet]=\"item.templateRef\" />\n  }\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, booleanAttribute, input } from '@angular/core';\nimport { injectBreadcrumbManager } from './breadcrumb-manager';\nimport { BreadcrumbLabels } from './breadcrumb-labels';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\n/**\n * Renders the trail composed from every `<ng-template etBreadcrumbSegment>` currently on screen, in view\n * order. Put one in the app shell; the views below contribute their own crumbs and never restate their\n * ancestors'.\n *\n * Renders nothing while no view has contributed a crumb. Anything you project into it lands inside the\n * breadcrumb - which is how a shell-wide `<ng-template etBreadcrumbSeparator>` is set.\n *\n * @example\n * <et-breadcrumb-outlet />\n */\n@Component({\n  selector: 'et-breadcrumb-outlet',\n  template: `\n    <!-- Instantiating a segment is what brings its crumb templates (and their registrations) into\n         existence. A segment declares templates only, so this renders nothing - the wrapper is hidden so\n         that stray content in a segment stays invisible instead of leaking into the shell. -->\n    <div class=\"et-breadcrumb-outlet-segments\" hidden>\n      @for (segment of manager.segments(); track segment) {\n        <ng-container [ngTemplateOutlet]=\"segment.templateRef\" />\n      }\n    </div>\n\n    @if (manager.crumbs().length) {\n      <et-breadcrumb [crumbs]=\"manager.crumbs()\" [collapse]=\"collapse()\" [labels]=\"labels()\">\n        <ng-content />\n      </et-breadcrumb>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [BreadcrumbComponent, NgTemplateOutlet],\n  host: {\n    class: 'et-breadcrumb-outlet',\n  },\n  styles: `\n    @layer components {\n      .et-breadcrumb-outlet {\n        display: block;\n      }\n    }\n  `,\n})\nexport class BreadcrumbOutletComponent {\n  protected manager = injectBreadcrumbManager();\n\n  /** Forwarded to the composed breadcrumb: collapse the middle crumbs when the trail doesn't fit. @default true */\n  public collapse = input(true, { transform: booleanAttribute });\n\n  /** Forwarded to the composed breadcrumb: per-instance overrides for its accessible labels. */\n  public labels = input<Partial<BreadcrumbLabels> | null>(null);\n}\n","import { booleanAttribute, computed, Directive, inject, input } from '@angular/core';\nimport { applyStructuredDataBinding, JsonLD, RuntimeError } from '@ethlete/core';\nimport { injectBreadcrumbManager } from '../breadcrumb-manager';\nimport { BREADCRUMB_ERROR_CODES } from '../breadcrumb-errors';\nimport { BREADCRUMB_TOKEN } from '../headless/breadcrumb.tokens';\n\n/**\n * Opt-in `schema.org` **BreadcrumbList** markup for a breadcrumb. Put it on the same element as\n * `etBreadcrumb` (or on `<et-breadcrumb>` / `<et-breadcrumb-outlet>`) and it emits a JSON-LD\n * `<script>` describing the trail, which is what gets a site the breadcrumb line in a search result\n * instead of a bare URL.\n *\n * It reads the `name` and `url` each crumb states - not the rendered DOM:\n *\n * ```html\n * <ng-template etBreadcrumbItemTemplate name=\"Teams\" url=\"https://example.com/teams\">\n *   <a etBreadcrumbItem routerLink=\"/teams\">Teams</a>\n * </ng-template>\n * ```\n *\n * Crumbs still **loading** are skipped, and so are crumbs with no `name`. Nothing is emitted at all\n * until at least two named crumbs exist.\n *\n * @example\n * <et-breadcrumb etBreadcrumbSeo>…</et-breadcrumb>\n */\n@Directive({\n  selector: '[etBreadcrumbSeo]',\n  exportAs: 'etBreadcrumbSeo',\n})\nexport class BreadcrumbSeoDirective {\n  private breadcrumb = inject(BREADCRUMB_TOKEN, { optional: true });\n  private breadcrumbManager = injectBreadcrumbManager({ optional: true });\n\n  /**\n   * Turn the markup off without removing the directive - a directive can't be applied conditionally,\n   * so this is how `[etBreadcrumbSeo]=\"isPublicPage()\"` gates it. Writing it bare turns it on.\n   * @default true\n   */\n  public enabled = input(true, { transform: booleanAttribute, alias: 'etBreadcrumbSeo' });\n\n  /** The trail as a `BreadcrumbList`, or `null` when there isn't enough of one to describe. */\n  public structuredData = computed<JsonLD.WithContext<JsonLD.BreadcrumbList> | null>(() => {\n    if (!this.enabled()) return null;\n\n    const named = (this.breadcrumb?.items() ?? this.breadcrumbManager?.crumbs() ?? [])\n      .filter((crumb) => !crumb.loading() && !!crumb.name?.())\n      .map((crumb) => ({ name: crumb.name?.() ?? '', url: crumb.url?.() ?? null }));\n\n    if (named.length < 2) return null;\n\n    return {\n      '@context': 'https://schema.org',\n      '@type': 'BreadcrumbList',\n      itemListElement: named.map((crumb, index) => ({\n        '@type': 'ListItem',\n        // schema.org positions are 1-based.\n        position: index + 1,\n        name: crumb.name,\n        // `item` is omitted rather than empty for the current page - that is what Google's own\n        // breadcrumb guidance asks for on the last crumb.\n        ...(crumb.url ? { item: crumb.url } : {}),\n      })),\n    };\n  });\n\n  constructor() {\n    if (ngDevMode && !this.breadcrumb && !this.breadcrumbManager) {\n      throw new RuntimeError(\n        BREADCRUMB_ERROR_CODES.SEO_OUTSIDE_BREADCRUMB,\n        '[BreadcrumbSeoDirective] etBreadcrumbSeo must sit on an element with etBreadcrumb, or on <et-breadcrumb-outlet> with provideBreadcrumbManager() in scope.',\n      );\n    }\n\n    applyStructuredDataBinding(this.structuredData);\n  }\n}\n","import { BreadcrumbCollapseDirective } from './breadcrumb-collapse.directive';\nimport { BreadcrumbOutletComponent } from './breadcrumb-outlet.component';\nimport { BreadcrumbComponent } from './breadcrumb.component';\nimport {\n  BreadcrumbDirective,\n  BreadcrumbItemDirective,\n  BreadcrumbItemTemplateDirective,\n  BreadcrumbSegmentDirective,\n  BreadcrumbSeparatorDirective,\n} from './headless';\nimport { BreadcrumbSeoDirective } from './seo';\n\nexport const BREADCRUMB_IMPORTS = [\n  BreadcrumbComponent,\n  BreadcrumbOutletComponent,\n  BreadcrumbSegmentDirective,\n  BreadcrumbItemTemplateDirective,\n  BreadcrumbItemDirective,\n  BreadcrumbSeparatorDirective,\n  BreadcrumbDirective,\n] as const;\n\n/**\n * The collapse affordance (`etBreadcrumbCollapse`): apply it to a breadcrumb, to\n * `<et-breadcrumb-outlet>`, or to any ancestor, and the crumbs that don't fit move into an overflow\n * toggletip.\n */\nexport const BREADCRUMB_COLLAPSE_IMPORTS = [BreadcrumbCollapseDirective] as const;\n\n/** `schema.org` BreadcrumbList markup for the trail (`etBreadcrumbSeo`). */\nexport const BREADCRUMB_SEO_IMPORTS = [BreadcrumbSeoDirective] as const;\n","// codes 2900-2999\nexport const CALENDAR_ERROR_CODES = {\n  GRID_OUTSIDE_CALENDAR: 2900,\n  CELL_OUTSIDE_CALENDAR: 2901,\n} as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings the calendar renders or announces itself. Month and weekday **names** are not here - those\n * come from the `DATE_LOCALE` date-fns locale, which is what a localized app provides.\n */\nexport type CalendarLabels = {\n  /** Accessible label for the control that steps back a month. */\n  previousMonth: string;\n  /** Accessible label for the control that steps forward a month. */\n  nextMonth: string;\n  /** Accessible label for the step-back control while the month grid is showing. */\n  previousYear: string;\n  /** Accessible label for the step-forward control while the month grid is showing. */\n  nextYear: string;\n  /** Accessible label for the step-back control while the year grid is showing. */\n  previousYearRange: string;\n  /** Accessible label for the step-forward control while the year grid is showing. */\n  nextYearRange: string;\n  /** Accessible label for the header button while the day grid is showing (it opens the month grid). */\n  switchToYearView: string;\n  /** Accessible label for the header button while the month grid is showing (it opens the year grid). */\n  switchToMultiYearView: string;\n  /** Accessible label for the header button while the year grid is showing (it returns to the day grid). */\n  switchToMonthView: string;\n  /** Names the week-number column, and prefixes each row's number (`Week 31`). */\n  week: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_CALENDAR_LABELS: CalendarLabels = {\n  previousMonth: 'Previous month',\n  nextMonth: 'Next month',\n  previousYear: 'Previous year',\n  nextYear: 'Next year',\n  previousYearRange: 'Previous years',\n  nextYearRange: 'Next years',\n  switchToYearView: 'Choose month and year',\n  switchToMultiYearView: 'Choose year',\n  switchToMonthView: 'Choose date',\n  week: 'Week',\n};\n\nconst CALENDAR_LABELS_DEF = /* @__PURE__ */ defineLabels<CalendarLabels>('CALENDAR_LABELS', DEFAULT_CALENDAR_LABELS);\n\n/**\n * Localize the calendar's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_CALENDAR_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideCalendarLabels({ previousMonth: 'Vorheriger Monat', nextMonth: 'Nächster Monat' });\n */\nexport const provideCalendarLabels = /* @__PURE__ */ toProvideFn(CALENDAR_LABELS_DEF);\nexport const injectCalendarLabels = /* @__PURE__ */ toInjectFn(CALENDAR_LABELS_DEF);\nexport const CALENDAR_LABELS = /* @__PURE__ */ toToken(CALENDAR_LABELS_DEF);\n","import { addDays, endOfWeek, isBefore, startOfDay, startOfWeek } from 'date-fns';\nimport { CalendarWeekStartsOn } from './internals/calendar-month';\n\nexport type CalendarRange = {\n  start: Date | null;\n  end: Date | null;\n};\n\n/**\n * What a pick means in `range` mode. The calendar's own rule - first pick opens the range, a\n * later-or-equal second closes it, an earlier one starts over - is a strategy like any other; naming\n * one here replaces it.\n *\n * Both callbacks are pure: they get the pick and the range as it stands, and return the range that\n * should result.\n */\nexport type CalendarRangeSelectionStrategy = {\n  /** The range this pick produces. Returning an open end (`end: null`) leaves the range being built. */\n  select: (date: Date, current: CalendarRange) => CalendarRange;\n  /**\n   * The range to band while the reader is only hovering (or has moved keyboard focus) over `date`.\n   * Defaults to whatever {@link select} would produce, which is usually what a reader wants to be\n   * shown - return `null` to preview nothing.\n   */\n  preview?: (date: Date, current: CalendarRange) => CalendarRange | null;\n};\n\nexport type CalendarWeekRangeStrategyOptions = {\n  /** Which day the snapped weeks start on. Pass the calendar's `effectiveFirstDayOfWeek()`. */\n  weekStartsOn: CalendarWeekStartsOn;\n};\n\n/**\n * Snaps to whole weeks, in the same two picks a range takes: the first opens the range at the start of\n * the week it lands in, the second closes it at the end of its own, and an earlier second pick starts\n * over. One week is picking the same week twice.\n */\nexport const createWeekRangeStrategy = (options: CalendarWeekRangeStrategyOptions): CalendarRangeSelectionStrategy => {\n  const weekOptions = { weekStartsOn: options.weekStartsOn };\n  // day-granular at both ends, like every other date this component produces - `endOfWeek` would\n  // hand back a 23:59:59.999 timestamp\n  const weekStartOf = (date: Date) => startOfWeek(startOfDay(date), weekOptions);\n  const weekEndOf = (date: Date) => startOfDay(endOfWeek(startOfDay(date), weekOptions));\n\n  const openStart = (current: CalendarRange) =>\n    current.start !== null && current.end === null ? weekStartOf(current.start) : null;\n\n  const select = (date: Date, current: CalendarRange): CalendarRange => {\n    const from = openStart(current);\n    const week = weekStartOf(date);\n\n    if (from === null || isBefore(week, from)) {\n      return { start: week, end: null };\n    }\n\n    return { start: from, end: weekEndOf(date) };\n  };\n\n  return {\n    select,\n    preview: (date, current) => {\n      const from = openStart(current);\n      const week = weekStartOf(date);\n\n      if (current.end !== null) {\n        return null;\n      }\n\n      return from === null || isBefore(week, from)\n        ? { start: week, end: weekEndOf(date) }\n        : { start: from, end: weekEndOf(date) };\n    },\n  };\n};\n\nexport type CalendarFixedLengthRangeStrategyOptions = {\n  /** How many days the range covers, the picked day included. */\n  days: number;\n};\n\n/**\n * Every pick is a complete range of `days` days starting where it landed - a stay of a fixed length,\n * a reporting window. There is no half-built state, so the picker closes on the first pick.\n */\nexport const createFixedLengthRangeStrategy = (\n  options: CalendarFixedLengthRangeStrategyOptions,\n): CalendarRangeSelectionStrategy => {\n  const span = Math.max(1, Math.trunc(options.days));\n\n  const select = (date: Date): CalendarRange => {\n    const start = startOfDay(date);\n\n    return { start, end: addDays(start, span - 1) };\n  };\n\n  return { select };\n};\n\n/** The calendar's built-in rule, as a strategy: open on the first pick, close on a later-or-equal one. */\nexport const DEFAULT_CALENDAR_RANGE_STRATEGY: CalendarRangeSelectionStrategy = {\n  select: (date, current) => {\n    const day = startOfDay(date);\n\n    if (current.start === null || current.end !== null || isBefore(day, startOfDay(current.start))) {\n      return { start: day, end: null };\n    }\n\n    return { start: current.start, end: day };\n  },\n  /**\n   * Bands the span the two ends would cover, in either direction - hovering back past the open start\n   * shows the stretch between them even though picking there would start the range over.\n   */\n  preview: (date, current) => {\n    if (current.start === null || current.end !== null) {\n      return null;\n    }\n\n    const day = startOfDay(date);\n    const start = startOfDay(current.start);\n\n    return isBefore(day, start) ? { start: day, end: start } : { start, end: day };\n  },\n};\n","export const isFormInputTarget = (target: EventTarget | null) => {\n  if (\n    target instanceof HTMLInputElement ||\n    target instanceof HTMLTextAreaElement ||\n    target instanceof HTMLSelectElement\n  ) {\n    return true;\n  }\n\n  if (!(target instanceof HTMLElement)) return false;\n  if (target.isContentEditable) return true;\n\n  // eslint-disable-next-line ethlete/no-dom-query -- the target is an arbitrary event target, not a directive; jsdom lacks isContentEditable, so specs need the attribute walk\n  const editableHost = target.closest('[contenteditable]');\n\n  return editableHost !== null && editableHost.getAttribute('contenteditable') !== 'false';\n};\n","import { numberAttribute } from '@angular/core';\n\n/** `numberAttribute` clamped to a whole number of at least 1; anything unparseable becomes 1. */\nexport const positiveIntegerAttribute = (value: unknown): number => Math.max(1, Math.trunc(numberAttribute(value, 1)));\n","import { addDays, endOfMonth, startOfMonth, startOfWeek } from 'date-fns';\n\nexport type CalendarWeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const generateMonthGrid = (month: Date, weekStartsOn: CalendarWeekStartsOn): Date[][] => {\n  const monthEnd = endOfMonth(month);\n  const weeks: Date[][] = [];\n  let cursor = startOfWeek(startOfMonth(month), { weekStartsOn });\n\n  while (cursor <= monthEnd) {\n    const week: Date[] = [];\n\n    for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\n      week.push(cursor);\n      cursor = addDays(cursor, 1);\n    }\n\n    weeks.push(week);\n  }\n\n  return weeks;\n};\n","import {\n  addDays,\n  addYears,\n  isAfter,\n  isBefore,\n  isSameDay,\n  isSameMonth,\n  isSameYear,\n  startOfDay,\n  startOfMonth,\n  startOfYear,\n} from 'date-fns';\n\n/**\n * Which grid the calendar is showing:\n *\n * - `month` - the **day grid** of one month (the default).\n * - `year` - the **month grid**: the 12 months of one year.\n * - `multiYear` - the **year grid**: one page of {@link CALENDAR_MULTI_YEAR_PAGE_SIZE} years.\n */\nexport type CalendarView = 'month' | 'year' | 'multiYear';\n\n/** How precise a selection is - which unit a picked value names, and which grid picks it. */\nexport type CalendarPrecision = 'day' | 'month' | 'year';\n\nexport const CALENDAR_PRECISION_VIEW: Record<CalendarPrecision, CalendarView> = {\n  day: 'month',\n  month: 'year',\n  year: 'multiYear',\n};\n\nexport const CALENDAR_VIEW_UNIT: Record<CalendarView, CalendarPrecision> = {\n  month: 'day',\n  year: 'month',\n  multiYear: 'year',\n};\n\nexport const CALENDAR_UNIT_IS_SAME: Record<CalendarPrecision, (left: Date, right: Date) => boolean> = {\n  day: isSameDay,\n  month: isSameMonth,\n  year: isSameYear,\n};\n\n/** Start of the unit `date` falls in - what a selection at that precision writes. */\nexport const startOfCalendarUnit = (date: Date, precision: CalendarPrecision) => {\n  switch (precision) {\n    case 'month':\n      return startOfMonth(date);\n    case 'year':\n      return startOfYear(date);\n    default:\n      return startOfDay(date);\n  }\n};\n\n/** A closed day-granular date interval - what a coarse cell covers. */\nexport type CalendarInterval = {\n  start: Date;\n  end: Date;\n};\n\nexport const CALENDAR_COARSE_COLUMNS = 4;\n\nexport const CALENDAR_MULTI_YEAR_PAGE_SIZE = 24;\n\nexport const CALENDAR_VIEW_DEPTH: Record<CalendarView, number> = {\n  month: 0,\n  year: 1,\n  multiYear: 2,\n};\n\nexport const clampCalendarView = (view: CalendarView, precision: CalendarPrecision) => {\n  const floor = CALENDAR_PRECISION_VIEW[precision];\n\n  return CALENDAR_VIEW_DEPTH[view] < CALENDAR_VIEW_DEPTH[floor] ? floor : view;\n};\n\nconst toRows = (cells: Date[]): Date[][] => {\n  const rows: Date[][] = [];\n\n  for (let index = 0; index < cells.length; index += CALENDAR_COARSE_COLUMNS) {\n    rows.push(cells.slice(index, index + CALENDAR_COARSE_COLUMNS));\n  }\n\n  return rows;\n};\n\nexport const generateYearGrid = (date: Date): Date[][] =>\n  toRows(Array.from({ length: 12 }, (_, month) => new Date(date.getFullYear(), month, 1)));\n\nexport const generateMultiYearGrid = (pageStart: Date): Date[][] =>\n  toRows(\n    Array.from(\n      { length: CALENDAR_MULTI_YEAR_PAGE_SIZE },\n      (_, offset) => new Date(pageStart.getFullYear() + offset, 0, 1),\n    ),\n  );\n\nexport const multiYearPageStart = (date: Date, anchorYear: number) => {\n  const year = date.getFullYear();\n  const size = CALENDAR_MULTI_YEAR_PAGE_SIZE;\n  const offset = (((year - anchorYear) % size) + size) % size;\n\n  return new Date(year - offset, 0, 1);\n};\n\nexport type CalendarAvailability = {\n  min: Date | null;\n  max: Date | null;\n  isDateSelectable: (date: Date) => boolean;\n};\n\nexport const hasSelectableDayIn = (interval: CalendarInterval, availability: CalendarAvailability) => {\n  const { min, max, isDateSelectable } = availability;\n  const start = min !== null && isBefore(interval.start, min) ? startOfDay(min) : interval.start;\n  const end = max !== null && isAfter(interval.end, max) ? startOfDay(max) : interval.end;\n\n  if (isAfter(start, end)) {\n    return false;\n  }\n\n  for (let cursor = start; !isAfter(cursor, end); cursor = addDays(cursor, 1)) {\n    if (isDateSelectable(cursor)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport const multiYearPageInterval = (pageStart: Date): CalendarInterval => ({\n  start: startOfYear(pageStart),\n  end: addDays(startOfYear(addYears(pageStart, CALENDAR_MULTI_YEAR_PAGE_SIZE)), -1),\n});\n\nexport const isInMultiYearPage = (date: Date, pageStart: Date) => {\n  const first = pageStart.getFullYear();\n  const year = date.getFullYear();\n\n  return year >= first && year < first + CALENDAR_MULTI_YEAR_PAGE_SIZE;\n};\n","import { addDays, addMonths, addYears, setMonth, setYear, startOfWeek } from 'date-fns';\nimport { CalendarWeekStartsOn } from './calendar-month';\nimport { CALENDAR_COARSE_COLUMNS, CALENDAR_MULTI_YEAR_PAGE_SIZE, CalendarView } from './calendar-view';\n\nconst BIG_JUMP_UNITS = 10;\n\nexport type ResolveCalendarKeyboardDateOptions = {\n  shiftKey: boolean;\n  focusedDate: Date;\n  weekStartsOn: CalendarWeekStartsOn;\n  view?: CalendarView;\n  multiYearPageStart?: Date;\n};\n\nconst resolveMonthViewDate = (key: string, options: ResolveCalendarKeyboardDateOptions): Date | null => {\n  const { shiftKey, focusedDate, weekStartsOn } = options;\n\n  switch (key) {\n    case 'ArrowLeft':\n      return addDays(focusedDate, -1);\n    case 'ArrowRight':\n      return addDays(focusedDate, 1);\n    case 'ArrowUp':\n      return addDays(focusedDate, -7);\n    case 'ArrowDown':\n      return addDays(focusedDate, 7);\n    case 'PageUp':\n      return shiftKey ? addYears(focusedDate, -1) : addMonths(focusedDate, -1);\n    case 'PageDown':\n      return shiftKey ? addYears(focusedDate, 1) : addMonths(focusedDate, 1);\n    case 'Home':\n      return startOfWeek(focusedDate, { weekStartsOn });\n    case 'End':\n      return addDays(startOfWeek(focusedDate, { weekStartsOn }), 6);\n    default:\n      return null;\n  }\n};\n\nconst resolveYearViewDate = (key: string, options: ResolveCalendarKeyboardDateOptions): Date | null => {\n  const { shiftKey, focusedDate } = options;\n\n  switch (key) {\n    case 'ArrowLeft':\n      return addMonths(focusedDate, -1);\n    case 'ArrowRight':\n      return addMonths(focusedDate, 1);\n    case 'ArrowUp':\n      return addMonths(focusedDate, -CALENDAR_COARSE_COLUMNS);\n    case 'ArrowDown':\n      return addMonths(focusedDate, CALENDAR_COARSE_COLUMNS);\n    case 'PageUp':\n      return addYears(focusedDate, shiftKey ? -BIG_JUMP_UNITS : -1);\n    case 'PageDown':\n      return addYears(focusedDate, shiftKey ? BIG_JUMP_UNITS : 1);\n    case 'Home':\n      return setMonth(focusedDate, 0);\n    case 'End':\n      return setMonth(focusedDate, 11);\n    default:\n      return null;\n  }\n};\n\nconst resolveMultiYearViewDate = (key: string, options: ResolveCalendarKeyboardDateOptions): Date | null => {\n  const { shiftKey, focusedDate, multiYearPageStart } = options;\n  const page = CALENDAR_MULTI_YEAR_PAGE_SIZE;\n\n  switch (key) {\n    case 'ArrowLeft':\n      return addYears(focusedDate, -1);\n    case 'ArrowRight':\n      return addYears(focusedDate, 1);\n    case 'ArrowUp':\n      return addYears(focusedDate, -CALENDAR_COARSE_COLUMNS);\n    case 'ArrowDown':\n      return addYears(focusedDate, CALENDAR_COARSE_COLUMNS);\n    case 'PageUp':\n      return addYears(focusedDate, shiftKey ? -page * BIG_JUMP_UNITS : -page);\n    case 'PageDown':\n      return addYears(focusedDate, shiftKey ? page * BIG_JUMP_UNITS : page);\n    case 'Home':\n      return multiYearPageStart === undefined ? null : setYear(focusedDate, multiYearPageStart.getFullYear());\n    case 'End':\n      return multiYearPageStart === undefined\n        ? null\n        : setYear(focusedDate, multiYearPageStart.getFullYear() + page - 1);\n    default:\n      return null;\n  }\n};\n\nexport const resolveCalendarKeyboardDate = (key: string, options: ResolveCalendarKeyboardDateOptions): Date | null => {\n  switch (options.view ?? 'month') {\n    case 'year':\n      return resolveYearViewDate(key, options);\n    case 'multiYear':\n      return resolveMultiYearViewDate(key, options);\n    default:\n      return resolveMonthViewDate(key, options);\n  }\n};\n","import { isAfter, isBefore } from 'date-fns';\nimport { CALENDAR_UNIT_IS_SAME, CalendarPrecision, startOfCalendarUnit } from './calendar-view';\n\n/** How one cell relates to the selection - what the cell directive mirrors as `data-*`. */\nexport type CalendarSelectionFlags = {\n  selected: boolean;\n  rangeStart: boolean;\n  rangeEnd: boolean;\n  /** Strictly between a committed range's start and end. */\n  inRange: boolean;\n  /** Between the pending range start and the hovered/focused cell. */\n  inHoverPreview: boolean;\n  /** Presentational position inside the committed or previewed range band. */\n  band: CalendarBandPosition;\n  /** The same, for the comparison range - the period the selection is being measured against. */\n  comparisonBand: CalendarBandPosition;\n};\n\n/**\n * Where a cell sits in a band. `'single'` is a band one cell wide - both its ends at once, which a\n * one-day comparison period is.\n */\nexport type CalendarBandPosition = 'start' | 'middle' | 'end' | 'single' | null;\n\nexport type CalendarSelectionState = {\n  mode: 'single' | 'range' | 'multiple';\n  value: Date | null;\n  values: readonly Date[];\n  rangeStart: Date | null;\n  rangeEnd: Date | null;\n  previewStart: Date | null;\n  previewEnd: Date | null;\n  comparisonStart: Date | null;\n  comparisonEnd: Date | null;\n  unit: CalendarPrecision;\n};\n\nexport const createCalendarSelectionReader = (state: CalendarSelectionState) => {\n  const isSameUnit = CALENDAR_UNIT_IS_SAME[state.unit];\n  const normalize = (date: Date) => startOfCalendarUnit(date, state.unit);\n  const isRange = state.mode === 'range';\n  const isMultiple = state.mode === 'multiple';\n  const start = isRange && state.rangeStart !== null ? normalize(state.rangeStart) : null;\n  const end = isRange && state.rangeEnd !== null ? normalize(state.rangeEnd) : null;\n\n  const previewStart = isRange && state.previewStart !== null ? normalize(state.previewStart) : null;\n  const previewEnd = isRange && state.previewEnd !== null ? normalize(state.previewEnd) : null;\n\n  let bandStart: Date | null = null;\n  let bandEnd: Date | null = null;\n\n  if (start !== null && end !== null && !isSameUnit(start, end)) {\n    bandStart = start;\n    bandEnd = end;\n  } else if (previewStart !== null && previewEnd !== null && !isSameUnit(previewStart, previewEnd)) {\n    bandStart = previewStart;\n    bandEnd = previewEnd;\n  }\n\n  const bandReader = (from: Date | null, to: Date | null) => {\n    if (from === null || to === null) {\n      return () => null;\n    }\n\n    const isOneCell = isSameUnit(from, to);\n\n    return (date: Date): CalendarBandPosition => {\n      if (isSameUnit(date, from)) {\n        return isOneCell ? 'single' : 'start';\n      }\n\n      if (isSameUnit(date, to)) {\n        return 'end';\n      }\n\n      return isAfter(date, from) && isBefore(date, to) ? 'middle' : null;\n    };\n  };\n\n  const bandFor = bandReader(bandStart, bandEnd);\n\n  let comparisonFrom = state.comparisonStart === null ? null : normalize(state.comparisonStart);\n  let comparisonTo = state.comparisonEnd === null ? null : normalize(state.comparisonEnd);\n\n  if (comparisonFrom !== null && comparisonTo !== null && isBefore(comparisonTo, comparisonFrom)) {\n    [comparisonFrom, comparisonTo] = [comparisonTo, comparisonFrom];\n  }\n\n  const comparisonFor = bandReader(comparisonFrom, comparisonTo);\n\n  return (date: Date): CalendarSelectionFlags => {\n    const rangeStart = start !== null && isSameUnit(date, start);\n    const rangeEnd = end !== null && isSameUnit(date, end);\n    const value = state.value;\n\n    return {\n      selected: isMultiple\n        ? state.values.some((picked) => isSameUnit(date, picked))\n        : isRange\n          ? rangeStart || rangeEnd\n          : value !== null && isSameUnit(date, value),\n      rangeStart,\n      rangeEnd,\n      inRange: start !== null && end !== null && isAfter(date, start) && isBefore(date, end),\n      inHoverPreview:\n        previewStart !== null &&\n        previewEnd !== null &&\n        !isSameUnit(previewStart, previewEnd) &&\n        !isBefore(date, previewStart) &&\n        !isAfter(date, previewEnd),\n      band: bandFor(date),\n      comparisonBand: comparisonFor(date),\n    };\n  };\n};\n","import { Directive, computed, input, linkedSignal, model, output, signal } from '@angular/core';\nimport {\n  addMonths,\n  addYears,\n  endOfMonth,\n  endOfYear,\n  format,\n  getDate,\n  getWeek,\n  isAfter,\n  isBefore,\n  isSameDay,\n  isSameMonth,\n  isSameYear,\n  lastDayOfMonth,\n  setDate,\n  setYear,\n  startOfDay,\n  startOfMonth,\n  startOfWeek,\n  startOfYear,\n  addDays,\n} from 'date-fns';\nimport { Locale } from 'date-fns';\nimport { injectDateLocale } from '../../forms/date-time/date-time-formats';\nimport { isFormInputTarget } from '../../internals/form-input-target';\nimport { positiveIntegerAttribute } from '../../internals/number-attributes';\nimport { CalendarWeekStartsOn, generateMonthGrid } from './internals/calendar-month';\nimport { resolveCalendarKeyboardDate } from './internals/calendar-keyboard';\nimport {\n  CALENDAR_MULTI_YEAR_PAGE_SIZE,\n  CALENDAR_UNIT_IS_SAME,\n  CALENDAR_PRECISION_VIEW,\n  CALENDAR_VIEW_DEPTH,\n  CALENDAR_VIEW_UNIT,\n  CalendarAvailability,\n  CalendarPrecision,\n  CalendarView,\n  clampCalendarView,\n  generateMultiYearGrid,\n  generateYearGrid,\n  hasSelectableDayIn,\n  isInMultiYearPage,\n  multiYearPageInterval,\n  multiYearPageStart,\n  startOfCalendarUnit,\n} from './internals/calendar-view';\nimport { CalendarBandPosition, createCalendarSelectionReader } from './internals/calendar-selection';\nimport {\n  CalendarRange,\n  CalendarRangeSelectionStrategy,\n  DEFAULT_CALENDAR_RANGE_STRATEGY,\n} from './calendar-range-strategy';\n\nexport type { CalendarInterval, CalendarPrecision, CalendarView } from './internals/calendar-view';\nexport type { CalendarRange, CalendarRangeSelectionStrategy } from './calendar-range-strategy';\nexport type { CalendarBandPosition, CalendarSelectionFlags } from './internals/calendar-selection';\nexport { startOfCalendarUnit } from './internals/calendar-view';\n\n/**\n * How much a calendar can hold: one date, a range, or any number of unrelated ones. Each mode reads\n * and writes its own model - {@link CalendarDirective.value}, `rangeValue`, `multipleValue`.\n */\nexport type CalendarMode = 'single' | 'range' | 'multiple';\n\n/** Extra classes for one cell. The returned classes are the consumer's own CSS, so they are unlayered and win over the component's styles. */\nexport type CalendarDateClassFn = (date: Date, view: CalendarView) => string | string[] | null;\n\n/** Which way the grid last moved - drives the enter transition of the newly rendered grid. */\nexport type CalendarNavigationDirection = 'forward' | 'backward' | 'zoomIn' | 'zoomOut' | null;\n\n/** What every cell carries, in every view. The day grid's cells add {@link CalendarCell}'s two fields. */\nexport type CalendarCellBase = {\n  /** Start of the unit this cell holds: a day at midnight, a month's 1st, a year's January 1st. */\n  date: Date;\n  /** The cell's own text - the day of month, the short month name, the year. */\n  label: string;\n  /** Full localized name of the unit, for the cell's `aria-label`. */\n  ariaLabel: string;\n  disabled: boolean;\n  /** Is, or contains, today. */\n  today: boolean;\n  /** The single value, or a range boundary. */\n  selected: boolean;\n  rangeStart: boolean;\n  rangeEnd: boolean;\n  /** Strictly between a committed range's start and end. */\n  inRange: boolean;\n  /** Between the pending range start and the hovered/focused date. */\n  inHoverPreview: boolean;\n  /** Presentational position inside the committed or previewed range band. */\n  band: CalendarBandPosition;\n  /** The same, for the comparison range. */\n  comparisonBand: CalendarBandPosition;\n  /** Roving-tabindex target. */\n  focused: boolean;\n  /** `dateClass`'s classes for this cell, or `null` when there is no hook. */\n  classes: string[] | null;\n  /** Day grid only: the cell belongs to an adjacent month. */\n  outsideMonth?: boolean;\n};\n\nexport type CalendarCell = CalendarCellBase & {\n  dayOfMonth: number;\n  outsideMonth: boolean;\n};\n\n/** One month of a day grid - several of them when {@link CalendarDirective.monthsShown} says so. */\nexport type CalendarMonthPage = {\n  /** First day of the month this page holds. */\n  month: Date;\n  /** Value identity of the month, for template tracking. */\n  key: number;\n  /** The month's own name, for a per-page caption. */\n  label: string;\n  weeks: CalendarCell[][];\n  /** The week number of each row, by the same index. */\n  weekNumbers: number[];\n};\n\nexport type CalendarWeekday = {\n  short: string;\n  long: string;\n};\n\n/**\n * Headless calendar state: three stacked views (day grid, month grid, year\n * grid), single or range selection, roving cell focus and the full ARIA-grid\n * keyboard model. Operates on `Date` objects only - string parsing/formatting\n * belongs to the input directives.\n */\n@Directive({\n  selector: '[etCalendar]',\n  exportAs: 'etCalendar',\n})\nexport class CalendarDirective {\n  private defaultLocale = injectDateLocale();\n\n  public mode = input<CalendarMode>('single');\n  public min = input<Date | null>(null);\n  public max = input<Date | null>(null);\n  /** Return `false` to make a date unselectable. */\n  public dateFilter = input<((date: Date) => boolean) | null>(null);\n  /** 0 = Sunday … 6 = Saturday. Defaults to the locale's week start, else Monday. */\n  public firstDayOfWeek = input<CalendarWeekStartsOn | undefined>(undefined);\n  public locale = input<Locale | null>(null);\n\n  /**\n   * Where an empty calendar opens (and which day it focuses first) - e.g. next\n   * month for a booking form. A selection always wins over it, as does an\n   * explicit `activeMonth`; without either, the calendar falls back to today.\n   */\n  public startAt = input<Date | null>(null);\n\n  /**\n   * How many consecutive months the day grid shows side by side - two for the classic range picker.\n   * The coarser grids are unaffected: drilling out shows one month grid or one year page whatever\n   * this says. Wide surfaces only; a picker that has to fit a phone should leave it at one.\n   */\n  public monthsShown = input(1, { transform: positiveIntegerAttribute });\n\n  /**\n   * How precise a selection is. `'month'` makes this a month picker and\n   * `'year'` a year picker: the grid holding that unit is the finest one the\n   * calendar shows, picking a cell there writes the value, and the value is the\n   * start of the unit (`2026-07-01T00:00` for July 2026). Ranges band at the\n   * same unit.\n   */\n  public precision = input<CalendarPrecision>('day');\n\n  /**\n   * Which grid the calendar opens on - `'year'` to have the reader pick a month\n   * first, `'multiYear'` a year (a birth date, say). Writing {@link view}\n   * afterwards drills wherever you like; changing this resets it. A view finer\n   * than {@link precision} clamps to the grid that selects.\n   */\n  public startView = input<CalendarView>('month');\n\n  /**\n   * Per-cell classes for markers of your own - busy days, holidays, an event\n   * dot. Runs for every rendered cell in every view, so the `view` argument\n   * says which unit `date` starts.\n   */\n  public dateClass = input<CalendarDateClassFn | null>(null);\n\n  /**\n   * What a pick means in `range` mode. Unset, the calendar's own rule applies: the first pick opens\n   * the range, a later-or-equal second closes it, an earlier one starts over. Name a strategy to\n   * snap to whole weeks, take a fixed number of days from wherever the reader clicks, or anything\n   * else - see {@link createWeekRangeStrategy} and {@link createFixedLengthRangeStrategy}.\n   */\n  public rangeSelectionStrategy = input<CalendarRangeSelectionStrategy | null>(null);\n\n  /**\n   * A second range to band behind the selection: the period the current one is\n   * being compared against (\"vs. the previous 30 days\"). Presentation only -\n   * these cells stay as selectable as any other, and picking never writes here.\n   * Given the two the wrong way round, they are read as an interval anyway.\n   */\n  public comparisonStart = input<Date | null>(null);\n  public comparisonEnd = input<Date | null>(null);\n\n  /** Selected date in `single` mode. */\n  public value = model<Date | null>(null);\n  /** Selected range in `range` mode. */\n  public rangeValue = model<CalendarRange>({ start: null, end: null });\n  /** Selected dates in `multiple` mode, ascending. Each pick toggles one. */\n  public multipleValue = model<Date[]>([]);\n  /** First of the displayed month. `null` follows the selection (or today). */\n  public activeMonth = model<Date | null>(null);\n\n  /** A month picked in the month grid, at its 1st. Fires whether or not the pick also writes a value. */\n  public monthSelect = output<Date>();\n  /** A year picked in the year grid, at its January 1st. */\n  public yearSelect = output<Date>();\n\n  /** The grid on show. Writable, so a custom header can drill without going through {@link zoomOut}. */\n  public view = linkedSignal(() => clampCalendarView(this.startView(), this.precision()));\n\n  /** The finest grid this calendar shows - the one whose cells hold {@link precision}'s unit. */\n  public selectionView = computed(() => CALENDAR_PRECISION_VIEW[this.precision()]);\n\n  private today = startOfDay(new Date());\n\n  public effectiveLocale = computed(() => this.locale() ?? this.defaultLocale);\n\n  public effectiveFirstDayOfWeek = computed<CalendarWeekStartsOn>(\n    () => this.firstDayOfWeek() ?? this.effectiveLocale()?.options?.weekStartsOn ?? 1,\n  );\n\n  private anchorDate = computed(() => {\n    const mode = this.mode();\n\n    if (mode === 'range') {\n      const range = this.rangeValue();\n\n      return range.start ?? range.end ?? this.startAt() ?? this.today;\n    }\n\n    if (mode === 'multiple') {\n      return this.multipleValue()[0] ?? this.startAt() ?? this.today;\n    }\n\n    return this.value() ?? this.startAt() ?? this.today;\n  });\n\n  public visibleMonth = computed(() => startOfMonth(this.activeMonth() ?? this.anchorDate()));\n\n  /** Value identity of the visible month, for template keying. */\n  public visibleMonthKey = computed(() => this.visibleMonth().getTime());\n\n  /** The year the month grid shows - the visible month's. */\n  public visibleYear = computed(() => startOfYear(this.visibleMonth()));\n\n  /**\n   * First year of the year grid's visible page. Pages tile from `min`'s year when there is one, so a\n   * bounded calendar opens its page on the bound instead of somewhere inside it.\n   */\n  public multiYearPageStart = computed(() => multiYearPageStart(this.visibleMonth(), this.min()?.getFullYear() ?? 0));\n\n  /** Value identity of the unit the current view shows - the month, the year, or the year page. */\n  public visibleUnitKey = computed(() => {\n    switch (this.view()) {\n      case 'year':\n        return this.visibleYear().getTime();\n      case 'multiYear':\n        return this.multiYearPageStart().getTime();\n      default:\n        return this.visibleMonthKey();\n    }\n  });\n\n  /** Identity of what is on screen, for template keying: a view change re-renders the grid too. */\n  public transitionKey = computed(() => `${this.view()}:${this.visibleUnitKey()}`);\n\n  /**\n   * Flips whenever {@link transitionKey} changes. Re-creating the grid is how its enter transition\n   * runs, and a template gets there by rendering one of two identical `@if` branches: keying a\n   * one-item `@for` on the key would do the same thing, but Angular reports every such re-creation as\n   * NG0956 - a warning about an expensive mistake, which for one row of a calendar it is not, in every\n   * consumer's dev console on every step.\n   */\n  public transitionParity = linkedSignal<string, boolean>({\n    source: () => this.transitionKey(),\n    computation: (_key, previous) => (previous === undefined ? true : !previous.value),\n  });\n\n  /**\n   * Roving-tabindex target. Re-anchors when the visible month changes without\n   * containing it (keeping the day of month across month navigation).\n   */\n  public focusedDate = linkedSignal<Date, Date>({\n    source: () => this.visibleMonth(),\n    computation: (month, previous) => {\n      if (previous !== undefined && isSameMonth(previous.value, month)) {\n        return previous.value;\n      }\n\n      const anchor = startOfDay(this.anchorDate());\n\n      if (isSameMonth(anchor, month)) {\n        return anchor;\n      }\n\n      const dayOfMonth = previous === undefined ? 1 : getDate(previous.value);\n\n      return setDate(month, Math.min(dayOfMonth, getDate(lastDayOfMonth(month))));\n    },\n  });\n\n  /** Range-preview endpoint while the pointer is over the grid. A view change clears it. */\n  public hoveredDate = linkedSignal<CalendarView, Date | null>({\n    source: () => this.view(),\n    computation: () => null,\n  });\n\n  /**\n   * The grid DOM focus is in, or `null` while focus is outside all of them.\n   *\n   * @internal\n   */\n  public focusedGrid = signal<unknown>(null);\n\n  /**\n   * How the grid last changed - drives the transition styling. Chronological for a step within one view,\n   * and which way the reader zoomed for a view change (`'zoomOut'` towards the year grid).\n   */\n  public navigationDirection = linkedSignal<{ view: CalendarView; unit: number }, CalendarNavigationDirection>({\n    source: () => ({ view: this.view(), unit: this.visibleUnitKey() }),\n    computation: (source, previous) => {\n      if (previous === undefined) {\n        return null;\n      }\n\n      if (previous.source.view !== source.view) {\n        return CALENDAR_VIEW_DEPTH[source.view] > CALENDAR_VIEW_DEPTH[previous.source.view] ? 'zoomOut' : 'zoomIn';\n      }\n\n      if (previous.source.unit === source.unit) {\n        return previous.value;\n      }\n\n      return source.unit > previous.source.unit ? 'forward' : 'backward';\n    },\n  });\n\n  public weekdays = computed<CalendarWeekday[]>(() => {\n    const locale = this.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n    const weekStart = startOfWeek(this.today, { weekStartsOn: this.effectiveFirstDayOfWeek() });\n\n    return Array.from({ length: 7 }, (_, dayIndex) => {\n      const day = addDays(weekStart, dayIndex);\n\n      return {\n        short: format(day, 'EEEEEE', options),\n        long: format(day, 'EEEE', options),\n      };\n    });\n  });\n\n  public visibleMonthLabel = computed(() => {\n    const locale = this.effectiveLocale();\n\n    return format(this.visibleMonth(), 'LLLL yyyy', locale ? { locale } : undefined);\n  });\n\n  private availability = computed<CalendarAvailability>(() => ({\n    min: this.min(),\n    max: this.max(),\n    isDateSelectable: (date: Date) => !this.isDateDisabled(date),\n  }));\n\n  /**\n   * Every month on show, first to last - one unless {@link monthsShown} says otherwise.\n   */\n  public monthPages = computed<CalendarMonthPage[]>(() => {\n    const firstMonth = this.visibleMonth();\n    const focused = this.focusedDate();\n    const locale = this.effectiveLocale();\n    const labelOptions = locale ? { locale } : undefined;\n    const weekStartsOn = this.effectiveFirstDayOfWeek();\n    const firstWeekContainsDate = locale?.options?.firstWeekContainsDate ?? 1;\n    const readSelection = this.selectionReader('month');\n\n    return Array.from({ length: this.monthsShown() }, (_, offset) => {\n      const month = addMonths(firstMonth, offset);\n      const grid = generateMonthGrid(month, weekStartsOn);\n\n      return {\n        month,\n        key: month.getTime(),\n        label: format(month, 'LLLL yyyy', labelOptions),\n        weekNumbers: grid.map(([weekStart]) => getWeek(weekStart as Date, { weekStartsOn, firstWeekContainsDate })),\n        weeks: grid.map((week) =>\n          week.map((date) => ({\n            date,\n            dayOfMonth: getDate(date),\n            label: `${getDate(date)}`,\n            ariaLabel: format(date, 'PPPP', labelOptions),\n            classes: this.resolveCellClasses(date, 'month'),\n            disabled: this.isDateDisabled(date),\n            today: isSameDay(date, this.today),\n            ...readSelection(date),\n            outsideMonth: !isSameMonth(date, month),\n            // one roving target across the whole span: an outside-month cell never claims it, or two\n            // grids would fight over the same date\n            focused: isSameDay(date, focused) && isSameMonth(date, month),\n          })),\n        ),\n      };\n    });\n  });\n\n  /**\n   * The week number of each row of {@link weeks}, by the same index - every month on show carries its\n   * own on {@link monthPages}.\n   */\n  public weekNumbers = computed<number[]>(() => this.monthPages()[0]?.weekNumbers ?? []);\n\n  /** The first month's day grid. The whole span is {@link monthPages}. */\n  public weeks = computed<CalendarCell[][]>(() => this.monthPages()[0]?.weeks ?? []);\n\n  /** The last month on show - the same as {@link visibleMonth} unless several are shown. */\n  public lastVisibleMonth = computed(() => addMonths(this.visibleMonth(), this.monthsShown() - 1));\n\n  /** What the header names: the month, the year, or the year page's span. */\n  public headerLabel = computed(() => {\n    const locale = this.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n\n    switch (this.view()) {\n      case 'year':\n        return format(this.visibleYear(), 'yyyy', options);\n      case 'multiYear': {\n        const pageStart = this.multiYearPageStart();\n        const pageEnd = addYears(pageStart, CALENDAR_MULTI_YEAR_PAGE_SIZE - 1);\n\n        return `${format(pageStart, 'yyyy', options)} – ${format(pageEnd, 'yyyy', options)}`;\n      }\n      default: {\n        const first = this.visibleMonth();\n        const last = this.lastVisibleMonth();\n\n        if (isSameMonth(first, last)) {\n          return this.visibleMonthLabel();\n        }\n\n        return isSameYear(first, last)\n          ? `${format(first, 'LLLL', options)} – ${format(last, 'LLLL yyyy', options)}`\n          : `${format(first, 'LLLL yyyy', options)} – ${format(last, 'LLLL yyyy', options)}`;\n      }\n    }\n  });\n\n  /** The 12 months of the visible year, as rows of four - the month grid's cells. */\n  public monthCells = computed<CalendarCellBase[][]>(() => {\n    const locale = this.effectiveLocale();\n    const labelOptions = locale ? { locale } : undefined;\n    const focused = this.focusedDate();\n    const readSelection = this.selectionReader('year');\n\n    return generateYearGrid(this.visibleYear()).map((row) =>\n      row.map((month) => ({\n        date: month,\n        label: format(month, 'LLL', labelOptions),\n        ariaLabel: format(month, 'LLLL yyyy', labelOptions),\n        classes: this.resolveCellClasses(month, 'year'),\n        disabled: this.isMonthDisabled(month),\n        today: isSameMonth(month, this.today),\n        ...readSelection(month),\n        focused: isSameMonth(month, focused),\n      })),\n    );\n  });\n\n  /** The years of the visible page, as rows of four - the year grid's cells. */\n  public yearCells = computed<CalendarCellBase[][]>(() => {\n    const locale = this.effectiveLocale();\n    const labelOptions = locale ? { locale } : undefined;\n    const focused = this.focusedDate();\n    const readSelection = this.selectionReader('multiYear');\n\n    return generateMultiYearGrid(this.multiYearPageStart()).map((row) =>\n      row.map((year) => {\n        const label = format(year, 'yyyy', labelOptions);\n\n        return {\n          date: year,\n          label,\n          ariaLabel: label,\n          classes: this.resolveCellClasses(year, 'multiYear'),\n          disabled: this.isYearDisabled(year),\n          today: isSameYear(year, this.today),\n          ...readSelection(year),\n          focused: isSameYear(year, focused),\n        };\n      }),\n    );\n  });\n\n  public canGoPrev = computed(() => {\n    const min = this.min();\n\n    return min === null || !isBefore(this.adjacentUnit(-1).end, startOfDay(min));\n  });\n\n  public canGoNext = computed(() => {\n    const max = this.max();\n\n    return max === null || !isAfter(this.adjacentUnit(1).start, startOfDay(max));\n  });\n\n  /**\n   * Whether the header can zoom out any further: false once the year grid is showing, and for a\n   * year-precision calendar, whose only grid that is.\n   */\n  public canZoomOut = computed(() => this.view() !== 'multiYear');\n\n  private effectiveRangeStrategy = computed(() => this.rangeSelectionStrategy() ?? DEFAULT_CALENDAR_RANGE_STRATEGY);\n\n  private previewRange = computed<CalendarRange>(() => {\n    if (this.mode() !== 'range' || this.view() !== this.selectionView()) {\n      return { start: null, end: null };\n    }\n\n    const at = this.hoveredDate() ?? (this.focusedGrid() === null ? null : this.focusedDate());\n\n    if (at === null) {\n      return { start: null, end: null };\n    }\n\n    const strategy = this.effectiveRangeStrategy();\n    const current = this.rangeValue();\n\n    return (\n      (strategy.preview ? strategy.preview(at, current) : strategy.select(at, current)) ?? {\n        start: null,\n        end: null,\n      }\n    );\n  });\n\n  public isDateDisabled(date: Date) {\n    const min = this.min();\n    const max = this.max();\n\n    if (min !== null && isBefore(date, startOfDay(min))) {\n      return true;\n    }\n\n    if (max !== null && isAfter(date, startOfDay(max))) {\n      return true;\n    }\n\n    const filter = this.dateFilter();\n\n    return filter !== null && !filter(date);\n  }\n\n  /** Whether the month holds no selectable day at all - what disables its cell in the month grid. */\n  public isMonthDisabled(month: Date) {\n    return !hasSelectableDayIn({ start: startOfMonth(month), end: endOfMonth(month) }, this.availability());\n  }\n\n  /** Whether the year holds no selectable day at all - what disables its cell in the year grid. */\n  public isYearDisabled(year: Date) {\n    return !hasSelectableDayIn({ start: startOfYear(year), end: endOfYear(year) }, this.availability());\n  }\n\n  /**\n   * Activates the focused cell of whichever view is showing: writes the value when that grid is the\n   * one {@link precision} selects in, drills a level in otherwise. So a day-precision calendar\n   * selects in the day grid and treats a month or year pick as navigation, while a month-precision\n   * one selects the month itself.\n   */\n  public activateCell(date: Date) {\n    switch (this.view()) {\n      case 'year':\n        return this.selectMonth(date);\n      case 'multiYear':\n        return this.selectYear(date);\n      default:\n        return this.selectDate(date);\n    }\n  }\n\n  /**\n   * Single mode sets the value. Range mode: first pick starts the range, a\n   * later-or-equal second pick completes it, an earlier one restarts it.\n   */\n  public selectDate(date: Date) {\n    const day = startOfDay(date);\n\n    if (this.isDateDisabled(day)) {\n      return;\n    }\n\n    this.commitSelection(day);\n  }\n\n  /**\n   * Picks a month in the month grid: writes it at month precision, drills into its day grid\n   * otherwise - the reader has narrowed down where to look, not picked a date yet.\n   */\n  public selectMonth(date: Date) {\n    const month = startOfMonth(date);\n\n    if (this.isMonthDisabled(month)) {\n      return;\n    }\n\n    this.monthSelect.emit(month);\n\n    if (this.precision() === 'month') {\n      this.commitSelection(month);\n\n      return;\n    }\n\n    this.activeMonth.set(month);\n    this.view.set('month');\n  }\n\n  /**\n   * Picks a year in the year grid: writes it at year precision, drills into its months otherwise,\n   * keeping the month the reader was on.\n   */\n  public selectYear(date: Date) {\n    const year = startOfYear(date);\n\n    if (this.isYearDisabled(year)) {\n      return;\n    }\n\n    this.yearSelect.emit(year);\n\n    if (this.precision() === 'year') {\n      this.commitSelection(year);\n\n      return;\n    }\n\n    this.activeMonth.set(setYear(this.visibleMonth(), year.getFullYear()));\n    this.view.set('year');\n  }\n\n  /**\n   * Zooms the grid out one level - day grid → month grid → year grid - which is what the header label\n   * does. From the year grid, which has nothing coarser above it, it returns to the finest grid this\n   * calendar has, so the header is never a dead end for a reader who opened it by accident.\n   */\n  public zoomOut() {\n    switch (this.view()) {\n      case 'month':\n        return this.view.set('year');\n      case 'year':\n        return this.view.set('multiYear');\n      default:\n        return this.view.set(this.selectionView());\n    }\n  }\n\n  /** Steps the visible unit forwards - a month, a year, or a year page, depending on the view. */\n  public next() {\n    this.stepUnit(1);\n  }\n\n  /** Steps the visible unit backwards. */\n  public previous() {\n    this.stepUnit(-1);\n  }\n\n  public nextMonth() {\n    this.activeMonth.set(addMonths(this.visibleMonth(), 1));\n  }\n\n  public previousMonth() {\n    this.activeMonth.set(addMonths(this.visibleMonth(), -1));\n  }\n\n  public nextYear() {\n    this.activeMonth.set(addMonths(this.visibleMonth(), 12));\n  }\n\n  public previousYear() {\n    this.activeMonth.set(addMonths(this.visibleMonth(), -12));\n  }\n\n  /** @internal ARIA-grid keyboard model; selection stays with the cell button's native activation. */\n  public handleKeydown(event: KeyboardEvent) {\n    if (isFormInputTarget(event.target)) return;\n\n    const target = resolveCalendarKeyboardDate(event.key, {\n      shiftKey: event.shiftKey,\n      focusedDate: this.focusedDate(),\n      weekStartsOn: this.effectiveFirstDayOfWeek(),\n      view: this.view(),\n      multiYearPageStart: this.multiYearPageStart(),\n    });\n\n    if (target === null) {\n      return;\n    }\n\n    event.preventDefault();\n    this.moveFocus(target);\n  }\n\n  private selectionReader(view: CalendarView) {\n    return createCalendarSelectionReader({\n      mode: this.mode(),\n      value: this.value(),\n      values: this.multipleValue(),\n      rangeStart: this.rangeValue().start,\n      rangeEnd: this.rangeValue().end,\n      previewStart: this.previewRange().start,\n      previewEnd: this.previewRange().end,\n      comparisonStart: this.comparisonStart(),\n      comparisonEnd: this.comparisonEnd(),\n      unit: CALENDAR_VIEW_UNIT[view],\n    });\n  }\n\n  private commitSelection(date: Date) {\n    const precision = this.precision();\n    const unitStart = startOfCalendarUnit(date, precision);\n    const mode = this.mode();\n\n    this.moveFocus(unitStart);\n\n    if (mode === 'single') {\n      this.value.set(unitStart);\n\n      return;\n    }\n\n    if (mode === 'multiple') {\n      this.toggleMultiple(unitStart);\n\n      return;\n    }\n\n    const current = this.rangeValue();\n    const next = this.effectiveRangeStrategy().select(unitStart, current);\n    const resolved = {\n      start: next.start === null ? null : startOfCalendarUnit(next.start, precision),\n      end: next.end === null ? null : startOfCalendarUnit(next.end, precision),\n    };\n\n    this.rangeValue.set(resolved);\n\n    if (resolved.end !== null) {\n      this.hoveredDate.set(null);\n    }\n  }\n\n  private toggleMultiple(unitStart: Date) {\n    const isSameUnit = CALENDAR_UNIT_IS_SAME[this.precision()];\n    const current = this.multipleValue();\n    const without = current.filter((picked) => !isSameUnit(picked, unitStart));\n\n    if (without.length !== current.length) {\n      this.multipleValue.set(without);\n\n      return;\n    }\n\n    this.multipleValue.set([...current, unitStart].sort((left, right) => left.getTime() - right.getTime()));\n  }\n\n  private resolveCellClasses(date: Date, view: CalendarView) {\n    const classes = this.dateClass()?.(date, view) ?? null;\n\n    if (classes === null) {\n      return null;\n    }\n\n    return Array.isArray(classes) ? classes : [classes];\n  }\n\n  private stepUnit(step: 1 | -1) {\n    const month = this.visibleMonth();\n\n    switch (this.view()) {\n      case 'year':\n        return this.activeMonth.set(addYears(month, step));\n      case 'multiYear':\n        return this.activeMonth.set(addYears(month, step * CALENDAR_MULTI_YEAR_PAGE_SIZE));\n      default:\n        return this.activeMonth.set(addMonths(month, step));\n    }\n  }\n\n  private adjacentUnit(step: 1 | -1) {\n    const month = this.visibleMonth();\n\n    switch (this.view()) {\n      case 'year': {\n        const year = addYears(month, step);\n\n        return { start: startOfYear(year), end: endOfYear(year) };\n      }\n      case 'multiYear':\n        return multiYearPageInterval(addYears(this.multiYearPageStart(), step * CALENDAR_MULTI_YEAR_PAGE_SIZE));\n      default: {\n        const from = step === 1 ? this.lastVisibleMonth() : month;\n        const stepped = addMonths(from, step);\n\n        return { start: startOfMonth(stepped), end: endOfMonth(stepped) };\n      }\n    }\n  }\n\n  private moveFocus(date: Date) {\n    const day = startOfDay(date);\n\n    if (!this.isInVisibleUnit(day)) {\n      const month = startOfMonth(day);\n\n      this.activeMonth.set(\n        this.view() === 'month' && isAfter(month, this.lastVisibleMonth())\n          ? addMonths(month, 1 - this.monthsShown())\n          : month,\n      );\n    }\n\n    this.focusedDate.set(day);\n  }\n\n  private isInVisibleUnit(date: Date) {\n    switch (this.view()) {\n      case 'year':\n        return isSameYear(date, this.visibleYear());\n      case 'multiYear':\n        return isInMultiYearPage(date, this.multiYearPageStart());\n      default: {\n        const month = startOfMonth(date);\n\n        return !isBefore(month, this.visibleMonth()) && !isAfter(month, this.lastVisibleMonth());\n      }\n    }\n  }\n}\n","import { DestroyRef, Directive, ElementRef, computed, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CALENDAR_ERROR_CODES } from '../calendar-errors';\nimport { CalendarDirective } from './calendar.directive';\n\n/**\n * The ARIA grid hosting the cell rows of whichever view is showing: routes the\n * keyboard model to the calendar and claims its focus while DOM focus is inside -\n * which is what lets a cell pull DOM focus along, and a range preview anchor,\n * only while the reader is really keyboard-navigating the grid.\n */\n@Directive({\n  selector: '[etCalendarGrid]',\n  exportAs: 'etCalendarGrid',\n  host: {\n    role: 'grid',\n    '[attr.aria-label]': 'calendar?.headerLabel()',\n    '[attr.aria-multiselectable]': \"calendar?.mode() === 'multiple' ? true : null\",\n    '(keydown)': 'calendar?.handleKeydown($event)',\n    '(focusin)': 'claimFocus()',\n    '(focusout)': 'handleFocusOut($event)',\n    '(pointerleave)': 'calendar?.hoveredDate?.set(null)',\n  },\n})\nexport class CalendarGridDirective {\n  protected calendar = inject(CalendarDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** @internal */\n  public focusIsInside = computed(() => this.calendar?.focusedGrid() === this);\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => this.releaseFocus());\n\n    if (ngDevMode && !this.calendar) {\n      throw new RuntimeError(\n        CALENDAR_ERROR_CODES.GRID_OUTSIDE_CALENDAR,\n        'An [etCalendarGrid] must be placed inside an [etCalendar].',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  protected claimFocus() {\n    this.calendar?.focusedGrid.set(this);\n  }\n\n  protected handleFocusOut(event: FocusEvent) {\n    const nextTarget = event.relatedTarget;\n\n    if (nextTarget instanceof Node && event.currentTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n      return;\n    }\n\n    // a cell removal during month re-render also lands here (focus falls to body\n    // before the new roving target pulls it back in the same tick) - settle the\n    // tick first, then decide based on where focus actually ended up\n    queueMicrotask(() => {\n      const element = this.elementRef.nativeElement;\n      const active = element.ownerDocument.activeElement;\n\n      if (!(active instanceof Node) || !element.contains(active)) {\n        this.releaseFocus();\n      }\n    });\n  }\n\n  // only ever give back a claim that is still ours: focus moving to a sibling grid claims it\n  // there before this microtask runs\n  private releaseFocus() {\n    const calendar = this.calendar;\n\n    if (calendar?.focusedGrid() === this) {\n      calendar.focusedGrid.set(null);\n    }\n  }\n}\n","import { Directive, ElementRef, computed, effect, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CALENDAR_ERROR_CODES } from '../calendar-errors';\nimport { CalendarGridDirective } from './calendar-grid.directive';\nimport { CalendarCellBase, CalendarDirective } from './calendar.directive';\n\n/**\n * One cell of whichever grid is showing - a day, a month or a year (place it on\n * the cell's `<button>`): ARIA/data attributes, activation, hover preview, and\n * the roving-tabindex focus pull.\n */\n@Directive({\n  selector: '[etCalendarCell]',\n  exportAs: 'etCalendarCell',\n  host: {\n    role: 'gridcell',\n    '[class]': 'dynamicClasses()',\n    '[attr.tabindex]': 'cell().focused ? 0 : -1',\n    '[attr.aria-label]': 'cell().ariaLabel',\n    '[attr.aria-selected]': 'cell().selected',\n    '[attr.aria-disabled]': 'cell().disabled ? true : null',\n    '[attr.aria-current]': \"cell().today ? 'date' : null\",\n    '[attr.data-selected]': \"cell().selected ? '' : null\",\n    '[attr.data-disabled]': \"cell().disabled ? '' : null\",\n    '[attr.data-today]': \"cell().today ? '' : null\",\n    '[attr.data-range-start]': \"cell().rangeStart ? '' : null\",\n    '[attr.data-range-end]': \"cell().rangeEnd ? '' : null\",\n    '[attr.data-in-range]': \"cell().inRange ? '' : null\",\n    '[attr.data-preview]': \"cell().inHoverPreview ? '' : null\",\n    '[attr.data-band]': 'cell().band',\n    '[attr.data-comparison-band]': 'cell().comparisonBand',\n    '[attr.data-outside-month]': \"cell().outsideMonth ? '' : null\",\n    '(click)': 'calendar?.activateCell(cell().date)',\n    '(pointerenter)': 'handlePointerEnter()',\n  },\n})\nexport class CalendarCellDirective {\n  protected calendar = inject(CalendarDirective, { optional: true });\n  private grid = inject(CalendarGridDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public cell = input.required<CalendarCellBase>();\n\n  protected dynamicClasses = computed(() => {\n    const classes = this.cell().classes;\n\n    return classes === null ? {} : Object.fromEntries(classes.map((className) => [className, true]));\n  });\n\n  constructor() {\n    if (ngDevMode && !this.calendar) {\n      throw new RuntimeError(\n        CALENDAR_ERROR_CODES.CELL_OUTSIDE_CALENDAR,\n        'An [etCalendarCell] must be placed inside an [etCalendar].',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n\n    effect(() => {\n      if (this.cell().focused && this.grid?.focusIsInside()) {\n        this.elementRef.nativeElement.focus();\n      }\n    });\n  }\n\n  protected handlePointerEnter() {\n    if (\n      this.calendar?.mode() === 'range' &&\n      this.calendar.view() === this.calendar.selectionView() &&\n      !this.cell().disabled\n    ) {\n      this.calendar.hoveredDate.set(this.cell().date);\n    }\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { CalendarDirective } from './headless';\n\n/** What a custom header template is handed: the calendar it belongs to, as `$implicit`. */\nexport type CalendarHeaderContext = {\n  $implicit: CalendarDirective;\n};\n\n/**\n * Replaces `et-calendar`'s own header, keeping its grid. Put it on an `ng-template` inside the\n * calendar; the template receives the headless directive, which is everything the default header\n * uses - `headerLabel()`, `previous()`/`next()`, `canGoPrev()`/`canGoNext()`, `zoomOut()`,\n * `canZoomOut()`, `view`.\n *\n * @example\n * <et-calendar [(value)]=\"date\">\n *   <ng-template etCalendarHeader let-calendar>\n *     <button (click)=\"calendar.previous()\" [disabled]=\"!calendar.canGoPrev()\">Back</button>\n *     <h3>{{ calendar.headerLabel() }}</h3>\n *     <button (click)=\"calendar.next()\" [disabled]=\"!calendar.canGoNext()\">Next</button>\n *   </ng-template>\n * </et-calendar>\n */\n@Directive({\n  selector: 'ng-template[etCalendarHeader]',\n})\nexport class CalendarHeaderDirective {\n  /** @internal */\n  public templateRef = inject<TemplateRef<CalendarHeaderContext>>(TemplateRef);\n\n  /** @internal Lets the template's `let-` bindings be typed without the consumer declaring the shape. */\n  public static ngTemplateContextGuard(\n    _directive: CalendarHeaderDirective,\n    _context: unknown,\n  ): _context is CalendarHeaderContext {\n    return true;\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-calendar-coarse-grid-styles',\n  template: '',\n  styleUrl: './calendar-coarse-grid-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarCoarseGridStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-calendar-comparison-band-styles',\n  template: '',\n  styleUrl: './calendar-comparison-band-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarComparisonBandStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-calendar-week-numbers-styles',\n  template: '',\n  styleUrl: './calendar-week-numbers-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarWeekNumbersStylesComponent {}\n","import {\n  booleanAttribute,\n  Component,\n  computed,\n  contentChild,\n  effect,\n  inject,\n  input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { injectStyleManager, mountEasingTokens } from '@ethlete/core';\nimport { IconButtonComponent } from '../button';\nimport { CHEVRON_ICON, IconDirective, provideIcons } from '../icon';\nimport { CalendarCellDirective, CalendarDirective, CalendarGridDirective } from './headless';\nimport { injectCalendarLabels } from '../calendar/calendar-labels';\nimport { CalendarHeaderDirective } from './calendar-header.directive';\nimport { CalendarCoarseGridStylesComponent } from './calendar-coarse-grid-styles.component';\nimport { CalendarComparisonBandStylesComponent } from './calendar-comparison-band-styles.component';\nimport { CalendarWeekNumbersStylesComponent } from './calendar-week-numbers-styles.component';\n\n@Component({\n  selector: 'et-calendar',\n  templateUrl: './calendar.component.html',\n  styleUrl: './calendar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CalendarCellDirective, CalendarGridDirective, IconButtonComponent, IconDirective, NgTemplateOutlet],\n  providers: [provideIcons(CHEVRON_ICON)],\n  hostDirectives: [\n    {\n      directive: CalendarDirective,\n      inputs: [\n        'mode',\n        'min',\n        'max',\n        'dateFilter',\n        'startAt',\n        'monthsShown',\n        'precision',\n        'startView',\n        'dateClass',\n        'rangeSelectionStrategy',\n        'comparisonStart',\n        'comparisonEnd',\n        'firstDayOfWeek',\n        'locale',\n        'value',\n        'rangeValue',\n        'multipleValue',\n        'activeMonth',\n      ],\n      outputs: [\n        'valueChange',\n        'rangeValueChange',\n        'multipleValueChange',\n        'activeMonthChange',\n        'monthSelect',\n        'yearSelect',\n      ],\n    },\n  ],\n  host: {\n    class: 'et-calendar',\n    '[attr.data-view]': 'calendar.view()',\n    '[attr.data-week-numbers]': \"weekNumbers() ? '' : null\",\n    '[style.--_et-calendar-months]': 'calendar.monthsShown()',\n  },\n})\nexport class CalendarComponent {\n  private calendarLabels = injectCalendarLabels();\n  private styleManager = injectStyleManager();\n\n  /**\n   * The headless directive behind this calendar - everything `[etCalendar]` exposes, for chrome of\n   * your own around or instead of the default header (`<et-calendar #cal>` then `cal.headless`).\n   */\n  public headless = inject(CalendarDirective);\n\n  /**\n   * Renders a leading column of week numbers in the day grid. The numbers themselves come from the\n   * headless tier (`calendar.weekNumbers()`), which localizes them; this only decides to show them.\n   */\n  public weekNumbers = input(false, { transform: booleanAttribute });\n\n  /** Only labels the nav buttons while the day grid is showing - the coarser views read the label set. */\n  public previousMonthLabel = input<string | null>(null);\n  public nextMonthLabel = input<string | null>(null);\n\n  protected headerTemplate = contentChild(CalendarHeaderDirective);\n\n  protected calendar = this.headless;\n\n  protected resolvedPreviousLabel = computed(() => {\n    const labels = this.calendarLabels();\n\n    switch (this.calendar.view()) {\n      case 'year':\n        return labels.previousYear;\n      case 'multiYear':\n        return labels.previousYearRange;\n      default:\n        return this.previousMonthLabel() ?? labels.previousMonth;\n    }\n  });\n\n  protected resolvedNextLabel = computed(() => {\n    const labels = this.calendarLabels();\n\n    switch (this.calendar.view()) {\n      case 'year':\n        return labels.nextYear;\n      case 'multiYear':\n        return labels.nextYearRange;\n      default:\n        return this.nextMonthLabel() ?? labels.nextMonth;\n    }\n  });\n\n  protected weekLabel = computed(() => this.calendarLabels().week);\n\n  protected resolvedZoomLabel = computed(() => {\n    const labels = this.calendarLabels();\n\n    switch (this.calendar.view()) {\n      case 'year':\n        return labels.switchToMultiYearView;\n      case 'multiYear':\n        return labels.switchToMonthView;\n      default:\n        return labels.switchToYearView;\n    }\n  });\n\n  constructor() {\n    mountEasingTokens();\n    effect(() => {\n      // gated on whether a coarser view is reachable at all, not on `calendar.view()` having\n      // already left the day grid - mounting on that transition would paint the first drilled-out\n      // frame before the styles land\n      const canReachCoarseGrid =\n        !this.headerTemplate() || this.calendar.view() !== 'month' || this.calendar.selectionView() !== 'month';\n\n      if (canReachCoarseGrid) {\n        this.styleManager.mount(CalendarCoarseGridStylesComponent);\n      }\n    });\n\n    effect(() => {\n      if (this.calendar.comparisonStart() !== null || this.calendar.comparisonEnd() !== null) {\n        this.styleManager.mount(CalendarComparisonBandStylesComponent);\n      }\n    });\n\n    effect(() => {\n      if (this.weekNumbers()) {\n        this.styleManager.mount(CalendarWeekNumbersStylesComponent);\n      }\n    });\n  }\n}\n","@if (headerTemplate(); as header) {\n  <ng-container *ngTemplateOutlet=\"header.templateRef; context: { $implicit: calendar }\" />\n} @else {\n  <div class=\"et-calendar-header\">\n    <button\n      [disabled]=\"!calendar.canGoPrev()\"\n      [attr.aria-label]=\"resolvedPreviousLabel()\"\n      (click)=\"calendar.previous()\"\n      class=\"et-calendar-nav-button et-calendar-nav-button--previous\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n\n    <button\n      [attr.aria-label]=\"resolvedZoomLabel()\"\n      (click)=\"calendar.zoomOut()\"\n      class=\"et-calendar-header-label\"\n      type=\"button\"\n    >\n      <span class=\"et-calendar-header-label-text\" aria-live=\"polite\">\n        @if (calendar.transitionParity()) {\n          <ng-container *ngTemplateOutlet=\"headerValue\" />\n        } @else {\n          <ng-container *ngTemplateOutlet=\"headerValue\" />\n        }\n      </span>\n\n      <i class=\"et-calendar-header-label-icon\" etIcon=\"et-chevron\"></i>\n    </button>\n\n    <button\n      [disabled]=\"!calendar.canGoNext()\"\n      [attr.aria-label]=\"resolvedNextLabel()\"\n      (click)=\"calendar.next()\"\n      class=\"et-calendar-nav-button et-calendar-nav-button--next\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n  </div>\n}\n\n<div class=\"et-calendar-grid\" etCalendarGrid>\n  @if (calendar.view() === 'month' && calendar.monthsShown() === 1) {\n    <ng-container *ngTemplateOutlet=\"weekdayRow\" />\n  }\n\n  <div class=\"et-calendar-weeks-viewport\" role=\"presentation\">\n    @if (calendar.transitionParity()) {\n      <ng-container *ngTemplateOutlet=\"weeks\" />\n    } @else {\n      <ng-container *ngTemplateOutlet=\"weeks\" />\n    }\n  </div>\n\n  <!-- Declared inside the grid, not just outlet here: an [etCalendarCell]'s injected\n       CalendarGridDirective resolves through this template's declaration view, which\n       ngTemplateOutlet does not re-parent to wherever it renders. -->\n  <ng-template #weeks>\n    <div\n      [attr.data-nav]=\"calendar.navigationDirection()\"\n      class=\"et-calendar-weeks\"\n      animate.leave=\"et-calendar-weeks--leave\"\n      role=\"rowgroup\"\n    >\n      @switch (calendar.view()) {\n        @case ('year') {\n          @for (row of calendar.monthCells(); track $index) {\n            <div class=\"et-calendar-coarse-row\" role=\"row\">\n              @for (cell of row; track cell.date.getTime()) {\n                <button [cell]=\"cell\" class=\"et-calendar-cell et-calendar-cell--coarse\" etCalendarCell type=\"button\">\n                  <span class=\"et-calendar-cell-content\">{{ cell.label }}</span>\n                </button>\n              }\n            </div>\n          }\n        }\n        @case ('multiYear') {\n          @for (row of calendar.yearCells(); track $index) {\n            <div class=\"et-calendar-coarse-row\" role=\"row\">\n              @for (cell of row; track cell.date.getTime()) {\n                <button [cell]=\"cell\" class=\"et-calendar-cell et-calendar-cell--coarse\" etCalendarCell type=\"button\">\n                  <span class=\"et-calendar-cell-content\">{{ cell.label }}</span>\n                </button>\n              }\n            </div>\n          }\n        }\n        @default {\n          <div class=\"et-calendar-months\" role=\"presentation\">\n            @for (page of calendar.monthPages(); track page.key) {\n              <div class=\"et-calendar-month\" role=\"presentation\">\n                @if (calendar.monthsShown() > 1) {\n                  <div class=\"et-calendar-month-label\">{{ page.label }}</div>\n\n                  <ng-container *ngTemplateOutlet=\"weekdayRow\" />\n                }\n\n                @for (week of page.weeks; track $index) {\n                  <div class=\"et-calendar-week\" role=\"row\">\n                    @if (weekNumbers()) {\n                      <span\n                        [attr.aria-label]=\"weekLabel() + ' ' + page.weekNumbers[$index]\"\n                        class=\"et-calendar-week-number\"\n                        role=\"rowheader\"\n                        >{{ page.weekNumbers[$index] }}</span\n                      >\n                    }\n\n                    @for (cell of week; track cell.date.getTime()) {\n                      @if (cell.outsideMonth && calendar.monthsShown() > 1) {\n                        <span class=\"et-calendar-cell et-calendar-cell--empty\" role=\"gridcell\"></span>\n                      } @else {\n                        <button [cell]=\"cell\" class=\"et-calendar-cell\" etCalendarCell type=\"button\">\n                          <span class=\"et-calendar-cell-content\">{{ cell.label }}</span>\n                        </button>\n                      }\n                    }\n                  </div>\n                }\n              </div>\n            }\n          </div>\n        }\n      }\n    </div>\n  </ng-template>\n</div>\n\n<ng-template #headerValue>\n  <span\n    [attr.data-nav]=\"calendar.navigationDirection()\"\n    class=\"et-calendar-header-label-value\"\n    animate.leave=\"et-calendar-header-label-value--leave\"\n    >{{ calendar.headerLabel() }}</span\n  >\n</ng-template>\n\n<ng-template #weekdayRow>\n  <div class=\"et-calendar-weekdays\" role=\"row\">\n    @if (weekNumbers()) {\n      <span [attr.aria-label]=\"weekLabel()\" class=\"et-calendar-week-number-heading\" role=\"columnheader\"></span>\n    }\n\n    @for (weekday of calendar.weekdays(); track weekday.long) {\n      <span [attr.aria-label]=\"weekday.long\" class=\"et-calendar-weekday\" role=\"columnheader\">{{ weekday.short }}</span>\n    }\n  </div>\n</ng-template>\n","import { CalendarComponent } from './calendar.component';\nimport { CalendarHeaderDirective } from './calendar-header.directive';\nimport { CalendarCellDirective, CalendarDirective, CalendarGridDirective } from './headless';\n\nexport const CALENDAR_IMPORTS = [\n  CalendarComponent,\n  CalendarDirective,\n  CalendarGridDirective,\n  CalendarCellDirective,\n  CalendarHeaderDirective,\n] as const;\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideSurfaceDirective } from '@ethlete/core';\n\nexport const CARD_VARIANTS = {\n  ELEVATED: 'elevated',\n  OUTLINED: 'outlined',\n  FILLED: 'filled',\n} as const;\n\nexport type CardVariant = (typeof CARD_VARIANTS)[keyof typeof CARD_VARIANTS];\n\n/**\n * A generic content container - the padded, bordered or shadowed box every dashboard reaches for.\n * Content is yours; the card only owns the surrounding chrome.\n *\n * @example\n * <et-card variant=\"elevated\">\n *   <h3>Revenue</h3>\n *   <p>$12,400 this month</p>\n * </et-card>\n */\n@Component({\n  selector: 'et-card',\n  template: `<ng-content />`,\n  styleUrl: './card.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: ProvideSurfaceDirective,\n      inputs: ['etProvideSurface:surface'],\n    },\n  ],\n  host: {\n    class: 'et-card',\n    '[attr.data-variant]': 'variant()',\n  },\n})\nexport class CardComponent {\n  public variant = input<CardVariant>(CARD_VARIANTS.OUTLINED);\n}\n","import { CardComponent } from './card.component';\n\nexport const CARD_IMPORTS = [CardComponent] as const;\n","// codes 3800-3899\nexport const CAROUSEL_ERROR_CODES = {\n  /** A carousel part (`etCarouselSlide`, `etCarouselItem`, a control, autoplay) was used outside an `[etCarousel]`. */\n  PART_OUTSIDE_CAROUSEL: 3800,\n  /** An `[etCarousel]` rendered no `etCarouselItem`, so it has no slides. */\n  MISSING_ITEMS: 3801,\n  /** An `[etCarousel]` has no scrollable to move - it is not on an `[etScrollable]` element. */\n  MISSING_SCROLLABLE: 3803,\n  /** Autoplay is on without a control to pause it (WCAG 2.2.2). */\n  AUTOPLAY_WITHOUT_PAUSE_CONTROL: 3802,\n  /** An `<et-carousel>` was given no `etCarouselSlide` template, so it has nothing to render. */\n  MISSING_SLIDE_TEMPLATE: 3804,\n} as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the carousel announces or renders. Defaults are English\n * ({@link DEFAULT_CAROUSEL_LABELS}); override them app-wide with {@link provideCarouselLabels} or per\n * instance via the `labels` input.\n */\nexport type CarouselLabels = {\n  /** Accessible label for the carousel region. */\n  carousel: string;\n  /** Accessible label for a slide, e.g. `'3 of 8'`. */\n  slide: (index: number, count: number) => string;\n  /** Accessible label for the previous control. */\n  previous: string;\n  /** Accessible label for the next control. */\n  next: string;\n  /** Accessible label for the control that starts autoplay. */\n  play: string;\n  /** Accessible label for the control that pauses autoplay. */\n  pause: string;\n  /** Accessible label for a slide-picker dot, e.g. `'Go to slide 3'`. */\n  goToSlide: (index: number, count: number) => string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_CAROUSEL_LABELS: CarouselLabels = {\n  carousel: 'Carousel',\n  slide: (index, count) => `${index} of ${count}`,\n  previous: 'Previous slide',\n  next: 'Next slide',\n  play: 'Start automatic slide show',\n  pause: 'Pause automatic slide show',\n  goToSlide: (index) => `Go to slide ${index}`,\n};\n\nconst CAROUSEL_LABELS_DEF = /* @__PURE__ */ defineLabels<CarouselLabels>('CAROUSEL_LABELS', DEFAULT_CAROUSEL_LABELS);\n\n/**\n * Localize the carousel's strings for everything below this injector, and read the set in effect here\n * as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_CAROUSEL_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideCarouselLabels({ previous: 'Vorheriges Bild', next: 'Nächstes Bild' });\n */\nexport const provideCarouselLabels = /* @__PURE__ */ toProvideFn(CAROUSEL_LABELS_DEF);\nexport const injectCarouselLabels = /* @__PURE__ */ toInjectFn(CAROUSEL_LABELS_DEF);\nexport const CAROUSEL_LABELS = /* @__PURE__ */ toToken(CAROUSEL_LABELS_DEF);\n","// codes 2100-2199\nexport const SCROLLABLE_ERROR_CODES = {\n  MISSING_SCROLL_CONTAINER: 2100,\n} as const;\n","import {\n  Directive,\n  ElementRef,\n  Signal,\n  TemplateRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  input,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport {\n  RuntimeError,\n  ScrollObserverDirective,\n  injectHostElement,\n  ScrollToElementOptions,\n  getElementScrollCoordinates,\n  getScrollContainerTarget,\n  getScrollItemTarget,\n  provideBreakpointInstance,\n  signalElementChildren,\n  signalElementDimensions,\n  signalElementIntersection,\n  signalElementScrollState,\n  signalHostAttributes,\n  signalHostClasses,\n  signalHostStyles,\n  typedBreakpointTransform,\n  mountEasingTokens,\n} from '@ethlete/core';\nimport { ResolvedScrollableChrome, ScrollableChrome } from './scrollable-chrome';\nimport { SCROLLABLE_ERROR_CODES } from './scrollable-errors';\nimport {\n  ScrollableDirection,\n  ScrollableItemSize,\n  ScrollableScrollMode,\n  ScrollableScrollOrigin,\n} from './scrollable.types';\n\nconst SCROLLABLE_IGNORE_CHILD_ATTRIBUTE = 'etScrollableIgnoreChild';\n\nconst isScrollableChildIgnored = (el: HTMLElement) => {\n  const attr = el.attributes.getNamedItem(SCROLLABLE_IGNORE_CHILD_ATTRIBUTE)?.value;\n  return attr === 'true' || attr === '';\n};\n\nconst ELEMENT_INTERSECTION_THRESHOLD = [\n  .../* @__PURE__ */ Array.from({ length: 21 }, (_, i) => i * 0.05),\n  0.01,\n  0.005,\n  0.001,\n  0.99,\n  0.995,\n  0.999,\n];\n\n@Directive({\n  selector: '[etScrollable]',\n  exportAs: 'etScrollable',\n  providers: [provideBreakpointInstance(ScrollableDirective)],\n  host: {\n    class: 'et-scrollable',\n  },\n})\nexport class ScrollableDirective {\n  private hostElement = injectHostElement();\n\n  public itemSize = input('auto', { transform: typedBreakpointTransform<ScrollableItemSize>('auto') });\n  public direction = input('horizontal', {\n    transform: typedBreakpointTransform<ScrollableDirection>('horizontal'),\n  });\n  public scrollMode = input('container', {\n    transform: typedBreakpointTransform<ScrollableScrollMode>('container'),\n  });\n  public scrollOrigin = input<ScrollableScrollOrigin>('auto');\n  public scrollMargin = input(0, { transform: numberAttribute });\n  public renderScrollbars = input(false, { transform: booleanAttribute });\n\n  /** @internal */\n  public scrollContainerRef = signal<ElementRef<HTMLElement> | null>(null);\n\n  private childIntersectionsActivated = signal(false);\n\n  // Left broad, every inline style written anywhere inside the track re-runs it - and a carousel's JS\n  // transition driver writes one per slide per animation frame, so a scroll cost a change detection tick a\n  // frame for nothing.\n  private allScrollableChildren = signalElementChildren(this.scrollContainerRef, {\n    mutations: { childList: true, subtree: true, attributeFilter: [SCROLLABLE_IGNORE_CHILD_ATTRIBUTE] },\n  });\n\n  public scrollableChildren = computed(() => this.allScrollableChildren().filter((c) => !isScrollableChildIgnored(c)));\n\n  private activeChildren = signal<ScrollableActiveChildRef[]>([]);\n\n  private initialActiveChildScrollPosition = computed(() => {\n    const firstActive = this.activeChildren().find((child) => child.isActiveChildEnabled());\n\n    if (!firstActive) return null;\n\n    const position = this.getElementScrollCoordinates({ element: firstActive.elementRef.nativeElement });\n\n    // `signalElementScrollState` stops watching once it gets a position, and the coordinates come back\n    // offsetless while the track cannot scroll yet - handing those over would spend the one shot on nothing.\n    return position.left === undefined && position.top === undefined ? null : position;\n  });\n\n  /** @internal */\n  public scrollObserverRef = signal<ScrollObserverDirective | null>(null);\n\n  // `class` and `hidden` are the attributes that plausibly resize something; `style` is left out deliberately:\n  // it is the one written per animation frame (a carousel's JS transition driver, any inline-style animation)\n  // and every such write re-measured `scrollWidth`, which is a forced layout, and ran a change detection tick\n  // with it.\n  public containerScrollState = signalElementScrollState(this.scrollContainerRef, {\n    mutations: { childList: true, subtree: true, attributeFilter: ['class', 'hidden'] },\n    initialScrollPosition: this.initialActiveChildScrollPosition,\n  });\n\n  public isAtStart = computed(() => this.scrollObserverRef()?.isAtStart() ?? false);\n  public isAtEnd = computed(() => this.scrollObserverRef()?.isAtEnd() ?? false);\n\n  public canScroll = computed(() =>\n    this.direction() === 'horizontal'\n      ? this.containerScrollState().canScrollHorizontally\n      : this.containerScrollState().canScrollVertically,\n  );\n\n  public childIntersections = signalElementIntersection(this.scrollableChildren, {\n    root: this.scrollContainerRef,\n    threshold: ELEMENT_INTERSECTION_THRESHOLD,\n    enabled: this.childIntersectionsActivated,\n  });\n\n  public scrollableDimensions = signalElementDimensions(this.scrollContainerRef);\n\n  /** @internal */\n  public loadingTemplateRef = signal<ScrollableLoadingTemplateRef | null>(null);\n\n  public loadingTemplate = this.loadingTemplateRef.asReadonly();\n\n  /** @internal */\n  public masksDirective = signal<unknown | null>(null);\n  /** @internal */\n  public snapDirective = signal<unknown | null>(null);\n  /**\n   * @internal Where a snapped child comes to rest, or `null` when nothing is snapping. Set by\n   * `etScrollableSnap`.\n   */\n  public activeSnapOrigin = signal<ScrollableScrollOrigin | null>(null);\n\n  /** @internal Whether a cursor drag is moving the track right now. Set by `etScrollableDrag`. */\n  public isCursorDragging = signal(false);\n\n  private snapSuspensions = signal(0);\n\n  /** @internal */\n  public isSnapSuspended = computed(() => this.snapSuspensions() > 0);\n\n  private registeredChrome = signal<readonly ScrollableChrome[]>([]);\n\n  /** @internal */\n  public activeChrome = computed<readonly ResolvedScrollableChrome[]>(() =>\n    this.registeredChrome()\n      .filter((chrome) => chrome.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n      .map((chrome) => ({\n        key: chrome.key,\n        slot: typeof chrome.slot === 'function' ? chrome.slot() : chrome.slot,\n        component: chrome.component,\n        inputs: chrome.inputs?.() ?? {},\n        injector: chrome.injector,\n      })),\n  );\n\n  /** @internal */\n  public hostAttributeBindings = signalHostAttributes({\n    'item-size': this.itemSize,\n    direction: this.direction,\n    'render-scrollbars': this.renderScrollbars,\n    snap: computed(() => (this.activeSnapOrigin() === null ? null : '')),\n    'snap-origin': this.activeSnapOrigin,\n    'snap-suspended': computed(() => (this.isSnapSuspended() ? '' : null)),\n  });\n\n  /** @internal */\n  public hostClassBindings = signalHostClasses({\n    'et-scrollable--can-scroll': this.canScroll,\n    'et-scrollable--is-at-start': this.isAtStart,\n    'et-scrollable--is-at-end': this.isAtEnd,\n    'et-scrollable--has-partial-items': computed(\n      () =>\n        !!this.masksDirective() &&\n        this.childIntersections().some((i) => i.intersectionRatio > 0 && i.intersectionRatio < 1),\n    ),\n  });\n\n  public gapValue = computed(() => {\n    this.scrollableDimensions();\n\n    const scrollable = this.scrollContainerRef()?.nativeElement;\n    if (!scrollable) return null;\n\n    const computedStyle = getComputedStyle(scrollable);\n    const gap = computedStyle.gap;\n\n    if (gap === 'normal') return '0px';\n\n    return gap;\n  });\n\n  /** @internal */\n  public hostStyleBindings = signalHostStyles({\n    '--item-count': computed(() => this.scrollableChildren().length),\n    '--item-gap': this.gapValue,\n    // `scrollMargin` has to reach the CSS snap positions too, or a snapped child would come to rest\n    // somewhere a programmatic `scrollToElement` would not put it.\n    '--_et-scrollable-scroll-margin': computed(() => `${this.scrollMargin()}px`),\n  });\n\n  constructor() {\n    mountEasingTokens();\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.scrollContainerRef()) {\n          throw new RuntimeError(\n            SCROLLABLE_ERROR_CODES.MISSING_SCROLL_CONTAINER,\n            '[ScrollableDirective] No scroll container registered. ' +\n              'Use the default <et-scrollable> component; headless [etScrollable] does not provide a scroll container.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /**\n   * Contribute a component to the scrollable's own DOM. Call once, from an opt-in feature's constructor -\n   * see {@link ScrollableChrome}.\n   */\n  public registerChrome(chrome: ScrollableChrome) {\n    this.registeredChrome.update((entries) => [...entries, chrome]);\n  }\n\n  /**\n   * Register a child as the one to open the track on. Registration order is DOM order, and the first\n   * registered child whose `isActiveChildEnabled` reads `true` wins.\n   *\n   * @internal\n   */\n  public registerActiveChild(child: ScrollableActiveChildRef) {\n    this.activeChildren.update((children) => [...children, child]);\n  }\n\n  /** @internal */\n  public unregisterActiveChild(child: ScrollableActiveChildRef) {\n    this.activeChildren.update((children) => children.filter((c) => c !== child));\n  }\n\n  public activateChildIntersections() {\n    this.childIntersectionsActivated.set(true);\n  }\n\n  /**\n   * Hold CSS snap off until the returned function is called.\n   *\n   * `scroll-snap-type: mandatory` does not merely influence where a scroll comes to rest - it overrules a\n   * programmatic offset outright, and silently. Any code that means a specific offset therefore has to take\n   * snapping off the table while it writes one.\n   *\n   * Ref-counted: two of them can overlap, and whichever finishes first must not hand snapping back to the\n   * other.\n   *\n   * @internal\n   */\n  public suspendSnap() {\n    this.snapSuspensions.update((count) => count + 1);\n\n    let hasReleased = false;\n\n    return () => {\n      if (hasReleased) return;\n\n      hasReleased = true;\n      this.snapSuspensions.update((count) => Math.max(0, count - 1));\n    };\n  }\n\n  /**\n   * Write a scroll offset that CSS snap cannot overrule - see {@link suspendSnap}.\n   *\n   * @internal\n   */\n  public scrollToOffsetUnsnapped(options: ScrollToOptions) {\n    const scrollElement = this.scrollContainerRef()?.nativeElement;\n\n    if (!scrollElement) return;\n\n    const release = this.suspendSnap();\n\n    scrollElement.scroll({ ...options, behavior: 'instant' });\n\n    requestAnimationFrame(release);\n  }\n\n  public scrollOneContainerSize(scrollDirection: 'start' | 'end') {\n    const scrollElement = this.scrollContainerRef()?.nativeElement;\n    if (!scrollElement) return;\n\n    const snap = this.snapDirective();\n\n    if (snap) {\n      const target = getScrollContainerTarget(this.childIntersections(), scrollDirection);\n      if (target) this.scrollToElement(target);\n    } else {\n      const dimensions = this.scrollableDimensions().client;\n      const scrollableSize = this.direction() === 'horizontal' ? (dimensions?.width ?? 0) : (dimensions?.height ?? 0);\n      const currentScroll = this.direction() === 'horizontal' ? scrollElement.scrollLeft : scrollElement.scrollTop;\n\n      scrollElement.scrollTo({\n        [this.direction() === 'horizontal' ? 'left' : 'top']:\n          currentScroll + (scrollDirection === 'start' ? -scrollableSize : scrollableSize),\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  public scrollOneItemSize(scrollDirection: 'start' | 'end') {\n    const allIntersections = this.childIntersections();\n    const scrollElement = this.scrollContainerRef()?.nativeElement;\n\n    if (!allIntersections.length || !scrollElement) return;\n\n    const target = getScrollItemTarget(\n      allIntersections,\n      scrollElement,\n      scrollDirection,\n      this.scrollOrigin(),\n      this.direction(),\n    );\n\n    if (!target) return;\n\n    this.scrollToElement(target);\n  }\n\n  public getElementScrollCoordinates(\n    options: Omit<ScrollToElementOptions, 'container'> & { ignoreForcedOrigin?: boolean },\n  ) {\n    const scrollElement = this.scrollContainerRef()?.nativeElement;\n    const { origin } = options;\n    const forcedOrigin = this.scrollOrigin();\n\n    return getElementScrollCoordinates({\n      container: scrollElement,\n      direction: this.direction() === 'horizontal' ? 'inline' : 'block',\n      ...(this.direction() === 'horizontal'\n        ? { scrollInlineMargin: this.scrollMargin() }\n        : { scrollBlockMargin: this.scrollMargin() }),\n      ...options,\n      ...(forcedOrigin === 'auto' || options.ignoreForcedOrigin ? { origin } : { origin: forcedOrigin }),\n    });\n  }\n\n  public scrollToElement(options: Omit<ScrollToElementOptions, 'container'> & { ignoreForcedOrigin?: boolean }) {\n    this.scrollContainerRef()?.nativeElement.scroll(this.getElementScrollCoordinates(options));\n  }\n\n  public scrollToElementByIndex(\n    options: Omit<ScrollToElementOptions, 'container'> & { index: number; ignoreForcedOrigin?: boolean },\n  ) {\n    const elements = this.scrollableChildren();\n    const element = elements[options.index];\n    if (!element) return;\n\n    this.scrollToElement({ element, ...options });\n  }\n\n  public scrollToStartDirection() {\n    if (this.scrollMode() === 'container') {\n      this.scrollOneContainerSize('start');\n    } else {\n      this.scrollOneItemSize('start');\n    }\n  }\n\n  public scrollToEndDirection() {\n    if (this.scrollMode() === 'container') {\n      this.scrollOneContainerSize('end');\n    } else {\n      this.scrollOneItemSize('end');\n    }\n  }\n\n  public getActiveChildren() {\n    return this.activeChildren.asReadonly();\n  }\n\n  public getScrollContainerRef() {\n    return this.scrollContainerRef.asReadonly();\n  }\n}\n\nexport type ScrollableActiveChildRef = {\n  elementRef: ElementRef<HTMLElement>;\n  isActiveChildEnabled: Signal<boolean>;\n};\n\nexport type ScrollableLoadingTemplateRef = {\n  templateRef: TemplateRef<unknown>;\n  repeat: Signal<unknown[]>;\n};\n","import { DestroyRef, Directive, ElementRef, booleanAttribute, inject, input } from '@angular/core';\nimport { ScrollableActiveChildRef, ScrollableDirective } from './scrollable.directive';\n\n@Directive({\n  selector: '[etScrollableActiveChild]',\n})\nexport class ScrollableActiveChildDirective {\n  private scrollable = inject(ScrollableDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  public isActiveChildEnabled = input(true, { alias: 'etScrollableActiveChild', transform: booleanAttribute });\n\n  constructor() {\n    const scrollable = this.scrollable;\n\n    if (!scrollable) return;\n\n    const ref: ScrollableActiveChildRef = {\n      elementRef: this.elementRef,\n      isActiveChildEnabled: this.isActiveChildEnabled,\n    };\n\n    scrollable.registerActiveChild(ref);\n\n    this.destroyRef.onDestroy(() => scrollable.unregisterActiveChild(ref));\n  }\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { IconButtonComponent } from '../../button/icon-button.component';\nimport { CHEVRON_ICON } from '../../icon/headless/chevron-icon';\nimport { provideIcons } from '../../icon/headless/icon-provider';\nimport { IconDirective } from '../../icon/headless/icon.directive';\nimport { ScrollableDirective } from './scrollable.directive';\nimport { ScrollableButtonPosition } from './scrollable.types';\n\n@Component({\n  selector: 'et-scrollable-buttons, [et-scrollable-buttons]',\n  template: `\n    <button\n      [disabled]=\"scrollable.isAtStart()\"\n      (click)=\"scrollable.scrollToStartDirection()\"\n      class=\"et-scrollable-button et-scrollable-button--start\"\n      et-icon-button\n      size=\"xs\"\n      aria-hidden=\"true\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n    <button\n      [disabled]=\"scrollable.isAtEnd()\"\n      (click)=\"scrollable.scrollToEndDirection()\"\n      class=\"et-scrollable-button et-scrollable-button--end\"\n      et-icon-button\n      size=\"xs\"\n      aria-hidden=\"true\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n  `,\n  styleUrls: ['./scrollable-buttons.component.css', './scrollable-footer.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, IconButtonComponent],\n  providers: [provideIcons(CHEVRON_ICON)],\n  host: {\n    class: 'et-scrollable-buttons',\n    '[class.et-scrollable-buttons--inside]': 'position() === \"inside\"',\n    '[class.et-scrollable-buttons--footer]': 'position() === \"footer\"',\n  },\n})\nexport class ScrollableButtonsComponent {\n  protected scrollable = inject(ScrollableDirective);\n\n  public position = input<ScrollableButtonPosition>('inside');\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { ScrollableButtonsComponent } from './scrollable-buttons.component';\nimport { ScrollableDirective } from './scrollable.directive';\nimport { ScrollableButtonPosition } from './scrollable.types';\n\n/** Options for `etScrollableButtons`. */\nexport type ScrollableButtonsConfig = {\n  /**\n   * `'inside'` floats the two buttons over the track's edges; `'footer'` puts them in a row below it,\n   * next to the dots when `etScrollableNavigation` is on too. @default 'inside'\n   */\n  position?: ScrollableButtonPosition;\n  /**\n   * Keep the buttons in view while the page scrolls past a tall track, rather than letting them travel\n   * off with it. Only meaningful with `position: 'inside'`. @default false\n   */\n  sticky?: boolean;\n  /** Turn the buttons off without removing the directive. @default true */\n  enabled?: boolean;\n};\n\n/**\n * Adds the previous/next scroll buttons to an `<et-scrollable>`. Opt-in, applied on the `<et-scrollable>`\n * itself. Ships in `SCROLLABLE_NAVIGATION_IMPORTS`.\n *\n * The buttons are decorative - `aria-hidden`, not tabbable - because a scroll container is already\n * keyboard-operable. Controls that must be reachable belong to the consumer.\n */\n@Directive({\n  selector: 'et-scrollable[etScrollableButtons], [etScrollable][etScrollableButtons]',\n  host: {\n    '[class.et-scrollable--sticky-buttons]': 'sticky() && position() === \"inside\"',\n  },\n})\nexport class ScrollableButtonsDirective {\n  private scrollable = inject(ScrollableDirective);\n\n  public config = input<ScrollableButtonsConfig | ''>('', { alias: 'etScrollableButtons' });\n\n  private resolved = computed(() => {\n    const config = this.config();\n\n    return config === '' ? {} : config;\n  });\n\n  public position = computed(() => this.resolved().position ?? 'inside');\n  public sticky = computed(() => this.resolved().sticky ?? false);\n  public enabled = computed(() => this.resolved().enabled ?? true);\n\n  constructor() {\n    this.scrollable.registerChrome({\n      key: 'buttons',\n      slot: computed(() => (this.position() === 'footer' ? 'footer' : 'overlay')),\n      component: ScrollableButtonsComponent,\n      inputs: computed(() => ({ position: this.position() })),\n      enabled: this.enabled,\n      order: 0,\n    });\n  }\n}\n","import { Directive, booleanAttribute, computed, inject, input, signal } from '@angular/core';\nimport { signalClasses } from '@ethlete/core';\nimport { ScrollableDirective } from './scrollable.directive';\n\n/**\n * Fades the children that are only partly in view, so a track reads as continuing past its edge.\n *\n * Opt-in, applied on the `<et-scrollable>` itself - it turns the child intersection observer on, which a\n * plain track does not otherwise need. Ships in `SCROLLABLE_DARKEN_IMPORTS`.\n */\n@Directive({\n  selector: '[etScrollableDarken]',\n  host: {\n    '[class.et-scrollable--darken-non-intersecting-items]': 'enabled()',\n  },\n})\nexport class ScrollableDarkenDirective {\n  private scrollable = inject(ScrollableDirective);\n\n  public enabled = input(true, { transform: booleanAttribute, alias: 'etScrollableDarken' });\n\n  private nonFullIntersecting = computed(\n    () => {\n      if (!this.enabled()) return [];\n\n      const allIntersections = this.scrollable.childIntersections();\n      return allIntersections.filter((i) => i.intersectionRatio !== 1).map((i) => i.target as HTMLElement);\n    },\n    { equal: (a, b) => a.length === b.length && a.every((v, i) => v === b[i]) },\n  );\n\n  /** @internal */\n  public nonFullIntersectingClassBindings = signalClasses(this.nonFullIntersecting, {\n    'et-scrollable-item--not-intersecting': signal(true),\n  });\n\n  constructor() {\n    this.scrollable.activateChildIntersections();\n  }\n}\n","import { Directive, booleanAttribute, effect, inject, input } from '@angular/core';\nimport { useCursorDragScroll } from '@ethlete/core';\nimport { ScrollableDirective } from './scrollable.directive';\n\n/**\n * Lets a mouse drag the track, as a finger already can.\n *\n * Opt-in, applied on the `<et-scrollable>` itself. Ships in `SCROLLABLE_DRAG_IMPORTS` - alongside\n * `etScrollableSnap`, which settles the release a drag gives the platform no momentum to decelerate into.\n */\n@Directive({\n  selector: '[etScrollableDrag]',\n})\nexport class ScrollableDragDirective {\n  private scrollable = inject(ScrollableDirective);\n\n  public enabled = input(true, { transform: booleanAttribute, alias: 'etScrollableDrag' });\n\n  public cursorDragScrollState = useCursorDragScroll(this.scrollable.getScrollContainerRef(), {\n    enabled: this.enabled,\n    allowedDirection: this.scrollable.direction,\n    canScroll: this.scrollable.canScroll,\n  });\n\n  constructor() {\n    // Not a linkedSignal: it is pushed into the *scrollable's* signal, which is where anything else can see it.\n    // eslint-disable-next-line ethlete/prefer-linked-signal\n    effect(() => this.scrollable.isCursorDragging.set(this.cursorDragScrollState.isDragging()));\n  }\n}\n","import { Directive, booleanAttribute, input } from '@angular/core';\n\n@Directive({\n  selector: `[etScrollableIgnoreChild]`,\n  host: {\n    '[attr.etScrollableIgnoreChild]': 'enabled() ? \"\" : null',\n  },\n})\nexport class ScrollableIgnoreChildDirective {\n  public enabled = input(true, { transform: booleanAttribute });\n}\n","import { Directive, TemplateRef, computed, inject, input, numberAttribute } from '@angular/core';\nimport { ScrollableDirective } from './scrollable.directive';\n\n@Directive({\n  selector: 'ng-template[etScrollableLoadingTemplate]',\n})\nexport class ScrollableLoadingTemplateDirective {\n  private scrollable = inject(ScrollableDirective, { optional: true });\n\n  private templateRef = inject(TemplateRef);\n  public repeatContentCount = input(1, { transform: numberAttribute });\n  public repeat = computed(() => Array.from({ length: this.repeatContentCount() }));\n\n  constructor() {\n    this.scrollable?.loadingTemplateRef.set({\n      templateRef: this.templateRef,\n      repeat: this.repeat,\n    });\n  }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { ScrollableDirective } from './scrollable.directive';\n\n@Component({\n  selector: 'et-scrollable-masks, [et-scrollable-masks]',\n  template: `\n    <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n    <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n  `,\n  styleUrl: './scrollable-masks.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-scrollable-masks',\n  },\n})\nexport class ScrollableMasksComponent {\n  private scrollable = inject(ScrollableDirective);\n\n  constructor() {\n    this.scrollable.masksDirective.set(this);\n    this.scrollable.activateChildIntersections();\n  }\n}\n","import { Component, ElementRef, ViewEncapsulation, computed, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { signalElementDimensions, signalStyles } from '@ethlete/core';\nimport { EMPTY, debounceTime, filter, fromEvent, switchMap, tap } from 'rxjs';\nimport { ScrollableDirective } from './scrollable.directive';\nimport { ScrollableNavigation } from './scrollable.types';\n\n@Component({\n  selector: 'et-scrollable-navigation, [et-scrollable-navigation]',\n  template: `\n    <div class=\"et-scrollable-progress-bar\">\n      <div #navigationDotsContainer class=\"et-scrollable-dots-container\">\n        @for (item of navigation().items; track i; let i = $index) {\n          <button\n            #navigationDot\n            [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n            [class.et-scrollable-navigation-item--close]=\"\n              navigation().items[i + 1]?.isActive || navigation().items[i - 1]?.isActive\n            \"\n            [class.et-scrollable-navigation-item--far]=\"\n              !navigation().items[i + 1]?.isActive && !navigation().items[i - 1]?.isActive && !item.isActive\n            \"\n            [attr.active-offset]=\"item.activeOffset\"\n            (click)=\"scrollToElementViaNavigation(i)\"\n            class=\"et-scrollable-navigation-item\"\n            type=\"button\"\n            tabindex=\"-1\"\n            aria-hidden=\"true\"\n          ></button>\n        }\n      </div>\n    </div>\n  `,\n  styleUrls: ['./scrollable-navigation.component.css', './scrollable-footer.css'],\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-scrollable-navigation',\n    'aria-hidden': 'true',\n  },\n})\nexport class ScrollableNavigationComponent {\n  private scrollable = inject(ScrollableDirective);\n\n  private navigationDotsContainer = viewChild<ElementRef<HTMLElement>>('navigationDotsContainer');\n  private firstNavigationDot = viewChild<ElementRef<HTMLButtonElement>>('navigationDot');\n\n  private navigationDotDimensions = signalElementDimensions(this.firstNavigationDot);\n\n  private manualActiveNavigationIndex = signal<number | null>(null);\n\n  public navigation = computed<ScrollableNavigation>(\n    () => {\n      const allIntersections = this.scrollable.childIntersections();\n      const manualActiveIndex = this.manualActiveNavigationIndex();\n      const isAtStart = this.scrollable.isAtStart();\n      const isAtEnd = this.scrollable.isAtEnd();\n\n      const firstIntersection = allIntersections[0];\n      const lastIntersection = allIntersections[allIntersections.length - 1];\n\n      const highestIntersection = isAtStart\n        ? firstIntersection\n        : isAtEnd\n          ? lastIntersection\n          : allIntersections.reduce((prev, curr) => {\n              if (prev && prev.intersectionRatio > curr.intersectionRatio) return prev;\n              return curr;\n            }, allIntersections[0]);\n\n      if (!highestIntersection) {\n        return { items: [], activeIndex: -1 };\n      }\n\n      const activeIndex =\n        manualActiveIndex !== null ? manualActiveIndex : allIntersections.findIndex((i) => i === highestIntersection);\n\n      const items = allIntersections.map((i, index) => ({\n        isActive:\n          manualActiveIndex !== null\n            ? manualActiveIndex === index\n            : i === highestIntersection && highestIntersection.intersectionRatio > 0,\n        activeOffset: index === activeIndex ? 0 : Math.abs(index - activeIndex),\n        element: i.target as HTMLElement,\n      }));\n\n      return { items, activeIndex };\n    },\n    {\n      equal: (a, b) =>\n        a.activeIndex === b.activeIndex &&\n        a.items.length === b.items.length &&\n        a.items.every((v, i) => v.isActive === b.items[i]?.isActive && v.activeOffset === b.items[i]?.activeOffset),\n    },\n  );\n\n  public activeIndex = computed(() => this.navigation().activeIndex);\n\n  /** @internal */\n  public dotsContainerStyleBindings = signalStyles(this.navigationDotsContainer, {\n    transform: computed(() => {\n      const activeIdx = this.navigation().activeIndex;\n      const childCount = this.navigation().items.length;\n      let offset = '0px';\n\n      if (childCount > 5) {\n        const dotContainerWidth = this.navigationDotDimensions().client?.width ?? 20;\n        let offsetValue = -(activeIdx - 2);\n\n        if (activeIdx < 3) {\n          offsetValue = 0;\n        } else if (activeIdx >= childCount - 3) {\n          offsetValue = 5 - childCount;\n        }\n\n        offset = `${offsetValue * dotContainerWidth}px`;\n      }\n\n      const dir = this.scrollable.direction() === 'horizontal' ? 'X' : 'Y';\n\n      return `translate${dir}(${offset})`;\n    }),\n  });\n\n  constructor() {\n    this.scrollable.activateChildIntersections();\n\n    const scrollContainerRef$ = toObservable(this.scrollable.getScrollContainerRef());\n\n    toObservable(this.manualActiveNavigationIndex)\n      .pipe(\n        filter((i) => i !== null),\n        switchMap(() =>\n          scrollContainerRef$.pipe(\n            switchMap((ref) => {\n              if (!ref) return EMPTY;\n              // eslint prefers signalElementScrollState but this pattern is intentional for debouncing\n              // eslint-disable-next-line ethlete/prefer-scroll-state\n              return fromEvent(ref.nativeElement, 'scroll');\n            }),\n          ),\n        ),\n        debounceTime(50),\n        tap(() => this.manualActiveNavigationIndex.set(null)),\n        // last, so it also unsubscribes the switched-in scroll listener - completion alone would not\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  public scrollToElementViaNavigation(elementIndex: number) {\n    const element = this.scrollable.scrollableChildren()[elementIndex];\n    if (!element) return;\n\n    this.manualActiveNavigationIndex.set(elementIndex);\n    this.scrollable.scrollToElement({ element });\n  }\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { ScrollableNavigationComponent } from './scrollable-navigation.component';\nimport { ScrollableDirective } from './scrollable.directive';\n\n/** Options for `etScrollableNavigation`. */\nexport type ScrollableNavigationConfig = {\n  /** Turn the dots off without removing the directive. @default true */\n  enabled?: boolean;\n};\n\n/**\n * Adds the carousel-style dots below an `<et-scrollable>`, one per child, tracking whichever is in view.\n * Opt-in, and it turns the child intersection observer on - a track that only scrolls does not need\n * either. Ships in `SCROLLABLE_NAVIGATION_IMPORTS`.\n *\n * Decorative like the buttons (`aria-hidden`, not tabbable).\n */\n@Directive({\n  selector: 'et-scrollable[etScrollableNavigation], [etScrollable][etScrollableNavigation]',\n})\nexport class ScrollableNavigationDirective {\n  private scrollable = inject(ScrollableDirective);\n\n  public config = input<ScrollableNavigationConfig | ''>('', { alias: 'etScrollableNavigation' });\n\n  public enabled = computed(() => {\n    const config = this.config();\n\n    return config === '' ? true : (config.enabled ?? true);\n  });\n\n  constructor() {\n    this.scrollable.registerChrome({\n      key: 'navigation',\n      slot: 'footer',\n      component: ScrollableNavigationComponent,\n      enabled: this.enabled,\n      order: 1,\n    });\n  }\n}\n","import { DestroyRef, Directive, booleanAttribute, computed, effect, inject, input, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getScrollSnapTarget } from '@ethlete/core';\nimport { fromEvent, merge, take, tap, timer } from 'rxjs';\nimport { ScrollableDirective } from './scrollable.directive';\nimport { ScrollableScrollOrigin } from './scrollable.types';\n\n/**\n * How long to wait for a settling glide to arrive before handing snapping back regardless - for browsers\n * without `scrollend` (Safari before 18.2), and for a glide the reader interrupts.\n */\nconst SETTLE_TIMEOUT = 700;\n\n/**\n * Makes the track come to rest on a child rather than wherever the gesture ran out.\n *\n * The snapping is **native CSS scroll snap** - `scroll-snap-type` on the container, `scroll-snap-align` on the\n * children, driven by the attributes this directive puts on the scrollable.\n *\n * Opt-in, applied on the `<et-scrollable>` itself. Ships in `SCROLLABLE_DRAG_IMPORTS`.\n */\n@Directive({\n  selector: '[etScrollableSnap]',\n})\nexport class ScrollableSnapDirective {\n  private scrollable = inject(ScrollableDirective);\n  private destroyRef = inject(DestroyRef);\n\n  public enabled = input(true, { transform: booleanAttribute, alias: 'etScrollableSnap' });\n  public snapOrigin = input<ScrollableScrollOrigin>('auto');\n\n  constructor() {\n    // The intersections stay on: `scrollMode=\"container\"` asks the scrollable to page by whole viewports, and\n    // which child that lands on is read off them - as is the drag settle below.\n    this.scrollable.activateChildIntersections();\n    this.scrollable.snapDirective.set(this);\n\n    // Not a linkedSignal: the value is derived from this directive's inputs, but it has to be pushed into the\n    // *scrollable's* signal, which is the only place that can put it on the host for the CSS to read.\n    // eslint-disable-next-line ethlete/prefer-linked-signal\n    effect(() => this.scrollable.activeSnapOrigin.set(this.enabled() ? this.snapOrigin() : null));\n\n    this.settleCursorDrags();\n\n    this.destroyRef.onDestroy(() => {\n      this.scrollable.activeSnapOrigin.set(null);\n      this.scrollable.snapDirective.set(null);\n    });\n  }\n\n  /**\n   * A mouse drag is the one gesture the platform gives no momentum to, so native snap has nothing to\n   * decelerate into: letting go of the button would hard-cut the track to the nearest child (a 120px jump in\n   * a single frame, measured). This glides there instead - once, on release.\n   *\n   * Snapping is held off for the whole drag rather than acquired on release, so there is never a frame where\n   * the browser could snap the offset the drag is still writing, and never an ordering question between this\n   * and the drag's own bookkeeping.\n   */\n  private settleCursorDrags() {\n    const isDragging = computed(() => this.enabled() && this.scrollable.isCursorDragging());\n\n    let releaseSnap: (() => void) | null = null;\n\n    effect(() => {\n      const dragging = isDragging();\n\n      untracked(() => {\n        if (dragging) {\n          releaseSnap ??= this.scrollable.suspendSnap();\n\n          return;\n        }\n\n        if (!releaseSnap) return;\n\n        const release = releaseSnap;\n        releaseSnap = null;\n\n        this.glideToNearestChild(release);\n      });\n    });\n\n    this.destroyRef.onDestroy(() => releaseSnap?.());\n  }\n\n  private glideToNearestChild(release: () => void) {\n    const scrollElement = this.scrollable.getScrollContainerRef()()?.nativeElement;\n    const target = scrollElement\n      ? getScrollSnapTarget(\n          this.scrollable\n            .childIntersections()\n            .filter((intersection) => intersection.intersectionRatio > 0)\n            .map((intersection) => intersection.target as HTMLElement),\n          scrollElement,\n          this.scrollable.direction(),\n          this.snapOrigin(),\n          this.scrollable.scrollMargin(),\n        )\n      : null;\n\n    if (!scrollElement || !target) {\n      release();\n\n      return;\n    }\n\n    this.scrollable.scrollToElement({\n      element: target.element,\n      origin: target.origin,\n      ignoreForcedOrigin: true,\n    });\n\n    merge(\n      fromEvent(scrollElement, 'scrollend'),\n      fromEvent(scrollElement, 'pointerdown', { passive: true }),\n      timer(SETTLE_TIMEOUT),\n    )\n      .pipe(take(1), tap(release), takeUntilDestroyed(this.destroyRef))\n      .subscribe();\n  }\n}\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n  viewChild,\n} from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  ProvideColorDirective,\n  ScrollObserverDirective,\n  ScrollObserverEndDirective,\n  ScrollObserverStartDirective,\n  createCanAnimateSignal,\n  signalClasses,\n} from '@ethlete/core';\nimport { debounceTime, map, tap } from 'rxjs';\nimport { ScrollableIgnoreChildDirective } from './headless/scrollable-ignore-child.directive';\nimport { ScrollableMasksComponent } from './headless/scrollable-masks.component';\nimport { ScrollableDirective } from './headless/scrollable.directive';\nimport {\n  ScrollableIntersectionChange,\n  ScrollableLoadingTemplatePosition,\n  ScrollableMaskVariant,\n  ScrollableScrollState,\n} from './headless/scrollable.types';\n\n@Component({\n  selector: 'et-scrollable',\n  templateUrl: './scrollable.component.html',\n  styleUrl: './scrollable.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ScrollObserverDirective,\n    ScrollObserverStartDirective,\n    ScrollObserverEndDirective,\n    ScrollableIgnoreChildDirective,\n    ScrollableMasksComponent,\n    NgComponentOutlet,\n    NgTemplateOutlet,\n  ],\n  hostDirectives: [\n    {\n      directive: ScrollableDirective,\n      inputs: ['itemSize', 'direction', 'scrollMode', 'scrollOrigin', 'scrollMargin', 'renderScrollbars'],\n    },\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-scrollable',\n    '[class.et-scrollable--can-animate]': 'canAnimate.state()',\n    '[attr.mask-variant]': 'maskVariant()',\n  },\n})\nexport class ScrollableComponent {\n  public scrollableDir = inject(ScrollableDirective);\n\n  public renderMasks = input(true, { transform: booleanAttribute });\n  public maskVariant = input<ScrollableMaskVariant>('gradient');\n  public showLoadingTemplate = input(false, { transform: booleanAttribute });\n  public loadingTemplatePosition = input<ScrollableLoadingTemplatePosition>('end');\n  public scrollableRole = input<string | null>(null);\n  public scrollableClass = input<string | null>(null);\n\n  public intersectionChange = outputFromObservable<ScrollableIntersectionChange[]>(\n    toObservable(this.scrollableDir.childIntersections).pipe(\n      debounceTime(50),\n      map((entries) =>\n        entries.map((i, index) => ({\n          index,\n          element: i.target as HTMLElement,\n          intersectionRatio: i.intersectionRatio,\n          isIntersecting: i.isIntersecting,\n        })),\n      ),\n      takeUntilDestroyed(),\n    ),\n  );\n\n  public scrollStateChange = outputFromObservable<ScrollableScrollState>(\n    toObservable(\n      computed(() => ({\n        canScroll: this.scrollableDir.canScroll(),\n        isAtEnd: this.scrollableDir.isAtEnd(),\n        isAtStart: this.scrollableDir.isAtStart(),\n      })),\n    ),\n  );\n\n  private scrollContainerEl = viewChild<ElementRef<HTMLElement>>('scrollable');\n  private scrollObserver = viewChild.required(ScrollObserverDirective);\n\n  protected overlayChrome = computed(() => this.scrollableDir.activeChrome().filter((c) => c.slot === 'overlay'));\n  protected footerChrome = computed(() => this.scrollableDir.activeChrome().filter((c) => c.slot === 'footer'));\n  protected footerHasButtons = computed(() => this.footerChrome().some((c) => c.key === 'buttons'));\n  protected footerHasNavigation = computed(() => this.footerChrome().some((c) => c.key === 'navigation'));\n\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    const scrollContainerEl$ = toObservable(this.scrollContainerEl);\n    const scrollObserver$ = toObservable(this.scrollObserver);\n\n    scrollContainerEl$\n      .pipe(\n        tap((el) => {\n          if (el) this.scrollableDir.scrollContainerRef.set(el);\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    scrollObserver$\n      .pipe(\n        tap((obs) => {\n          if (obs) this.scrollableDir.scrollObserverRef.set(obs);\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    signalClasses(this.scrollableDir.scrollableChildren, {\n      'et-scrollable-item': computed(() => true),\n    });\n  }\n}\n","<div class=\"et-scrollable-wrapper\" role=\"presentation\">\n  <div\n    #scrollable\n    [attr.role]=\"scrollableRole() ?? undefined\"\n    [class]=\"scrollableClass()\"\n    class=\"et-scrollable-container\"\n    etScrollObserver\n  >\n    <div class=\"et-scroll-observer-first-element\" etScrollObserverStart etScrollableIgnoreChild></div>\n\n    @if (loadingTemplatePosition() === 'start' && showLoadingTemplate()) {\n      <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n    }\n\n    <ng-content />\n\n    @if (loadingTemplatePosition() === 'end' && showLoadingTemplate()) {\n      <ng-container *ngTemplateOutlet=\"loadingTpl\" />\n    }\n\n    <div class=\"et-scroll-observer-last-element\" etScrollObserverEnd etScrollableIgnoreChild></div>\n  </div>\n\n  @if (renderMasks()) {\n    <et-scrollable-masks />\n  }\n\n  @for (chrome of overlayChrome(); track chrome.key) {\n    <ng-container *ngComponentOutlet=\"chrome.component; inputs: chrome.inputs; injector: chrome.injector\" />\n  }\n</div>\n\n@if (footerChrome().length && scrollableDir.canScroll()) {\n  <div\n    [class.et-scrollable-footer--with-navigation]=\"footerHasNavigation()\"\n    [class.et-scrollable-footer--with-buttons]=\"footerHasButtons()\"\n    class=\"et-scrollable-footer\"\n    aria-hidden=\"true\"\n  >\n    @for (chrome of footerChrome(); track chrome.key) {\n      <ng-container *ngComponentOutlet=\"chrome.component; inputs: chrome.inputs; injector: chrome.injector\" />\n    }\n  </div>\n}\n\n<ng-template #loadingTpl>\n  @if (scrollableDir.loadingTemplate(); as tpl) {\n    @for (\n      _ of tpl.repeat();\n      track index;\n      let index = $index;\n      let even = $even;\n      let odd = $odd;\n      let first = $first;\n      let last = $last\n    ) {\n      <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { index, even, odd, first, last }\" />\n    }\n  }\n</ng-template>\n","import { ScrollableActiveChildDirective } from './headless/scrollable-active-child.directive';\nimport { ScrollableButtonsDirective } from './headless/scrollable-buttons.directive';\nimport { ScrollableDarkenDirective } from './headless/scrollable-darken.directive';\nimport { ScrollableDragDirective } from './headless/scrollable-drag.directive';\nimport { ScrollableIgnoreChildDirective } from './headless/scrollable-ignore-child.directive';\nimport { ScrollableLoadingTemplateDirective } from './headless/scrollable-loading-template.directive';\nimport { ScrollableNavigationDirective } from './headless/scrollable-navigation.directive';\nimport { ScrollableSnapDirective } from './headless/scrollable-snap.directive';\nimport { ScrollableComponent } from './scrollable.component';\n\n/**\n * The base scrollable: the track, its edge masks, the loading template and the active-child /\n * ignore-child markers. Deliberately lean - the chrome and the gestures ship as their own imports\n * arrays, so a track you only scroll never pulls in the buttons' icon button or the drag primitives.\n */\nexport const SCROLLABLE_IMPORTS = [\n  ScrollableComponent,\n  ScrollableActiveChildDirective,\n  ScrollableIgnoreChildDirective,\n  ScrollableLoadingTemplateDirective,\n] as const;\n\n/**\n * The scrollable's decorative chrome, applied on the `<et-scrollable>` itself: `etScrollableButtons` for\n * the previous/next buttons, `etScrollableNavigation` for the dots. Pulls in the icon button (and with it\n * the spinner), which is why it is separate.\n */\nexport const SCROLLABLE_NAVIGATION_IMPORTS = [ScrollableButtonsDirective, ScrollableNavigationDirective] as const;\n\n/**\n * Pointer gestures on the track: `etScrollableDrag` to drag it with a mouse, `etScrollableSnap` to come to\n * rest on a child. Paired because a mouse release has no momentum for native snap to decelerate into, so\n * snapping settles the drag itself - see `ScrollableSnapDirective`.\n */\nexport const SCROLLABLE_DRAG_IMPORTS = [ScrollableDragDirective, ScrollableSnapDirective] as const;\n\n/** `etScrollableDarken`: fade the children that are only partly in view. */\nexport const SCROLLABLE_DARKEN_IMPORTS = [ScrollableDarkenDirective] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-carousel-autoplay-styles',\n  template: '',\n  styleUrl: './carousel-autoplay-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CarouselAutoplayStylesComponent {}\n","import { InjectionToken } from '@angular/core';\nimport { CarouselAutoplayDirective } from './carousel-autoplay.directive';\nimport { CarouselDirective } from './carousel.directive';\n\nexport const CAROUSEL_TOKEN = new InjectionToken<CarouselDirective>('CAROUSEL_TOKEN');\n\nexport const CAROUSEL_AUTOPLAY_TOKEN = new InjectionToken<CarouselAutoplayDirective>('CAROUSEL_AUTOPLAY_TOKEN');\n","import {\n  Directive,\n  afterNextRender,\n  effect,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  linkedSignal,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  RuntimeError,\n  injectHostElement,\n  injectIsDocumentVisible,\n  injectPrefersReducedMotion,\n  injectStyleManager,\n  signalHostElementIntersection,\n} from '@ethlete/core';\nimport { EMPTY, switchMap, tap, timer } from 'rxjs';\nimport { CarouselAutoplayStylesComponent } from '../carousel-autoplay-styles.component';\nimport { CAROUSEL_ERROR_CODES } from '../carousel-errors';\nimport { CAROUSEL_AUTOPLAY_TOKEN, CAROUSEL_TOKEN } from './carousel.tokens';\n\n/** Why autoplay isn't running, in the order the reasons are checked. `null` while it is running. */\nexport type CarouselAutoplayPauseReason =\n  | 'disabled'\n  | 'stopped'\n  | 'reduced-motion'\n  | 'page-hidden'\n  | 'off-screen'\n  | 'hover'\n  | 'focus'\n  | 'no-slides'\n  | 'no-duration';\n\n/**\n * Advances the carousel on its own. Opt-in - put it on the same element as `[etCarousel]` - so a carousel\n * that doesn't move by itself carries none of this.\n *\n * It pauses whenever moving the page under the user would be rude: pointer over the carousel, focus\n * inside it, the carousel scrolled off screen, or the user having asked for reduced motion (in which case\n * it never starts at all). It also stops at the last slide when the carousel doesn't `loop`, rather than\n * jumping back to the start forever.\n *\n * Resuming restarts the current slide's full duration instead of continuing a partial one - one clock,\n * so the progress a consumer renders can't drift away from when the slide actually changes.\n *\n * A carousel that plays by itself needs a control to stop it (WCAG 2.2.2): register one with\n * `etCarouselPlayToggle`, which the default `<et-carousel>` does for you. Dev mode throws without it.\n *\n * @example\n * <et-scrollable etCarousel etCarouselAutoplay [autoplayTime]=\"6000\" etScrollableSnap itemSize=\"full\">…</et-scrollable>\n */\n@Directive({\n  selector: '[etCarouselAutoplay]',\n  exportAs: 'etCarouselAutoplay',\n  providers: [{ provide: CAROUSEL_AUTOPLAY_TOKEN, useExisting: CarouselAutoplayDirective }],\n  host: {\n    '[attr.data-autoplaying]': 'isPlaying() ? \"\" : null',\n    '(mouseenter)': 'isHovered.set(true)',\n    '(mouseleave)': 'isHovered.set(false)',\n    '(focusin)': 'isFocusWithin.set(true)',\n    '(focusout)': 'isFocusWithin.set(false)',\n  },\n})\nexport class CarouselAutoplayDirective {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n  private prefersReducedMotion = injectPrefersReducedMotion();\n  private isDocumentVisible = injectIsDocumentVisible();\n  private styleManager = injectStyleManager();\n  private hostElement = injectHostElement();\n\n  /**\n   * Turn autoplay off without removing the directive - the same escape hatch `etScrollableSnap` has. A\n   * disabled autoplay never plays and never asks for a pause control.\n   * @default true\n   */\n  public enabled = input(true, { transform: booleanAttribute });\n\n  /** How long each slide stays, in milliseconds. A slide can override it with its own `autoplayTime`. @default 5000 */\n  public autoplayTime = input(5000, { transform: numberAttribute });\n\n  /** Pause while the pointer is over the carousel. @default true */\n  public pauseOnHover = input(true, { transform: booleanAttribute });\n\n  /** Pause while focus is inside the carousel - moving the slide out from under a keyboard user is worse than stalling. @default true */\n  public pauseOnFocus = input(true, { transform: booleanAttribute });\n\n  /**\n   * Pause whenever nobody can see the carousel: scrolled out of view, or on a tab that isn't the one in\n   * front. The second is not the same check as the first - an IntersectionObserver reports a fully visible\n   * element in a background tab - and it matters more, because a hidden tab throttles timers rather than\n   * stopping them, so without it a carousel spends its time in the background queueing up slide changes to\n   * deliver all at once on return. @default true\n   */\n  public pauseOnOffScreen = input(true, { transform: booleanAttribute });\n\n  /** Start playing as soon as the carousel is ready. Off waits for `start()` (or the play control). @default true */\n  public playOnInit = input(true, { transform: booleanAttribute });\n  private hostIntersection = signalHostElementIntersection();\n\n  /**\n   * @internal Set by `<et-carousel>` from its own `autoplay` input, which is opt-in and so defaults to\n   * `false`.\n   *\n   * The component attaches this directive unconditionally - its host listeners have to cover the controls as\n   * well as the track, so it cannot be conditional - which meant every `<et-carousel>` that did not say\n   * `[autoplay]=\"false\"` was playing, against what both this directive and the component document. A\n   * `hostDirectives` alias forwards an input but cannot change its default, so the component takes the value\n   * over entirely and pushes it here. `null` leaves {@link enabled} in charge, which is the headless case.\n   */\n  public enabledOverride = signal<boolean | null>(null);\n\n  /** Whether autoplay is switched on at all - this instance's `enabled`, or what `<et-carousel>` set. */\n  public isEnabled = computed(() => this.enabledOverride() ?? this.enabled());\n\n  /** @internal Set by `etCarouselPlayToggle`, and checked in dev mode: autoplay without a pause control fails WCAG 2.2.2. */\n  public pauseControl = signal<unknown | null>(null);\n\n  /**\n   * Whether the user (or code) has stopped autoplay - the only pause that outlives hover and focus. Starts\n   * out as the opposite of {@link playOnInit}, and follows it again whenever that binding changes.\n   */\n  public isStopped = linkedSignal(() => !this.playOnInit());\n\n  /** @internal */\n  public isHovered = signal(false);\n\n  /** @internal */\n  public isFocusWithin = signal(false);\n\n  /**\n   * @internal Whether the pointer is on the play/pause control, and whether focus is.\n   *\n   * Both are subtracted from the hover and focus pauses, because the control lives *inside* the carousel -\n   * it has to, it is part of the region it controls. Without this, pressing play would clear `isStopped`\n   * and then immediately report `'hover'` or `'focus'` instead, because the pointer and focus are still on\n   * the button that was just pressed: autoplay could never be restarted by the one control WCAG requires\n   * for it. And the subtraction is the honest rule rather than a workaround - those pauses exist so a\n   * slide doesn't move while someone is reading or tabbing through it, and the pause control is neither.\n   */\n  public isPointerOnPauseControl = signal(false);\n\n  /** @internal */\n  public isFocusOnPauseControl = signal(false);\n\n  /** How long the current slide stays: its own `autoplayTime`, or the carousel's. */\n  public duration = computed(() => {\n    const carousel = this.carousel;\n\n    if (!carousel) return this.autoplayTime();\n\n    const activeIndex = carousel.activeIndex();\n    // The slide itself, not one of its loop clones: they share an index, and the original is the one a\n    // consumer set a duration on.\n    const activeItem = carousel.items().find((item) => !item.isClone() && item.index() === activeIndex);\n\n    return activeItem?.autoplayTime() ?? this.autoplayTime();\n  });\n\n  /** Why autoplay is not running, or `null` while it is. Useful for a \"paused\" affordance. */\n  public pauseReason = computed<CarouselAutoplayPauseReason | null>(() => {\n    if (!this.isEnabled()) return 'disabled';\n    if (this.isStopped()) return 'stopped';\n    if (this.prefersReducedMotion()) return 'reduced-motion';\n    if ((this.carousel?.count() ?? 0) < 2) return 'no-slides';\n\n    if (this.pauseOnOffScreen()) {\n      if (!this.isDocumentVisible()) return 'page-hidden';\n\n      const entries = this.hostIntersection();\n      const isOnScreen = entries[0]?.isIntersecting ?? true;\n\n      if (!isOnScreen) return 'off-screen';\n    }\n\n    if (this.pauseOnHover() && this.isHovered() && !this.isPointerOnPauseControl()) return 'hover';\n    if (this.pauseOnFocus() && this.isFocusWithin() && !this.isFocusOnPauseControl()) return 'focus';\n    if (this.duration() <= 0) return 'no-duration';\n\n    return null;\n  });\n\n  /** Whether autoplay is counting down right now. */\n  public isPlaying = computed(() => this.pauseReason() === null);\n\n  constructor() {\n    let hasMountedStyles = false;\n\n    effect(() => {\n      if (hasMountedStyles || !this.isEnabled()) return;\n\n      hasMountedStyles = true;\n      this.styleManager.mount(CarouselAutoplayStylesComponent);\n    });\n\n    // One clock, restarted whenever the slide, the duration or the playing state changes - a paused\n    // carousel holds no timer at all. `equal` keeps an unrelated recompute from restarting the countdown.\n    const run = computed(\n      () => ({\n        isPlaying: this.isPlaying(),\n        duration: this.duration(),\n        activeIndex: this.carousel?.activeIndex() ?? -1,\n      }),\n      {\n        equal: (a, b) => a.isPlaying === b.isPlaying && a.duration === b.duration && a.activeIndex === b.activeIndex,\n      },\n    );\n\n    toObservable(run)\n      .pipe(\n        switchMap(({ isPlaying, duration }) => (isPlaying ? timer(duration).pipe(tap(() => this.advance())) : EMPTY)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.carousel) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.PART_OUTSIDE_CAROUSEL,\n            '[CarouselAutoplayDirective] etCarouselAutoplay must be placed on the same element as [etCarousel].',\n            { element: this.hostElement },\n          );\n        }\n\n        if (this.isEnabled() && !this.pauseControl()) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.AUTOPLAY_WITHOUT_PAUSE_CONTROL,\n            '[CarouselAutoplayDirective] A carousel that advances on its own needs a control to stop it (WCAG 2.2.2). ' +\n              'Add a button with the etCarouselPlayToggle directive, or use <et-carousel>, which renders one.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Start (or resume) autoplay. The current slide gets its full duration. */\n  public start() {\n    this.isStopped.set(false);\n  }\n\n  /** Stop autoplay until `start()` is called again. */\n  public stop() {\n    this.isStopped.set(true);\n  }\n\n  /** Stop if playing, start if not - what the play/pause control calls, so it matches the icon it renders. */\n  public toggle() {\n    if (this.isPlaying()) {\n      this.stop();\n    } else {\n      this.start();\n    }\n  }\n\n  private advance() {\n    const carousel = this.carousel;\n\n    if (!carousel) return;\n\n    if (!carousel.loop() && carousel.isAtEnd()) {\n      this.stop();\n\n      return;\n    }\n\n    carousel.next();\n  }\n}\n","import { DestroyRef, Directive, afterNextRender, computed, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { CAROUSEL_ERROR_CODES } from '../carousel-errors';\nimport { CAROUSEL_AUTOPLAY_TOKEN, CAROUSEL_TOKEN } from './carousel.tokens';\n\nconst selectorOf = (directiveName: string) => `et${directiveName.replace('Directive', '')}`;\n\nconst assertInsideCarousel = (hasCarousel: boolean, directiveName: string) => {\n  if (ngDevMode) {\n    const element = injectHostElement();\n\n    afterNextRender(() => {\n      if (!hasCarousel) {\n        throw new RuntimeError(\n          CAROUSEL_ERROR_CODES.PART_OUTSIDE_CAROUSEL,\n          `[${directiveName}] ${selectorOf(directiveName)} must be placed inside an [etCarousel] element ` +\n            '(e.g. <et-carousel>).',\n          { element },\n        );\n      }\n    });\n  }\n};\n\n/**\n * Moves the carousel one slide back. Put it on a `<button>`; it labels itself, and reports\n * `aria-disabled` at the first slide of a carousel that doesn't loop rather than going native-disabled, so\n * the control keeps its place in the tab order.\n */\n@Directive({\n  selector: '[etCarouselPrevious]',\n  exportAs: 'etCarouselPrevious',\n  host: {\n    type: 'button',\n    '[attr.aria-label]': 'label()',\n    '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n    '(click)': 'go()',\n  },\n})\nexport class CarouselPreviousDirective {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n\n  protected label = computed(() => this.carousel?.resolvedLabels().previous ?? null);\n  protected isDisabled = computed(() => !(this.carousel?.canGoPrevious() ?? false));\n\n  constructor() {\n    assertInsideCarousel(!!this.carousel, 'CarouselPreviousDirective');\n  }\n\n  protected go() {\n    this.carousel?.previous();\n  }\n}\n\n/** Moves the carousel one slide on. Mirror of {@link CarouselPreviousDirective}. */\n@Directive({\n  selector: '[etCarouselNext]',\n  exportAs: 'etCarouselNext',\n  host: {\n    type: 'button',\n    '[attr.aria-label]': 'label()',\n    '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n    '(click)': 'go()',\n  },\n})\nexport class CarouselNextDirective {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n\n  protected label = computed(() => this.carousel?.resolvedLabels().next ?? null);\n  protected isDisabled = computed(() => !(this.carousel?.canGoNext() ?? false));\n\n  constructor() {\n    assertInsideCarousel(!!this.carousel, 'CarouselNextDirective');\n  }\n\n  protected go() {\n    this.carousel?.next();\n  }\n}\n\n/**\n * Stops and restarts autoplay - the control WCAG 2.2.2 requires whenever a carousel moves on its own.\n * Registering it is what satisfies the dev-mode check in `etCarouselAutoplay`.\n *\n * Its label and `aria-pressed` follow whether autoplay is actually running - any `pauseReason()`, not just\n * an explicit `stop()` - so one button covers both directions and says the same thing as the icon it renders.\n */\n@Directive({\n  selector: '[etCarouselPlayToggle]',\n  exportAs: 'etCarouselPlayToggle',\n  host: {\n    type: 'button',\n    '[attr.aria-label]': 'label()',\n    '[attr.aria-pressed]': 'isPlaying()',\n    '(click)': 'toggle()',\n    '(mouseenter)': 'setPointerOn(true)',\n    '(mouseleave)': 'setPointerOn(false)',\n    '(focus)': 'setFocusOn(true)',\n    '(blur)': 'setFocusOn(false)',\n  },\n})\nexport class CarouselPlayToggleDirective {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n  private autoplay = inject(CAROUSEL_AUTOPLAY_TOKEN, { optional: true });\n\n  /** Whether autoplay is currently running - the pressed state of the control. */\n  public isPlaying = computed(() => this.autoplay?.isPlaying() ?? false);\n\n  protected label = computed(() => {\n    const labels = this.carousel?.resolvedLabels();\n\n    if (!labels) return null;\n\n    return this.isPlaying() ? labels.pause : labels.play;\n  });\n\n  constructor() {\n    const autoplay = this.autoplay;\n\n    if (autoplay) {\n      autoplay.pauseControl.set(this);\n\n      inject(DestroyRef).onDestroy(() => {\n        if (autoplay.pauseControl() === this) {\n          autoplay.pauseControl.set(null);\n        }\n      });\n    }\n\n    assertInsideCarousel(!!this.carousel, 'CarouselPlayToggleDirective');\n  }\n\n  protected toggle() {\n    this.autoplay?.toggle();\n  }\n\n  protected setPointerOn(isOn: boolean) {\n    this.autoplay?.isPointerOnPauseControl.set(isOn);\n  }\n\n  protected setFocusOn(isOn: boolean) {\n    this.autoplay?.isFocusOnPauseControl.set(isOn);\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n} from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CAROUSEL_ERROR_CODES } from '../carousel-errors';\nimport { CAROUSEL_TOKEN } from './carousel.tokens';\n\nconst autoplayTimeAttribute = (value: unknown): number | null => {\n  if (value === null || value === undefined || value === '') return null;\n\n  const parsed = Number(value);\n\n  return Number.isFinite(parsed) ? parsed : null;\n};\n\n/**\n * One slide. It carries the slide semantics - `role=\"group\"` with `aria-roledescription=\"slide\"` and an\n * `N of M` label - so a screen reader user knows how far along the carousel they are.\n *\n * `<et-carousel>` renders this wrapper itself, once per slide of its `etCarouselSlide` template, which is\n * what guarantees the semantics and the clone marking rather than leaving them to be remembered. Reach for\n * the directive directly when building a carousel over a bare scrollable.\n *\n * Slides are **not** hidden or `inert` while off screen, unlike a carousel that stacks its slides: this\n * one scrolls, so an off-screen slide is reachable by scrolling or by tabbing into it (which scrolls it\n * into view). Hiding them would take that away. A loop *clone* is a different matter - it is the same\n * slide a second time, so it is hidden and skipped.\n *\n * @example\n * <div etCarouselItem>…</div>\n * <div etCarouselItem [autoplayTime]=\"8000\">a slide that needs longer to read</div>\n */\n@Directive({\n  selector: '[etCarouselItem]',\n  exportAs: 'etCarouselItem',\n  host: {\n    class: 'et-carousel-item',\n    role: 'group',\n    'aria-roledescription': 'slide',\n    '[attr.aria-label]': 'label()',\n    '[attr.aria-hidden]': 'isClone() ? \"true\" : null',\n    '[attr.inert]': 'isClone() ? \"\" : null',\n    '[attr.data-clone]': 'isClone() ? \"\" : null',\n    '[attr.data-active]': 'isActive() ? \"\" : null',\n  },\n})\nexport class CarouselItemDirective {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /**\n   * How long autoplay rests on this slide, overriding the carousel's `autoplayTime` - for the one slide\n   * carrying a paragraph rather than a picture. `null` uses the carousel's duration. `<et-carousel>` sets\n   * it from its own `autoplayTimeFor`. @default null\n   */\n  public autoplayTime = input<number | null>(null, { transform: autoplayTimeAttribute });\n\n  /**\n   * Whether this is a loop clone rather than the slide itself - the same slide rendered a second time so\n   * the carousel has content on both sides of the seam. A clone is hidden from assistive technology,\n   * taken out of the tab order, and left out of the slide count and the `N of M` labels, so looping costs\n   * a reader nothing. Set by `<et-carousel>`. @default false\n   */\n  public isClone = input(false, { transform: booleanAttribute });\n\n  /**\n   * This slide's position among the track's children, clones included, and from the DOM rather than from\n   * registration order - so a `@for` that reorders its items can't put the labels out of step with what\n   * is on screen.\n   */\n  public domIndex = computed(() => {\n    const children = this.carousel?.scrollable()?.scrollableChildren() ?? [];\n\n    return children.indexOf(this.elementRef.nativeElement);\n  });\n\n  /** Which slide this shows: itself, or - for a clone - the slide it clones. */\n  public index = computed(() => this.carousel?.slideIndexOf(this.domIndex()) ?? -1);\n\n  /**\n   * Whether this is the element currently in view. A clone of the current slide is the one that reports\n   * it, not the original: this marks what is on screen.\n   */\n  public isActive = computed(() => this.domIndex() >= 0 && this.domIndex() === this.carousel?.activeDomIndex());\n\n  /** The `N of M` label announced with the slide. Clones announce nothing - they are the same slide again. */\n  public label = computed(() => {\n    const carousel = this.carousel;\n\n    if (!carousel || this.isClone()) return null;\n\n    const index = this.index();\n\n    return index < 0 ? null : carousel.resolvedLabels().slide(index + 1, carousel.count());\n  });\n\n  constructor() {\n    const carousel = this.carousel;\n\n    if (carousel) {\n      carousel.registerItem(this);\n\n      inject(DestroyRef).onDestroy(() => carousel.unregisterItem(this));\n    }\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!carousel) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.PART_OUTSIDE_CAROUSEL,\n            '[CarouselItemDirective] etCarouselItem must be placed inside an [etCarousel] element (e.g. <et-carousel>).',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, Signal, TemplateRef, inject, input } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { CAROUSEL_ERROR_CODES } from '../carousel-errors';\nimport { CAROUSEL_TOKEN } from './carousel.tokens';\n\n/** What a slide template is handed for each slide it renders. */\nexport type CarouselSlideContext<T> = {\n  /** The slide - what a bare `let-slide` binds to. */\n  $implicit: T;\n  /** The slide again, for `let-slide=\"slide\"`. */\n  slide: T;\n  /** Its position in the slides array. A loop clone reports the index of the slide it clones. */\n  index: number;\n  /** How many slides the carousel holds. Clones are not among them. */\n  count: number;\n  /** Whether this is the first slide. */\n  first: boolean;\n  /** Whether this is the last slide. */\n  last: boolean;\n  /**\n   * Whether this rendering is a loop clone rather than the slide itself. Clones are hidden from\n   * assistive technology and taken out of the tab order, so a template rarely needs this - it is here\n   * for the rare piece that must not run twice (a video, an analytics beacon).\n   */\n  clone: boolean;\n};\n\n/**\n * The template `<et-carousel>` stamps once per slide. Slides are data plus this template rather than\n * elements you project, because seamless looping needs the carousel to render each slide **more than\n * once** - a clone either side of the seam - and a clone has to be a live view with working bindings,\n * not a copy of a DOM subtree.\n *\n * Bind the slides to the directive itself. That is also what types the template: `let-slide` is your\n * slide type, inferred, not declared.\n *\n * @example\n * <et-carousel loop>\n *   <ng-template [etCarouselSlide]=\"teams()\" let-team let-index=\"index\">\n *     <h3>{{ index + 1 }}. {{ team.name }}</h3>\n *   </ng-template>\n * </et-carousel>\n */\n@Directive({\n  selector: 'ng-template[etCarouselSlide]',\n  exportAs: 'etCarouselSlide',\n})\nexport class CarouselSlideDirective<T> {\n  private carousel = inject(CAROUSEL_TOKEN, { optional: true });\n  private hostElement = injectHostElement<Comment>();\n\n  /** @internal The template itself, stamped by whoever renders the slides. */\n  public templateRef = inject<TemplateRef<CarouselSlideContext<T>>>(TemplateRef);\n\n  /** The slides to render, one stamp of this template each. */\n  public slides = input.required<readonly T[]>({ alias: 'etCarouselSlide' });\n\n  /**\n   * How long autoplay rests on a given slide, overriding the carousel's `autoplayTime` - for the one\n   * slide carrying a paragraph rather than a picture. Return `null` to use the carousel's duration.\n   *\n   * @example\n   * <ng-template [etCarouselSlide]=\"teams()\" [autoplayTimeFor]=\"restLongerOnText\" let-team>\n   */\n  public autoplayTimeFor = input<((slide: T, index: number) => number | null) | null>(null);\n\n  constructor() {\n    const carousel = this.carousel;\n\n    if (!carousel) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          CAROUSEL_ERROR_CODES.PART_OUTSIDE_CAROUSEL,\n          '[CarouselSlideDirective] etCarouselSlide must be used on an <ng-template> inside an <et-carousel>.',\n          { element: this.hostElement },\n        );\n      }\n\n      return;\n    }\n\n    const registration: CarouselSlideTemplateRef = {\n      templateRef: this.templateRef,\n      slides: this.slides,\n      autoplayTimeFor: this.autoplayTimeFor,\n    };\n\n    carousel.slideTemplate.set(registration);\n\n    inject(DestroyRef).onDestroy(() => {\n      if (carousel.slideTemplate() === registration) {\n        carousel.slideTemplate.set(null);\n      }\n    });\n  }\n\n  // static on purpose (the lint ban excepts it): Angular's template type checker requires the context\n  // guard to be static - it types the `let-` bindings of the host ng-template.\n  public static ngTemplateContextGuard<T>(\n    _directive: CarouselSlideDirective<T>,\n    _context: unknown,\n  ): _context is CarouselSlideContext<T> {\n    return true;\n  }\n}\n\n/**\n * @internal What the carousel needs from a registered slide template. The slide type is the\n * consumer's, and the carousel only forwards it, so it is deliberately erased here.\n */\nexport type CarouselSlideTemplateRef = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  templateRef: TemplateRef<any>;\n  slides: Signal<readonly unknown[]>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  autoplayTimeFor: Signal<((slide: any, index: number) => number | null) | null>;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-carousel-transition-styles',\n  template: '',\n  styleUrl: './carousel-transition-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CarouselTransitionStylesComponent {}\n","import { Signal, effect, untracked } from '@angular/core';\nimport { ScrollableDirective } from '../../../scrollable';\nimport { CarouselSlideAlign } from '../carousel.directive';\n\nexport type CarouselLoopConfig = {\n  scrollable: Signal<ScrollableDirective | null | undefined>;\n  cloneCount: Signal<number>;\n  count: Signal<number>;\n  domCount: Signal<number>;\n  slideAlign: Signal<CarouselSlideAlign>;\n  activeIndex: Signal<number>;\n};\n\ntype LoopGeometry = {\n  scrollable: ScrollableDirective;\n  container: HTMLElement;\n  horizontal: boolean;\n  children: HTMLElement[];\n  trackLength: number;\n  restingOffsetOf: (child: HTMLElement) => number;\n};\n\nconst offsetOf = (element: HTMLElement, horizontal: boolean) => (horizontal ? element.offsetLeft : element.offsetTop);\n\nconst sizeOf = (element: HTMLElement, horizontal: boolean) => (horizontal ? element.offsetWidth : element.offsetHeight);\n\n/**\n * Which child the track is resting on: the one whose resting offset is nearest the current scroll offset.\n *\n * Deliberately \"nearest\" rather than a comparison against the first real slide's position. The offset the\n * track actually comes to rest at is not exactly the computed one - CSS scroll snap resolves against the\n * slides' *painted* boxes, which a transition scaling them shifts by a few pixels, and a fling can be left\n * fractions of a pixel out. A threshold tight enough to catch the seam would fire on that jitter and teleport\n * a whole track for nothing, and one loose enough to survive it would miss the seam. Nearest has no threshold\n * to get wrong: the children are a slide apart, so a few pixels either way cannot change the answer.\n */\nconst restingChildIndex = ({ container, children, horizontal, restingOffsetOf }: LoopGeometry) => {\n  const scroll = horizontal ? container.scrollLeft : container.scrollTop;\n\n  let nearest = 0;\n  let nearestDistance = Number.POSITIVE_INFINITY;\n\n  for (const [index, child] of children.entries()) {\n    const distance = Math.abs(restingOffsetOf(child) - scroll);\n\n    if (distance >= nearestDistance) continue;\n\n    nearestDistance = distance;\n    nearest = index;\n  }\n\n  return nearest;\n};\n\n/**\n * Move the scroll offset to exactly this number.\n *\n * Through the scrollable rather than the element, because the track snaps: `scroll-snap-type: mandatory` does\n * not merely bias where a scroll settles, it overrules a programmatic offset outright and silently. The\n * teleport's offset happens to *be* a snap position - the track repeats with a period of `count` slides, so a\n * slide and its clone are the same distance from their snap point - but \"happens to be\" is not a thing to\n * stake a seamless loop on. See `ScrollableDirective.suspendSnap`.\n */\nconst scrollTo = ({ scrollable, horizontal }: Pick<LoopGeometry, 'scrollable' | 'horizontal'>, offset: number) =>\n  scrollable.scrollToOffsetUnsnapped(horizontal ? { left: offset } : { top: offset });\n\n/**\n * Keeps a looping carousel's scroll offset inside the real slides by shifting it a whole track's length\n * whenever it drifts into the clones - the one way to cross the seam on a native scroller without showing\n * it. `readSettled().crossSeam()` is called once the scrolling has settled (see `useCarouselScrollSettled`)\n * - never during it, or the jump would be visible.\n *\n * The measurements are layout offsets (`offsetLeft`/`offsetTop`) rather than bounding rects on purpose: a\n * transition may be scaling the slides, and a rect would then report the scaled box while the scroll\n * offsets stay in layout space. They are also *measured* rather than computed from `itemSize`, because\n * `itemSize=\"auto\"` lets every slide be a different width - and the measurement is exact regardless,\n * because the track repeats with a period of `count` slides, so the distance from a slide to its clone is\n * the same wherever it is taken.\n *\n * @internal\n */\nexport const useCarouselLoop = (config: CarouselLoopConfig) => {\n  // The real slide to land on after the clones are (re)rendered. Tracked rather than read on the spot,\n  // because by then the DOM has already changed under the old index.\n  let lastRealIndex = 0;\n\n  let alignedShape: string | null = null;\n\n  const readGeometry = (): LoopGeometry | null => {\n    const scrollable = config.scrollable();\n    const scrollContainer = scrollable?.scrollContainerRef()?.nativeElement;\n    const cloneCount = config.cloneCount();\n    const count = config.count();\n\n    if (!scrollable || !scrollContainer || !count) return null;\n\n    const children = scrollable.scrollableChildren();\n\n    // Mid-render the children signal can disagree with the counts; measuring then would be nonsense.\n    if (children.length !== count + cloneCount * 2) return null;\n\n    const horizontal = scrollable.direction() !== 'vertical';\n\n    const viewport = horizontal ? scrollContainer.clientWidth : scrollContainer.clientHeight;\n    const centred = config.slideAlign() === 'center';\n    const restingOffsetOf = (child: HTMLElement) =>\n      centred ? offsetOf(child, horizontal) - (viewport - sizeOf(child, horizontal)) / 2 : offsetOf(child, horizontal);\n\n    const firstReal = children[cloneCount];\n    const firstTrailing = children[cloneCount + count];\n    const trackLength =\n      cloneCount && firstReal && firstTrailing\n        ? offsetOf(firstTrailing, horizontal) - offsetOf(firstReal, horizontal)\n        : 0;\n\n    return {\n      scrollable,\n      container: scrollContainer,\n      horizontal,\n      children,\n      trackLength: trackLength > 0 ? trackLength : 0,\n      restingOffsetOf,\n    };\n  };\n\n  const readSettled = () => {\n    const geometry = readGeometry();\n\n    if (!geometry) return null;\n\n    const resting = restingChildIndex(geometry);\n\n    return {\n      resting,\n\n      /**\n       * Shift the scroll offset a whole track's length if it has come to rest in the clones - the one way to\n       * cross the seam on a native scroller without showing it. Never call it mid-scroll.\n       */\n      crossSeam: () => {\n        const { container: scrollContainer, horizontal, trackLength } = geometry;\n        const cloneCount = config.cloneCount();\n        const scroll = horizontal ? scrollContainer.scrollLeft : scrollContainer.scrollTop;\n\n        if (!trackLength) return false;\n\n        if (resting < cloneCount) {\n          scrollTo(geometry, scroll + trackLength);\n\n          return true;\n        }\n\n        if (resting >= cloneCount + config.count()) {\n          scrollTo(geometry, scroll - trackLength);\n\n          return true;\n        }\n\n        return false;\n      },\n    };\n  };\n\n  effect(() => {\n    const activeIndex = config.activeIndex();\n\n    if (activeIndex >= 0) lastRealIndex = activeIndex;\n  });\n\n  effect(() => {\n    const cloneCount = config.cloneCount();\n    const count = config.count();\n    const domCount = config.domCount();\n\n    // Tracked so the alignment is retried once the carousel has layout: inside a hidden tab panel or a\n    // collapsed accordion every offset reads as 0, and the container's size is the only thing here that\n    // changes when that ends - `domCount` is a length, so re-rendering the same children notifies nothing.\n    config.scrollable()?.scrollableDimensions();\n\n    if (!cloneCount || !count) {\n      alignedShape = null;\n\n      return;\n    }\n\n    if (domCount !== count + cloneCount * 2) return;\n\n    const shape = `${cloneCount}:${count}:${config.slideAlign()}`;\n\n    if (alignedShape === shape) return;\n\n    untracked(() => {\n      const geometry = readGeometry();\n      const target = geometry?.children[cloneCount + Math.min(lastRealIndex, count - 1)];\n\n      if (!geometry || !geometry.trackLength || !target) return;\n\n      scrollTo(geometry, geometry.restingOffsetOf(target));\n\n      // Latched only on success: a failed measurement must not consume the one-shot alignment, or the track\n      // stays parked on a clone for as long as the carousel lives.\n      alignedShape = shape;\n    });\n  });\n\n  return { readSettled };\n};\n","import { DOCUMENT, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { EMPTY, debounceTime, fromEvent, merge, switchMap, tap } from 'rxjs';\nimport { ScrollableDirective } from '../../../scrollable';\n\nconst SCROLL_IDLE_DURATION = 140;\n\n/** In its own function so the `in` check doesn't narrow the element away for everything after it. */\nconst supportsScrollEnd = (element: HTMLElement) => 'onscrollend' in element;\n\nexport type CarouselScrollSettledConfig = {\n  scrollable: Signal<ScrollableDirective | null | undefined>;\n  onSettled: () => void;\n  onPointerDown?: () => void;\n};\n\n/**\n * When the track has come to rest.\n *\n * `scrollend` is the right signal for it - it cannot fire mid-animation, which is exactly when a jump would\n * be visible - with a quiet stretch of `scroll` events standing in where it is missing. Either way the\n * callback is held back while a pointer is down: a mouse drag scrolls instantly on every move, so\n * `scrollend` fires throughout one, and acting on it would fight the finger.\n *\n * @internal\n */\nexport const useCarouselScrollSettled = (config: CarouselScrollSettledConfig) => {\n  const document = inject(DOCUMENT);\n  const isPointerDown = signal(false);\n\n  let isSettleDeferred = false;\n\n  const settle = () => {\n    if (isPointerDown()) {\n      isSettleDeferred = true;\n\n      return;\n    }\n\n    isSettleDeferred = false;\n    config.onSettled();\n  };\n\n  const container = computed(() => config.scrollable()?.scrollContainerRef()?.nativeElement ?? null);\n\n  toObservable(container)\n    .pipe(\n      switchMap((scrollContainer) => {\n        if (!scrollContainer) return EMPTY;\n\n        const settled$ = supportsScrollEnd(scrollContainer)\n          ? fromEvent(scrollContainer, 'scrollend')\n          : // a debounced scroll is standing in for `scrollend`; the offset itself is read on the spot\n            // eslint-disable-next-line ethlete/prefer-scroll-state\n            fromEvent(scrollContainer, 'scroll', { passive: true }).pipe(debounceTime(SCROLL_IDLE_DURATION));\n\n        const release = () => {\n          isPointerDown.set(false);\n\n          if (isSettleDeferred) settle();\n        };\n\n        return merge(\n          settled$.pipe(tap(() => settle())),\n          fromEvent(scrollContainer, 'pointerdown', { passive: true }).pipe(\n            tap(() => {\n              isPointerDown.set(true);\n              config.onPointerDown?.();\n            }),\n          ),\n          // on the document, because a drag that starts on the track routinely ends off it\n          fromEvent(document, 'pointerup', { passive: true }).pipe(tap(release)),\n          fromEvent(document, 'pointercancel', { passive: true }).pipe(tap(release)),\n        );\n      }),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  return { isPointerDown: isPointerDown.asReadonly() };\n};\n","import { DestroyRef, Signal, computed, effect, inject, untracked } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { clamp, injectRenderer } from '@ethlete/core';\nimport { EMPTY, fromEvent, switchMap, tap } from 'rxjs';\nimport { ScrollableDirective } from '../../../scrollable';\n\nexport const CAROUSEL_SLIDE_PROGRESS_PROPERTY = '--et-carousel-slide-progress';\n\nconst WRITE_THRESHOLD = 0.004;\n\ntype SlideMetrics = {\n  element: HTMLElement;\n  offset: number;\n  size: number;\n};\n\nexport type CarouselSlideProgressConfig = {\n  scrollable: Signal<ScrollableDirective | null | undefined>;\n  enabled: Signal<boolean>;\n};\n\n/**\n * Fills {@link CAROUSEL_SLIDE_PROGRESS_PROPERTY} from a passive `scroll` listener batched into a frame -\n * the fallback for browsers without scroll-driven animations (Firefox, as of this writing). It produces\n * the same numbers over the same range as the `view(inline)` timeline does, so every effect is one piece\n * of CSS either way and neither driver is the \"real\" one.\n *\n * @internal\n */\nexport const useCarouselSlideProgress = (config: CarouselSlideProgressConfig) => {\n  const renderer = injectRenderer();\n\n  let container: HTMLElement | null = null;\n  let horizontal = true;\n  let viewport = 0;\n  let metrics: SlideMetrics[] = [];\n  let written: number[] = [];\n  let frame: number | null = null;\n\n  const cancelFrame = () => {\n    if (frame === null) return;\n\n    cancelAnimationFrame(frame);\n    frame = null;\n  };\n\n  const clearWrittenProgress = () => {\n    for (const { element } of metrics) {\n      renderer.setCssProperty(element, CAROUSEL_SLIDE_PROGRESS_PROPERTY, null);\n    }\n\n    metrics = [];\n    written = [];\n    container = null;\n  };\n\n  const measure = () => {\n    const scrollable = config.scrollable();\n    const scrollContainer = scrollable?.scrollContainerRef()?.nativeElement ?? null;\n\n    container = scrollContainer;\n    horizontal = scrollable?.direction() !== 'vertical';\n    viewport = scrollContainer ? (horizontal ? scrollContainer.clientWidth : scrollContainer.clientHeight) : 0;\n\n    metrics = (scrollable?.scrollableChildren() ?? []).map((element) => ({\n      element,\n      offset: horizontal ? element.offsetLeft : element.offsetTop,\n      size: horizontal ? element.offsetWidth : element.offsetHeight,\n    }));\n\n    // NaN so the first pass always writes: no value is ever \"close enough\" to it.\n    written = metrics.map(() => Number.NaN);\n  };\n\n  const write = () => {\n    frame = null;\n\n    if (!container || !viewport) return;\n\n    const scroll = horizontal ? container.scrollLeft : container.scrollTop;\n\n    for (const [index, { element, offset, size }] of metrics.entries()) {\n      const span = viewport + size;\n\n      if (span <= 0) continue;\n\n      const progress = clamp((2 * (viewport - (offset - scroll))) / span - 1, -1, 1);\n      const previous = written[index] ?? Number.NaN;\n\n      if (Math.abs(progress - previous) < WRITE_THRESHOLD) continue;\n\n      written[index] = progress;\n      renderer.setCssProperty(element, CAROUSEL_SLIDE_PROGRESS_PROPERTY, progress.toFixed(3));\n    }\n  };\n\n  const schedule = () => {\n    if (frame === null) frame = requestAnimationFrame(write);\n  };\n\n  const scrollContainer = computed(() =>\n    config.enabled() ? (config.scrollable()?.scrollContainerRef()?.nativeElement ?? null) : null,\n  );\n\n  effect(() => {\n    const isEnabled = config.enabled();\n    const scrollable = config.scrollable();\n\n    // Anything that moves a slide in layout invalidates the measurements.\n    scrollable?.scrollableChildren();\n    scrollable?.scrollableDimensions();\n\n    untracked(() => {\n      if (!isEnabled) {\n        clearWrittenProgress();\n\n        return;\n      }\n\n      measure();\n      write();\n    });\n  });\n\n  toObservable(scrollContainer)\n    .pipe(\n      switchMap((element) => {\n        if (!element) return EMPTY;\n\n        // eslint-disable-next-line ethlete/prefer-scroll-state\n        return fromEvent(element, 'scroll', { passive: true }).pipe(tap(() => schedule()));\n      }),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  inject(DestroyRef).onDestroy(() => cancelFrame());\n\n  /**\n   * Write the progress values for the offset the track is at *now*, rather than on the next frame.\n   *\n   * For the caller that moves the scroll offset without scrolling - the loop's teleport - which is the one\n   * case where waiting a frame is visible. The teleport shifts the track a whole length in one go; a frame\n   * still holding the values from before it puts every slide's content a whole track away from the box that\n   * clips it, and `wipe` then draws a slide as a blank rectangle for that frame. That is the black flash at\n   * the seam. Cheap enough to be unconditional: it is one `scrollLeft` read and, at most, one write per slide.\n   */\n  const flush = () => {\n    cancelFrame();\n    write();\n  };\n\n  return { flush };\n};\n","import {\n  Directive,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  contentChild,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport {\n  RuntimeError,\n  injectHostElement,\n  injectPrefersReducedMotion,\n  injectStyleManager,\n  mountEasingTokens,\n} from '@ethlete/core';\nimport { ScrollableDirective, ScrollableItemSize } from '../../scrollable';\nimport { CAROUSEL_ERROR_CODES } from '../carousel-errors';\nimport { CarouselLabels, injectCarouselLabels } from '../carousel-labels';\nimport { CarouselTransitionStylesComponent } from '../carousel-transition-styles.component';\nimport { CAROUSEL_TOKEN } from './carousel.tokens';\nimport { CarouselItemDirective } from './carousel-item.directive';\nimport { CarouselSlideTemplateRef } from './carousel-slide.directive';\nimport { useCarouselLoop } from './internals/carousel-loop';\nimport { useCarouselScrollSettled } from './internals/carousel-scroll-settled';\nimport { useCarouselSlideProgress } from './internals/carousel-slide-progress';\n\n/** Where the current slide comes to rest. See `CarouselDirective.slideAlign`. */\nexport const CAROUSEL_SLIDE_ALIGNMENTS = {\n  START: 'start',\n  CENTER: 'center',\n} as const;\n\nexport type CarouselSlideAlign = (typeof CAROUSEL_SLIDE_ALIGNMENTS)[keyof typeof CAROUSEL_SLIDE_ALIGNMENTS];\n\n/** How the slides look as they move. See `CarouselDirective.transition`. */\nexport const CAROUSEL_TRANSITIONS = {\n  NONE: 'none',\n  DIM: 'dim',\n  WIPE: 'wipe',\n  CUSTOM: 'custom',\n} as const;\n\nexport type CarouselTransition = (typeof CAROUSEL_TRANSITIONS)[keyof typeof CAROUSEL_TRANSITIONS];\n\n/** What fills the slide progress property. See `CarouselDirective.transitionDriver`. */\nexport const CAROUSEL_TRANSITION_DRIVERS = {\n  AUTO: 'auto',\n  SCROLL_TIMELINE: 'scroll-timeline',\n  JS: 'js',\n  NONE: 'none',\n} as const;\n\nexport type CarouselTransitionDriver = (typeof CAROUSEL_TRANSITION_DRIVERS)[keyof typeof CAROUSEL_TRANSITION_DRIVERS];\n\n/** The driver actually running - `'auto'` has been resolved and reduced motion applied. */\nexport type CarouselResolvedTransitionDriver = Exclude<CarouselTransitionDriver, 'auto'>;\n\nconst SLIDES_PER_VIEW: Partial<Record<ScrollableItemSize, number>> = {\n  full: 1,\n  half: 2,\n  third: 3,\n  quarter: 4,\n};\n\nconst supportsViewTimeline = () =>\n  typeof CSS !== 'undefined' &&\n  typeof CSS.supports === 'function' &&\n  CSS.supports('animation-timeline', 'view(inline)');\n\n/**\n * Turns a `[etScrollable]` into a carousel: which slide is current, moving between them, seamless\n * looping, and the landmark semantics a carousel needs. The sliding itself stays native scrolling - that\n * is what gives touch, swipe momentum and keyboard scrolling for free - so this directive adds meaning\n * and continuity, not movement.\n *\n * Apply it on the scrollable element (`<et-scrollable etCarousel etScrollableSnap itemSize=\"full\">`), or use the\n * default `<et-carousel>`, which is that composition with controls, chrome and rendered slides.\n *\n * @example\n * <et-scrollable etCarousel etScrollableSnap itemSize=\"full\" #carousel=\"etCarousel\">\n *   <div etCarouselItem>…</div>\n *   <div etCarouselItem>…</div>\n * </et-scrollable>\n * <button (click)=\"carousel.previous()\">Back</button>\n */\n@Directive({\n  selector: '[etCarousel]',\n  exportAs: 'etCarousel',\n  providers: [{ provide: CAROUSEL_TOKEN, useExisting: CarouselDirective }],\n  host: {\n    role: 'region',\n    'aria-roledescription': 'carousel',\n    '[attr.aria-label]': 'resolvedLabels().carousel',\n    '[attr.data-slide-align]': 'slideAlign()',\n    '[attr.data-transition]': 'transition()',\n    '[attr.data-transition-driver]': 'resolvedTransitionDriver()',\n    '[attr.data-looping]': 'isLooping() ? \"\" : null',\n  },\n})\nexport class CarouselDirective {\n  private injectedLabels = injectCarouselLabels();\n  private prefersReducedMotion = injectPrefersReducedMotion();\n  private styleManager = injectStyleManager();\n  private hostElement = injectHostElement();\n\n  private ownScrollable = inject(ScrollableDirective, { optional: true });\n\n  /**\n   * Cross the seam without showing it: the track carries clones of the slides either side of the real\n   * run, and the scroll offset is shifted a whole track's length whenever it drifts into them - on\n   * `scrollend`, never mid-animation, and never while a finger is down. `next()` past the last slide and\n   * `previous()` before the first then simply keep scrolling, and both controls stay operable.\n   *\n   * Seamless looping needs rendered clones, so it applies to `<et-carousel>` (which renders the slides)\n   * and to carousels with more slides than fit a viewport. Everywhere else `loop` stays a wrapping\n   * *jump* back to the other end - a hand-built carousel over a bare scrollable owns its own DOM, and a\n   * carousel whose slides all fit has no seam to cross. @default true\n   */\n  public loop = input(true, { transform: booleanAttribute });\n\n  /**\n   * Where the current slide comes to rest. `'start'` lines it up with the start of the track; `'center'`\n   * puts it in the middle, so a multi-item layout reads as *one* current slide with its neighbours peeking\n   * either side rather than as a row that happens to be cut off.\n   *\n   * It makes no difference at `itemSize=\"full\"`, where a slide fills the track either way. Centring the\n   * first or last slide needs content beyond it, so it comes into its own on a looping carousel - which is\n   * also where the transitions read best, since `--et-carousel-slide-progress` is measured from the centre.\n   * @default 'start'\n   */\n  public slideAlign = input<CarouselSlideAlign>('start');\n\n  /**\n   * The look of the movement. `'none'` is the plain scroll; `'dim'` fades and shrinks the slides either\n   * side of the current one; `'wipe'` uncovers each slide from the edge it is travelling towards.\n   *\n   * Every effect follows the slide's *position* rather than an \"active\" flag, which is what makes it track a\n   * drag and reverse when you drag back rather than stepping when a flag flips.\n   *\n   * `'custom'` applies no effect and instead fills `--et-carousel-slide-progress` - `-1` before a slide\n   * enters, `0` at centred, `1` once it has left - for CSS of your own to read. It is a separate value rather\n   * than something the built-in effects also do, because that property *inherits*, so filling it restyles\n   * everything inside every slide on every frame: it measured eight times the style cost of the built-in\n   * effects, which are keyframes over composited properties instead. Worth paying for when you are using it,\n   * not otherwise. `transitionDriver` decides what fills it. @default 'none'\n   */\n  public transition = input<CarouselTransition>('none');\n\n  /**\n   * What fills `--et-carousel-slide-progress`. `'auto'` uses the scroll-driven `view()` timeline where\n   * the browser has one and a scroll listener batched into a frame where it doesn't (Firefox, as of this\n   * writing), so an effect looks the same everywhere. `'scroll-timeline'` and `'js'` pin it; `'none'`\n   * leaves the property alone, for a page that would rather have the plain scroll.\n   *\n   * `prefers-reduced-motion` resolves to `'none'` whatever this says. @default 'auto'\n   */\n  public transitionDriver = input<CarouselTransitionDriver>('auto');\n\n  /**\n   * Per-instance overrides for the carousel's strings, merged over the injected `CAROUSEL_LABELS`.\n   * Prefer `provideCarouselLabels` for app-wide localization.\n   */\n  public labels = input<Partial<CarouselLabels> | null>(null);\n  private contentScrollable = contentChild(ScrollableDirective, { descendants: true });\n  /** @internal Set by `<et-carousel>` with the scrollable it renders - see the note below. */\n  public attachedScrollable = signal<ScrollableDirective | null>(null);\n\n  /** @internal Set by `etCarouselSlide`; its presence is what says the slides are rendered from data. */\n  public slideTemplate = signal<CarouselSlideTemplateRef | null>(null);\n\n  /**\n   * @internal The scrollable this carousel drives - the movement is all its. Taken from the element itself\n   * (`<et-scrollable etCarousel>`), from the content below it (`<div etCarousel>` around a scrollable and\n   * its controls), or handed over by `<et-carousel>`.\n   */\n  public scrollable = computed(() => this.attachedScrollable() ?? this.ownScrollable ?? this.contentScrollable());\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<CarouselLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** @internal The slides, in registration order - used for their `N of M` labels and durations. */\n  public items = signal<CarouselItemDirective[]>([]);\n\n  /** @internal How many children the track holds, loop clones included. */\n  public domCount = computed(() => this.scrollable()?.scrollableChildren().length ?? 0);\n\n  /**\n   * How many slides the carousel holds. Clones don't count - from the slides array where there is one,\n   * which is also immediate, and from the track's children for a hand-built carousel.\n   */\n  public count = computed(() => this.slideTemplate()?.slides().length ?? this.domCount());\n\n  private slidesPerView = computed(() => {\n    const scrollable = this.scrollable();\n\n    if (!scrollable) return 0;\n\n    const itemSize = scrollable.itemSize();\n    const fixed = SLIDES_PER_VIEW[itemSize];\n\n    if (fixed) return fixed;\n\n    if (itemSize === 'same') return 0;\n\n    // `'auto'`: the slides size themselves, so how many fit has to be measured. Measuring the *rendered*\n    // children rather than the real run keeps this out of a loop with `cloneCount` - the widths repeat, so\n    // any run of them answers the question.\n    const horizontal = scrollable.direction() !== 'vertical';\n    const client = scrollable.scrollableDimensions().client;\n    const viewport = (horizontal ? client?.width : client?.height) ?? 0;\n\n    if (!viewport) return 0;\n\n    const gap = Number.parseFloat(scrollable.gapValue() ?? '0') || 0;\n    let filled = 0;\n    let fitting = 0;\n\n    for (const child of scrollable.scrollableChildren()) {\n      // eslint-disable-next-line ethlete/prefer-element-dimensions\n      filled += (horizontal ? child.offsetWidth : child.offsetHeight) + gap;\n      fitting++;\n\n      if (filled >= viewport) break;\n    }\n\n    return fitting;\n  });\n\n  /**\n   * @internal How many clones sit either side of the real slides. One viewport's worth plus one, so the\n   * seam is never in view when the teleport happens, and never more than there are slides to clone.\n   */\n  public cloneCount = computed(() => {\n    if (!this.loop() || !this.slideTemplate()) return 0;\n\n    const count = this.count();\n    const perView = this.slidesPerView();\n\n    if (!perView || count <= perView) return 0;\n\n    return Math.min(count, perView + 1);\n  });\n\n  /** Whether the track is a seamless loop right now, rather than one that jumps back at the ends. */\n  public isLooping = computed(() => this.cloneCount() > 0);\n\n  /**\n   * The child a programmatic scroll is heading for.\n   *\n   * The observed index below comes from an IntersectionObserver, which reports a frame or two late - so\n   * while a scroll is in flight it still names the slide the carousel is leaving. Stepping from that is\n   * what made a second click during the first one's animation go nowhere, or retarget the scroll backwards\n   * mid-flight. Everything therefore steps from where the carousel is *going*, and this is cleared once the\n   * scrolling settles or the reader takes over.\n   */\n  private requestedDomIndex = signal<number | null>(null);\n\n  /** @internal Which child the intersections say is in view - the truth, a frame or two late. */\n  public observedDomIndex = computed(() => {\n    const scrollable = this.scrollable();\n    const intersections = scrollable?.childIntersections() ?? [];\n\n    if (intersections.length === 0) return -1;\n\n    // At the ends the edge slide wins outright: with a peeking layout the neighbour can cover more of the\n    // container than the first/last slide ever does, and \"at the start\" must still read as slide 1. A\n    // looping track has no ends to be at - those positions are clones it is about to teleport out of.\n    if (!this.isLooping()) {\n      if (scrollable?.isAtStart()) return 0;\n      if (scrollable?.isAtEnd()) return intersections.length - 1;\n    }\n\n    let activeIndex = 0;\n\n    for (const [index, intersection] of intersections.entries()) {\n      const active = intersections[activeIndex];\n\n      if (active && intersection.intersectionRatio > active.intersectionRatio) {\n        activeIndex = index;\n      }\n    }\n\n    return activeIndex;\n  });\n\n  /**\n   * @internal Which child of the track is current, counting clones. The public `activeIndex` is this mapped\n   * back onto the slides.\n   */\n  public activeDomIndex = computed(() => this.requestedDomIndex() ?? this.observedDomIndex());\n\n  /**\n   * The slide currently in view. Derived from how much of each slide the scroll container can see, which\n   * is what makes it follow a finger drag as readily as a button press - and from the pending target while\n   * a button press is still being animated, so the dots move with the click rather than after it. `-1`\n   * before the first measurement.\n   *\n   * A clone reports the slide it clones, so this stays a slide index however far the track has looped.\n   */\n  public activeIndex = computed(() => this.slideIndexOf(this.activeDomIndex()));\n\n  /** Whether the first slide is the current one. True once per lap on a looping carousel. */\n  public isAtStart = computed(() => this.activeIndex() <= 0);\n\n  /** Whether the last slide is the current one. True once per lap on a looping carousel. */\n  public isAtEnd = computed(() => this.activeIndex() >= this.count() - 1);\n\n  /** Whether `previous()` would move - false at the first slide without `loop`. */\n  public canGoPrevious = computed(() => this.count() > 1 && (this.loop() || !this.isAtStart()));\n\n  /** Whether `next()` would move - false at the last slide without `loop`. */\n  public canGoNext = computed(() => this.count() > 1 && (this.loop() || !this.isAtEnd()));\n\n  /**\n   * Which driver is filling `--et-carousel-slide-progress`, with `'auto'` resolved against what the\n   * browser implements and `prefers-reduced-motion` overriding everything.\n   */\n  public resolvedTransitionDriver = computed<CarouselResolvedTransitionDriver>(() => {\n    if (this.transition() === 'none' || this.prefersReducedMotion()) return 'none';\n\n    const requested = this.transitionDriver();\n\n    if (requested !== 'auto') return requested;\n\n    return supportsViewTimeline() ? 'scroll-timeline' : 'js';\n  });\n\n  constructor() {\n    mountEasingTokens();\n    effect(() => this.scrollable()?.activateChildIntersections());\n\n    const loop = useCarouselLoop({\n      scrollable: this.scrollable,\n      cloneCount: this.cloneCount,\n      count: this.count,\n      domCount: this.domCount,\n      slideAlign: this.slideAlign,\n      activeIndex: this.activeIndex,\n    });\n\n    const slideProgress = useCarouselSlideProgress({\n      scrollable: this.scrollable,\n      enabled: computed(() => this.resolvedTransitionDriver() === 'js'),\n    });\n\n    useCarouselScrollSettled({\n      scrollable: this.scrollable,\n      onSettled: () => {\n        const settled = loop.readSettled();\n        const requested = this.requestedDomIndex();\n\n        // A navigation that steps more than one slide covers the rest instantly first, and that instant\n        // scroll settles too - acting on it would teleport out from under the animation still to come. So a\n        // settle that has not arrived at the requested child is not this navigation's; the scroll that is\n        // still running will settle again.\n        if (requested !== null && settled && settled.resting !== requested) return;\n\n        // Trust the intersections again before crossing the seam: the teleport moves the track under the\n        // very index that was pending, so holding on to it would name the wrong child.\n        this.requestedDomIndex.set(null);\n\n        if (settled?.crossSeam()) slideProgress.flush();\n      },\n      onPointerDown: () => this.requestedDomIndex.set(null),\n    });\n\n    let hasMountedTransitionStyles = false;\n\n    effect(() => {\n      if (hasMountedTransitionStyles || this.transition() === 'none') return;\n\n      hasMountedTransitionStyles = true;\n      this.styleManager.mount(CarouselTransitionStylesComponent);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.scrollable()) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.MISSING_SCROLLABLE,\n            '[CarouselDirective] etCarousel needs a scrollable to move: put it on an [etScrollable] element ' +\n              '(e.g. <et-scrollable etCarousel etScrollableSnap itemSize=\"full\">), or use <et-carousel>.',\n            { element: this.hostElement },\n          );\n        }\n      });\n\n      // Not in `afterNextRender`: the slide count comes from the scrollable's mutation observer, which\n      // hasn't reported the children by then in every composition. This checks the first time the carousel\n      // *has* children - by which point every slide's directive has been constructed, since a child exists\n      // in the DOM only after its directives do.\n      let hasCheckedItems = false;\n\n      effect(() => {\n        const domCount = this.domCount();\n        const itemCount = this.items().length;\n\n        if (hasCheckedItems || domCount === 0) return;\n\n        hasCheckedItems = true;\n\n        if (itemCount === 0) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.MISSING_ITEMS,\n            '[CarouselDirective] This carousel has children but none of them is a slide, so it can neither ' +\n              'label them nor tell which one is current. Add the etCarouselItem directive to each slide.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Go to the next slide. On a looping carousel it simply keeps scrolling; otherwise it wraps. */\n  public next() {\n    if (!this.canGoNext()) return;\n\n    this.goToDomIndex(this.stepDomIndex(1));\n  }\n\n  /** Go to the previous slide. On a looping carousel it simply keeps scrolling; otherwise it wraps. */\n  public previous() {\n    if (!this.canGoPrevious()) return;\n\n    this.goToDomIndex(this.stepDomIndex(-1));\n  }\n\n  /**\n   * Scroll a slide into view by index. Out-of-range indices are ignored.\n   *\n   * On a looping carousel it goes the shorter way round - the clones mean the same slide exists a whole\n   * track either side, so slide 5 of 6 is one step back from slide 1, not five forward.\n   */\n  public goTo(index: number) {\n    if (index < 0 || index >= this.count()) return;\n\n    this.goToDomIndex(this.nearestDomIndexOf(index));\n  }\n\n  /** @internal Called by a slide while it exists. */\n  public registerItem(item: CarouselItemDirective) {\n    this.items.update((items) => [...items, item]);\n  }\n\n  /** @internal */\n  public unregisterItem(item: CarouselItemDirective) {\n    this.items.update((items) => items.filter((registered) => registered !== item));\n  }\n\n  /**\n   * @internal Which slide a track child shows: itself, or - for a clone - the slide it clones. `-1` before\n   * there is anything to map.\n   */\n  public slideIndexOf(domIndex: number) {\n    const count = this.count();\n\n    if (domIndex < 0 || count === 0) return -1;\n\n    const shifted = domIndex - this.cloneCount();\n\n    return ((shifted % count) + count) % count;\n  }\n\n  private goToDomIndex(domIndex: number) {\n    const scrollable = this.scrollable();\n\n    if (!scrollable || domIndex < 0 || domIndex >= this.domCount()) return;\n\n    const from = this.activeDomIndex();\n    const origin = this.slideAlign();\n    const distance = from < 0 ? 0 : domIndex - from;\n\n    // Recorded before either scroll: a second click during this one steps from here rather than from the\n    // slide the intersections are still reporting, and the settle handler needs it to tell the instant\n    // reposition below apart from the animation that follows it.\n    this.requestedDomIndex.set(domIndex);\n\n    if (Math.abs(distance) > 1) {\n      scrollable.scrollToElementByIndex({\n        index: domIndex - Math.sign(distance),\n        origin,\n        behavior: 'instant',\n        ignoreForcedOrigin: true,\n      });\n    }\n\n    // Never 'nearest' (the scrollable's default): it deliberately does nothing for an element merely\n    // adjacent to the viewport edge, which is exactly where the next slide sits in a one-slide-per-view\n    // carousel - so `next()` would never move.\n    scrollable.scrollToElementByIndex({ index: domIndex, origin });\n  }\n\n  private nearestDomIndexOf(index: number) {\n    const cloneCount = this.cloneCount();\n    const target = cloneCount + index;\n\n    if (!this.isLooping()) return target;\n\n    const count = this.count();\n    const domCount = this.domCount();\n    const from = this.activeDomIndex();\n\n    if (from < 0) return target;\n\n    return [target - count, target, target + count]\n      .filter((candidate) => candidate >= 0 && candidate < domCount)\n      .reduce((best, candidate) => (Math.abs(candidate - from) < Math.abs(best - from) ? candidate : best), target);\n  }\n\n  private stepDomIndex(step: 1 | -1) {\n    const cloneCount = this.cloneCount();\n    const count = this.count();\n    const activeDomIndex = this.activeDomIndex();\n    const from = activeDomIndex < 0 ? cloneCount : activeDomIndex;\n    const target = from + step;\n\n    if (target >= 0 && target < this.domCount()) return target;\n    if (count === 0) return -1;\n\n    return cloneCount + ((((target - cloneCount) % count) + count) % count);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  viewChild,\n} from '@angular/core';\nimport { RuntimeError, createCanAnimateSignal, injectHostElement } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../button';\nimport { FocusRingDirective } from '../focus-ring';\nimport { CHEVRON_ICON, IconDirective, PAUSE_ICON, PLAY_ICON, provideIcons } from '../icon';\nimport {\n  SCROLLABLE_DRAG_IMPORTS,\n  SCROLLABLE_IMPORTS,\n  ScrollableComponent,\n  ScrollableDirective,\n  ScrollableItemSize,\n} from '../scrollable';\nimport { CAROUSEL_ERROR_CODES } from './carousel-errors';\nimport {\n  CarouselAutoplayDirective,\n  CarouselDirective,\n  CarouselItemDirective,\n  CarouselNextDirective,\n  CarouselPlayToggleDirective,\n  CarouselPreviousDirective,\n  CarouselSlideContext,\n} from './headless';\n\ntype CarouselSlideZone = 'lead' | 'real' | 'trail';\n\ntype CarouselSlideView = {\n  key: string;\n  isClone: boolean;\n  autoplayTime: number | null;\n  context: CarouselSlideContext<unknown>;\n};\n\n/**\n * The default carousel: a scroll-snapping track of slides with labelled previous/next controls, slide\n * dots, optional autoplay with the pause control that requires, and seamless looping.\n *\n * It is the [scrollable](/components/scrollable) configured as a carousel, so the sliding is native\n * scrolling - touch swipe, momentum, trackpad and keyboard all come from the platform rather than from a\n * transform this component animates. `itemSize` is what makes it show one slide at a time (the default)\n * or a peeking multi-item view.\n *\n * Slides are **data plus a template**, not elements you project: seamless looping needs each slide\n * rendered more than once - a clone either side of the seam - and a clone has to be a live view rather\n * than a copy of a DOM subtree, or anything interactive inside it would be dead. Binding the slides to the\n * template is also what types it, so `let-slide` is your slide type.\n *\n * The carousel semantics live on this element (it is the `role=\"region\"` labelled as a carousel), and it\n * renders the slide wrapper itself, so slide roles, labels and the clone marking are guaranteed.\n *\n * @example\n * <et-carousel loop autoplay>\n *   <ng-template [etCarouselSlide]=\"teams()\" let-team>\n *     <h3>{{ team.name }}</h3>\n *   </ng-template>\n * </et-carousel>\n */\n@Component({\n  selector: 'et-carousel',\n  templateUrl: './carousel.component.html',\n  styleUrl: './carousel.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    BUTTON_IMPORTS,\n    CarouselItemDirective,\n    CarouselNextDirective,\n    CarouselPlayToggleDirective,\n    CarouselPreviousDirective,\n    FocusRingDirective,\n    IconDirective,\n    NgTemplateOutlet,\n    SCROLLABLE_IMPORTS,\n    SCROLLABLE_DRAG_IMPORTS,\n  ],\n  providers: [provideIcons(CHEVRON_ICON, PLAY_ICON, PAUSE_ICON)],\n  hostDirectives: [\n    {\n      directive: CarouselDirective,\n      inputs: ['loop', 'labels', 'slideAlign', 'transition', 'transitionDriver'],\n    },\n    {\n      directive: CarouselAutoplayDirective,\n      inputs: ['autoplayTime', 'pauseOnHover', 'pauseOnFocus', 'pauseOnOffScreen', 'playOnInit'],\n    },\n  ],\n  host: {\n    class: 'et-carousel',\n    '[class.et-carousel--can-animate]': 'canAnimate.state()',\n  },\n})\nexport class CarouselComponent {\n  /** @internal Read from the template; also handy for a consumer reaching in with `viewChild`. */\n  public carousel = inject(CarouselDirective);\n  private autoplayDirective = inject(CarouselAutoplayDirective);\n  private hostElement = injectHostElement();\n\n  /**\n   * How much of the track one slide takes: `'full'` (the default) is one slide per view; `'half'`,\n   * `'third'` and `'quarter'` show several at once, and `'auto'` lets each slide size itself so the next\n   * one peeks in. Accepts the scrollable's per-breakpoint form, so a phone can show one and a desktop three.\n   */\n  public itemSize = input<ScrollableItemSize | Record<string, ScrollableItemSize>>('full');\n\n  /**\n   * Advance the carousel on its own. Opt-in, and it renders the pause control that requires (WCAG 2.2.2)\n   * along with the countdown ring around the active dot. @default false\n   */\n  public autoplay = input(false, { transform: booleanAttribute });\n\n  /** Render the previous/next controls. @default true */\n  public showControls = input(true, { transform: booleanAttribute });\n\n  /** Render the slide dots, which double as the autoplay progress indicator. @default true */\n  public showDots = input(true, { transform: booleanAttribute });\n\n  public track = viewChild.required(ScrollableComponent, { read: ScrollableDirective });\n\n  /** @internal Held low for the first frames, so the chrome's transitions don't run on arrival. */\n  public canAnimate = createCanAnimateSignal();\n\n  protected isAutoplayEnabled = computed(() => this.autoplayDirective.isEnabled());\n\n  protected isAutoplayRunning = computed(() => this.autoplayDirective.isPlaying());\n\n  protected autoplayDuration = computed(() => this.autoplayDirective.duration());\n\n  protected slideTemplate = computed(() => this.carousel.slideTemplate()?.templateRef ?? null);\n\n  protected slideViews = computed<CarouselSlideView[]>(() => {\n    const template = this.carousel.slideTemplate();\n    const slides = template?.slides() ?? [];\n    const count = slides.length;\n    const cloneCount = this.carousel.cloneCount();\n    const autoplayTimeFor = template?.autoplayTimeFor() ?? null;\n\n    const view = (index: number, zone: CarouselSlideZone): CarouselSlideView => {\n      const slide = slides[index];\n      const isClone = zone !== 'real';\n\n      return {\n        key: `${zone}:${index}`,\n        isClone,\n        autoplayTime: autoplayTimeFor?.(slide, index) ?? null,\n        context: {\n          $implicit: slide,\n          slide,\n          index,\n          count,\n          first: index === 0,\n          last: index === count - 1,\n          clone: isClone,\n        },\n      };\n    };\n\n    return [\n      ...Array.from({ length: cloneCount }, (_, offset) => view(count - cloneCount + offset, 'lead')),\n      ...Array.from({ length: count }, (_, index) => view(index, 'real')),\n      ...Array.from({ length: cloneCount }, (_, index) => view(index, 'trail')),\n    ];\n  });\n\n  protected dots = computed(() => {\n    const count = this.carousel.count();\n    const activeIndex = this.carousel.activeIndex();\n    const labels = this.carousel.resolvedLabels();\n\n    return Array.from({ length: count }, (_, index) => ({\n      index,\n      isActive: index === activeIndex,\n      label: labels.goToSlide(index + 1, count),\n    }));\n  });\n\n  constructor() {\n    // eslint-disable-next-line ethlete/prefer-linked-signal\n    effect(() => this.carousel.attachedScrollable.set(this.track()));\n\n    // eslint-disable-next-line ethlete/prefer-linked-signal\n    effect(() => this.autoplayDirective.enabledOverride.set(this.autoplay()));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.carousel.slideTemplate()) {\n          throw new RuntimeError(\n            CAROUSEL_ERROR_CODES.MISSING_SLIDE_TEMPLATE,\n            '[CarouselComponent] <et-carousel> renders its slides from data and a template, and was given ' +\n              'neither. Add one: <ng-template [etCarouselSlide]=\"slides()\" let-slide>…</ng-template>.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","<et-scrollable\n  [itemSize]=\"itemSize()\"\n  [snapOrigin]=\"carousel.slideAlign()\"\n  class=\"et-carousel-track\"\n  renderMasks=\"false\"\n  etScrollableDrag\n  etScrollableSnap\n  scrollMode=\"element\"\n>\n  @for (view of slideViews(); track view.key) {\n    <div [isClone]=\"view.isClone\" [autoplayTime]=\"view.autoplayTime\" etCarouselItem>\n      <!-- The inner element is what lets an effect move a slide's *content* independently of the slide's\n           own box — which is the whole of `wipe`: the content holds still while the box travels over it,\n           so the edge between two slides sweeps instead of the picture being cropped and dragged along. -->\n      <div class=\"et-carousel-slide-content\">\n        <ng-container *ngTemplateOutlet=\"slideTemplate(); context: view.context\" />\n      </div>\n    </div>\n  }\n</et-scrollable>\n\n@if (showControls() || showDots() || isAutoplayEnabled()) {\n  <div class=\"et-carousel-controls\">\n    @if (showControls()) {\n      <button class=\"et-carousel-control\" et-icon-button etCarouselPrevious size=\"sm\" variant=\"transparent\">\n        <i class=\"et-carousel-control-icon et-carousel-control-icon--previous\" etIcon=\"et-chevron\"></i>\n      </button>\n    }\n\n    @if (showDots()) {\n      <div class=\"et-carousel-dots\">\n        @for (dot of dots(); track dot.index) {\n          <button\n            [attr.aria-label]=\"dot.label\"\n            [attr.aria-current]=\"dot.isActive ? 'true' : null\"\n            [attr.data-active]=\"dot.isActive ? '' : null\"\n            [attr.data-counting]=\"dot.isActive && isAutoplayRunning() ? '' : null\"\n            (click)=\"carousel.goTo(dot.index)\"\n            class=\"et-carousel-dot\"\n            etFocusRing\n            type=\"button\"\n          >\n            <!-- Rendered for every dot while autoplay is on, rather than only for the one counting down, so\n                 it has somewhere to fade in from and out to. The countdown keyframes are applied by\n                 `data-counting` instead, which starts them fresh every time the attribute lands — the same\n                 restart the timer does, so the ring and the timer still cannot drift apart.\n\n                 The two inner spans are the countdown itself: a half-disc sweeping each half of the circle,\n                 which is what lets the ring close by `rotate` alone. See the CSS. -->\n            @if (isAutoplayEnabled()) {\n              <span\n                [style.--_et-carousel-autoplay-duration.ms]=\"autoplayDuration()\"\n                class=\"et-carousel-dot-progress\"\n                aria-hidden=\"true\"\n              >\n                <span class=\"et-carousel-dot-progress-half\"></span>\n                <span class=\"et-carousel-dot-progress-half\"></span>\n              </span>\n            }\n          </button>\n        }\n      </div>\n    }\n\n    @if (isAutoplayEnabled()) {\n      <button\n        [attr.data-playing]=\"isAutoplayRunning() ? '' : null\"\n        class=\"et-carousel-control et-carousel-play-toggle\"\n        et-icon-button\n        etCarouselPlayToggle\n        size=\"sm\"\n        variant=\"transparent\"\n      >\n        <!-- Both icons, always: swapping the `etIcon` name would replace one element with another, and there\n             is nothing to animate between two different elements. Stacked and cross-faded instead.\n             Direct children on purpose — the icon button projects `[etIcon]`, so a wrapper of our own would\n             not be projected at all and both icons would simply vanish. -->\n        <i class=\"et-carousel-control-icon et-carousel-play-toggle-icon\" etIcon=\"et-play\" aria-hidden=\"true\"></i>\n        <i class=\"et-carousel-control-icon et-carousel-play-toggle-icon\" etIcon=\"et-pause\" aria-hidden=\"true\"></i>\n      </button>\n    }\n\n    @if (showControls()) {\n      <button class=\"et-carousel-control\" et-icon-button etCarouselNext size=\"sm\" variant=\"transparent\">\n        <i class=\"et-carousel-control-icon et-carousel-control-icon--next\" etIcon=\"et-chevron\"></i>\n      </button>\n    }\n  </div>\n}\n","import { CarouselComponent } from './carousel.component';\nimport {\n  CarouselAutoplayDirective,\n  CarouselDirective,\n  CarouselItemDirective,\n  CarouselNextDirective,\n  CarouselPlayToggleDirective,\n  CarouselPreviousDirective,\n  CarouselSlideDirective,\n} from './headless';\n\n/** The carousel, its slide template, and the headless directives to build your own out of a scrollable. */\nexport const CAROUSEL_IMPORTS = [\n  CarouselComponent,\n  CarouselSlideDirective,\n  CarouselItemDirective,\n  CarouselDirective,\n  CarouselAutoplayDirective,\n  CarouselPreviousDirective,\n  CarouselNextDirective,\n  CarouselPlayToggleDirective,\n] as const;\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ChartAxisLabel } from './chart.types';\n\n@Component({\n  selector: 'et-chart-axis',\n  template: `\n    @for (label of labels(); track label.key) {\n      <span\n        [style.--_et-chart-axis-position.px]=\"label.position\"\n        [style.--_et-chart-axis-extent.px]=\"label.extent ?? null\"\n        [attr.data-extent]=\"label.extent === undefined ? null : ''\"\n        class=\"et-chart-axis-label\"\n        >{{ label.text }}</span\n      >\n    }\n  `,\n  styleUrl: './chart-axis.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-chart-axis',\n    'aria-hidden': 'true',\n    '[attr.data-orientation]': 'orientation()',\n  },\n})\nexport class ChartAxisComponent {\n  public labels = input.required<readonly ChartAxisLabel[]>();\n  public orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ChartTableModel } from './chart.types';\n\n@Component({\n  selector: 'et-chart-data-table',\n  template: `\n    <table class=\"et-chart-table\">\n      <caption>\n        {{\n          caption()\n        }}\n      </caption>\n      <thead>\n        <tr>\n          @for (column of model().columns; track $index) {\n            <th scope=\"col\">{{ column }}</th>\n          }\n        </tr>\n      </thead>\n      <tbody>\n        @for (row of model().rows; track $index) {\n          <tr>\n            <th scope=\"row\">{{ row.header }}</th>\n            @for (cell of row.cells; track $index) {\n              <td>{{ cell }}</td>\n            }\n          </tr>\n        }\n      </tbody>\n    </table>\n  `,\n  styleUrl: './chart-data-table.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-chart-data-table',\n  },\n})\nexport class ChartDataTableComponent {\n  public caption = input.required<string>();\n  public model = input.required<ChartTableModel>();\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { ChartTick } from './chart.types';\n\n@Component({\n  selector: 'g[et-chart-grid]',\n  template: `\n    @for (line of lines(); track line.value) {\n      <svg:line\n        [attr.x1]=\"line.x1\"\n        [attr.y1]=\"line.y1\"\n        [attr.x2]=\"line.x2\"\n        [attr.y2]=\"line.y2\"\n        [class.et-chart-baseline]=\"line.value === 0\"\n        class=\"et-chart-grid-line\"\n        shape-rendering=\"crispEdges\"\n      />\n    }\n  `,\n  styleUrl: './chart-grid.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-chart-grid',\n    'aria-hidden': 'true',\n  },\n})\nexport class ChartGridComponent {\n  public ticks = input.required<readonly Pick<ChartTick, 'value' | 'position'>[]>();\n  public direction = input<'horizontal' | 'vertical'>('horizontal');\n  public length = input.required<number>();\n\n  protected lines = computed(() => {\n    const length = this.length();\n    const horizontal = this.direction() === 'horizontal';\n\n    return this.ticks().map(({ value, position }) =>\n      horizontal\n        ? { value, x1: 0, y1: position, x2: length, y2: position }\n        : { value, x1: position, y1: 0, x2: position, y2: length },\n    );\n  });\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\nimport { ChartLegendItem } from './chart.types';\n\n@Component({\n  selector: 'et-chart-legend',\n  template: `\n    <ul class=\"et-chart-legend-list\">\n      @for (item of items(); track item.key) {\n        <li class=\"et-chart-legend-item\">\n          <span [etProvideColor]=\"item.colorToken\" class=\"et-chart-legend-swatch\" aria-hidden=\"true\"></span>\n          <span class=\"et-chart-legend-label\">{{ item.label }}</span>\n        </li>\n      }\n    </ul>\n  `,\n  styleUrl: './chart-legend.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ProvideColorDirective],\n  host: {\n    class: 'et-chart-legend',\n    '[attr.data-mark]': 'mark()',\n  },\n})\nexport class ChartLegendComponent {\n  public items = input.required<readonly ChartLegendItem[]>();\n  public mark = input<'rect' | 'line'>('rect');\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-chart-tooltip',\n  template: `\n    @if (series()) {\n      <span class=\"et-chart-tooltip-key\" aria-hidden=\"true\"></span>\n    }\n    <strong class=\"et-chart-tooltip-value\">{{ value() }}</strong>\n    @if (series(); as seriesName) {\n      <span class=\"et-chart-tooltip-series\">{{ seriesName }}</span>\n    }\n    <span class=\"et-chart-tooltip-label\">{{ label() }}</span>\n  `,\n  styleUrl: './chart-tooltip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-chart-tooltip',\n  },\n})\nexport class ChartTooltipComponent {\n  public value = input.required<string>();\n  public label = input.required<string>();\n  public series = input<string | null>(null);\n}\n","import { computed, Directive, inject, InjectionToken, WritableSignal } from '@angular/core';\nimport { signalHostElementDimensions } from '@ethlete/core';\n\n/** A chart directive that lays its marks out in the width an `etChartPlot` element measures. */\nexport type ChartPlotHost = {\n  /** @internal */\n  plot: WritableSignal<ChartPlotDirective | null>;\n};\n\nexport const CHART_PLOT_HOST = new InjectionToken<ChartPlotHost>('CHART_PLOT_HOST');\n\n/**\n * Marks the element a chart's marks are laid out in. Its measured width is the width the chart's\n * scales divide.\n *\n * @example\n * <div etChartPlot><svg>…</svg></div>\n */\n@Directive({\n  selector: '[etChartPlot]',\n})\nexport class ChartPlotDirective {\n  private dimensions = signalHostElementDimensions();\n\n  public width = computed(() => this.dimensions().client?.width ?? 0);\n\n  constructor() {\n    const host = inject(CHART_PLOT_HOST, { optional: true });\n\n    host?.plot.set(this);\n  }\n}\n","// codes 5100-5199\nexport const CHART_ERROR_CODES = {\n  /** A chart rendered with no `etChartPlot` element to measure. */\n  MISSING_PLOT: 5100,\n} as const;\n","import { afterNextRender } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CHART_ERROR_CODES } from '../../chart-errors';\nimport { ChartPlotHost } from '../chart-plot.directive';\n\nexport const assertChartPlot = (host: ChartPlotHost, directiveName: string) => {\n  if (!ngDevMode) return;\n\n  afterNextRender(() => {\n    if (host.plot()) return;\n\n    throw new RuntimeError(\n      CHART_ERROR_CODES.MISSING_PLOT,\n      `[${directiveName}] A required [etChartPlot] element was not found in the template. ` +\n        'Add the etChartPlot directive to the element the marks are drawn in.',\n    );\n  });\n};\n","export type ChartValueFormatter = (value: number) => string;\n\nexport const resolveChartValueFormatter = (custom: ChartValueFormatter | null, locale: string): ChartValueFormatter => {\n  if (custom) return custom;\n\n  const format = new Intl.NumberFormat(locale);\n\n  return (value) => format.format(value);\n};\n","export type ChartValueTicks = {\n  domain: readonly [number, number];\n  step: number;\n  ticks: number[];\n};\n\nexport type ChartBandScale = {\n  step: number;\n  bandWidth: number;\n  bandStart: (index: number, member?: number) => number;\n  memberSlot: (index: number, member?: number) => { start: number; size: number };\n};\n\nexport type ChartBandScaleOptions = {\n  count: number;\n  width: number;\n  maxBandWidth: number;\n  gap: number;\n  groupSize?: number;\n};\n\nexport type ChartRoundedEnd = 'top' | 'bottom' | 'left' | 'right' | 'none';\n\nexport type ChartBarPathOptions = {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  radius: number;\n  roundedEnd: ChartRoundedEnd;\n};\n\nconst GROUP_PADDING = 0.2;\n\nconst roundToStep = (value: number) => Number(value.toPrecision(12));\n\nconst niceStep = (span: number, count: number) => {\n  const rawStep = span / Math.max(1, count);\n  const magnitude = 10 ** Math.floor(Math.log10(rawStep));\n  const error = rawStep / magnitude;\n\n  if (error >= Math.sqrt(50)) return magnitude * 10;\n  if (error >= Math.sqrt(10)) return magnitude * 5;\n  if (error >= Math.sqrt(2)) return magnitude * 2;\n\n  return magnitude;\n};\n\nexport const createValueTicks = (values: readonly number[], count: number): ChartValueTicks => {\n  const finite = values.filter((value) => Number.isFinite(value));\n  const min = Math.min(0, ...finite);\n  const max = Math.max(0, ...finite);\n  const span = max - min || 1;\n  const step = niceStep(span, count);\n  const domainMin = roundToStep(Math.floor(min / step) * step);\n  const domainMax = max === min ? roundToStep(step * Math.max(1, count)) : roundToStep(Math.ceil(max / step) * step);\n  const tickCount = Math.round((domainMax - domainMin) / step);\n  const ticks = Array.from({ length: tickCount + 1 }, (_, index) => roundToStep(domainMin + index * step));\n\n  return { domain: [domainMin, domainMax], step, ticks };\n};\n\nexport const createLinearScale =\n  (domain: readonly [number, number], range: readonly [number, number]) => (value: number) => {\n    const [d0, d1] = domain;\n    const [r0, r1] = range;\n\n    if (d1 === d0) return r0;\n\n    return r0 + ((value - d0) / (d1 - d0)) * (r1 - r0);\n  };\n\nexport const createBandScale = (options: ChartBandScaleOptions): ChartBandScale => {\n  const { count, width, maxBandWidth, gap } = options;\n  const groupSize = Math.max(1, options.groupSize ?? 1);\n  const step = count > 0 ? width / count : 0;\n  const groupGap = groupSize > 1 ? Math.max(gap, step * GROUP_PADDING) : gap;\n  const innerGaps = (groupSize - 1) * gap;\n  const bandWidth = Math.max(0, Math.min(maxBandWidth, (step - groupGap - innerGaps) / groupSize));\n  const groupWidth = bandWidth * groupSize + innerGaps;\n\n  const bandStart = (index: number, member = 0) => index * step + (step - groupWidth) / 2 + member * (bandWidth + gap);\n\n  const memberSlot = (index: number, member = 0) => {\n    const start = member === 0 ? index * step : bandStart(index, member) - gap / 2;\n    const end = member === groupSize - 1 ? (index + 1) * step : bandStart(index, member) + bandWidth + gap / 2;\n\n    return { start, size: end - start };\n  };\n\n  return { step, bandWidth, bandStart, memberSlot };\n};\n\nexport const createBarPath = (options: ChartBarPathOptions) => {\n  const { x, y, width, height, roundedEnd } = options;\n\n  if (width <= 0 || height <= 0) return '';\n\n  const right = x + width;\n  const bottom = y + height;\n\n  if (roundedEnd === 'none') return `M${x},${y}H${right}V${bottom}H${x}Z`;\n\n  if (roundedEnd === 'top' || roundedEnd === 'bottom') {\n    const r = Math.min(options.radius, width / 2, height);\n\n    if (roundedEnd === 'top') {\n      return (\n        `M${x},${bottom}V${y + r}A${r},${r} 0 0 1 ${x + r},${y}` +\n        `H${right - r}A${r},${r} 0 0 1 ${right},${y + r}V${bottom}Z`\n      );\n    }\n\n    return (\n      `M${x},${y}H${right}V${bottom - r}A${r},${r} 0 0 1 ${right - r},${bottom}` +\n      `H${x + r}A${r},${r} 0 0 1 ${x},${bottom - r}Z`\n    );\n  }\n\n  const r = Math.min(options.radius, height / 2, width);\n\n  if (roundedEnd === 'right') {\n    return (\n      `M${x},${y}H${right - r}A${r},${r} 0 0 1 ${right},${y + r}` +\n      `V${bottom - r}A${r},${r} 0 0 1 ${right - r},${bottom}H${x}Z`\n    );\n  }\n\n  return (\n    `M${right},${y}V${bottom}H${x + r}A${r},${r} 0 0 1 ${x},${bottom - r}` + `V${y + r}A${r},${r} 0 0 1 ${x + r},${y}Z`\n  );\n};\n","import { ColorPaletteEntry, RegisteredColorThemeName } from '@ethlete/core';\n\nexport type ChartSeriesColorSource = {\n  colorToken?: RegisteredColorThemeName | null;\n};\n\nexport const resolveChartSeriesColors = (\n  series: readonly ChartSeriesColorSource[],\n  palette: readonly ColorPaletteEntry[] | null | undefined,\n): (RegisteredColorThemeName | null)[] => {\n  if (series.length < 2) return series.map((entry) => entry.colorToken ?? null);\n\n  return series.map((entry, index) => entry.colorToken ?? palette?.[index]?.token ?? null);\n};\n\nexport const hasSharedSeriesColor = (colors: readonly (RegisteredColorThemeName | null)[]) =>\n  new Set(colors).size < colors.length;\n","export type ChartStackSegment = {\n  start: number;\n  end: number;\n  isOuter: boolean;\n};\n\nconst finiteOrZero = (value: number | null | undefined) =>\n  typeof value === 'number' && Number.isFinite(value) ? value : 0;\n\nexport const stackValues = (values: readonly (number | null | undefined)[]): ChartStackSegment[] => {\n  let positive = 0;\n  let negative = 0;\n  let outerPositive = -1;\n  let outerNegative = -1;\n\n  const segments = values.map((raw, index) => {\n    const value = finiteOrZero(raw);\n\n    if (value > 0) outerPositive = index;\n    if (value < 0) outerNegative = index;\n\n    if (value < 0) {\n      const segment = { start: negative, end: negative + value, isOuter: false };\n\n      negative += value;\n\n      return segment;\n    }\n\n    const segment = { start: positive, end: positive + value, isOuter: false };\n\n    positive += value;\n\n    return segment;\n  });\n\n  return segments.map((segment, index) => ({\n    ...segment,\n    isOuter: index === outerPositive || index === outerNegative,\n  }));\n};\n\nexport const stackExtent = (categories: readonly (readonly (number | null | undefined)[])[]): number[] =>\n  categories.flatMap((values) => {\n    const segments = stackValues(values);\n\n    return [Math.max(0, ...segments.map((s) => s.end)), Math.min(0, ...segments.map((s) => s.end))];\n  });\n","import { computed, Directive, effect, input, numberAttribute, signal } from '@angular/core';\nimport { injectColorPalette, injectLocale, RegisteredColorThemeName } from '@ethlete/core';\nimport {\n  ChartAxisLabel,\n  ChartLegendItem,\n  ChartRect,\n  ChartTableModel,\n  ChartTick,\n  ChartTooltipPlacement,\n} from '../chart.types';\nimport { CHART_PLOT_HOST, ChartPlotDirective, ChartPlotHost } from './chart-plot.directive';\nimport { assertChartPlot } from './internals/chart-plot-check';\nimport { ChartValueFormatter, resolveChartValueFormatter } from './internals/chart-format';\nimport { createBandScale, createBarPath, createLinearScale, createValueTicks } from './internals/chart-scale';\nimport { hasSharedSeriesColor, resolveChartSeriesColors } from './internals/chart-series';\nimport { ChartStackSegment, stackExtent, stackValues } from './internals/chart-stack';\n\n/** One bar of a single-series chart: a category and the value its bar encodes. */\nexport type BarChartDatum = {\n  label: string;\n  value: number;\n};\n\n/** One category of a multi-series chart: its label and a value per series `key`. A missing value draws no bar. */\nexport type BarChartSeriesDatum = {\n  label: string;\n  values: Readonly<Record<string, number | null | undefined>>;\n};\n\n/** A series of a multi-series chart. Its values are read from each datum's `values[key]`. */\nexport type BarChartSeries = {\n  key: string;\n  /** Names the series in the legend, the tooltip, the bar's accessible name and the table header. */\n  label: string;\n  /** The color theme the series is drawn in. @default the palette entry at the series' position, else the accent */\n  colorToken?: RegisteredColorThemeName | null;\n};\n\n/** How several series share a category: side by side, or stacked on one bar. */\nexport type BarChartLayout = 'grouped' | 'stacked';\n\n/** Which way the bars grow: up from a horizontal baseline, or right from a vertical one. */\nexport type BarChartOrientation = 'vertical' | 'horizontal';\n\n/** Formats a value for the axis, the tooltip and the table. */\nexport type BarChartValueFormatter = ChartValueFormatter;\n\n/** A bar with its geometry in plot pixels, ready to render. */\nexport type BarChartBar = {\n  /** Unique per category and series, stable across data updates. */\n  key: string;\n  /** The category label and this bar's value. */\n  datum: BarChartDatum;\n  /** Position in {@link BarChartDirective.bars} - category by category, series by series. */\n  index: number;\n  categoryIndex: number;\n  seriesIndex: number;\n  /** The series this bar belongs to; `null` in a single-series chart. */\n  series: BarChartSeries | null;\n  /** The color theme the bar is drawn in; `null` takes the surrounding accent. */\n  colorToken: RegisteredColorThemeName | null;\n  /** Left edge of the bar's hit target - its share of the category band. */\n  slotX: number;\n  slotWidth: number;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  /** The mark's outline: rounded at the data end, square at the baseline and between stacked segments. */\n  path: string;\n  /** Whether the bar grows from the baseline towards negative values - down, or left when horizontal. */\n  isNegative: boolean;\n  /** The hover, tap and focus target. Larger than the mark. */\n  target: ChartRect;\n  /** A zero-size rect at the bar's data end, for the tooltip to point at. */\n  anchor: ChartRect;\n  /** The side of `anchor` the tooltip opens on. */\n  placement: ChartTooltipPlacement;\n  valueText: string;\n  /** The bar's accessible name: the category, plus the series in a multi-series chart, e.g. `\"Mar, Home\"`. */\n  name: string;\n  /** What assistive tech reads for the bar, e.g. `\"Mar, Home: 1,200\"`. */\n  ariaLabel: string;\n};\n\n/**\n * A value-axis tick. `position` is its offset along the value axis; `x` and `y` are where it meets\n * that axis - `y` in a vertical chart, `x` in a horizontal one.\n */\nexport type BarChartTick = ChartTick & {\n  x: number;\n  y: number;\n};\n\ntype NormalizedCategory = {\n  label: string;\n  values: (number | null)[];\n  datum?: BarChartDatum;\n};\n\nconst BAR_GAP = 2;\nconst BAR_RADIUS = 4;\n\nconst finiteOrNull = (value: number | null | undefined) =>\n  typeof value === 'number' && Number.isFinite(value) ? value : null;\n\n/**\n * Headless bar chart: turns `data` into bar geometry, value-axis ticks, legend entries and the strings\n * a table view needs. One series by default; pass `series` for grouped or stacked bars. It measures\n * nothing itself - the element marked `etChartPlot` reports the width the bars are laid out in.\n *\n * @example\n * <div etBarChart [data]=\"data\" label=\"Sign-ups per month\">\n *   <div etChartPlot><svg>…</svg></div>\n * </div>\n */\n@Directive({\n  selector: '[etBarChart]',\n  exportAs: 'etBarChart',\n  providers: [{ provide: CHART_PLOT_HOST, useExisting: BarChartDirective }],\n})\nexport class BarChartDirective implements ChartPlotHost {\n  private palette = injectColorPalette({ optional: true });\n  private locale = injectLocale();\n\n  /**\n   * The categories, in order. `{ label, value }` per bar for one series; with `series`,\n   * `{ label, values }` holding a value per series key.\n   */\n  public data = input.required<readonly BarChartDatum[] | readonly BarChartSeriesDatum[]>();\n\n  /** The series to draw from each datum's `values`. Empty draws one series from each datum's `value`. @default [] */\n  public series = input<readonly BarChartSeries[]>([]);\n\n  /** How several series share a category. @default 'grouped' */\n  public layout = input<BarChartLayout>('grouped');\n\n  /** Which way the bars grow. @default 'vertical' */\n  public orientation = input<BarChartOrientation>('vertical');\n\n  /** Names the chart for assistive tech and captions its table view. */\n  public label = input.required<string>();\n\n  /** Height of the plot area in px, excluding the axis labels. @default 240 */\n  public height = input(240, { transform: numberAttribute });\n\n  /** Roughly how many value-axis intervals to draw; the axis rounds to a clean 1, 2 or 5 step. @default 5 */\n  public tickCount = input(5, { transform: numberAttribute });\n\n  /** The thickest a bar may get in px. Wider bands keep the rest as air. @default 24 */\n  public maxBarWidth = input(24, { transform: numberAttribute });\n\n  /** Formats values for the axis, the tooltip and the table. @default the app locale's number format */\n  public valueFormatter = input<BarChartValueFormatter | null>(null);\n\n  /** The table view's category column header. @default 'Category' */\n  public categoryHeader = input('Category');\n\n  /** The table view's value column header in a single-series chart. @default 'Value' */\n  public valueHeader = input('Value');\n\n  public formatValue = computed(() => resolveChartValueFormatter(this.valueFormatter(), this.locale.currentLocale()));\n\n  /**\n   * The element the bars are laid out in. Set by `etChartPlot`.\n   *\n   * @internal\n   */\n  public plot = signal<ChartPlotDirective | null>(null);\n\n  public plotWidth = computed(() => this.plot()?.width() ?? 0);\n\n  public isHorizontal = computed(() => this.orientation() === 'horizontal');\n\n  public isStacked = computed(() => this.layout() === 'stacked' && this.series().length > 1);\n\n  /** The color theme per entry of `series`, resolved against the palette. */\n  public seriesColors = computed(() => resolveChartSeriesColors(this.series(), this.palette));\n\n  /** The legend entries - one per series when there are two or more, else none. */\n  public legendItems = computed<ChartLegendItem[]>(() => {\n    const series = this.series();\n    const colors = this.seriesColors();\n\n    if (series.length < 2) return [];\n\n    return series.map((entry, index) => ({ key: entry.key, label: entry.label, colorToken: colors[index] ?? null }));\n  });\n\n  private categories = computed<NormalizedCategory[]>(() => {\n    const series = this.series();\n\n    if (!series.length) {\n      return (this.data() as readonly BarChartDatum[]).map((datum) => ({\n        label: datum.label,\n        values: [Number.isFinite(datum.value) ? datum.value : 0],\n        datum,\n      }));\n    }\n\n    return (this.data() as readonly BarChartSeriesDatum[]).map((datum) => ({\n      label: datum.label,\n      values: series.map((entry) => finiteOrNull(datum.values?.[entry.key])),\n    }));\n  });\n\n  public valueTicks = computed(() => {\n    const categories = this.categories();\n    const values = this.isStacked()\n      ? stackExtent(categories.map((category) => category.values))\n      : categories.flatMap((category) => category.values.filter((value) => value !== null));\n\n    return createValueTicks(values, this.tickCount());\n  });\n\n  private valueLength = computed(() => (this.isHorizontal() ? this.plotWidth() : this.height()));\n\n  private valueScale = computed(() =>\n    createLinearScale(this.valueTicks().domain, this.isHorizontal() ? [0, this.plotWidth()] : [this.height(), 0]),\n  );\n\n  /** The zero line's offset along the value axis, in plot pixels. */\n  public baseline = computed(() => this.valueScale()(0));\n\n  /** @deprecated Use `baseline`, which also covers horizontal charts. */\n  public baselineY = this.baseline;\n\n  public ticks = computed<BarChartTick[]>(() => {\n    const scale = this.valueScale();\n    const format = this.formatValue();\n    const horizontal = this.isHorizontal();\n    const height = this.height();\n\n    return this.valueTicks().ticks.map((value) => {\n      const position = scale(value);\n\n      return { value, text: format(value), position, x: horizontal ? position : 0, y: horizontal ? height : position };\n    });\n  });\n\n  private bandScale = computed(() =>\n    createBandScale({\n      count: this.categories().length,\n      width: this.isHorizontal() ? this.height() : this.plotWidth(),\n      maxBandWidth: this.maxBarWidth(),\n      gap: BAR_GAP,\n      groupSize: this.isStacked() ? 1 : Math.max(1, this.series().length),\n    }),\n  );\n\n  /** The category labels, centered on their bands along the category axis. */\n  public categoryLabels = computed<ChartAxisLabel[]>(() => {\n    const band = this.bandScale();\n\n    return this.categories().map((category, index) => ({\n      key: index,\n      text: category.label,\n      position: index * band.step + band.step / 2,\n      extent: band.step,\n    }));\n  });\n\n  /** The value-axis labels, at their ticks. */\n  public valueLabels = computed<ChartAxisLabel[]>(() =>\n    this.ticks().map((tick) => ({ key: tick.value, text: tick.text, position: tick.position })),\n  );\n\n  public bars = computed<BarChartBar[]>(() => {\n    const categories = this.categories();\n    const series = this.series();\n    const colors = this.seriesColors();\n    const stacked = this.isStacked();\n    const horizontal = this.isHorizontal();\n    const scale = this.valueScale();\n    const format = this.formatValue();\n    const baseline = this.baseline();\n    const band = this.bandScale();\n    const valueLength = this.valueLength();\n    const bars: BarChartBar[] = [];\n\n    categories.forEach((category, categoryIndex) => {\n      const segments: (ChartStackSegment | null)[] = stacked\n        ? stackValues(category.values)\n        : category.values.map((value) => (value === null ? null : { start: 0, end: value, isOuter: true }));\n\n      segments.forEach((segment, seriesIndex) => {\n        const value = category.values[seriesIndex];\n\n        if (!segment || value === null || value === undefined) return;\n        if (stacked && value === 0) return;\n\n        const entry = series[seriesIndex] ?? null;\n        const isNegative = value < 0;\n        const member = stacked ? 0 : seriesIndex;\n        const bandStart = band.bandStart(categoryIndex, member);\n        const slot = band.memberSlot(categoryIndex, member);\n        const distance = (v: number) => Math.abs(scale(v) - baseline);\n        const toPixel = (d: number) => (horizontal !== isNegative ? baseline + d : baseline - d);\n\n        const innerTrim = segment.start !== 0 ? BAR_GAP / 2 : 0;\n        const outerTrim = segment.isOuter ? 0 : BAR_GAP / 2;\n        const near = distance(segment.start) + innerTrim;\n        const far = Math.max(near, distance(segment.end) - outerTrim);\n        const valueStart = Math.min(toPixel(near), toPixel(far));\n        const valueSize = far - near;\n\n        const targetNear = toPixel(distance(segment.start));\n        const targetFar = segment.isOuter\n          ? horizontal !== isNegative\n            ? valueLength\n            : 0\n          : toPixel(distance(segment.end));\n        const targetStart = Math.min(targetNear, targetFar);\n        const targetSize = stacked ? Math.abs(targetFar - targetNear) : valueLength;\n\n        const rect: ChartRect = horizontal\n          ? { x: valueStart, y: bandStart, width: valueSize, height: band.bandWidth }\n          : { x: bandStart, y: valueStart, width: band.bandWidth, height: valueSize };\n\n        const target: ChartRect = horizontal\n          ? { x: stacked ? targetStart : 0, y: slot.start, width: targetSize, height: slot.size }\n          : { x: slot.start, y: stacked ? targetStart : 0, width: slot.size, height: targetSize };\n\n        const anchor: ChartRect = horizontal\n          ? { x: isNegative ? rect.x : rect.x + rect.width, y: rect.y, width: 0, height: rect.height }\n          : { x: rect.x, y: isNegative ? rect.y + rect.height : rect.y, width: rect.width, height: 0 };\n\n        const roundedEnd = !segment.isOuter\n          ? 'none'\n          : horizontal\n            ? isNegative\n              ? 'left'\n              : 'right'\n            : isNegative\n              ? 'bottom'\n              : 'top';\n\n        const valueText = format(category.datum?.value ?? value);\n        const name = entry && series.length > 1 ? `${category.label}, ${entry.label}` : category.label;\n\n        bars.push({\n          key: `${categoryIndex}:${entry?.key ?? ''}`,\n          datum: category.datum ?? { label: category.label, value },\n          index: bars.length,\n          categoryIndex,\n          seriesIndex,\n          series: entry,\n          colorToken: entry ? (colors[seriesIndex] ?? null) : null,\n          slotX: target.x,\n          slotWidth: target.width,\n          ...rect,\n          path: createBarPath({ ...rect, radius: BAR_RADIUS, roundedEnd }),\n          isNegative,\n          target,\n          anchor,\n          placement: horizontal ? (isNegative ? 'left' : 'right') : isNegative ? 'bottom' : 'top',\n          valueText,\n          name,\n          ariaLabel: `${name}: ${valueText}`,\n        });\n      });\n    });\n\n    return bars;\n  });\n\n  /** The data as a table: a row per category, a column per series. */\n  public table = computed<ChartTableModel>(() => {\n    const series = this.series();\n    const format = this.formatValue();\n\n    if (!series.length) {\n      return {\n        columns: [this.categoryHeader(), this.valueHeader()],\n        rows: (this.data() as readonly BarChartDatum[]).map((datum) => ({\n          header: datum.label,\n          cells: [format(datum.value)],\n        })),\n      };\n    }\n\n    return {\n      columns: [this.categoryHeader(), ...series.map((entry) => entry.label)],\n      rows: this.categories().map((category) => ({\n        header: category.label,\n        cells: category.values.map((value) => (value === null ? '' : format(value))),\n      })),\n    };\n  });\n\n  constructor() {\n    assertChartPlot(this, 'BarChartDirective');\n\n    if (ngDevMode) {\n      effect(() => {\n        const colors = this.seriesColors();\n\n        if (colors.length > 1 && hasSharedSeriesColor(colors)) {\n          console.warn(\n            '[BarChartDirective] Two or more series share one color. Provide a palette with provideColorPalette() ' +\n              'or give each series its own colorToken.',\n          );\n        }\n      });\n    }\n  }\n}\n","// codes 1400-1499\nexport const TOOLTIP_ERROR_CODES = {\n  TEMPLATE_TOOLTIP_REQUIRES_DESCRIPTION: 1400,\n} as const;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, TemplateRef, ViewEncapsulation, computed, effect, inject, input, untracked } from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective } from '@ethlete/core';\nimport { TooltipContent } from './headless/tooltip.directive';\n\n@Component({\n  selector: 'et-tooltip',\n  templateUrl: './tooltip.component.html',\n  styleUrl: './tooltip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-tooltip',\n    role: 'tooltip',\n    '[attr.id]': 'tooltipId()',\n    '[attr.data-has-template]': 'hasTemplate() || null',\n  },\n})\nexport class TooltipComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private triggerColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  public tooltipId = input.required<string>();\n  public content = input.required<TooltipContent>();\n  public colorProvider = input.required<ProvideColorDirective | null>();\n\n  public hasTemplate = computed(() => this.content() instanceof TemplateRef);\n  public contentText = computed<string | null>(() => {\n    const content = this.content();\n    return typeof content === 'string' ? content : null;\n  });\n  public contentTemplate = computed<TemplateRef<unknown> | null>(() => {\n    const content = this.content();\n    return content instanceof TemplateRef ? content : null;\n  });\n\n  constructor() {\n    // the tooltip surface IS the overlay's own surface - paint the overlay's registered elevation\n    // exactly (read from the surface-context tracker), don't stack a level above it\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    effect(() => {\n      const providedColor = this.colorProvider() ?? this.triggerColorProvider ?? null;\n\n      untracked(() => {\n        if (providedColor) {\n          this.ownColorProvider.syncWithProvider(providedColor);\n        }\n      });\n    });\n  }\n}\n","<div class=\"et-tooltip__surface\">\n  <div class=\"et-tooltip__content\">\n    @if (contentText(); as text) {\n      <p class=\"et-tooltip__text\">{{ text }}</p>\n    } @else if (contentTemplate()) {\n      <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\n    }\n  </div>\n</div>\n","let nextTooltipId = 0;\n\nexport const createTooltipId = (prefix = 'et-tooltip') => {\n  nextTooltipId += 1;\n  return `${prefix}-${nextTooltipId}`;\n};\n","import {\n  DOCUMENT,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  TemplateRef,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  COLOR_PROVIDER,\n  RuntimeError,\n  injectFocusVisibleTracker,\n  injectRenderer,\n  isOnHigherOverlayLayer,\n  resolveOverlayLayer,\n} from '@ethlete/core';\nimport { OffsetOptions, Padding, Placement } from '@floating-ui/dom';\nimport { filter, fromEvent, map, switchMap, takeUntil, tap, timer } from 'rxjs';\nimport { OverlayConfig, OverlayRef, anchoredOverlayStrategy } from '../../overlay';\nimport { mountFloatingPanelStyles } from '../../overlay/floating-panel-styles.component';\nimport { injectOverlayManager } from '../../overlay/overlay-manager';\nimport { TOOLTIP_ERROR_CODES } from '../tooltip-errors';\nimport { TooltipComponent } from '../tooltip.component';\nimport { createTooltipId } from '../tooltip.utils';\n\nexport type TooltipContent = string | TemplateRef<unknown>;\n\nconst DEFAULT_TOOLTIP_DELAY = 300;\n\n@Directive({\n  selector: '[etTooltip]',\n  exportAs: 'etTooltip',\n})\nexport class TooltipDirective {\n  private document = inject(DOCUMENT);\n  private destroyRef = inject(DestroyRef);\n  private elementRef = inject<ElementRef<HTMLElement | SVGElement>>(ElementRef);\n  private colorProvider = inject(COLOR_PROVIDER, { optional: true });\n  private overlayManager = injectOverlayManager();\n  private focusVisibleTracker = injectFocusVisibleTracker();\n  private renderer = injectRenderer();\n\n  public content = input<TooltipContent | null>(null, { alias: 'etTooltip' });\n  public ariaDescription = input<string | null>(null, { alias: 'etTooltipAriaDescription' });\n  /**\n   * The element the tooltip points at, when it should differ from the trigger - e.g. one end of a\n   * larger hit target. Hover, focus and the accessible description stay on the trigger.\n   * @default the trigger\n   */\n  public anchor = input<Element | null>(null);\n  public placement = input<Placement>('top');\n  public fallbackPlacements = input<Placement[] | undefined>(undefined);\n  public offset = input<OffsetOptions | null>(8);\n  /**\n   * How close the arrow may get to the panel's corners. Must clear the panel's border radius\n   * (`--_et-tooltip-radius`, 16px) or the arrow's base rides into the rounded corner - which is what\n   * happens on aligned placements (`bottom-end`, `left-start`, …) and whenever `shift` pushes a panel\n   * off center near a viewport edge.\n   */\n  public arrowPadding = input<Padding | null>(20);\n  public viewportPadding = input<Padding | null>(8);\n  public showDelay = input(DEFAULT_TOOLTIP_DELAY);\n  public disabled = input(false, { alias: 'etTooltipDisabled', transform: booleanAttribute });\n\n  /** @internal */\n  public overlayRef = signal<OverlayRef<TooltipComponent, unknown> | null>(null);\n\n  private hasHover = signal(false);\n  private hasFocus = signal(false);\n  private descriptionId = createTooltipId('et-tooltip-description');\n  private descriptionElement: HTMLElement | null = null;\n  private appliedDescriptionId: string | null = null;\n\n  private accessibleDescription = computed(() => {\n    const ariaDescription = this.ariaDescription();\n\n    if (ariaDescription) {\n      return ariaDescription;\n    }\n\n    const content = this.content();\n    return typeof content === 'string' ? content : null;\n  });\n\n  constructor() {\n    mountFloatingPanelStyles();\n\n    this.setupHoverBehavior();\n    this.setupFocusBehavior();\n\n    effect(() => {\n      const description = this.accessibleDescription();\n\n      untracked(() => {\n        this.syncDescriptionElement(description);\n\n        if (!this.overlayRef()) {\n          this.syncHostDescription(description ? this.descriptionId : null);\n        }\n      });\n    });\n\n    effect(() => {\n      const content = this.content();\n      const disabled = this.disabled();\n\n      if ((content === null || disabled) && this.overlayRef()) {\n        untracked(() => {\n          this.hide();\n        });\n      }\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.removeDescriptionElement();\n      this.syncHostDescription(null);\n    });\n  }\n\n  public show() {\n    if (this.disabled()) {\n      return;\n    }\n\n    const content = this.content();\n    if (content === null) {\n      return;\n    }\n\n    const accessibleDescription = this.accessibleDescription();\n    if (content instanceof TemplateRef && !accessibleDescription) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          TOOLTIP_ERROR_CODES.TEMPLATE_TOOLTIP_REQUIRES_DESCRIPTION,\n          '[TooltipDirective] Template tooltips require etTooltipAriaDescription so non-visual users get an equivalent description.',\n        );\n      }\n\n      return;\n    }\n\n    if (this.overlayRef()) {\n      return;\n    }\n\n    const tooltipId = createTooltipId();\n    const hostElement = this.elementRef.nativeElement;\n    const config: OverlayConfig = {\n      id: tooltipId,\n      bindings: [\n        inputBinding('tooltipId', () => tooltipId),\n        inputBinding('content', () => this.content() ?? content),\n        inputBinding('colorProvider', () => this.colorProvider ?? null),\n      ],\n      disableClose: true,\n      hasBackdrop: false,\n      mode: 'non-modal',\n      origin: this.anchor() ?? hostElement,\n      closeOnEscape: false,\n      closeOnOutsidePointer: false,\n      passive: true,\n      panelClass: 'et-tooltip-panel',\n      strategies: anchoredOverlayStrategy({\n        containerClass: ['et-overlay--tooltip', 'et-floating-panel'],\n        arrow: true,\n        placement: this.placement(),\n        fallbackPlacements: this.fallbackPlacements(),\n        offset: this.offset(),\n        arrowPadding: this.arrowPadding(),\n        viewportPadding: this.viewportPadding(),\n        shift: true,\n        autoHide: true,\n        autoCloseIfReferenceHidden: true,\n      }),\n      restoreFocus: false,\n      autoFocus: false,\n    };\n    const overlayRef = this.overlayManager.open<TooltipComponent>(TooltipComponent, config);\n\n    this.overlayRef.set(overlayRef);\n    this.syncHostDescription(tooltipId);\n    this.dismissOnOutsidePointer(overlayRef);\n    this.dismissOnEscape(overlayRef);\n\n    overlayRef\n      .afterClosed()\n      .pipe(\n        tap(() => {\n          if (this.overlayRef() === overlayRef) {\n            this.overlayRef.set(null);\n          }\n\n          this.syncHostDescription(this.accessibleDescription() ? this.descriptionId : null);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  public hide() {\n    this.overlayRef()?.close();\n  }\n\n  private setupHoverBehavior() {\n    const hostElement = this.elementRef.nativeElement;\n\n    // Pointer events rather than mouse events so the `pointerType` is readable: mobile browsers\n    // synthesize a mouse enter around a tap, which pops a hover affordance the user never asked for\n    // and then leaves it hanging until they tap elsewhere. A pen genuinely hovers, so only touch is\n    // excluded - touch input is what the toggletip is for.\n    const leave$ = fromEvent<PointerEvent>(hostElement, 'pointerleave');\n\n    fromEvent<PointerEvent>(hostElement, 'pointerenter')\n      .pipe(\n        filter((event) => event.pointerType !== 'touch'),\n        tap(() => this.hasHover.set(true)),\n        switchMap(() => timer(this.showDelay()).pipe(takeUntil(leave$.pipe(tap(() => this.hasHover.set(false)))))),\n        tap(() => {\n          if (!this.hasHover()) {\n            return;\n          }\n\n          this.show();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    leave$\n      .pipe(\n        tap(() => {\n          this.hasHover.set(false);\n\n          if (!this.hasFocus()) {\n            this.hide();\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /**\n   * A tooltip can outlive the hover that opened it - a `pointercancel`, a scroll that moves the\n   * trigger out from under the pointer, or a browser that synthesizes an enter with no matching\n   * leave. A press anywhere else is unambiguous, so treat it as a dismissal.\n   */\n  private dismissOnOutsidePointer(overlayRef: OverlayRef<TooltipComponent, unknown>) {\n    const hostElement = this.elementRef.nativeElement;\n\n    fromEvent<PointerEvent>(this.document, 'pointerdown', { capture: true })\n      .pipe(\n        takeUntil(overlayRef.afterClosed()),\n        filter((event) => !(event.target instanceof Node) || !hostElement.contains(event.target)),\n        filter((event) => !isOnHigherOverlayLayer(event.target, resolveOverlayLayer(hostElement))),\n        tap(() => {\n          this.hasHover.set(false);\n          this.hasFocus.set(false);\n          this.hide();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /**\n   * Escape is consumed here rather than left to the runtime: a shown tooltip counts as the topmost\n   * overlay, so a dialog beneath it would otherwise ignore the key - and a hover-shown tooltip has no\n   * focused host for a host listener to catch it on.\n   */\n  private dismissOnEscape(overlayRef: OverlayRef<TooltipComponent, unknown>) {\n    fromEvent<KeyboardEvent>(this.document, 'keydown', { capture: true })\n      .pipe(\n        takeUntil(overlayRef.afterClosed()),\n        filter((event) => event.key === 'Escape' && !event.defaultPrevented),\n        tap((event) => {\n          event.preventDefault();\n          this.hide();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private setupFocusBehavior() {\n    const hostElement = this.elementRef.nativeElement;\n\n    fromEvent(hostElement, 'focus')\n      .pipe(\n        map(() => this.focusVisibleTracker.isFocusVisible()),\n        filter(Boolean),\n        tap(() => {\n          this.hasFocus.set(true);\n          this.show();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    fromEvent(hostElement, 'blur')\n      .pipe(\n        tap(() => {\n          this.hasFocus.set(false);\n\n          if (!this.hasHover()) {\n            this.hide();\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private syncHostDescription(descriptionId: string | null) {\n    const hostElement = this.elementRef.nativeElement;\n    const rest = (hostElement.getAttribute('aria-describedby') ?? '')\n      .split(/\\s+/)\n      .filter((id) => id && id !== this.appliedDescriptionId && id !== descriptionId);\n    const next = descriptionId ? [...rest, descriptionId] : rest;\n\n    this.appliedDescriptionId = descriptionId;\n\n    if (next.length) {\n      this.renderer.setAttribute(hostElement, 'aria-describedby', next.join(' '));\n    } else {\n      this.renderer.removeAttribute(hostElement, 'aria-describedby');\n    }\n  }\n\n  private syncDescriptionElement(description: string | null) {\n    if (!description) {\n      this.removeDescriptionElement();\n\n      return;\n    }\n\n    if (!this.descriptionElement) {\n      const descriptionElement = this.renderer.createElement('div');\n\n      this.renderer.setAttribute(descriptionElement, 'id', this.descriptionId);\n      this.renderer.setStyle(descriptionElement, {\n        position: 'absolute',\n        width: '1px',\n        height: '1px',\n        padding: '0',\n        margin: '-1px',\n        overflow: 'hidden',\n        clip: 'rect(1px, 1px, 1px, 1px)',\n        clipPath: 'inset(50%)',\n        whiteSpace: 'nowrap',\n        border: '0',\n      });\n\n      this.renderer.appendChild(this.document.body, descriptionElement);\n      this.descriptionElement = descriptionElement;\n    }\n\n    this.renderer.setTextContent(this.descriptionElement, description);\n  }\n\n  private removeDescriptionElement() {\n    if (!this.descriptionElement) {\n      return;\n    }\n\n    const parentNode = this.renderer.parentNode(this.descriptionElement);\n    if (parentNode) {\n      this.renderer.removeChild(parentNode, this.descriptionElement);\n    }\n\n    this.descriptionElement = null;\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { TooltipDirective } from '../../../tooltip/headless/tooltip.directive';\n\n@Directive({\n  selector: '[etChartMark]',\n  hostDirectives: [\n    {\n      directive: TooltipDirective,\n      inputs: [\n        'etTooltip: etChartMark',\n        'etTooltipAriaDescription: etChartMarkDescription',\n        'anchor: etChartMarkAnchor',\n        'placement: etChartMarkPlacement',\n      ],\n    },\n  ],\n  host: {\n    tabindex: '0',\n    role: 'img',\n    '(click)': 'tooltip.show()',\n  },\n})\nexport class ChartMarkDirective {\n  protected tooltip = inject(TooltipDirective);\n}\n","import { Component, inject, input, TemplateRef, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective, RegisteredColorThemeName } from '@ethlete/core';\nimport { ChartAxisComponent } from './chart-axis.component';\nimport { ChartDataTableComponent } from './chart-data-table.component';\nimport { ChartGridComponent } from './chart-grid.component';\nimport { ChartLegendComponent } from './chart-legend.component';\nimport { ChartTooltipComponent } from './chart-tooltip.component';\nimport { BarChartDirective } from './headless/bar-chart.directive';\nimport { ChartPlotDirective } from './headless/chart-plot.directive';\nimport { ChartMarkDirective } from './headless/internals/chart-mark.directive';\n\n/**\n * A bar chart with a value axis, category labels, a recessive grid and a visually hidden table view.\n * One series by default; pass `series` for grouped or stacked bars with a legend, and\n * `orientation=\"horizontal\"` for bars that grow to the right. Driven by the headless {@link BarChartDirective}.\n *\n * @example\n * <et-bar-chart [data]=\"signUps\" label=\"Sign-ups per month\" />\n */\n@Component({\n  selector: 'et-bar-chart',\n  templateUrl: './bar-chart.component.html',\n  styleUrl: './bar-chart.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ChartAxisComponent,\n    ChartDataTableComponent,\n    ChartGridComponent,\n    ChartLegendComponent,\n    ChartMarkDirective,\n    ChartPlotDirective,\n    ChartTooltipComponent,\n    ProvideColorDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: BarChartDirective,\n      inputs: [\n        'data',\n        'series',\n        'layout',\n        'orientation',\n        'label',\n        'height',\n        'tickCount',\n        'maxBarWidth',\n        'valueFormatter',\n        'categoryHeader',\n        'valueHeader',\n      ],\n    },\n  ],\n  host: {\n    class: 'et-bar-chart',\n  },\n})\nexport class BarChartComponent {\n  protected chart = inject(BarChartDirective);\n\n  /** The color theme a single-series chart is drawn in, and the fallback for series without a color. @default the surrounding color scope's accent */\n  public colorToken = input<RegisteredColorThemeName | null>(null);\n\n  protected barTooltips = viewChildren('barTooltip', { read: TemplateRef });\n}\n","@if (chart.legendItems().length) {\n  <et-chart-legend [items]=\"chart.legendItems()\" [etProvideColor]=\"colorToken()\" class=\"et-bar-chart-legend\" />\n}\n\n<div [attr.data-orientation]=\"chart.orientation()\" class=\"et-bar-chart-figure\">\n  <et-chart-axis\n    [labels]=\"chart.valueLabels()\"\n    [orientation]=\"chart.isHorizontal() ? 'horizontal' : 'vertical'\"\n    [style.block-size.px]=\"chart.isHorizontal() ? null : chart.height()\"\n    class=\"et-bar-chart-value-axis\"\n  />\n\n  <div [style.block-size.px]=\"chart.height()\" class=\"et-bar-chart-plot\" etChartPlot>\n    @if (chart.plotWidth()) {\n      <svg\n        [attr.width]=\"chart.plotWidth()\"\n        [attr.height]=\"chart.height()\"\n        [attr.aria-label]=\"chart.label()\"\n        [style.--_et-bar-chart-baseline.px]=\"chart.baseline()\"\n        class=\"et-bar-chart-svg\"\n        role=\"group\"\n      >\n        <svg:g\n          [ticks]=\"chart.ticks()\"\n          [direction]=\"chart.isHorizontal() ? 'vertical' : 'horizontal'\"\n          [length]=\"chart.isHorizontal() ? chart.height() : chart.plotWidth()\"\n          et-chart-grid\n        />\n\n        <svg:g [etProvideColor]=\"colorToken()\" class=\"et-bar-chart-bars\">\n          @for (bar of chart.bars(); track bar.key) {\n            <svg:g\n              [etChartMark]=\"barTooltips()[bar.index] ?? null\"\n              [etChartMarkDescription]=\"bar.valueText\"\n              [etChartMarkAnchor]=\"anchor\"\n              [etChartMarkPlacement]=\"bar.placement\"\n              [etProvideColor]=\"bar.colorToken\"\n              [attr.aria-label]=\"bar.name\"\n              [attr.data-negative]=\"bar.isNegative ? '' : null\"\n              class=\"et-bar-chart-bar\"\n            >\n              <svg:rect\n                [attr.x]=\"bar.target.x\"\n                [attr.y]=\"bar.target.y\"\n                [attr.width]=\"bar.target.width\"\n                [attr.height]=\"bar.target.height\"\n                class=\"et-bar-chart-bar-target\"\n                rx=\"4\"\n              />\n              <svg:path [attr.d]=\"bar.path\" class=\"et-bar-chart-bar-mark\" />\n              <svg:rect\n                #anchor\n                [attr.x]=\"bar.anchor.x\"\n                [attr.y]=\"bar.anchor.y\"\n                [attr.width]=\"bar.anchor.width\"\n                [attr.height]=\"bar.anchor.height\"\n                class=\"et-bar-chart-bar-anchor\"\n              />\n            </svg:g>\n          }\n        </svg:g>\n      </svg>\n    }\n  </div>\n\n  <et-chart-axis\n    [labels]=\"chart.categoryLabels()\"\n    [orientation]=\"chart.isHorizontal() ? 'vertical' : 'horizontal'\"\n    [style.block-size.px]=\"chart.isHorizontal() ? chart.height() : null\"\n    class=\"et-bar-chart-category-axis\"\n  />\n</div>\n\n@for (bar of chart.bars(); track bar.key) {\n  <ng-template #barTooltip>\n    <et-chart-tooltip [value]=\"bar.valueText\" [label]=\"bar.datum.label\" [series]=\"bar.series?.label ?? null\" />\n  </ng-template>\n}\n\n<et-chart-data-table [caption]=\"chart.label()\" [model]=\"chart.table()\" />\n","import { Directive } from '@angular/core';\nimport { ChartPlotDirective } from './chart-plot.directive';\n\n/**\n * The bar chart's name for {@link ChartPlotDirective}: marks the element the bars are laid out in.\n *\n * @example\n * <div etBarChartPlot><svg>…</svg></div>\n */\n@Directive({\n  selector: '[etBarChartPlot]',\n})\nexport class BarChartPlotDirective extends ChartPlotDirective {}\n","// codes 5120-5139\nexport const LINE_CHART_ERROR_CODES = {\n  /** A line chart's `data` mixes `Date` and `string` x values. */\n  MIXED_X_TYPES: 5120,\n} as const;\n","import { stackValues } from './chart-stack';\n\nexport type ChartLinePoint = {\n  x: number;\n  y: number;\n};\n\nexport type ChartSeriesBand = {\n  start: number;\n  end: number;\n};\n\n/** `positions` must be ascending. */\nexport const findNearestIndex = (positions: readonly number[], x: number) => {\n  if (!positions.length) return -1;\n\n  let low = 0;\n  let high = positions.length - 1;\n\n  while (low < high) {\n    const mid = (low + high) >> 1;\n\n    if ((positions[mid] ?? 0) < x) low = mid + 1;\n    else high = mid;\n  }\n\n  const before = low - 1;\n\n  if (before >= 0 && x - (positions[before] ?? 0) <= (positions[low] ?? 0) - x) return before;\n\n  return low;\n};\n\nexport const createSliceBounds = (positions: readonly number[], width: number) =>\n  positions.map((position, index) => {\n    const previous = positions[index - 1];\n    const next = positions[index + 1];\n    const start = previous === undefined ? 0 : (previous + position) / 2;\n    const end = next === undefined ? width : (position + next) / 2;\n\n    return { start, width: Math.max(0, end - start) };\n  });\n\nexport const splitLineSegments = <T>(points: readonly (T | null)[]): T[][] => {\n  const segments: T[][] = [];\n  let current: T[] = [];\n\n  for (const point of points) {\n    if (point === null) {\n      if (current.length) segments.push(current);\n      current = [];\n    } else {\n      current.push(point);\n    }\n  }\n\n  if (current.length) segments.push(current);\n\n  return segments;\n};\n\nconst round = (value: number) => Math.round(value * 100) / 100;\n\n/** A single-point segment draws nothing - render it as a dot. */\nexport const createLinePath = (segments: readonly (readonly ChartLinePoint[])[]) =>\n  segments\n    .filter((segment) => segment.length > 1)\n    .map((segment) => segment.map((point, index) => `${index ? 'L' : 'M'}${round(point.x)},${round(point.y)}`).join(''))\n    .join('');\n\nexport const createAreaPath = (segments: readonly (readonly { x: number; y0: number; y1: number }[])[]) =>\n  segments\n    .filter((segment) => segment.length > 1)\n    .map((segment) => {\n      const upper = segment.map((point, index) => `${index ? 'L' : 'M'}${round(point.x)},${round(point.y1)}`).join('');\n      const lower = [...segment]\n        .reverse()\n        .map((point) => `L${round(point.x)},${round(point.y0)}`)\n        .join('');\n\n      return `${upper}${lower}Z`;\n    })\n    .join('');\n\n/** A missing value has no band of its own, and stacks as zero for the series above it. */\nexport const createSeriesBands = (options: {\n  rows: readonly (readonly (number | null)[])[];\n  seriesCount: number;\n  stacked: boolean;\n}): (ChartSeriesBand | null)[][] => {\n  const { rows, seriesCount, stacked } = options;\n  const bands = Array.from({ length: seriesCount }, () => [] as (ChartSeriesBand | null)[]);\n\n  for (const values of rows) {\n    const segments = stacked ? stackValues(values) : null;\n\n    for (let series = 0; series < seriesCount; series++) {\n      const value = values[series] ?? null;\n      const segment = segments?.[series];\n\n      bands[series]?.push(\n        value === null ? null : segment ? { start: segment.start, end: segment.end } : { start: 0, end: value },\n      );\n    }\n  }\n\n  return bands;\n};\n\nexport const bandExtent = (bands: readonly (readonly (ChartSeriesBand | null)[])[]) =>\n  bands.flatMap((series) => series.flatMap((band) => (band ? [band.start, band.end] : [])));\n","export type ChartTimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\n\nexport type ChartTimeInterval = {\n  unit: ChartTimeUnit;\n  step: number;\n};\n\nexport type ChartTimeTick = {\n  value: number;\n  text: string;\n};\n\nexport type ChartTimeTicks = {\n  interval: ChartTimeInterval;\n  ticks: ChartTimeTick[];\n};\n\nexport type ChartTimeTicksOptions = {\n  domain: readonly [number, number];\n  count: number;\n  timeZone: string;\n  locale: string;\n};\n\nexport type ChartZonedFields = {\n  year: number;\n  month: number;\n  day: number;\n  hour: number;\n  minute: number;\n  second: number;\n};\n\nconst SECOND = 1000;\n\nconst UNIT_DURATION: Record<ChartTimeUnit, number> = {\n  second: SECOND,\n  minute: 60_000,\n  hour: 3_600_000,\n  day: 86_400_000,\n  week: 604_800_000,\n  month: 2_592_000_000,\n  year: 31_536_000_000,\n};\n\nconst INTERVALS: readonly ChartTimeInterval[] = [\n  { unit: 'second', step: 1 },\n  { unit: 'second', step: 5 },\n  { unit: 'second', step: 15 },\n  { unit: 'second', step: 30 },\n  { unit: 'minute', step: 1 },\n  { unit: 'minute', step: 5 },\n  { unit: 'minute', step: 15 },\n  { unit: 'minute', step: 30 },\n  { unit: 'hour', step: 1 },\n  { unit: 'hour', step: 3 },\n  { unit: 'hour', step: 6 },\n  { unit: 'hour', step: 12 },\n  { unit: 'day', step: 1 },\n  { unit: 'day', step: 2 },\n  { unit: 'week', step: 1 },\n  { unit: 'month', step: 1 },\n  { unit: 'month', step: 3 },\n  { unit: 'month', step: 6 },\n];\n\nconst MAX_TICKS = 1000;\n\nconst fieldFormats = /* @__PURE__ */ new Map<string, Intl.DateTimeFormat>();\n\nconst fieldFormat = (timeZone: string) => {\n  let format = fieldFormats.get(timeZone);\n\n  if (!format) {\n    format = new Intl.DateTimeFormat('en-US', {\n      timeZone,\n      hourCycle: 'h23',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric',\n    });\n    fieldFormats.set(timeZone, format);\n  }\n\n  return format;\n};\n\n/** `month` is zero-based. */\nexport const zonedFields = (instant: number, timeZone: string): ChartZonedFields => {\n  const parts: Record<string, number> = {};\n\n  for (const part of fieldFormat(timeZone).formatToParts(instant)) {\n    if (part.type !== 'literal') parts[part.type] = Number(part.value);\n  }\n\n  return {\n    year: parts['year'] ?? 1970,\n    month: (parts['month'] ?? 1) - 1,\n    day: parts['day'] ?? 1,\n    hour: (parts['hour'] ?? 0) % 24,\n    minute: parts['minute'] ?? 0,\n    second: parts['second'] ?? 0,\n  };\n};\n\nconst wallClock = (fields: ChartZonedFields) =>\n  Date.UTC(fields.year, fields.month, fields.day, fields.hour, fields.minute, fields.second);\n\nconst zoneOffset = (instant: number, timeZone: string) => {\n  const whole = instant - (((instant % SECOND) + SECOND) % SECOND);\n\n  return wallClock(zonedFields(whole, timeZone)) - whole;\n};\n\n/** Fields out of range roll over. A wall clock a daylight-saving jump skipped resolves to the instant after the jump. */\nexport const instantFromZonedFields = (fields: ChartZonedFields, timeZone: string) => {\n  const guess = wallClock(fields);\n  const firstOffset = zoneOffset(guess, timeZone);\n  const instant = guess - firstOffset;\n  const secondOffset = zoneOffset(instant, timeZone);\n\n  return secondOffset === firstOffset ? instant : guess - secondOffset;\n};\n\nconst weekdayOf = (fields: ChartZonedFields) => new Date(Date.UTC(fields.year, fields.month, fields.day)).getUTCDay();\n\nconst floorFields = (fields: ChartZonedFields, interval: ChartTimeInterval): ChartZonedFields => {\n  const { step } = interval;\n  const floorTo = (value: number) => Math.floor(value / step) * step;\n\n  switch (interval.unit) {\n    case 'second':\n      return { ...fields, second: floorTo(fields.second) };\n    case 'minute':\n      return { ...fields, minute: floorTo(fields.minute), second: 0 };\n    case 'hour':\n      return { ...fields, hour: floorTo(fields.hour), minute: 0, second: 0 };\n    case 'day':\n      return { ...fields, hour: 0, minute: 0, second: 0 };\n    case 'week':\n      return { ...fields, day: fields.day - ((weekdayOf(fields) + 6) % 7), hour: 0, minute: 0, second: 0 };\n    case 'month':\n      return { ...fields, month: floorTo(fields.month), day: 1, hour: 0, minute: 0, second: 0 };\n    case 'year':\n      return { year: floorTo(fields.year), month: 0, day: 1, hour: 0, minute: 0, second: 0 };\n  }\n};\n\nconst isFixedDuration = (interval: ChartTimeInterval) =>\n  interval.unit === 'second' || interval.unit === 'minute' || (interval.unit === 'hour' && interval.step === 1);\n\nconst advanceFields = (fields: ChartZonedFields, interval: ChartTimeInterval & { times: number }): ChartZonedFields => {\n  const amount = interval.step * interval.times;\n\n  switch (interval.unit) {\n    case 'hour':\n      return { ...fields, hour: fields.hour + amount };\n    case 'day':\n      return { ...fields, day: fields.day + amount };\n    case 'week':\n      return { ...fields, day: fields.day + amount * 7 };\n    case 'month':\n      return { ...fields, month: fields.month + amount };\n    default:\n      return { ...fields, year: fields.year + amount };\n  }\n};\n\nconst niceYearStep = (years: number, count: number) => {\n  const raw = Math.max(1, years / Math.max(1, count));\n  const magnitude = 10 ** Math.floor(Math.log10(raw));\n  const error = raw / magnitude;\n\n  if (error > 5) return magnitude * 10;\n  if (error > 2) return magnitude * 5;\n  if (error > 1) return magnitude * 2;\n\n  return magnitude;\n};\n\nexport const pickTimeInterval = (span: number, count: number): ChartTimeInterval => {\n  const target = Math.max(1, count);\n  const interval = INTERVALS.find((entry) => span / (UNIT_DURATION[entry.unit] * entry.step) <= target);\n\n  return interval ?? { unit: 'year', step: niceYearStep(span / UNIT_DURATION.year, target) };\n};\n\nexport const createTimeTickValues = (options: {\n  domain: readonly [number, number];\n  interval: ChartTimeInterval;\n  timeZone: string;\n}): number[] => {\n  const { domain, interval, timeZone } = options;\n  const [start, end] = domain;\n  const values: number[] = [];\n\n  if (isFixedDuration(interval)) {\n    const duration = UNIT_DURATION[interval.unit] * interval.step;\n    const wall = start + zoneOffset(start, timeZone);\n    let value = start - (((wall % duration) + duration) % duration);\n\n    for (let i = 0; value <= end && i < MAX_TICKS; i++, value += duration) {\n      if (value >= start) values.push(value);\n    }\n\n    return values;\n  }\n\n  const origin = floorFields(zonedFields(start, timeZone), interval);\n\n  for (let i = 0; i < MAX_TICKS; i++) {\n    const value = instantFromZonedFields(advanceFields(origin, { ...interval, times: i }), timeZone);\n\n    if (value > end) break;\n    if (value >= start && value > (values.at(-1) ?? -Infinity)) values.push(value);\n  }\n\n  return values;\n};\n\nconst labelFormats = /* @__PURE__ */ new Map<string, Intl.DateTimeFormat>();\n\ntype LabelFormatOptions = { locale: string; timeZone: string; options: Intl.DateTimeFormatOptions };\n\nconst labelFormat = ({ locale, timeZone, options }: LabelFormatOptions) => {\n  const key = `${locale}|${timeZone}|${JSON.stringify(options)}`;\n  let format = labelFormats.get(key);\n\n  if (!format) {\n    format = new Intl.DateTimeFormat(locale, { ...options, timeZone });\n    labelFormats.set(key, format);\n  }\n\n  return format;\n};\n\nconst YEAR: Intl.DateTimeFormatOptions = { year: 'numeric' };\nconst MONTH: Intl.DateTimeFormatOptions = { month: 'short' };\nconst MONTH_DAY: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric' };\nconst TIME: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: '2-digit' };\nconst TIME_SECONDS: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: '2-digit', second: '2-digit' };\n\nconst tickLabelOptions = (interval: ChartTimeInterval, fields: ChartZonedFields): Intl.DateTimeFormatOptions => {\n  switch (interval.unit) {\n    case 'year':\n      return YEAR;\n    case 'month':\n      return fields.month === 0 ? YEAR : MONTH;\n    case 'day':\n    case 'week':\n      return MONTH_DAY;\n    case 'second':\n      return TIME_SECONDS;\n    default:\n      return fields.hour === 0 && fields.minute === 0 ? MONTH_DAY : TIME;\n  }\n};\n\nexport const createTimeTicks = (options: ChartTimeTicksOptions): ChartTimeTicks => {\n  const { domain, count, timeZone, locale } = options;\n  const interval = pickTimeInterval(domain[1] - domain[0], count);\n  const ticks = createTimeTickValues({ domain, interval, timeZone }).map((value) => ({\n    value,\n    text: labelFormat({ locale, timeZone, options: tickLabelOptions(interval, zonedFields(value, timeZone)) }).format(\n      value,\n    ),\n  }));\n\n  return { interval, ticks };\n};\n\nexport const createTimeValueFormatter = (options: {\n  instants: readonly number[];\n  timeZone: string;\n  locale: string;\n}): ((instant: number) => string) => {\n  const { instants, timeZone, locale } = options;\n  const fields = instants.map((instant) => zonedFields(instant, timeZone));\n  const atMidnight = fields.every((entry) => entry.hour === 0 && entry.minute === 0 && entry.second === 0);\n  const atMonthStart = atMidnight && fields.every((entry) => entry.day === 1);\n\n  const format = labelFormat({\n    locale,\n    timeZone,\n    options: atMonthStart\n      ? { month: 'long', year: 'numeric' }\n      : atMidnight\n        ? { dateStyle: 'medium' }\n        : { dateStyle: 'medium', timeStyle: 'short' },\n  });\n\n  return (instant) => format.format(instant);\n};\n\nexport const viewerTimeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone;\n","import {\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  inject,\n  input,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  injectColorPalette,\n  injectHostElement,\n  injectLocale,\n  RegisteredColorThemeName,\n  RuntimeError,\n} from '@ethlete/core';\nimport { filter, fromEvent, tap } from 'rxjs';\nimport { ChartAxisLabel, ChartLegendItem, ChartRect, ChartTableModel, ChartTick } from '../chart.types';\nimport { LINE_CHART_ERROR_CODES } from '../line-chart-errors';\nimport { CHART_PLOT_HOST, ChartPlotDirective, ChartPlotHost } from './chart-plot.directive';\nimport { ChartValueFormatter, resolveChartValueFormatter } from './internals/chart-format';\nimport {\n  bandExtent,\n  createAreaPath,\n  createLinePath,\n  createSeriesBands,\n  createSliceBounds,\n  findNearestIndex,\n  splitLineSegments,\n} from './internals/chart-line';\nimport { assertChartPlot } from './internals/chart-plot-check';\nimport { createLinearScale, createValueTicks } from './internals/chart-scale';\nimport { hasSharedSeriesColor, resolveChartSeriesColors } from './internals/chart-series';\nimport { createTimeTicks, createTimeValueFormatter, viewerTimeZone } from './internals/chart-time-scale';\n\n/** Where a point sits along the x axis: a category name, or an instant on a time axis. */\nexport type LineChartX = string | Date;\n\n/** One point of a single-series chart. A `null` or missing value breaks the line. */\nexport type LineChartDatum = {\n  x: LineChartX;\n  value: number | null | undefined;\n};\n\n/** One x of a multi-series chart: a value per series `key`. A `null` or missing value breaks that series' line. */\nexport type LineChartSeriesDatum = {\n  x: LineChartX;\n  values: Readonly<Record<string, number | null | undefined>>;\n};\n\n/** A series of a multi-series chart. Its values are read from each datum's `values[key]`. */\nexport type LineChartSeries = {\n  key: string;\n  /** Names the series in the legend, the tooltip, the description and the table header. */\n  label: string;\n  /** The color theme the series is drawn in. @default the palette entry at the series' position, else the accent */\n  colorToken?: RegisteredColorThemeName | null;\n};\n\n/** Formats a value for the axis, the tooltip and the table. */\nexport type LineChartValueFormatter = ChartValueFormatter;\n\n/** Formats an instant of a time axis for the tooltip, the accessible names and the table. */\nexport type LineChartDateFormatter = (date: Date) => string;\n\n/** A value-axis tick. `y` is its offset from the top of the plot. */\nexport type LineChartTick = ChartTick & {\n  y: number;\n};\n\n/** A point of a line, in plot pixels. */\nexport type LineChartPoint = {\n  key: string;\n  x: number;\n  y: number;\n  /** Whether the point has no defined neighbour, so no line segment shows it. Draw it as a dot. */\n  isIsolated: boolean;\n};\n\n/** One series' marks, ready to render. */\nexport type LineChartLine = {\n  key: string;\n  seriesIndex: number;\n  /** The series; `null` in a single-series chart. */\n  series: LineChartSeries | null;\n  /** The color theme the series is drawn in; `null` takes the surrounding accent. */\n  colorToken: RegisteredColorThemeName | null;\n  /** The line through every run of defined points. Missing values leave a gap. */\n  linePath: string;\n  /** The fill between the line and the baseline - or the series below, when stacked. */\n  areaPath: string;\n  points: LineChartPoint[];\n};\n\n/** One series' value at a slice's x. */\nexport type LineChartSliceEntry = {\n  key: string;\n  series: LineChartSeries | null;\n  colorToken: RegisteredColorThemeName | null;\n  value: number;\n  valueText: string;\n  /** The point's offset from the top of the plot. */\n  y: number;\n};\n\n/** Everything the chart shows at one x: the hover, tap and focus target that reads out every series. */\nexport type LineChartSlice = {\n  key: string;\n  index: number;\n  /** The x, as given in `data`. */\n  x: LineChartX;\n  /** The x's offset from the left of the plot. */\n  position: number;\n  /** The x as text, e.g. `\"Mar 3, 2025\"` or the category. */\n  label: string;\n  /** The series with a value at this x, in series order. */\n  entries: LineChartSliceEntry[];\n  /** The hover, tap and focus target: the stretch of the plot closer to this x than to its neighbours. */\n  target: ChartRect;\n  /** A zero-size rect at the topmost point, for the tooltip to point at. */\n  anchor: ChartRect;\n  /** The values as text, e.g. `\"Online 1,210, Box office 450\"`. */\n  description: string;\n};\n\ntype NormalizedRow = {\n  x: LineChartX;\n  time: number | null;\n  values: (number | null)[];\n};\n\nconst TIME_TICK_SPACING = 72;\nconst CATEGORY_LABEL_SPACING = 48;\nconst EMPTY_DESCRIPTION = '–';\n\nconst finiteOrNull = (value: number | null | undefined) =>\n  typeof value === 'number' && Number.isFinite(value) ? value : null;\n\n/**\n * Headless line chart: turns `data` into line and area paths, value-axis ticks, x-axis labels, one\n * slice per x that reads out every series, legend entries and the strings a table view needs. `Date`\n * x values get a time axis; strings get evenly spaced categories. The element marked `etChartPlot`\n * reports the width the x axis spans; each `etLineChartSlice` element is a hover, tap and arrow-key\n * target.\n *\n * @example\n * <div etLineChart [data]=\"data\" label=\"Visitors per day\">\n *   <div etChartPlot><svg>…</svg></div>\n * </div>\n */\n@Directive({\n  selector: '[etLineChart]',\n  exportAs: 'etLineChart',\n  providers: [{ provide: CHART_PLOT_HOST, useExisting: LineChartDirective }],\n})\nexport class LineChartDirective implements ChartPlotHost {\n  private palette = injectColorPalette({ optional: true });\n  private locale = injectLocale();\n  private hostElement = injectHostElement();\n  private destroyRef = inject(DestroyRef);\n\n  /**\n   * The points, in order. `{ x, value }` per point for one series; with `series`, `{ x, values }`\n   * holding a value per series key. `Date` x values are sorted by time.\n   */\n  public data = input.required<readonly LineChartDatum[] | readonly LineChartSeriesDatum[]>();\n\n  /** The series to draw from each datum's `values`. Empty draws one series from each datum's `value`. @default [] */\n  public series = input<readonly LineChartSeries[]>([]);\n\n  /** Names the chart for assistive tech and captions its table view. */\n  public label = input.required<string>();\n\n  /** Fills the space under each line. @default false */\n  public area = input(false, { transform: booleanAttribute });\n\n  /** Stacks the series on each other - positives up, negatives down - instead of drawing each from zero. @default false */\n  public stacked = input(false, { transform: booleanAttribute });\n\n  /** Draws a dot at every point, not only at points no line segment shows. @default false */\n  public points = input(false, { transform: booleanAttribute });\n\n  /** Height of the plot area in px, excluding the axis labels. @default 240 */\n  public height = input(240, { transform: numberAttribute });\n\n  /** Roughly how many value-axis intervals to draw; the axis rounds to a clean 1, 2 or 5 step. @default 5 */\n  public tickCount = input(5, { transform: numberAttribute });\n\n  /** Formats values for the axis, the tooltip and the table. @default the app locale's number format */\n  public valueFormatter = input<LineChartValueFormatter | null>(null);\n\n  /**\n   * Formats a time axis' instants for the tooltip, the accessible names and the table. Axis ticks keep\n   * their own format. @default the app locale's date, with the time when an instant is not a midnight\n   */\n  public dateFormatter = input<LineChartDateFormatter | null>(null);\n\n  /** The IANA time zone a time axis is laid out and labelled in. @default the viewer's time zone */\n  public timeZone = input<string | null>(null);\n\n  /** The table view's x column header. @default 'Date' on a time axis, else 'Category' */\n  public xHeader = input<string | null>(null);\n\n  /** The table view's value column header in a single-series chart. @default 'Value' */\n  public valueHeader = input('Value');\n\n  public formatValue = computed(() => resolveChartValueFormatter(this.valueFormatter(), this.locale.currentLocale()));\n\n  /**\n   * The element the chart is laid out in. Set by `etChartPlot`.\n   *\n   * @internal\n   */\n  public plot = signal<ChartPlotDirective | null>(null);\n\n  public plotWidth = computed(() => this.plot()?.width() ?? 0);\n\n  /** Whether the x values are instants, laid out on a time axis. */\n  public isTime = computed(() => {\n    const data = this.data();\n\n    return data.length > 0 && data.every((datum) => datum.x instanceof Date);\n  });\n\n  public isStacked = computed(() => this.stacked() && this.series().length > 1);\n\n  /** The color theme per entry of `series`, resolved against the palette. */\n  public seriesColors = computed(() => resolveChartSeriesColors(this.series(), this.palette));\n\n  /** The legend entries - one per series when there are two or more, else none. */\n  public legendItems = computed<ChartLegendItem[]>(() => {\n    const series = this.series();\n    const colors = this.seriesColors();\n\n    if (series.length < 2) return [];\n\n    return series.map((entry, index) => ({ key: entry.key, label: entry.label, colorToken: colors[index] ?? null }));\n  });\n\n  private requestedTabStop = signal(0);\n  private sliceHandles = new Set<LineChartSliceHandle>();\n\n  private resolvedTimeZone = computed(() => this.timeZone() ?? viewerTimeZone());\n\n  private rows = computed<NormalizedRow[]>(() => {\n    const series = this.series();\n    const isTime = this.isTime();\n\n    const rows = series.length\n      ? (this.data() as readonly LineChartSeriesDatum[]).map((datum) => ({\n          x: datum.x,\n          values: series.map((entry) => finiteOrNull(datum.values?.[entry.key])),\n        }))\n      : (this.data() as readonly LineChartDatum[]).map((datum) => ({\n          x: datum.x,\n          values: [finiteOrNull(datum.value)],\n        }));\n\n    const normalized = rows.map((row) => ({ ...row, time: isTime ? (row.x as Date).getTime() : null }));\n\n    return isTime ? normalized.sort((a, b) => (a.time ?? 0) - (b.time ?? 0)) : normalized;\n  });\n\n  /** The index of the slice that takes the chart's one tab stop. */\n  public tabStopIndex = computed(() => Math.min(this.requestedTabStop(), Math.max(0, this.rows().length - 1)));\n\n  private bands = computed(() =>\n    createSeriesBands({\n      rows: this.rows().map((row) => row.values),\n      seriesCount: Math.max(1, this.series().length),\n      stacked: this.isStacked(),\n    }),\n  );\n\n  public valueTicks = computed(() => createValueTicks(bandExtent(this.bands()), this.tickCount()));\n\n  private valueScale = computed(() => createLinearScale(this.valueTicks().domain, [this.height(), 0]));\n\n  /** The zero line's offset from the top of the plot. */\n  public baseline = computed(() => this.valueScale()(0));\n\n  public ticks = computed<LineChartTick[]>(() => {\n    const scale = this.valueScale();\n    const format = this.formatValue();\n\n    return this.valueTicks().ticks.map((value) => {\n      const position = scale(value);\n\n      return { value, text: format(value), position, y: position };\n    });\n  });\n\n  /** The value-axis labels, at their ticks. */\n  public valueLabels = computed<ChartAxisLabel[]>(() =>\n    this.ticks().map((tick) => ({ key: tick.value, text: tick.text, position: tick.position })),\n  );\n\n  private timeDomain = computed<readonly [number, number]>(() => {\n    const times = this.rows().map((row) => row.time ?? 0);\n\n    return times.length ? [Math.min(...times), Math.max(...times)] : [0, 0];\n  });\n\n  /** Each x's offset from the left of the plot, in `data` order (time order on a time axis). */\n  public positions = computed<number[]>(() => {\n    const rows = this.rows();\n    const width = this.plotWidth();\n\n    if (!this.isTime()) {\n      const step = rows.length ? width / rows.length : 0;\n\n      return rows.map((_, index) => index * step + step / 2);\n    }\n\n    const domain = this.timeDomain();\n\n    if (domain[0] === domain[1]) return rows.map(() => width / 2);\n\n    const scale = createLinearScale(domain, [0, width]);\n\n    return rows.map((row) => scale(row.time ?? 0));\n  });\n\n  private formatX = computed<(row: NormalizedRow) => string>(() => {\n    if (!this.isTime()) return (row) => String(row.x);\n\n    const custom = this.dateFormatter();\n\n    if (custom) return (row) => custom(row.x as Date);\n\n    const format = createTimeValueFormatter({\n      instants: this.rows().map((row) => row.time ?? 0),\n      timeZone: this.resolvedTimeZone(),\n      locale: this.locale.currentLocale(),\n    });\n\n    return (row) => format(row.time ?? 0);\n  });\n\n  /** The x-axis labels: time ticks on a time axis, else every category that has room. */\n  public xLabels = computed<ChartAxisLabel[]>(() => {\n    const width = this.plotWidth();\n\n    if (this.isTime()) {\n      const domain = this.timeDomain();\n\n      if (domain[0] === domain[1]) {\n        const row = this.rows()[0];\n\n        return row ? [{ key: 0, text: this.formatX()(row), position: width / 2 }] : [];\n      }\n\n      const scale = createLinearScale(domain, [0, width]);\n      const { ticks } = createTimeTicks({\n        domain,\n        count: Math.max(2, Math.round(width / TIME_TICK_SPACING)),\n        timeZone: this.resolvedTimeZone(),\n        locale: this.locale.currentLocale(),\n      });\n\n      return ticks.map((tick) => ({ key: tick.value, text: tick.text, position: scale(tick.value) }));\n    }\n\n    const rows = this.rows();\n    const positions = this.positions();\n    const step = rows.length ? width / rows.length : 0;\n    const stride = step > 0 ? Math.max(1, Math.ceil(CATEGORY_LABEL_SPACING / step)) : 1;\n    const format = this.formatX();\n\n    return rows.flatMap((row, index) =>\n      index % stride ? [] : [{ key: index, text: format(row), position: positions[index] ?? 0, extent: step * stride }],\n    );\n  });\n\n  public lines = computed<LineChartLine[]>(() => {\n    const series = this.series();\n    const colors = this.seriesColors();\n    const positions = this.positions();\n    const scale = this.valueScale();\n\n    return this.bands().map((bands, seriesIndex) => {\n      const entry = series[seriesIndex] ?? null;\n      const key = entry?.key ?? '';\n      const coords = bands.map((band, index) =>\n        band ? { x: positions[index] ?? 0, y0: scale(band.start), y1: scale(band.end), index } : null,\n      );\n      const segments = splitLineSegments(coords);\n\n      return {\n        key,\n        seriesIndex,\n        series: entry,\n        colorToken: entry ? (colors[seriesIndex] ?? null) : null,\n        linePath: createLinePath(segments.map((segment) => segment.map((point) => ({ x: point.x, y: point.y1 })))),\n        areaPath: createAreaPath(segments),\n        points: segments.flatMap((segment) =>\n          segment.map((point) => ({\n            key: `${point.index}:${key}`,\n            x: point.x,\n            y: point.y1,\n            isIsolated: segment.length === 1,\n          })),\n        ),\n      };\n    });\n  });\n\n  public slices = computed<LineChartSlice[]>(() => {\n    const rows = this.rows();\n    const series = this.series();\n    const colors = this.seriesColors();\n    const positions = this.positions();\n    const bounds = createSliceBounds(positions, this.plotWidth());\n    const scale = this.valueScale();\n    const bands = this.bands();\n    const format = this.formatValue();\n    const formatX = this.formatX();\n    const height = this.height();\n    const multi = series.length > 1;\n\n    return rows.map((row, index) => {\n      const entries = row.values.flatMap((value, seriesIndex): LineChartSliceEntry[] => {\n        const band = bands[seriesIndex]?.[index];\n\n        if (value === null || !band) return [];\n\n        const entry = series[seriesIndex] ?? null;\n\n        return [\n          {\n            key: entry?.key ?? '',\n            series: entry,\n            colorToken: entry ? (colors[seriesIndex] ?? null) : null,\n            value,\n            valueText: format(value),\n            y: scale(band.end),\n          },\n        ];\n      });\n      const position = positions[index] ?? 0;\n      const bound = bounds[index] ?? { start: 0, width: 0 };\n      const top = entries.length ? Math.min(...entries.map((entry) => entry.y)) : 0;\n      const description = entries.length\n        ? entries\n            .map((entry) => (multi && entry.series ? `${entry.series.label} ${entry.valueText}` : entry.valueText))\n            .join(', ')\n        : EMPTY_DESCRIPTION;\n\n      return {\n        key: row.time === null ? `${index}:${String(row.x)}` : String(row.time),\n        index,\n        x: row.x,\n        position,\n        label: formatX(row),\n        entries,\n        target: { x: bound.start, y: 0, width: bound.width, height },\n        anchor: { x: position, y: top, width: 0, height: 0 },\n        description,\n      };\n    });\n  });\n\n  /** The data as a table: a row per x, a column per series. */\n  public table = computed<ChartTableModel>(() => {\n    const series = this.series();\n    const format = this.formatValue();\n    const formatX = this.formatX();\n    const xHeader = this.xHeader() ?? (this.isTime() ? 'Date' : 'Category');\n\n    return {\n      columns: [xHeader, ...(series.length ? series.map((entry) => entry.label) : [this.valueHeader()])],\n      rows: this.rows().map((row) => ({\n        header: formatX(row),\n        cells: row.values.map((value) => (value === null ? '' : format(value))),\n      })),\n    };\n  });\n\n  constructor() {\n    assertChartPlot(this, 'LineChartDirective');\n\n    fromEvent<PointerEvent>(this.hostElement, 'pointermove')\n      .pipe(\n        filter((event) => event.pointerType === 'touch'),\n        tap((event) => this.showSliceAt(event.clientX)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    if (ngDevMode) {\n      effect(() => {\n        const data = this.data();\n\n        if (!this.isTime() && data.some((datum) => datum.x instanceof Date)) {\n          throw new RuntimeError(\n            LINE_CHART_ERROR_CODES.MIXED_X_TYPES,\n            '[LineChartDirective] The data mixes Date and string x values. ' +\n              'Give every datum a Date for a time axis, or a string for categories.',\n          );\n        }\n      });\n\n      effect(() => {\n        const colors = this.seriesColors();\n\n        if (colors.length > 1 && hasSharedSeriesColor(colors)) {\n          console.warn(\n            '[LineChartDirective] Two or more series share one color. Provide a palette with provideColorPalette() ' +\n              'or give each series its own colorToken.',\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public registerSlice(slice: LineChartSliceHandle) {\n    this.sliceHandles.add(slice);\n\n    return () => this.sliceHandles.delete(slice);\n  }\n\n  /** @internal */\n  public markTabStop(index: number) {\n    this.requestedTabStop.set(index);\n  }\n\n  /** Moves focus to the slice at `index`, clamped to the first and last. */\n  public focusSlice(index: number) {\n    const last = this.rows().length - 1;\n    const target = Math.max(0, Math.min(last, index));\n\n    this.requestedTabStop.set(target);\n\n    for (const slice of this.sliceHandles) {\n      if (slice.index() === target) slice.focus();\n    }\n  }\n\n  private showSliceAt(clientX: number) {\n    const handles = [...this.sliceHandles];\n\n    if (!handles.length) return;\n\n    const plotLeft = Math.min(...handles.map((slice) => slice.element.getBoundingClientRect().left));\n    const index = findNearestIndex(this.positions(), clientX - plotLeft);\n\n    for (const slice of handles) {\n      if (slice.index() === index) slice.showTooltip();\n      else slice.hideTooltip();\n    }\n  }\n}\n\n/** @internal */\nexport type LineChartSliceHandle = {\n  element: Element;\n  index: () => number;\n  focus: () => void;\n  showTooltip: () => void;\n  hideTooltip: () => void;\n};\n","import { computed, DestroyRef, Directive, inject, input, numberAttribute } from '@angular/core';\nimport { injectHostElement } from '@ethlete/core';\nimport { TooltipDirective } from '../../tooltip/headless/tooltip.directive';\nimport { LineChartDirective } from './line-chart.directive';\n\n/**\n * One x of an `etLineChart`: the hover, tap and focus target whose tooltip reads out every series.\n * The chart's slices share one tab stop; the arrow keys, Home and End move between them, and a touch\n * drag across the plot opens the slice under the finger.\n *\n * @example\n * @for (slice of chart.slices(); track slice.key) {\n *   <svg:g [etLineChartSlice]=\"slice.index\" [etLineChartSliceTooltip]=\"tooltip\" [etLineChartSliceDescription]=\"slice.description\">…</svg:g>\n * }\n */\n@Directive({\n  selector: '[etLineChartSlice]',\n  exportAs: 'etLineChartSlice',\n  hostDirectives: [\n    {\n      directive: TooltipDirective,\n      inputs: [\n        'etTooltip: etLineChartSliceTooltip',\n        'etTooltipAriaDescription: etLineChartSliceDescription',\n        'anchor: etLineChartSliceAnchor',\n        'placement: etLineChartSlicePlacement',\n        'showDelay: etLineChartSliceShowDelay',\n      ],\n    },\n  ],\n  host: {\n    role: 'img',\n    '[attr.tabindex]': 'isTabStop() ? 0 : -1',\n    '[attr.data-active]': 'tooltip.overlayRef() ? \"\" : null',\n    '(click)': 'tooltip.show()',\n    '(focus)': 'chart?.markTabStop(index())',\n    '(keydown)': 'moveFocus($event)',\n  },\n})\nexport class LineChartSliceDirective {\n  protected chart = inject(LineChartDirective, { optional: true });\n  protected tooltip = inject(TooltipDirective);\n  private element = injectHostElement<HTMLElement | SVGElement>();\n\n  /** The slice's position in the chart's `slices()`. */\n  public index = input.required({ alias: 'etLineChartSlice', transform: numberAttribute });\n\n  protected isTabStop = computed(() => (this.chart?.tabStopIndex() ?? 0) === this.index());\n\n  constructor() {\n    const unregister = this.chart?.registerSlice({\n      element: this.element,\n      index: this.index,\n      focus: () => this.element.focus(),\n      showTooltip: () => this.tooltip.show(),\n      hideTooltip: () => this.tooltip.hide(),\n    });\n\n    if (unregister) inject(DestroyRef).onDestroy(unregister);\n  }\n\n  protected moveFocus(event: KeyboardEvent) {\n    const chart = this.chart;\n\n    if (!chart) return;\n\n    const index = this.index();\n    const target =\n      event.key === 'ArrowLeft'\n        ? index - 1\n        : event.key === 'ArrowRight'\n          ? index + 1\n          : event.key === 'Home'\n            ? 0\n            : event.key === 'End'\n              ? Number.MAX_SAFE_INTEGER\n              : null;\n\n    if (target === null) return;\n\n    event.preventDefault();\n    chart.focusSlice(target);\n  }\n}\n","// codes 5140-5159\nexport const PIE_CHART_ERROR_CODES = {\n  /** A pie chart datum has a negative or non-finite `value`. It draws no slice and counts as 0. */\n  INVALID_VALUE: 5140,\n} as const;\n","import { ChartTooltipPlacement } from '../../chart.types';\n\nexport type ChartPoint = {\n  x: number;\n  y: number;\n};\n\n/** Angles are in radians, clockwise from 12 o'clock. */\nexport type ChartArcOptions = {\n  cx: number;\n  cy: number;\n  outerRadius: number;\n  innerRadius: number;\n  startAngle: number;\n  endAngle: number;\n  /** The width of the straight gap cut along each radial edge, split evenly between the two neighbours. */\n  gap: number;\n};\n\nconst TAU = 6.283185307179586;\nconst FULL_CIRCLE_EPSILON = 1e-9;\n\nconst formatCoordinate = (value: number) => {\n  const rounded = Math.round(value * 1000) / 1000;\n\n  return Object.is(rounded, -0) ? '0' : String(rounded);\n};\n\nconst formatPoint = (point: ChartPoint) => `${formatCoordinate(point.x)},${formatCoordinate(point.y)}`;\n\nexport type ChartPolarPoint = {\n  radius: number;\n  /** Radians, clockwise from 12 o'clock. */\n  angle: number;\n};\n\nexport const createArcPoint = (center: ChartPoint, polar: ChartPolarPoint): ChartPoint => ({\n  x: center.x + polar.radius * Math.sin(polar.angle),\n  y: center.y - polar.radius * Math.cos(polar.angle),\n});\n\nconst createCirclePath = (center: ChartPoint, options: { radius: number; sweep: 0 | 1 }) => {\n  const { radius, sweep } = options;\n  const top = formatPoint({ x: center.x, y: center.y - radius });\n  const bottom = formatPoint({ x: center.x, y: center.y + radius });\n  const r = formatCoordinate(radius);\n\n  return `M${top}A${r},${r} 0 1 ${sweep} ${bottom}A${r},${r} 0 1 ${sweep} ${top}Z`;\n};\n\n/** A gap wider than a thin slice is narrowed until the slice keeps 1px of outer arc. */\nexport const createArcPath = (options: ChartArcOptions) => {\n  const { outerRadius, startAngle, endAngle } = options;\n  const center = { x: options.cx, y: options.cy };\n  const innerRadius = Math.max(0, Math.min(options.innerRadius, outerRadius));\n  const sweep = endAngle - startAngle;\n\n  if (!(sweep > 0) || !(outerRadius > 0)) return '';\n\n  if (sweep >= TAU - FULL_CIRCLE_EPSILON) {\n    const outer = createCirclePath(center, { radius: outerRadius, sweep: 1 });\n\n    return innerRadius > 0 ? `${outer}${createCirclePath(center, { radius: innerRadius, sweep: 0 })}` : outer;\n  }\n\n  const minSweep = Math.min(sweep, 1 / outerRadius);\n  const halfGap = Math.max(0, options.gap) / 2;\n  const outerPad = Math.max(0, Math.min(Math.asin(Math.min(1, halfGap / outerRadius)), (sweep - minSweep) / 2));\n  const effectiveHalfGap = outerRadius * Math.sin(outerPad);\n\n  const outerStart = createArcPoint(center, { radius: outerRadius, angle: startAngle + outerPad });\n  const outerEnd = createArcPoint(center, { radius: outerRadius, angle: endAngle - outerPad });\n  const outerLarge = sweep - 2 * outerPad > Math.PI ? 1 : 0;\n  const r = formatCoordinate(outerRadius);\n  const outerArc = `M${formatPoint(outerStart)}A${r},${r} 0 ${outerLarge} 1 ${formatPoint(outerEnd)}`;\n\n  const apexDistance = effectiveHalfGap > 0 ? effectiveHalfGap / Math.sin(sweep / 2) : 0;\n\n  if (innerRadius <= apexDistance) {\n    const apex = createArcPoint(center, {\n      radius: Math.min(apexDistance, outerRadius),\n      angle: (startAngle + endAngle) / 2,\n    });\n\n    return `${outerArc}L${formatPoint(apex)}Z`;\n  }\n\n  const innerPad = Math.asin(Math.min(1, effectiveHalfGap / innerRadius));\n  const innerStart = createArcPoint(center, { radius: innerRadius, angle: startAngle + innerPad });\n  const innerEnd = createArcPoint(center, { radius: innerRadius, angle: endAngle - innerPad });\n  const innerLarge = sweep - 2 * innerPad > Math.PI ? 1 : 0;\n  const ri = formatCoordinate(innerRadius);\n\n  return `${outerArc}L${formatPoint(innerEnd)}A${ri},${ri} 0 ${innerLarge} 0 ${formatPoint(innerStart)}Z`;\n};\n\nexport const placementForAngle = (angle: number): ChartTooltipPlacement => {\n  const degrees = Math.round((((angle % TAU) + TAU) % TAU) * (180 / Math.PI) * 1e6) / 1e6;\n\n  if (degrees < 45 || degrees >= 315) return 'top';\n  if (degrees < 135) return 'right';\n  if (degrees < 225) return 'bottom';\n\n  return 'left';\n};\n\n/** Largest remainder rounding: the whole percentages always add up to exactly 100. */\nexport const createWholePercentages = (values: readonly number[]): number[] => {\n  const positive = values.map((value) => (Number.isFinite(value) && value > 0 ? value : 0));\n  const total = positive.reduce((sum, value) => sum + value, 0);\n\n  if (!(total > 0)) return positive.map(() => 0);\n\n  const exact = positive.map((value) => (value / total) * 100);\n  const floors = exact.map((value) => Math.floor(value));\n  let remaining = 100 - floors.reduce((sum, value) => sum + value, 0);\n\n  const byRemainder = exact\n    .map((value, index) => ({ index, remainder: value - Math.floor(value) }))\n    .filter((entry) => entry.remainder > 0)\n    .sort((a, b) => b.remainder - a.remainder || a.index - b.index);\n\n  for (const entry of byRemainder) {\n    if (remaining <= 0) break;\n\n    floors[entry.index] = (floors[entry.index] ?? 0) + 1;\n    remaining--;\n  }\n\n  return floors;\n};\n","import { computed, Directive, effect, input, numberAttribute, signal } from '@angular/core';\nimport { injectColorPalette, injectLocale, RegisteredColorThemeName, RuntimeError } from '@ethlete/core';\nimport { ChartTableModel, ChartTooltipPlacement } from '../chart.types';\nimport { PIE_CHART_ERROR_CODES } from '../pie-chart-errors';\nimport { CHART_PLOT_HOST, ChartPlotDirective, ChartPlotHost } from './chart-plot.directive';\nimport {\n  ChartPoint,\n  createArcPath,\n  createArcPoint,\n  createWholePercentages,\n  placementForAngle,\n} from './internals/chart-arc';\nimport { ChartValueFormatter, resolveChartValueFormatter } from './internals/chart-format';\nimport { assertChartPlot } from './internals/chart-plot-check';\nimport { resolveChartSeriesColors } from './internals/chart-series';\n\n/** One slice of a pie chart: its label and the non-negative value its angle encodes. */\nexport type PieChartDatum = {\n  label: string;\n  value: number;\n  /** The color theme the slice is drawn in. @default the palette entry at the slice's position, else a step of the accent */\n  colorToken?: RegisteredColorThemeName | null;\n};\n\n/** Formats a value for the legend, the tooltip, the centre total and the table. */\nexport type PieChartValueFormatter = ChartValueFormatter;\n\n/** A datum with its share of the total, as the legend and the table list it. */\nexport type PieChartEntry = {\n  key: string;\n  datum: PieChartDatum;\n  /** Position in `data`. */\n  index: number;\n  /** The color theme the slice is drawn in; `null` takes the surrounding accent at `accentMix`. */\n  colorToken: RegisteredColorThemeName | null;\n  /** How much of the accent a slice without a color theme is mixed with the surface, in percent; `null` for a slice with one. */\n  accentMix: number | null;\n  /** The whole-number share of the total. The shares of all entries add up to 100. */\n  percent: number;\n  valueText: string;\n  percentText: string;\n};\n\n/** A drawn slice with its geometry in plot pixels, ready to render. Entries with a value of 0 draw none. */\nexport type PieChartSlice = PieChartEntry & {\n  /** Clockwise from 12 o'clock, in radians. */\n  startAngle: number;\n  endAngle: number;\n  path: string;\n  /** The midpoint of the slice's outer arc, for the tooltip to point at. */\n  anchor: ChartPoint;\n  /** The side of `anchor` the tooltip opens on - the side of the circle the slice sits on. */\n  placement: ChartTooltipPlacement;\n  /** The slice's accessible name: its label. */\n  name: string;\n  /** What assistive tech reads as the slice's description, e.g. `\"1,240 (32%)\"`. */\n  description: string;\n};\n\nconst SLICE_GAP = 2;\nconst MAX_INNER_RADIUS = 0.9;\nconst MIN_ACCENT_MIX = 40;\n\nconst drawnValue = (value: number) => (Number.isFinite(value) && value > 0 ? value : 0);\n\nconst accentMixSteps = (count: number) =>\n  Array.from({ length: count }, (_, step) =>\n    count < 2 ? 100 : Math.round(100 - (step * (100 - MIN_ACCENT_MIX)) / (count - 1)),\n  );\n\n/**\n * Headless pie and donut chart: turns `data` into slice outlines, legend entries with shares, and the\n * strings a table view needs. Slices keep the order of `data`, clockwise from 12 o'clock. The element\n * marked `etChartPlot` reports the width the circle is fitted in.\n *\n * @example\n * <div etPieChart [data]=\"data\" label=\"Traffic by channel\">\n *   <div etChartPlot><svg>…</svg></div>\n * </div>\n */\n@Directive({\n  selector: '[etPieChart]',\n  exportAs: 'etPieChart',\n  providers: [{ provide: CHART_PLOT_HOST, useExisting: PieChartDirective }],\n})\nexport class PieChartDirective implements ChartPlotHost {\n  private palette = injectColorPalette({ optional: true });\n  private locale = injectLocale();\n\n  /** The slices, in drawing order. A value of 0 draws no slice; a negative value counts as 0. */\n  public data = input.required<readonly PieChartDatum[]>();\n\n  /** Names the chart for assistive tech and captions its table view. */\n  public label = input.required<string>();\n\n  /** The largest the circle's diameter may get in px. A narrower plot shrinks it. @default 200 */\n  public size = input(200, { transform: numberAttribute });\n\n  /** The hole of a donut, as a share of the radius from `0` (a pie) to `0.9`. @default 0 */\n  public innerRadius = input(0, { transform: numberAttribute });\n\n  /** Formats values for the legend, the tooltip, the centre total and the table. @default the app locale's number format */\n  public valueFormatter = input<PieChartValueFormatter | null>(null);\n\n  /** The table view's category column header. @default 'Category' */\n  public categoryHeader = input('Category');\n\n  /** The table view's value column header. @default 'Value' */\n  public valueHeader = input('Value');\n\n  /** The table view's share column header. @default 'Share' */\n  public shareHeader = input('Share');\n\n  public formatValue = computed(() => resolveChartValueFormatter(this.valueFormatter(), this.locale.currentLocale()));\n\n  private formatPercent = computed(() => {\n    const format = new Intl.NumberFormat(this.locale.currentLocale(), { style: 'percent' });\n\n    return (percent: number) => format.format(percent / 100);\n  });\n\n  /**\n   * The element the circle is fitted in. Set by `etChartPlot`.\n   *\n   * @internal\n   */\n  public plot = signal<ChartPlotDirective | null>(null);\n\n  public plotWidth = computed(() => this.plot()?.width() ?? 0);\n\n  /** The circle's diameter in px: `size`, or the plot's width when that is narrower. */\n  public diameter = computed(() => Math.floor(Math.max(0, Math.min(this.size(), this.plotWidth()))));\n\n  public radius = computed(() => this.diameter() / 2);\n\n  /** The radius of the donut hole in px; 0 for a pie. */\n  public holeRadius = computed(() => {\n    const ratio = Math.min(MAX_INNER_RADIUS, Math.max(0, this.innerRadius() || 0));\n\n    return this.radius() * ratio;\n  });\n\n  public isDonut = computed(() => this.innerRadius() > 0);\n\n  /** The sum of every drawn value. */\n  public total = computed(() => this.data().reduce((sum, datum) => sum + drawnValue(datum.value), 0));\n\n  public totalText = computed(() => this.formatValue()(this.total()));\n\n  /** Every datum with its color and share, in `data` order - including the ones that draw no slice. */\n  public entries = computed<PieChartEntry[]>(() => {\n    const data = this.data();\n    const colors = resolveChartSeriesColors(data, this.palette);\n    const uncovered = colors.filter((color) => color === null).length;\n    const mixes = data.length > 1 ? accentMixSteps(uncovered) : [];\n    const percents = createWholePercentages(data.map((datum) => datum.value));\n    const format = this.formatValue();\n    const formatPercent = this.formatPercent();\n    let uncoveredIndex = 0;\n\n    return data.map((datum, index) => {\n      const colorToken = colors[index] ?? null;\n      const percent = percents[index] ?? 0;\n\n      return {\n        key: `${index}:${datum.label}`,\n        datum,\n        index,\n        colorToken,\n        accentMix: colorToken === null ? (mixes[uncoveredIndex++] ?? null) : null,\n        percent,\n        valueText: format(datum.value),\n        percentText: formatPercent(percent),\n      };\n    });\n  });\n\n  public slices = computed<PieChartSlice[]>(() => {\n    const entries = this.entries();\n    const total = this.total();\n    const radius = this.radius();\n    const holeRadius = this.holeRadius();\n\n    if (!(total > 0) || !(radius > 0)) return [];\n\n    const drawn = entries.filter((entry) => drawnValue(entry.datum.value) > 0);\n    const gap = drawn.length > 1 ? SLICE_GAP : 0;\n    let angle = 0;\n\n    return drawn.map((entry) => {\n      const startAngle = angle;\n      const endAngle = drawn.length === 1 ? Math.PI * 2 : angle + (drawnValue(entry.datum.value) / total) * Math.PI * 2;\n      const midAngle = drawn.length === 1 ? 0 : (startAngle + endAngle) / 2;\n\n      angle = endAngle;\n\n      return {\n        ...entry,\n        startAngle,\n        endAngle,\n        path: createArcPath({\n          cx: radius,\n          cy: radius,\n          outerRadius: radius,\n          innerRadius: holeRadius,\n          startAngle,\n          endAngle,\n          gap,\n        }),\n        anchor: createArcPoint({ x: radius, y: radius }, { radius, angle: midAngle }),\n        placement: placementForAngle(midAngle),\n        name: entry.datum.label,\n        description: `${entry.valueText} (${entry.percentText})`,\n      };\n    });\n  });\n\n  /** The data as a table: a row per datum with its value and share. */\n  public table = computed<ChartTableModel>(() => ({\n    columns: [this.categoryHeader(), this.valueHeader(), this.shareHeader()],\n    rows: this.entries().map((entry) => ({ header: entry.datum.label, cells: [entry.valueText, entry.percentText] })),\n  }));\n\n  constructor() {\n    assertChartPlot(this, 'PieChartDirective');\n\n    if (ngDevMode) {\n      effect(() => {\n        const invalid = this.data().filter((datum) => !Number.isFinite(datum.value) || datum.value < 0);\n\n        if (!invalid.length) return;\n\n        console.warn(\n          new RuntimeError(\n            PIE_CHART_ERROR_CODES.INVALID_VALUE,\n            `[PieChartDirective] ${invalid.map((datum) => `\"${datum.label}\"`).join(', ')} ` +\n              'has a negative or non-finite value. It draws no slice and counts as 0.',\n          ).message,\n        );\n      });\n    }\n  }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\nimport { LineChartSliceEntry } from './headless/line-chart.directive';\n\n@Component({\n  selector: 'et-line-chart-tooltip',\n  template: `\n    <span class=\"et-line-chart-tooltip-label\">{{ label() }}</span>\n    @if (entries().length) {\n      <ul class=\"et-line-chart-tooltip-list\">\n        @for (entry of entries(); track entry.key) {\n          <li [etProvideColor]=\"entry.colorToken\" class=\"et-line-chart-tooltip-row\">\n            <span class=\"et-line-chart-tooltip-key\" aria-hidden=\"true\"></span>\n            @if (entry.series; as series) {\n              <span class=\"et-line-chart-tooltip-series\">{{ series.label }}</span>\n            }\n            <strong class=\"et-line-chart-tooltip-value\">{{ entry.valueText }}</strong>\n          </li>\n        }\n      </ul>\n    }\n  `,\n  styleUrl: './line-chart-tooltip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ProvideColorDirective],\n  host: {\n    class: 'et-line-chart-tooltip',\n  },\n})\nexport class LineChartTooltipComponent {\n  public label = input.required<string>();\n  public entries = input.required<readonly LineChartSliceEntry[]>();\n}\n","import { Component, inject, input, TemplateRef, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective, RegisteredColorThemeName } from '@ethlete/core';\nimport { ChartAxisComponent } from './chart-axis.component';\nimport { ChartDataTableComponent } from './chart-data-table.component';\nimport { ChartGridComponent } from './chart-grid.component';\nimport { ChartLegendComponent } from './chart-legend.component';\nimport { ChartTooltipComponent } from './chart-tooltip.component';\nimport { ChartPlotDirective } from './headless/chart-plot.directive';\nimport { LineChartSliceDirective } from './headless/line-chart-slice.directive';\nimport { LineChartDirective } from './headless/line-chart.directive';\nimport { LineChartTooltipComponent } from './line-chart-tooltip.component';\n\n/**\n * A line chart with a value axis, a category or time axis, a recessive grid, a crosshair tooltip that\n * reads out every series at an x, and a visually hidden table view. Pass `series` for several lines,\n * `area` to fill under them and `stacked` to stack them. Driven by the headless {@link LineChartDirective}.\n *\n * @example\n * <et-line-chart [data]=\"visitors\" label=\"Visitors per day\" />\n */\n@Component({\n  selector: 'et-line-chart',\n  templateUrl: './line-chart.component.html',\n  styleUrl: './line-chart.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ChartAxisComponent,\n    ChartDataTableComponent,\n    ChartGridComponent,\n    ChartLegendComponent,\n    ChartPlotDirective,\n    ChartTooltipComponent,\n    LineChartSliceDirective,\n    LineChartTooltipComponent,\n    ProvideColorDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: LineChartDirective,\n      inputs: [\n        'data',\n        'series',\n        'label',\n        'area',\n        'stacked',\n        'points',\n        'height',\n        'tickCount',\n        'valueFormatter',\n        'dateFormatter',\n        'timeZone',\n        'xHeader',\n        'valueHeader',\n      ],\n    },\n  ],\n  host: {\n    class: 'et-line-chart',\n  },\n})\nexport class LineChartComponent {\n  protected chart = inject(LineChartDirective);\n\n  /** The color theme a single-series chart is drawn in, and the fallback for series without a color. @default the surrounding color scope's accent */\n  public colorToken = input<RegisteredColorThemeName | null>(null);\n\n  protected sliceTooltips = viewChildren('sliceTooltip', { read: TemplateRef });\n}\n","@if (chart.legendItems().length) {\n  <et-chart-legend\n    [items]=\"chart.legendItems()\"\n    [mark]=\"chart.area() ? 'rect' : 'line'\"\n    [etProvideColor]=\"colorToken()\"\n    class=\"et-line-chart-legend\"\n  />\n}\n\n<div [attr.data-scale]=\"chart.isTime() ? 'time' : 'category'\" class=\"et-line-chart-figure\">\n  <et-chart-axis\n    [labels]=\"chart.valueLabels()\"\n    [style.block-size.px]=\"chart.height()\"\n    class=\"et-line-chart-value-axis\"\n    orientation=\"vertical\"\n  />\n\n  <div [style.block-size.px]=\"chart.height()\" class=\"et-line-chart-plot\" etChartPlot>\n    @if (chart.plotWidth()) {\n      <svg\n        [attr.width]=\"chart.plotWidth()\"\n        [attr.height]=\"chart.height()\"\n        [attr.aria-label]=\"chart.label()\"\n        [attr.data-area]=\"chart.area() ? '' : null\"\n        [attr.data-stacked]=\"chart.isStacked() ? '' : null\"\n        [attr.data-points]=\"chart.points() ? '' : null\"\n        class=\"et-line-chart-svg\"\n        role=\"group\"\n      >\n        <svg:g [ticks]=\"chart.ticks()\" [length]=\"chart.plotWidth()\" et-chart-grid />\n\n        <svg:g [etProvideColor]=\"colorToken()\" class=\"et-line-chart-series-layer\" aria-hidden=\"true\">\n          @for (line of chart.lines(); track line.key) {\n            <svg:g [etProvideColor]=\"line.colorToken\" class=\"et-line-chart-series\">\n              @if (chart.area()) {\n                <svg:path [attr.d]=\"line.areaPath\" class=\"et-line-chart-area\" />\n              }\n              <svg:path [attr.d]=\"line.linePath\" class=\"et-line-chart-line\" />\n              @for (point of line.points; track point.key) {\n                @if (point.isIsolated || chart.points()) {\n                  <svg:circle [attr.cx]=\"point.x\" [attr.cy]=\"point.y\" class=\"et-line-chart-point\" r=\"5\" />\n                }\n              }\n            </svg:g>\n          }\n        </svg:g>\n\n        <svg:g [etProvideColor]=\"colorToken()\" class=\"et-line-chart-slices\">\n          @for (slice of chart.slices(); track slice.key) {\n            <svg:g\n              [etLineChartSlice]=\"slice.index\"\n              [etLineChartSliceTooltip]=\"sliceTooltips()[slice.index] ?? null\"\n              [etLineChartSliceDescription]=\"slice.description\"\n              [etLineChartSliceAnchor]=\"anchor\"\n              [attr.aria-label]=\"slice.label\"\n              class=\"et-line-chart-slice\"\n            >\n              <svg:rect\n                [attr.x]=\"slice.target.x\"\n                [attr.y]=\"slice.target.y\"\n                [attr.width]=\"slice.target.width\"\n                [attr.height]=\"slice.target.height\"\n                class=\"et-line-chart-slice-target\"\n                rx=\"4\"\n              />\n              <svg:line\n                [attr.x1]=\"slice.position\"\n                [attr.x2]=\"slice.position\"\n                [attr.y2]=\"chart.height()\"\n                class=\"et-line-chart-crosshair\"\n                shape-rendering=\"crispEdges\"\n                y1=\"0\"\n              />\n              @for (entry of slice.entries; track entry.key) {\n                <svg:circle\n                  [etProvideColor]=\"entry.colorToken\"\n                  [attr.cx]=\"slice.position\"\n                  [attr.cy]=\"entry.y\"\n                  class=\"et-line-chart-slice-point\"\n                  r=\"5\"\n                />\n              }\n              <svg:rect\n                #anchor\n                [attr.x]=\"slice.anchor.x\"\n                [attr.y]=\"slice.anchor.y\"\n                class=\"et-line-chart-slice-anchor\"\n                width=\"0\"\n                height=\"0\"\n              />\n            </svg:g>\n          }\n        </svg:g>\n      </svg>\n    }\n  </div>\n\n  <et-chart-axis [labels]=\"chart.xLabels()\" class=\"et-line-chart-x-axis\" orientation=\"horizontal\" />\n</div>\n\n@for (slice of chart.slices(); track slice.key) {\n  <ng-template #sliceTooltip>\n    @if (chart.series().length) {\n      <et-line-chart-tooltip [label]=\"slice.label\" [entries]=\"slice.entries\" />\n    } @else {\n      <et-chart-tooltip [value]=\"slice.description\" [label]=\"slice.label\" />\n    }\n  </ng-template>\n}\n\n<et-chart-data-table [caption]=\"chart.label()\" [model]=\"chart.table()\" />\n","import {\n  booleanAttribute,\n  Component,\n  inject,\n  input,\n  TemplateRef,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ProvideColorDirective, RegisteredColorThemeName } from '@ethlete/core';\nimport { ChartDataTableComponent } from './chart-data-table.component';\nimport { ChartTooltipComponent } from './chart-tooltip.component';\nimport { ChartPlotDirective } from './headless/chart-plot.directive';\nimport { ChartMarkDirective } from './headless/internals/chart-mark.directive';\nimport { PieChartDirective } from './headless/pie-chart.directive';\n\n/**\n * A pie chart, or a donut with `innerRadius`, with a legend listing every value and share and a\n * visually hidden table view. Driven by the headless {@link PieChartDirective}. Content marked\n * `etPieChartCenter` is shown in the donut hole.\n *\n * @example\n * <et-pie-chart [data]=\"channels\" [innerRadius]=\"0.6\" showTotal label=\"Traffic by channel\" />\n */\n@Component({\n  selector: 'et-pie-chart',\n  templateUrl: './pie-chart.component.html',\n  styleUrl: './pie-chart.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ChartDataTableComponent,\n    ChartMarkDirective,\n    ChartPlotDirective,\n    ChartTooltipComponent,\n    ProvideColorDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: PieChartDirective,\n      inputs: [\n        'data',\n        'label',\n        'size',\n        'innerRadius',\n        'valueFormatter',\n        'categoryHeader',\n        'valueHeader',\n        'shareHeader',\n      ],\n    },\n  ],\n  host: {\n    class: 'et-pie-chart',\n  },\n})\nexport class PieChartComponent {\n  protected chart = inject(PieChartDirective);\n\n  /** The accent the slices without a color of their own are drawn in steps of. @default the surrounding color scope's accent */\n  public colorToken = input<RegisteredColorThemeName | null>(null);\n\n  /** Shows the formatted total in the donut hole, above `totalLabel`. Has no effect on a pie. @default false */\n  public showTotal = input(false, { transform: booleanAttribute });\n\n  /** The caption under the total in the donut hole. @default 'Total' */\n  public totalLabel = input('Total');\n\n  protected sliceTooltips = viewChildren('sliceTooltip', { read: TemplateRef });\n}\n","<div [etProvideColor]=\"colorToken()\" class=\"et-pie-chart-figure\">\n  <div [style.inline-size.px]=\"chart.size()\" class=\"et-pie-chart-plot\" etChartPlot>\n    @if (chart.diameter()) {\n      <svg\n        [attr.width]=\"chart.diameter()\"\n        [attr.height]=\"chart.diameter()\"\n        [attr.aria-label]=\"chart.label()\"\n        class=\"et-pie-chart-svg\"\n        role=\"group\"\n      >\n        @if (!chart.slices().length) {\n          <svg:circle\n            [attr.cx]=\"chart.radius()\"\n            [attr.cy]=\"chart.radius()\"\n            [attr.r]=\"chart.radius() - 0.5\"\n            class=\"et-pie-chart-empty\"\n          />\n        }\n\n        @for (slice of chart.slices(); track slice.key) {\n          <svg:g\n            [etChartMark]=\"sliceTooltips()[$index] ?? null\"\n            [etChartMarkDescription]=\"slice.description\"\n            [etChartMarkAnchor]=\"anchor\"\n            [etChartMarkPlacement]=\"slice.placement\"\n            [etProvideColor]=\"slice.colorToken\"\n            [attr.aria-label]=\"slice.name\"\n            [style.--_et-pie-chart-accent-mix.%]=\"slice.accentMix\"\n            [style.--_et-pie-chart-slice-order]=\"$index\"\n            class=\"et-pie-chart-slice\"\n          >\n            <svg:path [attr.d]=\"slice.path\" class=\"et-pie-chart-slice-mark\" />\n            <svg:rect\n              #anchor\n              [attr.x]=\"slice.anchor.x\"\n              [attr.y]=\"slice.anchor.y\"\n              class=\"et-pie-chart-slice-anchor\"\n              width=\"0\"\n              height=\"0\"\n            />\n          </svg:g>\n        }\n      </svg>\n\n      @if (chart.isDonut()) {\n        <div [style.--_et-pie-chart-hole-size.px]=\"chart.holeRadius() * 2\" class=\"et-pie-chart-center\">\n          @if (showTotal()) {\n            <strong class=\"et-pie-chart-total\">{{ chart.totalText() }}</strong>\n            <span class=\"et-pie-chart-total-label\">{{ totalLabel() }}</span>\n          }\n          <ng-content select=\"[etPieChartCenter]\" />\n        </div>\n      }\n    }\n  </div>\n\n  <ul class=\"et-pie-chart-legend\">\n    @for (entry of chart.entries(); track entry.key) {\n      <li\n        [etProvideColor]=\"entry.colorToken\"\n        [style.--_et-pie-chart-accent-mix.%]=\"entry.accentMix\"\n        class=\"et-pie-chart-legend-item\"\n      >\n        <span class=\"et-pie-chart-legend-swatch\" aria-hidden=\"true\"></span>\n        <span class=\"et-pie-chart-legend-label\">{{ entry.datum.label }}</span>\n        <span class=\"et-pie-chart-legend-value\">{{ entry.valueText }}</span>\n        <span class=\"et-pie-chart-legend-percent\">{{ entry.percentText }}</span>\n      </li>\n    }\n  </ul>\n</div>\n\n@for (slice of chart.slices(); track slice.key) {\n  <ng-template #sliceTooltip>\n    <et-chart-tooltip [value]=\"slice.valueText\" [label]=\"slice.datum.label + ' · ' + slice.percentText\" />\n  </ng-template>\n}\n\n<et-chart-data-table [caption]=\"chart.label()\" [model]=\"chart.table()\" />\n","// codes 5160-5179\nexport const SANKEY_CHART_ERROR_CODES = {\n  /** The links of a sankey chart form a cycle, so its nodes cannot be put in left-to-right columns. */\n  CYCLE: 5160,\n  /** A sankey link names a `source` or `target` that is not the `id` of any node. */\n  UNKNOWN_NODE: 5161,\n  /** Two sankey nodes share one `id`. */\n  DUPLICATE_NODE: 5162,\n  /** A sankey link has a negative or non-finite `value`. */\n  INVALID_VALUE: 5163,\n} as const;\n","import { RuntimeError } from '@ethlete/core';\nimport { SANKEY_CHART_ERROR_CODES } from '../../sankey-chart-errors';\n\nexport type SankeyLayoutNodeInput = {\n  id: string;\n};\n\nexport type SankeyLayoutLinkInput = {\n  source: string;\n  target: string;\n  value: number;\n};\n\nexport type SankeyLayoutOptions = {\n  width: number;\n  height: number;\n  nodeWidth: number;\n  nodeGap: number;\n  insetStart: number;\n  insetEnd: number;\n  iterations?: number;\n};\n\nexport type SankeyLayoutInput = SankeyLayoutOptions & {\n  nodes: readonly SankeyLayoutNodeInput[];\n  links: readonly SankeyLayoutLinkInput[];\n};\n\nexport type SankeyLayoutNode = {\n  index: number;\n  id: string;\n  column: number;\n  order: number;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  incoming: number;\n  outgoing: number;\n  value: number;\n};\n\nexport type SankeyLayoutLink = {\n  index: number;\n  source: number;\n  target: number;\n  value: number;\n  width: number;\n  x0: number;\n  x1: number;\n  y0: number;\n  y1: number;\n  path: string;\n};\n\nexport type SankeyLayout = {\n  nodes: SankeyLayoutNode[];\n  /** Only the links with a positive value. */\n  links: SankeyLayoutLink[];\n  columnCount: number;\n  pixelsPerValue: number;\n  gap: number;\n};\n\ntype Edge = { index: number; source: number; target: number; value: number };\n\nconst DEFAULT_ITERATIONS = 6;\nconst MAX_GAP_SHARE = 0.5;\n\nconst EMPTY_LAYOUT: SankeyLayout = { nodes: [], links: [], columnCount: 0, pixelsPerValue: 0, gap: 0 };\n\n/** `null` when the links form a cycle. */\nexport const assignSankeyColumns = (nodeCount: number, edges: readonly Omit<Edge, 'index'>[]): number[] | null => {\n  const columns = new Array<number>(nodeCount).fill(0);\n  const pending = new Array<number>(nodeCount).fill(0);\n  const outgoing: number[][] = Array.from({ length: nodeCount }, () => []);\n\n  for (const edge of edges) {\n    pending[edge.target] = (pending[edge.target] ?? 0) + 1;\n    outgoing[edge.source]?.push(edge.target);\n  }\n\n  const queue = columns.map((_, index) => index).filter((index) => pending[index] === 0);\n  let visited = 0;\n\n  while (queue.length) {\n    const node = queue.shift() as number;\n\n    visited++;\n\n    for (const target of outgoing[node] ?? []) {\n      columns[target] = Math.max(columns[target] ?? 0, (columns[node] ?? 0) + 1);\n      pending[target] = (pending[target] ?? 0) - 1;\n\n      if (pending[target] === 0) queue.push(target);\n    }\n  }\n\n  return visited === nodeCount ? columns : null;\n};\n\nexport const countSankeyCrossings = (\n  nodes: readonly Pick<SankeyLayoutNode, 'column' | 'order'>[],\n  links: readonly Pick<SankeyLayoutLink, 'source' | 'target'>[],\n) => {\n  let crossings = 0;\n\n  for (let i = 0; i < links.length; i++) {\n    for (let j = i + 1; j < links.length; j++) {\n      const a = links[i] as Pick<SankeyLayoutLink, 'source' | 'target'>;\n      const b = links[j] as Pick<SankeyLayoutLink, 'source' | 'target'>;\n      const aSource = nodes[a.source];\n      const bSource = nodes[b.source];\n      const aTarget = nodes[a.target];\n      const bTarget = nodes[b.target];\n\n      if (!aSource || !bSource || !aTarget || !bTarget) continue;\n      if (aSource.column !== bSource.column || aTarget.column !== bTarget.column) continue;\n      if (a.source === b.source || a.target === b.target) continue;\n\n      if ((aSource.order - bSource.order) * (aTarget.order - bTarget.order) < 0) crossings++;\n    }\n  }\n\n  return crossings;\n};\n\nconst readEdges = (nodes: readonly SankeyLayoutNodeInput[], links: readonly SankeyLayoutLinkInput[]) => {\n  const indexById = new Map<string, number>();\n\n  nodes.forEach((node, index) => {\n    if (indexById.has(node.id)) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          SANKEY_CHART_ERROR_CODES.DUPLICATE_NODE,\n          `[SankeyChartDirective] Two nodes share the id \"${node.id}\". Give every node its own id.`,\n        );\n      }\n\n      return;\n    }\n\n    indexById.set(node.id, index);\n  });\n\n  const edges: Edge[] = [];\n\n  links.forEach((link, index) => {\n    const source = indexById.get(link.source);\n    const target = indexById.get(link.target);\n\n    if (source === undefined || target === undefined) {\n      if (ngDevMode) {\n        const missing = source === undefined ? link.source : link.target;\n\n        throw new RuntimeError(\n          SANKEY_CHART_ERROR_CODES.UNKNOWN_NODE,\n          `[SankeyChartDirective] A link points at the node \"${missing}\", which is not in nodes.`,\n        );\n      }\n\n      return;\n    }\n\n    const valid = Number.isFinite(link.value) && link.value >= 0;\n\n    if (!valid && ngDevMode) {\n      throw new RuntimeError(\n        SANKEY_CHART_ERROR_CODES.INVALID_VALUE,\n        `[SankeyChartDirective] The link \"${link.source}\" -> \"${link.target}\" has the value ${link.value}. ` +\n          'Link values must be finite and not negative.',\n      );\n    }\n\n    if (valid && link.value > 0) edges.push({ index, source, target, value: link.value });\n  });\n\n  return { indexById, edges };\n};\n\ntype ColumnPlacement = {\n  columns: number[][];\n  heights: number[];\n  gap: number;\n  height: number;\n};\n\nconst placeColumns = ({ columns, heights, gap, height }: ColumnPlacement) => {\n  const y = new Array<number>(heights.length).fill(0);\n\n  for (const column of columns) {\n    const total = column.reduce((sum, node) => sum + (heights[node] ?? 0), 0) + Math.max(0, column.length - 1) * gap;\n    let cursor = (height - total) / 2;\n\n    for (const node of column) {\n      y[node] = cursor;\n      cursor += (heights[node] ?? 0) + gap;\n    }\n  }\n\n  return y;\n};\n\ntype CrossingInput = { columns: number[][]; columnOf: number[]; edges: readonly Edge[] };\n\nconst crossingsOf = ({ columns, columnOf, edges }: CrossingInput) => {\n  const order = new Array<number>(columnOf.length).fill(0);\n\n  columns.forEach((column) => column.forEach((node, position) => (order[node] = position)));\n\n  return countSankeyCrossings(\n    columnOf.map((column, index) => ({ column, order: order[index] ?? 0 })),\n    edges,\n  );\n};\n\ntype BarycenterInput = {\n  column: number[];\n  centers: number[];\n  neighbours: (node: number) => Edge[];\n  far: 'source' | 'target';\n};\n\nconst sortByBarycenter = ({ column, centers, neighbours, far }: BarycenterInput) => {\n  const keyed = column.map((node, position) => {\n    let weight = 0;\n    let sum = 0;\n\n    for (const edge of neighbours(node)) {\n      weight += edge.value;\n      sum += edge.value * (centers[edge[far]] ?? 0);\n    }\n\n    return { node, position, key: weight > 0 ? sum / weight : (centers[node] ?? 0) };\n  });\n\n  keyed.sort((a, b) => a.key - b.key || a.position - b.position);\n\n  return keyed.map((entry) => entry.node);\n};\n\ntype Ribbon = { x0: number; x1: number; y0: number; y1: number; width: number };\n\nconst ribbonPath = ({ x0, x1, y0, y1, width }: Ribbon) => {\n  const xm = (x0 + x1) / 2;\n\n  return (\n    `M${x0},${y0}C${xm},${y0} ${xm},${y1} ${x1},${y1}` +\n    `L${x1},${y1 + width}C${xm},${y1 + width} ${xm},${y0 + width} ${x0},${y0 + width}Z`\n  );\n};\n\n/** Throws in dev mode for invalid data; in production a cycle lays out empty and an invalid link is skipped. */\nexport const computeSankeyLayout = ({\n  nodes: nodeInputs,\n  links: linkInputs,\n  ...options\n}: SankeyLayoutInput): SankeyLayout => {\n  const { edges } = readEdges(nodeInputs, linkInputs);\n  const nodeCount = nodeInputs.length;\n\n  if (!nodeCount) return EMPTY_LAYOUT;\n\n  const columnOf = assignSankeyColumns(nodeCount, edges);\n\n  if (!columnOf) {\n    if (ngDevMode) {\n      throw new RuntimeError(\n        SANKEY_CHART_ERROR_CODES.CYCLE,\n        '[SankeyChartDirective] The links form a cycle, so the nodes cannot flow left to right. ' +\n          'Remove a link that leads back to an earlier node.',\n      );\n    }\n\n    return EMPTY_LAYOUT;\n  }\n\n  const columnCount = Math.max(...columnOf) + 1;\n  const incoming = new Array<number>(nodeCount).fill(0);\n  const outgoing = new Array<number>(nodeCount).fill(0);\n  const edgesIn: Edge[][] = Array.from({ length: nodeCount }, () => []);\n  const edgesOut: Edge[][] = Array.from({ length: nodeCount }, () => []);\n\n  for (const edge of edges) {\n    outgoing[edge.source] = (outgoing[edge.source] ?? 0) + edge.value;\n    incoming[edge.target] = (incoming[edge.target] ?? 0) + edge.value;\n    edgesOut[edge.source]?.push(edge);\n    edgesIn[edge.target]?.push(edge);\n  }\n\n  const values = incoming.map((value, index) => Math.max(value, outgoing[index] ?? 0));\n  let columns: number[][] = Array.from({ length: columnCount }, () => []);\n\n  columnOf.forEach((column, index) => columns[column]?.push(index));\n\n  const height = Math.max(0, options.height);\n  const tallestColumn = Math.max(...columns.map((column) => column.length));\n  const gap =\n    tallestColumn > 1 ? Math.max(0, Math.min(options.nodeGap, (height * MAX_GAP_SHARE) / (tallestColumn - 1))) : 0;\n\n  const scale = columns.reduce((smallest, column) => {\n    const total = column.reduce((sum, node) => sum + (values[node] ?? 0), 0);\n\n    if (total <= 0) return smallest;\n\n    return Math.min(smallest, (height - (column.length - 1) * gap) / total);\n  }, Infinity);\n  const pixelsPerValue = Number.isFinite(scale) ? Math.max(0, scale) : 0;\n  const heights = values.map((value) => value * pixelsPerValue);\n  const place = (order: number[][]) => placeColumns({ columns: order, heights, gap, height });\n  const centersOf = (order: number[][]) => {\n    const y = place(order);\n\n    return y.map((top, index) => top + (heights[index] ?? 0) / 2);\n  };\n\n  let best = columns;\n  let bestCrossings = crossingsOf({ columns, columnOf, edges });\n\n  for (let sweep = 0; sweep < (options.iterations ?? DEFAULT_ITERATIONS) && bestCrossings > 0; sweep++) {\n    for (let c = 1; c < columnCount; c++) {\n      const centers = centersOf(columns);\n\n      columns = columns.map((column, index) =>\n        index === c\n          ? sortByBarycenter({ column, centers, neighbours: (node) => edgesIn[node] ?? [], far: 'source' })\n          : column,\n      );\n    }\n\n    for (let c = columnCount - 2; c >= 0; c--) {\n      const centers = centersOf(columns);\n\n      columns = columns.map((column, index) =>\n        index === c\n          ? sortByBarycenter({ column, centers, neighbours: (node) => edgesOut[node] ?? [], far: 'target' })\n          : column,\n      );\n    }\n\n    const crossings = crossingsOf({ columns, columnOf, edges });\n\n    if (crossings < bestCrossings) {\n      best = columns;\n      bestCrossings = crossings;\n    }\n  }\n\n  const y = place(best);\n  const step =\n    columnCount > 1\n      ? (options.width - options.insetStart - options.insetEnd - options.nodeWidth) / (columnCount - 1)\n      : 0;\n  const order = new Array<number>(nodeCount).fill(0);\n\n  best.forEach((column) => column.forEach((node, position) => (order[node] = position)));\n\n  const nodes: SankeyLayoutNode[] = nodeInputs.map((node, index) => ({\n    index,\n    id: node.id,\n    column: columnOf[index] ?? 0,\n    order: order[index] ?? 0,\n    x: options.insetStart + (columnOf[index] ?? 0) * step,\n    y: y[index] ?? 0,\n    width: options.nodeWidth,\n    height: heights[index] ?? 0,\n    incoming: incoming[index] ?? 0,\n    outgoing: outgoing[index] ?? 0,\n    value: values[index] ?? 0,\n  }));\n\n  const y0 = new Map<Edge, number>();\n  const y1 = new Map<Edge, number>();\n  const byNodeY = (pick: (edge: Edge) => number) => (a: Edge, b: Edge) =>\n    (nodes[pick(a)]?.y ?? 0) - (nodes[pick(b)]?.y ?? 0) || a.index - b.index;\n\n  nodes.forEach((node) => {\n    let cursor = node.y;\n\n    for (const edge of [...(edgesOut[node.index] ?? [])].sort(byNodeY((edge) => edge.target))) {\n      y0.set(edge, cursor);\n      cursor += edge.value * pixelsPerValue;\n    }\n\n    cursor = node.y;\n\n    for (const edge of [...(edgesIn[node.index] ?? [])].sort(byNodeY((edge) => edge.source))) {\n      y1.set(edge, cursor);\n      cursor += edge.value * pixelsPerValue;\n    }\n  });\n\n  const links: SankeyLayoutLink[] = edges.map((edge) => {\n    const source = nodes[edge.source] as SankeyLayoutNode;\n    const target = nodes[edge.target] as SankeyLayoutNode;\n    const width = edge.value * pixelsPerValue;\n    const x0 = source.x + source.width;\n    const x1 = target.x;\n    const start = y0.get(edge) ?? source.y;\n    const end = y1.get(edge) ?? target.y;\n\n    return {\n      index: edge.index,\n      source: edge.source,\n      target: edge.target,\n      value: edge.value,\n      width,\n      x0,\n      x1,\n      y0: start,\n      y1: end,\n      path: ribbonPath({ x0, x1, y0: start, y1: end, width }),\n    };\n  });\n\n  return { nodes, links, columnCount, pixelsPerValue, gap };\n};\n","import { computed, Directive, input, numberAttribute, signal } from '@angular/core';\nimport { injectColorPalette, injectLocale, RegisteredColorThemeName } from '@ethlete/core';\nimport { ChartRect, ChartTableModel, ChartTooltipPlacement } from '../chart.types';\nimport { CHART_PLOT_HOST, ChartPlotDirective, ChartPlotHost } from './chart-plot.directive';\nimport { ChartValueFormatter, resolveChartValueFormatter } from './internals/chart-format';\nimport { assertChartPlot } from './internals/chart-plot-check';\nimport { resolveChartSeriesColors } from './internals/chart-series';\nimport { computeSankeyLayout } from './internals/sankey-layout';\n\n/** A node of a sankey chart: a stage the flow passes through. */\nexport type SankeyChartNodeInput = {\n  /** Unique among the nodes. Links name their `source` and `target` by it. */\n  id: string;\n  label: string;\n  /** The color theme the node and its outgoing links are drawn in. @default the palette entry at the node's position, else the accent */\n  colorToken?: RegisteredColorThemeName | null;\n};\n\n/** A flow of `value` from one node to another. A zero value keeps the link out of the plot, not out of the table. */\nexport type SankeyChartLinkInput = {\n  source: string;\n  target: string;\n  value: number;\n};\n\n/** Formats a value for the tooltips and the table. */\nexport type SankeyChartValueFormatter = ChartValueFormatter;\n\n/** Where a node's label sits: before the node (first column) or after it. */\nexport type SankeyChartLabelSide = 'start' | 'end';\n\n/** A node with its geometry in plot pixels, ready to render. */\nexport type SankeyChartNode = {\n  key: string;\n  node: SankeyChartNodeInput;\n  /** Position in {@link SankeyChartDirective.renderedNodes} - column by column, top to bottom. */\n  index: number;\n  column: number;\n  colorToken: RegisteredColorThemeName | null;\n  x: number;\n  y: number;\n  width: number;\n  /** At least 1px, so a node without throughput stays visible. */\n  height: number;\n  /** The hover, tap and focus target. Wider than the node. */\n  target: ChartRect;\n  placement: ChartTooltipPlacement;\n  incoming: number;\n  outgoing: number;\n  /** `null` when nothing flows in. */\n  incomingText: string | null;\n  /** `null` when nothing flows out. */\n  outgoingText: string | null;\n  name: string;\n  /** What assistive tech reads after the name, e.g. `\"In: 1,200, Out: 900\"`. */\n  description: string;\n  labelSide: SankeyChartLabelSide;\n  /** Where the label's inner edge sits, in plot pixels: its right end for `start`, its left end for `end`. */\n  labelX: number;\n  labelY: number;\n  /** The widest the label may get before it is cut off. */\n  labelMaxWidth: number;\n};\n\n/** A link with its ribbon in plot pixels, ready to render. */\nexport type SankeyChartLink = {\n  key: string;\n  link: SankeyChartLinkInput;\n  /** Position in {@link SankeyChartDirective.renderedLinks} - by source node, then top to bottom at that node. */\n  index: number;\n  source: SankeyChartNode;\n  target: SankeyChartNode;\n  /** The source node's color theme. */\n  colorToken: RegisteredColorThemeName | null;\n  width: number;\n  path: string;\n  /** A zero-width rect across the ribbon at its midpoint, for the tooltip to point at. */\n  anchor: ChartRect;\n  valueText: string;\n  /** e.g. `\"Tickets → Revenue\"`. */\n  name: string;\n};\n\n/** A hovered or focused mark: a node by its id, or a link by its {@link SankeyChartLink.key}. */\nexport type SankeyChartActiveMark = { kind: 'node' | 'link'; key: string };\n\nconst LABEL_PADDING = 6;\nconst TARGET_PADDING = 4;\nconst MIN_NODE_HEIGHT = 1;\n\n/**\n * Headless sankey chart: lays `nodes` and `links` out as a left-to-right flow - columns by longest path\n * from the sources, node heights proportional to throughput, ordering that reduces crossings, and a\n * ribbon per link. Tracks the hovered or focused mark so the links around it can be highlighted.\n * The element marked `etChartPlot` reports the width the flow is laid out in.\n *\n * @example\n * <div etSankeyChart [nodes]=\"nodes\" [links]=\"links\" label=\"Energy flow\">\n *   <div etChartPlot><svg>…</svg></div>\n * </div>\n */\n@Directive({\n  selector: '[etSankeyChart]',\n  exportAs: 'etSankeyChart',\n  providers: [{ provide: CHART_PLOT_HOST, useExisting: SankeyChartDirective }],\n})\nexport class SankeyChartDirective implements ChartPlotHost {\n  private palette = injectColorPalette({ optional: true });\n  private locale = injectLocale();\n\n  /** The stages of the flow. Their order sets their palette colour and the first ordering guess. */\n  public nodes = input.required<readonly SankeyChartNodeInput[]>();\n\n  /** The flows between nodes. They must not form a cycle. */\n  public links = input.required<readonly SankeyChartLinkInput[]>();\n\n  /** Names the chart for assistive tech and captions its table view. */\n  public label = input.required<string>();\n\n  /** Height of the plot in px. @default 320 */\n  public height = input(320, { transform: numberAttribute });\n\n  /** Width of a node in px. @default 12 */\n  public nodeWidth = input(12, { transform: numberAttribute });\n\n  /** Space between the nodes of one column in px. Shrinks when a column would not fit. @default 12 */\n  public nodeGap = input(12, { transform: numberAttribute });\n\n  /** Room kept for the labels left of the first column and right of the last one, in px. @default 120 */\n  public labelWidth = input(120, { transform: numberAttribute });\n\n  /** Formats values for the tooltips and the table. @default the app locale's number format */\n  public valueFormatter = input<SankeyChartValueFormatter | null>(null);\n\n  /** Names what flows into a node, in its tooltip and description. @default 'In' */\n  public incomingLabel = input('In');\n\n  /** Names what flows out of a node, in its tooltip and description. @default 'Out' */\n  public outgoingLabel = input('Out');\n\n  /** The table view's source column header. @default 'Source' */\n  public sourceHeader = input('Source');\n\n  /** The table view's target column header. @default 'Target' */\n  public targetHeader = input('Target');\n\n  /** The table view's value column header. @default 'Value' */\n  public valueHeader = input('Value');\n\n  public formatValue = computed(() => resolveChartValueFormatter(this.valueFormatter(), this.locale.currentLocale()));\n\n  /**\n   * The element the flow is laid out in. Set by `etChartPlot`.\n   *\n   * @internal\n   */\n  public plot = signal<ChartPlotDirective | null>(null);\n\n  public plotWidth = computed(() => this.plot()?.width() ?? 0);\n\n  /** The color theme per entry of `nodes`, resolved against the palette. */\n  public nodeColors = computed(() => resolveChartSeriesColors(this.nodes(), this.palette));\n\n  private layout = computed(() =>\n    computeSankeyLayout({\n      nodes: this.nodes(),\n      links: this.links(),\n      width: this.plotWidth(),\n      height: this.height(),\n      nodeWidth: this.nodeWidth(),\n      nodeGap: this.nodeGap(),\n      insetStart: this.labelWidth(),\n      insetEnd: this.labelWidth(),\n    }),\n  );\n\n  /** The nodes, column by column and top to bottom - the order they are tab stops in. */\n  public renderedNodes = computed<SankeyChartNode[]>(() => {\n    const layout = this.layout();\n    const inputs = this.nodes();\n    const colors = this.nodeColors();\n    const format = this.formatValue();\n    const incomingLabel = this.incomingLabel();\n    const outgoingLabel = this.outgoingLabel();\n    const labelWidth = this.labelWidth();\n    const lastColumn = layout.columnCount - 1;\n    const step =\n      layout.columnCount > 1\n        ? (this.plotWidth() - 2 * labelWidth - this.nodeWidth()) / (layout.columnCount - 1)\n        : labelWidth;\n\n    return [...layout.nodes]\n      .sort((a, b) => a.column - b.column || a.order - b.order)\n      .map((entry, index) => {\n        const node = inputs[entry.index] as SankeyChartNodeInput;\n        const height = Math.max(entry.height, MIN_NODE_HEIGHT);\n        const y = entry.height < MIN_NODE_HEIGHT ? entry.y - (MIN_NODE_HEIGHT - entry.height) / 2 : entry.y;\n        const incomingText = entry.incoming > 0 ? format(entry.incoming) : null;\n        const outgoingText = entry.outgoing > 0 ? format(entry.outgoing) : null;\n        const labelSide: SankeyChartLabelSide = entry.column === 0 && lastColumn > 0 ? 'start' : 'end';\n        const labelX = labelSide === 'start' ? entry.x - LABEL_PADDING : entry.x + entry.width + LABEL_PADDING;\n        const room = labelSide === 'start' || entry.column === lastColumn ? labelWidth : step - entry.width;\n\n        return {\n          key: node.id,\n          node,\n          index,\n          column: entry.column,\n          colorToken: colors[entry.index] ?? null,\n          x: entry.x,\n          y,\n          width: entry.width,\n          height,\n          target: { x: entry.x - TARGET_PADDING, y, width: entry.width + 2 * TARGET_PADDING, height },\n          placement: 'top',\n          incoming: entry.incoming,\n          outgoing: entry.outgoing,\n          incomingText,\n          outgoingText,\n          name: node.label,\n          description: [\n            incomingText === null ? null : `${incomingLabel}: ${incomingText}`,\n            outgoingText === null ? null : `${outgoingLabel}: ${outgoingText}`,\n          ]\n            .filter((part) => part !== null)\n            .join(', '),\n          labelSide,\n          labelX,\n          labelY: y + height / 2,\n          labelMaxWidth: Math.max(0, room - 2 * LABEL_PADDING),\n        };\n      });\n  });\n\n  /** The links with a ribbon, by source node in tab order, then top to bottom at that node. */\n  public renderedLinks = computed<SankeyChartLink[]>(() => {\n    const layout = this.layout();\n    const inputs = this.links();\n    const format = this.formatValue();\n    const nodes = this.renderedNodes();\n    const byId = new Map(nodes.map((node) => [node.key, node]));\n    const nodeAt = (index: number) => byId.get(layout.nodes[index]?.id ?? '');\n\n    return layout.links\n      .map((entry) => ({ entry, source: nodeAt(entry.source), target: nodeAt(entry.target) }))\n      .filter((item): item is typeof item & { source: SankeyChartNode; target: SankeyChartNode } =>\n        Boolean(item.source && item.target),\n      )\n      .sort((a, b) => a.source.index - b.source.index || a.entry.y0 - b.entry.y0)\n      .map(({ entry, source, target }, index) => {\n        const link = inputs[entry.index] as SankeyChartLinkInput;\n        const mid = (entry.y0 + entry.y1) / 2;\n\n        return {\n          key: `${entry.index}:${link.source}:${link.target}`,\n          link,\n          index,\n          source,\n          target,\n          colorToken: source.colorToken,\n          width: entry.width,\n          path: entry.path,\n          anchor: { x: (entry.x0 + entry.x1) / 2, y: mid, width: 0, height: entry.width },\n          valueText: format(entry.value),\n          name: `${source.name} → ${target.name}`,\n        };\n      });\n  });\n\n  private hovered = signal<SankeyChartActiveMark | null>(null);\n  private focused = signal<SankeyChartActiveMark | null>(null);\n\n  /** The hovered mark, else the focused one. */\n  public activeMark = computed(() => this.hovered() ?? this.focused());\n\n  /** The id of the active node, if the active mark is a node. */\n  public activeNodeKey = computed(() => {\n    const active = this.activeMark();\n\n    return active?.kind === 'node' ? active.key : null;\n  });\n\n  /** Whether a mark is active, so the links not around it are dimmed. */\n  public hasHighlight = computed(() => this.activeMark() !== null);\n\n  /** Per link key, whether it belongs to the active mark: the link itself, or a link of the active node. */\n  public highlightedLinks = computed<Readonly<Record<string, boolean>>>(() => {\n    const active = this.activeMark();\n    const result: Record<string, boolean> = {};\n\n    if (!active) return result;\n\n    for (const link of this.renderedLinks()) {\n      result[link.key] =\n        active.kind === 'link'\n          ? link.key === active.key\n          : link.source.key === active.key || link.target.key === active.key;\n    }\n\n    return result;\n  });\n\n  /** The flows as a table: a row per link, zero-value links included. */\n  public table = computed<ChartTableModel>(() => {\n    const format = this.formatValue();\n    const labels = new Map(this.nodes().map((node) => [node.id, node.label]));\n\n    return {\n      columns: [this.sourceHeader(), this.targetHeader(), this.valueHeader()],\n      rows: this.links().map((link) => ({\n        header: labels.get(link.source) ?? link.source,\n        cells: [labels.get(link.target) ?? link.target, format(link.value)],\n      })),\n    };\n  });\n\n  constructor() {\n    assertChartPlot(this, 'SankeyChartDirective');\n  }\n\n  /** Marks a node or link as hovered, e.g. on `pointerenter` from a device that can hover. */\n  public hoverMark(mark: SankeyChartActiveMark) {\n    this.hovered.set(mark);\n  }\n\n  /** Clears the hover, unless another mark took it over since. */\n  public unhoverMark(key: string) {\n    if (this.hovered()?.key === key) this.hovered.set(null);\n  }\n\n  /** Marks a node or link as focused. */\n  public focusMark(mark: SankeyChartActiveMark) {\n    this.focused.set(mark);\n  }\n\n  /** Clears the focus, unless another mark took it over since. */\n  public blurMark(key: string) {\n    if (this.focused()?.key === key) this.focused.set(null);\n  }\n}\n","import { Component, inject, input, TemplateRef, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective, RegisteredColorThemeName } from '@ethlete/core';\nimport { ChartDataTableComponent } from './chart-data-table.component';\nimport { ChartTooltipComponent } from './chart-tooltip.component';\nimport { ChartPlotDirective } from './headless/chart-plot.directive';\nimport { ChartMarkDirective } from './headless/internals/chart-mark.directive';\nimport { SankeyChartDirective } from './headless/sankey-chart.directive';\n\n/**\n * A sankey chart: nodes in left-to-right columns, sized by what flows through them, joined by ribbons\n * as wide as their value. Hovering or focusing a node highlights its links. Driven by the headless\n * {@link SankeyChartDirective}.\n *\n * @example\n * <et-sankey-chart [nodes]=\"nodes\" [links]=\"links\" label=\"Club budget\" />\n */\n@Component({\n  selector: 'et-sankey-chart',\n  templateUrl: './sankey-chart.component.html',\n  styleUrl: './sankey-chart.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ChartDataTableComponent,\n    ChartMarkDirective,\n    ChartPlotDirective,\n    ChartTooltipComponent,\n    ProvideColorDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: SankeyChartDirective,\n      inputs: [\n        'nodes',\n        'links',\n        'label',\n        'height',\n        'nodeWidth',\n        'nodeGap',\n        'labelWidth',\n        'valueFormatter',\n        'incomingLabel',\n        'outgoingLabel',\n        'sourceHeader',\n        'targetHeader',\n        'valueHeader',\n      ],\n    },\n  ],\n  host: {\n    class: 'et-sankey-chart',\n  },\n})\nexport class SankeyChartComponent {\n  protected chart = inject(SankeyChartDirective);\n\n  /** The color theme for nodes without their own color or a palette entry. @default the surrounding color scope's accent */\n  public colorToken = input<RegisteredColorThemeName | null>(null);\n\n  protected nodeTooltips = viewChildren('nodeTooltip', { read: TemplateRef });\n  protected linkTooltips = viewChildren('linkTooltip', { read: TemplateRef });\n\n  protected hoverNode(event: PointerEvent, key: string) {\n    if (event.pointerType !== 'touch') this.chart.hoverMark({ kind: 'node', key });\n  }\n\n  protected hoverLink(event: PointerEvent, key: string) {\n    if (event.pointerType !== 'touch') this.chart.hoverMark({ kind: 'link', key });\n  }\n\n  protected focusNode(key: string) {\n    this.chart.focusMark({ kind: 'node', key });\n  }\n\n  protected focusLink(key: string) {\n    this.chart.focusMark({ kind: 'link', key });\n  }\n}\n","<div class=\"et-sankey-chart-scroller\">\n  <div [style.block-size.px]=\"chart.height()\" class=\"et-sankey-chart-plot\" etChartPlot>\n    @if (chart.plotWidth()) {\n      <svg\n        [attr.width]=\"chart.plotWidth()\"\n        [attr.height]=\"chart.height()\"\n        [attr.aria-label]=\"chart.label()\"\n        [attr.data-highlight]=\"chart.hasHighlight() ? '' : null\"\n        class=\"et-sankey-chart-svg\"\n        role=\"group\"\n      >\n        <svg:g [etProvideColor]=\"colorToken()\" class=\"et-sankey-chart-nodes\">\n          @for (node of chart.renderedNodes(); track node.key) {\n            <svg:g\n              [etChartMark]=\"nodeTooltips()[node.index] ?? null\"\n              [etChartMarkDescription]=\"node.description\"\n              [etChartMarkAnchor]=\"nodeAnchor\"\n              [etChartMarkPlacement]=\"node.placement\"\n              [etProvideColor]=\"node.colorToken\"\n              [attr.aria-label]=\"node.name\"\n              [attr.data-active]=\"chart.activeNodeKey() === node.key ? '' : null\"\n              (pointerenter)=\"hoverNode($event, node.key)\"\n              (pointerleave)=\"chart.unhoverMark(node.key)\"\n              (focus)=\"focusNode(node.key)\"\n              (blur)=\"chart.blurMark(node.key)\"\n              class=\"et-sankey-chart-node\"\n            >\n              <svg:rect\n                [attr.x]=\"node.target.x\"\n                [attr.y]=\"node.target.y\"\n                [attr.width]=\"node.target.width\"\n                [attr.height]=\"node.target.height\"\n                class=\"et-sankey-chart-node-target\"\n                rx=\"2\"\n              />\n              <svg:rect\n                #nodeAnchor\n                [attr.x]=\"node.x\"\n                [attr.y]=\"node.y\"\n                [attr.width]=\"node.width\"\n                [attr.height]=\"node.height\"\n                class=\"et-sankey-chart-node-mark\"\n              />\n            </svg:g>\n          }\n        </svg:g>\n\n        <svg:g [etProvideColor]=\"colorToken()\" class=\"et-sankey-chart-links\">\n          @for (link of chart.renderedLinks(); track link.key) {\n            <svg:g\n              [etChartMark]=\"linkTooltips()[link.index] ?? null\"\n              [etChartMarkDescription]=\"link.valueText\"\n              [etChartMarkAnchor]=\"linkAnchor\"\n              [etProvideColor]=\"link.colorToken\"\n              [attr.aria-label]=\"link.name\"\n              [attr.data-highlighted]=\"chart.highlightedLinks()[link.key] ? '' : null\"\n              (pointerenter)=\"hoverLink($event, link.key)\"\n              (pointerleave)=\"chart.unhoverMark(link.key)\"\n              (focus)=\"focusLink(link.key)\"\n              (blur)=\"chart.blurMark(link.key)\"\n              class=\"et-sankey-chart-link\"\n              etChartMarkPlacement=\"top\"\n            >\n              <svg:path [attr.d]=\"link.path\" class=\"et-sankey-chart-link-mark\" />\n              <svg:rect\n                #linkAnchor\n                [attr.x]=\"link.anchor.x\"\n                [attr.y]=\"link.anchor.y\"\n                [attr.width]=\"link.anchor.width\"\n                [attr.height]=\"link.anchor.height\"\n                class=\"et-sankey-chart-link-anchor\"\n              />\n            </svg:g>\n          }\n        </svg:g>\n      </svg>\n\n      <div class=\"et-sankey-chart-labels\" aria-hidden=\"true\">\n        @for (node of chart.renderedNodes(); track node.key) {\n          <span\n            [attr.data-side]=\"node.labelSide\"\n            [style.--_et-sankey-chart-label-x.px]=\"node.labelX\"\n            [style.--_et-sankey-chart-label-y.px]=\"node.labelY\"\n            [style.max-inline-size.px]=\"node.labelMaxWidth\"\n            class=\"et-sankey-chart-label\"\n            >{{ node.name }}</span\n          >\n        }\n      </div>\n    }\n  </div>\n</div>\n\n@for (node of chart.renderedNodes(); track node.key) {\n  <ng-template #nodeTooltip>\n    <span class=\"et-sankey-chart-tooltip\">\n      <strong class=\"et-sankey-chart-tooltip-name\">{{ node.name }}</strong>\n      @if (node.incomingText) {\n        <span class=\"et-sankey-chart-tooltip-total\"\n          >{{ chart.incomingLabel() }} <span class=\"et-sankey-chart-tooltip-value\">{{ node.incomingText }}</span></span\n        >\n      }\n      @if (node.outgoingText) {\n        <span class=\"et-sankey-chart-tooltip-total\"\n          >{{ chart.outgoingLabel() }} <span class=\"et-sankey-chart-tooltip-value\">{{ node.outgoingText }}</span></span\n        >\n      }\n    </span>\n  </ng-template>\n}\n\n@for (link of chart.renderedLinks(); track link.key) {\n  <ng-template #linkTooltip>\n    <et-chart-tooltip [value]=\"link.valueText\" [label]=\"link.name\" />\n  </ng-template>\n}\n\n<et-chart-data-table [caption]=\"chart.label()\" [model]=\"chart.table()\" />\n","import { BarChartComponent } from './bar-chart.component';\nimport { BarChartPlotDirective } from './headless/bar-chart-plot.directive';\nimport { BarChartDirective } from './headless/bar-chart.directive';\nimport { ChartPlotDirective } from './headless/chart-plot.directive';\nimport { LineChartSliceDirective } from './headless/line-chart-slice.directive';\nimport { LineChartDirective } from './headless/line-chart.directive';\nimport { PieChartDirective } from './headless/pie-chart.directive';\nimport { LineChartComponent } from './line-chart.component';\nimport { PieChartComponent } from './pie-chart.component';\nimport { SankeyChartDirective } from './headless/sankey-chart.directive';\nimport { SankeyChartComponent } from './sankey-chart.component';\n\nexport const CHART_IMPORTS = [\n  BarChartComponent,\n  BarChartDirective,\n  BarChartPlotDirective,\n  ChartPlotDirective,\n  LineChartComponent,\n  LineChartDirective,\n  LineChartSliceDirective,\n  PieChartComponent,\n  PieChartDirective,\n  SankeyChartComponent,\n  SankeyChartDirective,\n] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings a chip renders itself. Its content is yours; the remove button is the chip's own. */\nexport type ChipLabels = {\n  /** Accessible label for a removable chip's remove button. */\n  remove: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_CHIP_LABELS: ChipLabels = {\n  remove: 'Remove',\n};\n\nconst CHIP_LABELS_DEF = /* @__PURE__ */ defineLabels<ChipLabels>('CHIP_LABELS', DEFAULT_CHIP_LABELS);\n\n/**\n * Localize a chip's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_CHIP_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideChipLabels({ remove: 'Entfernen' });\n */\nexport const provideChipLabels = /* @__PURE__ */ toProvideFn(CHIP_LABELS_DEF);\nexport const injectChipLabels = /* @__PURE__ */ toInjectFn(CHIP_LABELS_DEF);\nexport const CHIP_LABELS = /* @__PURE__ */ toToken(CHIP_LABELS_DEF);\n","// codes 1100-1199\nexport const CHIP_ERROR_CODES = {\n  REMOVE_OUTSIDE_CHIP: 1100,\n} as const;\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Provide `false` from a widget that owns the tab order around its chips (a select trigger, a tag\n * input) to keep every chip remove control inside it out of the tab order. Defaults to `true`, so a\n * standalone chip is removable with the keyboard.\n */\nexport const CHIP_REMOVE_TAB_STOP = new InjectionToken<boolean>('CHIP_REMOVE_TAB_STOP');\n","import { Directive, booleanAttribute, input, output } from '@angular/core';\n\n@Directive({\n  selector: '[etChip]',\n  exportAs: 'etChip',\n  host: {\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-removable]': 'removable() || null',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '(keydown.backspace)': 'handleRemoveKey($event)',\n    '(keydown.delete)': 'handleRemoveKey($event)',\n  },\n})\nexport class ChipDirective {\n  public disabled = input(false, { transform: booleanAttribute });\n  public removable = input(false, { transform: booleanAttribute });\n  public remove = output<void>();\n\n  public requestRemove() {\n    if (this.disabled() || !this.removable()) {\n      return;\n    }\n\n    this.remove.emit();\n  }\n\n  protected handleRemoveKey(event: Event) {\n    if (this.disabled() || !this.removable()) {\n      return;\n    }\n\n    event.preventDefault();\n    this.remove.emit();\n  }\n}\n","import { afterNextRender, computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CHIP_ERROR_CODES } from './chip-errors';\nimport { CHIP_REMOVE_TAB_STOP } from './chip.tokens';\nimport { ChipDirective } from './chip.directive';\nimport { injectChipLabels } from '../../chip/chip-labels';\n\n@Directive({\n  selector: '[etChipRemove]',\n  exportAs: 'etChipRemove',\n  host: {\n    class: 'et-chip-remove',\n    '[attr.tabindex]': 'tabIndex()',\n    '[attr.type]': 'IS_BUTTON ? \"button\" : null',\n    '[attr.disabled]': 'IS_BUTTON && chip?.disabled() ? \"\" : null',\n    '[attr.aria-label]': 'resolvedRemoveLabel()',\n    '(click)': 'handleClick($event)',\n  },\n})\nexport class ChipRemoveDirective {\n  private chipLabels = injectChipLabels();\n\n  protected chip = inject(ChipDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public removeLabel = input<string | null>(null);\n  private isTabStop = inject(CHIP_REMOVE_TAB_STOP, { optional: true }) ?? true;\n\n  protected readonly IS_BUTTON = this.elementRef.nativeElement.tagName === 'BUTTON';\n\n  /** The string in effect: this instance's `removeLabel`, else the domain's label set. */\n  public resolvedRemoveLabel = computed(() => this.removeLabel() ?? this.chipLabels().remove);\n\n  /** `null` leaves a `<button>` in its natural tab order; any other host needs an explicit value. */\n  public tabIndex = computed(() => {\n    if (!this.isTabStop || this.chip?.disabled() || !this.chip?.removable()) {\n      return '-1';\n    }\n\n    return this.IS_BUTTON ? null : '0';\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.chip) {\n          throw new RuntimeError(\n            CHIP_ERROR_CODES.REMOVE_OUTSIDE_CHIP,\n            '[ChipRemoveDirective] etChipRemove must be placed inside an [etChip] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick(event: Event) {\n    // a chip may itself be clickable (e.g. filter chips) - removal must not double as activation\n    event.stopPropagation();\n    this.chip?.requestRemove();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { IconDirective, TIMES_ICON, provideIcons } from '../icon';\nimport { ChipDirective, ChipRemoveDirective } from './headless';\n\n@Component({\n  selector: 'et-chip',\n  templateUrl: './chip.component.html',\n  styleUrl: './chip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ChipRemoveDirective, IconDirective],\n  providers: [provideIcons(TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: ChipDirective,\n      inputs: ['disabled', 'removable'],\n      outputs: ['remove'],\n    },\n  ],\n  host: {\n    class: 'et-chip',\n  },\n})\nexport class ChipComponent {\n  protected chip = inject(ChipDirective);\n}\n","<span class=\"et-chip-label\">\n  <ng-content />\n</span>\n\n@if (chip.removable()) {\n  <button class=\"et-chip-remove-button\" etChipRemove>\n    <i etIcon=\"et-times\"></i>\n  </button>\n}\n","import { ChipComponent } from './chip.component';\nimport { ChipDirective, ChipRemoveDirective } from './headless';\n\nexport const CHIP_IMPORTS = [ChipComponent, ChipDirective, ChipRemoveDirective] as const;\n","// codes 4800-4899\nexport const COMMAND_PALETTE_ERROR_CODES = {\n  /** `input[etCommandPaletteSearch]` was rendered outside an `[etCommandPalette]`. */\n  SEARCH_OUTSIDE_PALETTE: 4800,\n\n  /** The shortcut directive was given a chord of modifiers with no key, which can never fire. */\n  SHORTCUT_WITHOUT_KEY: 4801,\n} as const;\n","import { DestroyRef, Signal, computed, inject, isSignal, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\nimport { CommandPaletteCommand } from './command-palette.types';\n\n/**\n * Commands to register: a plain array for a fixed set, or a signal for one that changes - a command\n * whose `disabled` or `label` depends on state needs no re-registration when read from a signal.\n */\nexport type CommandPaletteSource = readonly CommandPaletteCommand[] | Signal<readonly CommandPaletteCommand[]>;\n\nexport type CommandPaletteRegistration = {\n  /** Removes these commands from the palette. Calling it twice is harmless. */\n  destroy: () => void;\n};\n\ntype RegisteredSource = {\n  key: symbol;\n  commands: Signal<readonly CommandPaletteCommand[]>;\n};\n\nconst toSourceSignal = (source: CommandPaletteSource): Signal<readonly CommandPaletteCommand[]> =>\n  isSignal(source) ? source : signal(source).asReadonly();\n\nconst COMMAND_PALETTE_REGISTRY_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const sources = signal<readonly RegisteredSource[]>([]);\n\n    // A Map keyed by id both de-duplicates and decides the outcome: a repeated id keeps the position it\n    // first appeared in and takes the value registered last.\n    const commands = computed(() => {\n      const byId = new Map<string, CommandPaletteCommand>();\n\n      for (const source of sources()) {\n        for (const command of source.commands()) {\n          byId.set(command.id, command);\n        }\n      }\n\n      return [...byId.values()] as readonly CommandPaletteCommand[];\n    });\n\n    const register = (source: CommandPaletteSource): CommandPaletteRegistration => {\n      const registered: RegisteredSource = {\n        key: Symbol('et-command-palette-source'),\n        commands: toSourceSignal(source),\n      };\n\n      sources.update((current) => [...current, registered]);\n\n      return {\n        destroy: () => sources.update((current) => current.filter((entry) => entry.key !== registered.key)),\n      };\n    };\n\n    return {\n      /** Every registered command, de-duplicated by id. */\n      commands,\n      register,\n      /** Removes every registration. */\n      clear: () => sources.set([]),\n    };\n  },\n  {\n    name: 'Command Palette Registry',\n  },\n);\n\n/**\n * The set of commands the palette offers. Registered from anywhere in the app, so a lazily loaded\n * feature can contribute its own; read by the palette when it opens.\n *\n * Provide it on a subtree to give that subtree its own set - otherwise there is one per application.\n * Prefer {@link registerCommands} over calling `register` here, unless the registration has to outlive\n * the component that made it.\n */\nexport const provideCommandPaletteRegistry = /* @__PURE__ */ toProvideFn(COMMAND_PALETTE_REGISTRY_DEF);\nexport const injectCommandPaletteRegistry = /* @__PURE__ */ toInjectFn(COMMAND_PALETTE_REGISTRY_DEF);\nexport const COMMAND_PALETTE_REGISTRY = /* @__PURE__ */ toToken(COMMAND_PALETTE_REGISTRY_DEF);\n\n/**\n * Registers commands for as long as the injecting component or service lives. Call it in an injection\n * context; it removes the commands again on destroy, so a lazily loaded feature's commands leave the\n * palette with it.\n *\n * @example\n * registerCommands([\n *   { id: 'row.add', label: 'Add row', group: 'Rows', run: () => this.addRow() },\n * ]);\n *\n * @example\n * // A signal source keeps a command's own state current without re-registering it.\n * registerCommands(computed(() => [\n *   { id: 'row.delete', label: 'Delete row', disabled: !this.selectedRow(), run: () => this.deleteRow() },\n * ]));\n */\nexport const registerCommands = (source: CommandPaletteSource): CommandPaletteRegistration => {\n  const registration = injectCommandPaletteRegistry().register(source);\n\n  inject(DestroyRef).onDestroy(() => registration.destroy());\n\n  return registration;\n};\n","/** A `[start, end)` slice of the haystack that query characters matched. */\nexport type FuzzyMatchRange = [start: number, end: number];\n\nexport type FuzzyMatch = {\n  score: number;\n  /** Merged, ascending, non-overlapping. Empty when the query was empty. */\n  ranges: FuzzyMatchRange[];\n};\n\nconst MATCH = 16;\nconst BOUNDARY_BONUS = 24;\nconst CAMEL_BONUS = 20;\nconst FIRST_CHAR_BONUS = 8;\nconst CASE_BONUS = 2;\nconst GAP_START_PENALTY = 3;\nconst GAP_EXTEND_PENALTY = 1;\nconst MAX_LEADING_PENALTY = 6;\n\n/**\n * Paid per character of an unbroken run, times how long the run already is. Growing with the run is\n * what makes an exact substring beat a scattered subsequence: on the query `user`, a flat bonus ranks\n * `Unset serial` (a strong `u` plus `ser`) above `Add user`, which is not what anyone typing means.\n */\nconst CONSECUTIVE_BONUS = 12;\n\nconst UNREACHABLE = -1_000_000;\n\nconst isLower = (char: string) => char >= 'a' && char <= 'z';\nconst isUpper = (char: string) => char >= 'A' && char <= 'Z';\nconst isDigit = (char: string) => char >= '0' && char <= '9';\nconst isAlphanumeric = (char: string) => isLower(char) || isUpper(char) || isDigit(char);\n\n/**\n * What a match at this position is worth beyond the base score. The start of the haystack and the start\n * of a word are what a reader scans for, so a hit there ranks above one buried mid-word.\n */\nconst positionBonus = (haystack: string, index: number) => {\n  if (index === 0) {\n    return BOUNDARY_BONUS + FIRST_CHAR_BONUS;\n  }\n\n  const current = haystack[index] ?? '';\n  const before = haystack[index - 1] ?? '';\n\n  if (!isAlphanumeric(before)) {\n    return BOUNDARY_BONUS;\n  }\n\n  if (isLower(before) && isUpper(current)) {\n    return CAMEL_BONUS;\n  }\n\n  if (!isDigit(before) && isDigit(current)) {\n    return CAMEL_BONUS;\n  }\n\n  return 0;\n};\n\n/**\n * Scores `query` against `haystack` as a subsequence, and reports which characters matched.\n *\n * Returns `null` when a query character is missing, so a caller can filter and rank in one pass. An\n * empty query matches with score `0` and no ranges. Matching is case-insensitive, but a match that\n * agrees in case scores slightly higher.\n *\n * A score is only meaningful against other scores for the same query. Do not persist it or compare it\n * across queries.\n */\nexport const fuzzyMatch = (query: string, haystack: string): FuzzyMatch | null => {\n  if (!query) {\n    return { score: 0, ranges: [] };\n  }\n\n  if (!haystack || query.length > haystack.length) {\n    return null;\n  }\n\n  const lowerQuery = query.toLowerCase();\n  const lowerHaystack = haystack.toLowerCase();\n  const queryLength = lowerQuery.length;\n  const haystackLength = lowerHaystack.length;\n\n  // `scores[i][j]` is the best alignment of query[0..i] whose last character sits at haystack[j], and\n  // `parents[i][j]` the haystack index query[i - 1] used in it, so the matched ranges can be traced\n  // back. A full table is needed because greedy first-fit picks the wrong characters: on the query\n  // \"ct\", \"Create table\" would match the \"t\" inside \"Create\" rather than the one starting \"table\".\n  //\n  // `runs[i][j]` is how long the unbroken run ending at that cell is, which the consecutive bonus is\n  // scaled by. It describes the best-scoring path into the cell only, so a lower-scoring path that\n  // could have extended a longer run is not considered - the ranking that costs is not worth a third\n  // dimension of state.\n  const scores = new Int32Array(queryLength * haystackLength).fill(UNREACHABLE);\n  const parents = new Int32Array(queryLength * haystackLength).fill(-1);\n  const runs = new Int32Array(queryLength * haystackLength);\n\n  for (let i = 0; i < queryLength; i++) {\n    const queryChar = lowerQuery[i];\n    const row = i * haystackLength;\n    const previousRow = row - haystackLength;\n\n    // Running best over the previous row, held in the form that makes a gap-penalised lookup O(1):\n    // the penalty for jumping from j' to j is GAP_START + GAP_EXTEND * (j - j' - 2), so adding\n    // GAP_EXTEND * j' to each candidate turns \"best after penalty\" into a plain maximum.\n    let bestAdjusted = UNREACHABLE;\n    let bestAdjustedIndex = -1;\n\n    for (let j = i; j < haystackLength; j++) {\n      if (i > 0 && j >= 2) {\n        const candidate = scores[previousRow + j - 2] ?? UNREACHABLE;\n\n        if (candidate > UNREACHABLE) {\n          const adjusted = candidate + GAP_EXTEND_PENALTY * (j - 2);\n\n          if (adjusted > bestAdjusted) {\n            bestAdjusted = adjusted;\n            bestAdjustedIndex = j - 2;\n          }\n        }\n      }\n\n      if (lowerHaystack[j] !== queryChar) {\n        continue;\n      }\n\n      const caseBonus = haystack[j] === query[i] ? CASE_BONUS : 0;\n      const base = MATCH + positionBonus(haystack, j) + caseBonus;\n\n      if (i === 0) {\n        scores[row + j] = base - Math.min(j, MAX_LEADING_PENALTY);\n        runs[row + j] = 1;\n        continue;\n      }\n\n      const consecutive = scores[previousRow + j - 1] ?? UNREACHABLE;\n      const consecutiveRun = runs[previousRow + j - 1] ?? 0;\n      const consecutiveScore =\n        consecutive > UNREACHABLE ? consecutive + base + CONSECUTIVE_BONUS * consecutiveRun : UNREACHABLE;\n\n      const gapScore =\n        bestAdjustedIndex >= 0 ? bestAdjusted - GAP_EXTEND_PENALTY * (j - 2) - GAP_START_PENALTY + base : UNREACHABLE;\n\n      if (consecutiveScore === UNREACHABLE && gapScore === UNREACHABLE) {\n        continue;\n      }\n\n      if (consecutiveScore >= gapScore) {\n        scores[row + j] = consecutiveScore;\n        parents[row + j] = j - 1;\n        runs[row + j] = consecutiveRun + 1;\n      } else {\n        scores[row + j] = gapScore;\n        parents[row + j] = bestAdjustedIndex;\n        runs[row + j] = 1;\n      }\n    }\n  }\n\n  const lastRow = (queryLength - 1) * haystackLength;\n  let endIndex = -1;\n  let score = UNREACHABLE;\n\n  for (let j = queryLength - 1; j < haystackLength; j++) {\n    const candidate = scores[lastRow + j] ?? UNREACHABLE;\n\n    if (candidate > score) {\n      score = candidate;\n      endIndex = j;\n    }\n  }\n\n  if (endIndex < 0 || score === UNREACHABLE) {\n    return null;\n  }\n\n  const indices: number[] = [];\n\n  for (let i = queryLength - 1, j = endIndex; i >= 0 && j >= 0; i--) {\n    indices.push(j);\n    j = parents[i * haystackLength + j] ?? -1;\n  }\n\n  indices.reverse();\n\n  const ranges: FuzzyMatchRange[] = [];\n\n  for (const index of indices) {\n    const last = ranges[ranges.length - 1];\n\n    if (last && last[1] === index) {\n      last[1] = index + 1;\n    } else {\n      ranges.push([index, index + 1]);\n    }\n  }\n\n  return { score, ranges };\n};\n","import {\n  CommandPaletteCommand,\n  CommandPaletteLabelSegment,\n  CommandPaletteResult,\n  CommandPaletteResultGroup,\n} from '../../command-palette.types';\nimport { FuzzyMatchRange, fuzzyMatch } from './fuzzy-match';\n\n/**\n * Subtracted from a keyword's score, so a keyword hit ranks below an equally good hit on the label but\n * can still beat a weak one. Worth more than a word-boundary bonus, or a keyword matching a word start\n * would outrank a label matching one.\n */\nconst KEYWORD_PENALTY = 30;\n\nconst unmatchedSegments = (label: string): CommandPaletteLabelSegment[] =>\n  label ? [{ text: label, matched: false }] : [];\n\n/** Cuts the label into alternating unmatched and matched runs, in order and with nothing dropped. */\nconst toSegments = (label: string, ranges: FuzzyMatchRange[]): CommandPaletteLabelSegment[] => {\n  if (!ranges.length) {\n    return unmatchedSegments(label);\n  }\n\n  const segments: CommandPaletteLabelSegment[] = [];\n  let cursor = 0;\n\n  for (const [start, end] of ranges) {\n    if (start > cursor) {\n      segments.push({ text: label.slice(cursor, start), matched: false });\n    }\n\n    segments.push({ text: label.slice(start, end), matched: true });\n    cursor = end;\n  }\n\n  if (cursor < label.length) {\n    segments.push({ text: label.slice(cursor), matched: false });\n  }\n\n  return segments;\n};\n\nconst scoreCommand = (command: CommandPaletteCommand, query: string): CommandPaletteResult | null => {\n  const labelMatch = fuzzyMatch(query, command.label);\n\n  if (labelMatch) {\n    return { command, score: labelMatch.score, segments: toSegments(command.label, labelMatch.ranges) };\n  }\n\n  let best = -Infinity;\n\n  for (const keyword of command.keywords ?? []) {\n    const keywordMatch = fuzzyMatch(query, keyword);\n\n    if (keywordMatch && keywordMatch.score > best) {\n      best = keywordMatch.score;\n    }\n  }\n\n  if (best === -Infinity) {\n    return null;\n  }\n\n  return { command, score: best - KEYWORD_PENALTY, segments: unmatchedSegments(command.label) };\n};\n\n/**\n * Filters `commands` to those matching `query` and orders them best first.\n *\n * An empty query keeps every command, in `priority` order and otherwise in the order given. Ties are\n * broken by `priority`, then by the shorter label, then alphabetically, so the same query always\n * produces the same order.\n */\nexport const rankCommands = (commands: readonly CommandPaletteCommand[], query: string): CommandPaletteResult[] => {\n  const trimmed = query.trim();\n\n  const results = trimmed\n    ? commands.reduce<CommandPaletteResult[]>((matched, command) => {\n        const result = scoreCommand(command, trimmed);\n\n        if (result) {\n          matched.push(result);\n        }\n\n        return matched;\n      }, [])\n    : commands.map((command) => ({ command, score: 0, segments: unmatchedSegments(command.label) }));\n\n  return results.sort((a, b) => {\n    if (a.score !== b.score) return b.score - a.score;\n\n    const priority = (b.command.priority ?? 0) - (a.command.priority ?? 0);\n    if (priority !== 0) return priority;\n\n    if (a.command.label.length !== b.command.label.length) {\n      return a.command.label.length - b.command.label.length;\n    }\n\n    return a.command.label.localeCompare(b.command.label);\n  });\n};\n\n/**\n * Collects ranked results under their headings, keeping the ranked order inside each group and ordering\n * the groups by their best result. Ungrouped commands are listed first, so a heading never appears to\n * cover rows above it.\n */\nexport const groupResults = (results: readonly CommandPaletteResult[]): CommandPaletteResultGroup[] => {\n  const groups = new Map<string | null, CommandPaletteResult[]>();\n\n  for (const result of results) {\n    const label = result.command.group ?? null;\n    const existing = groups.get(label);\n\n    if (existing) {\n      existing.push(result);\n    } else {\n      groups.set(label, [result]);\n    }\n  }\n\n  const ungrouped = groups.get(null);\n  groups.delete(null);\n\n  const grouped = [...groups].map(([label, groupedResults]) => ({ label, results: groupedResults }));\n\n  return ungrouped ? [{ label: null, results: ungrouped }, ...grouped] : grouped;\n};\n","import { Directive, InjectionToken, computed, inject, input, model, signal } from '@angular/core';\nimport { createComponentId } from '@ethlete/core';\nimport { OVERLAY_REF } from '../../overlay';\nimport { injectCommandPaletteRegistry } from '../command-palette-registry';\nimport { CommandPaletteCommand, CommandPaletteResult } from '../command-palette.types';\nimport { groupResults, rankCommands } from './internals/rank-commands';\n\nexport const COMMAND_PALETTE_TOKEN = new InjectionToken<CommandPaletteDirective>('ET_COMMAND_PALETTE_TOKEN');\n\n/**\n * The palette's behavior: the query, the ranked results, which row is active, and running a command.\n * Holds no visual opinion - `et-command-palette` is the rendered one.\n *\n * Commands come from {@link injectCommandPaletteRegistry}, not from this element's content.\n */\n@Directive({\n  selector: '[etCommandPalette]',\n  exportAs: 'etCommandPalette',\n  providers: [{ provide: COMMAND_PALETTE_TOKEN, useExisting: CommandPaletteDirective }],\n  host: {\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class CommandPaletteDirective {\n  private registry = injectCommandPaletteRegistry();\n  private overlayRef = inject(OVERLAY_REF, { optional: true });\n\n  /** What the reader typed. Two-way, so a consumer can seed or clear it. */\n  public query = model('');\n\n  /** Whether choosing a command closes the palette. */\n  public closeOnRun = input(true);\n\n  private activeId = signal<string | null>(null);\n\n  /** Every command the query matched, best first. */\n  public results = computed(() => rankCommands(this.registry.commands(), this.query()));\n\n  /** The same results under their headings, for rendering. */\n  public groups = computed(() => groupResults(this.results()));\n\n  /**\n   * The results in the order they are rendered, which is the grouped order and not the ranked one. The\n   * arrow keys must walk what the reader sees, or the highlight jumps between groups.\n   */\n  public orderedResults = computed(() => this.groups().flatMap((group) => group.results));\n\n  /** Results a reader can actually reach with the arrow keys. */\n  public enabledResults = computed(() => this.orderedResults().filter((result) => !result.command.disabled));\n\n  /** Whether anything is registered at all, which reads differently from a query matching nothing. */\n  public hasCommands = computed(() => this.registry.commands().length > 0);\n\n  /**\n   * Whether any listed command carries an icon. Rows reserve the icon column together, so their labels\n   * line up instead of stepping in and out as the query changes which commands have one.\n   */\n  public hasIcons = computed(() => this.orderedResults().some((result) => !!result.command.icon));\n\n  /**\n   * The row Enter would run. Falls back to the first enabled result, so a query that filters the chosen\n   * row away still has a row to run, and deleting back to it restores it.\n   */\n  public activeResult = computed<CommandPaletteResult | null>(() => {\n    const enabled = this.enabledResults();\n    const id = this.activeId();\n    const active = id ? enabled.find((result) => result.command.id === id) : undefined;\n\n    return active ?? enabled[0] ?? null;\n  });\n\n  /** Id of the element listing the results, so a search field can point `aria-controls` at it. */\n  public listboxId = createComponentId('et-command-palette-list');\n\n  /** Id of the command Enter would run, for a template marking the active row. */\n  public activeCommandId = computed(() => this.activeResult()?.command.id ?? null);\n\n  private rowIdPrefix = createComponentId('et-command-palette-row');\n\n  // Ids are handed out by position rather than built from a command id, which is the app's string and may\n  // hold whitespace an `id` attribute cannot.\n  private rowIds = computed(\n    () => new Map(this.orderedResults().map((result, index) => [result.command.id, `${this.rowIdPrefix}-${index}`])),\n  );\n\n  /** @internal */\n  public activeDescendantId = computed(() => {\n    const active = this.activeResult();\n\n    return active ? this.rowId(active.command) : null;\n  });\n\n  /** @internal The id of a rendered row, for `aria-activedescendant`. */\n  public rowId(command: CommandPaletteCommand) {\n    return this.rowIds().get(command.id) ?? null;\n  }\n\n  public setActive(result: CommandPaletteResult | null) {\n    this.activeId.set(result?.command.id ?? null);\n  }\n\n  /** Runs a command, and closes the palette first so the command may open an overlay of its own. */\n  public run(command: CommandPaletteCommand) {\n    if (command.disabled) {\n      return;\n    }\n\n    if (this.closeOnRun()) {\n      this.overlayRef?.close();\n    }\n\n    command.run();\n  }\n\n  public runActive() {\n    const active = this.activeResult();\n\n    if (active) {\n      this.run(active.command);\n    }\n  }\n\n  /** @internal Central keyboard handling for the host, the search field, and the rows. */\n  public handleKeydown(event: KeyboardEvent) {\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.moveActive(1);\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        this.moveActive(-1);\n        break;\n\n      case 'Home':\n        // Home and End belong to the search field's own text editing until it is empty.\n        if (this.query()) return;\n        event.preventDefault();\n        this.moveActiveTo(0);\n        break;\n\n      case 'End':\n        if (this.query()) return;\n        event.preventDefault();\n        this.moveActiveTo(this.enabledResults().length - 1);\n        break;\n\n      case 'Enter':\n        event.preventDefault();\n        this.runActive();\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  private moveActive(delta: number) {\n    const enabled = this.enabledResults();\n\n    if (!enabled.length) {\n      return;\n    }\n\n    const current = this.activeResult();\n    const index = current ? enabled.findIndex((result) => result.command.id === current.command.id) : -1;\n\n    const next = (index + delta + enabled.length) % enabled.length;\n\n    this.setActive(enabled[next] ?? null);\n  }\n\n  private moveActiveTo(index: number) {\n    this.setActive(this.enabledResults()[index] ?? null);\n  }\n}\n","import { Directive, ElementRef, afterNextRender, effect, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { COMMAND_PALETTE_ERROR_CODES } from '../command-palette-errors';\nimport { CommandPaletteDirective } from './command-palette.directive';\n\n/**\n * The palette's search field. Writes what the reader types into the palette's `query`, and hands the\n * keys that move between rows to the palette while keeping normal text editing for the rest.\n *\n * @example\n * <input etCommandPaletteSearch />\n */\n@Directive({\n  selector: 'input[etCommandPaletteSearch]',\n  exportAs: 'etCommandPaletteSearch',\n  host: {\n    type: 'text',\n    autocomplete: 'off',\n    spellcheck: 'false',\n    role: 'combobox',\n    'aria-autocomplete': 'list',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.aria-controls]': 'expanded() ? listboxId() : null',\n    '[attr.aria-activedescendant]': 'activeDescendantId()',\n    '(input)': 'handleInput()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class CommandPaletteSearchDirective {\n  private palette = inject(CommandPaletteDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  constructor() {\n    effect(() => {\n      const query = this.palette?.query() ?? '';\n      const element = this.elementRef.nativeElement;\n\n      if (element.value !== query) {\n        element.value = query;\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.palette) {\n          throw new RuntimeError(\n            COMMAND_PALETTE_ERROR_CODES.SEARCH_OUTSIDE_PALETTE,\n            '[CommandPaletteSearchDirective] etCommandPaletteSearch must be rendered inside an [etCommandPalette] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public focus(options?: { select?: boolean }) {\n    const element = this.elementRef.nativeElement;\n\n    element.focus({ preventScroll: true });\n\n    if (options?.select) {\n      element.select();\n    }\n  }\n\n  protected activeDescendantId() {\n    return this.palette?.activeDescendantId() ?? null;\n  }\n\n  protected listboxId() {\n    return this.palette?.listboxId ?? null;\n  }\n\n  protected expanded() {\n    return (this.palette?.groups().length ?? 0) > 0;\n  }\n\n  protected handleInput() {\n    this.palette?.query.set(this.elementRef.nativeElement.value);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    // Escape clears a query before it closes the palette, so one key both undoes a search and leaves.\n    if (event.key === 'Escape' && this.elementRef.nativeElement.value) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.palette?.query.set('');\n      this.elementRef.nativeElement.value = '';\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type KbdPlatform = 'apple' | 'other';\n\ntype KbdKeyRendering = {\n  readonly label: string;\n  readonly name: string;\n};\n\ntype KbdKeySpec = {\n  readonly apple: KbdKeyRendering;\n  readonly other: KbdKeyRendering;\n};\n\nconst everywhere = (label: string, name = label): KbdKeySpec => ({\n  apple: { label, name },\n  other: { label, name },\n});\n\nconst KBD_KEY_ALIASES: Record<string, string> = {\n  cmd: 'meta',\n  command: 'meta',\n  control: 'ctrl',\n  option: 'alt',\n  return: 'enter',\n  escape: 'esc',\n  del: 'delete',\n  spacebar: 'space',\n  arrowup: 'up',\n  arrowdown: 'down',\n  arrowleft: 'left',\n  arrowright: 'right',\n  pgup: 'pageup',\n  pgdn: 'pagedown',\n  plus: '+',\n};\n\nconst KBD_KEY_SPECS: Record<string, KbdKeySpec> = {\n  mod: { apple: { label: '⌘', name: 'Command' }, other: { label: 'Ctrl', name: 'Control' } },\n  meta: { apple: { label: '⌘', name: 'Command' }, other: { label: 'Meta', name: 'Meta' } },\n  ctrl: { apple: { label: '⌃', name: 'Control' }, other: { label: 'Ctrl', name: 'Control' } },\n  alt: { apple: { label: '⌥', name: 'Option' }, other: { label: 'Alt', name: 'Alt' } },\n  shift: { apple: { label: '⇧', name: 'Shift' }, other: { label: 'Shift', name: 'Shift' } },\n  enter: { apple: { label: '↵', name: 'Enter' }, other: { label: 'Enter', name: 'Enter' } },\n  tab: { apple: { label: '⇥', name: 'Tab' }, other: { label: 'Tab', name: 'Tab' } },\n  backspace: { apple: { label: '⌫', name: 'Backspace' }, other: { label: 'Backspace', name: 'Backspace' } },\n  delete: { apple: { label: '⌦', name: 'Delete' }, other: { label: 'Del', name: 'Delete' } },\n  esc: /* @__PURE__ */ everywhere('Esc', 'Escape'),\n  space: /* @__PURE__ */ everywhere('Space'),\n  up: /* @__PURE__ */ everywhere('↑', 'Arrow up'),\n  down: /* @__PURE__ */ everywhere('↓', 'Arrow down'),\n  left: /* @__PURE__ */ everywhere('←', 'Arrow left'),\n  right: /* @__PURE__ */ everywhere('→', 'Arrow right'),\n  pageup: /* @__PURE__ */ everywhere('PgUp', 'Page up'),\n  pagedown: /* @__PURE__ */ everywhere('PgDn', 'Page down'),\n  home: /* @__PURE__ */ everywhere('Home'),\n  end: /* @__PURE__ */ everywhere('End'),\n  '+': /* @__PURE__ */ everywhere('+', 'Plus'),\n};\n\n/**\n * Whether the current environment uses Apple's modifier glyphs. Returns `'other'` where there is no\n * `navigator`, so a server render and a non-Apple client agree.\n */\nexport const detectKbdPlatform = (): KbdPlatform => {\n  if (typeof navigator === 'undefined') return 'other';\n\n  // `platform` is deprecated but still the most reliable Apple signal; the UA string is the fallback.\n  return /mac|iphone|ipad|ipod/i.test(navigator.platform || navigator.userAgent) ? 'apple' : 'other';\n};\n\n/**\n * The platform whose key glyphs `et-kbd` renders. Defaults to detecting Apple platforms from the\n * browser; provide it to pin the rendering (useful for a server render or a visual test).\n */\nexport const KBD_PLATFORM = new InjectionToken<KbdPlatform>('KBD_PLATFORM', {\n  providedIn: 'root',\n  factory: detectKbdPlatform,\n});\n\n/**\n * The canonical name of a key, with spelling aliases resolved - `cmd` and `command` both give\n * `meta`, `escape` gives `esc`. An unknown key is returned lowercased and trimmed.\n */\nexport const canonicalKbdKey = (key: string) => {\n  const normalized = key.trim().toLowerCase();\n\n  return KBD_KEY_ALIASES[normalized] ?? normalized;\n};\n\nconst resolveKey = (key: string, platform: KbdPlatform): KbdKeyRendering => {\n  const trimmed = key.trim();\n  const canonical = canonicalKbdKey(trimmed);\n  const spec = KBD_KEY_SPECS[canonical];\n\n  if (spec) return spec[platform];\n\n  const label = trimmed.length === 1 ? trimmed.toUpperCase() : trimmed.charAt(0).toUpperCase() + trimmed.slice(1);\n\n  return { label, name: label };\n};\n\n/**\n * Splits a chord such as `mod+shift+k` into its keys. Whitespace around a key is ignored; use `plus`\n * for the literal `+` key.\n */\nexport const parseKbdKeys = (keys: string): string[] =>\n  keys\n    .split('+')\n    .map((key) => key.trim())\n    .filter((key) => key.length > 0);\n\n/** The glyph or word printed on a key for the given platform, e.g. `mod` → `⌘` on Apple, `Ctrl` elsewhere. */\nexport const kbdKeyLabel = (key: string, platform: KbdPlatform) => resolveKey(key, platform).label;\n\n/** The spoken name of a key, for the text a screen reader reads in place of the glyph. */\nexport const kbdKeyName = (key: string, platform: KbdPlatform) => resolveKey(key, platform).name;\n","import { KbdPlatform, canonicalKbdKey, parseKbdKeys } from './kbd-keys';\n\n/** The `event.key` a named key reports. Keys absent here are matched as written. */\nconst KEY_EVENT_NAMES: Record<string, string> = {\n  esc: 'Escape',\n  enter: 'Enter',\n  tab: 'Tab',\n  space: ' ',\n  backspace: 'Backspace',\n  delete: 'Delete',\n  up: 'ArrowUp',\n  down: 'ArrowDown',\n  left: 'ArrowLeft',\n  right: 'ArrowRight',\n  pageup: 'PageUp',\n  pagedown: 'PageDown',\n  home: 'Home',\n  end: 'End',\n};\n\ntype ChordModifiers = {\n  meta: boolean;\n  ctrl: boolean;\n  alt: boolean;\n  shift: boolean;\n};\n\ntype ParsedChord = {\n  modifiers: ChordModifiers;\n  key: string | null;\n};\n\nconst parseChord = (keys: string, platform: KbdPlatform): ParsedChord => {\n  const modifiers: ChordModifiers = { meta: false, ctrl: false, alt: false, shift: false };\n  let key: string | null = null;\n\n  for (const raw of parseKbdKeys(keys)) {\n    const canonical = canonicalKbdKey(raw);\n\n    if (canonical === 'mod') {\n      if (platform === 'apple') {\n        modifiers.meta = true;\n      } else {\n        modifiers.ctrl = true;\n      }\n    } else if (canonical === 'meta' || canonical === 'ctrl' || canonical === 'alt' || canonical === 'shift') {\n      modifiers[canonical] = true;\n    } else {\n      key = canonical;\n    }\n  }\n\n  return { modifiers, key };\n};\n\nconst matchesEventKey = (event: KeyboardEvent, canonical: string) => {\n  const named = KEY_EVENT_NAMES[canonical];\n\n  if (named) {\n    return event.key === named;\n  }\n\n  // A single letter or digit is matched on `event.code`, the physical key, before `event.key`: on\n  // macOS, Option rewrites `key` to the layout's alternate glyph (Option+K is \"˚\" on a US layout),\n  // so an `alt` chord would never fire on a `key` test alone.\n  if (canonical.length === 1) {\n    if (canonical >= 'a' && canonical <= 'z') {\n      return event.code === `Key${canonical.toUpperCase()}` || event.key.toLowerCase() === canonical;\n    }\n\n    if (canonical >= '0' && canonical <= '9') {\n      return event.code === `Digit${canonical}` || event.key === canonical;\n    }\n  }\n\n  return event.key.toLowerCase() === canonical;\n};\n\nexport type MatchesKbdChordOptions = {\n  /** The chord, in the same syntax `et-kbd` prints. */\n  keys: string;\n  /** Which platform `mod` means Command on. Read it from `KBD_PLATFORM`. */\n  platform: KbdPlatform;\n};\n\n/**\n * Whether a keydown event is the chord written in `et-kbd`'s syntax - `mod+k`, `shift+alt+up`. The\n * modifiers must match exactly, so `mod+k` does not fire on `Ctrl+Shift+K`, and `mod` resolves to\n * Command on Apple platforms and Control everywhere else.\n *\n * A chord of modifiers alone never matches; it needs one real key.\n *\n * @example\n * matchesKbdChord(event, { keys: 'mod+k', platform: inject(KBD_PLATFORM) });\n */\nexport const matchesKbdChord = (event: KeyboardEvent, options: MatchesKbdChordOptions) => {\n  const { modifiers, key } = parseChord(options.keys, options.platform);\n\n  if (!key) {\n    return false;\n  }\n\n  if (event.metaKey !== modifiers.meta) return false;\n  if (event.ctrlKey !== modifiers.ctrl) return false;\n  if (event.altKey !== modifiers.alt) return false;\n\n  // Punctuation is often typed *with* Shift - `?` is Shift+/ on a US layout - so for those keys Shift\n  // held without being written is allowed. Everywhere else it is a modifier like any other, and\n  // `mod+k` must not fire on Cmd+Shift+K.\n  const shiftMayTypeTheKey = key.length === 1 && !(key >= 'a' && key <= 'z') && !(key >= '0' && key <= '9');\n\n  if (shiftMayTypeTheKey ? modifiers.shift && !event.shiftKey : event.shiftKey !== modifiers.shift) {\n    return false;\n  }\n\n  return matchesEventKey(event, key);\n};\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { KBD_PLATFORM, kbdKeyLabel, KbdPlatform, kbdKeyName, parseKbdKeys } from './kbd-keys';\n\n/**\n * A keyboard shortcut rendered as keycaps, one cap per key, with the glyphs the current platform\n * prints on them - `mod+k` reads `⌘ K` on Apple and `Ctrl K` everywhere else.\n *\n * Use `mod` for the primary modifier rather than picking `meta` or `ctrl` yourself; that is the whole\n * point of the component. Keys are named case-insensitively and several spellings are accepted\n * (`cmd`, `option`, `escape`, `arrowup`, …). An unrecognised key is rendered as written.\n *\n * @example\n * <et-kbd keys=\"mod+k\" />\n *\n * @example\n * <et-kbd keys=\"shift+alt+arrowup\" />\n */\n@Component({\n  selector: 'et-kbd',\n  template: `\n    <span class=\"et-kbd-ally-text\">{{ spokenLabel() }}</span>\n    @for (key of keyLabels(); track $index) {\n      <kbd class=\"et-kbd-key\" aria-hidden=\"true\">{{ key }}</kbd>\n    }\n  `,\n  styleUrl: './kbd.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-kbd',\n  },\n})\nexport class KbdComponent {\n  private detectedPlatform = inject(KBD_PLATFORM);\n\n  /** The shortcut, as keys joined by `+` - e.g. `mod+shift+k`. */\n  public keys = input.required<string>();\n\n  /** Renders the glyphs of this platform instead of the detected one. */\n  public platform = input<KbdPlatform>();\n\n  private resolvedPlatform = computed(() => this.platform() ?? this.detectedPlatform);\n\n  protected keyLabels = computed(() =>\n    parseKbdKeys(this.keys()).map((key) => kbdKeyLabel(key, this.resolvedPlatform())),\n  );\n\n  protected spokenLabel = computed(() =>\n    parseKbdKeys(this.keys())\n      .map((key) => kbdKeyName(key, this.resolvedPlatform()))\n      .join(' '),\n  );\n}\n","import { KbdComponent } from './kbd.component';\n\nexport const KBD_IMPORTS = [KbdComponent] as const;\n","import { Component, ElementRef, ViewEncapsulation, afterRenderEffect, computed, inject, input } from '@angular/core';\nimport { IconDirective } from '../icon';\nimport { KbdComponent } from '../kbd';\nimport { CommandPaletteResult } from './command-palette.types';\nimport { CommandPaletteDirective } from './headless';\n\n/**\n * One row of the command palette. Rendered by `et-command-palette` from the ranked results; there is no\n * reason to place it yourself.\n */\n@Component({\n  selector: 'et-command-palette-item',\n  templateUrl: './command-palette-item.component.html',\n  styleUrl: './command-palette-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, KbdComponent],\n  host: {\n    class: 'et-command-palette-item',\n    role: 'option',\n    '[id]': 'palette.rowId(command())',\n    '[attr.aria-selected]': 'isActive()',\n    '[attr.aria-disabled]': \"command().disabled ? 'true' : null\",\n    '[class.et-command-palette-item--active]': 'isActive()',\n    '(click)': 'palette.run(command())',\n    // Keeps the caret in the search field, which is where every key the palette answers to is typed.\n    '(mousedown)': '$event.preventDefault()',\n    '(mouseenter)': 'palette.setActive(result())',\n  },\n})\nexport class CommandPaletteItemComponent {\n  protected palette = inject(CommandPaletteDirective);\n  private hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public result = input.required<CommandPaletteResult>();\n\n  protected command = computed(() => this.result().command);\n  protected isActive = computed(() => this.command().id === this.palette.activeCommandId());\n\n  constructor() {\n    // After render, so a row that the latest query moved is measured where it now sits.\n    afterRenderEffect(() => {\n      // Optional call: the test environment's DOM has no `scrollIntoView`, and a row that cannot scroll\n      // itself is not worth failing a render over.\n      if (this.isActive()) {\n        this.hostElement.nativeElement.scrollIntoView?.({ block: 'nearest' });\n      }\n    });\n  }\n}\n","@let currentCommand = command();\n\n@if (currentCommand.icon; as icon) {\n  <i [etIcon]=\"icon\" class=\"et-command-palette-item-icon\"></i>\n} @else if (palette.hasIcons()) {\n  <span class=\"et-command-palette-item-icon\" aria-hidden=\"true\"></span>\n}\n\n<span class=\"et-command-palette-item-text\">\n  <span class=\"et-command-palette-item-label\">\n    <!-- Every branch renders an element, never bare text: a text node here would carry this\n         indentation into the label, and show as a gap around the matched run. -->\n    @for (segment of result().segments; track $index) {\n      @if (segment.matched) {\n        <mark class=\"et-command-palette-item-match\">{{ segment.text }}</mark>\n      } @else {\n        <span>{{ segment.text }}</span>\n      }\n    }\n  </span>\n\n  @if (currentCommand.description; as description) {\n    <span class=\"et-command-palette-item-description\">{{ description }}</span>\n  }\n</span>\n\n@if (currentCommand.shortcut; as shortcut) {\n  <et-kbd [keys]=\"shortcut\" class=\"et-command-palette-item-shortcut\" />\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** Every string the command palette renders itself. The commands are yours. */\nexport type CommandPaletteLabels = {\n  /** Placeholder of the search field. */\n  placeholder: string;\n  /** Accessible name of the search field, which has no visible label. */\n  searchLabel: string;\n  /** Shown in place of the list when no command matches the query. */\n  empty: string;\n  /** Shown in place of the list when nothing is registered at all. */\n  noCommands: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_COMMAND_PALETTE_LABELS: CommandPaletteLabels = {\n  placeholder: 'Search for a command…',\n  searchLabel: 'Search for a command',\n  empty: 'No matching command',\n  noCommands: 'No commands available',\n};\n\n/** The built-in German labels, used when the current locale is a German one. */\nexport const GERMAN_COMMAND_PALETTE_LABELS: CommandPaletteLabels = {\n  placeholder: 'Nach einem Befehl suchen…',\n  searchLabel: 'Nach einem Befehl suchen',\n  empty: 'Kein passender Befehl',\n  noCommands: 'Keine Befehle verfügbar',\n};\n\n/** The label set for a locale. Anything other than English and German needs {@link provideCommandPaletteLabels}. */\nexport const commandPaletteLabelsForLocale = (locale: string): CommandPaletteLabels =>\n  locale.toLowerCase().startsWith('de') ? GERMAN_COMMAND_PALETTE_LABELS : DEFAULT_COMMAND_PALETTE_LABELS;\n\nconst COMMAND_PALETTE_LABELS_DEF = /* @__PURE__ */ defineLabels<CommandPaletteLabels>(\n  'COMMAND_PALETTE_LABELS',\n  commandPaletteLabelsForLocale,\n);\n\n/**\n * Localize the command palette's strings below this injector, and read the set in effect here as a\n * signal. Partial - what you leave out keeps the value the current locale gives it. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideCommandPaletteLabels({ placeholder: 'Rechercher une commande…' });\n */\nexport const provideCommandPaletteLabels = /* @__PURE__ */ toProvideFn(COMMAND_PALETTE_LABELS_DEF);\nexport const injectCommandPaletteLabels = /* @__PURE__ */ toInjectFn(COMMAND_PALETTE_LABELS_DEF);\nexport const COMMAND_PALETTE_LABELS = /* @__PURE__ */ toToken(COMMAND_PALETTE_LABELS_DEF);\n","import { Component, ViewEncapsulation, afterNextRender, inject, viewChild } from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective, createComponentId } from '@ethlete/core';\nimport { CommandPaletteItemComponent } from './command-palette-item.component';\nimport { injectCommandPaletteLabels } from './command-palette-labels';\nimport { CommandPaletteDirective, CommandPaletteSearchDirective } from './headless';\n\n/**\n * The command palette: a search field over every registered command, ranked as the reader types.\n *\n * Open it as an overlay rather than placing it in a page - {@link commandPaletteOverlay} defines it as a\n * dialog, and {@link injectCommandPalette} opens that. Commands come from\n * {@link registerCommands}, not from this element's content.\n *\n * @example\n * <et-command-palette />\n */\n@Component({\n  selector: 'et-command-palette',\n  templateUrl: './command-palette.component.html',\n  styleUrl: './command-palette.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommandPaletteItemComponent, CommandPaletteSearchDirective],\n  hostDirectives: [\n    { directive: CommandPaletteDirective, inputs: ['closeOnRun', 'query'], outputs: ['queryChange'] },\n    ProvideColorDirective,\n    AutoSurfaceDirective,\n  ],\n  host: {\n    class: 'et-command-palette',\n  },\n})\nexport class CommandPaletteComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  protected palette = inject(CommandPaletteDirective);\n  protected labels = injectCommandPaletteLabels();\n\n  private search = viewChild(CommandPaletteSearchDirective);\n  private groupIdPrefix = createComponentId('et-command-palette-group');\n\n  constructor() {\n    // This panel IS the overlay's own surface, so it paints the registered elevation rather than stacking\n    // a level above it - same reasoning as the menu's panel.\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    // The palette renders in a detached overlay pane, so colour context from wherever it was opened has\n    // to be re-applied here instead of cascading through the DOM. In the constructor, so the theme is in\n    // place before the enter animation's first painted frame.\n    if (this.contextColorProvider) {\n      this.ownColorProvider.syncWithProvider(this.contextColorProvider);\n    }\n\n    afterNextRender(() => this.search()?.focus());\n  }\n\n  protected groupId(label: string) {\n    return `${this.groupIdPrefix}-${label.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;\n  }\n}\n","<div class=\"et-command-palette-search-field\">\n  <input [attr.aria-label]=\"labels().searchLabel\" [placeholder]=\"labels().placeholder\" etCommandPaletteSearch />\n</div>\n\n@let resultGroups = palette.groups();\n\n@if (resultGroups.length) {\n  <div [attr.aria-label]=\"labels().searchLabel\" [id]=\"palette.listboxId\" class=\"et-command-palette-list\" role=\"listbox\">\n    @for (group of resultGroups; track group.label) {\n      @if (group.label; as groupLabel) {\n        <p [id]=\"groupId(groupLabel)\" class=\"et-command-palette-group-label\" role=\"presentation\">{{ groupLabel }}</p>\n      }\n\n      <div [attr.aria-labelledby]=\"group.label ? groupId(group.label) : null\" role=\"group\">\n        @for (result of group.results; track result.command.id) {\n          <et-command-palette-item [result]=\"result\" />\n        }\n      </div>\n    }\n  </div>\n} @else {\n  <p class=\"et-command-palette-empty\">{{ palette.hasCommands() ? labels().empty : labels().noCommands }}</p>\n}\n","import { createOverlayOpener, defineOverlay, dialogOverlayStrategy } from '../overlay';\nimport { CommandPaletteComponent } from './command-palette.component';\n\n/**\n * The palette as a centered dialog. Sits high in the viewport rather than in its middle, because the\n * list grows downwards as the reader types and a middle-anchored panel would shift under them.\n */\nexport const COMMAND_PALETTE_OVERLAY = /* @__PURE__ */ defineOverlay<CommandPaletteComponent>({\n  component: CommandPaletteComponent,\n  strategies: /* @__PURE__ */ dialogOverlayStrategy({\n    width: 'min(560px, calc(100% - 32px))',\n    maxHeight: '60%',\n  }),\n  panelClass: 'et-command-palette-panel',\n});\n\n/**\n * Opens the command palette. Call it in an injection context, then `open()` from a handler - or add\n * `[etCommandPaletteShortcut]` to an element and let a key chord open it.\n *\n * @example\n * private palette = injectCommandPalette();\n *\n * protected openPalette() {\n *   this.palette.open();\n * }\n */\nexport const injectCommandPalette = () => createOverlayOpener(COMMAND_PALETTE_OVERLAY);\n","import { DOCUMENT, Directive, afterNextRender, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RuntimeError } from '@ethlete/core';\nimport { filter, fromEvent, tap } from 'rxjs';\nimport { KBD_PLATFORM, matchesKbdChord, parseKbdKeys } from '../kbd';\nimport { injectOverlayManager } from '../overlay';\nimport { CommandPaletteComponent } from './command-palette.component';\nimport { COMMAND_PALETTE_ERROR_CODES } from './command-palette-errors';\nimport { injectCommandPalette } from './command-palette.overlay';\n\nconst MODIFIERS = /* @__PURE__ */ new Set([\n  'mod',\n  'meta',\n  'ctrl',\n  'alt',\n  'shift',\n  'cmd',\n  'command',\n  'control',\n  'option',\n]);\n\nconst DEFAULT_SHORTCUT = 'mod+k';\n\n/**\n * Opens the command palette on a key chord, for as long as the host element lives, and closes it again\n * on the same chord. Put it on the application's root component; the chord is listened for on the\n * document, not on the host element.\n *\n * Opt-in on purpose: nothing in this library takes a global key without being asked. `mod` resolves to\n * Command on Apple platforms and Control everywhere else, so one chord suits both.\n *\n * @example\n * <div etCommandPaletteShortcut>…</div>\n *\n * @example\n * <div etCommandPaletteShortcut=\"mod+shift+p\">…</div>\n */\n@Directive({\n  selector: '[etCommandPaletteShortcut]',\n  exportAs: 'etCommandPaletteShortcut',\n})\nexport class CommandPaletteShortcutDirective {\n  private document = inject(DOCUMENT);\n  private platform = inject(KBD_PLATFORM);\n  private palette = injectCommandPalette();\n  private overlayManager = injectOverlayManager();\n\n  /** The chord, in `et-kbd` syntax. */\n  public shortcut = input(DEFAULT_SHORTCUT, {\n    alias: 'etCommandPaletteShortcut',\n    // A bare `etCommandPaletteShortcut` attribute binds the empty string, not the default, so without\n    // this the documented no-value form would listen for a chord that can never fire.\n    transform: (value: string) => value?.trim() || DEFAULT_SHORTCUT,\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      // After the first render, so the chord checked is the one the consumer wrote and not the default.\n      afterNextRender(() => {\n        const keys = parseKbdKeys(this.shortcut());\n\n        if (!keys.some((key) => !MODIFIERS.has(key.toLowerCase()))) {\n          throw new RuntimeError(\n            COMMAND_PALETTE_ERROR_CODES.SHORTCUT_WITHOUT_KEY,\n            `[CommandPaletteShortcutDirective] \"${this.shortcut()}\" is modifiers only, so it can never fire. Add a key, e.g. \"${DEFAULT_SHORTCUT}\".`,\n          );\n        }\n      });\n    }\n\n    fromEvent<KeyboardEvent>(this.document, 'keydown')\n      .pipe(\n        filter((event) => matchesKbdChord(event, { keys: this.shortcut(), platform: this.platform })),\n        tap((event) => {\n          event.preventDefault();\n          this.toggle();\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  public toggle() {\n    const openPalette = this.overlayManager\n      .openOverlays()\n      .find((overlayRef) => overlayRef.componentInstance() instanceof CommandPaletteComponent);\n\n    if (openPalette) {\n      openPalette.close();\n\n      return;\n    }\n\n    this.palette.open();\n  }\n}\n","import { CommandPaletteShortcutDirective } from './command-palette-shortcut.directive';\nimport { CommandPaletteComponent } from './command-palette.component';\nimport { CommandPaletteSearchDirective, CommandPaletteDirective } from './headless';\n\nexport const COMMAND_PALETTE_IMPORTS = [\n  CommandPaletteComponent,\n  CommandPaletteDirective,\n  CommandPaletteSearchDirective,\n  CommandPaletteShortcutDirective,\n] as const;\n","import { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DestroyRef, Directive, inject, input, numberAttribute, output, signal } from '@angular/core';\nimport { copyToClipboard } from '@ethlete/core';\nimport { Subject, switchMap, tap, timer } from 'rxjs';\n\n/**\n * Copies `text` to the clipboard on click and ticks `copied()` for `resetDelay` ms - the\n * icon-swap feedback every copy button in this library wants, without each one hand-rolling its\n * own reset timer. Carries no template or styling of its own; compose it with `et-icon-button` (or\n * any other button) and swap the icon off `copied()`:\n *\n * @example\n * <button [text]=\"jsonText\" et-icon-button etCopyButton #copyBtn=\"etCopyButton\" type=\"button\" (copySuccess)=\"onCopy()\">\n *   @if (copyBtn.copied()) {\n *     <i etIcon=\"et-check\"></i>\n *   } @else {\n *     <i etIcon=\"et-clipboard-check\"></i>\n *   }\n * </button>\n */\n@Directive({\n  selector: '[etCopyButton]',\n  exportAs: 'etCopyButton',\n  host: {\n    '[attr.data-copied]': 'copied() || null',\n    '(click)': 'requestCopy()',\n  },\n})\nexport class CopyButtonDirective {\n  private destroyRef = inject(DestroyRef);\n\n  /** The value to copy, or a getter for it - a getter avoids re-serializing on every change detection. */\n  public text = input<string | (() => string)>('');\n\n  /** How long `copied()` stays `true` after a successful copy. */\n  public resetDelay = input(1200, { transform: numberAttribute });\n\n  /** Fires once the value has actually reached the clipboard. */\n  public copySuccess = output<void>();\n\n  public copied = signal(false);\n\n  private reset$ = new Subject<void>();\n\n  constructor() {\n    // Each copy restarts the countdown; switchMap drops the pending reset of the previous one.\n    this.reset$\n      .pipe(\n        switchMap(() => timer(this.resetDelay())),\n        tap(() => this.copied.set(false)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  public requestCopy() {\n    const text = this.text();\n\n    copyToClipboard(typeof text === 'function' ? text() : text)\n      .pipe(\n        tap((didCopy) => {\n          if (!didCopy) return;\n\n          this.copied.set(true);\n          this.copySuccess.emit();\n          this.reset$.next();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import { CopyButtonDirective } from './copy-button.directive';\n\nexport const COPY_BUTTON_IMPORTS = [CopyButtonDirective] as const;\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\nexport const DESCRIPTION_LIST_VARIANTS = {\n  INLINE: 'inline',\n  STACKED: 'stacked',\n} as const;\n\nexport type DescriptionListVariant = (typeof DESCRIPTION_LIST_VARIANTS)[keyof typeof DESCRIPTION_LIST_VARIANTS];\n\n/**\n * Styles a native `<dl>` for term/detail rows - CSS grid auto-placement pairs each `<dt>`/`<dd>`\n * into its own row, so plain semantic markup is all a consumer writes; there is no term/detail\n * wrapper component to reach for.\n *\n * `variant=\"inline\"` (the default) puts the term beside its detail in two columns;\n * `variant=\"stacked\"` puts it above, in one column.\n *\n * @example\n * <dl et-description-list>\n *   <dt>Name</dt>\n *   <dd>Jane Doe</dd>\n *   <dt>Email</dt>\n *   <dd>jane&#64;example.com</dd>\n * </dl>\n */\n@Component({\n  selector: 'dl[et-description-list]',\n  template: '<ng-content />',\n  styleUrl: './description-list.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-description-list',\n    '[attr.data-variant]': 'variant()',\n  },\n})\nexport class DescriptionListComponent {\n  public variant = input<DescriptionListVariant>(DESCRIPTION_LIST_VARIANTS.INLINE);\n}\n","import { DescriptionListComponent } from './description-list.component';\n\nexport const DESCRIPTION_LIST_IMPORTS = [DescriptionListComponent] as const;\n","import { booleanAttribute, Component, input, ViewEncapsulation } from '@angular/core';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * A thin rule between two groups of content or controls, announced as a separator.\n *\n * A `vertical` divider sizes itself from its parent's cross axis, so it needs a flex or grid parent\n * (or an explicit `block-size`) to be visible. Set `decorative` when the grouping is already clear\n * from the surrounding markup - the rule then carries no semantics at all.\n *\n * @example\n * <et-divider />\n *\n * @example\n * <div class=\"flex items-center\">\n *   <button et-button>Save</button>\n *   <et-divider orientation=\"vertical\" decorative />\n *   <button et-button>Discard</button>\n * </div>\n */\n@Component({\n  selector: 'et-divider',\n  template: ``,\n  styleUrl: './divider.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-divider',\n    '[attr.data-orientation]': 'orientation()',\n    '[attr.role]': 'decorative() ? \"presentation\" : \"separator\"',\n    '[attr.aria-orientation]': 'decorative() ? null : orientation()',\n    '[attr.aria-hidden]': 'decorative() ? \"true\" : null',\n  },\n})\nexport class DividerComponent {\n  public orientation = input<DividerOrientation>('horizontal');\n\n  public decorative = input(false, { transform: booleanAttribute });\n}\n","import { DividerComponent } from './divider.component';\n\nexport const DIVIDER_IMPORTS = [DividerComponent] as const;\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * A placeholder for a section or page that currently has nothing to show - no results, an empty\n * list, a not-yet-configured feature. Project an icon via `[etIcon]`, set `title`/`description`,\n * and project an action (e.g. a button) via `[etEmptyStateAction]`.\n *\n * @example\n * <et-empty-state heading=\"No results\" description=\"Try a different search term.\">\n *   <i etIcon=\"et-file\"></i>\n *   <button et-button etEmptyStateAction type=\"button\">Clear filters</button>\n * </et-empty-state>\n */\n@Component({\n  selector: 'et-empty-state',\n  template: `\n    <ng-content select=\"[etIcon]\" />\n\n    @if (heading(); as heading) {\n      <p class=\"et-empty-state-title\">{{ heading }}</p>\n    }\n\n    @if (description(); as description) {\n      <p class=\"et-empty-state-description\">{{ description }}</p>\n    }\n\n    <ng-content select=\"[etEmptyStateAction]\" />\n  `,\n  styleUrl: './empty-state.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-empty-state',\n  },\n})\nexport class EmptyStateComponent {\n  public heading = input<string>();\n  public description = input<string>();\n}\n","import { EmptyStateComponent } from './empty-state.component';\n\nexport const EMPTY_STATE_IMPORTS = [EmptyStateComponent] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\nimport { FilterOverlaySubmitButton, FilterOverlaySubmitState } from './filter-overlay.types';\n\n/**\n * Every string the filter overlay's submit button can show. The counted ones are functions, since the number is\n * the point.\n */\nexport type FilterOverlayLabels = {\n  /** While a count is in flight. */\n  loading: string;\n  /** When the count could not be established. */\n  error: string;\n  /** When the draft filters would return nothing. */\n  empty: string;\n  /** Exactly one result - worth its own string, because \"Show 1 results\" reads badly. */\n  one: string;\n  /** A known count. */\n  many: (totalHits: number) => string;\n  /** More results than are worth counting exactly. */\n  more: (maxCountedHits: number) => string;\n  /** When the overlay has no preview, so there is no count to report. */\n  apply: string;\n  /** The reset control. */\n  reset: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_FILTER_OVERLAY_LABELS: FilterOverlayLabels = {\n  loading: 'Loading results…',\n  error: 'An error occurred',\n  empty: 'No results found',\n  one: 'Show one result',\n  many: (totalHits) => `Show ${totalHits} results`,\n  more: (maxCountedHits) => `Show more than ${maxCountedHits} results`,\n  apply: 'Show results',\n  reset: 'Reset',\n};\n\n/** The built-in German labels, used when the current locale is a German one. */\nexport const GERMAN_FILTER_OVERLAY_LABELS: FilterOverlayLabels = {\n  loading: 'Lade Ergebnisse…',\n  error: 'Ein Fehler ist aufgetreten',\n  empty: 'Keine Ergebnisse gefunden',\n  one: 'Zeige ein Ergebnis',\n  many: (totalHits) => `Zeige ${totalHits} Ergebnisse`,\n  more: (maxCountedHits) => `Zeige mehr als ${maxCountedHits} Ergebnisse`,\n  apply: 'Ergebnisse anzeigen',\n  reset: 'Zurücksetzen',\n};\n\n/** The label set for a locale. Anything other than English and German needs {@link provideFilterOverlayLabels}. */\nexport const filterOverlayLabelsForLocale = (locale: string): FilterOverlayLabels =>\n  locale.toLowerCase().startsWith('de') ? GERMAN_FILTER_OVERLAY_LABELS : DEFAULT_FILTER_OVERLAY_LABELS;\n\nconst FILTER_OVERLAY_LABELS_DEF = /* @__PURE__ */ defineLabels<FilterOverlayLabels>(\n  'FILTER_OVERLAY_LABELS',\n  filterOverlayLabelsForLocale,\n);\n\n/**\n * Localize the filter overlay's strings below this injector, and read the set in effect here as a signal.\n * Partial - what you leave out keeps the value the current locale gives it. See {@link defineLabels} for the\n * shape, which every domain in this library shares.\n *\n * @example\n * provideFilterOverlayLabels({ apply: 'Voir les résultats', reset: 'Réinitialiser' });\n */\nexport const provideFilterOverlayLabels = /* @__PURE__ */ toProvideFn(FILTER_OVERLAY_LABELS_DEF);\nexport const injectFilterOverlayLabels = /* @__PURE__ */ toInjectFn(FILTER_OVERLAY_LABELS_DEF);\nexport const FILTER_OVERLAY_LABELS = /* @__PURE__ */ toToken(FILTER_OVERLAY_LABELS_DEF);\n\n/**\n * The submit button, worked out from the preview.\n *\n * The button is deliberately the place the count appears: it is what the reader is about to press, so putting\n * the consequence on it (\"Show 42 results\") lets them decide without applying first. It disables itself while a\n * count is pending, when the count failed, and when the answer is zero - applying a filter that returns nothing\n * is never what someone meant to do.\n *\n * An overlay with no preview has nothing to wait for and simply reads \"Show results\". cdk's version returned the\n * *loading* state in that case, which left the button permanently disabled.\n */\nexport const resolveFilterOverlaySubmitButton = (\n  state: FilterOverlaySubmitState,\n  labels: FilterOverlayLabels,\n): FilterOverlaySubmitButton => {\n  if (!state.hasPreview) return { label: labels.apply, disabled: false };\n  if (state.loading) return { label: labels.loading, disabled: true };\n  if (state.hasError) return { label: labels.error, disabled: true };\n\n  const totalHits = state.totalHits;\n\n  // No count, nothing in flight, no error: the preview skipped this draft (`args` returned null).\n  // Waiting here would disable the button forever - the draft is submittable, just uncounted.\n  if (totalHits === null) return { label: labels.apply, disabled: false };\n\n  if (totalHits === 0) return { label: labels.empty, disabled: true };\n  if (totalHits === 1) return { label: labels.one, disabled: false };\n  if (totalHits > state.maxCountedHits) return { label: labels.more(state.maxCountedHits), disabled: false };\n\n  return { label: labels.many(totalHits), disabled: false };\n};\n","import { InjectionToken, Injector, Provider, Signal, computed, inject } from '@angular/core';\nimport { FieldTree } from '@angular/forms/signals';\nimport { equal } from '@ethlete/core';\nimport { QueryFormFields, QueryFormModel, QueryFormSignals } from '@ethlete/query';\nimport { OVERLAY_REF, OverlayRef } from '../overlay';\nimport {\n  FilterOverlayLabels,\n  injectFilterOverlayLabels,\n  resolveFilterOverlaySubmitButton,\n} from './filter-overlay-labels';\nimport {\n  FilterOverlayPreview,\n  FilterOverlayResult,\n  FilterOverlaySubmitButton,\n  FilterOverlaySubmitState,\n} from './filter-overlay.types';\n\nexport type FilterOverlayConfig<TFields extends QueryFormFields> = {\n  /**\n   * The page's filter state. The overlay never edits it directly - it edits a detached branch and writes the\n   * branch back on submit, which is what makes dismissing the overlay a discard.\n   */\n  queryForm: QueryFormSignals<TFields>;\n\n  /**\n   * A live count of what the draft would return, driving the submit button. Optional; without it the button just\n   * says \"Show results\". Use {@link filterOverlayPreviewFromQuery} for the single-query case.\n   */\n  preview?: (draftValue: Signal<QueryFormModel<TFields>>) => FilterOverlayPreview;\n\n  /**\n   * Counts above this are reported as \"more than N\" rather than exactly. Past a few hundred the precise number\n   * stops telling the reader anything they can act on. @default 250\n   */\n  maxCountedHits?: number;\n\n  /** Full control over the submit button's label and disabled state, replacing the built-in resolver. */\n  submitButton?: (state: FilterOverlaySubmitState, labels: FilterOverlayLabels) => FilterOverlaySubmitButton;\n};\n\n/**\n * The draft's editing surface - a query form branch, described by its **value** shape rather than by its field\n * map.\n *\n * That is deliberate and worth explaining: `QueryFieldDef<T>` is contravariant in `T` (it can hold a\n * `valueToQueryParam: (value: T) => unknown`), so a concrete field map does *not* satisfy\n * `Record<string, QueryFieldDef<unknown>>`. Inference copes, but an explicit type argument -\n * `injectFilterOverlay<typeof MY_FIELDS>()` - cannot be written at all. Naming the value shape sidesteps it, and\n * is what a consumer actually cares about. Structurally identical to `QueryFormBranch`.\n */\nexport type FilterOverlayDraft<TValue> = {\n  /** The bindable signal-forms field tree: `draft.fields.search`. */\n  readonly fields: FieldTree<TValue>;\n  /** The draft's committed value - debounced and reset-resolved like the page's query form. */\n  readonly value: Signal<TValue>;\n  /** What the draft's controls hold right now, ahead of any pending debounce. */\n  readonly liveValue: Signal<TValue>;\n  /** How many of the draft's *filters* are set - search, sort and pagination excluded. */\n  readonly activeFilterCount: Signal<number>;\n  setValue(value: TValue): void;\n  patchValue(value: Partial<TValue>): void;\n  resetFieldToDefault(key: keyof TValue): void;\n  resetAllFieldsToDefault(): void;\n};\n\n/** The value shape of a query form, for naming a {@link FilterOverlay} without naming its field map. */\nexport type FilterOverlayValueOf<TForm> = TForm extends { value: Signal<infer TValue> } ? TValue : never;\n\nexport type FilterOverlay<TValue = unknown> = {\n  /**\n   * The draft being edited - bind its `fields` to your controls. A detached clone of the page's query form: its\n   * own value, the same debounce and reset graph, no URL writes, so nothing the reader does here affects the page\n   * until they submit.\n   */\n  draft: FilterOverlayDraft<TValue>;\n  /** The live count, if the overlay was configured with one. */\n  preview: FilterOverlayPreview | null;\n  /** What the submit button should say, and whether it can be pressed. */\n  submitButton: Signal<FilterOverlaySubmitButton>;\n  /** The strings in effect, after locale and any overrides. */\n  labels: Signal<FilterOverlayLabels>;\n  /** How many filters the draft has set, for a badge on the overlay's own controls. */\n  activeFilterCount: Signal<number>;\n  /** Whether the draft differs from the filters actually applied - what \"unsaved changes\" means here. */\n  hasChanges: Signal<boolean>;\n  /**\n   * Whether every field in the draft is still at its default, i.e. there is nothing for `reset()` to do.\n   *\n   * Not the same as `activeFilterCount() === 0`: the query form deliberately leaves navigation state (search,\n   * page, sort) out of that count, so a reader who has typed a search has nothing to show in a badge but plenty\n   * to reset.\n   */\n  isPristine: Signal<boolean>;\n  /** Write the draft back to the page's filters and close. */\n  submit: () => void;\n  /** Put every filter back to its default, without closing. */\n  reset: () => void;\n  /** Close without applying anything. */\n  discard: () => void;\n};\n\n/** The filter overlay provided for the current overlay component. Inject with `{ optional: true }` in a control\n *  that may also be used outside one. */\nexport const FILTER_OVERLAY_TOKEN = new InjectionToken<FilterOverlay>('FILTER_OVERLAY');\n\nconst createFilterOverlay = <TFields extends QueryFormFields>(\n  config: FilterOverlayConfig<TFields>,\n): FilterOverlay<QueryFormModel<TFields>> => {\n  const overlayRef = inject<OverlayRef<object, FilterOverlayResult<QueryFormModel<TFields>>>>(OVERLAY_REF, {\n    optional: true,\n  });\n  const labels = injectFilterOverlayLabels();\n\n  const draft = config.queryForm.branch(inject(Injector));\n  const maxCountedHits = config.maxCountedHits ?? 250;\n\n  // Called here, inside the overlay's injection context, which is why `preview` is a factory: a query created at\n  // config time would belong to the page and outlive the overlay.\n  const preview = config.preview?.(draft.value) ?? null;\n\n  const submitButton = computed(() => {\n    const state: FilterOverlaySubmitState = {\n      totalHits: preview?.totalHits() ?? null,\n      loading: preview?.loading() ?? false,\n      hasError: preview?.hasError() ?? false,\n      hasPreview: preview !== null,\n      maxCountedHits,\n    };\n\n    return config.submitButton?.(state, labels()) ?? resolveFilterOverlaySubmitButton(state, labels());\n  });\n\n  const close = (result: FilterOverlayResult<QueryFormModel<TFields>>) => overlayRef?.close(result);\n\n  return {\n    draft,\n    preview,\n    submitButton,\n    labels,\n    activeFilterCount: draft.activeFilterCount,\n    hasChanges: computed(() => !equal(draft.liveValue(), config.queryForm.value())),\n    isPristine: computed(() => equal(draft.liveValue(), config.queryForm.defaultValue)),\n\n    submit: () => {\n      const value = draft.liveValue();\n\n      // Through `setValue` rather than by mutating fields: that is what fires the query form's reset graph (a new\n      // search resetting the page number) and its URL sync, so the page's filters and the address bar agree.\n      config.queryForm.setValue(value);\n      close({ didUpdate: true, value });\n    },\n\n    reset: () => draft.resetAllFieldsToDefault(),\n\n    discard: () => close({ didUpdate: false }),\n  };\n};\n\n/**\n * Provides the filter overlay for an overlay component: a draft of the page's filters that the reader edits, a\n * live count of what those filters would return, and an explicit apply.\n *\n * The model is **edit a copy, then commit** - dismissing the overlay discards, which is what lets a filter panel\n * be closed with Escape without consequence. It is cdk's `FilterOverlayService` rebuilt on the signals query\n * form: no reactive-forms `FormGroup` to clone, no legacy query types, and `reset()` needs no configured defaults\n * because the query form already knows them.\n *\n * @example\n * export const FILTERS_OVERLAY = defineOverlay({ component: TeamFiltersComponent, … });\n *\n * @Component({\n *   providers: [\n *     provideFilterOverlay({\n *       queryForm: injectTeamFilters(),\n *       preview: filterOverlayPreviewFromQuery({\n *         queryCreator: searchTeams,\n *         args: (value) => ({ queryParams: { ...value, limit: 1 } }),\n *       }),\n *     }),\n *   ],\n * })\n * export class TeamFiltersComponent {\n *   protected filters = injectFilterOverlay();\n * }\n */\nexport const provideFilterOverlay = <TFields extends QueryFormFields>(\n  config: FilterOverlayConfig<TFields>,\n): Provider[] => [{ provide: FILTER_OVERLAY_TOKEN, useFactory: () => createFilterOverlay(config) }];\n\n/**\n * The filter overlay provided above this component, typed to your filters' **value** shape:\n *\n * ```ts\n * const createTeamFilters = () => defineQueryForm({ fields: TEAM_FILTER_FIELDS });\n * type TeamFilterValue = FilterOverlayValueOf<ReturnType<typeof createTeamFilters>>;\n *\n * protected filters = injectFilterOverlay<TeamFilterValue>();\n * ```\n */\nexport const injectFilterOverlay = <TValue = unknown>() => inject<FilterOverlay<TValue>>(FILTER_OVERLAY_TOKEN);\n","export const FILTER_OVERLAY_ERROR_CODES = {\n  MISSING_FILTER_OVERLAY: 4200,\n} as const;\n","import { Signal, computed } from '@angular/core';\nimport { AnyQueryCreator, QueryArgsOf, RequestArgs, ResponseType, withArgs } from '@ethlete/query';\nimport { FilterOverlayPreview } from './filter-overlay.types';\n\n/**\n * The usual live preview: one query, re-executed as the draft filters change, whose response says how many\n * results they would return.\n *\n * A factory of a factory, because the query has to be created in the overlay's injection context - which only\n * exists once the overlay is open. Pass the result as the config's `preview`; the filter overlay calls it with\n * its draft value.\n *\n * Debouncing is the query form's job, not this one's: the branch's value is already the debounced one where a\n * field asked for it, so typing in a search box does not fire a request per keystroke.\n *\n * @example\n * providers: [\n *   provideFilterOverlay({\n *     queryForm: filters,\n *     preview: filterOverlayPreviewFromQuery({\n *       queryCreator: searchTeams,\n *       args: (value) => ({ queryParams: { ...value, limit: 1 } }),\n *       toTotalHits: (response) => response.totalHits,\n *     }),\n *   }),\n * ]\n */\nexport const filterOverlayPreviewFromQuery =\n  <TCreator extends AnyQueryCreator, TValue>(config: {\n    /** The query creator to run. Created once, then re-executed as the draft changes. */\n    queryCreator: TCreator;\n    /**\n     * Builds the request args from the draft value. Return `null` to skip the request - for a draft that is not\n     * yet worth counting. Ask for as few rows as the endpoint allows: only the total is used.\n     */\n    args: (value: TValue) => RequestArgs<QueryArgsOf<TCreator>> | null;\n    /** Pulls the total out of the response. @default `response.totalHits` */\n    toTotalHits?: (response: ResponseType<QueryArgsOf<TCreator>>) => number;\n  }) =>\n  (draftValue: Signal<TValue>): FilterOverlayPreview => {\n    const query = config.queryCreator(withArgs<QueryArgsOf<TCreator>>(() => config.args(draftValue()) ?? null));\n\n    const totalHits = computed(() => {\n      const response = query.response();\n\n      if (response === null || response === undefined) return null;\n\n      if (config.toTotalHits) return config.toTotalHits(response);\n\n      if (typeof response !== 'object' || !('totalHits' in response)) {\n        if (ngDevMode) {\n          console.error(\n            '[filterOverlayPreviewFromQuery] The response has no `totalHits` property, so the result count ' +\n              'cannot be read. Pass `toTotalHits` to say where it is.',\n            response,\n          );\n        }\n\n        return null;\n      }\n\n      return response.totalHits as number;\n    });\n\n    return {\n      loading: computed(() => query.loading() !== null),\n      hasError: computed(() => query.error() !== null),\n      totalHits,\n    };\n  };\n","import { Directive, computed, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { FILTER_OVERLAY_ERROR_CODES } from '../filter-overlay-errors';\nimport { FILTER_OVERLAY_TOKEN } from '../filter-overlay';\n\n/** Dev-mode guard: a control with no filter overlay above it has nothing to submit or reset. */\nconst assertInsideFilterOverlay = (hasOverlay: boolean, directiveName: string) => {\n  if (!ngDevMode || hasOverlay) return;\n\n  throw new RuntimeError(\n    FILTER_OVERLAY_ERROR_CODES.MISSING_FILTER_OVERLAY,\n    `[${directiveName}] No filter overlay was found. Add provideFilterOverlay({ … }) to the providers of the ` +\n      'overlay component this control lives in.',\n    { element: injectHostElement() },\n  );\n};\n\n/**\n * The submit button. Takes its label and disabled state from the live preview, so the button reads \"Show 42\n * results\" rather than \"Apply\" and disables itself while the count is pending or zero.\n *\n * Put it on a real `<button>` - it is the primary action of a form and should behave like one.\n *\n * @example\n * <button etFilterOverlaySubmit et-button></button>\n */\n@Directive({\n  selector: 'button[etFilterOverlaySubmit]',\n  exportAs: 'etFilterOverlaySubmit',\n  host: {\n    class: 'et-filter-overlay-submit',\n    type: 'button',\n    '[disabled]': 'isDisabled()',\n    '(click)': 'filterOverlay?.submit()',\n  },\n})\nexport class FilterOverlaySubmitDirective {\n  protected filterOverlay = inject(FILTER_OVERLAY_TOKEN, { optional: true });\n\n  protected isDisabled = computed(() => this.filterOverlay?.submitButton().disabled ?? true);\n\n  /**\n   * The label the button should show, e.g. \"Show 42 results\". Nothing renders it for you - reach the directive\n   * through its `exportAs` and interpolate it: `<button #submit=\"etFilterOverlaySubmit\" etFilterOverlaySubmit>`\n   * then `submit.label()` in the button's content.\n   */\n  public label = computed(() => this.filterOverlay?.submitButton().label ?? '');\n\n  constructor() {\n    assertInsideFilterOverlay(!!this.filterOverlay, 'FilterOverlaySubmitDirective');\n  }\n}\n\n/**\n * The reset control: puts every filter in the draft back to its default without closing the overlay, so the\n * reader can start again without losing the panel.\n *\n * @example\n * <button etFilterOverlayReset et-button variant=\"transparent\">Reset</button>\n */\n@Directive({\n  selector: 'button[etFilterOverlayReset]',\n  exportAs: 'etFilterOverlayReset',\n  host: {\n    class: 'et-filter-overlay-reset',\n    type: 'button',\n    '[disabled]': 'isDisabled()',\n    '(click)': 'filterOverlay?.reset()',\n  },\n})\nexport class FilterOverlayResetDirective {\n  protected filterOverlay = inject(FILTER_OVERLAY_TOKEN, { optional: true });\n\n  /**\n   * Nothing to reset when every field is already at its default. Deliberately not `activeFilterCount() === 0`:\n   * the query form leaves search and pagination out of that count, so a typed search would otherwise leave the\n   * reset button disabled with something still to clear.\n   */\n  protected isDisabled = computed(() => this.filterOverlay?.isPristine() ?? true);\n\n  constructor() {\n    assertInsideFilterOverlay(!!this.filterOverlay, 'FilterOverlayResetDirective');\n  }\n}\n","import {\n  FilterOverlayResetDirective,\n  FilterOverlaySubmitDirective,\n} from './headless/filter-overlay-controls.directive';\n\nexport const FILTER_OVERLAY_IMPORTS = [FilterOverlaySubmitDirective, FilterOverlayResetDirective] as const;\n","export const FLOATING_ACTION_ERROR_CODES = {\n  PART_OUTSIDE_FLOATING_ACTION: 4100,\n  MISSING_ANCHOR: 4101,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { FloatingActionDirective } from './floating-action.directive';\n\nexport const FLOATING_ACTION_TOKEN = new InjectionToken<FloatingActionDirective>('FLOATING_ACTION_TOKEN');\n","import { Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError, signalHostElementIntersection } from '@ethlete/core';\nimport { FLOATING_ACTION_ERROR_CODES } from '../floating-action-errors';\nimport { FLOATING_ACTION_TOKEN } from './floating-action.tokens';\n\n/** Dev-mode guard: a part outside a floating action registers with nothing and silently does nothing. */\nconst assertInsideFloatingAction = (floatingAction: unknown, directiveName: string) => {\n  if (!ngDevMode) return;\n\n  const element = injectHostElement();\n\n  afterNextRender(() => {\n    if (!floatingAction) {\n      throw new RuntimeError(\n        FLOATING_ACTION_ERROR_CODES.PART_OUTSIDE_FLOATING_ACTION,\n        `[${directiveName}] This directive must be placed inside an [etFloatingAction] element, which is what ` +\n          'coordinates it.',\n        { element },\n      );\n    }\n  });\n};\n\n/**\n * The trigger's home in the document flow - the element that stays put and keeps its space when the trigger\n * detaches.\n *\n * It has to be a separate element from the trigger, and that is the whole trick: once the trigger is\n * `position: fixed` it is *always* on screen, so observing it would immediately say \"come back\", then \"go\n * away\", forever. The anchor never moves, so its visibility is a stable question. It is also what stops the\n * layout jumping when the trigger leaves the flow.\n *\n * @example\n * <div etFloatingActionAnchor>\n *   <button etFloatingActionTrigger (click)=\"openFilters()\">Filter</button>\n * </div>\n */\n@Directive({\n  selector: '[etFloatingActionAnchor]',\n  exportAs: 'etFloatingActionAnchor',\n  host: { class: 'et-floating-action-anchor' },\n})\nexport class FloatingActionAnchorDirective {\n  /** @internal Where the anchor sits relative to the viewport - the input to the whole state machine. */\n  public intersection = signalHostElementIntersection();\n\n  constructor() {\n    const floatingAction = inject(FLOATING_ACTION_TOKEN, { optional: true });\n\n    floatingAction?.anchor.set(this);\n    assertInsideFloatingAction(floatingAction, 'FloatingActionAnchorDirective');\n  }\n}\n\n/**\n * The button (or link) itself. Carries the class the stylesheet moves, and nothing else - it stays the same\n * element in the same place in the DOM whether it is inline or floating, so the tab order never changes and a\n * screen reader never sees it appear or disappear.\n *\n * @example\n * <button etFloatingActionTrigger (click)=\"openFilters()\">Filter</button>\n */\n@Directive({\n  selector: '[etFloatingActionTrigger]',\n  exportAs: 'etFloatingActionTrigger',\n  host: { class: 'et-floating-action-trigger' },\n})\nexport class FloatingActionTriggerDirective {\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    const floatingAction = inject(FLOATING_ACTION_TOKEN, { optional: true });\n\n    floatingAction?.trigger.set(this);\n    assertInsideFloatingAction(floatingAction, 'FloatingActionTriggerDirective');\n  }\n}\n\n/**\n * The region the trigger acts on - the results list a filter button filters, the form a save bar saves.\n *\n * Optional, and what it buys is knowing when to *stop* offering the action: once this has scrolled past, the\n * reader is somewhere else on the page and a pinned \"Filter\" button is just clutter. Without it the trigger\n * floats for the rest of the page.\n *\n * @example\n * <ul etFloatingActionScope>…</ul>\n */\n@Directive({\n  selector: '[etFloatingActionScope]',\n  exportAs: 'etFloatingActionScope',\n  host: { class: 'et-floating-action-scope' },\n})\nexport class FloatingActionScopeDirective {\n  /** @internal Whether the region is still in play. */\n  public intersection = signalHostElementIntersection();\n\n  constructor() {\n    const floatingAction = inject(FLOATING_ACTION_TOKEN, { optional: true });\n\n    floatingAction?.scope.set(this);\n    assertInsideFloatingAction(floatingAction, 'FloatingActionScopeDirective');\n  }\n}\n\n/**\n * Where `scrollToTop()` scrolls to. Optional - without it the floating action's own element is the target,\n * which is usually what you want.\n *\n * Put it somewhere else when the thing to return to isn't the top of the container: a filter panel that should\n * scroll back to the first result rather than to the page heading above it.\n *\n * @example\n * <h2 etFloatingActionTop>Results</h2>\n */\n@Directive({\n  selector: '[etFloatingActionTop]',\n  exportAs: 'etFloatingActionTop',\n})\nexport class FloatingActionTopDirective {\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    const floatingAction = inject(FLOATING_ACTION_TOKEN, { optional: true });\n\n    floatingAction?.top.set(this);\n    assertInsideFloatingAction(floatingAction, 'FloatingActionTopDirective');\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The floating behaviour itself, as a styles-only component mounted by `FloatingActionDirective` (see\n * `ButtonStylesDirective` for the pattern).\n *\n * Mounted rather than carried by a default component because there is no default component: this domain has no\n * visual opinion of its own - the trigger is your button - only a position to change and a scale to animate.\n * Mounting is what lets a hand-built composition behave identically. Also where the domain's public tokens are\n * declared, since there is no Tier 3 to own them.\n *\n * @internal\n */\n@Component({\n  selector: 'et-floating-action-styles',\n  template: '',\n  styleUrl: './floating-action-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FloatingActionStylesComponent {}\n","/**\n * Where the trigger is right now.\n *\n * - `inline` - its anchor is on screen, so it sits in the flow where it was written.\n * - `floating` - the anchor has scrolled away but the region it acts on is still in play, so the trigger\n *   detaches and pins itself to the corner.\n * - `hidden` - the region has scrolled away too. There is nothing left to act on, so the trigger goes.\n */\nexport const FLOATING_ACTION_STATES = {\n  INLINE: 'inline',\n  FLOATING: 'floating',\n  HIDDEN: 'hidden',\n} as const;\n\nexport type FloatingActionState = (typeof FLOATING_ACTION_STATES)[keyof typeof FLOATING_ACTION_STATES];\n","import {\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { RuntimeError, injectStyleManager, mountEasingTokens } from '@ethlete/core';\nimport { FLOATING_ACTION_ERROR_CODES } from '../floating-action-errors';\nimport { FloatingActionStylesComponent } from '../floating-action-styles.component';\nimport { FLOATING_ACTION_STATES, FloatingActionState } from '../floating-action.types';\nimport {\n  FloatingActionAnchorDirective,\n  FloatingActionScopeDirective,\n  FloatingActionTopDirective,\n  FloatingActionTriggerDirective,\n} from './floating-action-parts.directive';\nimport { FLOATING_ACTION_TOKEN } from './floating-action.tokens';\n\n/**\n * Keeps an action reachable after the reader has scrolled past it: the trigger sits in the flow where it was\n * written, and pins itself to a corner of the viewport once its place in the page has scrolled away. A filter\n * button above a long list, a \"save changes\" bar, a back-to-top.\n *\n * Ported from cdk's `rich-filter`, which was never about filtering - it renders no filter UI and imports nothing\n * from `@ethlete/query`. This is that scroll-coordination pattern under a name that says what it does.\n *\n * **Why not CSS?** `position: sticky` can keep an element at an edge, but it cannot move it to a corner of the\n * viewport, and it has no way to express \"and the region this acts on is still on screen\" - which is the part\n * that stops a pinned button following the reader onto unrelated content. So the state comes from two\n * intersection observers and CSS reacts to it.\n *\n * @example\n * <div etFloatingAction>\n *   <div etFloatingActionAnchor>\n *     <button etFloatingActionTrigger (click)=\"openFilters()\">Filter</button>\n *   </div>\n *\n *   <ul etFloatingActionScope>\n *     @for (result of results(); track result.id) { <li>…</li> }\n *   </ul>\n * </div>\n */\n@Directive({\n  selector: '[etFloatingAction]',\n  exportAs: 'etFloatingAction',\n  providers: [{ provide: FLOATING_ACTION_TOKEN, useExisting: FloatingActionDirective }],\n  host: {\n    class: 'et-floating-action',\n    '[attr.data-state]': 'state()',\n  },\n})\nexport class FloatingActionDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private styleManager = injectStyleManager();\n\n  /**\n   * Keep the trigger in the flow, whatever the scroll position. The escape hatch for turning the behaviour off\n   * per breakpoint or per route without unwinding the markup - a desktop layout with the filters already in a\n   * sidebar has nothing to float. @default false\n   */\n  public disabled = input(false, { transform: booleanAttribute });\n\n  /** @internal Set by `etFloatingActionAnchor`. Its visibility is what drives the state. */\n  public anchor = signal<FloatingActionAnchorDirective | null>(null);\n\n  /** @internal Set by `etFloatingActionTrigger`. */\n  public trigger = signal<FloatingActionTriggerDirective | null>(null);\n\n  /** @internal Set by `etFloatingActionScope`; optional, and what bounds the action to a region. */\n  public scope = signal<FloatingActionScopeDirective | null>(null);\n\n  /** @internal Set by `etFloatingActionTop`; optional override for `scrollToTop()`. */\n  public top = signal<FloatingActionTopDirective | null>(null);\n\n  /**\n   * Where the trigger is: in the flow, pinned to the corner, or gone.\n   *\n   * Read off *above*, not merely \"not visible\": scrolling **down** past the anchor is what should pin the\n   * trigger, while an anchor still below the fold has simply not been reached and must stay put. The same goes\n   * for the scope - once it is above, the reader has left the region behind.\n   */\n  public state = computed<FloatingActionState>(() => {\n    if (this.disabled()) return FLOATING_ACTION_STATES.INLINE;\n\n    const anchorEntry = this.anchor()?.intersection()[0];\n\n    if (!anchorEntry?.isAbove) return FLOATING_ACTION_STATES.INLINE;\n\n    // No scope means nothing bounds the action, so it stays available for the rest of the page.\n    const scopeEntry = this.scope()?.intersection()[0];\n\n    if (scopeEntry?.isAbove) return FLOATING_ACTION_STATES.HIDDEN;\n\n    return FLOATING_ACTION_STATES.FLOATING;\n  });\n\n  /** Whether the trigger is currently pinned to the viewport. */\n  public isFloating = computed(() => this.state() === FLOATING_ACTION_STATES.FLOATING);\n\n  constructor() {\n    mountEasingTokens();\n    // The floating itself is CSS, and it is mechanism rather than decoration, so a hand-built composition has to\n    // get it too. De-duplicated by the style manager.\n    this.styleManager.mount(FloatingActionStylesComponent);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.anchor()) {\n          throw new RuntimeError(\n            FLOATING_ACTION_ERROR_CODES.MISSING_ANCHOR,\n            '[FloatingActionDirective] No [etFloatingActionAnchor] was found, so there is nothing to tell when ' +\n              'the trigger has scrolled away. Wrap the trigger in an anchor element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /**\n   * Scroll back to the top of the region - what a filter button does after applying filters, so the reader sees\n   * the new first result rather than wherever they happened to be. Targets `[etFloatingActionTop]` if there is\n   * one, otherwise this element.\n   */\n  public scrollToTop(options?: ScrollIntoViewOptions) {\n    const target = this.top()?.elementRef.nativeElement ?? this.elementRef.nativeElement;\n\n    target.scrollIntoView(options ?? { behavior: 'smooth', block: 'start' });\n  }\n}\n","import {\n  FloatingActionAnchorDirective,\n  FloatingActionScopeDirective,\n  FloatingActionTopDirective,\n  FloatingActionTriggerDirective,\n} from './headless/floating-action-parts.directive';\nimport { FloatingActionDirective } from './headless/floating-action.directive';\n\nexport const FLOATING_ACTION_IMPORTS = [\n  FloatingActionDirective,\n  FloatingActionAnchorDirective,\n  FloatingActionTriggerDirective,\n  FloatingActionScopeDirective,\n  FloatingActionTopDirective,\n] as const;\n","// codes 3300-3399\nexport const CASCADER_ERROR_CODES = {\n  MISSING_TRIGGER: 3300,\n  MISSING_SURFACE: 3301,\n  MISSING_DATA_SOURCE: 3302,\n  TRIGGER_OUTSIDE_CASCADER: 3303,\n  SURFACE_OUTSIDE_CASCADER: 3304,\n  COLUMN_OUTSIDE_CASCADER: 3305,\n  NODE_OUTSIDE_COLUMN: 3306,\n  SEARCH_OUTSIDE_CASCADER: 3307,\n  SEARCH_OPTION_OUTSIDE_CASCADER: 3308,\n} as const;\n","import { Injector, inject, runInInjectionContext } from '@angular/core';\nimport {\n  AnyQueryCreator,\n  QueryArgsOf,\n  QueryErrorResponse,\n  QueryExecutionState,\n  RequestArgs,\n  ResponseType,\n  withArgs,\n} from '@ethlete/query';\nimport { Observable, defer, filter, finalize, map, switchMap, take, timer } from 'rxjs';\nimport { CascaderDataSource, CascaderNode } from './headless';\n\n/** The optional flat-search half of {@link cascaderFromQuery} - providing it enables the panel's search input. */\nexport type CascaderFromQuerySearchConfig<TSearchCreator extends AnyQueryCreator, TValue> = {\n  /** The query creator behind the flat search (e.g. a backend search endpoint). */\n  queryCreator: TSearchCreator;\n  /** Builds the request args from the (trimmed) search query. Return `null` to skip the request. */\n  args: (query: string) => RequestArgs<QueryArgsOf<TSearchCreator>> | null;\n  /** Maps a successful response to the matching paths - root → matching node chains. */\n  toResults: (response: ResponseType<QueryArgsOf<TSearchCreator>>) => CascaderNode<TValue>[][];\n  /** Minimum query length before requests run. @default 1 */\n  minQueryLength?: number;\n  /** Debounce before the request fires, in ms. @default 300 */\n  debounceTime?: number;\n};\n\n/** Config for {@link cascaderFromQuery}. */\nexport type CascaderFromQueryConfig<\n  TCreator extends AnyQueryCreator,\n  TValue,\n  TSearchCreator extends AnyQueryCreator,\n> = {\n  /** The query creator that loads one level (e.g. from `createGetQuery`). Must be a query that executes on creation (GET). */\n  queryCreator: TCreator;\n  /**\n   * Builds the request args for loading `parent`'s children (the root level when `parent` is\n   * `null`). Return `null` to skip the request - the level shows as empty.\n   */\n  args: (parent: CascaderNode<TValue> | null) => RequestArgs<QueryArgsOf<TCreator>> | null;\n  /** Maps a successful response to the level's nodes. */\n  toNodes: (\n    response: ResponseType<QueryArgsOf<TCreator>>,\n    parent: CascaderNode<TValue> | null,\n  ) => CascaderNode<TValue>[];\n  /**\n   * Turns a query failure into the error text shown in the column (or the search result list).\n   * Defaults to the first error message of the response.\n   */\n  toErrorMessage?: (error: QueryErrorResponse) => string;\n  /** Optional flat-search wiring - its presence enables the panel's search input. */\n  search?: CascaderFromQuerySearchConfig<TSearchCreator, TValue>;\n  /** Passed through to the data source - see `CascaderDataSource.resolvePath`. */\n  resolvePath?: CascaderDataSource<TValue>['resolvePath'];\n};\n\nconst firstErrorMessage = (error: QueryErrorResponse) => {\n  const message = 'errors' in error ? error.errors[0]?.message : error.error?.message;\n\n  return message ?? error.raw?.statusText ?? 'Something went wrong';\n};\n\n/**\n * Builds a `CascaderDataSource` whose levels (and, optionally, flat search) are fed by\n * `@ethlete/query` queries. A failed load surfaces as the column's error row (with Retry); the error text comes from\n * `toErrorMessage` and is shown verbatim by `et-cascader`'s default `toErrorMessage`.\n *\n * ```ts\n * competitions = cascaderFromQuery({\n *   queryCreator: getCompetitionChildren,\n *   args: (parent) => ({ queryParams: { parent: parent?.value ?? null } }),\n *   toNodes: (res) => res.items.map((item) => ({ value: item.id, label: item.name, isLeaf: item.isMatch })),\n *   search: {\n *     queryCreator: searchCompetitions,\n *     args: (query) => ({ queryParams: { q: query } }),\n *     toResults: (res) => res.matches.map((match) => match.path.map((p) => ({ value: p.id, label: p.name }))),\n *   },\n * });\n * ```\n *\n * Call it from a field initializer / constructor (injection context), the same place you'd create\n * a query or a query stack.\n */\nexport const cascaderFromQuery = <\n  TCreator extends AnyQueryCreator,\n  TValue,\n  TSearchCreator extends AnyQueryCreator = TCreator,\n>(\n  config: CascaderFromQueryConfig<TCreator, TValue, TSearchCreator>,\n): CascaderDataSource<TValue> => {\n  const injector = inject(Injector);\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  const runQuery = <TRunCreator extends AnyQueryCreator, TResult>(options: {\n    creator: TRunCreator;\n    requestArgs: RequestArgs<QueryArgsOf<TRunCreator>>;\n    toResult: (response: ResponseType<QueryArgsOf<TRunCreator>>) => TResult;\n  }): Observable<TResult> =>\n    defer(() => {\n      const { creator, requestArgs, toResult } = options;\n      const query = runInInjectionContext(injector, () =>\n        creator(withArgs<QueryArgsOf<TRunCreator>>(() => requestArgs)),\n      );\n\n      const state$ = query.executionState.asObservable() as Observable<QueryExecutionState<\n        QueryArgsOf<TRunCreator>\n      > | null>;\n\n      return state$.pipe(\n        filter(\n          (state): state is Exclude<QueryExecutionState<QueryArgsOf<TRunCreator>>, { type: 'loading' }> =>\n            state !== null && state.type !== 'loading',\n        ),\n        take(1),\n        map((state) => {\n          if (state.type === 'failure') {\n            // Deliberately a plain `Error`, not a coded `RuntimeError`: this message is the\n            // display-ready text for the column's error row (the cascader's default\n            // `toErrorMessage` shows `error.message` verbatim), so a `ET33xx: ` prefix would end up\n            // in front of the user.\n            throw new Error(toErrorMessage(state.error));\n          }\n\n          return toResult(state.response);\n        }),\n        finalize(() => query.subtle.destroy()),\n      );\n    });\n\n  const searchConfig = config.search;\n\n  const source: CascaderDataSource<TValue> = {\n    loadChildren: (parent) => {\n      const requestArgs = config.args(parent);\n\n      if (requestArgs === null) {\n        return [];\n      }\n\n      return runQuery({\n        creator: config.queryCreator,\n        requestArgs,\n        toResult: (response) => config.toNodes(response, parent),\n      });\n    },\n  };\n\n  if (config.resolvePath) {\n    source.resolvePath = config.resolvePath;\n  }\n\n  if (searchConfig) {\n    source.search = (query) => {\n      const trimmed = query.trim();\n\n      if (trimmed.length < (searchConfig.minQueryLength ?? 1)) {\n        return [];\n      }\n\n      const requestArgs = searchConfig.args(trimmed);\n\n      if (requestArgs === null) {\n        return [];\n      }\n\n      // the timer is the debounce: the cascader switchMaps search calls, so a newer keystroke\n      // unsubscribes this one before its request ever fires\n      return timer(searchConfig.debounceTime ?? 300).pipe(\n        switchMap(() =>\n          runQuery({ creator: searchConfig.queryCreator, requestArgs, toResult: searchConfig.toResults }),\n        ),\n      );\n    };\n  }\n\n  return source;\n};\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings the cascader's panel renders itself - its search field and the step back up a level. */\nexport type CascaderLabels = {\n  /** Shown while a level or a search is being fetched. */\n  loading: string;\n  /** Shown when a search matched nothing. */\n  noMatches: string;\n  /** Shown when a level has no options. */\n  noOptions: string;\n  /** The action that re-runs a failed search or level fetch. */\n  retry: string;\n  /** Heading for the root column, which has no parent option to name it. */\n  options: string;\n  /** Accessible label for the control that returns to the parent level. */\n  back: string;\n  /** Placeholder for the panel's search field. */\n  search: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_CASCADER_LABELS: CascaderLabels = {\n  loading: 'Loading…',\n  noMatches: 'No matches',\n  noOptions: 'No options',\n  retry: 'Retry',\n  options: 'Options',\n  back: 'Back',\n  search: 'Search',\n};\n\nconst CASCADER_LABELS_DEF = /* @__PURE__ */ defineLabels<CascaderLabels>('CASCADER_LABELS', DEFAULT_CASCADER_LABELS);\n\n/**\n * Localize the cascader's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_CASCADER_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideCascaderLabels({ back: 'Zurück', search: 'Suchen' });\n */\nexport const provideCascaderLabels = /* @__PURE__ */ toProvideFn(CASCADER_LABELS_DEF);\nexport const injectCascaderLabels = /* @__PURE__ */ toInjectFn(CASCADER_LABELS_DEF);\nexport const CASCADER_LABELS = /* @__PURE__ */ toToken(CASCADER_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-cascader-breadcrumb-styles',\n  template: '',\n  styleUrl: './cascader-breadcrumb-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CascaderBreadcrumbStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-cascader-sheet-styles',\n  template: '',\n  styleUrl: './cascader-sheet-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class CascaderSheetStylesComponent {}\n","import { InjectionToken, Signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport { FieldWarningResult } from './field-warnings';\n\nexport const FORM_FIELD_CONTROL_TYPES = {\n  TEXT_INPUT: 'text-input',\n  NUMBER_INPUT: 'number-input',\n  PASSWORD_INPUT: 'password-input',\n  COLOR_INPUT: 'color-input',\n  TEXTAREA: 'textarea',\n  RICH_TEXT: 'rich-text',\n  SELECT: 'select',\n  CASCADER: 'cascader',\n  CHECKBOX: 'checkbox',\n  RADIO: 'radio',\n  SWITCH: 'switch',\n  SEGMENTED_BUTTON: 'segmented-button',\n  SELECTION_LIST: 'selection-list',\n  RATING: 'rating',\n  SLIDER: 'slider',\n  RANGE_SLIDER: 'range-slider',\n  OTP_INPUT: 'otp-input',\n  TAG_INPUT: 'tag-input',\n  PHONE_INPUT: 'phone-input',\n  DATE_INPUT: 'date-input',\n  DATE_RANGE_INPUT: 'date-range-input',\n  TIME_INPUT: 'time-input',\n  TIME_RANGE_INPUT: 'time-range-input',\n  DATE_TIME_INPUT: 'date-time-input',\n  DATE_TIME_RANGE_INPUT: 'date-time-range-input',\n  DURATION_INPUT: 'duration-input',\n  DROPZONE: 'dropzone',\n} as const;\n\nexport type FormFieldControlType = (typeof FORM_FIELD_CONTROL_TYPES)[keyof typeof FORM_FIELD_CONTROL_TYPES];\n\nexport type FormFieldControl = {\n  touched: Signal<boolean>;\n  invalid: Signal<boolean>;\n  errors: Signal<readonly ValidationError.WithOptionalFieldTree[]>;\n  /**\n   * Advisories the control was given directly, for a field with no signal-forms binding to carry\n   * `warn()` rules. They never reach validity.\n   */\n  warnings?: Signal<FieldWarningResult>;\n  name: Signal<string>;\n  required?: Signal<boolean>;\n  disabled?: Signal<boolean>;\n  readonly?: Signal<boolean>;\n  /** Signal-forms `hidden` status - when true the whole field is visually removed. */\n  hidden?: Signal<boolean>;\n  effectiveDisabled?: Signal<boolean>;\n  describedBy: WritableSignal<string | null>;\n  controlType: Signal<FormFieldControlType>;\n  focused?: Signal<boolean>;\n  /**\n   * True while the control's own popup (a date picker, select/cascader panel, …) is open. The\n   * field keeps its focused styling while set.\n   */\n  expanded?: Signal<boolean>;\n  hasValue?: Signal<boolean>;\n  /** True while the committed text can't be parsed (date/time/duration typed entry). */\n  parseError?: Signal<boolean>;\n  /**\n   * User-facing message shown when `parseError` is set and there is no validation error - the control's\n   * own `parseErrorMessage` input if it has one, else `DATE_TIME_LABELS`.\n   */\n  resolvedParseErrorMessage?: Signal<string>;\n  /**\n   * True when the control carries an author-supplied accessible name (its own `aria-label` /\n   * `aria-labelledby`) independent of a projected `<et-label>`. Controls that only support\n   * `<et-label>` for labelling leave this unset.\n   */\n  hasCustomAccessibleName?: Signal<boolean>;\n  /** The control's current value. */\n  value?: Signal<unknown>;\n  /**\n   * The bound field's `maxLength()` limit. Signal forms binds this automatically into any control\n   * that declares a `maxLength` input.\n   */\n  maxLength?: Signal<number | undefined>;\n  /**\n   * True while an async validator is in flight for the bound field - bound automatically by signal\n   * forms into any control declaring a `pending` input.\n   */\n  pending?: Signal<boolean>;\n  activate(): void;\n  /**\n   * Moves focus into the control's focusable element - the native input, the trigger, the first\n   * thumb, whatever the control actually focuses.\n   *\n   * Unlike {@link activate}, this only focuses - it never toggles, opens a panel, or selects.\n   */\n  focus?(options?: FocusOptions): void;\n};\n\nexport type HintComponentBase = object;\n\n/** A projected `et-counter`. */\nexport type CounterComponentBase = object;\n\n/**\n * A control's own in-field affordances (clear button, picker trigger, reveal toggle), handed to the\n * field to render in its suffix slot.\n */\nexport type ControlSuffixBase = {\n  templateRef: TemplateRef<void>;\n};\n\nexport const FORM_FIELD_TOKEN = new InjectionToken<FormFieldDirectiveBase>('FORM_FIELD_TOKEN');\n\nexport type FormFieldDirectiveBase = {\n  registerControl(control: FormFieldControl): void;\n  unregisterControl(control: FormFieldControl): void;\n  registerHint(hint: HintComponentBase): void;\n  unregisterHint(hint: HintComponentBase): void;\n  registerCounter(counter: CounterComponentBase): void;\n  unregisterCounter(counter: CounterComponentBase): void;\n  unregisterLabel(label: LabelDirectiveBase): void;\n  registeredControl: WritableSignal<FormFieldControl | null>;\n  registeredHint: WritableSignal<HintComponentBase | null>;\n  registeredCounter: WritableSignal<CounterComponentBase | null>;\n  registeredLabel: WritableSignal<LabelDirectiveBase | null>;\n  registeredControlSuffix: WritableSignal<ControlSuffixBase | null>;\n  /** The registered control's value, for the counter to measure. */\n  controlValue: Signal<unknown>;\n  /** The registered control's validation errors - the counter reads its over-limit state from them. */\n  errors: Signal<readonly ValidationError.WithOptionalFieldTree[]>;\n  /** The bound field's schema `maxLength()`, when it has one. */\n  controlMaxLength: Signal<number | undefined>;\n  /** The field's visible control frame - the box overlay-based controls anchor their panels to. */\n  controlFrameElement: WritableSignal<HTMLElement | null>;\n  /** The field's own element, chrome included - what scrolling to this field targets. */\n  element: HTMLElement;\n  activate(): void;\n};\n\nexport type LabelDirectiveBase = {\n  id: Signal<string>;\n};\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { FORM_FIELD_TOKEN } from './form-field.tokens';\n\n/**\n * The naming inputs, for a wrapper component's `hostDirectives` list. Spread it instead of copying\n * the names - a dropped entry makes that binding an NG0303 on the wrapper and leaves the control\n * unnamed.\n */\nexport const ACCESSIBLE_NAME_INPUTS = ['aria-label', 'aria-labelledby'] as const;\n\n/**\n * The author-supplied accessible name every form-field control accepts: `aria-label` /\n * `aria-labelledby` written on the control itself, for a control named by something outside its\n * field - a shared caption over a filter row, a dense table cell, a page-size select.\n *\n * A control extending this still has to render the name: bind `aria-label` onto whatever element\n * carries its role (the native input, the trigger, the editable), and `aria-labelledby` off\n * {@link labelId}. Must be extended by an `@Directive` - Angular only surfaces inherited inputs\n * from a decorated base.\n */\n@Directive()\nexport abstract class AccessibleNameControlDirective {\n  private namingFormField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  /**\n   * Author-supplied accessible name, forwarded onto the element that carries the control's role.\n   * Use this (or an `<et-label>`) when the field has no visible label - a placeholder is not an\n   * accessible name.\n   */\n  public ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n  /**\n   * Author-supplied `aria-labelledby`, forwarded onto the element that carries the control's role.\n   * Takes precedence over the id of a projected `<et-label>`.\n   */\n  public ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n  /**\n   * The `aria-labelledby` the control should render: a consumer-supplied value wins, otherwise the\n   * id of a projected `<et-label>`.\n   */\n  public labelId = computed(\n    () => this.ariaLabelledby()?.trim() || (this.namingFormField?.registeredLabel()?.id() ?? null),\n  );\n\n  public hasCustomAccessibleName = computed(() => !!this.ariaLabel()?.trim() || !!this.ariaLabelledby()?.trim());\n}\n","import { createMetadataKey, LogicFn, metadata, PathKind, SchemaPath, SchemaPathRules } from '@angular/forms/signals';\n\n/** The `kind` given to a warning a `warn()` rule returned as a bare string. */\nexport const FIELD_WARNING_KIND = 'etWarning';\n\n/**\n * A non-blocking advisory about a field's value: the value is accepted and the form still submits,\n * but the user should look at it anyway (a password that meets the rules yet is weak, a date far\n * enough out to be a likely typo, a quantity above what is normally in stock).\n */\nexport type FieldWarning = {\n  /** Machine-readable discriminator. A `FORM_WARNING_MESSAGE_RESOLVER` localizes the text by it. */\n  kind: string;\n\n  /** The text shown under the field. Optional when a resolver supplies it from `kind`. */\n  message?: string;\n};\n\n/** What a {@link warn} rule may return. A bare string becomes a {@link FIELD_WARNING_KIND} warning. */\nexport type FieldWarningResult = string | FieldWarning | readonly (string | FieldWarning)[] | null | undefined;\n\n/** @internal The channel between the {@link warn} schema rule and the form field. */\nexport const FIELD_WARNINGS = /* @__PURE__ */ createMetadataKey<readonly FieldWarning[], readonly FieldWarning[]>({\n  getInitial: () => [],\n  reduce: (accumulated, warnings) => (warnings.length > 0 ? [...accumulated, ...warnings] : accumulated),\n});\n\n/** @internal Normalizes what a `warn()` rule or a control's `warnings` input supplied. */\nexport const toFieldWarnings = (result: FieldWarningResult): readonly FieldWarning[] => {\n  if (!result) {\n    return [];\n  }\n\n  if (typeof result === 'string') {\n    return [{ kind: FIELD_WARNING_KIND, message: result }];\n  }\n\n  if (!Array.isArray(result)) {\n    return [result as FieldWarning];\n  }\n\n  return result.flatMap((warning) => toFieldWarnings(warning));\n};\n\n/**\n * Schema rule attaching non-blocking warnings to a field. The bound `et-form-field` (or control that\n * renders its own support region) shows them in the place an error would take, in the app's\n * `type: 'warning'` color - but the field stays valid: nothing here reaches validity, `aria-invalid`\n * or submit. An error on the same field takes the slot back until it is fixed.\n *\n * Multiple `warn()` rules on one field are concatenated. Return `null` for no warning.\n *\n * @example\n * ```ts\n * form(model, (s) => {\n *   required(s.password);\n *   warn(s.password, ({ value }) => (isWeak(value()) ? 'This password is easy to guess.' : null));\n *   warn(s.quantity, ({ value }) =>\n *     value() > stock() ? { kind: 'aboveStock', message: 'More than we usually have in stock.' } : null,\n *   );\n * });\n * ```\n */\nexport const warn = <TValue, TPathKind extends PathKind = PathKind.Root>(\n  path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n  logic: NoInfer<LogicFn<TValue, FieldWarningResult, TPathKind>>,\n) => {\n  metadata(path, FIELD_WARNINGS, (ctx) => toFieldWarnings(logic(ctx)));\n};\n","// codes 2200-2299\nexport const FORM_FIELD_ERROR_CODES = {\n  MISSING_CONTROL: 2200,\n  MISSING_LABEL: 2201,\n} as const;\n","import { afterNextRender, computed, contentChildren, Directive, effect, inject, signal } from '@angular/core';\nimport { FORM_FIELD } from '@angular/forms/signals';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { FIELD_WARNINGS, FieldWarning, toFieldWarnings } from './field-warnings';\nimport { FORM_FIELD_ERROR_CODES } from './form-field-errors';\nimport {\n  ControlSuffixBase,\n  CounterComponentBase,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n  FormFieldDirectiveBase,\n  HintComponentBase,\n  LabelDirectiveBase,\n} from './form-field.tokens';\n\nlet uniqueIdCounter = 0;\n\n@Directive({\n  selector: '[etFormField]',\n  providers: [{ provide: FORM_FIELD_TOKEN, useExisting: FormFieldDirective }],\n})\nexport class FormFieldDirective implements FormFieldDirectiveBase {\n  /** The field's own element, chrome included - what scrolling to this field targets. */\n  public element = injectHostElement();\n\n  // `self` matters - without it an outer `[formField]` binding would leak in.\n  private ownFieldBinding = inject(FORM_FIELD, { optional: true, self: true });\n  private wrappedFieldBindings = contentChildren(FORM_FIELD, { descendants: true });\n\n  /** @internal */\n  public registeredControl = signal<FormFieldControl | null>(null);\n\n  /** @internal */\n  public registeredHint = signal<HintComponentBase | null>(null);\n\n  /** @internal */\n  public registeredCounter = signal<CounterComponentBase | null>(null);\n\n  /** @internal */\n  public registeredLabel = signal<LabelDirectiveBase | null>(null);\n\n  /** @internal */\n  public registeredControlSuffix = signal<ControlSuffixBase | null>(null);\n\n  /** Set by the form-field component; read by overlay-based controls (e.g. the select) as their anchor. */\n  public controlFrameElement = signal<HTMLElement | null>(null);\n\n  private readonly FALLBACK_ID = `ff-${uniqueIdCounter++}`;\n\n  public errorId = computed(() => {\n    const ctrl = this.registeredControl();\n    const name = ctrl?.name();\n\n    return name ? `et-form-field-error-${name}` : `et-form-field-error-${this.FALLBACK_ID}`;\n  });\n\n  public hintId = computed(() => {\n    const ctrl = this.registeredControl();\n    const name = ctrl?.name();\n\n    return name ? `et-form-field-hint-${name}` : `et-form-field-hint-${this.FALLBACK_ID}`;\n  });\n\n  public warningId = computed(() => {\n    const ctrl = this.registeredControl();\n    const name = ctrl?.name();\n\n    return name ? `et-form-field-warning-${name}` : `et-form-field-warning-${this.FALLBACK_ID}`;\n  });\n\n  /**\n   * The non-blocking advisories to show under the field: what the bound field's `warn()` rules\n   * produced, plus what the registered control was given through its own `warnings` input. They\n   * never touch validity.\n   */\n  public warnings = computed<readonly FieldWarning[]>(() => {\n    const bindings = this.ownFieldBinding\n      ? [this.ownFieldBinding, ...this.wrappedFieldBindings()]\n      : this.wrappedFieldBindings();\n\n    return [\n      ...bindings.flatMap((binding) => binding.state().metadata(FIELD_WARNINGS)?.() ?? []),\n      ...toFieldWarnings(this.registeredControl()?.warnings?.() ?? null),\n    ];\n  });\n\n  public shouldDisplayError = computed(() => {\n    const ctrl = this.registeredControl();\n\n    if (!ctrl) {\n      return false;\n    }\n\n    // a committed-but-unparseable value is an error too - otherwise the native input reads\n    // `aria-invalid` (it gates on the control's parse error) while the field shows no message\n    return ctrl.touched() && (ctrl.invalid() || (ctrl.parseError?.() ?? false));\n  });\n\n  public errors = computed(() => this.registeredControl()?.errors() ?? []);\n\n  /** Whether the registered control is currently reporting an unparseable committed value. */\n  public parseError = computed(() => this.registeredControl()?.parseError?.() ?? false);\n\n  /** The control's parse-error message (shown when there's a parse error but no validation error). */\n  public parseErrorMessage = computed(() => this.registeredControl()?.resolvedParseErrorMessage?.() ?? null);\n\n  public controlType = computed(() => this.registeredControl()?.controlType() ?? FORM_FIELD_CONTROL_TYPES.TEXT_INPUT);\n\n  /** The registered control's value. */\n  public controlValue = computed<unknown>(() => this.registeredControl()?.value?.() ?? null);\n\n  /** The bound field's schema `maxLength()`, when signal forms bound one into the control. */\n  public controlMaxLength = computed(() => this.registeredControl()?.maxLength?.());\n\n  /** Whether an async validator is currently in flight for the bound field. */\n  public isPending = computed(() => this.registeredControl()?.pending?.() ?? false);\n\n  public focused = computed(() => this.registeredControl()?.focused?.() ?? false);\n\n  /** Whether the registered control's popup (picker/select/cascader panel) is open. */\n  public expanded = computed(() => this.registeredControl()?.expanded?.() ?? false);\n\n  public hasValue = computed(() => this.registeredControl()?.hasValue?.() ?? false);\n\n  public isReadonly = computed(() => this.registeredControl()?.readonly?.() ?? false);\n\n  public isDisabled = computed(() => this.registeredControl()?.disabled?.() ?? false);\n\n  /** Whether the control reports itself hidden (signal-forms schema) - hides the whole field. */\n  public isHidden = computed(() => this.registeredControl()?.hidden?.() ?? false);\n\n  public usesTextFieldShell = computed(\n    () =>\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.TEXT_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.NUMBER_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.PASSWORD_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.COLOR_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.TEXTAREA ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.RICH_TEXT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.SELECT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.CASCADER ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.TAG_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.PHONE_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.DATE_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.DATE_RANGE_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.TIME_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.TIME_RANGE_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.DATE_TIME_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.DATE_TIME_RANGE_INPUT ||\n      this.controlType() === FORM_FIELD_CONTROL_TYPES.DURATION_INPUT,\n  );\n\n  public shouldFloatLabel = computed(() => this.focused() || this.expanded() || this.hasValue());\n\n  /** Whether the field is showing an error message. */\n  public displaysErrorMessage = computed(\n    () => this.shouldDisplayError() && (this.errors().length > 0 || this.parseError()),\n  );\n\n  /** Whether a warning is the message the field shows: it has one, and no error is taking the slot. */\n  public displaysWarning = computed(() => !this.displaysErrorMessage() && this.warnings().length > 0);\n\n  public describedById = computed(() => {\n    if (this.displaysErrorMessage()) {\n      return this.errorId();\n    }\n\n    if (this.displaysWarning()) {\n      return this.warningId();\n    }\n\n    if (this.registeredHint()) {\n      return this.hintId();\n    }\n\n    return null;\n  });\n\n  constructor() {\n    effect(() => {\n      const control = this.registeredControl();\n\n      if (!control) {\n        return;\n      }\n\n      control.describedBy.set(this.describedById());\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        const control = this.registeredControl();\n\n        if (!control) {\n          throw new RuntimeError(\n            FORM_FIELD_ERROR_CODES.MISSING_CONTROL,\n            '[FormFieldDirective] No form control found. Add <et-input> or <et-checkbox> inside <et-form-field>.',\n            { element: this.element },\n          );\n        }\n\n        if (!this.registeredLabel() && !(control.hasCustomAccessibleName?.() ?? false)) {\n          throw new RuntimeError(\n            FORM_FIELD_ERROR_CODES.MISSING_LABEL,\n            '[FormFieldDirective] The control has no accessible name. Project an <et-label> into the ' +\n              '<et-form-field>, or set aria-label / aria-labelledby on the control. A placeholder is not ' +\n              'an accessible name.',\n            { element: this.element },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public registerControl(control: FormFieldControl) {\n    const previousControl = this.registeredControl();\n\n    if (previousControl === control) {\n      return;\n    }\n\n    previousControl?.describedBy.set(null);\n    this.registeredControl.set(control);\n  }\n\n  /** @internal */\n  public unregisterControl(control: FormFieldControl) {\n    if (this.registeredControl() === control) {\n      control.describedBy.set(null);\n      this.registeredControl.set(null);\n    }\n  }\n\n  /** @internal */\n  public registerHint(hint: HintComponentBase) {\n    if (this.registeredHint() === hint) {\n      return;\n    }\n\n    this.registeredHint.set(hint);\n  }\n\n  /** @internal */\n  public unregisterHint(hint: HintComponentBase) {\n    if (this.registeredHint() === hint) {\n      this.registeredHint.set(null);\n    }\n  }\n\n  /** @internal */\n  public registerCounter(counter: CounterComponentBase) {\n    if (this.registeredCounter() === counter) {\n      return;\n    }\n\n    this.registeredCounter.set(counter);\n  }\n\n  /** @internal */\n  public unregisterCounter(counter: CounterComponentBase) {\n    if (this.registeredCounter() === counter) {\n      this.registeredCounter.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterLabel(label: LabelDirectiveBase) {\n    if (this.registeredLabel() === label) {\n      this.registeredLabel.set(null);\n    }\n  }\n\n  public activate() {\n    this.registeredControl()?.activate();\n  }\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ValidationError } from '@angular/forms/signals';\nimport { AnimatableDirective } from '@ethlete/core';\nimport { EMPTY, filter, switchMap, tap } from 'rxjs';\nimport { FieldWarning } from './field-warnings';\n\nexport const SUPPORT_CONTENT_STATE = {\n  NONE: 'none',\n  HINT: 'hint',\n  WARNING: 'warning',\n  ERROR: 'error',\n} as const;\n\nexport type SupportContentState = (typeof SUPPORT_CONTENT_STATE)[keyof typeof SUPPORT_CONTENT_STATE];\n\nexport type SupportSwappingState = Exclude<SupportContentState, typeof SUPPORT_CONTENT_STATE.NONE>;\n\nexport const SUPPORT_TRANSITION_DIRECTION = {\n  FROM_ABOVE: 'from-above',\n  FROM_BELOW: 'from-below',\n  TO_ABOVE: 'to-above',\n  TO_BELOW: 'to-below',\n} as const;\n\nexport type SupportTransitionDirection =\n  (typeof SUPPORT_TRANSITION_DIRECTION)[keyof typeof SUPPORT_TRANSITION_DIRECTION];\n\nexport type SupportPresentationState = {\n  renderedState: SupportContentState;\n  leavingState: SupportContentState;\n  renderedErrors: readonly ValidationError.WithOptionalFieldTree[];\n  renderedWarnings: readonly FieldWarning[];\n  directions: Record<SupportSwappingState, SupportTransitionDirection>;\n};\n\nexport type ReduceSupportPresentationInput = {\n  presentation: SupportPresentationState;\n  semanticSupportState: SupportContentState;\n  errors: readonly ValidationError.WithOptionalFieldTree[];\n  warnings: readonly FieldWarning[];\n};\n\nexport const INITIAL_SUPPORT_PRESENTATION_STATE: SupportPresentationState = {\n  renderedState: SUPPORT_CONTENT_STATE.NONE,\n  leavingState: SUPPORT_CONTENT_STATE.NONE,\n  renderedErrors: [],\n  renderedWarnings: [],\n  directions: {\n    [SUPPORT_CONTENT_STATE.HINT]: SUPPORT_TRANSITION_DIRECTION.FROM_ABOVE,\n    [SUPPORT_CONTENT_STATE.WARNING]: SUPPORT_TRANSITION_DIRECTION.FROM_BELOW,\n    [SUPPORT_CONTENT_STATE.ERROR]: SUPPORT_TRANSITION_DIRECTION.FROM_BELOW,\n  },\n};\n\nconst SUPPORT_STATE_SEVERITY: Record<SupportSwappingState, number> = {\n  [SUPPORT_CONTENT_STATE.HINT]: 0,\n  [SUPPORT_CONTENT_STATE.WARNING]: 1,\n  [SUPPORT_CONTENT_STATE.ERROR]: 2,\n};\n\nconst SUPPORT_STATE_HOME_DIRECTIONS: Record<\n  SupportSwappingState,\n  { entering: SupportTransitionDirection; leaving: SupportTransitionDirection }\n> = {\n  [SUPPORT_CONTENT_STATE.HINT]: {\n    entering: SUPPORT_TRANSITION_DIRECTION.FROM_ABOVE,\n    leaving: SUPPORT_TRANSITION_DIRECTION.TO_ABOVE,\n  },\n  [SUPPORT_CONTENT_STATE.WARNING]: {\n    entering: SUPPORT_TRANSITION_DIRECTION.FROM_BELOW,\n    leaving: SUPPORT_TRANSITION_DIRECTION.TO_BELOW,\n  },\n  [SUPPORT_CONTENT_STATE.ERROR]: {\n    entering: SUPPORT_TRANSITION_DIRECTION.FROM_BELOW,\n    leaving: SUPPORT_TRANSITION_DIRECTION.TO_BELOW,\n  },\n};\n\nconst isSwappingState = (state: SupportContentState): state is SupportSwappingState =>\n  state !== SUPPORT_CONTENT_STATE.NONE;\n\n/**\n * Drops `state` out of the presentation once its exit animation finished, so the region stops\n * rendering it and releases the messages it was holding. Call from an injection context, once per\n * swapping state.\n */\nexport const clearLeavingSupportStateOnExit = ({\n  state,\n  animatable,\n  presentation,\n  semanticSupportState,\n}: {\n  state: SupportSwappingState;\n  animatable: Signal<AnimatableDirective | undefined>;\n  presentation: WritableSignal<SupportPresentationState>;\n  semanticSupportState: Signal<SupportContentState>;\n}) => {\n  toObservable(animatable)\n    .pipe(\n      switchMap((currentAnimatable) => (currentAnimatable ? currentAnimatable.animationEnd$ : EMPTY)),\n      filter(() => presentation().leavingState === state && semanticSupportState() !== state),\n      tap(() =>\n        presentation.update((current) => ({\n          ...current,\n          leavingState: SUPPORT_CONTENT_STATE.NONE,\n          renderedErrors: state === SUPPORT_CONTENT_STATE.ERROR ? [] : current.renderedErrors,\n          renderedWarnings: state === SUPPORT_CONTENT_STATE.WARNING ? [] : current.renderedWarnings,\n        })),\n      ),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n};\n\nexport const supportPresentationIncludesState = ({\n  presentation,\n  state,\n}: {\n  presentation: SupportPresentationState;\n  state: SupportContentState;\n}) => {\n  return presentation.renderedState === state || presentation.leavingState === state;\n};\n\nconst occupyingState = ({\n  presentation,\n  except,\n}: {\n  presentation: SupportPresentationState;\n  except: SupportContentState;\n}): SupportContentState => {\n  for (const state of [presentation.renderedState, presentation.leavingState]) {\n    if (state !== SUPPORT_CONTENT_STATE.NONE && state !== except) {\n      return state;\n    }\n  }\n\n  return SUPPORT_CONTENT_STATE.NONE;\n};\n\n/**\n * Advances the presentation state for the newly-resolved `semanticSupportState`, deciding what (if\n * anything) is now leaving and in which direction, and holding on to the messages of a state that\n * is animating out so it doesn't empty mid-exit.\n */\nexport const reduceSupportPresentation = ({\n  presentation,\n  semanticSupportState,\n  errors,\n  warnings,\n}: ReduceSupportPresentationInput): SupportPresentationState => {\n  const leavingState = occupyingState({ presentation, except: semanticSupportState });\n\n  const directions = { ...presentation.directions };\n\n  if (isSwappingState(semanticSupportState)) {\n    directions[semanticSupportState] = isSwappingState(leavingState)\n      ? SUPPORT_STATE_SEVERITY[semanticSupportState] > SUPPORT_STATE_SEVERITY[leavingState]\n        ? SUPPORT_TRANSITION_DIRECTION.FROM_BELOW\n        : SUPPORT_TRANSITION_DIRECTION.FROM_ABOVE\n      : SUPPORT_STATE_HOME_DIRECTIONS[semanticSupportState].entering;\n  }\n\n  if (isSwappingState(leavingState)) {\n    directions[leavingState] = isSwappingState(semanticSupportState)\n      ? SUPPORT_STATE_SEVERITY[semanticSupportState] > SUPPORT_STATE_SEVERITY[leavingState]\n        ? SUPPORT_TRANSITION_DIRECTION.TO_ABOVE\n        : SUPPORT_TRANSITION_DIRECTION.TO_BELOW\n      : SUPPORT_STATE_HOME_DIRECTIONS[leavingState].leaving;\n  }\n\n  const keepsState = (state: SupportSwappingState) => semanticSupportState === state || leavingState === state;\n\n  return {\n    renderedState: semanticSupportState,\n    leavingState,\n    renderedErrors:\n      semanticSupportState === SUPPORT_CONTENT_STATE.ERROR\n        ? errors\n        : keepsState(SUPPORT_CONTENT_STATE.ERROR)\n          ? presentation.renderedErrors\n          : [],\n    renderedWarnings:\n      semanticSupportState === SUPPORT_CONTENT_STATE.WARNING\n        ? warnings\n        : keepsState(SUPPORT_CONTENT_STATE.WARNING)\n          ? presentation.renderedWarnings\n          : [],\n    directions,\n  };\n};\n","import {\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  runInInjectionContext,\n  Signal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport {\n  AnimatableDirective,\n  defineProvider,\n  injectErrorTheme,\n  injectWarningTheme,\n  ProvideColorDirective,\n  signalElementDimensions,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { FormFieldDirective } from './form-field.directive';\nimport {\n  clearLeavingSupportStateOnExit,\n  INITIAL_SUPPORT_PRESENTATION_STATE,\n  reduceSupportPresentation,\n  SUPPORT_CONTENT_STATE,\n  SupportContentState,\n} from './support-presentation';\n\nconst formSupportFactory = () => {\n  const provideColor = inject(ProvideColorDirective, { optional: true });\n  const formFieldDir = inject(FormFieldDirective);\n  const injector = inject(Injector);\n  const errorColorTheme = injectErrorTheme();\n\n  const errorContent = signal<ElementRef<HTMLElement> | undefined>(undefined);\n  const warningContent = signal<ElementRef<HTMLElement> | undefined>(undefined);\n  const hintContent = signal<ElementRef<HTMLElement> | undefined>(undefined);\n  const counterContent = signal<ElementRef<HTMLElement> | undefined>(undefined);\n  const errorAnimatable = signal<AnimatableDirective | undefined>(undefined);\n  const warningAnimatable = signal<AnimatableDirective | undefined>(undefined);\n  const hintAnimatable = signal<AnimatableDirective | undefined>(undefined);\n\n  const errorDimensions = signalElementDimensions(errorContent);\n  const warningDimensions = signalElementDimensions(warningContent);\n  const hintDimensions = signalElementDimensions(hintContent);\n  const counterDimensions = signalElementDimensions(counterContent);\n\n  const effectiveErrors = computed<readonly ValidationError.WithOptionalFieldTree[]>(() => {\n    const errors = formFieldDir.errors();\n\n    if (errors.length > 0) {\n      return errors;\n    }\n\n    const parseMessage = formFieldDir.parseError() ? formFieldDir.parseErrorMessage() : null;\n\n    return parseMessage ? [{ kind: 'etParseError', message: parseMessage }] : [];\n  });\n\n  const semanticSupportState = computed<SupportContentState>(() => {\n    if (formFieldDir.shouldDisplayError() && effectiveErrors().length > 0) {\n      return SUPPORT_CONTENT_STATE.ERROR;\n    }\n\n    if (formFieldDir.warnings().length > 0) {\n      return SUPPORT_CONTENT_STATE.WARNING;\n    }\n\n    if (formFieldDir.registeredHint()) {\n      return SUPPORT_CONTENT_STATE.HINT;\n    }\n\n    return SUPPORT_CONTENT_STATE.NONE;\n  });\n\n  const displaysError = computed(() => semanticSupportState() === SUPPORT_CONTENT_STATE.ERROR);\n  const displaysWarning = computed(() => semanticSupportState() === SUPPORT_CONTENT_STATE.WARNING);\n\n  const supportPresentation = signal(INITIAL_SUPPORT_PRESENTATION_STATE);\n\n  const shouldRenderSupport = computed(() => {\n    const presentation = supportPresentation();\n\n    return (\n      !!formFieldDir.registeredCounter() ||\n      semanticSupportState() !== SUPPORT_CONTENT_STATE.NONE ||\n      presentation.leavingState !== SUPPORT_CONTENT_STATE.NONE\n    );\n  });\n\n  const shouldRenderError = computed(() => {\n    return (\n      semanticSupportState() === SUPPORT_CONTENT_STATE.ERROR ||\n      supportPresentation().leavingState === SUPPORT_CONTENT_STATE.ERROR\n    );\n  });\n\n  const shouldRenderWarning = computed(() => {\n    return (\n      semanticSupportState() === SUPPORT_CONTENT_STATE.WARNING ||\n      supportPresentation().leavingState === SUPPORT_CONTENT_STATE.WARNING\n    );\n  });\n\n  const shouldRenderHint = computed(() => {\n    return (\n      semanticSupportState() === SUPPORT_CONTENT_STATE.HINT ||\n      supportPresentation().leavingState === SUPPORT_CONTENT_STATE.HINT\n    );\n  });\n\n  const errorActive = computed(() => semanticSupportState() === SUPPORT_CONTENT_STATE.ERROR);\n  const warningActive = computed(() => semanticSupportState() === SUPPORT_CONTENT_STATE.WARNING);\n  const hintActive = computed(() => semanticSupportState() === SUPPORT_CONTENT_STATE.HINT);\n\n  const leavingStateOf = (state: SupportContentState) =>\n    computed(() => (supportPresentation().leavingState === state ? 'leaving' : 'active'));\n\n  const errorState = leavingStateOf(SUPPORT_CONTENT_STATE.ERROR);\n  const warningState = leavingStateOf(SUPPORT_CONTENT_STATE.WARNING);\n  const hintState = leavingStateOf(SUPPORT_CONTENT_STATE.HINT);\n\n  const errorDirection = computed(() => supportPresentation().directions.error);\n  const warningDirection = computed(() => supportPresentation().directions.warning);\n  const hintDirection = computed(() => supportPresentation().directions.hint);\n\n  // resolved only once a warning renders, so a control that never warns doesn't force the app to\n  // register a `type: 'warning'` theme\n  const warningColorTheme = computed(() =>\n    shouldRenderWarning() ? runInInjectionContext(injector, injectWarningTheme) : null,\n  );\n\n  const visibleErrors = computed(() => {\n    if (semanticSupportState() === SUPPORT_CONTENT_STATE.ERROR) {\n      return effectiveErrors();\n    }\n\n    return supportPresentation().renderedErrors;\n  });\n\n  const visibleWarnings = computed(() => {\n    if (semanticSupportState() === SUPPORT_CONTENT_STATE.WARNING) {\n      return formFieldDir.warnings();\n    }\n\n    return supportPresentation().renderedWarnings;\n  });\n\n  const supportHeight = computed(() => {\n    const stackHeight = (() => {\n      switch (semanticSupportState()) {\n        case SUPPORT_CONTENT_STATE.ERROR:\n          return errorDimensions().offset?.height ?? 0;\n        case SUPPORT_CONTENT_STATE.WARNING:\n          return warningDimensions().offset?.height ?? 0;\n        case SUPPORT_CONTENT_STATE.HINT:\n          return hintDimensions().offset?.height ?? 0;\n        default:\n          return 0;\n      }\n    })();\n\n    const counterHeight = formFieldDir.registeredCounter() ? (counterDimensions().offset?.height ?? 0) : 0;\n\n    return Math.max(stackHeight, counterHeight);\n  });\n\n  for (const [state, animatable] of [\n    [SUPPORT_CONTENT_STATE.ERROR, errorAnimatable],\n    [SUPPORT_CONTENT_STATE.WARNING, warningAnimatable],\n    [SUPPORT_CONTENT_STATE.HINT, hintAnimatable],\n  ] as const) {\n    clearLeavingSupportStateOnExit({ state, animatable, presentation: supportPresentation, semanticSupportState });\n  }\n\n  effect(() => {\n    const state = semanticSupportState();\n    const errors = effectiveErrors();\n    const warnings = formFieldDir.warnings();\n\n    supportPresentation.update((presentation) =>\n      reduceSupportPresentation({ presentation, semanticSupportState: state, errors, warnings }),\n    );\n  });\n\n  effect(() => {\n    const showError = displaysError();\n\n    untracked(() => {\n      if (!provideColor) return;\n\n      if (showError) {\n        provideColor.forceColor(errorColorTheme);\n\n        return;\n      }\n\n      provideColor.clearForcedColor();\n    });\n  });\n\n  return {\n    errorColorTheme,\n    warningColorTheme,\n    formFieldDir,\n    errorId: formFieldDir.errorId,\n    warningId: formFieldDir.warningId,\n    hintId: formFieldDir.hintId,\n    errorContent,\n    warningContent,\n    hintContent,\n    counterContent,\n    errorAnimatable,\n    warningAnimatable,\n    hintAnimatable,\n    effectiveErrors,\n    semanticSupportState,\n    displaysError,\n    displaysWarning,\n    shouldRenderSupport,\n    shouldRenderError,\n    shouldRenderWarning,\n    shouldRenderHint,\n    errorActive,\n    warningActive,\n    hintActive,\n    errorState,\n    warningState,\n    hintState,\n    errorDirection,\n    warningDirection,\n    hintDirection,\n    visibleErrors,\n    visibleWarnings,\n    supportHeight,\n  };\n};\n\nconst FORM_SUPPORT_DEF = /* @__PURE__ */ defineProvider(formSupportFactory, {\n  name: 'FormSupport',\n});\n\nexport const provideFormSupport = /* @__PURE__ */ toProvideFn(FORM_SUPPORT_DEF);\nexport const injectFormSupport = /* @__PURE__ */ toInjectFn(FORM_SUPPORT_DEF);\n\nexport type FormSupport = ReturnType<typeof formSupportFactory>;\n\n/**\n * Forwards a support-region view children into its `FormSupport`, and drops them again when the\n * region is torn down. The `viewChild` queries themselves must stay as class fields (`NG8110` - the\n * compiler only accepts them in direct field initializers). Call from the constructor (needs an\n * injection context for the effect).\n */\nexport const wireFormSupport = (\n  support: FormSupport,\n  refs: {\n    errorContent: Signal<ElementRef<HTMLElement> | undefined>;\n    warningContent: Signal<ElementRef<HTMLElement> | undefined>;\n    hintContent: Signal<ElementRef<HTMLElement> | undefined>;\n    counterContent?: Signal<ElementRef<HTMLElement> | undefined>;\n    errorAnimatable: Signal<AnimatableDirective | undefined>;\n    warningAnimatable: Signal<AnimatableDirective | undefined>;\n    hintAnimatable: Signal<AnimatableDirective | undefined>;\n  },\n) => {\n  effect(() => {\n    support.errorContent.set(refs.errorContent());\n    support.warningContent.set(refs.warningContent());\n    support.hintContent.set(refs.hintContent());\n    support.counterContent.set(refs.counterContent?.());\n    support.errorAnimatable.set(refs.errorAnimatable());\n    support.warningAnimatable.set(refs.warningAnimatable());\n    support.hintAnimatable.set(refs.hintAnimatable());\n  });\n\n  // the region can be torn down while the `FormSupport` lives on (it belongs to the control), and a\n  // measured height read off a detached element would keep the closed region open\n  inject(DestroyRef).onDestroy(() => {\n    support.errorContent.set(undefined);\n    support.warningContent.set(undefined);\n    support.hintContent.set(undefined);\n    support.counterContent.set(undefined);\n    support.errorAnimatable.set(undefined);\n    support.warningAnimatable.set(undefined);\n    support.hintAnimatable.set(undefined);\n  });\n};\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, effect, inject, Signal, untracked, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { getFocusableElements, isOnHigherOverlayLayer, resolveOverlayLayer } from '@ethlete/core';\nimport { delay, filter, fromEvent, Subscription, take, tap } from 'rxjs';\nimport { isTargetInsideOverlayTree } from '../../../overlay/get-closest-overlay';\nimport { OverlayConfig } from '../../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../../overlay/overlay-manager';\nimport { OverlayRef } from '../../../overlay/overlay-ref';\nimport { OverlayTemplateHostComponent } from '../../../overlay/overlay-template-host.component';\n\nexport type AnchoredPanelSurfaceLike = { templateRef: unknown };\n\nexport type AnchoredPanelCloseInfo = {\n  /** A deliberate pointerdown outside the panel and anchor closed it. */\n  byOutsidePointer: boolean;\n  /** Focus left the panel and anchor - moved outside, or tabbed past the pane's edge - which closed it. */\n  byFocusLeave: boolean;\n  /** The pane was presented as a bottom sheet (small viewport) when it closed. */\n  fromBottomSheet: boolean;\n};\n\nexport type AnchoredPanelOverlayRef = OverlayRef<OverlayTemplateHostComponent, unknown>;\n\nexport type CreateAnchoredPanelControllerOptions = {\n  /** Reconcile gate - while `false`, any mounted panel closes and `open` is forced `false`. */\n  canOpen: Signal<boolean>;\n  /** The open model the panel mirrors; the controller drives it to `false` on every close. */\n  open: WritableSignal<boolean>;\n  /** The caller-owned overlay-ref signal the controller writes on mount/close. */\n  overlayRef: WritableSignal<AnchoredPanelOverlayRef | null>;\n  /** The registered surface template to project into the pane. */\n  surface: Signal<AnchoredPanelSurfaceLike | null>;\n  /** The element the pane anchors to (and whose pointerdowns must not count as \"outside\"). */\n  anchor: () => HTMLElement | null | undefined;\n  /** Builds the per-control overlay config (strategies, panel class, escape/focus flags, context). */\n  config: (input: { origin: HTMLElement | undefined; templateRef: unknown }) => OverlayConfig;\n  /** Runs after the surface is resolved but before the pane mounts (e.g. reset browse state). */\n  onBeforeMount?: () => void;\n  /** Runs right after the pane mounts (e.g. seed focus, emit `opened`). */\n  onMounted?: (overlayRef: AnchoredPanelOverlayRef) => void;\n  /** Runs when a close begins, before the leave animation (e.g. clear a search query). */\n  onBeforeClosed?: () => void;\n  /** Runs once the pane is gone (e.g. restore focus to the field). */\n  onAfterClosed?: (info: AnchoredPanelCloseInfo) => void;\n  /** An extra document `keydown` listener installed while the panel is open (e.g. select's Escape). */\n  onDocumentKeydown?: (event: KeyboardEvent) => void;\n  /** Dev-mode handler for a mount attempted without a registered surface. */\n  onMissingSurface?: () => void;\n};\n\n/**\n * The anchored/bottom-sheet panel machinery shared by the field controls that open a templated\n * overlay from a trigger (`select`, `cascader`; the date pickers use the sibling\n * `createDatePickerOverlay`). Everything control-specific - the overlay config and the mount/close\n * side effects - is supplied via the hooks. Call in an injection context.\n */\nexport const createAnchoredPanelController = (options: CreateAnchoredPanelControllerOptions) => {\n  const overlayManager = injectOverlayManager();\n  const documentRef = inject(DOCUMENT);\n  const destroyRef = inject(DestroyRef);\n\n  const overlayRef = options.overlayRef;\n\n  let interactionListenersCleanup: (() => void) | null = null;\n  let closedByOutsidePointer = false;\n  let closedByFocusLeave = false;\n  let closedFromBottomSheet = false;\n\n  const detachInteractionListeners = () => {\n    interactionListenersCleanup?.();\n    interactionListenersCleanup = null;\n  };\n\n  const isOutsideThePanel = (target: Node) => {\n    const pane = overlayRef()?.elements?.paneElement;\n\n    // A target inside this panel - or inside a nested popover it opened (a select body, menu,\n    // tooltip; those mount as sibling panes in the overlay root, not DOM descendants) - must not\n    // count as \"outside\", otherwise reaching the child popover closes this panel.\n    if (pane && isTargetInsideOverlayTree({ target, rootPane: pane, openOverlays: overlayManager.openOverlays() })) {\n      return false;\n    }\n\n    if (options.anchor()?.contains(target)) {\n      return false;\n    }\n\n    return !isOnHigherOverlayLayer(target, resolveOverlayLayer(pane ?? options.anchor()));\n  };\n\n  const requestClose = () => {\n    if (options.open()) {\n      options.open.set(false);\n    } else {\n      overlayRef()?.close();\n    }\n  };\n\n  const isTabPastThePaneEdge = (event: KeyboardEvent, pane: HTMLElement) => {\n    if (event.key !== 'Tab' || event.defaultPrevented) {\n      return false;\n    }\n\n    const focusable = getFocusableElements(pane, documentRef);\n    const edge = event.shiftKey ? focusable[0] : focusable[focusable.length - 1];\n\n    return !!edge && event.target === edge;\n  };\n\n  const attachInteractionListeners = () => {\n    detachInteractionListeners();\n\n    const onPointerDown = (event: PointerEvent) => {\n      const target = event.target;\n\n      if (!(target instanceof Element) || !isOutsideThePanel(target)) {\n        return;\n      }\n\n      closedByOutsidePointer = true;\n      requestClose();\n    };\n\n    const onFocusIn = (event: FocusEvent) => {\n      const target = event.target;\n\n      if (!(target instanceof Element) || !isOutsideThePanel(target)) {\n        return;\n      }\n\n      closedByFocusLeave = true;\n      requestClose();\n    };\n\n    const subscriptions: Subscription[] = [\n      fromEvent<PointerEvent>(documentRef, 'pointerdown', { capture: true }).subscribe(onPointerDown),\n      fromEvent<FocusEvent>(documentRef, 'focusin', { capture: true }).subscribe(onFocusIn),\n    ];\n\n    if (options.onDocumentKeydown) {\n      subscriptions.push(fromEvent<KeyboardEvent>(documentRef, 'keydown').subscribe(options.onDocumentKeydown));\n    }\n\n    const pane = overlayRef()?.elements?.paneElement;\n\n    if (pane) {\n      subscriptions.push(\n        fromEvent<KeyboardEvent>(pane, 'keydown')\n          .pipe(\n            filter((event) => isTabPastThePaneEdge(event, pane)),\n            // one task later: closing inside the keydown would tear the pane down before the browser\n            // performs the Tab, and focus would fall to the document instead of the next tab stop\n            delay(0),\n            tap(() => {\n              closedByFocusLeave = true;\n              requestClose();\n            }),\n          )\n          .subscribe(),\n      );\n    }\n\n    interactionListenersCleanup = () => subscriptions.forEach((subscription) => subscription.unsubscribe());\n  };\n\n  const mountOverlay = () => {\n    const surface = options.surface();\n\n    if (!surface) {\n      options.onMissingSurface?.();\n\n      return;\n    }\n\n    options.onBeforeMount?.();\n\n    const config = options.config({ origin: options.anchor() ?? undefined, templateRef: surface.templateRef });\n    const currentRef = overlayManager.open<OverlayTemplateHostComponent>(OverlayTemplateHostComponent, config);\n\n    overlayRef.set(currentRef);\n    options.onMounted?.(currentRef);\n    attachInteractionListeners();\n\n    // sync the open model as soon as any close begins so aria-expanded flips before the leave animation\n    currentRef\n      .beforeClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          if (overlayRef() !== currentRef) {\n            return;\n          }\n\n          detachInteractionListeners();\n\n          // read while the pane still exists - afterClosed fires after its removal\n          closedFromBottomSheet =\n            currentRef.elements?.paneElement?.classList.contains('et-overlay--bottom-sheet') ?? false;\n\n          options.onBeforeClosed?.();\n\n          if (options.open()) {\n            options.open.set(false);\n          }\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n\n    currentRef\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          if (overlayRef() !== currentRef) {\n            return;\n          }\n\n          overlayRef.set(null);\n\n          const info: AnchoredPanelCloseInfo = {\n            byOutsidePointer: closedByOutsidePointer,\n            byFocusLeave: closedByFocusLeave,\n            fromBottomSheet: closedFromBottomSheet,\n          };\n\n          closedByOutsidePointer = false;\n          closedByFocusLeave = false;\n          closedFromBottomSheet = false;\n          options.onAfterClosed?.(info);\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  effect(() => {\n    const canOpen = options.canOpen();\n    const shouldBeOpen = options.open();\n    const currentRef = overlayRef();\n\n    if (!canOpen) {\n      if (currentRef) {\n        untracked(() => currentRef.close());\n      }\n\n      if (shouldBeOpen) {\n        untracked(() => options.open.set(false));\n      }\n\n      return;\n    }\n\n    if (shouldBeOpen && !currentRef) {\n      untracked(() => mountOverlay());\n\n      return;\n    }\n\n    if (!shouldBeOpen && currentRef) {\n      untracked(() => currentRef.close());\n    }\n  });\n\n  destroyRef.onDestroy(() => {\n    detachInteractionListeners();\n    overlayRef()?.close();\n  });\n\n  return {\n    /** Closes the pane. */\n    close: () => overlayRef()?.close(),\n    /** Closes the pane as a focus leave, so `onAfterClosed` does not pull focus back to the field. */\n    closeByFocusLeave: () => {\n      if (!overlayRef()) {\n        return;\n      }\n\n      closedByFocusLeave = true;\n      requestClose();\n    },\n  };\n};\n","/** Tag names that are natively interactive - a click on one is the control's own, not the frame's. */\nexport const INTERACTIVE_TAGS = ['BUTTON', 'A', 'INPUT', 'SELECT', 'TEXTAREA'];\n\n/**\n * Whether `element` is (or behaves as) a natively-interactive control.\n */\nexport const isInteractiveElement = (element: HTMLElement) =>\n  INTERACTIVE_TAGS.includes(element.tagName) || element.isContentEditable;\n\n/**\n * Whether a pointer event on `target` belongs to an interactive element between it and `frame` -\n * the element itself or an ancestor, such as an icon inside a suffix button.\n */\nexport const hitsInteractiveElement = (target: HTMLElement, frame: HTMLElement) => {\n  for (let element: HTMLElement | null = target; element && element !== frame; element = element.parentElement) {\n    if (isInteractiveElement(element)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n","import { Component, computed, DestroyRef, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FORM_FIELD_TOKEN, LabelDirectiveBase } from './form-field.tokens';\n\nlet uniqueIdCounter = 0;\n\n@Component({\n  selector: 'et-label',\n  template: `\n    <span class=\"et-label-content\">\n      <ng-content />\n    </span>\n\n    @if (requiredMarkerVisible()) {\n      <span class=\"et-label-required-marker\" aria-hidden=\"true\">*</span>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[attr.id]': 'id()',\n    '[attr.data-disabled]': 'effectiveDisabled() || null',\n    '(click)': 'activateControl()',\n  },\n  styles: `\n    et-label {\n      display: inline;\n      min-inline-size: 0;\n    }\n\n    .et-label-content {\n      min-inline-size: 0;\n    }\n\n    .et-label-required-marker {\n      display: inline-block;\n      color: var(--et-theme-color-primary-solid);\n      margin-inline-start: 0.45ch;\n      transition: color 150ms ease;\n    }\n\n    et-label[data-disabled] .et-label-required-marker {\n      color: var(--et-surface-interaction-disabled-solid, currentColor);\n    }\n  `,\n})\nexport class LabelDirective implements LabelDirectiveBase {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  public id = signal(`et-label-${uniqueIdCounter++}`);\n  public requiredMarkerVisible = computed(() => this.formField?.registeredControl()?.required?.() ?? false);\n  public effectiveDisabled = computed(\n    () =>\n      this.formField?.registeredControl()?.effectiveDisabled?.() ??\n      this.formField?.registeredControl()?.disabled?.() ??\n      false,\n  );\n\n  constructor() {\n    this.formField?.registeredLabel.set(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterLabel(this));\n  }\n\n  public activateControl() {\n    this.formField?.activate();\n  }\n}\n","import { ElementRef, Signal, inject } from '@angular/core';\nimport { AnimatedSizeAxis, COLOR_PROVIDER, ProvideColorDirective, injectAnimatedBlockSize } from '@ethlete/core';\n\n/**\n * The surface plumbing every overlay panel (`et-select-panel`, `et-cascader-panel`,\n * `et-date-picker-panel`) repeats: the pane is detached from its trigger's DOM, so the color\n * context from the trigger location has to be re-applied here (synced in the constructor so the\n * theme lands before the enter animation's first painted frame), and the panel's block size is\n * animated as its content changes. Call in the panel component's constructor with its `#panelBody`\n * view child and resizing class. Requires `ProvideColorDirective` as a host directive.\n */\nexport const injectOverlaySurfaceContext = (options: {\n  panelBody: Signal<ElementRef<HTMLElement> | undefined>;\n  resizingClass: string;\n  /** Size axes the panel animates on content changes - see `injectAnimatedBlockSize`. */\n  axes?: AnimatedSizeAxis[] | Signal<AnimatedSizeAxis[]>;\n}) => {\n  const ownColorProvider = inject(ProvideColorDirective);\n  const contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  if (contextColorProvider) {\n    ownColorProvider.syncWithProvider(contextColorProvider);\n  }\n\n  injectAnimatedBlockSize({ observe: [options.panelBody], resizingClass: options.resizingClass, axes: options.axes });\n};\n","import { DestroyRef, WritableSignal, inject, untracked } from '@angular/core';\n\n/**\n * Registers `instance` as the single occupant of a parent's `target` signal and clears it on\n * destroy. The clear is guarded: if a replacement registered before this one tore down, it must not\n * null the signal out from under the newcomer. Pass `undefined` (an optional parent that wasn't\n * found) and it's a no-op. Call in an injection context.\n */\nexport const registerSingleton = <T>(target: WritableSignal<T | null> | null | undefined, instance: T) => {\n  if (!target) {\n    return;\n  }\n\n  target.set(instance);\n\n  inject(DestroyRef).onDestroy(() => {\n    if (untracked(target) === instance) {\n      target.set(null);\n    }\n  });\n};\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings every form control shows, rather than any one control's own. The per-control inputs\n * (`clearLabel`, `mixedLabel`) still win where a specific instance needs different wording.\n */\nexport type FormFieldLabels = {\n  /** Placeholder standing in for values that disagree across a bulk edit (`mixed`). */\n  mixed: string;\n  /** Accessible label for a control's clear-value button. */\n  clear: string;\n  /** The select-all row of a checkbox group (`<et-checkbox-group-select-all>`) and a multi `et-select` (`selectAll`). */\n  selectAll: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_FORM_FIELD_LABELS: FormFieldLabels = {\n  mixed: 'Mixed',\n  clear: 'Clear',\n  selectAll: 'Select all',\n};\n\nconst FORM_FIELD_LABELS_DEF = /* @__PURE__ */ defineLabels<FormFieldLabels>(\n  'FORM_FIELD_LABELS',\n  DEFAULT_FORM_FIELD_LABELS,\n);\n\n/**\n * Localize the strings shared by every form control below this injector, and read the set in effect here\n * as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_FORM_FIELD_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideFormFieldLabels({ mixed: 'Gemischt', clear: 'Leeren', selectAll: 'Alle auswählen' });\n */\nexport const provideFormFieldLabels = /* @__PURE__ */ toProvideFn(FORM_FIELD_LABELS_DEF);\nexport const injectFormFieldLabels = /* @__PURE__ */ toInjectFn(FORM_FIELD_LABELS_DEF);\nexport const FORM_FIELD_LABELS = /* @__PURE__ */ toToken(FORM_FIELD_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The text-field shell chrome (per-size tokens, label modes, hover/focus/error/disabled frame\n * states), as a styles-only component mounted by the controls that render inside that shell.\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-field-text-shell-styles',\n  template: '',\n  styleUrl: './form-field-text-shell-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldTextShellStylesComponent {}\n\n/**\n * Mounts the text-field shell stylesheet. Call from the constructor of every control that renders\n * inside the shell (i.e. every control the form field reports `usesTextFieldShell()` for).\n *\n * @internal\n */\nexport const mountTextFieldShellStyles = () => injectStyleManager().mount(FormFieldTextShellStylesComponent);\n","import { booleanAttribute, computed, DestroyRef, Directive, inject, input, model, signal, Signal } from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport { AccessibleNameControlDirective } from './accessible-name-control.directive';\nimport { FORM_FIELD_TOKEN, FormFieldControl, FormFieldControlType } from './form-field.tokens';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { mountTextFieldShellStyles } from '../form-field-text-shell-styles.component';\n\n/** Must be extended by an `@Directive` - Angular only surfaces inherited inputs/outputs from a decorated base. */\n@Directive({\n  host: {\n    '[attr.data-mixed]': 'mixed() || null',\n  },\n})\nexport abstract class TextShellControlDirective extends AccessibleNameControlDirective implements FormFieldControl {\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  public touched = model(false);\n  /**\n   * View state for a bulk-edit field whose source values disagree. While set, the raw `value`\n   * stays untouched but is masked: the native control renders empty with `mixedLabel` as its\n   * placeholder. The first user edit that produces content commits over the raw value (replace\n   * semantics) and resolves `mixed`; external/programmatic value writes do not.\n   */\n  public mixed = model(false);\n  /** Placeholder text shown while `mixed` is set - overrides the consumer placeholder. */\n  public mixedLabel = input<string | null>(null);\n\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  public describedBy = signal<string | null>(null);\n  public focused = signal(false);\n\n  /** The control-type tag the form-field switches its shell/aria on. */\n  public abstract controlType: Signal<FormFieldControlType>;\n\n  constructor() {\n    super();\n\n    mountTextFieldShellStyles();\n\n    const destroyRef = inject(DestroyRef);\n\n    this.formField?.registerControl(this);\n    destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.focusControl(options);\n  }\n\n  protected abstract focusControl(options?: FocusOptions): void;\n}\n","import { booleanAttribute, Directive, input, signal } from '@angular/core';\nimport { ACCESSIBLE_NAME_INPUTS } from './accessible-name-control.directive';\nimport { FieldWarningResult } from './field-warnings';\nimport { TextShellControlDirective } from './text-shell-control.directive';\n\n/**\n * The base's inputs, for a wrapper component's `hostDirectives` list. Spread it instead of copying\n * the names - a dropped entry makes that binding an NG0303 on the wrapper.\n */\nexport const TEXT_FIELD_CONTROL_INPUTS = [\n  'touched',\n  'mixed',\n  'mixedLabel',\n  'disabled',\n  'readonly',\n  'hidden',\n  'invalid',\n  'errors',\n  'warnings',\n  'required',\n  'name',\n  'maxLength',\n  'pending',\n  ...ACCESSIBLE_NAME_INPUTS,\n] as const;\n\n/**\n * Shared wiring for the native-input-backed controls that render inside the text-field shell\n * (`et-input`, `et-number-input`, `et-password-input`, `et-color-input`, `et-textarea`).\n *\n * Subclasses add their own `value` model, `controlType`, `hasValue`, and any control-specific\n * surface (placeholder, native element wiring, etc.). Must be extended by an `@Directive` - Angular\n * only surfaces inherited inputs/outputs from a decorated base.\n */\n@Directive()\nexport abstract class TextFieldControlDirective extends TextShellControlDirective {\n  // eslint-disable-next-line ethlete/no-native-html-input-name -- form-field hidden state deliberately mirrors the native attribute\n  public hidden = input(false, { transform: booleanAttribute });\n\n  /**\n   * Non-blocking advisories to show under the field, for a control that is not bound to a\n   * signal-forms field (which would carry them through `warn()` rules instead). A bare string is\n   * one advisory; `null` is none. They never reach validity.\n   */\n  public warnings = input<FieldWarningResult>(null);\n\n  /**\n   * The bound field's `maxLength()` limit, bound automatically by signal forms because this input\n   * exists - so `<et-counter />` needs no `[max]` for a schema-validated field.\n   *\n   * Deliberately **not** forwarded to the native `maxlength` attribute. Set `maxlength` yourself on\n   * the control if you want the browser to clamp instead.\n   */\n  public maxLength = input<number | undefined>(undefined);\n\n  /**\n   * True while an async validator is in flight for the bound field - bound automatically by signal\n   * forms because this input exists.\n   */\n  public pending = input(false, { transform: booleanAttribute });\n\n  /** @internal The element `focus()` targets - the native control by default. */\n  public focusTarget = signal<HTMLElement | null>(null);\n\n  protected focusControl(options?: FocusOptions) {\n    this.focusTarget()?.focus(options);\n  }\n}\n","import { Subscription, tap, timer } from 'rxjs';\n\nexport type Typeahead = {\n  /** Appends a character to the buffer and returns the current query. */\n  append: (character: string) => string;\n  reset: () => void;\n  destroy: () => void;\n};\n\nexport const createTypeahead = (resetDelay = 500): Typeahead => {\n  let buffer = '';\n  let resetSubscription: Subscription | null = null;\n\n  const cancelReset = () => {\n    resetSubscription?.unsubscribe();\n    resetSubscription = null;\n  };\n\n  const reset = () => {\n    cancelReset();\n    buffer = '';\n  };\n\n  const append = (character: string) => {\n    cancelReset();\n    buffer += character.toLowerCase();\n    resetSubscription = timer(resetDelay)\n      .pipe(\n        tap(() => {\n          buffer = '';\n          resetSubscription = null;\n        }),\n      )\n      .subscribe();\n\n    return buffer;\n  };\n\n  return {\n    append,\n    reset,\n    destroy: reset,\n  };\n};\n","import { Observable, from, isObservable, of } from 'rxjs';\n\n/** A single entry in a cascader's hierarchy. `T` is the consumer's value type. */\nexport type CascaderNode<T> = {\n  /** The value committed to the form when this node is selected (leaf) or picked (any-level). */\n  value: T;\n  /** The visible label. */\n  label: string;\n  /** Marks the node as a terminal leaf - it is selectable and never expands. */\n  isLeaf?: boolean;\n  /**\n   * Whether the node has children to drill into. `false` makes it terminal (like `isLeaf`);\n   * omit it to discover children lazily by loading them.\n   */\n  hasChildren?: boolean;\n  /** Disables selecting and expanding the node. */\n  disabled?: boolean;\n};\n\n/**\n * The abstract hierarchical source a cascader browses. `loadChildren` returns the children\n * of a node (or the root's children when `parent` is `null`) as a sync array, a `Promise`,\n * or an `Observable`.\n */\nexport type CascaderDataSource<T> = {\n  loadChildren(\n    parent: CascaderNode<T> | null,\n  ): CascaderNode<T>[] | Promise<CascaderNode<T>[]> | Observable<CascaderNode<T>[]>;\n\n  /**\n   * Optionally resolves the ancestor chain (root → committed node) for a value, so the trigger\n   * can show its breadcrumb when the value is set **programmatically** (a form patch/restore)\n   * rather than picked in the panel. Return `null` (or an empty array) when the value has no\n   * resolvable path.\n   */\n  resolvePath?(\n    value: T,\n  ): CascaderNode<T>[] | null | Promise<CascaderNode<T>[] | null> | Observable<CascaderNode<T>[] | null>;\n\n  /**\n   * Optionally searches the whole hierarchy **flat** - across all levels at once, so a known\n   * leaf can be jumped to without drilling. Each result is the full ancestor chain (root →\n   * matching node). Providing this hook is what enables search: with it, a search input\n   * (`etCascaderSearch` / the default component's built-in one) filters the panel into a flat\n   * result list.\n   */\n  search?(query: string): CascaderNode<T>[][] | Promise<CascaderNode<T>[][]> | Observable<CascaderNode<T>[][]>;\n};\n\n/** Whether a node can be drilled into - false for explicit leaves and `hasChildren: false`. */\nexport const canHaveChildren = <T>(node: CascaderNode<T>) => node.isLeaf !== true && node.hasChildren !== false;\n\nexport type CascaderCompareWith<T> = (a: T, b: T) => boolean;\n\nexport const defaultCompareWith: CascaderCompareWith<unknown> = (a, b) => a === b;\n\n/** Value equality between two nodes via the configured comparator. */\nexport const nodesEqual = <T>(options: {\n  a: CascaderNode<T> | null;\n  b: CascaderNode<T> | null;\n  compareWith: CascaderCompareWith<T>;\n}) => {\n  const { a, b, compareWith } = options;\n\n  return a !== null && b !== null && compareWith(a.value, b.value);\n};\n\n/** Index of `node` in `nodes` by value equality, or `-1`. */\nexport const indexOfNode = <T>(options: {\n  nodes: readonly CascaderNode<T>[];\n  node: CascaderNode<T> | null;\n  compareWith: CascaderCompareWith<T>;\n}) => {\n  const { nodes, node, compareWith } = options;\n\n  return node === null ? -1 : nodes.findIndex((candidate) => compareWith(candidate.value, node.value));\n};\n\n/** Normalizes a `loadChildren` result (array | Promise | Observable) into an Observable. */\nexport const toChildrenObservable = <T>(\n  result: CascaderNode<T>[] | Promise<CascaderNode<T>[]> | Observable<CascaderNode<T>[]>,\n): Observable<CascaderNode<T>[]> => {\n  if (Array.isArray(result)) {\n    return of(result);\n  }\n\n  if (isObservable(result)) {\n    return result;\n  }\n\n  return from(result);\n};\n\n/** Normalizes a `search` result (array | Promise | Observable) into an Observable. */\nexport const toSearchObservable = <T>(\n  result: CascaderNode<T>[][] | Promise<CascaderNode<T>[][]> | Observable<CascaderNode<T>[][]>,\n): Observable<CascaderNode<T>[][]> => {\n  if (Array.isArray(result)) {\n    return of(result);\n  }\n\n  if (isObservable(result)) {\n    return result;\n  }\n\n  return from(result);\n};\n\n/** Normalizes a `resolvePath` result (array | null | Promise | Observable) into an Observable. */\nexport const toPathObservable = <T>(\n  result: CascaderNode<T>[] | null | Promise<CascaderNode<T>[] | null> | Observable<CascaderNode<T>[] | null>,\n): Observable<CascaderNode<T>[] | null> => {\n  if (result === null) {\n    return of(null);\n  }\n\n  if (Array.isArray(result)) {\n    return of(result);\n  }\n\n  if (isObservable(result)) {\n    return result;\n  }\n\n  return from(result);\n};\n","import {\n  DOCUMENT,\n  DestroyRef,\n  Directive,\n  Signal,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  model,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport { RuntimeError, injectHostElement, nextFrame } from '@ethlete/core';\nimport { EMPTY, Subscription, catchError, fromEvent, merge, switchMap, take, tap } from 'rxjs';\nimport { createTypeahead } from '../../../internals/typeahead';\nimport { mountFloatingPanelStyles } from '../../../overlay/floating-panel-styles.component';\nimport { anchoredOverlayStrategy, injectBottomSheetStrategy } from '../../../overlay/strategies';\nimport {\n  AccessibleNameControlDirective,\n  AnchoredPanelOverlayRef,\n  createAnchoredPanelController,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n  hitsInteractiveElement,\n} from '../../form-field/headless';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderColumnState, CascaderSearchState } from './cascader.tokens';\nimport {\n  CascaderCompareWith,\n  CascaderDataSource,\n  CascaderNode,\n  canHaveChildren,\n  defaultCompareWith,\n  indexOfNode,\n  nodesEqual,\n  toChildrenObservable,\n  toPathObservable,\n  toSearchObservable,\n} from './internals/cascader-tree';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { mountTextFieldShellStyles } from '../../form-field/form-field-text-shell-styles.component';\n\nexport const CASCADER_SELECTABLE_LEVELS = {\n  /** Only terminal leaves commit a value (default). */\n  LEAF: 'leaf',\n  /** Any node - including intermediate branches - can be committed. */\n  ANY: 'any',\n} as const;\n\nexport type CascaderSelectableLevels = (typeof CASCADER_SELECTABLE_LEVELS)[keyof typeof CASCADER_SELECTABLE_LEVELS];\n\ntype CascaderSurfaceLike = { templateRef: unknown };\ntype CascaderTriggerLike = { elementRef: { nativeElement: HTMLElement } };\ntype CascaderSearchLike = {\n  clear(): void;\n  focus(options?: { select?: boolean }): void;\n  isFocused(): boolean;\n  appendCharacter(character: string): void;\n};\n\n@Directive({\n  selector: '[etCascader]',\n  exportAs: 'etCascader',\n  host: {\n    '[attr.data-cascader-open]': 'open() || null',\n    '[attr.data-mixed]': 'mixed() || null',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n  },\n})\nexport class CascaderDirective<T = unknown>\n  extends AccessibleNameControlDirective\n  implements FormValueControl<T | T[] | null>, FormFieldControl\n{\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private bottomSheetStrategy = injectBottomSheetStrategy();\n  private hostElement = injectHostElement();\n\n  /** The committed value: `T | null` in single mode, `T[]` with `multiple`. */\n  public value = model<T | T[] | null>(null);\n  /** View state for a field whose source values disagree. The raw form value stays untouched. */\n  public mixed = model(false);\n  public touched = model(false);\n  public open = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  /** Multi-select: node activations toggle values instead of committing-and-closing. */\n  public multiple = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n  public placeholder = input('');\n  /** Trigger text shown while `mixed` is set. */\n  public mixedLabel = input<string | null>(null);\n\n  /** The hierarchical source browsed by the cascader. Required. */\n  public dataSource = input<CascaderDataSource<T> | null>(null);\n\n  /** Whether only leaves (`'leaf'`, default) or any node (`'any'`) can be committed as the value. */\n  public selectableLevels = input<CascaderSelectableLevels>(CASCADER_SELECTABLE_LEVELS.LEAF);\n\n  /** Value equality - override when values are objects. */\n  public compareWith = input<CascaderCompareWith<T>>(defaultCompareWith);\n\n  /**\n   * Turns a `loadChildren` / `search` failure into the error text shown in the panel. The default\n   * shows an `Error`'s `message` verbatim (sources like `cascaderFromQuery` throw display-ready\n   * messages) and a generic fallback for anything else.\n   */\n  public toErrorMessage = input<(error: unknown) => string>(\n    (error) => (error instanceof Error && error.message) || 'Something went wrong',\n  );\n\n  /** Whether the overlay panel mirrors the anchor's width (off - columns size themselves). */\n  public mirrorPanelWidth = input(false, { transform: booleanAttribute });\n\n  /**\n   * How many columns the browse view shows side by side before older levels collapse into the\n   * breadcrumb row (min 1).\n   */\n  public maxVisibleColumns = input(3, { transform: (value: number) => Math.max(1, Math.floor(value)) });\n\n  public afterOpen = output<void>();\n  public afterClose = output<void>();\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  /** The committed values, normalized to an array (one entry in single mode, empty for no value). */\n  public values = computed<T[]>(() => {\n    const value = this.value();\n\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    return value === null || value === undefined ? [] : [value];\n  });\n\n  public hasValue = computed(() => this.mixed() || this.values().length > 0);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.CASCADER);\n\n  /** @internal Set by the trigger. */\n  public triggerFocused = signal(false);\n  public focused = computed(() => this.triggerFocused() || this.open());\n\n  /** @internal Keeps the form field in its focused style while the panel is open. */\n  public expanded = computed(() => this.open());\n\n  /** @internal */\n  public registeredTrigger = signal<CascaderTriggerLike | null>(null);\n  /** @internal */\n  public registeredSurface = signal<CascaderSurfaceLike | null>(null);\n  /** @internal */\n  public registeredSearch = signal<CascaderSearchLike | null>(null);\n  /** @internal The mounted tree panel's element id - the trigger points `aria-controls` at it. */\n  public panelId = signal<string | null>(null);\n\n  /** The columns currently shown - column 0 is the root, each subsequent one a drilled level. */\n  public columns = signal<CascaderColumnState<T>[]>([]);\n\n  /** The chain of nodes drilled into - `openPath[i]` is the parent of column `i + 1`. */\n  private openPath = signal<CascaderNode<T>[]>([]);\n\n  /**\n   * Deliberately unclamped - columns load and truncate asynchronously, so the clamp lives in\n   * `visibleColumnStart` where it tracks the current column count instead of going stale.\n   */\n  private columnWindowStart = signal(0);\n\n  /** Index of the first column the browse view shows - everything before it is collapsed. */\n  public visibleColumnStart = computed(() => {\n    const overflow = Math.max(0, this.columns().length - this.maxVisibleColumns());\n\n    return Math.max(0, Math.min(overflow, this.columnWindowStart()));\n  });\n\n  /** The windowed slice of `columns` the browse view renders, with their absolute indices. */\n  public visibleColumns = computed(() => {\n    const start = this.visibleColumnStart();\n\n    return this.columns()\n      .slice(start, start + this.maxVisibleColumns())\n      .map((column, offset) => ({ column, columnIndex: start + offset }));\n  });\n\n  /**\n   * The breadcrumb row's entries: the FULL drilled trail, present whenever the drill overflows\n   * the window (empty otherwise). Deliberately independent of the window position - levels\n   * collapsed to the right (after sliding back) need their crumbs just as much as those on the\n   * left, and sliding around must never rebuild the row; only an actual drill change does.\n   */\n  public breadcrumbPath = computed(() =>\n    this.columns().length > this.maxVisibleColumns() ? [...this.openPath()] : [],\n  );\n\n  /** The committed selection chain from root to the chosen node (for the breadcrumb trigger). */\n  public path = signal<CascaderNode<T>[]>([]);\n  public pathValue = computed(() => this.path().map((node) => node.value));\n\n  /**\n   * Multi mode: the known chain (root → selected node) per selected value - filled by in-panel\n   * toggles and, for programmatically set values, by the data source's `resolvePath`. A value\n   * whose chain is unknown yet has no entry here (its label can't be displayed until resolved).\n   */\n  public selectedPaths = signal<CascaderNode<T>[][]>([]);\n\n  /** Every child list loaded so far, keyed by parent (`null` = root). */\n  private knownChildren = signal<{ parent: CascaderNode<T> | null; children: CascaderNode<T>[] }[]>([]);\n\n  public displayPath = computed(() => this.path().map((node) => node.label));\n  public displayValue = computed(() => {\n    if (this.mixed()) {\n      return this.resolvedMixedLabel();\n    }\n\n    if (this.multiple()) {\n      const compareWith = this.compareWith();\n      const paths = this.selectedPaths();\n      const labels = this.values()\n        .map((value) => {\n          const chain = paths.find((path) => {\n            const last = path[path.length - 1];\n\n            return last !== undefined && compareWith(last.value, value);\n          });\n\n          return chain?.[chain.length - 1]?.label ?? (typeof value === 'string' ? value : null);\n        })\n        .filter((label): label is string => label !== null);\n\n      return labels.length ? labels.join(', ') : null;\n    }\n\n    const labels = this.displayPath();\n\n    return labels.length ? labels.join(' / ') : null;\n  });\n\n  /** The node holding roving focus, and the column it lives in. */\n  public focusedNode = signal<CascaderNode<T> | null>(null);\n  public focusedColumn = signal(0);\n  /** @internal Whether DOM focus is inside the panel - gates the roving-focus DOM moves. */\n  public focusInside = signal(false);\n  /** @internal Bumped after the panel settles to (re-)pull DOM focus onto the active node. */\n  public focusPulse = signal(0);\n\n  /** @internal */\n  public overlayRef = signal<AnchoredPanelOverlayRef | null>(null);\n  public isMounted = computed(() => this.overlayRef() !== null);\n\n  /** Whether the data source supports flat search - the presence of its `search` hook. */\n  public canSearch = computed(() => !!this.dataSource()?.search);\n\n  /** The raw flat-search query, written by the registered search input. */\n  public searchQuery = signal('');\n\n  /** Whether a flat search is active - a non-blank query on a searchable source. */\n  public isSearching = computed(() => this.canSearch() && this.searchQuery().trim().length > 0);\n\n  /** The flat search's load state and matching paths (root → matching node chains). */\n  public searchState = signal<CascaderSearchState<T>>({ status: 'idle', results: [], error: null });\n\n  /** @internal Index of the search result holding roving focus - `-1` while the input has it. */\n  public focusedSearchIndex = signal(-1);\n\n  private searchRetry = signal(0);\n\n  private searchRequest = computed(() => {\n    const source = this.dataSource();\n    const search = source?.search;\n\n    if (!source || !search || !this.isSearching()) {\n      return null;\n    }\n\n    return { source, search, query: this.searchQuery().trim(), retry: this.searchRetry() };\n  });\n\n  private panel = createAnchoredPanelController({\n    canOpen: computed(() => !this.disabled()),\n    open: this.open,\n    overlayRef: this.overlayRef,\n    surface: this.registeredSurface,\n    anchor: () => this.resolveAnchorElement(),\n    config: ({ origin }) => {\n      const context = { $implicit: this, cascader: this, close: () => this.hide() };\n\n      return {\n        bindings: [\n          inputBinding('template', () => this.registeredSurface()?.templateRef),\n          inputBinding('context', () => context),\n        ],\n        mode: 'non-modal',\n        autoFocus: false,\n        restoreFocus: false,\n        // Escape is owned by handlePanelKeydown (clear the search query first, close second) -\n        // the runtime's capture-phase handler would close before the search input saw the key\n        closeOnEscape: false,\n        closeOnOutsidePointer: false,\n        origin,\n        panelClass: 'et-cascader-overlay-pane',\n        strategies: () => [\n          {\n            strategy: this.bottomSheetStrategy.build({ hasBackdrop: true, containerClass: 'et-cascader-sheet' }),\n          },\n          ...anchoredOverlayStrategy({\n            containerClass: ['et-overlay--anchored', 'et-overlay--cascader', 'et-floating-panel'],\n            placement: 'bottom-start',\n            offset: 4,\n            viewportPadding: 8,\n            autoResize: true,\n            minAvailableSpace: 160,\n            mirrorWidth: this.mirrorPanelWidth(),\n          })().map((entry) => ({ ...entry, breakpoint: 'md' as const })),\n        ],\n      };\n    },\n    onBeforeMount: () => {\n      this.resetBrowseState();\n\n      this.focusInside.set(true);\n\n      // the opening pointer click focuses the trigger one frame *after* the node's focus effect\n      // runs, stealing focus back - re-pull it onto the active node once everything has settled\n      nextFrame(() => {\n        if (!this.overlayRef()) {\n          return;\n        }\n\n        const search = this.registeredSearch();\n\n        if (!search) {\n          this.focusPulse.update((pulse) => pulse + 1);\n\n          return;\n        }\n\n        // the pane may not be focusable while its enter transition settles - retry until the\n        // focus sticks\n        const attempt = (remaining: number) => {\n          if (!this.overlayRef()) {\n            return;\n          }\n\n          search.focus();\n\n          if (!search.isFocused() && remaining > 0) {\n            requestAnimationFrame(() => attempt(remaining - 1));\n          }\n        };\n\n        attempt(20);\n      });\n    },\n    onMounted: () => this.afterOpen.emit(),\n    onDocumentKeydown: (event) => this.handlePanelKeydown(event),\n    onAfterClosed: ({ byOutsidePointer, byFocusLeave }) => {\n      this.focusInside.set(false);\n      this.afterClose.emit();\n\n      if (!byOutsidePointer && !byFocusLeave && this.document.activeElement === this.document.body) {\n        this.activate();\n      }\n    },\n  });\n\n  private loadSubscriptions = new Map<number, Subscription>();\n\n  /** The deepest column index currently shown - the visible column in sheet (drill) mode. */\n  public deepestColumnIndex = computed(() => Math.max(0, this.columns().length - 1));\n\n  /** Direction of the last column navigation - drives the panel's slide animation. `null` on open. */\n  public navigationDirection = signal<'forward' | 'backward' | null>(null);\n\n  /**\n   * How the sheet header title animates on the last navigation. `'slide'` (a directional\n   * cross-slide) for level changes that keep the Back bar; `'fade'` when the nav crosses the\n   * root boundary (Back appears/disappears) - there the title also shifts horizontally as the\n   * Back bar's width animates, so a competing transform slide would look jumpy.\n   */\n  public titleAnimation = signal<'slide' | 'fade'>('slide');\n\n  private typeahead = createTypeahead();\n  private typeaheadColumn = -1;\n\n  constructor() {\n    super();\n\n    mountTextFieldShellStyles();\n    mountFloatingPanelStyles();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n\n    // a swapped data source describes a different tree - drop the child lists learned from\n    // the old one so they can't promote branches of the new one to fully selected\n    effect(() => {\n      this.dataSource();\n\n      untracked(() => this.knownChildren.set([]));\n    });\n\n    effect(() => {\n      const value = this.value();\n\n      untracked(() => {\n        if (this.multiple()) {\n          const values = this.values();\n          const compareWith = this.compareWith();\n          const paths = this.selectedPaths();\n          const pruned = paths.filter((path) => {\n            const last = path[path.length - 1];\n\n            return last !== undefined && values.some((candidate) => compareWith(candidate, last.value));\n          });\n\n          if (pruned.length !== paths.length) {\n            this.selectedPaths.set(pruned);\n          }\n\n          return;\n        }\n\n        const path = this.path();\n\n        if (!path.length) {\n          return;\n        }\n\n        const last = path[path.length - 1];\n        const matchesValue =\n          last !== undefined &&\n          value !== null &&\n          value !== undefined &&\n          !Array.isArray(value) &&\n          this.compareWith()(last.value, value);\n\n        if (!matchesValue) {\n          this.path.set([]);\n        }\n      });\n    });\n\n    toObservable(this.value)\n      .pipe(\n        switchMap((value) => {\n          const compareWith = this.compareWith();\n          const resolvePath = this.dataSource()?.resolvePath;\n\n          if (this.multiple()) {\n            const missing = this.values().filter(\n              (candidate) =>\n                !this.selectedPaths().some((path) => {\n                  const pathLast = path[path.length - 1];\n\n                  return pathLast !== undefined && compareWith(pathLast.value, candidate);\n                }),\n            );\n\n            if (!resolvePath || !missing.length) {\n              return EMPTY;\n            }\n\n            return merge(\n              ...missing.map((candidate) =>\n                toPathObservable(resolvePath(candidate)).pipe(\n                  tap((resolved) => {\n                    const stillSelected = this.values().some((current) => compareWith(current, candidate));\n                    const resolvedLast = resolved?.[resolved.length - 1];\n\n                    if (!stillSelected || !resolved || !resolvedLast || !compareWith(resolvedLast.value, candidate)) {\n                      return;\n                    }\n\n                    this.selectedPaths.update((paths) => [\n                      ...paths.filter((path) => {\n                        const pathLast = path[path.length - 1];\n\n                        return pathLast === undefined || !compareWith(pathLast.value, candidate);\n                      }),\n                      resolved,\n                    ]);\n                  }),\n                  catchError(() => EMPTY),\n                ),\n              ),\n            );\n          }\n\n          if (value === null || value === undefined || Array.isArray(value)) {\n            return EMPTY;\n          }\n\n          const currentPath = this.path();\n          const last = currentPath[currentPath.length - 1];\n\n          if (last && compareWith(last.value, value)) {\n            return EMPTY;\n          }\n\n          if (!resolvePath) {\n            return EMPTY;\n          }\n\n          return toPathObservable(resolvePath(value)).pipe(\n            tap((resolved) => {\n              const currentValue = this.value();\n\n              if (\n                currentValue === null ||\n                currentValue === undefined ||\n                Array.isArray(currentValue) ||\n                !compareWith(currentValue, value)\n              ) {\n                return;\n              }\n\n              if (resolved && resolved.length) {\n                const last = resolved[resolved.length - 1];\n\n                if (last && compareWith(last.value, value)) {\n                  this.path.set(resolved);\n                }\n              }\n            }),\n            catchError(() => EMPTY),\n          );\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    toObservable(this.searchRequest)\n      .pipe(\n        switchMap((request) => {\n          if (!request) {\n            untracked(() => this.searchState.set({ status: 'idle', results: [], error: null }));\n\n            return EMPTY;\n          }\n\n          untracked(() => {\n            this.searchState.set({ status: 'loading', results: [], error: null });\n            this.focusedSearchIndex.set(-1);\n          });\n\n          // .call keeps the data source as `this` - sources may implement `search` as a method\n          return toSearchObservable(request.search.call(request.source, request.query)).pipe(\n            tap({\n              next: (results) => {\n                this.searchState.set({ status: 'loaded', results, error: null });\n                this.focusedSearchIndex.set(-1);\n              },\n              error: (error) =>\n                this.searchState.set({ status: 'error', results: [], error: this.toErrorMessage()(error) }),\n            }),\n            catchError(() => EMPTY),\n          );\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    toObservable(computed(() => this.formField?.controlFrameElement() ?? null))\n      .pipe(\n        switchMap((frame) => (frame ? fromEvent<MouseEvent>(frame, 'click') : EMPTY)),\n        tap((event) => this.handleFrameClick(event)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    this.destroyRef.onDestroy(() => {\n      this.cancelLoads();\n      this.typeahead.destroy();\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.registeredTrigger()) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.MISSING_TRIGGER,\n            '[CascaderDirective] Cascader trigger not found. Add an element with etCascaderTrigger inside the [etCascader] element.',\n            { element: this.hostElement },\n          );\n        }\n\n        if (!this.registeredSurface()) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.MISSING_SURFACE,\n            '[CascaderDirective] Cascader surface not found. Add <ng-template etCascaderSurface> inside the [etCascader] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public show() {\n    if (this.disabled() || this.readonly() || this.open()) {\n      return;\n    }\n\n    this.open.set(true);\n  }\n\n  public hide() {\n    if (this.open()) {\n      this.open.set(false);\n    } else {\n      this.panel.close();\n    }\n  }\n\n  public toggle() {\n    if (this.open()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  public activate() {\n    this.focus({ preventScroll: true });\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.registeredTrigger()?.elementRef.nativeElement.focus(options);\n  }\n\n  /**\n   * Whether a node is selected - on the committed chain in single mode; in multi mode an\n   * exactly selected value, or a branch whose loaded descendants are all selected (ancestors\n   * of a partial selection show as indeterminate instead).\n   */\n  public isSelected(node: CascaderNode<T>) {\n    // mixed masks the raw selection: nothing reports selected until the user commits\n    if (this.mixed()) {\n      return false;\n    }\n\n    if (this.multiple()) {\n      return this.isFullySelected(node, []);\n    }\n\n    return this.path().some((selected) => this.compareWith()(selected.value, node.value));\n  }\n\n  /** Multi mode: whether a node that isn't (fully) selected has a selected descendant (the dash state). */\n  public isIndeterminate(node: CascaderNode<T>) {\n    if (!this.multiple() || this.mixed() || this.isSelected(node)) {\n      return false;\n    }\n\n    const compareWith = this.compareWith();\n\n    return this.selectedPaths().some((path) =>\n      path.slice(0, -1).some((ancestor) => compareWith(ancestor.value, node.value)),\n    );\n  }\n\n  /** Whether a node is expanded (its children fill the next column). */\n  public isExpanded(node: CascaderNode<T>, columnIndex: number) {\n    return nodesEqual({ a: this.openPath()[columnIndex] ?? null, b: node, compareWith: this.compareWith() });\n  }\n\n  /**\n   * Activates a node from a pointer/keyboard interaction: drills into branches, commits leaves.\n   * With `multiple`, activation toggles the node's value instead (and never closes) - branches\n   * still just drill in leaf mode, and toggle **and** drill in any-level mode.\n   */\n  public activateNode(node: CascaderNode<T>, columnIndex: number) {\n    if (this.disabled() || this.readonly() || node.disabled) {\n      return;\n    }\n\n    this.focusNode(node, columnIndex);\n\n    const chain = [...this.openPath().slice(0, columnIndex), node];\n\n    if (canHaveChildren(node)) {\n      this.drillInto(node, columnIndex);\n\n      if (this.selectableLevels() === CASCADER_SELECTABLE_LEVELS.ANY) {\n        if (this.multiple()) {\n          this.toggleValue(chain);\n        } else {\n          this.commit({ node, columnIndex, close: false });\n        }\n      }\n\n      return;\n    }\n\n    if (this.multiple()) {\n      this.toggleValue(chain);\n\n      return;\n    }\n\n    this.commit({ node, columnIndex, close: true });\n  }\n\n  /** Multi mode: adds the chain's final node to the value, or removes it when already selected. */\n  public toggleValue(chain: CascaderNode<T>[]) {\n    const node = chain[chain.length - 1];\n\n    if (!node || this.disabled() || this.readonly()) {\n      return;\n    }\n\n    // the first commit over a mixed value REPLACES: a fresh array around the toggled node,\n    // never a toggle against the hidden raw selection\n    if (this.mixed()) {\n      this.value.set([node.value]);\n      this.selectedPaths.set([[...chain]]);\n      this.mixed.set(false);\n\n      return;\n    }\n\n    const compareWith = this.compareWith();\n    const values = this.values();\n    const selected = values.some((value) => compareWith(value, node.value));\n\n    if (selected) {\n      this.value.set(values.filter((value) => !compareWith(value, node.value)));\n      this.selectedPaths.update((paths) =>\n        paths.filter((path) => {\n          const last = path[path.length - 1];\n\n          return last === undefined || !compareWith(last.value, node.value);\n        }),\n      );\n\n      return;\n    }\n\n    this.value.set([...values, node.value]);\n    this.selectedPaths.update((paths) => [...paths, [...chain]]);\n  }\n\n  /** Clears the committed value (and its breadcrumb). */\n  public clearValue() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    this.value.set(this.multiple() ? [] : null);\n    this.mixed.set(false);\n    this.path.set([]);\n    this.selectedPaths.set([]);\n  }\n\n  /** @internal Moves roving focus to a node without activating it. */\n  public focusNode(node: CascaderNode<T>, columnIndex: number) {\n    this.focusedNode.set(node);\n    this.focusedColumn.set(columnIndex);\n    this.revealColumn(columnIndex);\n  }\n\n  /**\n   * Slides the browse window to `columnIndex` and moves roving focus onto its drilled node - a\n   * breadcrumb activation. The window is anchored AT the column (not minimally revealed), so\n   * every crumb maps to a distinct view and stays clickable however the window was slid before.\n   */\n  public showColumn(columnIndex: number) {\n    this.columnWindowStart.set(columnIndex);\n\n    const node = this.openPath()[columnIndex] ?? this.columns()[columnIndex]?.nodes[0];\n\n    if (node) {\n      this.focusNode(node, columnIndex);\n    }\n\n    this.focusPulse.update((pulse) => pulse + 1);\n  }\n\n  /** @internal Routes a node's keydown through the tree navigation model. */\n  public handleNodeKeydown(event: KeyboardEvent, target: { node: CascaderNode<T>; columnIndex: number }) {\n    const { node, columnIndex } = target;\n\n    if (event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    const column = this.columns()[columnIndex];\n\n    if (!column) {\n      return;\n    }\n\n    const nodes = column.nodes;\n    const index = indexOfNode({ nodes, node, compareWith: this.compareWith() });\n\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        this.focusColumnNode(columnIndex, index + 1);\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        this.focusColumnNode(columnIndex, index - 1);\n\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        this.focusColumnNode(columnIndex, 0);\n\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        this.focusColumnNode(columnIndex, nodes.length - 1);\n\n        return;\n      }\n      case 'ArrowRight': {\n        event.preventDefault();\n\n        if (canHaveChildren(node) && !node.disabled) {\n          this.drillInto(node, columnIndex);\n        }\n\n        return;\n      }\n      case 'ArrowLeft': {\n        event.preventDefault();\n\n        if (columnIndex > 0) {\n          const parent = this.openPath()[columnIndex - 1];\n\n          if (parent) {\n            this.focusNode(parent, columnIndex - 1);\n          }\n        }\n\n        return;\n      }\n    }\n\n    // Space activates the focused node (the native button's own default) - it must never be\n    // taken for a printable character, or the node stops being activatable by keyboard\n    if (event.key.length !== 1 || event.key === ' ') {\n      return;\n    }\n\n    const search = this.registeredSearch();\n\n    if (search) {\n      event.preventDefault();\n      search.appendCharacter(event.key);\n\n      return;\n    }\n\n    if (columnIndex !== this.typeaheadColumn) {\n      this.typeahead.reset();\n      this.typeaheadColumn = columnIndex;\n    }\n\n    const query = this.typeahead.append(event.key);\n    const match = nodes.find((candidate) => !candidate.disabled && candidate.label.toLowerCase().startsWith(query));\n\n    if (match) {\n      event.preventDefault();\n      this.focusNode(match, columnIndex);\n    }\n  }\n\n  /** Collapses the deepest column and moves focus back to its parent - the sheet's back-nav. */\n  public goBack() {\n    const path = this.openPath();\n    const parent = path.at(-1);\n\n    if (!parent) {\n      return;\n    }\n\n    this.navigationDirection.set('backward');\n    this.titleAnimation.set(path.length === 1 ? 'fade' : 'slide');\n    this.openPath.update((current) => current.slice(0, -1));\n    this.truncateColumns(this.openPath().length + 1);\n    this.focusNode(parent, this.openPath().length);\n    this.pullFocusAfterSettle();\n  }\n\n  /** @internal Reloads a column that errored - wired to the panel's retry control. */\n  public retryColumn(columnIndex: number) {\n    const column = this.columns()[columnIndex];\n\n    if (column) {\n      this.loadColumn(columnIndex, column.parent);\n    }\n  }\n\n  /** @internal Updates the flat-search query (written by the registered search input). */\n  public setSearchQuery(query: string) {\n    if (ngDevMode && query && !this.canSearch()) {\n      console.warn(\n        '[CascaderDirective] A search query was typed but the [dataSource] has no `search` hook, so the query is ignored. Implement `search(query)` on the data source to enable flat search.',\n      );\n    }\n\n    this.searchQuery.set(query);\n    this.focusedSearchIndex.set(-1);\n  }\n\n  /** Clears the flat-search query (and with it the result list - the columns return). */\n  public clearSearch() {\n    const search = this.registeredSearch();\n\n    if (search) {\n      search.clear();\n    } else {\n      this.searchQuery.set('');\n    }\n\n    this.focusedSearchIndex.set(-1);\n  }\n\n  /** Re-runs a failed search with the current query - wired to the panel's retry control. */\n  public retrySearch() {\n    this.searchRetry.update((count) => count + 1);\n  }\n\n  /** Activates a search result: commits selectable nodes, jumps the browse state to branch-only matches. */\n  public activateSearchResult(path: CascaderNode<T>[]) {\n    const node = path[path.length - 1];\n\n    if (!node || node.disabled || this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (canHaveChildren(node) && this.selectableLevels() !== CASCADER_SELECTABLE_LEVELS.ANY) {\n      this.browseToPath(path);\n      this.clearSearch();\n\n      return;\n    }\n\n    if (this.multiple()) {\n      this.toggleValue(path);\n\n      return;\n    }\n\n    this.path.set([...path]);\n    this.value.set(node.value);\n    this.mixed.set(false);\n    this.hide();\n  }\n\n  /** @internal Enter in the search input activates the focused result, or the first enabled one. */\n  public activateFocusedSearchResult() {\n    const results = this.searchState().results;\n    const path =\n      results[this.focusedSearchIndex()] ?? results.find((candidate) => !candidate[candidate.length - 1]?.disabled);\n\n    if (path) {\n      this.activateSearchResult(path);\n    }\n  }\n\n  /** @internal ArrowDown/ArrowUp from the search input moves roving focus into the panel. */\n  public moveFocusFromSearch(direction: 1 | -1) {\n    if (this.isSearching()) {\n      const results = this.searchState().results;\n\n      if (results.length) {\n        this.focusedSearchIndex.set(direction === 1 ? 0 : results.length - 1);\n      }\n\n      return;\n    }\n\n    this.focusPulse.update((pulse) => pulse + 1);\n  }\n\n  /** @internal Moves roving focus to a search result without activating it. */\n  public focusSearchOption(index: number) {\n    const results = this.searchState().results;\n\n    if (results.length) {\n      this.focusedSearchIndex.set(Math.max(0, Math.min(results.length - 1, index)));\n    }\n  }\n\n  /** @internal Routes a search result's keydown through the flat-list navigation model. */\n  public handleSearchOptionKeydown(event: KeyboardEvent, index: number) {\n    if (event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    const search = this.registeredSearch();\n\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n\n        if (index === this.searchState().results.length - 1 && search) {\n          this.focusedSearchIndex.set(-1);\n          search.focus();\n\n          return;\n        }\n\n        this.focusSearchOption(index + 1);\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n\n        if (index === 0 && search) {\n          this.focusedSearchIndex.set(-1);\n          search.focus();\n\n          return;\n        }\n\n        this.focusSearchOption(index - 1);\n\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        this.focusSearchOption(0);\n\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        this.focusSearchOption(this.searchState().results.length - 1);\n\n        return;\n      }\n    }\n\n    if (event.key.length === 1 && search) {\n      event.preventDefault();\n      this.focusedSearchIndex.set(-1);\n      search.appendCharacter(event.key);\n    }\n  }\n\n  // Disabled children are skipped - they can't be toggled, so requiring them would lock the branch\n  // out of the full state. `visited` breaks recursion on a (malformed) cyclic source.\n  private isFullySelected(node: CascaderNode<T>, visited: CascaderNode<T>[]): boolean {\n    const compareWith = this.compareWith();\n\n    if (this.values().some((value) => compareWith(value, node.value))) {\n      return true;\n    }\n\n    if (!canHaveChildren(node) || visited.some((seen) => compareWith(seen.value, node.value))) {\n      return false;\n    }\n\n    const children = this.knownChildren().find((entry) =>\n      nodesEqual({ a: entry.parent, b: node, compareWith }),\n    )?.children;\n    const selectable = children?.filter((child) => !child.disabled) ?? [];\n\n    return selectable.length > 0 && selectable.every((child) => this.isFullySelected(child, [...visited, node]));\n  }\n\n  private focusColumnNode(columnIndex: number, targetIndex: number) {\n    const nodes = this.columns()[columnIndex]?.nodes ?? [];\n    const clamped = Math.max(0, Math.min(nodes.length - 1, targetIndex));\n    const node = nodes[clamped];\n\n    if (node) {\n      this.focusNode(node, columnIndex);\n    }\n  }\n\n  private focusFirstOfColumn(columnIndex: number) {\n    const attempt = (remaining: number) => {\n      // the panel was closed/unmounted while the column was loading - stop, or we'd pull focus\n      // into a node that is animating away\n      if (!this.isMounted()) {\n        return;\n      }\n\n      const nodes = this.columns()[columnIndex]?.nodes ?? [];\n\n      if (nodes[0]) {\n        this.focusNode(nodes[0], columnIndex);\n        this.pullFocusAfterSettle();\n\n        return;\n      }\n\n      if (remaining > 0) {\n        requestAnimationFrame(() => attempt(remaining - 1));\n      }\n    };\n\n    attempt(20);\n  }\n\n  /**\n   * The sheet re-creates the active column on a drill or back navigation, which removes the node\n   * that holds DOM focus; the pulse makes the new node take it once it has mounted.\n   */\n  private pullFocusAfterSettle() {\n    nextFrame(() => {\n      if (this.isMounted()) {\n        this.focusPulse.update((pulse) => pulse + 1);\n      }\n    });\n  }\n\n  private browseToPath(path: CascaderNode<T>[]) {\n    this.cancelLoads();\n    this.openPath.set([...path]);\n    this.columns.set([]);\n    this.navigationDirection.set(null);\n    this.focusedNode.set(null);\n\n    this.loadColumn(0, null);\n    path.forEach((node, index) => this.loadColumn(index + 1, node));\n\n    this.columnWindowStart.set(path.length);\n    this.focusFirstOfColumn(path.length);\n  }\n\n  private drillInto(node: CascaderNode<T>, columnIndex: number) {\n    // already expanded here - nothing to reload, but re-activating a branch whose children sit\n    // beyond the window edge (after a breadcrumb slid it back) must still bring them into view\n    if (this.isExpanded(node, columnIndex)) {\n      this.revealColumn(columnIndex + 1);\n\n      return;\n    }\n\n    this.navigationDirection.set('forward');\n    this.titleAnimation.set(columnIndex === 0 ? 'fade' : 'slide');\n    this.openPath.update((path) => [...path.slice(0, columnIndex), node]);\n    this.truncateColumns(columnIndex + 1);\n    this.loadColumn(columnIndex + 1, node);\n    this.revealColumn(columnIndex + 1);\n    this.focusFirstOfColumn(columnIndex + 1);\n  }\n\n  private revealColumn(columnIndex: number) {\n    const start = this.visibleColumnStart();\n    const end = start + this.maxVisibleColumns() - 1;\n\n    if (columnIndex < start) {\n      this.columnWindowStart.set(columnIndex);\n    } else if (columnIndex > end) {\n      this.columnWindowStart.set(columnIndex - this.maxVisibleColumns() + 1);\n    }\n  }\n\n  private commit(options: { node: CascaderNode<T>; columnIndex: number; close: boolean }) {\n    const { node, columnIndex, close } = options;\n    const chain = [...this.openPath().slice(0, columnIndex), node];\n\n    this.path.set(chain);\n    this.value.set(node.value);\n    this.mixed.set(false);\n\n    if (close) {\n      this.hide();\n    }\n  }\n\n  private truncateColumns(length: number) {\n    for (const [index, subscription] of this.loadSubscriptions) {\n      if (index >= length) {\n        subscription.unsubscribe();\n        this.loadSubscriptions.delete(index);\n      }\n    }\n\n    this.columns.update((columns) => columns.slice(0, length));\n  }\n\n  private loadColumn(columnIndex: number, parent: CascaderNode<T> | null) {\n    const source = this.dataSource();\n\n    if (!source) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          CASCADER_ERROR_CODES.MISSING_DATA_SOURCE,\n          '[CascaderDirective] A [dataSource] is required to open the cascader.',\n          { element: this.hostElement },\n        );\n      }\n\n      return;\n    }\n\n    this.loadSubscriptions.get(columnIndex)?.unsubscribe();\n\n    this.setColumn(columnIndex, { parent, status: 'loading', nodes: [], error: null });\n\n    const subscription = toChildrenObservable(source.loadChildren(parent))\n      .pipe(\n        take(1),\n        tap({\n          next: (nodes) => {\n            this.setColumn(columnIndex, { parent, status: 'loaded', nodes, error: null });\n            this.rememberChildren(parent, nodes);\n\n            if (columnIndex === 0 && !this.focusedNode() && nodes[0]) {\n              this.focusNode(nodes[0], 0);\n            }\n          },\n          error: (error) =>\n            this.setColumn(columnIndex, { parent, status: 'error', nodes: [], error: this.toErrorMessage()(error) }),\n        }),\n        catchError(() => EMPTY),\n      )\n      .subscribe();\n\n    this.loadSubscriptions.set(columnIndex, subscription);\n  }\n\n  private rememberChildren(parent: CascaderNode<T> | null, children: CascaderNode<T>[]) {\n    const compareWith = this.compareWith();\n\n    this.knownChildren.update((entries) => [\n      ...entries.filter((entry) =>\n        parent === null ? entry.parent !== null : !nodesEqual({ a: entry.parent, b: parent, compareWith }),\n      ),\n      { parent, children },\n    ]);\n  }\n\n  private setColumn(columnIndex: number, state: CascaderColumnState<T>) {\n    this.columns.update((columns) => {\n      const next = [...columns];\n\n      next[columnIndex] = state;\n\n      return next;\n    });\n  }\n\n  private cancelLoads() {\n    for (const subscription of this.loadSubscriptions.values()) {\n      subscription.unsubscribe();\n    }\n\n    this.loadSubscriptions.clear();\n  }\n\n  private handlePanelKeydown(event: KeyboardEvent) {\n    if (event.key !== 'Escape' || event.defaultPrevented) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const search = this.registeredSearch();\n\n    if (search && this.searchQuery()) {\n      this.clearSearch();\n      search.focus();\n\n      return;\n    }\n\n    this.hide();\n  }\n\n  private resetBrowseState() {\n    this.cancelLoads();\n    this.openPath.set([]);\n    this.columns.set([]);\n    this.focusedColumn.set(0);\n    this.searchQuery.set('');\n    this.focusedSearchIndex.set(-1);\n    this.navigationDirection.set(null);\n\n    // seed focus to the committed root before loading - the guard in the root load skips its\n    // own seed\n    const committed = this.mixed() ? [] : this.multiple() ? (this.selectedPaths()[0] ?? []) : this.path();\n\n    this.focusedNode.set(committed[0] ?? null);\n\n    this.loadColumn(0, null);\n\n    committed.forEach((node, index) => {\n      if (canHaveChildren(node)) {\n        this.openPath.update((path) => [...path, node]);\n        this.loadColumn(index + 1, node);\n      }\n    });\n\n    this.columnWindowStart.set(this.openPath().length);\n  }\n\n  private resolveAnchorElement() {\n    return this.formField?.controlFrameElement() ?? this.registeredTrigger()?.elementRef.nativeElement ?? undefined;\n  }\n\n  private handleFrameClick(event: MouseEvent) {\n    const target = event.target;\n    const frame = event.currentTarget;\n\n    if (!(target instanceof HTMLElement) || !(frame instanceof HTMLElement) || this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (this.registeredTrigger()?.elementRef.nativeElement.contains(target)) {\n      return;\n    }\n\n    if (hitsInteractiveElement(target, frame)) {\n      return;\n    }\n\n    this.activate();\n    this.toggle();\n  }\n}\n\nexport type CascaderSurfaceContext<T = unknown> = {\n  $implicit: CascaderDirective<T>;\n  cascader: CascaderDirective<T>;\n  close: () => void;\n};\n\nexport type CascaderNodeSignal<T> = Signal<CascaderNode<T> | null>;\n","import { DestroyRef, Directive, afterNextRender, computed, inject, input } from '@angular/core';\nimport { RuntimeError, createComponentId, injectHostElement } from '@ethlete/core';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderDirective } from './cascader.directive';\nimport { injectCascaderLabels } from '../cascader-labels';\n\n/** One level of the hierarchy - a `role=\"group\"` of tree items. Nodes read their level from it. */\n@Directive({\n  selector: '[etCascaderColumn]',\n  exportAs: 'etCascaderColumn',\n  host: {\n    role: 'group',\n    '[attr.id]': 'id',\n    '[attr.aria-label]': 'ariaLabel()',\n  },\n})\nexport class CascaderColumnDirective {\n  private cascaderLabels = injectCascaderLabels();\n\n  public cascader = inject(CascaderDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  /** The column's zero-based level - column 0 shows the root. */\n  public columnIndex = input.required<number>({ alias: 'etCascaderColumn' });\n\n  public readonly id = createComponentId('et-cascader-column');\n\n  protected ariaLabel = computed(() => {\n    const index = this.columnIndex();\n    const parent = this.cascader?.columns()[index]?.parent;\n\n    return parent ? parent.label : this.cascaderLabels().options;\n  });\n\n  constructor() {\n    void this.destroyRef;\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.COLUMN_OUTSIDE_CASCADER,\n            '[CascaderColumnDirective] etCascaderColumn must be rendered inside an [etCascader] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, effect, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderColumnDirective } from './cascader-column.directive';\nimport { CascaderDirective } from './cascader.directive';\nimport { canHaveChildren, nodesEqual } from './internals/cascader-tree';\n\n/**\n * A single tree item in a column. Bind the `[node]` it represents; the directive wires the\n * ARIA tree semantics, roving tabindex and interaction, mirroring the node's flags as\n * `data-*` attributes for styling.\n */\n@Directive({\n  selector: '[etCascaderNode]',\n  exportAs: 'etCascaderNode',\n  host: {\n    role: 'treeitem',\n    '[attr.aria-level]': 'column.columnIndex() + 1',\n    '[attr.aria-selected]': 'selected()',\n    '[attr.aria-expanded]': 'expandable() ? expanded() : null',\n    '[attr.aria-disabled]': 'node().disabled || null',\n    '[attr.tabindex]': 'focused() ? 0 : -1',\n    '[attr.data-selected]': 'selected() || null',\n    '[attr.data-indeterminate]': 'indeterminate() || null',\n    '[attr.data-expanded]': 'expanded() || null',\n    '[attr.data-focused]': 'focused() || null',\n    '[attr.data-disabled]': 'node().disabled || null',\n    '[attr.data-branch]': 'expandable() || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class CascaderNodeDirective<T = unknown> {\n  protected column = inject(CascaderColumnDirective);\n  private cascader = inject<CascaderDirective<T>>(CascaderDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  /** The node this element represents. */\n  public node = input.required<{\n    value: T;\n    label: string;\n    isLeaf?: boolean;\n    hasChildren?: boolean;\n    disabled?: boolean;\n  }>({\n    alias: 'node',\n  });\n\n  protected expandable = computed(() => canHaveChildren(this.node()));\n  protected selected = computed(() => this.cascader?.isSelected(this.node()) ?? false);\n  protected indeterminate = computed(() => this.cascader?.isIndeterminate(this.node()) ?? false);\n  protected expanded = computed(() => this.cascader?.isExpanded(this.node(), this.column.columnIndex()) ?? false);\n\n  protected focused = computed(() =>\n    nodesEqual({\n      a: this.cascader?.focusedNode() ?? null,\n      b: this.node(),\n      compareWith: this.cascader?.compareWith() ?? ((a, b) => a === b),\n    }),\n  );\n\n  constructor() {\n    // A pulse bypasses `focusInside`: the sheet re-creates its column on a drill, and the removed\n    // node's focusout has already cleared `focusInside` before the new node mounts. While the\n    // search input holds DOM focus, only an explicit pulse (ArrowDown from the input) may take it -\n    // a mere re-render, like the columns returning after the query was deleted, must not pull focus\n    // out of the input mid-typing.\n    let lastPulse: number | null = null;\n\n    effect(() => {\n      const pulse = this.cascader?.focusPulse() ?? 0;\n      const pulsed = lastPulse !== null && pulse !== lastPulse;\n\n      lastPulse = pulse;\n\n      if (!this.focused()) {\n        return;\n      }\n\n      if (!pulsed && !this.cascader?.focusInside()) {\n        return;\n      }\n\n      if (!pulsed && this.cascader?.registeredSearch()?.isFocused()) {\n        return;\n      }\n\n      this.elementRef.nativeElement.focus({ preventScroll: true });\n      this.elementRef.nativeElement.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.NODE_OUTSIDE_COLUMN,\n            '[CascaderNodeDirective] etCascaderNode must be rendered inside an [etCascader] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n\n    void this.destroyRef;\n  }\n\n  protected handleClick() {\n    this.cascader?.activateNode(this.node(), this.column.columnIndex());\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    this.cascader?.handleNodeKeydown(event, { node: this.node(), columnIndex: this.column.columnIndex() });\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, effect, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderDirective } from './cascader.directive';\nimport { CascaderNode } from './internals/cascader-tree';\n\n/**\n * One flat search result - a full root → node path. Bind the `[path]` it represents and its\n * `[index]` in the result list; the directive wires the option semantics, roving tabindex and\n * activation (committing the node, or jumping the columns to a branch-only match).\n */\n@Directive({\n  selector: '[etCascaderSearchOption]',\n  exportAs: 'etCascaderSearchOption',\n  host: {\n    role: 'option',\n    '[attr.aria-selected]': 'selected()',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.tabindex]': 'focused() ? 0 : -1',\n    '[attr.data-selected]': 'selected() || null',\n    '[attr.data-focused]': 'focused() || null',\n    '[attr.data-disabled]': 'disabled() || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class CascaderSearchOptionDirective<T = unknown> {\n  private cascader = inject<CascaderDirective<T>>(CascaderDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** The matching path (root → matching node) this element represents. */\n  public path = input.required<CascaderNode<T>[]>();\n\n  /** The result's index in the cascader's `searchState().results`. */\n  public index = input.required<number>();\n\n  /** The path's final node - the one an activation commits (or drills into). */\n  public node = computed(() => this.path()[this.path().length - 1] ?? null);\n\n  protected disabled = computed(() => this.node()?.disabled ?? false);\n\n  protected selected = computed(() => {\n    const node = this.node();\n\n    return node ? (this.cascader?.isSelected(node) ?? false) : false;\n  });\n\n  protected focused = computed(() => this.cascader?.focusedSearchIndex() === this.index());\n\n  constructor() {\n    effect(() => {\n      if (this.focused() && this.cascader?.focusInside()) {\n        this.elementRef.nativeElement.focus({ preventScroll: true });\n        this.elementRef.nativeElement.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.SEARCH_OPTION_OUTSIDE_CASCADER,\n            '[CascaderSearchOptionDirective] etCascaderSearchOption must be rendered inside an [etCascader] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick() {\n    this.cascader?.activateSearchResult(this.path());\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    this.cascader?.handleSearchOptionKeydown(event, this.index());\n  }\n}\n","import { DOCUMENT, Directive, ElementRef, afterNextRender, effect, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderDirective } from './cascader.directive';\n\n/**\n * Opts a cascader into flat search. While the (trimmed) query is non-empty the panel swaps its\n * columns for a flat result list fed by the data source's `search` hook - each result is a full\n * root → node path, so a known leaf can be jumped to without drilling.\n */\n@Directive({\n  selector: 'input[etCascaderSearch]',\n  exportAs: 'etCascaderSearch',\n  host: {\n    autocomplete: 'off',\n    '(input)': 'handleInput()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class CascaderSearchDirective {\n  private cascader = inject(CascaderDirective, { optional: true });\n  private document = inject(DOCUMENT);\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  constructor() {\n    registerSingleton(this.cascader?.registeredSearch, this);\n\n    // the query lives on the cascader (it outlives the panel-hosted input) - mirror it back\n    // into the element for programmatic writes like clearSearch()\n    effect(() => {\n      const query = this.cascader?.searchQuery() ?? '';\n      const element = this.elementRef.nativeElement;\n\n      if (element.value !== query) {\n        element.value = query;\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.SEARCH_OUTSIDE_CASCADER,\n            '[CascaderSearchDirective] etCascaderSearch must be rendered inside the surface of an [etCascader] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public isFocused() {\n    return this.document.activeElement === this.elementRef.nativeElement;\n  }\n\n  /** @internal */\n  public focus(options?: { select?: boolean }) {\n    const element = this.elementRef.nativeElement;\n\n    element.focus({ preventScroll: true });\n\n    if (options?.select) {\n      element.select();\n    }\n  }\n\n  /** @internal Focuses the input and appends a character typed while a node or result had focus. */\n  public appendCharacter(character: string) {\n    const element = this.elementRef.nativeElement;\n\n    this.focus();\n    element.value += character;\n    this.cascader?.setSearchQuery(element.value);\n  }\n\n  public clear() {\n    this.elementRef.nativeElement.value = '';\n    this.cascader?.setSearchQuery('');\n  }\n\n  protected handleInput() {\n    this.cascader?.setSearchQuery(this.elementRef.nativeElement.value);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const cascader = this.cascader;\n\n    if (!cascader || event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        cascader.moveFocusFromSearch(1);\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        cascader.moveFocusFromSearch(-1);\n\n        return;\n      }\n      case 'Enter': {\n        if (cascader.isSearching()) {\n          event.preventDefault();\n          cascader.activateFocusedSearchResult();\n        }\n\n        return;\n      }\n    }\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderDirective, CascaderSurfaceContext } from './cascader.directive';\n\n@Directive({\n  selector: 'ng-template[etCascaderSurface]',\n  exportAs: 'etCascaderSurface',\n})\nexport class CascaderSurfaceDirective {\n  private cascader = inject(CascaderDirective, { optional: true });\n  public templateRef = inject<TemplateRef<CascaderSurfaceContext>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerSingleton(this.cascader?.registeredSurface, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.SURFACE_OUTSIDE_CASCADER,\n            '[CascaderSurfaceDirective] etCascaderSurface must be placed inside an [etCascader] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { CASCADER_ERROR_CODES } from '../cascader-errors';\nimport { CascaderDirective } from './cascader.directive';\n\n/** The combobox trigger that opens the cascader panel. */\n@Directive({\n  selector: '[etCascaderTrigger]',\n  exportAs: 'etCascaderTrigger',\n  host: {\n    role: 'combobox',\n    'aria-haspopup': 'tree',\n    '[attr.id]': 'id',\n    '[attr.aria-expanded]': 'cascader?.open() || false',\n    '[attr.aria-controls]': 'controlledId()',\n    '[attr.aria-disabled]': 'cascader?.disabled() || null',\n    '[attr.aria-required]': 'cascader?.required() || null',\n    '[attr.aria-invalid]': 'cascader?.shouldDisplayError() || null',\n    '[attr.aria-label]': 'cascader?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'cascader?.labelId()',\n    '[attr.aria-describedby]': 'cascader?.describedBy()',\n    '[attr.tabindex]': 'isNativeButton ? null : cascader?.disabled() ? -1 : 0',\n    '[attr.data-disabled]': 'cascader?.disabled() || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class CascaderTriggerDirective {\n  public cascader = inject(CascaderDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public readonly id: string;\n  public readonly isNativeButton: boolean;\n\n  // the overlay runtime never ids the pane element, so `aria-controls` has to point at the tree\n  // panel's own stable id\n  protected controlledId = computed(() => (this.cascader?.open() ? this.cascader.panelId() : null));\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-cascader-trigger');\n    }\n\n    this.id = element.id;\n    this.isNativeButton = element.tagName === 'BUTTON';\n\n    registerSingleton(this.cascader?.registeredTrigger, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.cascader) {\n          throw new RuntimeError(\n            CASCADER_ERROR_CODES.TRIGGER_OUTSIDE_CASCADER,\n            '[CascaderTriggerDirective] etCascaderTrigger must be placed inside an [etCascader] element.',\n            { element },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick() {\n    this.cascader?.toggle();\n  }\n\n  protected handleFocus() {\n    this.cascader?.triggerFocused.set(true);\n  }\n\n  protected handleBlur() {\n    this.cascader?.triggerFocused.set(false);\n\n    if (!this.cascader?.open()) {\n      this.cascader?.touched.set(true);\n    }\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const cascader = this.cascader;\n\n    if (!cascader || event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowDown':\n      case 'Enter':\n      case ' ': {\n        if (!cascader.open()) {\n          event.preventDefault();\n          cascader.show();\n        }\n\n        return;\n      }\n      case 'Escape': {\n        return;\n      }\n    }\n  }\n}\n","import {\n  Component,\n  DestroyRef,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  viewChild,\n} from '@angular/core';\nimport {\n  AnimatedSizeAxis,\n  AutoSurfaceDirective,\n  ProvideColorDirective,\n  createComponentId,\n  injectObserveBreakpoint,\n  injectStyleManager,\n} from '@ethlete/core';\nimport { CascaderBreadcrumbStylesComponent } from './cascader-breadcrumb-styles.component';\nimport { CascaderSheetStylesComponent } from './cascader-sheet-styles.component';\nimport { injectOverlaySurfaceContext } from '../form-field/headless';\nimport { CascaderDirective } from './headless';\n\n/**\n * The overlay-hosted panel surface: re-applies color/surface context (the pane is detached\n * from the trigger's DOM), tracks whether focus is inside (gating the roving-focus moves),\n * and animates its block size as columns load. Detects sheet vs. anchored presentation.\n */\n@Component({\n  selector: 'et-cascader-panel',\n  template: `\n    <div #panelBody class=\"et-cascader-panel-body\">\n      <ng-content />\n    </div>\n  `,\n  styleUrl: './cascader-panel.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-cascader-panel',\n    // a \"columnar tree\": each level is a sibling `role=\"group\"` related by `aria-level`, not by\n    // `aria-owns` back to its parent node - a deliberate deviation from a strict single-root tree,\n    // with node keyboard nav bridging the levels\n    '[attr.role]': 'role()',\n    '[attr.aria-multiselectable]': 'multiselectable()',\n    '[attr.data-sheet]': 'isSheet() || null',\n    '(focusin)': 'handleFocusIn()',\n    '(focusout)': 'handleFocusOut($event)',\n  },\n})\nexport class CascaderPanelComponent {\n  private cascader = inject(CascaderDirective, { optional: true });\n  private hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private styleManager = injectStyleManager();\n\n  /**\n   * Whether the panel is presented as a bottom sheet (small viewport) - drill mode. Mirrors\n   * the overlay's `md` breakpoint that swaps the anchored strategy for the bottom sheet.\n   */\n  public isSheet = injectObserveBreakpoint({ max: 'sm' });\n\n  private panelBody = viewChild<ElementRef<HTMLElement>>('panelBody');\n\n  protected role = computed(() => (this.cascader?.isSearching() ? 'listbox' : 'tree'));\n  protected multiselectable = computed(() => (this.cascader?.multiple() ? 'true' : null));\n\n  constructor() {\n    let hasMountedSheetStyles = false;\n\n    effect(() => {\n      if (hasMountedSheetStyles || !this.isSheet()) return;\n\n      hasMountedSheetStyles = true;\n      this.styleManager.mount(CascaderSheetStylesComponent);\n    });\n\n    let hasMountedBreadcrumbStyles = false;\n\n    effect(() => {\n      if (hasMountedBreadcrumbStyles || !this.cascader?.breadcrumbPath().length) return;\n\n      hasMountedBreadcrumbStyles = true;\n      this.styleManager.mount(CascaderBreadcrumbStylesComponent);\n    });\n\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    const element = this.hostRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-cascader-tree');\n    }\n\n    this.cascader?.panelId.set(element.id);\n\n    inject(DestroyRef).onDestroy(() => {\n      if (this.cascader?.panelId() === element.id) {\n        this.cascader.panelId.set(null);\n      }\n    });\n\n    // the sheet is viewport-wide, so its width must keep following the pane - animating it would\n    // feed back into itself\n    injectOverlaySurfaceContext({\n      panelBody: this.panelBody,\n      resizingClass: 'et-cascader-panel--resizing',\n      axes: computed((): AnimatedSizeAxis[] => (this.isSheet() ? ['block'] : ['block', 'inline'])),\n    });\n  }\n\n  protected handleFocusIn() {\n    this.cascader?.focusInside.set(true);\n  }\n\n  protected handleFocusOut(event: FocusEvent) {\n    const next = event.relatedTarget;\n\n    if (!(next instanceof Node) || !this.hostRef.nativeElement.contains(next)) {\n      this.cascader?.focusInside.set(false);\n    }\n  }\n}\n","// codes 4900-4999\nexport const SCROLLBAR_ERROR_CODES = {\n  /** `for` was bound to something that is not an element - a component instance, most often. */\n  INVALID_TARGET: 4900,\n  /** The scrollbar rendered with nothing marked `etScrollbarThumb`, so it has nothing to move. */\n  MISSING_THUMB: 4901,\n  /** The scrollbar rendered with no `for`, so there is no scroll container for it to mirror. */\n  MISSING_TARGET: 4902,\n} as const;\n","import { clamp } from '@ethlete/core';\nimport { ScrollbarGeometry, ScrollbarOrientation } from '../scrollbar.types';\n\nexport const NO_SCROLLBAR_GEOMETRY: ScrollbarGeometry = {\n  canScroll: false,\n  thumbSize: 0,\n  thumbOffset: 0,\n  progress: 0,\n};\n\nexport type ScrollMetrics = {\n  viewportSize: number;\n  contentSize: number;\n  maxScroll: number;\n};\n\nexport const readScrollMetrics = (target: HTMLElement, orientation: ScrollbarOrientation): ScrollMetrics => {\n  const isHorizontal = orientation === 'horizontal';\n  const viewportSize = isHorizontal ? target.clientWidth : target.clientHeight;\n  const contentSize = isHorizontal ? target.scrollWidth : target.scrollHeight;\n\n  return { viewportSize, contentSize, maxScroll: Math.max(0, contentSize - viewportSize) };\n};\n\n/**\n * How far the target is scrolled from the start edge, which is the right edge in a right-to-left\n * container. `scrollLeft` counts down from 0 into negative numbers there, so the sign carries the\n * direction and only the magnitude is a distance. Read it directly and every right-to-left thumb\n * sits at the start.\n */\nexport const readScrollDistance = (target: HTMLElement, orientation: ScrollbarOrientation) =>\n  orientation === 'horizontal' ? Math.abs(target.scrollLeft) : target.scrollTop;\n\nexport const scrollToDistance = (options: {\n  target: HTMLElement;\n  orientation: ScrollbarOrientation;\n  distance: number;\n  isRtl: boolean;\n  behavior: ScrollBehavior;\n}) => {\n  const { target, orientation, distance, isRtl, behavior } = options;\n\n  if (orientation === 'horizontal') {\n    target.scroll({ left: isRtl ? -distance : distance, behavior });\n  } else {\n    target.scroll({ top: distance, behavior });\n  }\n};\n\nexport const measureScrollbar = (options: {\n  target: HTMLElement;\n  orientation: ScrollbarOrientation;\n  trackSize: number;\n  minThumbSize: number;\n}): ScrollbarGeometry => {\n  const { target, orientation, trackSize, minThumbSize } = options;\n  const { viewportSize, contentSize, maxScroll } = readScrollMetrics(target, orientation);\n\n  if (maxScroll <= 0 || trackSize <= 0) return NO_SCROLLBAR_GEOMETRY;\n\n  const thumbSize = clamp(trackSize * (viewportSize / contentSize), Math.min(minThumbSize, trackSize), trackSize);\n  const progress = clamp(readScrollDistance(target, orientation) / maxScroll, 0, 1);\n\n  return { canScroll: true, thumbSize, thumbOffset: (trackSize - thumbSize) * progress, progress };\n};\n","import { AngularRenderer } from '@ethlete/core';\n\nexport const SCROLLBAR_HOST_CLASS = 'et-scrollbar-host';\n\nconst hostReferences = /* @__PURE__ */ new WeakMap<HTMLElement, number>();\n\n/**\n * Mark a scroll container as owned by a custom scrollbar and return the release function.\n *\n * Ref-counted, because one container carries a scrollbar per axis and the first of the two to be\n * destroyed must not un-mark a container the other still mirrors.\n */\nexport const markScrollbarHost = (renderer: AngularRenderer, target: HTMLElement) => {\n  hostReferences.set(target, (hostReferences.get(target) ?? 0) + 1);\n  renderer.addClass(target, SCROLLBAR_HOST_CLASS);\n\n  return () => {\n    const remaining = (hostReferences.get(target) ?? 1) - 1;\n\n    if (remaining > 0) {\n      hostReferences.set(target, remaining);\n\n      return;\n    }\n\n    hostReferences.delete(target);\n    renderer.removeClass(target, SCROLLBAR_HOST_CLASS);\n  };\n};\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n  RuntimeError,\n  applyHostListeners,\n  clamp,\n  dragGestureFrom,\n  injectHostElement,\n  injectRenderer,\n  signalElementDimensions,\n  signalElementScrollState,\n  signalHostAttributes,\n  signalHostClasses,\n  signalHostStyles,\n} from '@ethlete/core';\nimport { EMPTY, concat, fromEvent, map, merge, of, scan, share, switchMap, tap, timer } from 'rxjs';\nimport { SCROLLBAR_ERROR_CODES } from '../scrollbar-errors';\nimport {\n  NO_SCROLLBAR_GEOMETRY,\n  measureScrollbar,\n  readScrollDistance,\n  readScrollMetrics,\n  scrollToDistance,\n} from './internals/scrollbar-geometry';\nimport { markScrollbarHost } from './internals/scrollbar-host-class';\nimport { ScrollbarGeometry, ScrollbarOrientation, ScrollbarTarget } from './scrollbar.types';\n\nconst AUTO_HIDE_DELAY = 800;\n\nconst ELEMENT_NODE_TYPE = 1;\n\n/**\n * Mirrors one axis of a scroll container as a thumb the pointer can drag.\n *\n * The container keeps the scrolling. This directive never moves content itself - it reads the\n * container's scroll offset and content size, and writes an offset back when the thumb is dragged or\n * the track is pressed. Wheel, touch, keyboard and programmatic scrolling stay native, so a container\n * behaves the same whether or not a scrollbar mirrors it.\n *\n * One instance covers one axis. Apply two, with `orientation` set on each, for a container that\n * scrolls both ways.\n *\n * The target gets the `et-scrollbar-host` class, which hides its native scrollbar. The rule ships with\n * {@link ScrollbarComponent} - a headless consumer has to declare it.\n *\n * @example\n * <div class=\"list\" #list>…</div>\n * <div etScrollbar [for]=\"list\" orientation=\"vertical\">\n *   <div etScrollbarThumb></div>\n * </div>\n */\n@Directive({\n  selector: '[etScrollbar]',\n  exportAs: 'etScrollbar',\n  host: {\n    class: 'et-scrollbar',\n  },\n})\nexport class ScrollbarDirective {\n  private hostElement = injectHostElement();\n  private destroyRef = inject(DestroyRef);\n  private renderer = injectRenderer();\n\n  /** The scroll container to mirror. */\n  public target = input<ScrollbarTarget>(null, { alias: 'for' });\n\n  /** Which axis of the target this scrollbar mirrors. */\n  public orientation = input<ScrollbarOrientation>('vertical');\n\n  /** Show the thumb only while the target scrolls, while the pointer is over it, and while the thumb is dragged. */\n  public autoHide = input(false, { transform: booleanAttribute });\n\n  /** Shortest the thumb may get on a long track, in pixels. */\n  public minThumbSize = input(24, { transform: numberAttribute });\n\n  /** Hide the thumb and ignore the pointer. */\n  public disabled = input(false, { transform: booleanAttribute });\n\n  public targetElement = computed<HTMLElement | null>(() => {\n    const value = this.target();\n    const element = value instanceof ElementRef ? value.nativeElement : value;\n\n    if (!element || typeof element !== 'object') return null;\n\n    return (element as Node).nodeType === ELEMENT_NODE_TYPE ? element : null;\n  });\n\n  private targetScroll$ = toObservable(this.targetElement).pipe(\n    // The repo's scroll-state helpers answer \"does it overflow?\" and re-measure on a resize. This needs\n    // the offset itself, on every frame the target moves, which only the event carries.\n    // eslint-disable-next-line ethlete/prefer-scroll-state\n    switchMap((element) => (element ? fromEvent(element, 'scroll', { passive: true }) : EMPTY)),\n    share(),\n  );\n\n  // A scroll event does not change the target's size, so the scroll state stays cached through it. The\n  // geometry has to re-read the offset anyway, and this is what tells it to.\n  private scrollTick = toSignal(this.targetScroll$.pipe(scan((tick) => tick + 1, 0)), { initialValue: 0 });\n\n  private targetScrollState = signalElementScrollState(this.targetElement, {\n    mutations: { childList: true, subtree: true, attributeFilter: ['class', 'hidden'] },\n  });\n\n  private trackDimensions = signalElementDimensions(this.hostElement);\n\n  private trackSize = computed(() => {\n    const client = this.trackDimensions().client;\n\n    if (!client) return 0;\n\n    return this.orientation() === 'horizontal' ? client.width : client.height;\n  });\n\n  /** Whether the target lays its inline axis out right to left. Always `false` for a vertical scrollbar. */\n  public isRtl = computed(() => {\n    const target = this.targetElement();\n\n    this.targetScrollState();\n\n    if (!target || this.orientation() !== 'horizontal') return false;\n\n    return getComputedStyle(target).direction === 'rtl';\n  });\n\n  /** Where the thumb sits right now. */\n  public geometry = computed<ScrollbarGeometry>(() => {\n    this.scrollTick();\n    this.targetScrollState();\n\n    const target = this.targetElement();\n\n    if (!target || this.disabled()) return NO_SCROLLBAR_GEOMETRY;\n\n    return measureScrollbar({\n      target,\n      orientation: this.orientation(),\n      trackSize: this.trackSize(),\n      minThumbSize: this.minThumbSize(),\n    });\n  });\n\n  public canScroll = computed(() => this.geometry().canScroll);\n\n  private isScrolling = toSignal(\n    this.targetScroll$.pipe(switchMap(() => concat(of(true), timer(AUTO_HIDE_DELAY).pipe(map(() => false))))),\n    { initialValue: false },\n  );\n\n  private isPointerOverTarget = toSignal(\n    toObservable(this.targetElement).pipe(\n      switchMap((element) =>\n        element\n          ? merge(\n              fromEvent(element, 'pointerenter').pipe(map(() => true)),\n              fromEvent(element, 'pointerleave').pipe(map(() => false)),\n            )\n          : of(false),\n      ),\n    ),\n    { initialValue: false },\n  );\n\n  private isPointerOverSelf = signal(false);\n\n  /** Whether the thumb is being dragged right now. */\n  public isDragging = signal(false);\n\n  public isVisible = computed(() => {\n    if (!this.canScroll()) return false;\n    if (!this.autoHide()) return true;\n\n    return this.isScrolling() || this.isPointerOverTarget() || this.isPointerOverSelf() || this.isDragging();\n  });\n\n  /**\n   * The element that moves along the track. Set by `etScrollbarThumb`.\n   *\n   * @internal\n   */\n  public thumbElement = signal<HTMLElement | null>(null);\n\n  /** @internal */\n  public hostAttributeBindings = signalHostAttributes({\n    'data-orientation': this.orientation,\n    'data-direction': computed(() => (this.isRtl() ? 'rtl' : null)),\n  });\n\n  /** @internal */\n  public hostClassBindings = signalHostClasses({\n    'et-scrollbar--visible': this.isVisible,\n    'et-scrollbar--dragging': this.isDragging,\n  });\n\n  /** @internal */\n  public hostStyleBindings = signalHostStyles({\n    '--_et-scrollbar-thumb-size': computed(() => `${this.geometry().thumbSize}px`),\n    '--_et-scrollbar-thumb-offset': computed(() => `${this.geometry().thumbOffset}px`),\n  });\n\n  constructor() {\n    effect((onCleanup) => {\n      const target = this.targetElement();\n\n      if (!target) return;\n\n      onCleanup(markScrollbarHost(this.renderer, target));\n    });\n\n    applyHostListeners({\n      pointerenter: () => this.isPointerOverSelf.set(true),\n      pointerleave: () => this.isPointerOverSelf.set(false),\n      pointerdown: (event) => this.pageTowardsPointer(event),\n    });\n\n    if (ngDevMode) {\n      effect(() => {\n        const value = this.target();\n\n        if (value === null || value === undefined || this.targetElement()) return;\n\n        throw new RuntimeError(\n          SCROLLBAR_ERROR_CODES.INVALID_TARGET,\n          '[ScrollbarDirective] `for` must be an element or an ElementRef. ' +\n            'A template reference variable on a component gives the component instance - read its element instead.',\n          { value },\n        );\n      });\n\n      afterNextRender(() => {\n        if (!this.thumbElement()) {\n          throw new RuntimeError(\n            SCROLLBAR_ERROR_CODES.MISSING_THUMB,\n            '[ScrollbarDirective] No thumb registered. Put `etScrollbarThumb` on the element that moves.',\n            { element: this.hostElement },\n          );\n        }\n\n        if (this.target() === null || this.target() === undefined) {\n          throw new RuntimeError(\n            SCROLLBAR_ERROR_CODES.MISSING_TARGET,\n            '[ScrollbarDirective] No scroll container to mirror. Bind `for` to the element that scrolls.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /**\n   * Drag the target's scroll offset with the pointer. Call from a `pointerdown` on the thumb -\n   * `etScrollbarThumb` already does.\n   *\n   * @internal\n   */\n  public startThumbDrag(event: PointerEvent) {\n    if (event.button !== 0 || this.disabled()) return;\n\n    event.stopPropagation();\n    // a scrollbar is not a focus target: without this the press blurs whatever was focused, which\n    // closes a panel that dismisses on focus loss (menu, cascader) mid-drag\n    event.preventDefault();\n\n    const target = this.targetElement();\n    const thumb = this.thumbElement();\n\n    if (!target || !thumb) return;\n\n    const orientation = this.orientation();\n    const isRtl = this.isRtl();\n    const { maxScroll } = readScrollMetrics(target, orientation);\n    const maxThumbOffset = this.trackSize() - this.geometry().thumbSize;\n\n    if (maxScroll <= 0 || maxThumbOffset <= 0) return;\n\n    const startDistance = readScrollDistance(target, orientation);\n\n    const scrollTo = (distance: number) =>\n      scrollToDistance({ target, orientation, distance, isRtl, behavior: 'instant' });\n\n    dragGestureFrom(event, thumb, { commitThreshold: 0 })\n      .pipe(\n        tap((gesture) => {\n          switch (gesture.type) {\n            case 'start':\n              this.isDragging.set(true);\n              break;\n\n            case 'move': {\n              const physicalDelta = orientation === 'horizontal' ? gesture.data.totalDx : gesture.data.totalDy;\n              const logicalDelta = isRtl ? -physicalDelta : physicalDelta;\n\n              scrollTo(clamp(startDistance + (logicalDelta / maxThumbOffset) * maxScroll, 0, maxScroll));\n              break;\n            }\n\n            // The user never let go, so the offset they were heading for is not one they chose.\n            case 'cancelled':\n              scrollTo(startDistance);\n              this.isDragging.set(false);\n              break;\n\n            default:\n              this.isDragging.set(false);\n              break;\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /**\n   * Scroll the target one viewport towards a press on the track, the way a press beside a native thumb\n   * pages. Ignores presses on the thumb, which start a drag instead.\n   */\n  public pageTowardsPointer(event: PointerEvent) {\n    if (event.button !== 0 || this.disabled()) return;\n\n    const target = this.targetElement();\n    const geometry = this.geometry();\n\n    if (!target || !geometry.canScroll) return;\n\n    event.preventDefault();\n\n    const orientation = this.orientation();\n    const isHorizontal = orientation === 'horizontal';\n    const isRtl = this.isRtl();\n    const { viewportSize, maxScroll } = readScrollMetrics(target, orientation);\n    const trackRect = this.hostElement.getBoundingClientRect();\n\n    const physicalOffset = isHorizontal ? event.clientX - trackRect.left : event.clientY - trackRect.top;\n    const logicalOffset = isRtl ? trackRect.width - physicalOffset : physicalOffset;\n    const step = logicalOffset < geometry.thumbOffset ? -viewportSize : viewportSize;\n\n    scrollToDistance({\n      target,\n      orientation,\n      distance: clamp(readScrollDistance(target, orientation) + step, 0, maxScroll),\n      isRtl,\n      behavior: 'smooth',\n    });\n  }\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { applyHostListener, injectHostElement } from '@ethlete/core';\nimport { ScrollbarDirective } from './scrollbar.directive';\n\n/**\n * The part of a scrollbar that moves. Sizes and offsets itself from the scrollbar's geometry, and\n * starts a drag when it is pressed.\n *\n * @example\n * <div etScrollbar [for]=\"list\">\n *   <div etScrollbarThumb></div>\n * </div>\n */\n@Directive({\n  selector: '[etScrollbarThumb]',\n  host: {\n    class: 'et-scrollbar-thumb',\n  },\n})\nexport class ScrollbarThumbDirective {\n  private scrollbar = inject(ScrollbarDirective);\n  private hostElement = injectHostElement();\n\n  constructor() {\n    this.scrollbar.thumbElement.set(this.hostElement);\n\n    inject(DestroyRef).onDestroy(() => {\n      if (this.scrollbar.thumbElement() !== this.hostElement) return;\n\n      this.scrollbar.thumbElement.set(null);\n    });\n\n    applyHostListener('pointerdown', (event) => this.scrollbar.startThumbDrag(event));\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { ScrollbarThumbDirective } from './headless/scrollbar-thumb.directive';\nimport { ScrollbarDirective } from './headless/scrollbar.directive';\n\n/**\n * A scrollbar for a container whose native one is in the way - a panel with its own chrome, a track\n * that has to look the same on every platform, a surface a light-grey system bar clashes with.\n *\n * The container keeps the scrolling. This only mirrors it, so wheel, touch, keyboard and programmatic\n * scrolling behave exactly as they did. Point it at the container with `for` and it hides that\n * container's native scrollbar for you.\n *\n * It positions itself over the end edge of its containing block, so give the element that wraps the\n * scroll container `position: relative`. One element covers one axis - add a second with\n * `orientation=\"horizontal\"` for a container that scrolls both ways.\n *\n * @example\n * <div class=\"relative\">\n *   <div #list class=\"list\">…</div>\n *   <et-scrollbar [for]=\"list\" autoHide />\n * </div>\n */\n@Component({\n  selector: 'et-scrollbar',\n  template: `<div etScrollbarThumb></div>`,\n  styleUrl: './scrollbar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ScrollbarThumbDirective],\n  hostDirectives: [\n    {\n      directive: ScrollbarDirective,\n      inputs: ['for', 'orientation', 'autoHide', 'minThumbSize', 'disabled'],\n    },\n  ],\n  host: {\n    class: 'et-scrollbar',\n  },\n})\nexport class ScrollbarComponent {\n  public scrollbarDir = inject(ScrollbarDirective);\n}\n","import { ScrollbarThumbDirective } from './headless/scrollbar-thumb.directive';\nimport { ScrollbarDirective } from './headless/scrollbar.directive';\nimport { ScrollbarComponent } from './scrollbar.component';\n\n/**\n * The scrollbar element. `etScrollbar` and `etScrollbarThumb` come with it for a consumer that\n * builds its own track instead of using `<et-scrollbar>`.\n */\nexport const SCROLLBAR_IMPORTS = [ScrollbarComponent, ScrollbarDirective, ScrollbarThumbDirective] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The in-field affordances a text-shell control hands to the field's suffix slot - the clear button\n * and the picker trigger - as a styles-only component.\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-field-control-suffix-styles',\n  template: '',\n  styleUrl: './form-field-control-suffix-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldControlSuffixStylesComponent {}\n\n/**\n * Mounts the stylesheet for `.et-input-clear` / `.et-input-picker-trigger`. Call from the\n * constructor of every control that renders either.\n *\n * @internal\n */\nexport const mountControlSuffixStyles = () => injectStyleManager().mount(FormFieldControlSuffixStylesComponent);\n","import { Directive, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { FORM_FIELD_TOKEN } from '../headless/form-field.tokens';\nimport { registerSingleton } from '../headless/register-singleton';\n\n/**\n * Hands a control's own in-field affordances - a clear button, a picker trigger, a reveal toggle -\n * to the form field's suffix slot, so they share one stack with `[etInputSuffix]` and the busy\n * spinner instead of a look-alike row of their own. Applied by the controls, not by consumers:\n *\n * ```html\n * <ng-template etControlSuffix>\n *   <button class=\"et-input-clear\" type=\"button\">…</button>\n * </ng-template>\n * ```\n *\n * With no form field to hand them to, the template renders where it stands.\n */\n@Directive({ selector: 'ng-template[etControlSuffix]' })\nexport class ControlSuffixDirective {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  public templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n  constructor() {\n    if (this.formField) {\n      registerSingleton(this.formField.registeredControlSuffix, this);\n    } else {\n      inject(ViewContainerRef).createEmbeddedView(this.templateRef);\n    }\n  }\n}\n","import { Directive } from '@angular/core';\nimport { FORM_FIELD_TOKEN } from '../headless/form-field.tokens';\n\n/**\n * Hides the surrounding form field from a nested control composition, so a control assembled out of\n * another control - the phone input's country `[etSelect]`, say - does not register itself as the\n * field's control.\n *\n * Goes on the element the nested composition starts at, never on the outer control: that control's\n * own template still has to reach the field to hand it a `[etControlSuffix]`.\n */\n@Directive({\n  selector: '[etFormFieldBarrier]',\n  providers: [{ provide: FORM_FIELD_TOKEN, useValue: null }],\n})\nexport class FormFieldBarrierDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[etInputPrefix]',\n})\nexport class InputPrefixDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[etInputSuffix]',\n})\nexport class InputSuffixDirective {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport {\n  ColorInteractiveDirective,\n  ProvideColorDirective,\n  injectErrorTheme,\n  signalDeferredLoading,\n} from '@ethlete/core';\nimport { TextButtonComponent } from '../../button';\nimport { CHEVRON_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../icon';\nimport { SpinnerComponent } from '../../loader';\nimport { ScrollbarComponent } from '../../scrollbar';\nimport { mountControlSuffixStyles } from '../form-field/form-field-control-suffix-styles.component';\nimport { ControlSuffixDirective } from '../form-field/partials';\nimport { CascaderPanelComponent } from './cascader-panel.component';\nimport {\n  CascaderColumnDirective,\n  CascaderDirective,\n  CascaderNode,\n  CascaderNodeDirective,\n  CascaderSearchDirective,\n  CascaderSearchOptionDirective,\n  CascaderSurfaceDirective,\n  CascaderTriggerDirective,\n} from './headless';\nimport { injectFormFieldLabels } from '../../forms/form-field/form-field-labels';\nimport { injectCascaderLabels } from '../../forms/cascader/cascader-labels';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-cascader',\n  templateUrl: './cascader.component.html',\n  styleUrl: './cascader.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CascaderTriggerDirective,\n    CascaderSurfaceDirective,\n    ControlSuffixDirective,\n    CascaderColumnDirective,\n    CascaderNodeDirective,\n    CascaderSearchDirective,\n    CascaderSearchOptionDirective,\n    CascaderPanelComponent,\n    IconDirective,\n    NgTemplateOutlet,\n    ScrollbarComponent,\n    SpinnerComponent,\n    TextButtonComponent,\n    ProvideColorDirective,\n  ],\n  providers: [provideIcons(CHEVRON_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: CascaderDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'open',\n        'dataSource',\n        'multiple',\n        'selectableLevels',\n        'compareWith',\n        'toErrorMessage',\n        'mirrorPanelWidth',\n        'maxVisibleColumns',\n        'mixedLabel',\n        'placeholder',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'openChange', 'afterOpen', 'afterClose'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-cascader',\n  },\n})\nexport class CascaderComponent {\n  protected cascaderLabels = injectCascaderLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected cascader = inject<CascaderDirective>(CascaderDirective);\n  protected errorColorTheme = injectErrorTheme();\n\n  /** Shows a clear (×) control while a value is selected. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n  public backLabel = input<string | null>(null);\n  /** Placeholder of the panel's search input (shown when the data source has a `search` hook). */\n  public searchPlaceholder = input<string | null>(null);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected resolvedBackLabel = computed(() => this.backLabel() ?? this.cascaderLabels().back);\n\n  protected resolvedSearchPlaceholder = computed(() => this.searchPlaceholder() ?? this.cascaderLabels().search);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.cascader.hasValue() &&\n      this.cascader.focused() &&\n      !this.cascader.disabled() &&\n      !this.cascader.readonly(),\n  );\n\n  private columnLoading = computed(() => this.cascader.columns().some((column) => column.status === 'loading'));\n\n  protected showColumnSpinner = signalDeferredLoading(this.columnLoading);\n\n  protected showSearchSpinner = signalDeferredLoading(() => this.cascader.searchState().status === 'loading');\n\n  constructor() {\n    mountControlSuffixStyles();\n  }\n\n  protected handleClearClick(event: Event) {\n    event.stopPropagation();\n    this.cascader.clearValue();\n    this.cascader.activate();\n  }\n\n  protected handleArrowClick(event: Event) {\n    // the chevron renders in the field's suffix stack, outside the trigger, so its click never\n    // reaches the trigger's own toggle - it owns the whole gesture\n    event.stopPropagation();\n    this.cascader.toggle();\n    this.cascader.activate();\n  }\n\n  protected resultDisabled(path: CascaderNode<unknown>[]) {\n    return path[path.length - 1]?.disabled ?? false;\n  }\n\n  protected isColumnOffstage(columnIndex: number) {\n    const start = this.cascader.visibleColumnStart();\n\n    return columnIndex < start || columnIndex >= start + this.cascader.maxVisibleColumns();\n  }\n\n  protected isCrumbCurrent(columnIndex: number) {\n    return !this.isColumnOffstage(columnIndex);\n  }\n\n  public focus(options?: FocusOptions) {\n    this.cascader.focus(options);\n  }\n}\n","<div class=\"et-cascader-trigger\" etCascaderTrigger>\n  <span [attr.data-placeholder]=\"!cascader.hasValue() || null\" class=\"et-cascader-value\">\n    @if (cascader.displayValue(); as display) {\n      {{ display }}\n    } @else {\n      {{ cascader.placeholder() }}\n    }\n  </span>\n</div>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a blur\n         would unmount this button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button\n    [disabled]=\"cascader.disabled()\"\n    (click)=\"handleArrowClick($event)\"\n    (mousedown)=\"$event.preventDefault()\"\n    class=\"et-input-picker-trigger et-cascader-arrow\"\n    aria-hidden=\"true\"\n    tabindex=\"-1\"\n    type=\"button\"\n  >\n    <i etIcon=\"et-chevron\"></i>\n  </button>\n</ng-template>\n\n<ng-template etCascaderSurface>\n  <et-cascader-panel #panel>\n    @if (cascader.canSearch()) {\n      <div class=\"et-cascader-search\">\n        <input [placeholder]=\"resolvedSearchPlaceholder()\" etCascaderSearch />\n      </div>\n    }\n\n    @if (panel.isSheet()) {\n      <div class=\"et-cascader-sheet-body\">\n        @if (cascader.isSearching()) {\n          <ng-container [ngTemplateOutlet]=\"searchResults\" />\n        } @else {\n          <ng-container [ngTemplateOutlet]=\"sheetBrowse\" />\n        }\n      </div>\n    } @else if (cascader.isSearching()) {\n      <ng-container [ngTemplateOutlet]=\"searchResults\" />\n    } @else {\n      <div [style.--_et-cascader-visible-columns]=\"cascader.visibleColumns().length\" class=\"et-cascader-columns\">\n        <div\n          [style.--_et-cascader-column-window-start]=\"cascader.visibleColumnStart()\"\n          class=\"et-cascader-columns-track\"\n        >\n          @for (column of cascader.columns(); track $index; let columnIndex = $index) {\n            <ng-container\n              [ngTemplateOutlet]=\"columnBody\"\n              [ngTemplateOutletContext]=\"{ $implicit: column, columnIndex }\"\n            />\n          }\n        </div>\n      </div>\n\n      @if (cascader.breadcrumbPath().length) {\n        <div class=\"et-cascader-breadcrumbs\">\n          @for (crumb of cascader.breadcrumbPath(); track $index; let last = $last) {\n            <span\n              class=\"et-cascader-crumb\"\n              animate.enter=\"et-cascader-crumb--enter\"\n              animate.leave=\"et-cascader-crumb--leave\"\n            >\n              <button\n                [attr.title]=\"crumb.label\"\n                [attr.data-current]=\"isCrumbCurrent($index) || null\"\n                (click)=\"cascader.showColumn($index)\"\n                class=\"et-cascader-breadcrumb\"\n                type=\"button\"\n              >\n                {{ crumb.label }}\n              </button>\n              @if (!last) {\n                <i class=\"et-cascader-breadcrumb-chevron\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n              }\n            </span>\n          }\n        </div>\n      }\n    }\n  </et-cascader-panel>\n</ng-template>\n\n<ng-template #sheetBrowse>\n  <div [attr.data-back]=\"cascader.deepestColumnIndex() > 0 || null\" class=\"et-cascader-sheet-header\">\n    <button\n      [disabled]=\"cascader.deepestColumnIndex() === 0\"\n      [class.et-cascader-back--hidden]=\"cascader.deepestColumnIndex() === 0\"\n      [attr.aria-hidden]=\"cascader.deepestColumnIndex() === 0 || null\"\n      (click)=\"cascader.goBack()\"\n      class=\"et-cascader-back\"\n      et-text-button\n      size=\"sm\"\n      type=\"button\"\n    >\n      <i class=\"et-cascader-back-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n      {{ resolvedBackLabel() }}\n    </button>\n\n    <span\n      [attr.data-nav]=\"cascader.navigationDirection()\"\n      [attr.data-anim]=\"cascader.titleAnimation()\"\n      class=\"et-cascader-sheet-title-slot\"\n    >\n      <span class=\"et-cascader-sheet-title-shift\">\n        <!-- keyed by depth so a level change re-creates it: old title slides out in the\n                   travel direction, new one slides in (both absolutely positioned) -->\n        @for (titleKey of [cascader.deepestColumnIndex()]; track titleKey) {\n          @let titleParent = cascader.columns()[titleKey]?.parent;\n          <span\n            class=\"et-cascader-sheet-title\"\n            animate.enter=\"et-cascader-sheet-title--enter\"\n            animate.leave=\"et-cascader-sheet-title--leave\"\n            >{{ titleParent?.label ?? cascader.placeholder() }}</span\n          >\n        }\n      </span>\n    </span>\n  </div>\n\n  <div class=\"et-cascader-sheet-columns-wrapper\">\n    <div #sheetColumns class=\"et-cascader-columns\" data-sheet>\n      @for (columnIndex of [cascader.deepestColumnIndex()]; track columnIndex) {\n        @let sheetColumn = cascader.columns()[columnIndex];\n        @if (sheetColumn) {\n          <ng-container\n            [ngTemplateOutlet]=\"columnBody\"\n            [ngTemplateOutletContext]=\"{ $implicit: sheetColumn, columnIndex }\"\n          />\n        }\n      }\n    </div>\n\n    <et-scrollbar [for]=\"sheetColumns\" autoHide />\n  </div>\n</ng-template>\n\n<ng-template #searchResults>\n  <div class=\"et-cascader-results-wrapper\">\n    <div #resultsElement class=\"et-cascader-results\">\n      @switch (cascader.searchState().status) {\n        @case ('loading') {\n          <div class=\"et-cascader-state et-cascader-state--loading\">\n            <span\n              [class.et-cascader-state-content--visible]=\"showSearchSpinner()\"\n              [attr.aria-hidden]=\"!showSearchSpinner() || null\"\n              class=\"et-cascader-state-content\"\n            >\n              <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n              Searching…\n            </span>\n          </div>\n        }\n        @case ('error') {\n          <div class=\"et-cascader-state et-cascader-state--error\" role=\"alert\">\n            <span [etProvideColor]=\"errorColorTheme\" class=\"et-cascader-state-error-message\">{{\n              cascader.searchState().error\n            }}</span>\n            <button (click)=\"cascader.retrySearch()\" et-text-button size=\"sm\" type=\"button\">\n              {{ cascaderLabels().retry }}\n            </button>\n          </div>\n        }\n        @default {\n          @if (cascader.searchState().results.length) {\n            @for (result of cascader.searchState().results; track $index) {\n              <button\n                [path]=\"result\"\n                [index]=\"$index\"\n                [disabled]=\"resultDisabled(result)\"\n                class=\"et-cascader-search-option\"\n                etCascaderSearchOption\n                type=\"button\"\n              >\n                @if (cascader.multiple()) {\n                  <span class=\"et-cascader-check\" aria-hidden=\"true\"></span>\n                }\n                <span class=\"et-cascader-search-option-label\">\n                  @for (part of result; track $index; let last = $last) {\n                    @if (last) {\n                      {{ part.label }}\n                    } @else {\n                      <span class=\"et-cascader-search-option-ancestor\">{{ part.label }} / </span>\n                    }\n                  }\n                </span>\n              </button>\n            }\n          } @else {\n            <div class=\"et-cascader-state et-cascader-state--empty\">{{ cascaderLabels().noMatches }}</div>\n          }\n        }\n      }\n    </div>\n\n    <et-scrollbar [for]=\"resultsElement\" autoHide />\n  </div>\n</ng-template>\n\n<ng-template #columnBody let-column let-columnIndex=\"columnIndex\">\n  <div class=\"et-cascader-column-wrapper\">\n    <div\n      #columnElement\n      [etCascaderColumn]=\"columnIndex\"\n      [attr.data-nav]=\"columnIndex === cascader.deepestColumnIndex() ? cascader.navigationDirection() : null\"\n      [class.et-cascader-column--offstage]=\"isColumnOffstage(columnIndex)\"\n      class=\"et-cascader-column\"\n    >\n      @switch (column.status) {\n        @case ('loading') {\n          <div class=\"et-cascader-state et-cascader-state--loading\">\n            <span\n              [class.et-cascader-state-content--visible]=\"showColumnSpinner()\"\n              [attr.aria-hidden]=\"!showColumnSpinner() || null\"\n              class=\"et-cascader-state-content\"\n            >\n              <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n              {{ cascaderLabels().loading }}\n            </span>\n          </div>\n        }\n        @case ('error') {\n          <div class=\"et-cascader-state et-cascader-state--error\" role=\"alert\">\n            <span [etProvideColor]=\"errorColorTheme\" class=\"et-cascader-state-error-message\">{{ column.error }}</span>\n            <button (click)=\"cascader.retryColumn(columnIndex)\" et-text-button size=\"sm\" type=\"button\">\n              {{ cascaderLabels().retry }}\n            </button>\n          </div>\n        }\n        @default {\n          @if (column.nodes.length) {\n            @for (node of column.nodes; track $index) {\n              <button [node]=\"node\" [disabled]=\"node.disabled\" class=\"et-cascader-node\" etCascaderNode type=\"button\">\n                @if (cascader.multiple()) {\n                  <span class=\"et-cascader-check\" aria-hidden=\"true\"></span>\n                }\n                <span class=\"et-cascader-node-label\">{{ node.label }}</span>\n                @if (node.isLeaf !== true && node.hasChildren !== false) {\n                  <i class=\"et-cascader-node-chevron\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n                }\n              </button>\n            }\n          } @else {\n            <div class=\"et-cascader-state et-cascader-state--empty\">{{ cascaderLabels().noOptions }}</div>\n          }\n        }\n      }\n    </div>\n\n    <et-scrollbar [for]=\"columnElement\" autoHide />\n  </div>\n</ng-template>\n","import { CascaderPanelComponent } from './cascader-panel.component';\nimport { CascaderComponent } from './cascader.component';\nimport {\n  CascaderColumnDirective,\n  CascaderDirective,\n  CascaderNodeDirective,\n  CascaderSearchDirective,\n  CascaderSearchOptionDirective,\n  CascaderSurfaceDirective,\n  CascaderTriggerDirective,\n} from './headless';\n\nexport const CASCADER_IMPORTS = [\n  CascaderComponent,\n  CascaderPanelComponent,\n  CascaderDirective,\n  CascaderTriggerDirective,\n  CascaderSurfaceDirective,\n  CascaderColumnDirective,\n  CascaderNodeDirective,\n  CascaderSearchDirective,\n  CascaderSearchOptionDirective,\n] as const;\n","import {\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { FormCheckboxControl, ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\n\n@Directive({\n  selector: '[etCheckbox]',\n  host: {\n    role: 'checkbox',\n    '[attr.aria-checked]': 'ariaChecked()',\n    '[attr.aria-invalid]': 'shouldDisplayError() || null',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.aria-readonly]': 'readonly() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n    '[attr.aria-required]': 'required() || null',\n    '[attr.aria-describedby]': 'describedBy() || null',\n    '[attr.aria-label]': 'ariaLabel() || null',\n    '[attr.aria-labelledby]': 'labelId() || null',\n    '[attr.tabindex]': 'disabled() ? -1 : 0',\n    '(click)': 'toggle()',\n    // toggle on keydown.space to match switch and the selection options (one activation phase\n    // across the family), preventing the default page scroll\n    '(keydown.space)': 'toggle(); $event.preventDefault()',\n    '(blur)': 'touched.set(true)',\n  },\n})\nexport class CheckboxDirective extends AccessibleNameControlDirective implements FormCheckboxControl, FormFieldControl {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public checked = model(false);\n  public indeterminate = model(false);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  /** View-only: keeps the normal look and focusability but blocks toggling (unlike `disabled`). */\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  public ariaChecked = computed(() => {\n    if (this.indeterminate()) {\n      return 'mixed';\n    }\n\n    return this.checked();\n  });\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.CHECKBOX);\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public toggle() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (this.indeterminate()) {\n      this.indeterminate.set(false);\n      this.checked.set(true);\n\n      return;\n    }\n\n    this.checked.update((value) => !value);\n  }\n\n  public activate() {\n    if (this.disabled()) return;\n\n    // readonly stays focusable (view-only), it just cannot toggle\n    this.toggle();\n    this.focus({ focusVisible: false } as unknown as FocusOptions);\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) return;\n\n    this.el.nativeElement.focus(options);\n  }\n}\n","import {\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  signal,\n  untracked,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FocusRingDirective } from '../../focus-ring';\nimport { CheckboxDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-checkbox',\n  templateUrl: './checkbox.component.html',\n  styleUrl: './checkbox.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: CheckboxDirective,\n      inputs: [\n        'checked',\n        'indeterminate',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['checkedChange', 'indeterminateChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n    FocusRingDirective,\n  ],\n  host: {\n    class: 'et-checkbox',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class CheckboxComponent {\n  private checkboxDir = inject(CheckboxDirective);\n  private checkmarkEl = viewChild<ElementRef<HTMLElement>>('checkmark');\n  private indeterminateEl = viewChild<ElementRef<HTMLElement>>('indeterminate');\n\n  public canAnimate = createCanAnimateSignal();\n\n  protected frozenCheckmarkColor = signal<string | null>(null);\n  protected frozenIndeterminateColor = signal<string | null>(null);\n\n  public isChecked = computed(() => this.checkboxDir.ariaChecked() === true);\n  public isIndeterminate = computed(() => this.checkboxDir.ariaChecked() === 'mixed');\n\n  constructor() {\n    effect(() => {\n      const checked = this.isChecked();\n      const checkmarkEl = this.checkmarkEl()?.nativeElement;\n\n      untracked(() => {\n        if (checked) {\n          this.frozenCheckmarkColor.set(null);\n        } else if (checkmarkEl) {\n          this.frozenCheckmarkColor.set(getComputedStyle(checkmarkEl).color);\n        }\n      });\n    });\n\n    effect(() => {\n      const indeterminate = this.isIndeterminate();\n      const indeterminateEl = this.indeterminateEl()?.nativeElement;\n\n      untracked(() => {\n        if (indeterminate) {\n          this.frozenIndeterminateColor.set(null);\n        } else if (indeterminateEl) {\n          this.frozenIndeterminateColor.set(getComputedStyle(indeterminateEl).color);\n        }\n      });\n    });\n  }\n\n  public focus(options?: FocusOptions) {\n    this.checkboxDir.focus(options);\n  }\n}\n","<div class=\"et-checkbox-box\">\n  <svg\n    #checkmark\n    [style.color]=\"frozenCheckmarkColor()\"\n    class=\"et-checkbox-checkmark\"\n    viewBox=\"0 0 16 16\"\n    aria-hidden=\"true\"\n  >\n    <polyline\n      class=\"et-checkbox-checkmark-path\"\n      points=\"3.5 8 6.5 11 12.5 5\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    />\n  </svg>\n  <svg\n    #indeterminate\n    [style.color]=\"frozenIndeterminateColor()\"\n    class=\"et-checkbox-indeterminate\"\n    viewBox=\"0 0 16 16\"\n    aria-hidden=\"true\"\n  >\n    <line\n      class=\"et-checkbox-indeterminate-path\"\n      x1=\"4\"\n      y1=\"8\"\n      x2=\"12\"\n      y2=\"8\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n    />\n  </svg>\n</div>\n","import { CheckboxComponent } from './checkbox.component';\nimport { CheckboxDirective } from './headless';\n\nexport const CHECKBOX_IMPORTS = [CheckboxComponent, CheckboxDirective] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The card variant's panel chrome, as a styles-only component mounted the first time a choice field\n * is set to `variant=\"card\"`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-choice-field-card-styles',\n  template: '',\n  styleUrl: './choice-field-card-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class ChoiceFieldCardStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The card variant's panel chrome, shared by `et-radio`, `et-checkbox-option` and `et-choice-field`\n * and mounted the first time any of them is set to `variant=\"card\"`. Applies to the element carrying\n * `.et-selection-card`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-selection-card-styles',\n  template: '',\n  styleUrl: './selection-card-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SelectionCardStylesComponent {}\n","/** Which end of a card the control sits at. See {@link SelectionCardControlPosition}. */\nexport const SELECTION_CARD_CONTROL_POSITIONS = {\n  START: 'start',\n  END: 'end',\n} as const;\n\n/**\n * Which end of a `variant=\"card\"` panel the control sits at. `'end'` (the default) leaves the label leading\n * and the control trailing; `'start'` puts the control first, ahead of any `[etSelectionCardLeading]` media.\n * `variant=\"plain\"` ignores it.\n */\nexport type SelectionCardControlPosition =\n  (typeof SELECTION_CARD_CONTROL_POSITIONS)[keyof typeof SELECTION_CARD_CONTROL_POSITIONS];\n","import { Component, InjectionToken, Provider, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\n\n/**\n * Resolves the text shown for a validation error. Return `null` to fall back to the error's own\n * `message`. Lets an app centralize/localize error texts by `kind` (e.g. `required`, `minLength`,\n * or `@ethlete/query`'s `etServerViolation`) instead of putting a `message` on every validator.\n */\nexport type FormErrorMessageResolver = (error: ValidationError.WithOptionalFieldTree) => string | null;\n\nexport const FORM_ERROR_MESSAGE_RESOLVER = new InjectionToken<FormErrorMessageResolver>('FORM_ERROR_MESSAGE_RESOLVER');\n\nexport const provideFormErrorMessageResolver = (resolver: FormErrorMessageResolver): Provider => ({\n  provide: FORM_ERROR_MESSAGE_RESOLVER,\n  useValue: resolver,\n});\n\n@Component({\n  selector: 'et-form-error',\n  template: '{{ message() }}',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-form-error',\n  },\n})\nexport class FormErrorComponent {\n  private messageResolver = inject(FORM_ERROR_MESSAGE_RESOLVER, { optional: true });\n\n  public error = input.required<ValidationError.WithOptionalFieldTree>();\n\n  protected message = computed(() => this.messageResolver?.(this.error()) ?? this.error().message ?? '');\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The support region under a form control - the clipped, height-animated box and the error, warning\n * and hint blocks that cross-fade inside it - as a styles-only component. Mounted once per document\n * by `FormSupportComponent`.\n *\n * A control keeps its public `--et-<control>-support-*` tokens and aliases them onto the\n * `--et-form-support-*` tokens this sheet reads.\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-support-styles',\n  template: '',\n  styleUrl: './form-support-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FormSupportStylesComponent {}\n\n/** @internal */\nexport const mountFormSupportStyles = () => injectStyleManager().mount(FormSupportStylesComponent);\n","import { Component, InjectionToken, Provider, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { FieldWarning } from './headless';\n\n/**\n * Resolves the text shown for a field warning. Return `null` to fall back to the warning's own\n * `message`. Lets an app centralize/localize warning texts by `kind` instead of putting a `message`\n * on every `warn()` rule.\n */\nexport type FormWarningMessageResolver = (warning: FieldWarning) => string | null;\n\nexport const FORM_WARNING_MESSAGE_RESOLVER = new InjectionToken<FormWarningMessageResolver>(\n  'FORM_WARNING_MESSAGE_RESOLVER',\n);\n\nexport const provideFormWarningMessageResolver = (resolver: FormWarningMessageResolver): Provider => ({\n  provide: FORM_WARNING_MESSAGE_RESOLVER,\n  useValue: resolver,\n});\n\n@Component({\n  selector: 'et-form-warning',\n  template: '{{ message() }}',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-form-warning',\n  },\n})\nexport class FormWarningComponent {\n  private messageResolver = inject(FORM_WARNING_MESSAGE_RESOLVER, { optional: true });\n\n  public warning = input.required<FieldWarning>();\n\n  protected message = computed(() => this.messageResolver?.(this.warning()) ?? this.warning().message ?? '');\n}\n","import { Component, ElementRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AnimatableDirective, ProvideColorDirective } from '@ethlete/core';\nimport { FormErrorComponent } from '../form-error.component';\nimport { mountFormSupportStyles } from '../form-support-styles.component';\nimport { FormWarningComponent } from '../form-warning.component';\nimport { injectFormSupport, wireFormSupport } from '../headless';\n\n/**\n * The support region every non-text control renders under itself: the clipped, height-animated box\n * and the error / warning / hint blocks that cross-fade inside it, wired to the enclosing\n * `injectFormSupport`. Project the control's `et-hint` into it - the hint slot has to stay\n * selector-less, because a re-projected `<ng-content>` never matches a `select`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-support',\n  templateUrl: './form-support.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [AnimatableDirective, FormErrorComponent, FormWarningComponent, ProvideColorDirective],\n  host: {\n    class: 'et-form-support',\n    '[style.block-size.px]': 'support.supportHeight()',\n  },\n})\nexport class FormSupportComponent {\n  public support = injectFormSupport();\n\n  private errorContent = viewChild<ElementRef<HTMLElement>>('errorContent');\n  private warningContent = viewChild<ElementRef<HTMLElement>>('warningContent');\n  private hintContent = viewChild<ElementRef<HTMLElement>>('hintContent');\n  private errorAnimatable = viewChild<AnimatableDirective>('errorAnimatable');\n  private warningAnimatable = viewChild<AnimatableDirective>('warningAnimatable');\n  private hintAnimatable = viewChild<AnimatableDirective>('hintAnimatable');\n\n  constructor() {\n    // ahead of the region's own view, so the rules and the `@property` registrations its\n    // transitions animate are in the document before the first element that needs them\n    mountFormSupportStyles();\n\n    wireFormSupport(this.support, {\n      errorContent: this.errorContent,\n      warningContent: this.warningContent,\n      hintContent: this.hintContent,\n      errorAnimatable: this.errorAnimatable,\n      warningAnimatable: this.warningAnimatable,\n      hintAnimatable: this.hintAnimatable,\n    });\n  }\n}\n","<div class=\"et-form-support-stack\">\n  @if (support.shouldRenderError()) {\n    <div\n      #errorContent\n      #errorAnimatable=\"etAnimatable\"\n      [id]=\"support.errorId()\"\n      [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n      [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n      [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n      [attr.data-active]=\"support.errorActive() || null\"\n      [attr.data-direction]=\"support.errorDirection()\"\n      [attr.data-state]=\"support.errorState()\"\n      [etProvideColor]=\"support.errorColorTheme\"\n      class=\"et-form-support-content et-form-support-errors\"\n      etAnimatable\n    >\n      @for (error of support.visibleErrors(); track $index) {\n        <et-form-error [error]=\"error\" />\n      }\n    </div>\n  }\n\n  @if (support.shouldRenderWarning()) {\n    <div\n      #warningContent\n      #warningAnimatable=\"etAnimatable\"\n      [id]=\"support.warningId()\"\n      [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n      [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n      [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n      [attr.data-active]=\"support.warningActive() || null\"\n      [attr.data-direction]=\"support.warningDirection()\"\n      [attr.data-state]=\"support.warningState()\"\n      [etProvideColor]=\"support.warningColorTheme()\"\n      class=\"et-form-support-content et-form-support-warnings\"\n      etAnimatable\n    >\n      @for (warning of support.visibleWarnings(); track $index) {\n        <et-form-warning [warning]=\"warning\" />\n      }\n    </div>\n  }\n\n  @if (support.shouldRenderHint()) {\n    <div\n      #hintContent\n      #hintAnimatable=\"etAnimatable\"\n      [id]=\"support.hintId()\"\n      [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n      [attr.data-active]=\"support.hintActive() || null\"\n      [attr.data-direction]=\"support.hintDirection()\"\n      [attr.data-state]=\"support.hintState()\"\n      class=\"et-form-support-content et-form-support-hint\"\n      etAnimatable\n    >\n      <ng-content />\n    </div>\n  }\n</div>\n","export const FORM_FIELD_APPEARANCES = {\n  BOX: 'box',\n  UNDERLINE: 'underline',\n} as const;\n\nexport type FormFieldAppearance = (typeof FORM_FIELD_APPEARANCES)[keyof typeof FORM_FIELD_APPEARANCES];\n\nexport const FORM_FIELD_FILLS = {\n  TRANSPARENT: 'transparent',\n  FILLED: 'filled',\n} as const;\n\nexport type FormFieldFill = (typeof FORM_FIELD_FILLS)[keyof typeof FORM_FIELD_FILLS];\n\nexport const FORM_FIELD_LABEL_MODES = {\n  STATIC: 'static',\n  INLINE: 'inline',\n  FLOATING_INSIDE: 'floating-inside',\n  FLOATING_OUTSIDE: 'floating-outside',\n} as const;\n\nexport type FormFieldLabelMode = (typeof FORM_FIELD_LABEL_MODES)[keyof typeof FORM_FIELD_LABEL_MODES];\n\nexport const FORM_FIELD_SIZES = {\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n} as const;\n\nexport type FormFieldSize = (typeof FORM_FIELD_SIZES)[keyof typeof FORM_FIELD_SIZES];\n","import { Component, effect, input, ViewEncapsulation } from '@angular/core';\nimport {\n  ColorInteractiveContainerDirective,\n  ColorInteractiveDirective,\n  ColorInteractiveExcludeDirective,\n  createCanAnimateSignal,\n  injectStyleManager,\n  ProvideColorDirective,\n} from '@ethlete/core';\nimport { ChoiceFieldCardStylesComponent } from './choice-field-card-styles.component';\nimport { SelectionCardStylesComponent } from '../selection-card-styles.component';\nimport { SELECTION_CARD_CONTROL_POSITIONS, SelectionCardControlPosition } from '../selection-card.types';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FORM_FIELD_SIZES, FormFieldSize } from '../form-field/form-field.variants';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\n\n/** How a choice field presents itself. See {@link ChoiceFieldComponent.variant}. */\nexport const CHOICE_FIELD_VARIANTS = {\n  PLAIN: 'plain',\n  CARD: 'card',\n} as const;\n\nexport type ChoiceFieldVariant = (typeof CHOICE_FIELD_VARIANTS)[keyof typeof CHOICE_FIELD_VARIANTS];\n\n@Component({\n  selector: 'et-choice-field',\n  templateUrl: './choice-field.component.html',\n  styleUrl: './choice-field.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ColorInteractiveContainerDirective,\n    ColorInteractiveDirective,\n    ColorInteractiveExcludeDirective,\n    FormSupportComponent,\n  ],\n  providers: [provideFormSupport()],\n  hostDirectives: [FormFieldDirective, { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] }],\n  host: {\n    class: 'et-choice-field',\n    '[attr.data-size]': 'size()',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-control-position]': \"variant() === 'card' ? controlPosition() : null\",\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n  },\n})\nexport class ChoiceFieldComponent {\n  public support = injectFormSupport();\n\n  private styleManager = injectStyleManager();\n  public size = input<FormFieldSize>(FORM_FIELD_SIZES.MD);\n\n  /**\n   * `'card'` turns the row into a full-width clickable panel with the label leading and the control trailing - for\n   * a short list of consequential options where each wants room for a hint. Works for whichever control is\n   * projected, so a checkbox and a switch get the same preset. @default 'plain'\n   */\n  public variant = input<ChoiceFieldVariant>(CHOICE_FIELD_VARIANTS.PLAIN);\n\n  /**\n   * Which end of the card the control sits at. `'end'` keeps the label leading and the control trailing;\n   * `'start'` puts the control first, ahead of any `[etSelectionCardLeading]` media. Only `variant=\"card\"`\n   * reads it. @default 'end'\n   */\n  public controlPosition = input<SelectionCardControlPosition>(SELECTION_CARD_CONTROL_POSITIONS.END);\n\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    effect(() => {\n      if (this.variant() === CHOICE_FIELD_VARIANTS.CARD) {\n        this.styleManager.mount(SelectionCardStylesComponent);\n        this.styleManager.mount(ChoiceFieldCardStylesComponent);\n      }\n    });\n  }\n}\n","<div\n  [class.et-selection-card]=\"variant() === 'card'\"\n  class=\"et-choice-field-control\"\n  etColorInteractive\n  etColorInteractiveContainer\n>\n  <div class=\"et-choice-field-control-slot et-selection-card-control\">\n    <ng-content />\n  </div>\n\n  <ng-content select=\"[etSelectionCardLeading]\" />\n\n  <div class=\"et-choice-field-label-area et-selection-card-content\">\n    <ng-content select=\"et-label\" />\n  </div>\n\n  <ng-content select=\"[etSelectionCardTrailing]\" />\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support etColorInteractiveExclude><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { Component, DestroyRef, inject, ViewEncapsulation } from '@angular/core';\nimport { FORM_FIELD_TOKEN, HintComponentBase } from './headless';\n\n@Component({\n  selector: 'et-hint',\n  template: '<ng-content />',\n  styleUrl: './hint.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class HintComponent implements HintComponentBase {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  constructor() {\n    this.formField?.registerHint(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterHint(this));\n  }\n}\n","import { FormFieldDirective, LabelDirective } from '../form-field/headless';\nimport { HintComponent } from '../form-field/hint.component';\nimport { ChoiceFieldComponent } from './choice-field.component';\n\nexport const CHOICE_FIELD_IMPORTS = [ChoiceFieldComponent, FormFieldDirective, LabelDirective, HintComponent] as const;\n","// codes 4700-4799\nexport const COLOR_INPUT_ERROR_CODES = {\n  TRIGGER_OUTSIDE_COLOR_INPUT: 4700,\n  SURFACE_OUTSIDE_COLOR_INPUT: 4701,\n  AREA_OUTSIDE_COLOR_INPUT: 4702,\n  TRACK_OUTSIDE_COLOR_INPUT: 4703,\n  MISSING_SURFACE: 4704,\n} as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings the color picker panel renders itself. */\nexport type ColorInputLabels = {\n  /** Accessible name of the picker overlay. */\n  dialog: string;\n  /** Accessible name of the button that opens the picker. */\n  pickerTrigger: string;\n  /** Accessible name of the two-dimensional saturation and brightness surface. */\n  area: string;\n  /** Accessible name of the saturation slider inside that surface. */\n  saturation: string;\n  /** Accessible name of the brightness slider inside that surface. */\n  brightness: string;\n  /** Accessible name of the hue track. */\n  hue: string;\n  /** Accessible name of the opacity track. */\n  alpha: string;\n  /** Accessible name of the color entry field inside the panel. */\n  value: string;\n  /** Name of the hex notation - the panel shows it beside the entry field. */\n  hex: string;\n  /** Name of the `rgb()` notation. */\n  rgb: string;\n  /** Name of the `hsl()` notation. */\n  hsl: string;\n  /** Accessible name of the button that switches the entry field to the next notation. */\n  notation: (currentNotation: string) => string;\n  /** Advisory shown under the entry field after an entry in another notation was converted. */\n  notationConverted: (targetNotation: string) => string;\n  /** Accessible name of the preset swatch group. */\n  swatches: string;\n  /** Accessible name of the button that samples a color from the screen. */\n  eyedropper: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_COLOR_INPUT_LABELS: ColorInputLabels = {\n  dialog: 'Choose a color',\n  pickerTrigger: 'Choose a color',\n  area: 'Saturation and brightness',\n  saturation: 'Saturation',\n  brightness: 'Brightness',\n  hue: 'Hue',\n  alpha: 'Opacity',\n  value: 'Color value',\n  hex: 'Hex',\n  rgb: 'RGB',\n  hsl: 'HSL',\n  notation: (currentNotation) => `Change notation, currently ${currentNotation}`,\n  notationConverted: (targetNotation) => `Converted to ${targetNotation}.`,\n  swatches: 'Preset colors',\n  eyedropper: 'Pick a color from the screen',\n};\n\nconst COLOR_INPUT_LABELS_DEF = /* @__PURE__ */ defineLabels<ColorInputLabels>(\n  'COLOR_INPUT_LABELS',\n  DEFAULT_COLOR_INPUT_LABELS,\n);\n\n/**\n * Localize the color picker's strings for everything below this injector, and read the set in\n * effect here as a signal. Partial - whatever you leave out keeps its\n * {@link DEFAULT_COLOR_INPUT_LABELS} value.\n *\n * @example\n * provideColorInputLabels({ hue: 'Farbton', hex: 'Hex' });\n */\nexport const provideColorInputLabels = /* @__PURE__ */ toProvideFn(COLOR_INPUT_LABELS_DEF);\nexport const injectColorInputLabels = /* @__PURE__ */ toInjectFn(COLOR_INPUT_LABELS_DEF);\nexport const COLOR_INPUT_LABELS = /* @__PURE__ */ toToken(COLOR_INPUT_LABELS_DEF);\n","export const COLOR_NOTATIONS = {\n  HEX: 'hex',\n  RGB: 'rgb',\n  HSL: 'hsl',\n} as const;\n\n/**\n * A notation the color picker can display and read. It never changes what the control emits - the\n * value stays lowercase hex (`#rrggbb`, `#rrggbbaa` with `alpha`) in every notation.\n */\nexport type ColorNotation = (typeof COLOR_NOTATIONS)[keyof typeof COLOR_NOTATIONS];\n\n/** The order the picker offers notations in, and the default set. */\nexport const COLOR_NOTATION_ORDER = [COLOR_NOTATIONS.HEX, COLOR_NOTATIONS.RGB, COLOR_NOTATIONS.HSL] as const;\n","import { COLOR_NOTATION_ORDER, COLOR_NOTATIONS, ColorNotation } from '../../color-input.types';\n\n/** An sRGB color. Channels are 0-255 integers; `alpha` is 0-1. */\nexport type RgbColor = {\n  red: number;\n  green: number;\n  blue: number;\n  alpha: number;\n};\n\n/** An HSL color. `hue` is 0-360; `saturation`, `lightness` and `alpha` are 0-1. */\nexport type HslColor = {\n  hue: number;\n  saturation: number;\n  lightness: number;\n  alpha: number;\n};\n\n/** An HSV color. `hue` is 0-360; `saturation`, `value` and `alpha` are 0-1. */\nexport type HsvColor = {\n  hue: number;\n  saturation: number;\n  value: number;\n  alpha: number;\n};\n\nconst HEX_PATTERNS = {\n  strict: /^#[0-9a-f]{6}$/i,\n  shorthand: /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i,\n  alpha: /^#(?:[0-9a-f]{6}|[0-9a-f]{8})$/i,\n  shorthandAlpha: /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,\n};\n\nconst hexPatternFor = (shorthand: boolean, alpha: boolean) => {\n  if (shorthand) {\n    return alpha ? HEX_PATTERNS.shorthandAlpha : HEX_PATTERNS.shorthand;\n  }\n\n  return alpha ? HEX_PATTERNS.alpha : HEX_PATTERNS.strict;\n};\n\nconst RGB_PATTERN = /^rgba?\\(\\s*(\\d{1,3})\\s*[,\\s]\\s*(\\d{1,3})\\s*[,\\s]\\s*(\\d{1,3})\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i;\n\nconst HSL_PATTERN =\n  /^hsla?\\(\\s*(-?[\\d.]+)(?:deg)?\\s*[,\\s]\\s*([\\d.]+)%\\s*[,\\s]\\s*([\\d.]+)%\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i;\n\nconst clamp01 = (value: number) => Math.min(1, Math.max(0, value));\n\nconst parseAlphaComponent = (raw: string | undefined) => {\n  if (raw === undefined) {\n    return 1;\n  }\n\n  const isPercentage = raw.endsWith('%');\n  const numeric = Number(isPercentage ? raw.slice(0, -1) : raw);\n\n  if (!Number.isFinite(numeric)) {\n    return null;\n  }\n\n  return clamp01(isPercentage ? numeric / 100 : numeric);\n};\n\nconst parseHex = (raw: string): RgbColor => {\n  const digits = raw.slice(1);\n  const expanded = digits.length <= 4 ? digits.replace(/./g, (digit) => digit + digit) : digits;\n  const channelAt = (index: number) => parseInt(expanded.slice(index * 2, index * 2 + 2), 16);\n\n  return {\n    red: channelAt(0),\n    green: channelAt(1),\n    blue: channelAt(2),\n    alpha: expanded.length === 8 ? channelAt(3) / 255 : 1,\n  };\n};\n\nconst parseFunctionalRgb = (raw: string, allowAlpha: boolean): RgbColor | null => {\n  const match = RGB_PATTERN.exec(raw);\n\n  if (!match) {\n    return null;\n  }\n\n  const [, rawRed, rawGreen, rawBlue, rawAlpha] = match;\n\n  if (rawAlpha !== undefined && !allowAlpha) {\n    return null;\n  }\n\n  const red = Number(rawRed);\n  const green = Number(rawGreen);\n  const blue = Number(rawBlue);\n\n  if (red > 255 || green > 255 || blue > 255) {\n    return null;\n  }\n\n  const alpha = parseAlphaComponent(rawAlpha);\n\n  if (alpha === null) {\n    return null;\n  }\n\n  return { red, green, blue, alpha };\n};\n\nconst parseFunctionalHsl = (raw: string, allowAlpha: boolean): RgbColor | null => {\n  const match = HSL_PATTERN.exec(raw);\n\n  if (!match) {\n    return null;\n  }\n\n  const [, rawHue, rawSaturation, rawLightness, rawAlpha] = match;\n\n  if (rawAlpha !== undefined && !allowAlpha) {\n    return null;\n  }\n\n  const saturation = Number(rawSaturation) / 100;\n  const lightness = Number(rawLightness) / 100;\n\n  if (saturation > 1 || lightness > 1) {\n    return null;\n  }\n\n  const alpha = parseAlphaComponent(rawAlpha);\n\n  if (alpha === null) {\n    return null;\n  }\n\n  return hslToRgb({ hue: Number(rawHue), saturation, lightness, alpha });\n};\n\nexport type ColorParseOptions = {\n  notations?: readonly ColorNotation[];\n  hexShorthand?: boolean;\n  alpha?: boolean;\n};\n\nexport const parseColorToRgb = (value: string | null | undefined, options: ColorParseOptions = {}): RgbColor | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const raw = value.trim();\n\n  if (!raw.length) {\n    return null;\n  }\n\n  const { notations = COLOR_NOTATION_ORDER, hexShorthand = true, alpha = true } = options;\n\n  if (raw.startsWith('#')) {\n    const readable = notations.includes(COLOR_NOTATIONS.HEX) && hexPatternFor(hexShorthand, alpha).test(raw);\n\n    return readable ? parseHex(raw) : null;\n  }\n\n  const lowered = raw.toLowerCase();\n\n  if (lowered.startsWith('hsl')) {\n    return notations.includes(COLOR_NOTATIONS.HSL) ? parseFunctionalHsl(lowered, alpha) : null;\n  }\n\n  return notations.includes(COLOR_NOTATIONS.RGB) ? parseFunctionalRgb(lowered, alpha) : null;\n};\n\nexport const detectColorNotation = (value: string | null | undefined): ColorNotation | null => {\n  if (!parseColorToRgb(value)) {\n    return null;\n  }\n\n  const raw = (value as string).trim().toLowerCase();\n\n  if (raw.startsWith('hsl')) {\n    return COLOR_NOTATIONS.HSL;\n  }\n\n  return raw.startsWith('rgb') ? COLOR_NOTATIONS.RGB : COLOR_NOTATIONS.HEX;\n};\n\n/**\n * **A grey returns `hue` 0 and a black returns `saturation` 0**, so a caller that round-trips through\n * this loses the hue the user was on. Hold the HSV state yourself for as long as the user is\n * dragging, and convert one way only.\n */\nexport const rgbToHsv = (rgb: RgbColor): HsvColor => {\n  const red = rgb.red / 255;\n  const green = rgb.green / 255;\n  const blue = rgb.blue / 255;\n\n  const max = Math.max(red, green, blue);\n  const min = Math.min(red, green, blue);\n  const span = max - min;\n\n  let hue = 0;\n\n  if (span > 0) {\n    if (max === red) {\n      hue = ((green - blue) / span) % 6;\n    } else if (max === green) {\n      hue = (blue - red) / span + 2;\n    } else {\n      hue = (red - green) / span + 4;\n    }\n\n    hue *= 60;\n\n    if (hue < 0) {\n      hue += 360;\n    }\n  }\n\n  return {\n    hue,\n    saturation: max === 0 ? 0 : span / max,\n    value: max,\n    alpha: rgb.alpha,\n  };\n};\n\nexport const hsvToRgb = (hsv: HsvColor): RgbColor => {\n  const hue = ((hsv.hue % 360) + 360) % 360;\n  const saturation = clamp01(hsv.saturation);\n  const value = clamp01(hsv.value);\n\n  const sector = hue / 60;\n  const chroma = value * saturation;\n  const secondary = chroma * (1 - Math.abs((sector % 2) - 1));\n  const base = value - chroma;\n\n  const rotations = [\n    [chroma, secondary, 0],\n    [secondary, chroma, 0],\n    [0, chroma, secondary],\n    [0, secondary, chroma],\n    [secondary, 0, chroma],\n    [chroma, 0, secondary],\n  ] as const;\n\n  const [red, green, blue] = rotations[Math.min(5, Math.floor(sector))] ?? rotations[0];\n\n  return {\n    red: Math.round((red + base) * 255),\n    green: Math.round((green + base) * 255),\n    blue: Math.round((blue + base) * 255),\n    alpha: clamp01(hsv.alpha),\n  };\n};\n\nconst toHexPair = (channel: number) =>\n  Math.min(255, Math.max(0, Math.round(channel)))\n    .toString(16)\n    .padStart(2, '0');\n\nexport const formatRgbToHex = (rgb: RgbColor, options?: { alpha?: boolean }) => {\n  const base = `#${toHexPair(rgb.red)}${toHexPair(rgb.green)}${toHexPair(rgb.blue)}`;\n\n  return options?.alpha ? `${base}${toHexPair(rgb.alpha * 255)}` : base;\n};\n\nexport const parseColorToHsv = (value: string | null | undefined): HsvColor | null => {\n  const rgb = parseColorToRgb(value);\n\n  return rgb ? rgbToHsv(rgb) : null;\n};\n\nexport const formatHsvToHex = (hsv: HsvColor, options?: { alpha?: boolean }) => formatRgbToHex(hsvToRgb(hsv), options);\n\nexport const hueToCssColor = (hue: number) => `hsl(${((hue % 360) + 360) % 360} 100% 50%)`;\n\nconst normalizeHue = (hue: number) => ((hue % 360) + 360) % 360;\n\nexport const hslToRgb = (hsl: HslColor): RgbColor => {\n  const hue = normalizeHue(hsl.hue);\n  const saturation = clamp01(hsl.saturation);\n  const lightness = clamp01(hsl.lightness);\n\n  const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n  const segment = hue / 60;\n  const secondary = chroma * (1 - Math.abs((segment % 2) - 1));\n  const base = lightness - chroma / 2;\n\n  const rotations = [\n    [chroma, secondary, 0],\n    [secondary, chroma, 0],\n    [0, chroma, secondary],\n    [0, secondary, chroma],\n    [secondary, 0, chroma],\n    [chroma, 0, secondary],\n  ] as const;\n\n  const [red, green, blue] = rotations[Math.min(5, Math.floor(segment))] ?? rotations[0];\n\n  return {\n    red: Math.round((red + base) * 255),\n    green: Math.round((green + base) * 255),\n    blue: Math.round((blue + base) * 255),\n    alpha: clamp01(hsl.alpha),\n  };\n};\n\nexport const rgbToHsl = (rgb: RgbColor): HslColor => {\n  const red = rgb.red / 255;\n  const green = rgb.green / 255;\n  const blue = rgb.blue / 255;\n\n  const max = Math.max(red, green, blue);\n  const min = Math.min(red, green, blue);\n  const span = max - min;\n  const lightness = (max + min) / 2;\n\n  const saturation = span === 0 ? 0 : span / (1 - Math.abs(2 * lightness - 1));\n\n  let hue = 0;\n\n  if (span !== 0) {\n    if (max === red) {\n      hue = ((green - blue) / span) % 6;\n    } else if (max === green) {\n      hue = (blue - red) / span + 2;\n    } else {\n      hue = (red - green) / span + 4;\n    }\n  }\n\n  return { hue: normalizeHue(hue * 60), saturation, lightness, alpha: clamp01(rgb.alpha) };\n};\n\nconst formatAlphaComponent = (alpha: number) => Math.round(clamp01(alpha) * 100) / 100;\n\nexport const formatRgb = (rgb: RgbColor, options?: { alpha?: boolean }) => {\n  const channels = `${Math.round(rgb.red)} ${Math.round(rgb.green)} ${Math.round(rgb.blue)}`;\n\n  return options?.alpha ? `rgb(${channels} / ${formatAlphaComponent(rgb.alpha)})` : `rgb(${channels})`;\n};\n\nexport const formatHsl = (rgb: RgbColor, options?: { alpha?: boolean }) => {\n  const hsl = rgbToHsl(rgb);\n  const channels = `${Math.round(hsl.hue)} ${Math.round(hsl.saturation * 100)}% ${Math.round(hsl.lightness * 100)}%`;\n\n  return options?.alpha ? `hsl(${channels} / ${formatAlphaComponent(hsl.alpha)})` : `hsl(${channels})`;\n};\n\nexport const formatHsvToNotation = (hsv: HsvColor, options: { notation: ColorNotation; alpha?: boolean }) => {\n  const rgb = hsvToRgb(hsv);\n\n  if (options.notation === COLOR_NOTATIONS.RGB) {\n    return formatRgb(rgb, options);\n  }\n\n  return options.notation === COLOR_NOTATIONS.HSL ? formatHsl(rgb, options) : formatRgbToHex(rgb, options);\n};\n","import { FieldContext, LogicFn, validate } from '@angular/forms/signals';\nimport { FieldWarning, warn } from '../form-field/headless';\nimport { COLOR_NOTATIONS } from './color-input.types';\nimport { parseColorToRgb } from './headless/internals/color-convert';\n\nconst HEX_NOTATIONS = [COLOR_NOTATIONS.HEX] as const;\nconst RGB_NOTATIONS = [COLOR_NOTATIONS.RGB] as const;\n\ntype ColorFieldPath = Parameters<typeof validate<string | null>>[0];\n\nexport type HexColorOptions = {\n  /** Also accept the three-digit form (`#f00`), and `#f00c` when `allowAlpha` is on. @default false */\n  allowShorthand?: boolean;\n  /** Also accept a trailing alpha pair (`#ff0000cc`). @default false */\n  allowAlpha?: boolean;\n  /** Overrides the default \"Enter a color as …\" message. */\n  message?: string;\n};\n\nexport type RgbColorOptions = {\n  /** Also accept `rgba(…)` and a fourth alpha component. @default false */\n  allowAlpha?: boolean;\n  /** Overrides the default \"Enter a color as …\" message. */\n  message?: string;\n};\n\nexport type ColorContrastOptions = {\n  /** The color to measure against: another color field's path, or a fixed color string. */\n  against: ColorFieldPath | string;\n  /**\n   * The contrast ratio the pair has to reach, as the `n` in `n:1`, or a function returning it.\n   * See {@link WCAG_CONTRAST_RATIOS}.\n   * @default 4.5\n   */\n  min?: number | LogicFn<string | null, number>;\n  /**\n   * `'error'` fails the field and blocks `submit()`; `'warning'` reports through {@link warn}, which\n   * leaves the field valid.\n   * @default 'error'\n   */\n  severity?: 'error' | 'warning';\n  /** Overrides the default \"Contrast is …\" message. */\n  message?: string;\n};\n\nconst isBlank = (value: string | null): value is null => value === null || value.trim().length === 0;\n\ntype RgbChannels = readonly [red: number, green: number, blue: number];\n\nconst CONTRAST_NOTATIONS = [COLOR_NOTATIONS.HEX, COLOR_NOTATIONS.RGB] as const;\n\nconst parseColor = (value: string | null): RgbChannels | null => {\n  const rgb = parseColorToRgb(value, { notations: CONTRAST_NOTATIONS });\n\n  return rgb ? [rgb.red, rgb.green, rgb.blue] : null;\n};\n\nconst linearize = (channel: number) => {\n  const srgb = channel / 255;\n\n  return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;\n};\n\nconst relativeLuminance = ([red, green, blue]: RgbChannels) =>\n  0.2126 * linearize(red) + 0.7152 * linearize(green) + 0.0722 * linearize(blue);\n\n/** The ratios WCAG 2.2 asks for. */\nexport const WCAG_CONTRAST_RATIOS = {\n  /** 1.4.3 Contrast (Minimum), text under 18.66px / 24px bold. */\n  aaNormal: 4.5,\n  /** 1.4.3 Contrast (Minimum), text at or above 18.66px / 24px bold. */\n  aaLarge: 3,\n  /** 1.4.6 Contrast (Enhanced), text under 18.66px / 24px bold. */\n  aaaNormal: 7,\n  /** 1.4.6 Contrast (Enhanced), text at or above 18.66px / 24px bold. */\n  aaaLarge: 4.5,\n  /** 1.4.11 Non-text Contrast: icons, control borders, focus rings, chart marks. */\n  nonText: 3,\n} as const;\n\n/**\n * The WCAG contrast ratio between two colors, as the `n` in `n:1` - 1 for a color against itself,\n * 21 for black against white. Accepts hex (`#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`) and functional\n * `rgb()`/`rgba()` in either the comma or the space form, and returns `null` if either color is\n * blank or unparseable.\n *\n * **Alpha is ignored**: the result is for the two colors at full opacity.\n *\n * ```ts\n * getColorContrastRatio('#767676', '#ffffff'); // 4.54\n * ```\n */\nexport const getColorContrastRatio = (color: string | null, other: string | null): number | null => {\n  const first = parseColor(color);\n  const second = parseColor(other);\n\n  if (!first || !second) return null;\n\n  const luminances = [relativeLuminance(first), relativeLuminance(second)];\n  const lighter = Math.max(...luminances);\n  const darker = Math.min(...luminances);\n\n  return (lighter + 0.05) / (darker + 0.05);\n};\n\n/**\n * Signal-forms validator: fails the field unless the value is a hex color. Strict `#rrggbb` by\n * default.\n *\n * An empty or `null` value passes; pair it with `required()` if the field is mandatory.\n *\n * ```ts\n * form(model, (s) => {\n *   hexColor(s.brandColor);\n *   hexColor(s.overlayTint, { allowAlpha: true });\n * });\n * ```\n */\nexport const hexColor = (path: ColorFieldPath, { allowShorthand, allowAlpha, message }: HexColorOptions = {}) =>\n  validate(path, ({ value }) => {\n    const raw = value();\n\n    if (isBlank(raw)) return undefined;\n\n    const parsed = parseColorToRgb(raw, {\n      notations: HEX_NOTATIONS,\n      hexShorthand: !!allowShorthand,\n      alpha: !!allowAlpha,\n    });\n\n    if (parsed) return undefined;\n\n    const expected = [\n      '#rrggbb',\n      allowShorthand ? '#rgb' : null,\n      allowAlpha ? '#rrggbbaa' : null,\n      allowShorthand && allowAlpha ? '#rgba' : null,\n    ].filter((notation) => notation !== null);\n\n    return { kind: 'hexColor', message: message ?? `Enter a color as ${expected.join(' or ')}` };\n  });\n\n/**\n * Signal-forms validator: fails the field unless the value is a functional `rgb()` color, in either\n * the comma or the space form, with each channel in 0-255.\n *\n * An empty or `null` value passes; pair it with `required()` if the field is mandatory.\n *\n * ```ts\n * form(model, (s) => {\n *   rgbColor(s.overlayTint, { allowAlpha: true });\n * });\n * ```\n */\nexport const rgbColor = (path: ColorFieldPath, { allowAlpha, message }: RgbColorOptions = {}) =>\n  validate(path, ({ value }) => {\n    const raw = value();\n\n    if (isBlank(raw)) return undefined;\n\n    const fail = {\n      kind: 'rgbColor',\n      message: message ?? `Enter a color as ${allowAlpha ? 'rgb(r g b) or rgba(r g b / a)' : 'rgb(r g b)'}`,\n    };\n\n    const parsed = parseColorToRgb(raw, { notations: RGB_NOTATIONS, alpha: !!allowAlpha });\n\n    return parsed ? undefined : fail;\n  });\n\n/**\n * Signal-forms rule: reports the field while its color does not reach `min` contrast against\n * another color - a second field of the same form (`against: s.background`) or a fixed color\n * (`against: '#ffffff'`).\n *\n * `severity: 'warning'` routes the same check through {@link warn} instead, which leaves the field\n * valid and lets `submit()` through. Either way it reports `kind: 'colorContrast'`.\n *\n * Passes while **either** color is blank or unparseable. Alpha is ignored - see\n * {@link getColorContrastRatio}.\n *\n * ```ts\n * form(model, (s) => {\n *   colorContrast(s.textColor, { against: s.backgroundColor });\n *   colorContrast(s.iconColor, { against: s.backgroundColor, min: WCAG_CONTRAST_RATIOS.nonText });\n *   colorContrast(s.brandColor, { against: '#ffffff', severity: 'warning' });\n *   colorContrast(s.headingColor, {\n *     against: s.backgroundColor,\n *     min: ({ valueOf }) => (valueOf(s.largeText) ? WCAG_CONTRAST_RATIOS.aaLarge : WCAG_CONTRAST_RATIOS.aaNormal),\n *   });\n * });\n * ```\n */\nexport const colorContrast = (\n  path: ColorFieldPath,\n  { against, min = WCAG_CONTRAST_RATIOS.aaNormal, severity = 'error', message }: ColorContrastOptions,\n) => {\n  const check = (ctx: FieldContext<string | null>): FieldWarning | null => {\n    const other = typeof against === 'string' ? against : ctx.valueOf(against);\n    const ratio = getColorContrastRatio(ctx.value(), other);\n    const required = typeof min === 'number' ? min : min(ctx);\n\n    if (ratio === null || ratio >= required) return null;\n\n    const measured = Math.floor(ratio * 100) / 100;\n\n    return { kind: 'colorContrast', message: message ?? `Contrast is ${measured}:1, needs at least ${required}:1` };\n  };\n\n  if (severity === 'warning') {\n    warn(path, check);\n\n    return;\n  }\n\n  validate(path, (ctx) => check(ctx) ?? undefined);\n};\n","import {\n  booleanAttribute,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  untracked,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n  AnimatableDirective,\n  ColorInteractiveExcludeDirective,\n  ColorInteractiveHasFocusDirective,\n  createCanAnimateSignal,\n  injectParentSurface,\n  injectSurfaceThemes,\n  ProvideColorDirective,\n  ProvideSurfaceDirective,\n  resolveSurfaceByElevation,\n  signalDeferredLoading,\n  signalElementDimensions,\n} from '@ethlete/core';\nimport { SpinnerComponent } from '../../loader';\nimport { FormErrorComponent } from './form-error.component';\nimport { FormWarningComponent } from './form-warning.component';\nimport {\n  FORM_FIELD_APPEARANCES,\n  FORM_FIELD_FILLS,\n  FORM_FIELD_LABEL_MODES,\n  FORM_FIELD_SIZES,\n  FormFieldAppearance,\n  FormFieldFill,\n  FormFieldLabelMode,\n  FormFieldSize,\n} from './form-field.variants';\nimport {\n  FormFieldDirective,\n  injectFormSupport,\n  hitsInteractiveElement,\n  provideFormSupport,\n  wireFormSupport,\n} from './headless';\n\n@Component({\n  selector: 'et-form-field',\n  templateUrl: './form-field.component.html',\n  styleUrl: './form-field.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    AnimatableDirective,\n    ColorInteractiveExcludeDirective,\n    FormErrorComponent,\n    FormWarningComponent,\n    NgTemplateOutlet,\n    ProvideColorDirective,\n    SpinnerComponent,\n  ],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n    { directive: ProvideSurfaceDirective, inputs: ['etProvideSurface:surface'] },\n    ColorInteractiveHasFocusDirective,\n  ],\n  host: {\n    class: 'et-form-field',\n    '[style.display]': 'formFieldDir.isHidden() ? \"none\" : null',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-control-type]': 'formFieldDir.controlType()',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n    '[attr.aria-busy]': 'isBusy() ? \"true\" : null',\n    '[attr.data-busy]': 'isBusy() || null',\n    '[attr.data-expanded]': 'formFieldDir.usesTextFieldShell() && formFieldDir.expanded() ? \"\" : null',\n    // stands in for `:focus-visible` when the focused element is a non-editable trigger - a\n    // tabindex div opened by pointer never matches `:focus-visible`\n    '[attr.data-focused]': 'formFieldDir.usesTextFieldShell() && formFieldDir.focused() ? \"\" : null',\n    '[attr.data-readonly]': 'formFieldDir.usesTextFieldShell() && formFieldDir.isReadonly() ? \"\" : null',\n    '[attr.data-disabled]': 'formFieldDir.usesTextFieldShell() && formFieldDir.isDisabled() ? \"\" : null',\n    '[attr.data-appearance]': 'formFieldDir.usesTextFieldShell() ? appearance() : null',\n    '[attr.data-fill]': 'formFieldDir.usesTextFieldShell() ? fill() : null',\n    '[attr.data-label-floated]': 'hasFloatingTextLabel() && formFieldDir.shouldFloatLabel() ? \"\" : null',\n    '[attr.data-has-label]': 'formFieldDir.registeredLabel() ? \"\" : null',\n    '[attr.data-label-mode]': 'formFieldDir.usesTextFieldShell() ? labelMode() : null',\n    '[attr.data-size]': 'formFieldDir.usesTextFieldShell() ? size() : null',\n    '[attr.data-text-shell]': 'formFieldDir.usesTextFieldShell() || null',\n    '[style.--_et-form-field-prefix-offset]': 'prefixOffset()',\n  },\n})\nexport class FormFieldComponent {\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private parentSurface = injectParentSurface();\n\n  protected formFieldDir = inject(FormFieldDirective);\n\n  public support = injectFormSupport();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n\n  public appearance = input<FormFieldAppearance>(FORM_FIELD_APPEARANCES.BOX);\n  public fill = input<FormFieldFill>(FORM_FIELD_FILLS.TRANSPARENT);\n  public labelMode = input<FormFieldLabelMode>(FORM_FIELD_LABEL_MODES.STATIC);\n  public size = input<FormFieldSize>(FORM_FIELD_SIZES.MD);\n\n  /**\n   * Forces the busy state on. The field already shows it while an async validator is in flight for\n   * the bound field; use this for work the form doesn't know about (saving, a lookup of your own).\n   */\n  public busy = input(false, { transform: booleanAttribute });\n\n  public errorContent = viewChild<ElementRef<HTMLElement>>('errorContent');\n  public warningContent = viewChild<ElementRef<HTMLElement>>('warningContent');\n  public hintContent = viewChild<ElementRef<HTMLElement>>('hintContent');\n  public counterContent = viewChild<ElementRef<HTMLElement>>('counterContent');\n  private controlFrame = viewChild<ElementRef<HTMLElement>>('controlFrame');\n  public prefixEl = viewChild<ElementRef<HTMLElement>>('prefixEl');\n  public errorAnimatable = viewChild<AnimatableDirective>('errorAnimatable');\n  public warningAnimatable = viewChild<AnimatableDirective>('warningAnimatable');\n  public hintAnimatable = viewChild<AnimatableDirective>('hintAnimatable');\n\n  /** Whether the field is busy - a pending async validator, or `[busy]`. */\n  public isBusy = computed(() => this.busy() || this.formFieldDir.isPending());\n\n  protected showBusySpinner = signalDeferredLoading(this.isBusy);\n\n  private prefixDimensions = signalElementDimensions(this.prefixEl);\n\n  private resolvedSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const parentSurface = this.parentSurface();\n\n    if (!themes || !parentSurface) {\n      return null;\n    }\n\n    const paintsElevatedFill = this.formFieldDir.usesTextFieldShell() && this.fill() === FORM_FIELD_FILLS.FILLED;\n\n    return resolveSurfaceByElevation(\n      themes,\n      parentSurface.type,\n      parentSurface.elevation + (paintsElevatedFill ? 1 : 0),\n    );\n  });\n\n  public canAnimate = createCanAnimateSignal();\n\n  protected hasFloatingTextLabel = computed(\n    () =>\n      this.formFieldDir.usesTextFieldShell() &&\n      this.labelMode() !== FORM_FIELD_LABEL_MODES.STATIC &&\n      this.labelMode() !== FORM_FIELD_LABEL_MODES.INLINE,\n  );\n\n  protected hasInlineLabel = computed(\n    () => this.formFieldDir.usesTextFieldShell() && this.labelMode() === FORM_FIELD_LABEL_MODES.INLINE,\n  );\n\n  protected prefixOffset = computed(() => {\n    const width = this.prefixDimensions()?.offset?.width;\n\n    if (!width) {\n      return null;\n    }\n\n    return `calc(${width}px + var(--et-form-field-control-affix-gap))`;\n  });\n\n  constructor() {\n    wireFormSupport(this.support, {\n      errorContent: this.errorContent,\n      warningContent: this.warningContent,\n      hintContent: this.hintContent,\n      counterContent: this.counterContent,\n      errorAnimatable: this.errorAnimatable,\n      warningAnimatable: this.warningAnimatable,\n      hintAnimatable: this.hintAnimatable,\n    });\n\n    effect(() => {\n      const element = this.controlFrame()?.nativeElement ?? null;\n\n      untracked(() => this.formFieldDir.controlFrameElement.set(element));\n    });\n\n    effect(() => {\n      const surface = this.resolvedSurface();\n\n      untracked(() => {\n        if (surface) {\n          this.provideSurface.forceSurface(surface.name);\n\n          return;\n        }\n\n        this.provideSurface.clearForcedSurface();\n      });\n    });\n  }\n\n  protected handleFramePointerDown(event: MouseEvent) {\n    if (!this.formFieldDir.usesTextFieldShell()) {\n      return;\n    }\n\n    if (hitsInteractiveElement(event.target as HTMLElement, event.currentTarget as HTMLElement)) {\n      return;\n    }\n\n    event.preventDefault();\n    this.formFieldDir.activate();\n  }\n}\n","<div class=\"et-form-field-shell\">\n  <div #controlFrame (mousedown)=\"handleFramePointerDown($event)\" class=\"et-form-field-control-frame\">\n    <div #prefixEl class=\"et-form-field-affix et-form-field-prefix\">\n      <ng-content select=\"[etInputPrefix]\" />\n    </div>\n\n    <div class=\"et-form-field-control-area\">\n      <div\n        [class.et-form-field-label-area--floating]=\"hasFloatingTextLabel()\"\n        [class.et-form-field-label-area--inline]=\"hasInlineLabel()\"\n        class=\"et-form-field-label-area\"\n      >\n        <ng-content select=\"et-label\" />\n      </div>\n\n      <div class=\"et-form-field-control-slot\">\n        <ng-content />\n      </div>\n    </div>\n\n    <div class=\"et-form-field-affix et-form-field-suffix\">\n      <!-- Before the consumer's suffix: nothing may come between a control's own affordances and\n       the field they belong to. -->\n      @if (formFieldDir.registeredControlSuffix(); as controlSuffix) {\n        <ng-template [ngTemplateOutlet]=\"controlSuffix.templateRef\" />\n      }\n\n      <ng-content select=\"[etInputSuffix]\" />\n\n      <!-- After the consumer's own suffix, never instead of it. -->\n      @if (showBusySpinner()) {\n        <et-spinner class=\"et-form-field-busy-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n      }\n    </div>\n  </div>\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <div [style.block-size.px]=\"support.supportHeight()\" class=\"et-form-field-support\" etColorInteractiveExclude>\n    <div class=\"et-form-field-support-row\">\n      <div class=\"et-form-field-support-stack\">\n        @if (support.shouldRenderError()) {\n          <div\n            #errorContent\n            #errorAnimatable=\"etAnimatable\"\n            [id]=\"formFieldDir.errorId()\"\n            [attr.aria-atomic]=\"support.errorActive() ? 'true' : null\"\n            [attr.aria-hidden]=\"!support.errorActive() ? 'true' : null\"\n            [attr.aria-live]=\"support.errorActive() ? 'polite' : null\"\n            [attr.data-active]=\"support.errorActive() || null\"\n            [attr.data-direction]=\"support.errorDirection()\"\n            [attr.data-state]=\"support.errorState()\"\n            [etProvideColor]=\"support.errorColorTheme\"\n            class=\"et-form-field-support-content et-form-field-errors\"\n            etAnimatable\n          >\n            @for (error of support.visibleErrors(); track $index) {\n              <et-form-error [error]=\"error\" />\n            }\n          </div>\n        }\n\n        @if (support.shouldRenderWarning()) {\n          <div\n            #warningContent\n            #warningAnimatable=\"etAnimatable\"\n            [id]=\"formFieldDir.warningId()\"\n            [attr.aria-atomic]=\"support.warningActive() ? 'true' : null\"\n            [attr.aria-hidden]=\"!support.warningActive() ? 'true' : null\"\n            [attr.aria-live]=\"support.warningActive() ? 'polite' : null\"\n            [attr.data-active]=\"support.warningActive() || null\"\n            [attr.data-direction]=\"support.warningDirection()\"\n            [attr.data-state]=\"support.warningState()\"\n            [etProvideColor]=\"support.warningColorTheme()\"\n            class=\"et-form-field-support-content et-form-field-warnings\"\n            etAnimatable\n          >\n            @for (warning of support.visibleWarnings(); track $index) {\n              <et-form-warning [warning]=\"warning\" />\n            }\n          </div>\n        }\n\n        @if (support.shouldRenderHint()) {\n          <div\n            #hintContent\n            #hintAnimatable=\"etAnimatable\"\n            [id]=\"formFieldDir.hintId()\"\n            [attr.aria-hidden]=\"!support.hintActive() ? 'true' : null\"\n            [attr.data-active]=\"support.hintActive() || null\"\n            [attr.data-direction]=\"support.hintDirection()\"\n            [attr.data-state]=\"support.hintState()\"\n            class=\"et-form-field-support-content et-form-field-hint\"\n            etAnimatable\n          >\n            <ng-content select=\"et-hint\" />\n          </div>\n        }\n      </div>\n\n      <!-- Carries the error theme so the counter's own over-limit styling can reach the semantic\n       error color even before the field shows an error. -->\n      <div\n        #counterContent\n        [etProvideColor]=\"support.errorColorTheme\"\n        [hidden]=\"!formFieldDir.registeredCounter()\"\n        class=\"et-form-field-support-counter\"\n      >\n        <ng-content select=\"et-counter\" />\n      </div>\n    </div>\n  </div>\n}\n","import { InjectionToken, Signal, WritableSignal } from '@angular/core';\n\n/**\n * The contract a text control fulfills to host an `[etInputMask]`. `et-input` /\n * `input[etInput]` provide it out of the box; any other field directive opts in by\n * providing `INPUT_MASK_HOST` on itself\n * (`{ provide: INPUT_MASK_HOST, useExisting: MyFieldDirective }`).\n */\nexport type InputMaskHost = {\n  /** The text model the mask writes - raw or masked per `maskValueMode`. */\n  value: WritableSignal<string>;\n  /**\n   * Bulk-edit mixed state of the host, when it has one. While set, the mask leaves the\n   * host's (empty) mixed display alone instead of repainting the hidden raw value, and the\n   * first edit that produces raw content commits it and resolves the flag.\n   */\n  mixed?: WritableSignal<boolean>;\n  /** Whether the field has focus - drives the guide display. */\n  focused: Signal<boolean>;\n  /** The native input element the mask rewrites. */\n  nativeControl: Signal<HTMLInputElement | null>;\n  /** Stops the host's own `(input)` model-sync - the mask owns value-sync. */\n  suppressNativeSync(): void;\n  /**\n   * Restores the host's own `(input)` model-sync - called when an attached mask is\n   * set to `null`. Optional: hosts whose mask never changes at runtime can omit it.\n   */\n  resumeNativeSync?(): void;\n};\n\nexport const INPUT_MASK_HOST = new InjectionToken<InputMaskHost>('INPUT_MASK_HOST');\n","export const INPUT_TEXT_ALIGNMENTS = {\n  START: 'start',\n  CENTER: 'center',\n  END: 'end',\n} as const;\n\nexport type InputTextAlignment = (typeof INPUT_TEXT_ALIGNMENTS)[keyof typeof INPUT_TEXT_ALIGNMENTS];\n","import { computed, Directive, ElementRef, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES, TextFieldControlDirective } from '../../form-field/headless';\nimport { INPUT_MASK_HOST } from '../../masked-input/headless/input-mask-host';\nimport { INPUT_TEXT_ALIGNMENTS, InputTextAlignment } from '../input.types';\n\nexport const INPUT_TYPES = {\n  TEXT: 'text',\n  EMAIL: 'email',\n  PASSWORD: 'password',\n  TEL: 'tel',\n  URL: 'url',\n  SEARCH: 'search',\n} as const;\n\ntype InputType = (typeof INPUT_TYPES)[keyof typeof INPUT_TYPES];\n\n@Directive({\n  selector: '[etInput]',\n  // the built-in mask host - any [etInputMask] on the same element attaches through this\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: InputDirective }],\n  host: {\n    '(input)': 'handleNativeInput($event)',\n  },\n})\nexport class InputDirective extends TextFieldControlDirective implements FormValueControl<string> {\n  public value = model('');\n\n  public type = input<InputType>(INPUT_TYPES.TEXT);\n  public placeholder = input('');\n  public autocomplete = input('');\n  public textAlign = input<InputTextAlignment>(INPUT_TEXT_ALIGNMENTS.START);\n\n  /**\n   * When another directive drives value-sync itself (input masking rewrites the raw/display\n   * split in its own `(input)` handler), it suppresses ours so the two can't clobber each other.\n   */\n  private nativeSyncSuppressed = false;\n\n  // A bound field may hold `null` for \"empty\" (a nullable string field, e.g. the query form's\n  // search field), so neither of these may assume a string is there.\n  public hasValue = computed(() => this.mixed() || !!this.value());\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.TEXT_INPUT);\n\n  /** The text the native input renders - empty while mixed so the raw value never reaches the DOM. */\n  public displayValue = computed(() => (this.mixed() ? '' : (this.value() ?? '')));\n\n  /** The placeholder the native input renders - `mixedLabel` overrides the consumer placeholder while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  /**\n   * The native input element this directive controls. Set automatically when the\n   * directive is placed on an `<input>` element; otherwise the hosting component\n   * registers it. Integrations (e.g. input masking) attach through this signal.\n   */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  constructor() {\n    super();\n\n    const hostRef = inject<ElementRef<HTMLElement | null>>(ElementRef);\n    const hostElement = hostRef.nativeElement;\n\n    if (hostElement?.tagName === 'INPUT') {\n      this.nativeControl.set(hostElement as HTMLInputElement);\n      this.focusTarget.set(hostElement);\n    }\n  }\n\n  /** @internal Suppresses the built-in native `(input)` sync - see `nativeSyncSuppressed`. */\n  public suppressNativeSync() {\n    this.nativeSyncSuppressed = true;\n  }\n\n  /** @internal Restores the built-in native `(input)` sync - the mask calls this when set to `null`. */\n  public resumeNativeSync() {\n    this.nativeSyncSuppressed = false;\n  }\n\n  /**\n   * Keeps the model in sync while typing. The wrapper components also bind `(input)` on their\n   * inner element, so this is redundant there (it routes through the same sync); its real job is\n   * the standalone `input[etInput]` case, which otherwise has no listener updating the model.\n   */\n  protected handleNativeInput(event: Event) {\n    if (this.nativeSyncSuppressed || event.target !== this.nativeControl()) {\n      return;\n    }\n\n    this.syncFromNativeInput(event.target as HTMLInputElement);\n  }\n\n  /**\n   * @internal Routes a user edit from the native input into the model. Typing is the commit\n   * over a mixed state: the first edit that produces content replaces the raw value and\n   * resolves `mixed`; an edit that leaves the input empty keeps both untouched.\n   */\n  public syncFromNativeInput(inputElement: HTMLInputElement) {\n    if (this.mixed()) {\n      if (!inputElement.value) {\n        return;\n      }\n\n      this.mixed.set(false);\n    }\n\n    this.value.set(inputElement.value);\n  }\n}\n","import { computed, Directive, ElementRef, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES, TextFieldControlDirective } from '../../form-field/headless';\nimport { INPUT_TEXT_ALIGNMENTS, InputTextAlignment } from '../input.types';\n\n/** How one `stepBy` call departs from a plain single `step`. */\nexport type NumberInputStepOptions = {\n  /** Multiplies `step` for this call - `10` for the coarse modifier, `0.1` for the fine one. */\n  multiplier?: number;\n  /**\n   * Whether the step marks the control touched. A drag-to-scrub passes `false` and marks touched\n   * once the gesture ends, so scrubbing past a bound does not flash a validation error mid-drag.\n   */\n  markTouched?: boolean;\n};\n\n/**\n * The step multiplier a modifier-carrying event asks for: `Shift` steps 10x, `Alt`/`Option` steps\n * a tenth, and no modifier steps a plain `step`.\n *\n * `Ctrl`/`Cmd` is deliberately unused - it is a browser-zoom shortcut on several platforms.\n */\nexport const numberInputStepMultiplierFrom = (event: { shiftKey: boolean; altKey: boolean }) => {\n  if (event.shiftKey) return 10;\n  if (event.altKey) return 0.1;\n\n  return 1;\n};\n\nconst PAGE_STEP_MULTIPLIER = 100;\n\n@Directive({\n  selector: '[etNumberInput]',\n  host: {\n    '(keydown)': 'handleStepKeydown($event)',\n  },\n})\nexport class NumberInputDirective extends TextFieldControlDirective implements FormValueControl<number | null> {\n  public value = model<number | null>(null);\n\n  // `min`/`max` satisfy the signal-forms `FormValueControl` contract, which types them as\n  // `NonNullable<TValue> | undefined` - so they must be `number | undefined`, not `number | null`.\n  public min = input<number | undefined>(undefined);\n  public max = input<number | undefined>(undefined);\n  public step = input<number | null>(null);\n  public placeholder = input('');\n  public autocomplete = input('');\n  public textAlign = input<InputTextAlignment>(INPUT_TEXT_ALIGNMENTS.START);\n\n  public hasValue = computed(() => this.mixed() || this.value() !== null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.NUMBER_INPUT);\n\n  /** What the native input renders - empty while mixed so the raw value never reaches the DOM. */\n  public displayValue = computed(() => (this.mixed() ? '' : (this.value() ?? '')));\n\n  /** The placeholder the native input renders - `mixedLabel` overrides the consumer placeholder while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  /**\n   * The native input element this directive controls. Set automatically when the\n   * directive is placed on an `<input>` element; otherwise the hosting component\n   * registers it.\n   */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  /** The value stepping starts from - `0` while mixed (deriving from the hidden raw value would leak it). */\n  private steppingBase = computed(() => (this.mixed() ? 0 : (this.value() ?? 0)));\n\n  /** Whether stepping up would change the value - `false` at the `max` bound or while non-interactive. */\n  public canStepUp = computed(() => {\n    if (this.disabled() || this.readonly()) return false;\n\n    const max = this.max();\n\n    return max === undefined || this.steppingBase() < max;\n  });\n\n  /** Whether stepping down would change the value - `false` at the `min` bound or while non-interactive. */\n  public canStepDown = computed(() => {\n    if (this.disabled() || this.readonly()) return false;\n\n    const min = this.min();\n\n    return min === undefined || this.steppingBase() > min;\n  });\n\n  constructor() {\n    super();\n\n    const hostRef = inject<ElementRef<HTMLElement | null>>(ElementRef);\n    const hostElement = hostRef.nativeElement;\n\n    if (hostElement?.tagName === 'INPUT') {\n      this.nativeControl.set(hostElement as HTMLInputElement);\n      this.focusTarget.set(hostElement);\n    }\n  }\n\n  /**\n   * Steps the value by `step` (an empty or mixed value starts from `0`), clamped to `min`/`max`.\n   *\n   * Pass `multiplier` to step a coarser or finer amount than one `step` - a keyboard modifier, or\n   * the whole distance a scrub covered since the last move.\n   */\n  public stepBy(direction: 1 | -1, options?: NumberInputStepOptions) {\n    if (this.disabled() || this.readonly()) return;\n\n    const multiplier = options?.multiplier ?? 1;\n    const markTouched = options?.markTouched ?? true;\n    const step = this.step() ?? 1;\n    const current = this.steppingBase();\n    // the multiplier's own decimals count: a 0.1x step of a 0.1 step is 0.01, and reading the\n    // precision off the multiplied step would read float noise (0.1 * 0.1) as 18 decimals\n    const precision = Math.max(decimalPrecisionOf(step) + decimalPrecisionOf(multiplier), decimalPrecisionOf(current));\n    let next = Number((current + step * multiplier * direction).toFixed(precision));\n\n    const min = this.min();\n    const max = this.max();\n\n    if (min !== undefined) next = Math.max(min, next);\n    if (max !== undefined) next = Math.min(max, next);\n\n    if (this.mixed()) {\n      // stepping is a user commit - it replaces the hidden raw value and resolves mixed\n      this.mixed.set(false);\n      this.value.set(next);\n      if (markTouched) this.touched.set(true);\n\n      return;\n    }\n\n    if (next !== this.value()) {\n      this.value.set(next);\n      // stepping is a deliberate edit - mark touched so validation errors surface immediately,\n      // rather than staying hidden until a separate blur (typed entry already touches on blur)\n      if (markTouched) this.touched.set(true);\n    }\n  }\n\n  /**\n   * @internal Arrow and page keys step through {@link stepBy} rather than through the native\n   * input's own stepping, so every route into the value shares the mixed handling, the clamping\n   * and the `touched` marking - and so a modifier can change the magnitude.\n   */\n  public handleStepKeydown(event: KeyboardEvent) {\n    if (event.target !== this.nativeControl() || event.ctrlKey || event.metaKey) return;\n\n    const direction = STEP_KEY_DIRECTIONS[event.key];\n\n    if (!direction) return;\n\n    const isPageKey = event.key === 'PageUp' || event.key === 'PageDown';\n    const multiplier = isPageKey ? PAGE_STEP_MULTIPLIER : numberInputStepMultiplierFrom(event);\n\n    // the browser steps a native number input on the arrow keys by itself - without this its\n    // plain step lands on top of the multiplied one\n    event.preventDefault();\n    this.stepBy(direction, { multiplier });\n  }\n\n  /**\n   * @internal Routes a user edit from the native input into the model. Typing is the commit\n   * over a mixed state: the first edit that produces content replaces the raw value and\n   * resolves `mixed`; an edit that leaves the input empty keeps both untouched.\n   */\n  public syncFromNativeInput(inputElement: HTMLInputElement) {\n    if (this.mixed()) {\n      if (!inputElement.value) {\n        return;\n      }\n\n      this.mixed.set(false);\n    }\n\n    const parsed = inputElement.valueAsNumber;\n\n    this.value.set(Number.isNaN(parsed) ? null : parsed);\n  }\n}\n\nconst STEP_KEY_DIRECTIONS: Record<string, 1 | -1 | undefined> = {\n  ArrowUp: 1,\n  ArrowDown: -1,\n  PageUp: 1,\n  PageDown: -1,\n};\n\n/** Decimal places needed to represent `value` exactly - strips float noise from step math. */\nconst decimalPrecisionOf = (value: number) => {\n  const text = value.toString();\n\n  if (text.includes('e-')) {\n    return Number(text.split('e-')[1]);\n  }\n\n  const fraction = text.split('.')[1];\n\n  return fraction ? fraction.length : 0;\n};\n","const CHARACTER_CLASSES = [/[a-z]/, /[A-Z]/, /[0-9]/, /[^a-zA-Z0-9]/];\n\n/**\n * A deliberately simple zero-dependency strength score (0–4) from length and\n * character-class diversity. It is a typing-feedback heuristic, not a security\n * estimate - real policies (and dictionary checks à la zxcvbn) belong to the\n * schema/backend.\n */\nexport const scorePasswordStrength = (password: string) => {\n  if (!password.length) {\n    return 0;\n  }\n\n  const classes = CHARACTER_CLASSES.filter((pattern) => pattern.test(password)).length;\n  let score = 0;\n\n  if (password.length >= 8) {\n    score += 1;\n  }\n\n  if (password.length >= 12) {\n    score += 1;\n  }\n\n  if (classes >= 2) {\n    score += 1;\n  }\n\n  if (classes >= 4 || (classes >= 3 && password.length >= 10)) {\n    score += 1;\n  }\n\n  return score;\n};\n","import { computed, Directive, ElementRef, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES, TextFieldControlDirective } from '../../form-field/headless';\nimport { scorePasswordStrength } from './internals/password-strength';\n\n@Directive({\n  selector: '[etPasswordInput]',\n  exportAs: 'etPasswordInput',\n})\nexport class PasswordInputDirective extends TextFieldControlDirective implements FormValueControl<string> {\n  public value = model('');\n\n  public placeholder = input('');\n  public autocomplete = input('current-password');\n\n  // No `textAlign` (unlike `InputDirective`/`NumberInputDirective`) on purpose: the reveal toggle\n  // and Caps-Lock warning occupy the trailing edge, so `text-align: end` would run the value under\n  // them. Passwords are conventionally start-aligned regardless - the omission is deliberate.\n\n  /** Whether the value is currently shown as plain text. */\n  public revealed = model(false);\n\n  /**\n   * Whether Caps Lock is known to be on - feed it via `syncCapsLock`. Only ever `true` off a\n   * reading that can be trusted, so it lags one keystroke behind Caps Lock being switched on\n   * rather than reporting it as still on after it has been switched off.\n   */\n  public capsLockOn = signal(false);\n\n  /**\n   * A 0–4 typing-feedback score from a simple length + character-class heuristic -\n   * render it however you like (deliberately not a zxcvbn-style security estimate).\n   * `0` while mixed - scoring the hidden raw value would leak information about it.\n   */\n  public strength = computed(() => (this.mixed() ? 0 : scorePasswordStrength(this.value())));\n\n  /** The native `type` the input element should carry. */\n  public inputType = computed(() => (this.revealed() ? 'text' : 'password'));\n\n  public hasValue = computed(() => this.mixed() || this.value().length > 0);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.PASSWORD_INPUT);\n\n  /** The text the native input renders - empty while mixed so the raw value never reaches the DOM. */\n  public displayValue = computed(() => (this.mixed() ? '' : this.value()));\n\n  /** The placeholder the native input renders - `mixedLabel` overrides the consumer placeholder while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  /**\n   * The native input element this directive controls. Set automatically when the\n   * directive is placed on an `<input>` element; otherwise the hosting component\n   * registers it.\n   */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  constructor() {\n    super();\n\n    const hostRef = inject<ElementRef<HTMLElement | null>>(ElementRef);\n    const hostElement = hostRef.nativeElement;\n\n    if (hostElement?.tagName === 'INPUT') {\n      this.nativeControl.set(hostElement as HTMLInputElement);\n      this.focusTarget.set(hostElement);\n    }\n  }\n\n  /**\n   * @internal Routes a user edit from the native input into the model. Typing is the commit\n   * over a mixed state: the first edit that produces content replaces the raw value and\n   * resolves `mixed`; an edit that leaves the input empty keeps both untouched.\n   */\n  public syncFromNativeInput(inputElement: HTMLInputElement) {\n    if (this.mixed()) {\n      if (!inputElement.value) {\n        return;\n      }\n\n      this.mixed.set(false);\n    }\n\n    this.value.set(inputElement.value);\n  }\n\n  public toggleRevealed() {\n    if (this.disabled()) return;\n\n    this.revealed.update((revealed) => !revealed);\n  }\n\n  /**\n   * Feed keyboard, pointer or focus events from the native input so `capsLockOn` stays current.\n   * Pointer events matter for the focus case: clicking into an already-Caps-Lock-on field fires no\n   * keystroke, so the warning would otherwise not appear until the first key. Events that cannot\n   * report the state - `FocusEvent`, and the Caps Lock key itself - clear it.\n   */\n  public syncCapsLock(event: KeyboardEvent | MouseEvent | FocusEvent) {\n    // Two readings can't be trusted: a `FocusEvent` carries no modifier state at all, and on macOS\n    // the Caps Lock key's own keydown/keyup reports the state from before the toggle - which is why\n    // switching Caps Lock off used to leave the warning on. Drop the state for both and let the next\n    // real keystroke or pointer event re-establish it.\n    if (!('getModifierState' in event) || ('key' in event && event.key === 'CapsLock')) {\n      this.capsLockOn.set(false);\n\n      return;\n    }\n\n    this.capsLockOn.set(event.getModifierState('CapsLock'));\n  }\n}\n","import { afterNextRender, Component, ElementRef, inject, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { TEXT_FIELD_CONTROL_INPUTS } from '../form-field/headless/text-field-control.directive';\nimport { InputDirective } from './headless';\n\n@Component({\n  selector: 'et-input',\n  templateUrl: './input.component.html',\n  styleUrl: './input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: InputDirective,\n      inputs: ['type', 'placeholder', 'autocomplete', 'textAlign', 'value', ...TEXT_FIELD_CONTROL_INPUTS],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-input',\n    '(click)': 'inputDir.activate()',\n  },\n})\nexport class InputComponent {\n  protected inputDir = inject(InputDirective);\n\n  private nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n  constructor() {\n    afterNextRender(() => {\n      const nativeInput = this.nativeInput()?.nativeElement ?? null;\n\n      this.inputDir.focusTarget.set(nativeInput);\n      this.inputDir.nativeControl.set(nativeInput);\n    });\n  }\n\n  public syncNativeValue(event: Event) {\n    this.inputDir.syncFromNativeInput(event.target as HTMLInputElement);\n  }\n\n  public focus(options?: FocusOptions) {\n    this.inputDir.focus(options);\n  }\n}\n","<input\n  #nativeInput\n  [type]=\"inputDir.type()\"\n  [value]=\"inputDir.displayValue()\"\n  [disabled]=\"inputDir.disabled()\"\n  [readOnly]=\"inputDir.readonly()\"\n  [required]=\"inputDir.required()\"\n  [placeholder]=\"inputDir.effectivePlaceholder()\"\n  [attr.autocomplete]=\"inputDir.autocomplete() || null\"\n  [attr.name]=\"inputDir.name() || null\"\n  [attr.aria-invalid]=\"inputDir.shouldDisplayError() || null\"\n  [attr.aria-describedby]=\"inputDir.describedBy() || null\"\n  [attr.aria-label]=\"inputDir.ariaLabel() || null\"\n  [attr.aria-labelledby]=\"inputDir.labelId() || null\"\n  [attr.data-text-align]=\"inputDir.textAlign()\"\n  (input)=\"syncNativeValue($event)\"\n  (focus)=\"inputDir.focused.set(true)\"\n  (blur)=\"inputDir.focused.set(false); inputDir.touched.set(true)\"\n  class=\"et-input-native\"\n/>\n","import { ModelSignal, Signal, inputBinding, signal } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport {\n  AnchoredPanelCloseInfo,\n  AnchoredPanelOverlayRef,\n  AnchoredPanelSurfaceLike,\n  createAnchoredPanelController,\n} from '../../../form-field/headless';\nimport { anchoredOverlayStrategy, injectBottomSheetStrategy } from '../../../../overlay/strategies';\nimport { COLOR_INPUT_ERROR_CODES } from '../../color-input-errors';\n\nexport type ColorPickerOverlayCloseInfo = AnchoredPanelCloseInfo;\n\nexport type CreateColorPickerOverlayOptions = {\n  interactive: Signal<boolean>;\n  pickerOpen: ModelSignal<boolean>;\n  surface: Signal<AnchoredPanelSurfaceLike | null>;\n  anchor: () => HTMLElement | null | undefined;\n  context: () => unknown;\n  onAfterClosed?: (closeInfo: ColorPickerOverlayCloseInfo) => void;\n};\n\n/** Call in an injection context. */\nexport const createColorPickerOverlay = (options: CreateColorPickerOverlayOptions) => {\n  const bottomSheetStrategy = injectBottomSheetStrategy();\n  const overlayRef = signal<AnchoredPanelOverlayRef | null>(null);\n\n  const panel = createAnchoredPanelController({\n    canOpen: options.interactive,\n    open: options.pickerOpen,\n    overlayRef,\n    surface: options.surface,\n    anchor: options.anchor,\n    config: ({ origin, templateRef }) => ({\n      bindings: [inputBinding('template', () => templateRef), inputBinding('context', options.context)],\n      mode: 'non-modal',\n      // no top-level hasBackdrop: the bottom-sheet strategy brings its own, the anchored one falls\n      // back to the non-modal default (none)\n      autoFocus: 'first-tabbable',\n      restoreFocus: false,\n      // outside-pointer closing is owned by the controller: a pointerdown on the trigger must\n      // toggle instead of close-and-reopen\n      closeOnEscape: true,\n      closeOnOutsidePointer: false,\n      origin,\n      panelClass: 'et-color-input-overlay-pane',\n      strategies: () => [\n        {\n          strategy: bottomSheetStrategy.build({ hasBackdrop: true, containerClass: 'et-color-picker-sheet' }),\n        },\n        ...anchoredOverlayStrategy({\n          containerClass: ['et-overlay--anchored', 'et-overlay--color-picker'],\n          placement: 'bottom-start',\n          offset: 4,\n          viewportPadding: 8,\n        })().map((entry) => ({ ...entry, breakpoint: 'md' as const })),\n      ],\n    }),\n    onAfterClosed: (info) => options.onAfterClosed?.(info),\n    onMissingSurface: () => {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          COLOR_INPUT_ERROR_CODES.MISSING_SURFACE,\n          '[createColorPickerOverlay] Cannot open the picker without an <ng-template etColorPickerSurface> inside the host element.',\n        );\n      }\n    },\n  });\n\n  return {\n    close: () => panel.close(),\n  };\n};\n","import { Signal, WritableSignal, computed, signal, untracked } from '@angular/core';\nimport { HsvColor, formatHsvToHex, parseColorToHsv } from './color-convert';\n\nconst SEED_HSV: HsvColor = { hue: 0, saturation: 0, value: 0, alpha: 1 };\n\nexport type CreateColorPickerStateOptions = {\n  value: WritableSignal<string | null>;\n  mixed: WritableSignal<boolean>;\n  alpha: Signal<boolean>;\n  interactive: Signal<boolean>;\n};\n\nexport const createColorPickerState = (options: CreateColorPickerStateOptions) => {\n  const working = signal<HsvColor | null>(null);\n  const lastEmitted = signal<string | null>(null);\n\n  const hsv = computed(() => {\n    const current = working();\n\n    if (current && options.value() === lastEmitted()) {\n      return current;\n    }\n\n    if (options.mixed()) {\n      return SEED_HSV;\n    }\n\n    return parseColorToHsv(options.value()) ?? SEED_HSV;\n  });\n\n  const emit = (next: HsvColor) => {\n    if (!options.interactive()) {\n      return;\n    }\n\n    const resolved: HsvColor = { ...next, alpha: options.alpha() ? next.alpha : 1 };\n    const hex = formatHsvToHex(resolved, { alpha: options.alpha() });\n\n    working.set(resolved);\n    lastEmitted.set(hex);\n\n    if (untracked(options.mixed)) {\n      options.mixed.set(false);\n    }\n\n    options.value.set(hex);\n  };\n\n  return {\n    hsv,\n\n    setHue: (hue: number) => emit({ ...untracked(hsv), hue }),\n\n    setSaturationAndValue: (saturation: number, value: number) => emit({ ...untracked(hsv), saturation, value }),\n\n    setAlpha: (alpha: number) => emit({ ...untracked(hsv), alpha }),\n\n    commitColor: (color: string | null) => {\n      const parsed = parseColorToHsv(color);\n\n      if (!parsed) {\n        return false;\n      }\n\n      emit(parsed);\n\n      return true;\n    },\n  };\n};\n","import {\n  booleanAttribute,\n  computed,\n  inject,\n  Directive,\n  InjectionToken,\n  TemplateRef,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES, FORM_FIELD_TOKEN, TextFieldControlDirective } from '../../form-field/headless';\nimport { COLOR_NOTATION_ORDER, COLOR_NOTATIONS, ColorNotation } from '../color-input.types';\nimport { formatRgbToHex, parseColorToRgb } from './internals/color-convert';\nimport { createColorPickerOverlay } from './internals/color-picker-overlay';\nimport { createColorPickerState } from './internals/color-picker-state';\n\nexport type ColorInputTriggerBase = {\n  elementRef: { nativeElement: HTMLElement };\n};\n\nexport type ColorInputSurfaceBase = {\n  templateRef: TemplateRef<ColorInputSurfaceContext>;\n};\n\n/** Context of the template rendered inside the picker overlay pane. */\nexport type ColorInputSurfaceContext = {\n  $implicit: ColorInputDirective;\n  close: () => void;\n};\n\nexport const COLOR_INPUT_TOKEN = new InjectionToken<ColorInputDirective>('COLOR_INPUT_TOKEN');\n\n@Directive({\n  selector: '[etColorInput]',\n  providers: [{ provide: COLOR_INPUT_TOKEN, useExisting: ColorInputDirective }],\n})\nexport class ColorInputDirective extends TextFieldControlDirective implements FormValueControl<string | null> {\n  private ownFormField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  /** Hex color in `#rrggbb` notation - `#rrggbbaa` while `alpha` is on - or `null` when nothing was picked yet. */\n  public value = model<string | null>(null);\n\n  /**\n   * Adds an opacity track to the picker and widens the emitted value to `#rrggbbaa`. Pair it with\n   * `hexColor({ allowAlpha: true })` if the field is validated.\n   */\n  public alpha = input(false, { transform: booleanAttribute });\n\n  /**\n   * Preset colors offered in the picker, in any notation the color validators accept. An entry that\n   * cannot be read is dropped rather than rendered as a broken swatch.\n   */\n  public swatches = input<readonly string[]>([]);\n\n  /**\n   * The notations the picker's entry field offers, in the order its switch cycles through them.\n   * More than one shows the switch; exactly one pins the field to that notation, and an entry in\n   * another notation is converted to it with an advisory under the field.\n   */\n  public notations = input<readonly ColorNotation[]>(COLOR_NOTATION_ORDER);\n\n  /** Whether the picker overlay is open. */\n  public pickerOpen = model(false);\n\n  /** @internal */\n  public expanded = computed(() => this.pickerOpen());\n\n  public hasValue = computed(() => this.mixed() || !!this.value());\n\n  /** Whether the control accepts a new color - the picker refuses to open while it does not. */\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  /** The color the picker and the field preview paint - black until a value is picked, and while mixed. */\n  public resolvedColor = computed(() => (this.mixed() ? '#000000' : (this.value() ?? '#000000')));\n\n  /** The color the swatch paints - `null` while mixed. */\n  public swatchColor = computed(() => (this.mixed() ? null : this.resolvedColor()));\n\n  /** The text the value slot renders - `mixedLabel` while mixed. */\n  public displayValue = computed(() => (this.mixed() ? this.resolvedMixedLabel() : (this.value() ?? '')));\n\n  /** The presets that could be read, as canonical hex. */\n  public resolvedSwatches = computed(() => {\n    const withAlpha = this.alpha();\n    const seen = new Set<string>();\n\n    for (const entry of this.swatches()) {\n      const parsed = parseColorToRgb(entry);\n\n      if (parsed) {\n        seen.add(formatRgbToHex(parsed, { alpha: withAlpha }));\n      }\n    }\n\n    return [...seen];\n  });\n\n  /**\n   * The notations the panel actually offers: the given ones, deduplicated, with anything the picker\n   * cannot read dropped. An empty result falls back to hex.\n   */\n  public resolvedNotations = computed<readonly [ColorNotation, ...ColorNotation[]]>(() => {\n    const offered = [...new Set(this.notations())].filter((notation) =>\n      COLOR_NOTATION_ORDER.includes(notation as (typeof COLOR_NOTATION_ORDER)[number]),\n    );\n\n    return offered.length ? (offered as [ColorNotation, ...ColorNotation[]]) : [COLOR_NOTATIONS.HEX];\n  });\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.COLOR_INPUT);\n\n  /** @internal */\n  public registeredTrigger = signal<ColorInputTriggerBase | null>(null);\n\n  /** @internal */\n  public registeredSurface = signal<ColorInputSurfaceBase | null>(null);\n\n  /** @internal */\n  public picker = createColorPickerState({\n    value: this.value,\n    mixed: this.mixed,\n    alpha: this.alpha,\n    interactive: this.interactive,\n  });\n\n  private overlay = createColorPickerOverlay({\n    interactive: this.interactive,\n    pickerOpen: this.pickerOpen,\n    surface: this.registeredSurface,\n    anchor: () => this.resolveAnchorElement(),\n    context: () => ({ $implicit: this, close: () => this.overlay.close() }) satisfies ColorInputSurfaceContext,\n    onAfterClosed: (info) => {\n      this.touched.set(true);\n\n      if (!info.byOutsidePointer && !info.byFocusLeave && !info.fromBottomSheet) {\n        this.focus();\n      }\n    },\n  });\n\n  public openPicker() {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.pickerOpen.set(true);\n  }\n\n  public closePicker() {\n    this.pickerOpen.set(false);\n  }\n\n  public togglePicker() {\n    if (this.pickerOpen()) {\n      this.closePicker();\n\n      return;\n    }\n\n    this.openPicker();\n  }\n\n  private resolveAnchorElement() {\n    return this.ownFormField?.controlFrameElement() ?? this.registeredTrigger()?.elementRef.nativeElement;\n  }\n}\n","export type PointerFractionOptions = {\n  /** The pointer's position along the axis, in client coordinates. */\n  position: number;\n  /** The axis start, in client coordinates. */\n  start: number;\n  size: number;\n};\n\n/**\n * Deliberately not mirrored for RTL, unlike the slider: the gradients paint left to right in every\n * direction, so mirroring the reading would put the value and the picture it is read off at odds.\n */\nexport const fractionFromPointer = (options: PointerFractionOptions) => {\n  if (options.size <= 0) {\n    return 0;\n  }\n\n  return Math.min(1, Math.max(0, (options.position - options.start) / options.size));\n};\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DragGestureEvent, RuntimeError, dragGestureFrom } from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { COLOR_INPUT_ERROR_CODES } from '../color-input-errors';\nimport { COLOR_INPUT_TOKEN } from './color-input.directive';\nimport { hueToCssColor } from './internals/color-convert';\nimport { fractionFromPointer } from './internals/color-picker-engine';\n\n/**\n * The two-dimensional saturation and brightness surface of a color picker: saturation along the\n * inline axis, brightness up the block axis. Owns the pointer drag; the keyboard path belongs to the\n * two range inputs the panel places inside it.\n */\n@Directive({\n  selector: '[etColorPickerArea]',\n  exportAs: 'etColorPickerArea',\n  host: {\n    class: 'et-color-picker-area',\n    '[style.touch-action]': '\"none\"',\n    '[style.--_et-color-picker-area-hue]': 'hueColor()',\n    '(pointerdown)': 'handlePointerDown($event)',\n  },\n})\nexport class ColorPickerAreaDirective {\n  private colorInput = inject(COLOR_INPUT_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  /** The fully saturated color at the current hue. */\n  public hueColor = computed(() => hueToCssColor(this.colorInput?.picker.hsv().hue ?? 0));\n\n  public saturationPercent = computed(() => (this.colorInput?.picker.hsv().saturation ?? 0) * 100);\n\n  public brightnessPercent = computed(() => (this.colorInput?.picker.hsv().value ?? 0) * 100);\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.colorInput) {\n          throw new RuntimeError(\n            COLOR_INPUT_ERROR_CODES.AREA_OUTSIDE_COLOR_INPUT,\n            '[ColorPickerAreaDirective] etColorPickerArea must be placed inside an [etColorInput] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handlePointerDown(event: PointerEvent) {\n    const colorInput = this.colorInput;\n\n    if (!colorInput?.interactive() || event.button !== 0) {\n      return;\n    }\n\n    this.commitFromPosition(event.clientX, event.clientY);\n\n    event.preventDefault();\n\n    dragGestureFrom(event, this.elementRef.nativeElement, { commitThreshold: 0 })\n      .pipe(\n        tap((gesture) => this.applyGesture(gesture)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private applyGesture(gesture: DragGestureEvent) {\n    if (gesture.type === 'move' || gesture.type === 'end') {\n      this.commitFromPosition(gesture.data.clientX, gesture.data.clientY);\n    }\n  }\n\n  private commitFromPosition(clientX: number, clientY: number) {\n    const rect = this.elementRef.nativeElement.getBoundingClientRect();\n    const saturation = fractionFromPointer({ position: clientX, start: rect.left, size: rect.width });\n    const brightness = 1 - fractionFromPointer({ position: clientY, start: rect.top, size: rect.height });\n\n    this.colorInput?.picker.setSaturationAndValue(saturation, brightness);\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { COLOR_INPUT_ERROR_CODES } from '../color-input-errors';\nimport { COLOR_INPUT_TOKEN } from './color-input.directive';\n\nexport type ColorPickerChannel = 'saturation' | 'brightness' | 'hue' | 'alpha';\n\ntype ChannelConfig = {\n  max: number;\n  unit: string;\n};\n\nconst CHANNEL_CONFIGS: Record<ColorPickerChannel, ChannelConfig> = {\n  saturation: { max: 100, unit: '%' },\n  brightness: { max: 100, unit: '%' },\n  hue: { max: 360, unit: '°' },\n  alpha: { max: 100, unit: '%' },\n};\n\n/**\n * Binds a native range input to one channel of the picker's color. The input carries the whole\n * keyboard and touch story - arrow keys, `Home`, `End`, page keys and the platform's own touch\n * handling.\n *\n * Stretch the input over its track and hide it visually, and the same input becomes the track's\n * pointer handling too. The area is the exception: two channels cannot share one pointer, so its\n * inputs take no pointer events and `etColorPickerArea` drives the drag.\n */\n@Directive({\n  selector: 'input[etColorPickerChannel]',\n  exportAs: 'etColorPickerChannel',\n  host: {\n    type: 'range',\n    min: '0',\n    step: '1',\n    class: 'et-color-picker-channel',\n    '[max]': 'config().max',\n    '[value]': 'value()',\n    '[disabled]': 'colorInput ? !colorInput.interactive() : false',\n    '[attr.aria-valuetext]': 'valueText()',\n    '(input)': 'commit($event)',\n  },\n})\nexport class ColorPickerChannelDirective {\n  /** @internal */\n  public colorInput = inject(COLOR_INPUT_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  public channel = input.required<ColorPickerChannel>({ alias: 'etColorPickerChannel' });\n\n  protected config = computed(() => CHANNEL_CONFIGS[this.channel()]);\n\n  protected value = computed(() => {\n    const hsv = this.colorInput?.picker.hsv();\n\n    if (!hsv) {\n      return 0;\n    }\n\n    switch (this.channel()) {\n      case 'saturation':\n        return hsv.saturation * 100;\n      case 'brightness':\n        return hsv.value * 100;\n      case 'hue':\n        return hsv.hue;\n      case 'alpha':\n        return hsv.alpha * 100;\n    }\n  });\n\n  protected valueText = computed(() => `${Math.round(this.value())}${this.config().unit}`);\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.colorInput) {\n          throw new RuntimeError(\n            COLOR_INPUT_ERROR_CODES.TRACK_OUTSIDE_COLOR_INPUT,\n            '[ColorPickerChannelDirective] etColorPickerChannel must be placed inside an [etColorInput] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected commit(event: Event) {\n    const picker = this.colorInput?.picker;\n    const hsv = this.colorInput?.picker.hsv();\n\n    if (!picker || !hsv) {\n      return;\n    }\n\n    const next = Number((event.target as HTMLInputElement).value);\n\n    if (!Number.isFinite(next)) {\n      return;\n    }\n\n    switch (this.channel()) {\n      case 'saturation':\n        return picker.setSaturationAndValue(next / 100, hsv.value);\n      case 'brightness':\n        return picker.setSaturationAndValue(hsv.saturation, next / 100);\n      case 'hue':\n        return picker.setHue(next);\n      case 'alpha':\n        return picker.setAlpha(next / 100);\n    }\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError, injectHostElement } from '@ethlete/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { COLOR_INPUT_ERROR_CODES } from '../color-input-errors';\nimport { COLOR_INPUT_TOKEN, ColorInputSurfaceContext } from './color-input.directive';\n\n/** The template rendered inside a color control's picker overlay pane. */\n@Directive({\n  selector: 'ng-template[etColorPickerSurface]',\n  exportAs: 'etColorPickerSurface',\n})\nexport class ColorPickerSurfaceDirective {\n  private colorInput = inject(COLOR_INPUT_TOKEN, { optional: true });\n  public templateRef = inject<TemplateRef<ColorInputSurfaceContext>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerSingleton(this.colorInput?.registeredSurface, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.colorInput) {\n          throw new RuntimeError(\n            COLOR_INPUT_ERROR_CODES.SURFACE_OUTSIDE_COLOR_INPUT,\n            '[ColorPickerSurfaceDirective] etColorPickerSurface must be placed inside an [etColorInput] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { COLOR_INPUT_ERROR_CODES } from '../color-input-errors';\nimport { COLOR_INPUT_TOKEN } from './color-input.directive';\n\n/** The button that opens a color control's picker overlay, and the field's single tab stop. */\n@Directive({\n  selector: 'button[etColorPickerTrigger]',\n  exportAs: 'etColorPickerTrigger',\n  host: {\n    type: 'button',\n    'aria-haspopup': 'dialog',\n    '[attr.aria-expanded]': 'colorInput?.pickerOpen() || false',\n    '[attr.aria-required]': 'colorInput?.required() || null',\n    '[attr.aria-invalid]': 'colorInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'colorInput?.describedBy() || null',\n    '[attr.aria-label]': 'colorInput?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'colorInput?.labelId() || null',\n    '[attr.aria-readonly]': 'colorInput?.readonly() || null',\n    '[attr.data-readonly]': 'colorInput?.readonly() || null',\n    '[disabled]': 'colorInput?.disabled() || false',\n    '(click)': 'colorInput?.togglePicker()',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class ColorPickerTriggerDirective {\n  /** @internal */\n  public colorInput = inject(COLOR_INPUT_TOKEN, { optional: true });\n  public elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n  constructor() {\n    const colorInput = this.colorInput;\n\n    registerSingleton(colorInput?.registeredTrigger, this);\n\n    if (colorInput) {\n      colorInput.focusTarget.set(this.elementRef.nativeElement);\n    }\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.colorInput) {\n          throw new RuntimeError(\n            COLOR_INPUT_ERROR_CODES.TRIGGER_OUTSIDE_COLOR_INPUT,\n            '[ColorPickerTriggerDirective] etColorPickerTrigger must be placed inside an [etColorInput] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleFocus() {\n    this.colorInput?.focused.set(true);\n  }\n\n  protected handleBlur() {\n    this.colorInput?.focused.set(false);\n\n    if (!this.colorInput?.pickerOpen()) {\n      this.colorInput?.touched.set(true);\n    }\n  }\n}\n","import { EMPTY, Observable, catchError, defer, from, map } from 'rxjs';\n\ntype EyeDropperHandle = {\n  open: () => Promise<{ sRGBHex: string }>;\n};\n\ntype EyeDropperCapableWindow = Window & {\n  EyeDropper?: new () => EyeDropperHandle;\n};\n\nconst eyeDropperWindow = (documentRef: Document) => documentRef.defaultView as EyeDropperCapableWindow | null;\n\nexport const isEyeDropperSupported = (documentRef: Document) => !!eyeDropperWindow(documentRef)?.EyeDropper;\n\nexport const eyeDropperColor = (documentRef: Document): Observable<string> =>\n  defer(() => {\n    const EyeDropper = eyeDropperWindow(documentRef)?.EyeDropper;\n\n    if (!EyeDropper) {\n      return EMPTY;\n    }\n\n    return from(new EyeDropper().open()).pipe(\n      map((result) => result.sRGBHex),\n      catchError(() => EMPTY),\n    );\n  });\n","import { DOCUMENT } from '@angular/common';\nimport {\n  Component,\n  DestroyRef,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  inject,\n  linkedSignal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AutoSurfaceDirective, ProvideColorDirective } from '@ethlete/core';\nimport { EYEDROPPER_ICON, IconDirective, provideIcons } from '../../icon/headless';\nimport { tap } from 'rxjs';\nimport { FormFieldComponent } from '../form-field/form-field.component';\nimport { injectOverlaySurfaceContext } from '../form-field/headless';\nimport { InputPrefixDirective, InputSuffixDirective } from '../form-field/partials';\nimport { InputComponent } from '../input/input.component';\nimport { injectColorInputLabels } from './color-input-labels';\nimport { ColorNotation } from './color-input.types';\nimport { COLOR_INPUT_TOKEN, ColorPickerAreaDirective, ColorPickerChannelDirective } from './headless';\nimport { detectColorNotation, formatHsvToHex, formatHsvToNotation, HsvColor } from './headless/internals/color-convert';\nimport { eyeDropperColor, isEyeDropperSupported } from './headless/internals/eye-dropper';\n\n@Component({\n  selector: 'et-color-picker-panel',\n  templateUrl: './color-picker-panel.component.html',\n  styleUrl: './color-picker-panel.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ColorPickerAreaDirective,\n    ColorPickerChannelDirective,\n    FormFieldComponent,\n    IconDirective,\n    InputComponent,\n    InputPrefixDirective,\n    InputSuffixDirective,\n  ],\n  providers: [provideIcons(EYEDROPPER_ICON)],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  // the trigger promises `aria-haspopup=\"dialog\"`, so the mounted pane has to be a named dialog -\n  // without this, screen reader users land in an unnamed generic container\n  host: {\n    class: 'et-color-picker-panel',\n    role: 'dialog',\n    '[attr.aria-label]': 'labels().dialog',\n  },\n})\nexport class ColorPickerPanelComponent {\n  protected colorInput = inject(COLOR_INPUT_TOKEN);\n  protected labels = injectColorInputLabels();\n\n  private destroyRef = inject(DestroyRef);\n  private documentRef = inject(DOCUMENT);\n\n  // observed instead of the host: the host's used size is overridden by the resize animation\n  // itself, so observing it directly would feed the animation back into the observer\n  private panelBody = viewChild<ElementRef<HTMLElement>>('panelBody');\n\n  protected showEyeDropper = isEyeDropperSupported(this.documentRef);\n\n  protected canonicalHex = computed(() =>\n    formatHsvToHex(this.colorInput.picker.hsv(), { alpha: this.colorInput.alpha() }),\n  );\n\n  protected opaqueHex = computed(() => formatHsvToHex({ ...this.colorInput.picker.hsv(), alpha: 1 }));\n\n  protected notation = linkedSignal<readonly [ColorNotation, ...ColorNotation[]], ColorNotation>({\n    source: () => this.colorInput.resolvedNotations(),\n    // untracked: a linkedSignal computation tracks what it reads, and committing writes hex back to\n    // the value - tracking it would pull the display to hex after every entry\n    computation: (offered) => {\n      const bound = untracked(() => detectColorNotation(this.colorInput.value()));\n\n      return bound && offered.includes(bound) ? bound : offered[0];\n    },\n  });\n\n  private displayColor = computed(() =>\n    formatHsvToNotation(this.colorInput.picker.hsv(), { notation: this.notation(), alpha: this.colorInput.alpha() }),\n  );\n\n  protected colorDraft = linkedSignal(() => this.displayColor());\n\n  protected notationWarning = linkedSignal<HsvColor, string | null>({\n    source: () => this.colorInput.picker.hsv(),\n    computation: () => null,\n  });\n\n  protected notationLabel = computed(() => this.labels()[this.notation()]);\n\n  protected canSwitchNotation = computed(() => this.colorInput.resolvedNotations().length > 1);\n\n  protected huePercent = computed(() => (this.colorInput.picker.hsv().hue / 360) * 100);\n\n  protected alphaPercent = computed(() => this.colorInput.picker.hsv().alpha * 100);\n\n  constructor() {\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    injectOverlaySurfaceContext({ panelBody: this.panelBody, resizingClass: 'et-color-picker-panel--resizing' });\n  }\n\n  protected commitColorDraft() {\n    const entered = this.colorDraft();\n    const enteredNotation = detectColorNotation(entered);\n    const isOffered = !!enteredNotation && this.colorInput.resolvedNotations().includes(enteredNotation);\n\n    this.notationWarning.set(null);\n\n    if (enteredNotation) {\n      if (isOffered) {\n        this.notation.set(enteredNotation);\n      }\n\n      // the advisory is set after the commit, never before: committing changes the picked color,\n      // which is what drops a stale advisory\n      this.colorInput.picker.commitColor(entered);\n\n      if (!isOffered) {\n        this.notationWarning.set(this.labels().notationConverted(this.notationLabel()));\n      }\n    }\n\n    this.colorDraft.set(this.displayColor());\n  }\n\n  protected handleDraftInput(draft: string) {\n    this.colorDraft.set(draft);\n\n    this.notationWarning.set(null);\n  }\n\n  protected switchNotation() {\n    const offered = this.colorInput.resolvedNotations();\n    const next = offered[(offered.indexOf(this.notation()) + 1) % offered.length];\n\n    if (next) {\n      this.notation.set(next);\n      this.notationWarning.set(null);\n    }\n  }\n\n  protected handleColorKeydown(event: KeyboardEvent) {\n    if (event.key !== 'Enter') {\n      return;\n    }\n\n    event.preventDefault();\n    this.commitColorDraft();\n  }\n\n  protected openEyeDropper() {\n    eyeDropperColor(this.documentRef)\n      .pipe(\n        tap((color) => this.colorInput.picker.commitColor(color)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","<div #panelBody class=\"et-color-picker-panel-body\">\n  <div #area=\"etColorPickerArea\" [attr.aria-label]=\"labels().area\" etColorPickerArea role=\"group\">\n    <span\n      [style.inset-inline-start.%]=\"area.saturationPercent()\"\n      [style.inset-block-end.%]=\"area.brightnessPercent()\"\n      [style.background-color]=\"opaqueHex()\"\n      class=\"et-color-picker-area-thumb\"\n      aria-hidden=\"true\"\n    ></span>\n\n    <input [attr.aria-label]=\"labels().saturation\" etColorPickerChannel=\"saturation\" />\n    <input [attr.aria-label]=\"labels().brightness\" etColorPickerChannel=\"brightness\" />\n  </div>\n\n  <div class=\"et-color-picker-track et-color-picker-track--hue\">\n    <span\n      [style.inset-inline-start.%]=\"huePercent()\"\n      [style.background-color]=\"area.hueColor()\"\n      class=\"et-color-picker-track-thumb\"\n      aria-hidden=\"true\"\n    ></span>\n    <input [attr.aria-label]=\"labels().hue\" etColorPickerChannel=\"hue\" />\n  </div>\n\n  @if (colorInput.alpha()) {\n    <div\n      [style.--_et-color-picker-alpha-color]=\"opaqueHex()\"\n      class=\"et-color-picker-track et-color-picker-track--alpha\"\n    >\n      <span\n        [style.inset-inline-start.%]=\"alphaPercent()\"\n        [style.background-color]=\"canonicalHex()\"\n        class=\"et-color-picker-track-thumb\"\n        aria-hidden=\"true\"\n      ></span>\n      <input [attr.aria-label]=\"labels().alpha\" etColorPickerChannel=\"alpha\" />\n    </div>\n  }\n\n  @if (colorInput.resolvedSwatches().length) {\n    <div [attr.aria-label]=\"labels().swatches\" class=\"et-color-picker-swatches\" role=\"group\">\n      @for (swatch of colorInput.resolvedSwatches(); track swatch) {\n        <button\n          [style.background-color]=\"swatch\"\n          [attr.aria-label]=\"swatch\"\n          [attr.aria-pressed]=\"swatch === canonicalHex()\"\n          [disabled]=\"!colorInput.interactive()\"\n          (click)=\"colorInput.picker.commitColor(swatch)\"\n          class=\"et-color-picker-swatch\"\n          type=\"button\"\n        ></button>\n      }\n    </div>\n  }\n\n  <et-form-field class=\"et-color-picker-value\" size=\"sm\">\n    <span\n      [style.--_et-color-picker-preview-color]=\"canonicalHex()\"\n      class=\"et-color-picker-preview\"\n      etInputPrefix\n      aria-hidden=\"true\"\n    ></span>\n\n    <et-input\n      [value]=\"colorDraft()\"\n      [warnings]=\"notationWarning()\"\n      [disabled]=\"!colorInput.interactive()\"\n      [aria-label]=\"labels().value + ', ' + notationLabel()\"\n      (valueChange)=\"handleDraftInput($event)\"\n      (change)=\"commitColorDraft()\"\n      (keydown)=\"handleColorKeydown($event)\"\n      autocomplete=\"off\"\n    />\n\n    @if (canSwitchNotation()) {\n      <button\n        [attr.aria-label]=\"labels().notation(notationLabel())\"\n        [disabled]=\"!colorInput.interactive()\"\n        (click)=\"switchNotation()\"\n        class=\"et-color-picker-notation\"\n        etInputSuffix\n        type=\"button\"\n      >\n        {{ notationLabel() }}\n      </button>\n    } @else {\n      <span class=\"et-color-picker-notation\" etInputSuffix aria-hidden=\"true\">{{ notationLabel() }}</span>\n    }\n\n    @if (showEyeDropper) {\n      <button\n        [attr.aria-label]=\"labels().eyedropper\"\n        [disabled]=\"!colorInput.interactive()\"\n        (click)=\"openEyeDropper()\"\n        class=\"et-color-picker-eyedropper\"\n        etInputSuffix\n        type=\"button\"\n      >\n        <i etIcon=\"et-eyedropper\"></i>\n      </button>\n    }\n  </et-form-field>\n</div>\n","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { injectColorInputLabels } from './color-input-labels';\nimport { ColorPickerPanelComponent } from './color-picker-panel.component';\nimport { ColorInputDirective, ColorPickerSurfaceDirective, ColorPickerTriggerDirective } from './headless';\nimport { TEXT_FIELD_CONTROL_INPUTS } from '../form-field/headless/text-field-control.directive';\n\n@Component({\n  selector: 'et-color-input',\n  templateUrl: './color-input.component.html',\n  styleUrl: './color-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ColorPickerPanelComponent, ColorPickerSurfaceDirective, ColorPickerTriggerDirective],\n  hostDirectives: [\n    {\n      directive: ColorInputDirective,\n      inputs: ['value', 'alpha', 'swatches', 'notations', 'pickerOpen', ...TEXT_FIELD_CONTROL_INPUTS],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-color-input',\n    '(click)': 'colorInputDir.activate()',\n  },\n})\nexport class ColorInputComponent {\n  protected colorInputDir = inject(ColorInputDirective);\n  public labels = injectColorInputLabels();\n\n  protected fallbackTriggerLabel = computed(() =>\n    this.colorInputDir.hasCustomAccessibleName() || this.colorInputDir.labelId() ? null : this.labels().pickerTrigger,\n  );\n\n  public focus(options?: FocusOptions) {\n    this.colorInputDir.focus(options);\n  }\n}\n","<button [attr.aria-label]=\"fallbackTriggerLabel()\" class=\"et-color-input-trigger\" etColorPickerTrigger>\n  <span\n    [style.--_et-color-input-swatch-color]=\"colorInputDir.swatchColor()\"\n    class=\"et-color-input-swatch\"\n    aria-hidden=\"true\"\n  ></span>\n  <span class=\"et-color-input-value\">{{ colorInputDir.displayValue() }}</span>\n</button>\n\n<ng-template etColorPickerSurface>\n  <et-color-picker-panel />\n</ng-template>\n","import { ColorInputComponent } from './color-input.component';\nimport { ColorPickerPanelComponent } from './color-picker-panel.component';\nimport {\n  ColorInputDirective,\n  ColorPickerAreaDirective,\n  ColorPickerChannelDirective,\n  ColorPickerSurfaceDirective,\n  ColorPickerTriggerDirective,\n} from './headless';\n\nexport const COLOR_INPUT_IMPORTS = [\n  ColorInputComponent,\n  ColorInputDirective,\n  ColorPickerAreaDirective,\n  ColorPickerChannelDirective,\n  ColorPickerPanelComponent,\n  ColorPickerSurfaceDirective,\n  ColorPickerTriggerDirective,\n] as const;\n","// codes 3000-3099\nexport const DATE_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_DATE_INPUT: 3000,\n  TRIGGER_OUTSIDE_DATE_INPUT: 3001,\n  SURFACE_OUTSIDE_DATE_INPUT: 3002,\n  MISSING_SURFACE: 3003,\n} as const;\n","// codes 3200-3299\nexport const MASKED_INPUT_ERROR_CODES = {\n  MASK_OUTSIDE_INPUT: 3200,\n} as const;\n","/**\n * A mask definition: a pair of pure text transforms plus caret metadata. Pattern\n * strings passed to `[etInputMask]` are compiled into one of these; the shipped\n * factories (`createCurrencyMask`, `createIbanMask`, `createCardMask`) and custom\n * masks provide it directly.\n */\nexport type MaskSpec = {\n  /**\n   * Filters arbitrary text down to the raw value - it defines which characters\n   * count as content (everything else is formatting or noise). Must be\n   * idempotent: `toRaw(toRaw(x)) === toRaw(x)`.\n   */\n  toRaw(text: string): string;\n  /**\n   * Formats a raw value for display. Must return `''` for an empty raw value and\n   * round-trip cleanly: `toRaw(toDisplay(raw)) === raw`.\n   */\n  toDisplay(raw: string): string;\n  /**\n   * Whether a raw value fills every required slot. Pattern-compiled masks implement it\n   * (`0`/`a`/`*` slots are required, `9` optional); spec objects may leave it out when\n   * completeness is not a meaningful concept (open-ended masks like currency).\n   */\n  isComplete?(raw: string): boolean;\n  /** Optional focused-state display that renders unfilled slots (e.g. `12-__`). */\n  toGuideDisplay?(raw: string): string;\n  /** The character `toGuideDisplay` uses for unfilled slots - caret logic stops at it. */\n  placeholderChar?: string;\n  /**\n   * How the caret re-anchors after re-formatting: `'start'` preserves the content\n   * before the caret (pattern masks), `'end'` preserves the content after it\n   * (right-growing numbers like currency). Defaults to `'start'`.\n   */\n  caretAnchor?: 'start' | 'end';\n};\n\nexport const MASK_VALUE_MODES = {\n  /** The form value is the unmasked raw text (default). */\n  RAW: 'raw',\n  /** The form value is the masked display text. */\n  MASKED: 'masked',\n} as const;\n\nexport type MaskValueMode = (typeof MASK_VALUE_MODES)[keyof typeof MASK_VALUE_MODES];\n","import { MaskSpec } from '../input-mask.types';\n\ntype CaretQuery = {\n  spec: MaskSpec;\n  display: string;\n  count: number;\n};\n\n/** The smallest caret position in `display` with `count` raw characters before it. */\nexport const caretForRawCount = (query: CaretQuery) => {\n  const { spec, display, count } = query;\n\n  for (let index = 0; index <= display.length; index++) {\n    if (spec.toRaw(display.slice(0, index)).length >= count) {\n      return index;\n    }\n  }\n\n  return display.length;\n};\n\n/**\n * Moves the caret forward past formatting characters so the next keystroke lands in\n * a slot (e.g. after `12` completes to `12-`, the caret belongs after the dash).\n * Stops at unfilled guide slots.\n */\nexport const advanceCaretPastLiterals = (options: { spec: MaskSpec; display: string; caret: number }) => {\n  const { spec, display, caret } = options;\n  let advanced = caret;\n\n  while (advanced < display.length) {\n    const char = display[advanced];\n\n    if (char === spec.placeholderChar) {\n      break;\n    }\n\n    // a character that increases the raw count is content, not formatting\n    if (spec.toRaw(display.slice(0, advanced + 1)).length > spec.toRaw(display.slice(0, advanced)).length) {\n      break;\n    }\n\n    advanced += 1;\n  }\n\n  return advanced;\n};\n\nexport const renderMaskDisplay = (options: { spec: MaskSpec; raw: string; guide: boolean }) => {\n  const { spec, raw, guide } = options;\n\n  return guide && spec.toGuideDisplay ? spec.toGuideDisplay(raw) : spec.toDisplay(raw);\n};\n\nexport type MaskEditOptions = {\n  spec: MaskSpec;\n  /** The raw value before this edit - detects edits that only removed formatting. */\n  previousRaw: string;\n  /** The element's text after the native edit. */\n  text: string;\n  /** The element's caret (`selectionStart`) after the native edit. */\n  caret: number;\n  /** The `InputEvent.inputType`, when available. */\n  inputType?: string;\n  /** Render the guide display (unfilled slots) - used while the field is focused. */\n  guide?: boolean;\n};\n\nexport type MaskEditResult = {\n  raw: string;\n  display: string;\n  caret: number;\n};\n\n/** Reconciles a native edit into `{ raw, display, caret }` - the engine's main entry. */\nexport const applyMaskEdit = (options: MaskEditOptions): MaskEditResult => {\n  const { spec, previousRaw, text, caret, inputType, guide = false } = options;\n\n  let raw = spec.toRaw(text);\n  let anchorBefore = spec.toRaw(text.slice(0, caret)).length;\n  const deletion = !!inputType?.startsWith('delete');\n\n  // a deletion that left the raw value untouched only removed formatting (e.g.\n  // backspace over the dash in `12-|34`) - delete the adjacent content character instead\n  if (deletion && raw === previousRaw && raw.length > 0) {\n    if (inputType === 'deleteContentForward') {\n      raw = raw.slice(0, anchorBefore) + raw.slice(anchorBefore + 1);\n    } else if (anchorBefore > 0) {\n      raw = raw.slice(0, anchorBefore - 1) + raw.slice(anchorBefore);\n      anchorBefore -= 1;\n    }\n  }\n\n  const display = renderMaskDisplay({ spec, raw, guide });\n\n  // end-anchored masks (right-growing numbers) never glide past formatting and cap the\n  // caret at the end of the content - before a suffix, even when typed input overflowed\n  if ((spec.caretAnchor ?? 'start') === 'end') {\n    return { raw, display, caret: caretForRawCount({ spec, display, count: Math.min(anchorBefore, raw.length) }) };\n  }\n\n  let nextCaret = caretForRawCount({ spec, display, count: anchorBefore });\n\n  if (!deletion) {\n    nextCaret = advanceCaretPastLiterals({ spec, display, caret: nextCaret });\n  }\n\n  return { raw, display, caret: nextCaret };\n};\n","import { MaskSpec } from '../input-mask.types';\n\ntype SlotClass = 'digit' | 'letter' | 'alnum';\n\ntype PatternToken = { kind: 'slot'; slotClass: SlotClass; required: boolean } | { kind: 'literal'; char: string };\n\nconst SLOT_CLASSES: Record<string, SlotClass> = {\n  // 0 = required digit, 9 = optional digit - both accept the same characters; the\n  // distinction only matters for `isComplete` (the lazy display model ignores it)\n  '0': 'digit',\n  '9': 'digit',\n  a: 'letter',\n  '*': 'alnum',\n};\n\nconst SLOT_PATTERNS: Record<SlotClass, RegExp> = {\n  digit: /[0-9]/,\n  letter: /[a-zA-Z]/,\n  alnum: /[a-zA-Z0-9]/,\n};\n\nconst parsePattern = (pattern: string): PatternToken[] => {\n  const tokens: PatternToken[] = [];\n  let escaped = false;\n\n  for (const char of pattern) {\n    if (escaped) {\n      tokens.push({ kind: 'literal', char });\n      escaped = false;\n    } else if (char === '\\\\') {\n      escaped = true;\n    } else if (SLOT_CLASSES[char]) {\n      tokens.push({ kind: 'slot', slotClass: SLOT_CLASSES[char], required: char !== '9' });\n    } else {\n      tokens.push({ kind: 'literal', char });\n    }\n  }\n\n  return tokens;\n};\n\nexport type PatternMaskOptions = {\n  /** Renders unfilled slots with this character in the focused-state guide display. */\n  placeholderChar?: string | null;\n};\n\n/**\n * Compiles a pattern string (`0` digit, `9` optional digit, `a` letter, `*`\n * alphanumeric, `\\` escapes, anything else literal) into a `MaskSpec`.\n */\nexport const compilePatternMask = (pattern: string, options: PatternMaskOptions = {}): MaskSpec => {\n  const tokens = parsePattern(pattern);\n  const slotIndexes = tokens.flatMap((token, index) => (token.kind === 'slot' ? [index] : []));\n\n  // a pattern without slots can't hold content - treat it as a passthrough\n  if (!slotIndexes.length) {\n    return { toRaw: (text) => text, toDisplay: (raw) => raw };\n  }\n\n  const toRaw = (text: string) => {\n    let raw = '';\n    let position = 0;\n\n    for (const char of text) {\n      // an expected literal is formatting, never content - even when its character\n      // would also satisfy a slot class (e.g. a digit literal before digit slots)\n      const current = tokens[position];\n\n      if (current?.kind === 'literal' && current.char === char) {\n        position += 1;\n        continue;\n      }\n\n      const slotIndex = slotIndexes.find((index) => index >= position);\n\n      if (slotIndex === undefined) {\n        break;\n      }\n\n      const slot = tokens[slotIndex] as { kind: 'slot'; slotClass: SlotClass };\n\n      if (SLOT_PATTERNS[slot.slotClass].test(char)) {\n        raw += char;\n        position = slotIndex + 1;\n      }\n    }\n\n    return raw;\n  };\n\n  const toDisplay = (raw: string) => {\n    if (!raw.length) {\n      return '';\n    }\n\n    let display = '';\n    let consumed = 0;\n\n    for (const token of tokens) {\n      if (token.kind === 'literal') {\n        // literals render eagerly so the caret glides past them onto the next slot\n        display += token.char;\n      } else if (consumed < raw.length) {\n        display += raw[consumed];\n        consumed += 1;\n      } else {\n        break;\n      }\n    }\n\n    return display;\n  };\n\n  // raw fills slots strictly left to right, so completeness is positional: consume one\n  // raw character per slot in pattern order - any required slot left unfilled fails\n  const isComplete = (raw: string) => {\n    let consumed = 0;\n\n    for (const token of tokens) {\n      if (token.kind !== 'slot') {\n        continue;\n      }\n\n      if (consumed < raw.length) {\n        consumed += 1;\n      } else if (token.required) {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  const placeholderChar = options.placeholderChar ?? null;\n\n  if (!placeholderChar) {\n    return { toRaw, toDisplay, isComplete };\n  }\n\n  const toGuideDisplay = (raw: string) => {\n    let display = '';\n    let consumed = 0;\n\n    for (const token of tokens) {\n      if (token.kind === 'literal') {\n        display += token.char;\n      } else if (consumed < raw.length) {\n        display += raw[consumed];\n        consumed += 1;\n      } else {\n        display += placeholderChar;\n      }\n    }\n\n    return display;\n  };\n\n  return { toRaw, toDisplay, isComplete, toGuideDisplay, placeholderChar };\n};\n","import {\n  Directive,\n  afterNextRender,\n  afterRenderEffect,\n  computed,\n  effect,\n  inject,\n  input,\n  untracked,\n} from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { MASKED_INPUT_ERROR_CODES } from '../masked-input-errors';\nimport { INPUT_MASK_HOST } from './input-mask-host';\nimport { MASK_VALUE_MODES, MaskSpec, MaskValueMode } from './input-mask.types';\nimport { advanceCaretPastLiterals, applyMaskEdit, caretForRawCount, renderMaskDisplay } from './internals/mask-engine';\nimport { compilePatternMask } from './internals/pattern-mask';\n\n/**\n * Layers input masking onto an existing input control - place it on the same element\n * as `et-input` / `input[etInput]`, or any control providing `INPUT_MASK_HOST`. The\n * native element always shows the masked text; the form value stays raw by default\n * (`maskValueMode`).\n */\n@Directive({\n  selector: '[etInputMask]',\n  exportAs: 'etInputMask',\n  host: {\n    '(input)': 'handleInput($event)',\n    '(compositionstart)': 'composing = true',\n    '(compositionend)': 'handleCompositionEnd($event)',\n  },\n})\nexport class InputMaskDirective {\n  private host = inject(INPUT_MASK_HOST, { optional: true });\n  private hostElement = injectHostElement();\n\n  /**\n   * The mask: a pattern string (`0` digit, `9` optional digit, `a` letter, `*`\n   * alphanumeric, `\\` escapes, anything else literal) or a `MaskSpec` object\n   * (see `createCurrencyMask` / `createIbanMask` / `createCardMask`). `null`\n   * disables the mask entirely - the host's own value-sync stays (or resumes)\n   * in charge, so a mask can be applied conditionally.\n   */\n  public mask = input.required<string | MaskSpec | null>({ alias: 'etInputMask' });\n\n  /** Whether the form value is the raw text (default) or the masked display text. */\n  public maskValueMode = input<MaskValueMode>(MASK_VALUE_MODES.RAW);\n\n  /**\n   * Renders unfilled slots with this character while the field is focused\n   * (e.g. `12-__-____`). Pattern-string masks only.\n   */\n  public placeholderChar = input<string | null>(null);\n\n  /**\n   * `true` between `compositionstart` and `compositionend`. Rewriting `value` +\n   * `setSelectionRange` on the intermediate `input` events cancels the IME candidate window\n   * mid-composition (CJK, dead keys), so reconciliation is deferred until composition ends.\n   */\n  protected composing = false;\n\n  private spec = computed(() => {\n    const mask = this.mask();\n\n    if (mask === null) {\n      return null;\n    }\n\n    return typeof mask === 'string' ? compilePatternMask(mask, { placeholderChar: this.placeholderChar() }) : mask;\n  });\n\n  /** The unmasked value, regardless of `maskValueMode` (the value as-is while the mask is `null`). */\n  public rawValue = computed(() => {\n    const value = this.host?.value() ?? '';\n\n    return this.spec()?.toRaw(value) ?? value;\n  });\n\n  /**\n   * Whether the raw value fills every required slot - `true`/`false` for pattern masks\n   * (`0`/`a`/`*` required, `9` optional), `null` when the mask does not track completeness\n   * (the shipped factories, custom specs without `isComplete`, a `null` mask).\n   */\n  public complete = computed(() => this.spec()?.isComplete?.(this.rawValue()) ?? null);\n\n  /**\n   * The raw value as of the last reconciliation - `applyMaskEdit` needs the pre-edit\n   * raw to detect edits that only removed formatting. Kept as a plain field (not the\n   * model) so event-listener ordering can't pollute it.\n   */\n  private committedRaw = '';\n\n  /** Caret produced by the last handled edit - consumed once by the display enforcement. */\n  private caret: number | null = null;\n\n  constructor() {\n    // we own value-sync (raw/display split) in `handleInput` - stop the base input's native\n    // `(input)` handler from also writing the model and clobbering the masked value.\n    // Suppression tracks mask presence: a `null` mask leaves (or hands back) native sync\n    effect(() => {\n      if (this.spec()) {\n        this.host?.suppressNativeSync();\n      } else {\n        this.host?.resumeNativeSync?.();\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.host) {\n          throw new RuntimeError(\n            MASKED_INPUT_ERROR_CODES.MASK_OUTSIDE_INPUT,\n            'An [etInputMask] must be placed on an input control element (et-input / input[etInput]) or one that provides INPUT_MASK_HOST.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n\n    // keep the model in its declared shape - this also normalizes programmatic\n    // writes (a form reset with masked text, a consumer setting raw text, …)\n    effect(() => {\n      const host = this.host;\n      const spec = this.spec();\n\n      if (!host || !spec) {\n        return;\n      }\n\n      // while the host is mixed the raw value is hidden state that must survive untouched -\n      // normalizing it would count as a value edit the bulk-edit flow never made\n      if (host.mixed?.()) {\n        return;\n      }\n\n      const value = host.value();\n      const raw = spec.toRaw(value);\n      const normalized = this.maskValueMode() === MASK_VALUE_MODES.MASKED ? spec.toDisplay(raw) : raw;\n\n      if (normalized !== value) {\n        untracked(() => host.value.set(normalized));\n      }\n    });\n\n    // the element always shows the masked text. This runs after every render because\n    // the hosting component's [value] binding writes the model (raw in raw mode)\n    // straight into the element - the rewrite happens before paint, so it's invisible.\n    afterRenderEffect(() => {\n      const host = this.host;\n      const element = host?.nativeControl();\n      const spec = this.spec();\n\n      if (!host || !element || !spec) {\n        return;\n      }\n\n      // a mixed host renders empty with its mixed label as placeholder - repainting the masked\n      // raw value here would leak the hidden value into the DOM. The next edit starts from an\n      // empty committed raw, so the first typed content replaces the hidden value outright.\n      if (host.mixed?.()) {\n        this.committedRaw = '';\n\n        return;\n      }\n\n      const raw = this.rawValue();\n      const focused = host.focused();\n      const display = renderMaskDisplay({ spec, raw, guide: focused });\n\n      this.committedRaw = raw;\n\n      if (element.value !== display) {\n        element.value = display;\n\n        if (focused) {\n          const caret =\n            this.caret ??\n            advanceCaretPastLiterals({ spec, display, caret: caretForRawCount({ spec, display, count: raw.length }) });\n\n          element.setSelectionRange(caret, caret);\n        }\n      }\n\n      this.caret = null;\n    });\n  }\n\n  protected handleInput(event: Event) {\n    if (event.target !== this.host?.nativeControl()) {\n      return;\n    }\n\n    // an IME is mid-composition - reconcile once it settles (`compositionend`), not on every\n    // intermediate `input`, or the candidate window is torn down on the first keystroke\n    if (this.composing || (event as InputEvent).isComposing) {\n      return;\n    }\n\n    this.reconcile((event as InputEvent).inputType);\n  }\n\n  protected handleCompositionEnd(event: CompositionEvent) {\n    if (event.target !== this.host?.nativeControl()) {\n      return;\n    }\n\n    this.composing = false;\n\n    // `compositionend` carries the committed text; reconcile it now that the IME is done\n    this.reconcile((event as unknown as InputEvent).inputType);\n  }\n\n  private reconcile(inputType: string | undefined) {\n    const host = this.host;\n    const element = host?.nativeControl();\n    // a `null` mask never reconciles - the host's own native sync is in charge\n    const spec = this.spec();\n\n    if (!host || !element || !spec) {\n      return;\n    }\n\n    const result = applyMaskEdit({\n      spec,\n      previousRaw: this.committedRaw,\n      text: element.value,\n      caret: element.selectionStart ?? element.value.length,\n      inputType,\n      // typing implies focus, so the guide display (when available) applies\n      guide: true,\n    });\n\n    if (host.mixed?.()) {\n      // an edit that produced no raw content is an empty commit - it keeps the mixed state\n      // (and the hidden raw value); clear the element so no stray literals linger\n      if (!result.raw) {\n        element.value = '';\n\n        return;\n      }\n\n      // typing is the commit: the first raw content replaces the hidden value and resolves mixed\n      host.mixed.set(false);\n    }\n\n    this.committedRaw = result.raw;\n    this.caret = result.caret;\n    element.value = result.display;\n    element.setSelectionRange(result.caret, result.caret);\n    host.value.set(this.maskValueMode() === MASK_VALUE_MODES.MASKED ? spec.toDisplay(result.raw) : result.raw);\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the date/time inputs render or announce themselves - the picker triggers, the two halves\n * of a range, the date/time tabs, and the parse errors a typed value can produce.\n *\n * Month and weekday **names** are not here: they come from the `DATE_LOCALE` date-fns locale.\n */\nexport type DateTimeLabels = {\n  /** Accessible label for the control that opens a date picker. */\n  openCalendar: string;\n  /** Accessible label for the control that opens a time picker. */\n  openTimePicker: string;\n  /** Accessible label for the control that opens a combined date & time picker. */\n  openDateTimePicker: string;\n  /** Accessible label for the date picker's dialog. */\n  chooseDate: string;\n  /** Accessible label for the time picker's dialog. */\n  chooseTime: string;\n  /** Accessible label for the combined date & time picker's dialog. */\n  chooseDateTime: string;\n  /** Accessible label for the date range picker's dialog. */\n  chooseDateRange: string;\n  /** Accessible label for the time range picker's dialog. */\n  chooseTimeRange: string;\n  /** Accessible label for the date & time range picker's dialog. */\n  chooseDateTimeRange: string;\n\n  /** Accessible label for a range's start field. */\n  startDate: string;\n  /** Accessible label for a range's end field. */\n  endDate: string;\n  /** Accessible label for a time range's start field. */\n  startTime: string;\n  /** Accessible label for a time range's end field. */\n  endTime: string;\n  /** Accessible label for a date & time range's start field. */\n  startDateTime: string;\n  /** Accessible label for a date & time range's end field. */\n  endDateTime: string;\n\n  /** The date & time picker's tab showing the calendar. */\n  dateTab: string;\n  /** The date & time picker's tab showing the clock. */\n  timeTab: string;\n  /** The date & time range picker's tab showing the calendar. */\n  datesTab: string;\n  /** The date & time range picker's tab showing the clock. */\n  timesTab: string;\n  /** Accessible name of the date/time tab switch in the date & time pickers' bottom sheet. */\n  paneSwitch: string;\n\n  /** Accessible label for the preset list in a range picker. */\n  presets: string;\n  /** {@link todayPreset}'s button. */\n  presetToday: string;\n  /** {@link yesterdayPreset}'s button. */\n  presetYesterday: string;\n  /** {@link lastDaysPreset}'s button. */\n  presetLastDays: (count: number) => string;\n  /** {@link nextDaysPreset}'s button. */\n  presetNextDays: (count: number) => string;\n  /** {@link thisWeekPreset}'s button. */\n  presetThisWeek: string;\n  /** {@link lastWeekPreset}'s button. */\n  presetLastWeek: string;\n  /** {@link thisMonthPreset}'s button. */\n  presetThisMonth: string;\n  /** {@link lastMonthPreset}'s button. */\n  presetLastMonth: string;\n  /** {@link thisYearPreset}'s button. */\n  presetThisYear: string;\n\n  /** The second reading under a field whose zone is not the reader's. */\n  timeZoneReading: (timeZone: string, localTime: string) => string;\n\n  /** Validation message for text that isn't a date. */\n  invalidDate: string;\n  /** Validation message for text that isn't a time. */\n  invalidTime: string;\n  /** Validation message for text that isn't a date and time. */\n  invalidDateTime: string;\n  /** Validation message for text that isn't a date range. */\n  invalidDateRange: string;\n  /** Validation message for text that isn't a time range. */\n  invalidTimeRange: string;\n  /** Validation message for text that isn't a date & time range. */\n  invalidDateTimeRange: string;\n  /** Validation message for text that isn't a duration. */\n  invalidDuration: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_DATE_TIME_LABELS: DateTimeLabels = {\n  openCalendar: 'Open calendar',\n  openTimePicker: 'Open time picker',\n  openDateTimePicker: 'Open date & time picker',\n  chooseDate: 'Choose a date',\n  chooseTime: 'Choose a time',\n  chooseDateTime: 'Choose a date and time',\n  chooseDateRange: 'Choose a date range',\n  chooseTimeRange: 'Choose a time range',\n  chooseDateTimeRange: 'Choose a date and time range',\n\n  startDate: 'Start date',\n  endDate: 'End date',\n  startTime: 'Start time',\n  endTime: 'End time',\n  startDateTime: 'Start date and time',\n  endDateTime: 'End date and time',\n\n  dateTab: 'Date',\n  timeTab: 'Time',\n  datesTab: 'Dates',\n  timesTab: 'Times',\n  paneSwitch: 'Picker view',\n\n  presets: 'Presets',\n  presetToday: 'Today',\n  presetYesterday: 'Yesterday',\n  presetLastDays: (count) => `Last ${count} days`,\n  presetNextDays: (count) => `Next ${count} days`,\n  presetThisWeek: 'This week',\n  presetLastWeek: 'Last week',\n  presetThisMonth: 'This month',\n  presetLastMonth: 'Last month',\n  presetThisYear: 'This year',\n\n  timeZoneReading: (timeZone, localTime) => `${timeZone} · ${localTime} your time`,\n\n  invalidDate: 'Please enter a valid date',\n  invalidTime: 'Please enter a valid time',\n  invalidDateTime: 'Please enter a valid date and time',\n  invalidDateRange: 'Please enter a valid date range',\n  invalidTimeRange: 'Please enter a valid time range',\n  invalidDateTimeRange: 'Please enter a valid date and time range',\n  invalidDuration: 'Please enter a valid duration',\n};\n\nconst DATE_TIME_LABELS_DEF = /* @__PURE__ */ defineLabels<DateTimeLabels>('DATE_TIME_LABELS', DEFAULT_DATE_TIME_LABELS);\n\n/**\n * Localize the date/time inputs' strings for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_DATE_TIME_LABELS} value.\n *\n * @example\n * provideDateTimeLabels({ openCalendar: 'Kalender öffnen', invalidDate: 'Bitte ein gültiges Datum eingeben' });\n */\nexport const provideDateTimeLabels = /* @__PURE__ */ toProvideFn(DATE_TIME_LABELS_DEF);\nexport const injectDateTimeLabels = /* @__PURE__ */ toInjectFn(DATE_TIME_LABELS_DEF);\nexport const DATE_TIME_LABELS = /* @__PURE__ */ toToken(DATE_TIME_LABELS_DEF);\n","import { Component, computed, ElementRef, inject, input, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AutoSurfaceDirective, ProvideColorDirective } from '@ethlete/core';\nimport { injectOverlaySurfaceContext } from '../form-field/headless';\nimport { injectDateTimeLabels } from '../../forms/date-time/date-time-labels';\n\n@Component({\n  selector: 'et-date-picker-panel',\n  template: `\n    <div #panelBody class=\"et-date-picker-panel-body\">\n      <ng-content />\n    </div>\n  `,\n  styleUrl: './date-picker-panel.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  // the trigger promises `aria-haspopup=\"dialog\"`, so the mounted pane must actually be a named\n  // dialog - without this SR users land in an unnamed generic container\n  host: {\n    class: 'et-date-picker-panel',\n    role: 'dialog',\n    '[attr.aria-label]': 'resolvedDialogLabel()',\n  },\n})\nexport class DatePickerPanelComponent {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  /** Accessible name of the picker dialog. */\n  public dialogLabel = input<string | null>(null);\n\n  // observed instead of the host: the resize animation overrides the host's used size, so\n  // observing it would feed the animation back\n  private panelBody = viewChild<ElementRef<HTMLElement>>('panelBody');\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseDate);\n\n  constructor() {\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    injectOverlaySurfaceContext({ panelBody: this.panelBody, resizingClass: 'et-date-picker-panel--resizing' });\n  }\n}\n","import { InjectionToken, Signal, TemplateRef, WritableSignal } from '@angular/core';\n\n/**\n * The contract a control must fulfil to host the shared date picker pieces\n * (`etDatePickerTrigger`, `etDatePickerSurface`).\n */\nexport type DatePickerHost = {\n  pickerOpen: Signal<boolean>;\n  interactive: Signal<boolean>;\n  openPicker(): void;\n  closePicker(): void;\n  togglePicker(): void;\n  /** @internal */\n  registeredTrigger: WritableSignal<DatePickerTriggerBase | null>;\n  /** @internal */\n  registeredSurface: WritableSignal<DatePickerSurfaceBase | null>;\n};\n\nexport type DatePickerTriggerBase = {\n  elementRef: { nativeElement: HTMLButtonElement };\n};\n\nexport type DatePickerSurfaceBase = {\n  templateRef: TemplateRef<DatePickerSurfaceContext>;\n};\n\n/** Context of the template rendered inside the picker overlay pane. */\nexport type DatePickerSurfaceContext = {\n  $implicit: DatePickerHost;\n  close: () => void;\n};\n\nexport const DATE_PICKER_HOST = new InjectionToken<DatePickerHost>('DATE_PICKER_HOST');\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { DATE_INPUT_ERROR_CODES } from '../date-input/date-input-errors';\nimport { DATE_PICKER_HOST, DatePickerSurfaceContext } from './date-picker-host';\n\n/** The template rendered inside a date control's picker overlay pane. */\n@Directive({\n  selector: 'ng-template[etDatePickerSurface]',\n  exportAs: 'etDatePickerSurface',\n})\nexport class DatePickerSurfaceDirective {\n  private host = inject(DATE_PICKER_HOST, { optional: true });\n  public templateRef = inject<TemplateRef<DatePickerSurfaceContext>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerSingleton(this.host?.registeredSurface, this);\n\n    if (ngDevMode && !this.host) {\n      throw new RuntimeError(\n        DATE_INPUT_ERROR_CODES.SURFACE_OUTSIDE_DATE_INPUT,\n        '[DatePickerSurfaceDirective] etDatePickerSurface must be placed inside a date picker host ([etDateInput], [etDateRangeInput], [etTimeInput], [etDateTimeInput], [etTimeRangeInput] or [etDateTimeRangeInput]).',\n        { element: this.hostElement },\n      );\n    }\n  }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { DATE_INPUT_ERROR_CODES } from '../date-input/date-input-errors';\nimport { DATE_PICKER_HOST } from './date-picker-host';\n\n/** The suffix button toggling a date control's picker overlay. */\n@Directive({\n  selector: 'button[etDatePickerTrigger]',\n  exportAs: 'etDatePickerTrigger',\n  host: {\n    type: 'button',\n    'aria-haspopup': 'dialog',\n    '[attr.aria-expanded]': 'host?.pickerOpen() || false',\n    '[disabled]': 'host ? !host.interactive() : false',\n    '(click)': 'host?.togglePicker()',\n    // keep focus on the field through the toggle: the mousedown would otherwise blur the input a\n    // frame before the click reopens it, which flickers the focused style and the clear button\n    '(mousedown)': '$event.preventDefault()',\n  },\n})\nexport class DatePickerTriggerDirective {\n  protected host = inject(DATE_PICKER_HOST, { optional: true });\n  public elementRef = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n  constructor() {\n    registerSingleton(this.host?.registeredTrigger, this);\n\n    if (ngDevMode && !this.host) {\n      throw new RuntimeError(\n        DATE_INPUT_ERROR_CODES.TRIGGER_OUTSIDE_DATE_INPUT,\n        '[DatePickerTriggerDirective] etDatePickerTrigger must be placed inside a date picker host ([etDateInput], [etDateRangeInput], [etTimeInput], [etDateTimeInput], [etTimeRangeInput] or [etDateTimeRangeInput]).',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n}\n","import { Directive, ElementRef, computed, effect, inject, linkedSignal, signal, untracked } from '@angular/core';\nimport { InputMaskHost } from '../../masked-input/headless/input-mask-host';\nimport { DatePickerInputDirective } from './date-picker-input.directive';\n\n/**\n * Shared text-field host for the three `Date`-string picker inputs' fields\n * (`input[etDateInputField]`, `input[etTimeInputField]`, `input[etDateTimeInputField]`).\n *\n * Must be extended by an `@Directive` - subclasses inject their input directive into `pickerInput`,\n * register themselves as the field, and provide `INPUT_MASK_HOST` via `useExisting`.\n */\n@Directive({\n  host: {\n    type: 'text',\n    autocomplete: 'off',\n    '[attr.inputmode]': 'maskAttached() ? \"numeric\" : null',\n    '[attr.placeholder]': 'pickerInput?.effectivePlaceholder() || null',\n    '[attr.aria-required]': 'pickerInput?.required() || null',\n    '[attr.aria-invalid]': 'pickerInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'pickerInput?.describedByIds() || null',\n    '[attr.aria-label]': 'pickerInput?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'pickerInput?.labelId() || null',\n    // attr bindings, not [disabled]/[readOnly]: this base has no selector, so the template\n    // checker can't tie the host to an <input> and rejects the property forms (NG8002)\n    '[attr.disabled]': 'pickerInput?.disabled() ? \"\" : null',\n    '[attr.readonly]': 'pickerInput?.readonly() ? \"\" : null',\n    '(input)': 'handleInput()',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport abstract class DatePickerInputFieldDirective implements InputMaskHost {\n  protected abstract pickerInput: DatePickerInputDirective | null;\n\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  /** Set while an `[etInputMask]` owns this field's element text and value-sync. */\n  protected maskAttached = signal(false);\n\n  /**\n   * The field text as an attached mask sees it (`InputMaskHost.value`):\n   * display-shaped, never containing guide placeholders.\n   */\n  public value = linkedSignal(() => {\n    const input = this.pickerInput;\n\n    if (!input) {\n      return '';\n    }\n\n    return input.parseError() ? input.inputText() : input.displayValue();\n  });\n\n  /** Whether the field has focus (`InputMaskHost.focused`) - drives the mask's guide display. */\n  public focused = computed(() => this.pickerInput?.focused() ?? false);\n\n  /** The native element an attached mask rewrites (`InputMaskHost.nativeControl`). */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  constructor() {\n    this.nativeControl.set(this.elementRef.nativeElement);\n\n    // mid-typing rewrites would fight the caret, so the element only mirrors while unfocused; an\n    // attached mask owns the element text instead\n    effect(() => {\n      const input = this.pickerInput;\n\n      if (!input || this.maskAttached()) {\n        return;\n      }\n\n      const text = input.parseError() ? input.inputText() : input.displayValue();\n\n      if (!input.focused() && this.elementRef.nativeElement.value !== text) {\n        this.elementRef.nativeElement.value = text;\n      }\n    });\n\n    // masked typing bypasses handleInput, so mirror the mask-written text into `inputText`\n    effect(() => {\n      if (!this.maskAttached()) {\n        return;\n      }\n\n      const text = this.value();\n      const input = this.pickerInput;\n\n      if (input && untracked(input.focused)) {\n        untracked(() => input.inputText.set(text));\n      }\n    });\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  /**\n   * @internal Blanks the field text. `value` is what an attached mask reads and what\n   * `commitText()` hands to the next commit, so blanking the element alone would let the mask's\n   * text come back on the next blur.\n   */\n  public resetText() {\n    this.value.set('');\n    this.elementRef.nativeElement.value = '';\n  }\n\n  /** @internal `InputMaskHost` - an attached mask owns value-sync; our input/mirror handling stands down. */\n  public suppressNativeSync() {\n    this.maskAttached.set(true);\n  }\n\n  /** @internal `InputMaskHost` - the mask was set to `null`; native handling resumes. */\n  public resumeNativeSync() {\n    this.maskAttached.set(false);\n  }\n\n  protected handleInput() {\n    if (this.maskAttached()) {\n      return;\n    }\n\n    this.pickerInput?.inputText.set(this.elementRef.nativeElement.value);\n  }\n\n  protected handleFocus() {\n    this.pickerInput?.focused.set(true);\n  }\n\n  protected handleBlur() {\n    const input = this.pickerInput;\n\n    if (!input) {\n      return;\n    }\n\n    input.commitInput(this.commitText());\n    input.focused.set(false);\n    input.touched.set(true);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const input = this.pickerInput;\n\n    if (!input) {\n      return;\n    }\n\n    if (event.key === 'Enter') {\n      input.commitInput(this.commitText());\n\n      // the display effect only runs unfocused, so a successful commit reformats in place here\n      if (!input.parseError() && !this.maskAttached()) {\n        this.elementRef.nativeElement.value = input.displayValue();\n      }\n\n      return;\n    }\n\n    if (event.key === 'ArrowDown' && event.altKey) {\n      event.preventDefault();\n      input.openPicker();\n    }\n  }\n\n  private commitText() {\n    return this.maskAttached() ? this.value() : this.elementRef.nativeElement.value;\n  }\n}\n","export type PickerCommitOptions = {\n  /** The committed value as the field renders it, or `''` while there is none. */\n  displayValue: string;\n  /** Whether the field currently holds text that did not parse. */\n  parseError: boolean;\n  /** `false` while the control is disabled or readonly. */\n  interactive: boolean;\n  /** The control's own parse rules; `null` when the text does not parse. */\n  parse: (raw: string) => Date | null;\n};\n\n/**\n * What one resolved commit writes. `parsed` is the instant to commit; while it is `null` the\n * control keeps `text` in the field instead.\n */\nexport type PickerCommitOutcome = {\n  parsed: Date | null;\n  text: string;\n};\n\n/**\n * Decides what one blur or Enter commit of `raw` does. Returns `null` when the commit must not\n * run at all: a disabled or readonly control never commits, and neither does a field whose text\n * still matches what the control renders.\n */\nexport const resolvePickerCommit = (raw: string, options: PickerCommitOptions): PickerCommitOutcome | null => {\n  if (!options.interactive) {\n    return null;\n  }\n\n  // an unparseable field renders no display value, so erasing it arrives here as\n  // `raw === displayValue` - it must still run, or `parseError` stays latched under an empty field\n  if (raw === options.displayValue && !options.parseError) {\n    return null;\n  }\n\n  if (!raw.trim()) {\n    return { parsed: null, text: '' };\n  }\n\n  const parsed = options.parse(raw);\n\n  return { parsed, text: parsed === null ? raw : '' };\n};\n","import { ModelSignal, Signal, inputBinding, signal } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport {\n  AnchoredPanelCloseInfo,\n  AnchoredPanelOverlayRef,\n  createAnchoredPanelController,\n} from '../../form-field/headless';\nimport { anchoredOverlayStrategy, injectBottomSheetStrategy } from '../../../overlay/strategies';\nimport { DATE_INPUT_ERROR_CODES } from '../date-input/date-input-errors';\nimport { DatePickerSurfaceBase, DatePickerSurfaceContext } from '../picker/date-picker-host';\n\nexport type DatePickerOverlayCloseInfo = AnchoredPanelCloseInfo;\n\n/**\n * The space a side must offer before the picker takes it, in px. Must stay at or above the tallest\n * state any picker panel reaches (a six-week month grid, 333px) and must stay a constant: a\n * threshold the shorter views clear lets a picker that opened above the field drop below it on a\n * drill into the month grid.\n */\nconst PICKER_MIN_AVAILABLE_SPACE = 340;\n\nexport type CreateDatePickerOverlayOptions = {\n  interactive: Signal<boolean>;\n  pickerOpen: ModelSignal<boolean>;\n  surface: Signal<DatePickerSurfaceBase | null>;\n  anchor: () => HTMLElement | null | undefined;\n  context: () => DatePickerSurfaceContext;\n  onAfterClosed?: (closeInfo: DatePickerOverlayCloseInfo) => void;\n};\n\n/**\n * The picker overlay for the date, time, and date-time inputs: a bottom sheet below `md`, an\n * anchored pane above it. Call in an injection context.\n */\nexport const createDatePickerOverlay = (options: CreateDatePickerOverlayOptions) => {\n  const bottomSheetStrategy = injectBottomSheetStrategy();\n  const overlayRef = signal<AnchoredPanelOverlayRef | null>(null);\n\n  const panel = createAnchoredPanelController({\n    canOpen: options.interactive,\n    open: options.pickerOpen,\n    overlayRef,\n    surface: options.surface,\n    anchor: options.anchor,\n    config: ({ origin, templateRef }) => ({\n      bindings: [inputBinding('template', () => templateRef), inputBinding('context', options.context)],\n      mode: 'non-modal',\n      autoFocus: 'first-tabbable',\n      restoreFocus: false,\n      // outside-pointer closing is owned by the controller: a pointerdown on the field/trigger\n      // must toggle instead of close-and-reopen\n      closeOnEscape: true,\n      closeOnOutsidePointer: false,\n      origin,\n      panelClass: 'et-date-input-overlay-pane',\n      strategies: () => [\n        {\n          strategy: bottomSheetStrategy.build({ hasBackdrop: true, containerClass: 'et-date-picker-sheet' }),\n        },\n        ...anchoredOverlayStrategy({\n          containerClass: ['et-overlay--anchored', 'et-overlay--date-picker'],\n          placement: 'bottom-start',\n          offset: 4,\n          viewportPadding: 8,\n          autoResize: true,\n          minAvailableSpace: PICKER_MIN_AVAILABLE_SPACE,\n        })().map((entry) => ({ ...entry, breakpoint: 'md' as const })),\n      ],\n    }),\n    onAfterClosed: (info) => options.onAfterClosed?.(info),\n    onMissingSurface: () => {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          DATE_INPUT_ERROR_CODES.MISSING_SURFACE,\n          '[createDatePickerOverlay] Cannot open the picker without an <ng-template etDatePickerSurface> inside the host element.',\n        );\n      }\n    },\n  });\n\n  return {\n    close: () => panel.close(),\n  };\n};\n","/**\n * The date-fns tokens a typing mask can represent, keyed by token letter and listing the run\n * lengths that are fixed-width (each letter maps to exactly one digit).\n */\nconst FIXED_WIDTH_TOKEN_RUNS: Record<string, readonly number[]> = {\n  y: [2, 4],\n  M: [2],\n  d: [2],\n  H: [2],\n  h: [2],\n  m: [2],\n  s: [2],\n  S: [1, 2, 3],\n};\n\n/** Characters with meaning in the mask pattern language - literals must escape them. */\nconst PATTERN_SPECIALS = /* @__PURE__ */ new Set(['0', '9', 'a', '*', '\\\\']);\n\nconst toPatternLiteral = (text: string) =>\n  Array.from(text, (char) => (PATTERN_SPECIALS.has(char) ? `\\\\${char}` : char)).join('');\n\n/**\n * Derives an input-mask pattern (`'dd.MM.yyyy'` → `'00.00.0000'`) from a date-fns\n * display format, or `null` when the format is not fixed-width numeric - locale\n * formats like the default `P`/`p`, variable-width tokens (`d.M.yyyy`), or text\n * tokens (`MMM`, am/pm markers). Quoted sections (`'T'`, `''`) become literals.\n */\nexport const maskPatternFromDisplayFormat = (format: string): string | null => {\n  let pattern = '';\n  let hasSlots = false;\n  let index = 0;\n\n  while (index < format.length) {\n    const char = format.charAt(index);\n\n    if (char === \"'\") {\n      // date-fns quoting: '...' is literal text, '' inside it is an escaped quote,\n      // and a bare '' outside is a single literal quote\n      index += 1;\n      let text = '';\n      let closed = false;\n\n      while (index < format.length) {\n        if (format[index] === \"'\") {\n          if (format[index + 1] === \"'\") {\n            text += \"'\";\n            index += 2;\n            continue;\n          }\n\n          index += 1;\n          closed = true;\n          break;\n        }\n\n        text += format[index];\n        index += 1;\n      }\n\n      if (!closed) {\n        return null;\n      }\n\n      pattern += toPatternLiteral(text || \"'\");\n      continue;\n    }\n\n    if (/[a-zA-Z]/.test(char)) {\n      let run = 0;\n\n      while (format[index] === char) {\n        run += 1;\n        index += 1;\n      }\n\n      if (!FIXED_WIDTH_TOKEN_RUNS[char]?.includes(run)) {\n        return null;\n      }\n\n      pattern += '0'.repeat(run);\n      hasSlots = true;\n      continue;\n    }\n\n    pattern += toPatternLiteral(char);\n    index += 1;\n  }\n\n  return hasSlots ? pattern : null;\n};\n","import { DOCUMENT } from '@angular/common';\nimport {\n  Directive,\n  ElementRef,\n  Signal,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport { Locale } from 'date-fns';\nimport { AccessibleNameControlDirective, FORM_FIELD_TOKEN, FormFieldControlType } from '../../form-field/headless';\nimport { mountControlSuffixStyles } from '../../form-field/form-field-control-suffix-styles.component';\nimport { mountTextFieldShellStyles } from '../../form-field/form-field-text-shell-styles.component';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { injectDateLocale } from '../date-time-formats';\nimport { DatePickerHost, DatePickerSurfaceBase, DatePickerTriggerBase } from '../picker/date-picker-host';\nimport { createDatePickerOverlay } from './date-picker-overlay';\nimport { maskPatternFromDisplayFormat } from './display-format-mask';\n\n/** The registered text field a date-picker input focuses and anchors to. */\nexport type DatePickerInputFieldBase = {\n  focus(options?: FocusOptions): void;\n  /**\n   * Blanks the field text, including an attached mask's own copy of it - the field only mirrors\n   * control state while unfocused and a mask owns the element text, so a clear has to reach both.\n   */\n  resetText(): void;\n  elementRef: ElementRef<HTMLInputElement>;\n};\n\n/**\n * Shared host for every picker input, single and range: the standard control inputs, the picker\n * overlay and the trigger/surface registration.\n *\n * Must be extended by an `@Directive` - Angular only surfaces inherited inputs from a decorated base.\n */\n@Directive({\n  host: {\n    '[attr.data-mixed]': 'mixed() || null',\n  },\n})\nexport abstract class PickerInputBaseDirective extends AccessibleNameControlDirective implements DatePickerHost {\n  private formFieldLabels = injectFormFieldLabels();\n  private document = inject(DOCUMENT);\n\n  protected formField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  public defaultLocale = injectDateLocale();\n\n  /** date-fns wire format used when `valueFormat` is unset - the token differs per control. */\n  protected abstract defaultValueFormat: string;\n  /** The form-field control-type tag. */\n  public abstract controlType: Signal<FormFieldControlType>;\n  /** The date-fns format in effect for the field(s) - declared per control. */\n  public abstract effectiveDisplayFormat: Signal<string>;\n  /** `true` while a field holds text that does not parse. */\n  public abstract parseError: Signal<boolean>;\n\n  /**\n   * View state for a field whose source values disagree (bulk edit). The raw form value stays\n   * untouched; on a range one flag masks both sides.\n   */\n  public mixed = model(false);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n  /**\n   * Field placeholder shown while `mixed` is set. Presentation only - it never enters the form\n   * value.\n   */\n  public mixedLabel = input<string | null>(null);\n\n  /** date-fns format of the string value. Defaults to the control's format token. */\n  public valueFormat = input<string | undefined>(undefined);\n  public locale = input<Locale | null>(null);\n\n  /**\n   * Opt-in typing mask: when `displayFormat` is fixed-width numeric (`dd.MM.yyyy`,\n   * `HH:mm`), typing gets guide placeholders (`__.__.____`), auto-inserted\n   * separators, and paste filtering. Formats the mask cannot represent - locale\n   * formats like the defaults `P`/`p`/`Pp`, variable-width or text tokens - are\n   * refused and typing stays unmasked.\n   */\n  public mask = input(false, { transform: booleanAttribute });\n\n  public pickerOpen = model(false);\n\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public effectiveValueFormat = computed(() => this.valueFormat() ?? this.defaultValueFormat);\n  public effectiveLocale = computed(() => this.locale() ?? this.defaultLocale);\n\n  public describedBy = signal<string | null>(null);\n\n  /**\n   * @internal Ids the control contributes to `aria-describedby` itself, on top of the one the form\n   * field sets.\n   */\n  public ownDescribedBy: Signal<string | null> = signal(null);\n\n  /** @internal Everything the field's `aria-describedby` must point at, in reading order. */\n  public describedByIds = computed(() => {\n    const ids = [this.describedBy(), this.ownDescribedBy()].filter((id): id is string => id !== null && id !== '');\n\n    return ids.length > 0 ? ids.join(' ') : null;\n  });\n\n  /** @internal Keeps the form field in its focused style while the picker overlay is open. */\n  public expanded = computed(() => this.pickerOpen());\n\n  /** @internal */\n  public registeredTrigger = signal<DatePickerTriggerBase | null>(null);\n  /** @internal */\n  public registeredSurface = signal<DatePickerSurfaceBase | null>(null);\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n  public shouldDisplayError = computed(() => this.touched() && (this.invalid() || this.parseError()));\n\n  /** The `[etInputMask]` pattern derived from the format in effect - `null` while `mask` is off or the format is refused. */\n  public maskPattern = computed(() =>\n    this.mask() ? maskPatternFromDisplayFormat(this.effectiveDisplayFormat()) : null,\n  );\n\n  private overlay = createDatePickerOverlay({\n    interactive: this.interactive,\n    pickerOpen: this.pickerOpen,\n    surface: this.registeredSurface,\n    anchor: () => this.resolveAnchorElement(),\n    context: () => ({ $implicit: this, close: () => this.closePicker() }),\n    onAfterClosed: ({ byOutsidePointer, byFocusLeave, fromBottomSheet }) => {\n      if (\n        !byOutsidePointer &&\n        !byFocusLeave &&\n        !fromBottomSheet &&\n        this.document.activeElement === this.document.body\n      ) {\n        this.activate();\n      }\n    },\n  });\n\n  constructor() {\n    super();\n\n    mountTextFieldShellStyles();\n    mountControlSuffixStyles();\n\n    if (ngDevMode) {\n      effect(() => {\n        if (this.mask() && this.maskPattern() === null) {\n          console.warn(\n            `[et-${this.controlType()}] displayFormat \"${this.effectiveDisplayFormat()}\" is not fixed-width numeric, so no typing mask can be derived - the mask input is ignored.`,\n          );\n        }\n      });\n    }\n  }\n\n  public abstract focus(options?: FocusOptions): void;\n\n  protected abstract anchorField(): DatePickerInputFieldBase | null;\n\n  public activate() {\n    this.focus();\n  }\n\n  public openPicker() {\n    if (!this.interactive() || this.pickerOpen()) {\n      return;\n    }\n\n    this.pickerOpen.set(true);\n  }\n\n  public closePicker() {\n    if (this.pickerOpen()) {\n      this.pickerOpen.set(false);\n    }\n\n    this.overlay.close();\n  }\n\n  public togglePicker() {\n    if (this.pickerOpen()) {\n      this.closePicker();\n    } else {\n      this.openPicker();\n    }\n  }\n\n  public resolveAnchorElement() {\n    return (\n      this.formField?.controlFrameElement() ??\n      this.anchorField()?.elementRef.nativeElement ??\n      this.registeredTrigger()?.elementRef.nativeElement\n    );\n  }\n}\n","import { DestroyRef, Directive, Signal, computed, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FormFieldControl } from '../../form-field/headless';\nimport { resolvePickerCommit } from './picker-input-commit';\nimport { DatePickerInputFieldBase, PickerInputBaseDirective } from './picker-input-base.directive';\n\nexport type { DatePickerInputFieldBase } from './picker-input-base.directive';\n\n/**\n * Shared host for the three `Date`-string picker inputs (`et-date-input`, `et-time-input`,\n * `et-date-time-input`): the field registration and the typed-text commit on top of\n * `PickerInputBaseDirective`.\n *\n * Must be extended by an `@Directive` - Angular only surfaces inherited inputs from a decorated base.\n */\n@Directive()\nexport abstract class DatePickerInputDirective\n  extends PickerInputBaseDirective\n  implements FormValueControl<string | null>, FormFieldControl\n{\n  /** The committed value rendered in `displayFormat`. */\n  public abstract displayValue: Signal<string>;\n\n  /**\n   * @internal Parses committed field text with the control's own rules (strict vs lenient);\n   * `null` when the text does not parse.\n   */\n  public abstract parseCommitText(raw: string): Date | null;\n\n  /** @internal Writes a parsed commit into the wire value, in the control's own shape. */\n  public abstract writeCommitted(parsed: Date): void;\n\n  /** The wire value in `valueFormat`, or `null` while empty/unparseable. */\n  public value = model<string | null>(null);\n  public placeholder = input('');\n\n  /** Uncommitted field text - kept visible when it fails to parse. */\n  public inputText = signal('');\n  /** `true` while the field holds text that does not parse. */\n  public parseError = signal(false);\n\n  public focused = signal(false);\n\n  /** @internal */\n  public registeredField = signal<DatePickerInputFieldBase | null>(null);\n\n  public hasValue = computed(\n    () => this.mixed() || this.value() !== null || this.inputText().length > 0 || this.displayValue().length > 0,\n  );\n\n  /** What the field renders as its placeholder - `mixedLabel` while mixed masks the value. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    inject(DestroyRef).onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  /**\n   * @internal Commits typed field text: empty clears, a successful parse writes the value,\n   * anything else keeps the raw text and raises `parseError`.\n   */\n  public commitInput(raw: string) {\n    const outcome = resolvePickerCommit(raw, {\n      displayValue: this.displayValue(),\n      parseError: this.parseError(),\n      interactive: this.interactive(),\n      parse: (text) => this.parseCommitText(text),\n    });\n\n    if (outcome === null) {\n      return;\n    }\n\n    this.beforeCommit();\n\n    this.inputText.set(outcome.text);\n    this.parseError.set(outcome.text.length > 0);\n\n    if (outcome.parsed !== null) {\n      this.writeCommitted(outcome.parsed);\n\n      return;\n    }\n\n    if (!this.mixed() && this.value() !== null) {\n      this.value.set(null);\n    }\n  }\n\n  /** @internal Runs once a commit is known to apply. */\n  public beforeCommit() {\n    return;\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.registeredField()?.focus(options);\n  }\n\n  /** Clears the value and any uncommitted field text - wired to the styled inputs' clear button. */\n  public clearValue() {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.value.set(null);\n    this.mixed.set(false);\n    this.inputText.set('');\n    this.parseError.set(false);\n    this.registeredField()?.resetText();\n  }\n\n  protected anchorField() {\n    return this.registeredField();\n  }\n}\n","import { format as formatDate, isValid, parse } from 'date-fns';\nimport { Locale } from 'date-fns';\n\nexport type ParseDateValueOptions = {\n  /** date-fns format string the value must match. */\n  format: string;\n  locale?: Locale | null;\n  /** The date missing parts are taken from. Defaults to now. */\n  referenceDate?: Date;\n};\n\nexport type FormatDateValueOptions = {\n  /** date-fns format string to render the date with. */\n  format: string;\n  locale?: Locale | null;\n};\n\n/**\n * Strictly parses `value` against a date-fns format string. Returns `null` for\n * empty input, leftover characters, or anything date-fns considers invalid.\n */\nexport const parseDateValue = (value: string, options: ParseDateValueOptions): Date | null => {\n  const trimmed = value.trim();\n\n  if (!trimmed) {\n    return null;\n  }\n\n  const locale = options.locale;\n  const parsed = parse(trimmed, options.format, options.referenceDate ?? new Date(), locale ? { locale } : undefined);\n\n  return isValid(parsed) ? parsed : null;\n};\n\n/** Formats a `Date` with a date-fns format string. Invalid dates yield `null`. */\nexport const formatDateValue = (date: Date, options: FormatDateValueOptions): string | null => {\n  if (!isValid(date)) {\n    return null;\n  }\n\n  const locale = options.locale;\n\n  return formatDate(date, options.format, locale ? { locale } : undefined);\n};\n","import { Locale } from 'date-fns';\nimport { CalendarPrecision } from '../../../calendar/headless';\n\n/** The `displayFormat` a precision implies, when the consumer has not named one. */\nexport const displayFormatForPrecision = (precision: CalendarPrecision, locale: Locale | null) => {\n  if (precision === 'day') {\n    return 'P';\n  }\n\n  if (precision === 'year') {\n    return 'yyyy';\n  }\n\n  return monthYearFormat(locale?.formatLong?.date({ width: 'short' }) ?? 'MM/dd/yyyy');\n};\n\nconst monthYearFormat = (shortDatePattern: string) => {\n  const stripped = shortDatePattern.replace(/(?:[^a-zA-Z']+d+|d+[^a-zA-Z']+)/, '');\n\n  if (stripped === shortDatePattern || /d/.test(stripped)) {\n    return 'MM/yyyy';\n  }\n\n  return widenYearToken(stripped);\n};\n\n/** `y` / `yy` / `yyy` → `yyyy`, so the pattern is fixed-width and a mask can be derived from it. */\nconst widenYearToken = (pattern: string) => pattern.replace(/y+/, 'yyyy');\n","import { booleanAttribute, computed, input, signal, Directive } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { startOfDay } from 'date-fns';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectDateFormat } from '../../date-time-formats';\nimport { DatePickerInputDirective } from '../../internals/date-picker-input.directive';\nimport { formatDateValue, parseDateValue } from '../../internals/date-value';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport {\n  CalendarDateClassFn,\n  CalendarPrecision,\n  CalendarView,\n  startOfCalendarUnit,\n} from '../../../../calendar/headless';\nimport { displayFormatForPrecision } from '../../internals/precision-format';\n\n/**\n * A date form control with a `string | null` value (a date-fns `valueFormat`\n * wire string, ISO by default). Typed entry parses strictly against\n * `displayFormat` on blur/Enter; the anchored picker overlay hosts a calendar.\n */\n@Directive({\n  selector: '[etDateInput]',\n  exportAs: 'etDateInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: DateInputDirective }],\n})\nexport class DateInputDirective extends DatePickerInputDirective implements FormValueControl<string | null> {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectDateFormat();\n\n  /** Message the form field shows when typed text can't be parsed as a date. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /**\n   * date-fns format shown in (and parsed from) the field. Unset, it follows\n   * `precision`: the locale's short date at day precision, that same pattern\n   * without its day at month precision (`MM.yyyy`), the year alone at year\n   * precision.\n   */\n  public displayFormat = input<string | null>(null);\n\n  /**\n   * How precise a date this field takes - `'month'` makes it a month picker,\n   * `'year'` a year picker. The value is the start of the unit, the mask and\n   * placeholder follow the derived format, and the picker calendar selects in\n   * the grid holding that unit.\n   */\n  public precision = input<CalendarPrecision>('day');\n\n  /** Forwarded to the picker calendar. (`min`/`max` are reserved by signal forms.) */\n  public minDate = input<Date | null>(null);\n  public maxDate = input<Date | null>(null);\n  public dateFilter = input<((date: Date) => boolean) | null>(null);\n  /** Month the picker calendar opens at while the value is empty. */\n  public startAt = input<Date | null>(null);\n\n  /** Which grid the picker calendar opens on - `'year'` to pick a month first, `'multiYear'` a year. */\n  public startView = input<CalendarView>('month');\n\n  /** Per-cell classes for the picker calendar - busy days, holidays, markers of your own. */\n  public dateClass = input<CalendarDateClassFn | null>(null);\n\n  /** Renders the picker calendar's week-number column. */\n  public weekNumbers = input(false, { transform: booleanAttribute });\n\n  /** The format in effect: this instance's `displayFormat`, else the one `precision` implies. */\n  public effectiveDisplayFormat = computed(\n    () => this.displayFormat() ?? displayFormatForPrecision(this.precision(), this.effectiveLocale()),\n  );\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidDate);\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DATE_INPUT);\n\n  /** The current value as a `Date` (what the picker calendar binds to). */\n  public date = computed(() => {\n    if (this.mixed()) {\n      return null;\n    }\n\n    const value = this.value();\n\n    if (value === null) {\n      return null;\n    }\n\n    return parseDateValue(value, { format: this.effectiveValueFormat(), locale: this.effectiveLocale() });\n  });\n\n  /** The committed value rendered in the format in effect. */\n  public displayValue = computed(() => {\n    const date = this.date();\n\n    if (date === null) {\n      return '';\n    }\n\n    return formatDateValue(date, { format: this.effectiveDisplayFormat(), locale: this.effectiveLocale() }) ?? '';\n  });\n\n  /** @internal A strict parse against `displayFormat`. */\n  public parseCommitText(raw: string) {\n    // reference midnight, not `new Date()`: a date-only `displayFormat` leaves date-fns to fill\n    // H/M/S from the reference, so a typed day would otherwise carry the current wall-clock time\n    // into a time-bearing `valueFormat`.\n    return parseDateValue(raw, {\n      format: this.effectiveDisplayFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: startOfDay(new Date()),\n    });\n  }\n\n  /** Commits a picker-selected date and closes the picker. */\n  public selectDate(date: Date | null) {\n    if (date === null || !this.interactive()) {\n      return;\n    }\n\n    this.inputText.set('');\n    this.parseError.set(false);\n    this.writeCommitted(date);\n    this.touched.set(true);\n    this.closePicker();\n  }\n\n  /**\n   * Writes the wire value, at the start of `precision`'s unit - a coarse format cannot say which day\n   * it meant, so normalizing here makes a typed month and a picked month the same value.\n   */\n  public writeCommitted(date: Date) {\n    const unitStart = startOfCalendarUnit(date, this.precision());\n\n    this.value.set(formatDateValue(unitStart, { format: this.effectiveValueFormat(), locale: this.effectiveLocale() }));\n    this.mixed.set(false);\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../../form-field/headless';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DatePickerInputFieldDirective } from '../../internals/date-picker-input-field.directive';\nimport { DATE_INPUT_ERROR_CODES } from '../date-input-errors';\nimport { DateInputDirective } from './date-input.directive';\n\n/**\n * The text field of a date input: shows the committed value in the display\n * format, commits typed text strictly on blur/Enter, keeps unparseable text\n * visible, and opens the picker on Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etDateInputField]',\n  exportAs: 'etDateInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: DateInputFieldDirective }],\n})\nexport class DateInputFieldDirective extends DatePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected pickerInput = inject(DateInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    registerSingleton(this.pickerInput?.registeredField, this);\n\n    if (ngDevMode && !this.pickerInput) {\n      throw new RuntimeError(\n        DATE_INPUT_ERROR_CODES.FIELD_OUTSIDE_DATE_INPUT,\n        '[DateInputFieldDirective] etDateInputField must be placed inside an [etDateInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { CALENDAR_IMPORTS } from '../../../calendar';\nimport { CALENDAR_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateInputDirective, DateInputFieldDirective } from './headless';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-date-input',\n  templateUrl: './date-input.component.html',\n  styleUrl: './date-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...CALENDAR_IMPORTS,\n    DateInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: DateInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'locale',\n        'mask',\n        'minDate',\n        'maxDate',\n        'dateFilter',\n        'startAt',\n        'precision',\n        'startView',\n        'dateClass',\n        'weekNumbers',\n        'pickerOpen',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-date-input',\n  },\n})\nexport class DateInputComponent {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected dateInput = inject(DateInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openCalendar,\n  );\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseDate);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.dateInput.hasValue() &&\n      (this.dateInput.focused() || this.dateInput.pickerOpen()) &&\n      this.dateInput.interactive(),\n  );\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.dateInput.clearValue();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.dateInput.focus(options);\n  }\n}\n","<input\n  [etInputMask]=\"dateInput.maskPattern()\"\n  class=\"et-date-input-field\"\n  etDateInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n/>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-calendar\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <et-calendar\n      [value]=\"dateInput.date()\"\n      [min]=\"dateInput.minDate()\"\n      [max]=\"dateInput.maxDate()\"\n      [dateFilter]=\"dateInput.dateFilter()\"\n      [startAt]=\"dateInput.startAt()\"\n      [precision]=\"dateInput.precision()\"\n      [startView]=\"dateInput.startView()\"\n      [dateClass]=\"dateInput.dateClass()\"\n      [weekNumbers]=\"dateInput.weekNumbers()\"\n      [locale]=\"dateInput.effectiveLocale()\"\n      (valueChange)=\"dateInput.selectDate($event)\"\n    />\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateInputComponent } from './date-input.component';\nimport { DateInputDirective, DateInputFieldDirective } from './headless';\n\nexport const DATE_INPUT_IMPORTS = [\n  DateInputComponent,\n  DateInputDirective,\n  DateInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","// codes 3010-3019 (inside the shared date & time inputs block 3000-3099)\nexport const DATE_RANGE_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_DATE_RANGE_INPUT: 3010,\n  DUPLICATE_FIELD: 3011,\n} as const;\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { ButtonComponent } from '../../button/button.component';\nimport { DateRangePreset, DateRangePresetOption } from './date-range-presets';\nimport { injectDateTimeLabels } from './date-time-labels';\n\n@Component({\n  selector: 'et-date-range-presets',\n  template: `\n    @for (option of options(); track option.preset) {\n      <button\n        [pressed]=\"option.active\"\n        (click)=\"presetSelect.emit(option.preset)\"\n        class=\"et-date-range-preset\"\n        et-button\n        size=\"sm\"\n        variant=\"transparent\"\n        type=\"button\"\n      >\n        {{ option.label }}\n      </button>\n    }\n  `,\n  styleUrl: './date-range-presets.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ButtonComponent],\n  host: {\n    class: 'et-date-range-presets',\n    role: 'group',\n    '[attr.aria-label]': 'labels().presets',\n  },\n})\nexport class DateRangePresetsComponent {\n  protected labels = injectDateTimeLabels();\n\n  public options = input.required<readonly DateRangePresetOption[]>();\n\n  public presetSelect = output<DateRangePreset>();\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { InputMaskHost } from '../../masked-input/headless/input-mask-host';\nimport { DateRangePickerInputDirective, DateRangeSide } from './date-range-picker-input.directive';\n\n/**\n * Shared text field for the range picker inputs' two sides (`input[etDateRangeInputField]`,\n * `input[etDateTimeRangeInputField]`): shows the committed side value in the display format, commits\n * typed text on blur/Enter, keeps unparseable text visible, and opens the picker on Alt+ArrowDown.\n *\n * Must be extended by an `@Directive` - subclasses inject their range directive into `rangeInput` and\n * provide `INPUT_MASK_HOST` via `useExisting`.\n */\n@Directive({\n  host: {\n    type: 'text',\n    autocomplete: 'off',\n    '[attr.inputmode]': 'maskAttached() ? \"numeric\" : null',\n    '[attr.placeholder]': 'placeholder() || null',\n    '[attr.aria-required]': 'rangeInput?.required() || null',\n    '[attr.aria-invalid]': 'rangeInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'rangeInput?.describedByIds() || null',\n    // attr bindings, not [disabled]/[readOnly]: this base has no selector, so the template\n    // checker can't tie the host to an <input> and rejects the property forms (NG8002)\n    '[attr.disabled]': 'rangeInput?.disabled() ? \"\" : null',\n    '[attr.readonly]': 'rangeInput?.readonly() ? \"\" : null',\n    '(input)': 'handleInput()',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport abstract class DateRangePickerInputFieldDirective implements InputMaskHost {\n  protected abstract rangeInput: DateRangePickerInputDirective | null;\n  protected abstract duplicateFieldError(side: DateRangeSide): RuntimeError<number>;\n\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  private destroyRef = inject(DestroyRef);\n\n  /** Which end of the range this field edits. */\n  public side = input.required<DateRangeSide>();\n\n  /** Set while an `[etInputMask]` owns this field's element text and value-sync. */\n  protected maskAttached = signal(false);\n\n  /**\n   * This side's field text as an attached mask sees it (`InputMaskHost.value`):\n   * display-shaped, never containing guide placeholders.\n   */\n  public value = linkedSignal(() => {\n    const rangeInput = this.rangeInput;\n\n    if (!rangeInput) {\n      return '';\n    }\n\n    return this.mirrorText(rangeInput);\n  });\n\n  /** Whether this side's field has focus (`InputMaskHost.focused`) - drives the mask's guide display. */\n  public focused = computed(() => this.rangeInput?.focusedSide() === this.side());\n\n  /** The native element an attached mask rewrites (`InputMaskHost.nativeControl`). */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  constructor() {\n    this.nativeControl.set(this.elementRef.nativeElement);\n\n    // the side input is not available at construction time - register reactively\n    effect((onCleanup) => {\n      const rangeInput = this.rangeInput;\n\n      if (!rangeInput) {\n        return;\n      }\n\n      const side = this.side();\n\n      rangeInput.registerField({ side, field: this, duplicateFieldError: () => this.duplicateFieldError(side) });\n      onCleanup(() => rangeInput.unregisterField(side, this));\n    });\n\n    // mid-typing rewrites would fight the caret, so the element only mirrors while unfocused; an\n    // attached mask owns the element text instead\n    effect(() => {\n      const rangeInput = this.rangeInput;\n\n      if (!rangeInput || this.maskAttached()) {\n        return;\n      }\n\n      const text = this.mirrorText(rangeInput);\n\n      if (rangeInput.focusedSide() !== this.side() && this.elementRef.nativeElement.value !== text) {\n        this.elementRef.nativeElement.value = text;\n      }\n    });\n\n    // masked typing bypasses handleInput, so mirror the mask-written text into the side's inputText\n    effect(() => {\n      if (!this.maskAttached()) {\n        return;\n      }\n\n      const text = this.value();\n      const rangeInput = this.rangeInput;\n      const side = this.side();\n\n      if (rangeInput && untracked(() => rangeInput.focusedSide()) === side) {\n        untracked(() => rangeInput.setInputText(side, text));\n      }\n    });\n\n    this.destroyRef.onDestroy(() => {\n      if (this.rangeInput?.focusedSide() === this.side()) {\n        this.rangeInput.focusedSide.set(null);\n      }\n    });\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  /**\n   * @internal Blanks this side's field text. `value` is what an attached mask reads and what\n   * `commitText()` hands to the next commit, so blanking the element alone would let the mask's\n   * text come back on the next blur.\n   */\n  public resetText() {\n    this.value.set('');\n    this.elementRef.nativeElement.value = '';\n  }\n\n  /** @internal `InputMaskHost` - an attached mask owns value-sync; our input/mirror handling stands down. */\n  public suppressNativeSync() {\n    this.maskAttached.set(true);\n  }\n\n  /** @internal `InputMaskHost` - the mask was set to `null`; native handling resumes. */\n  public resumeNativeSync() {\n    this.maskAttached.set(false);\n  }\n\n  protected placeholder() {\n    const rangeInput = this.rangeInput;\n\n    if (!rangeInput) {\n      return '';\n    }\n\n    if (rangeInput.mixed()) {\n      return rangeInput.resolvedMixedLabel();\n    }\n\n    return this.side() === 'start' ? rangeInput.startPlaceholder() : rangeInput.endPlaceholder();\n  }\n\n  protected handleInput() {\n    if (this.maskAttached()) {\n      return;\n    }\n\n    this.rangeInput?.setInputText(this.side(), this.elementRef.nativeElement.value);\n  }\n\n  protected handleFocus() {\n    this.rangeInput?.focusedSide.set(this.side());\n  }\n\n  protected handleBlur() {\n    const rangeInput = this.rangeInput;\n\n    if (!rangeInput) {\n      return;\n    }\n\n    rangeInput.commitSide(this.side(), this.commitText());\n\n    if (rangeInput.focusedSide() === this.side()) {\n      rangeInput.focusedSide.set(null);\n    }\n\n    rangeInput.touched.set(true);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const rangeInput = this.rangeInput;\n\n    if (!rangeInput) {\n      return;\n    }\n\n    if (event.key === 'Enter') {\n      rangeInput.commitSide(this.side(), this.commitText());\n\n      // the display effect only runs unfocused, so a successful commit reformats in place here\n      if (!rangeInput.sideParseError(this.side()) && !this.maskAttached()) {\n        this.elementRef.nativeElement.value = rangeInput.displayValue(this.side());\n      }\n\n      return;\n    }\n\n    if (event.key === 'ArrowDown' && event.altKey) {\n      event.preventDefault();\n      rangeInput.openPicker();\n    }\n  }\n\n  private mirrorText(rangeInput: DateRangePickerInputDirective) {\n    const side = this.side();\n\n    return rangeInput.sideParseError(side) ? rangeInput.inputText(side) : rangeInput.displayValue(side);\n  }\n\n  private commitText() {\n    return this.maskAttached() ? this.value() : this.elementRef.nativeElement.value;\n  }\n}\n","import { Locale } from 'date-fns';\nimport { enUS } from 'date-fns/locale/en-US';\n\n/** The two halves of a combined format, with every literal kept on the date side it sits on. */\nexport type DateTimeFormatSplit = {\n  datePrefix: string;\n  time: string;\n  dateSuffix: string;\n};\n\n/** date-fns' own pre-pass: the `P`/`p` locale formats are expanded before the format is tokenized. */\nconst LONG_FORMAT_PATTERN = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\n/** date-fns' formatting tokenizer. */\nconst TOKEN_PATTERN = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\nconst TIME_TOKENS = /* @__PURE__ */ new Set([\n  'a',\n  'b',\n  'B',\n  'h',\n  'H',\n  'K',\n  'k',\n  'm',\n  's',\n  'S',\n  'X',\n  'x',\n  'O',\n  'z',\n  'Z',\n]);\nconst DATE_TOKENS = /* @__PURE__ */ new Set([\n  'G',\n  'y',\n  'Y',\n  'R',\n  'u',\n  'Q',\n  'q',\n  'M',\n  'L',\n  'w',\n  'I',\n  'd',\n  'D',\n  'E',\n  'i',\n  'e',\n  'c',\n]);\n\nconst LONG_FORMAT_WIDTHS = ['short', 'medium', 'long', 'full'] as const;\n\ntype TokenKind = 'date' | 'time' | 'literal' | 'unsplittable';\n\nconst widthOf = (run: number) => LONG_FORMAT_WIDTHS[Math.min(run, LONG_FORMAT_WIDTHS.length) - 1] ?? 'full';\n\nconst expandLongToken = (token: string, formatLong: Locale['formatLong']) => {\n  const dateRun = token.match(/P+/)?.[0].length ?? 0;\n  const timeRun = token.match(/p+/)?.[0].length ?? 0;\n\n  if (dateRun === 0) {\n    return formatLong.time({ width: widthOf(timeRun) });\n  }\n\n  const date = formatLong.date({ width: widthOf(dateRun) });\n\n  if (timeRun === 0) {\n    return date;\n  }\n\n  return formatLong\n    .dateTime({ width: widthOf(dateRun) })\n    .replace('{{date}}', date)\n    .replace('{{time}}', formatLong.time({ width: widthOf(timeRun) }));\n};\n\nconst expandLongFormats = (format: string, locale: Locale) =>\n  (format.match(LONG_FORMAT_PATTERN) ?? [])\n    .map((token) => (token[0] === 'P' || token[0] === 'p' ? expandLongToken(token, locale.formatLong) : token))\n    .join('');\n\nconst kindOf = (token: string): TokenKind => {\n  const first = token[0] ?? '';\n\n  if (first === \"'\") {\n    return 'literal';\n  }\n\n  if (TIME_TOKENS.has(first)) {\n    return 'time';\n  }\n\n  if (DATE_TOKENS.has(first)) {\n    return 'date';\n  }\n\n  // `t`/`T` are whole epoch timestamps, and an unknown letter is date-fns' problem\n  return /[a-zA-Z]/.test(first) ? 'unsplittable' : 'literal';\n};\n\n/**\n * Splits a combined date & time format into the span carrying the time and the date format around\n * it. `null` when the format has no time half, no date half, or interleaves the two.\n */\nexport const splitDateTimeFormat = (format: string, locale: Locale | null): DateTimeFormatSplit | null => {\n  const tokens = expandLongFormats(format, locale ?? enUS).match(TOKEN_PATTERN);\n\n  if (tokens === null) {\n    return null;\n  }\n\n  const kinds = tokens.map(kindOf);\n\n  if (kinds.includes('unsplittable') || !kinds.includes('date')) {\n    return null;\n  }\n\n  const first = kinds.indexOf('time');\n  const last = kinds.lastIndexOf('time');\n\n  if (first === -1 || kinds.slice(first, last + 1).includes('date')) {\n    return null;\n  }\n\n  return {\n    datePrefix: tokens.slice(0, first).join(''),\n    time: tokens.slice(first, last + 1).join(''),\n    dateSuffix: tokens.slice(last + 1).join(''),\n  };\n};\n","import { TZDate } from '@date-fns/tz';\nimport { Locale } from 'date-fns';\nimport { formatDateValue, parseDateValue, FormatDateValueOptions, ParseDateValueOptions } from './date-value';\nimport { splitDateTimeFormat } from './date-time-format-split';\n\nexport type ZonedFields = {\n  year: number;\n  month: number;\n  day: number;\n  hours: number;\n  minutes: number;\n  seconds: number;\n  milliseconds: number;\n};\n\nexport type ZonedFormatOptions = FormatDateValueOptions & { timeZone: string | null };\nexport type ZonedParseOptions = ParseDateValueOptions & { timeZone: string | null };\n\nexport const viewerTimeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nexport const isValidTimeZone = (timeZone: string) => {\n  try {\n    new Intl.DateTimeFormat('en-US', { timeZone });\n\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nexport const timeZoneDisplayName = (timeZone: string) => (timeZone.split('/').pop() ?? timeZone).replace(/_/g, ' ');\n\nexport const zonedFields = (instant: Date, timeZone: string): ZonedFields => {\n  const zoned = new TZDate(instant, timeZone);\n\n  return {\n    year: zoned.getFullYear(),\n    month: zoned.getMonth(),\n    day: zoned.getDate(),\n    hours: zoned.getHours(),\n    minutes: zoned.getMinutes(),\n    seconds: zoned.getSeconds(),\n    milliseconds: zoned.getMilliseconds(),\n  };\n};\n\n/** A wall clock a daylight-saving jump skipped resolves forward to the first instant that exists. */\nexport const instantFromZonedFields = (fields: ZonedFields, timeZone: string): Date =>\n  new Date(\n    new TZDate(\n      fields.year,\n      fields.month,\n      fields.day,\n      fields.hours,\n      fields.minutes,\n      fields.seconds,\n      fields.milliseconds,\n      timeZone,\n    ).getTime(),\n  );\n\nexport const localFields = (date: Date): ZonedFields => ({\n  year: date.getFullYear(),\n  month: date.getMonth(),\n  day: date.getDate(),\n  hours: date.getHours(),\n  minutes: date.getMinutes(),\n  seconds: date.getSeconds(),\n  milliseconds: date.getMilliseconds(),\n});\n\n/**\n * Highlighting only - never derive a committed value from one. The runtime's own daylight-saving\n * jump has no wall clock for one hour a year and the `Date` constructor moves those parts forward,\n * so a value built out of the result would commit an hour nobody picked. Take {@link zonedFields}\n * of the instant instead.\n */\nexport const zonedProxy = (instant: Date, timeZone: string): Date => {\n  const fields = zonedFields(instant, timeZone);\n\n  return new Date(\n    fields.year,\n    fields.month,\n    fields.day,\n    fields.hours,\n    fields.minutes,\n    fields.seconds,\n    fields.milliseconds,\n  );\n};\n\nexport const formatInZone = (instant: Date, options: ZonedFormatOptions): string | null => {\n  const timeZone = options.timeZone;\n\n  if (timeZone === null) {\n    return formatDateValue(instant, options);\n  }\n\n  return formatDateValue(new TZDate(instant, timeZone) as Date, options);\n};\n\nexport const parseInZone = (value: string, options: ZonedParseOptions): Date | null => {\n  const parsed = parseDateValue(value, options);\n  const timeZone = options.timeZone;\n\n  if (parsed === null || timeZone === null) {\n    return parsed;\n  }\n\n  return instantFromZonedFields(localFields(parsed), timeZone);\n};\n\nexport const reinterpretInZone = (local: Date, timeZone: string | null): Date =>\n  timeZone === null ? local : instantFromZonedFields(localFields(local), timeZone);\n\nexport const withZonedDay = (instant: Date, options: { day: Date; timeZone: string }): Date =>\n  instantFromZonedFields(\n    {\n      ...zonedFields(instant, options.timeZone),\n      year: options.day.getFullYear(),\n      month: options.day.getMonth(),\n      day: options.day.getDate(),\n    },\n    options.timeZone,\n  );\n\nexport const withZonedTimeOfDay = (instant: Date, options: { time: Date; timeZone: string }): Date =>\n  instantFromZonedFields(\n    {\n      ...zonedFields(instant, options.timeZone),\n      hours: options.time.getHours(),\n      minutes: options.time.getMinutes(),\n      seconds: options.time.getSeconds(),\n      milliseconds: 0,\n    },\n    options.timeZone,\n  );\n\nexport type LocalReadingOptions = {\n  format: string;\n  locale?: Locale | null;\n  timeZone: string | null;\n};\n\n/**\n * How `instant` reads in the runtime's own zone, or `null` when that is the same wall clock the\n * field already shows. The date is dropped whenever both zones land on the same day.\n */\nexport const localReading = (instant: Date | null, options: LocalReadingOptions): string | null => {\n  const timeZone = options.timeZone;\n\n  if (instant === null || timeZone === null) {\n    return null;\n  }\n\n  const local = formatDateValue(instant, options);\n\n  if (local === null || local === formatInZone(instant, { ...options, timeZone })) {\n    return null;\n  }\n\n  const fields = zonedFields(instant, timeZone);\n  const sameDay =\n    fields.year === instant.getFullYear() && fields.month === instant.getMonth() && fields.day === instant.getDate();\n\n  if (!sameDay) {\n    return local;\n  }\n\n  const split = splitDateTimeFormat(options.format, options.locale ?? null);\n\n  if (split === null || split.time.trim() === '') {\n    return local;\n  }\n\n  return formatDateValue(instant, { ...options, format: split.time }) ?? local;\n};\n","import {\n  DestroyRef,\n  Directive,\n  Signal,\n  WritableSignal,\n  computed,\n  inject,\n  input,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { FORM_FIELD, FormValueControl } from '@angular/forms/signals';\nimport { FormFieldControl } from '../../form-field/headless';\nimport { parseDateValue } from './date-value';\nimport { DatePickerInputFieldBase, PickerInputBaseDirective } from './picker-input-base.directive';\nimport { resolvePickerCommit } from './picker-input-commit';\nimport { formatInZone, reinterpretInZone, zonedProxy } from './time-zone';\n\n/** The two wire strings a range control holds; a side is `null` while empty/unparseable. */\nexport type DateRangeValue = {\n  start: string | null;\n  end: string | null;\n};\n\nexport type DateRangeSide = 'start' | 'end';\n\nexport const DATE_RANGE_SIDES = ['start', 'end'] as const;\n\ntype SideState = {\n  inputText: WritableSignal<string>;\n  parseError: WritableSignal<boolean>;\n  field: WritableSignal<DatePickerInputFieldBase | null>;\n};\n\ntype RegisterFieldOptions = {\n  side: DateRangeSide;\n  field: DatePickerInputFieldBase;\n  duplicateFieldError: () => RuntimeError<number>;\n};\n\n/**\n * Shared host for the two-sided range picker inputs (`et-date-range-input`, `et-time-range-input`,\n * `et-date-time-range-input`): one registered field-control containing two text inputs that share a\n * single range-mode picker, on top of `PickerInputBaseDirective`.\n *\n * Must be extended by an `@Directive` - Angular only surfaces inherited inputs from a decorated base.\n */\n@Directive()\nexport abstract class DateRangePickerInputDirective\n  extends PickerInputBaseDirective\n  implements FormValueControl<DateRangeValue>, FormFieldControl\n{\n  private ngFormField = inject(FORM_FIELD, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  /** The message the form field shows when either side's typed text does not parse. */\n  public abstract resolvedParseErrorMessage: Signal<string>;\n\n  /**\n   * @internal Parses one side's typed text into the `Date` that should be committed, or `null` when\n   * nothing parses.\n   */\n  public abstract parseSideCommit(raw: string): Date | null;\n\n  /** Wire values in `valueFormat`; a side is `null` while empty/unparseable. */\n  public value = model<DateRangeValue>({ start: null, end: null });\n  public startPlaceholder = input('');\n  public endPlaceholder = input('');\n\n  /**\n   * Accessible name of the start field, which is the named widget - the group around both fields\n   * takes the projected `<et-label>` (or the control's own `aria-label`) instead.\n   */\n  public startAriaLabel = input<string | null>(null);\n  /** Accessible name of the end field. See {@link startAriaLabel}. */\n  public endAriaLabel = input<string | null>(null);\n\n  /** The IANA zone both fields' wall clock stands for, or `null` to stay in the runtime's own zone. */\n  public effectiveTimeZone: Signal<string | null> = signal(null);\n\n  /** The side the focused field edits. */\n  public focusedSide = signal<DateRangeSide | null>(null);\n\n  private sides: Record<DateRangeSide, SideState> = {\n    start: { inputText: signal(''), parseError: signal(false), field: signal(null) },\n    end: { inputText: signal(''), parseError: signal(false), field: signal(null) },\n  };\n\n  public startDate = computed(() => (this.mixed() ? null : this.parseSide(this.value().start)));\n  public endDate = computed(() => (this.mixed() ? null : this.parseSide(this.value().end)));\n\n  /** The two committed ends as `Date` objects - what the picker's calendar and time picker bind to. */\n  public calendarRange = computed(() => ({ start: this.startDate(), end: this.endDate() }));\n\n  public startParseError: Signal<boolean> = this.sides.start.parseError.asReadonly();\n  public endParseError: Signal<boolean> = this.sides.end.parseError.asReadonly();\n  public parseError = computed(() => this.startParseError() || this.endParseError());\n\n  public focused = computed(() => this.focusedSide() !== null || this.pickerOpen());\n  public hasValue = computed(() => {\n    if (this.mixed()) {\n      return true;\n    }\n\n    const { start, end } = this.value();\n\n    return (\n      start !== null ||\n      end !== null ||\n      this.sides.start.inputText().length > 0 ||\n      this.sides.end.inputText().length > 0 ||\n      this.displayValue('start') !== '' ||\n      this.displayValue('end') !== ''\n    );\n  });\n\n  /**\n   * A range is named as a group: by the author's `aria-label`/`aria-labelledby` on the control, or\n   * by naming both of its fields.\n   */\n  public override hasCustomAccessibleName = computed(\n    () =>\n      !!this.ariaLabel()?.trim() ||\n      !!this.ariaLabelledby()?.trim() ||\n      (!!this.startAriaLabel()?.trim() && !!this.endAriaLabel()?.trim()),\n  );\n\n  private formFieldControlView: FormFieldControl = {\n    touched: this.touched,\n    invalid: this.invalid,\n    errors: computed(() => this.ngFormField?.state().errorSummary() ?? this.errors()),\n    name: this.name,\n    required: this.required,\n    disabled: this.disabled,\n    readonly: this.readonly,\n    describedBy: this.describedBy,\n    // both are subclass fields, which initialize after this one - reading them through a computed\n    // defers it past construction. Assigning them directly would register `undefined`.\n    controlType: computed(() => this.controlType()),\n    resolvedParseErrorMessage: computed(() => this.resolvedParseErrorMessage()),\n    focused: this.focused,\n    expanded: this.expanded,\n    hasValue: this.hasValue,\n    parseError: this.parseError,\n    hasCustomAccessibleName: this.hasCustomAccessibleName,\n    activate: () => this.activate(),\n  };\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this.formFieldControlView);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this.formFieldControlView));\n  }\n\n  public inputText(side: DateRangeSide) {\n    return this.sides[side].inputText();\n  }\n\n  public sideParseError(side: DateRangeSide) {\n    return this.sides[side].parseError();\n  }\n\n  /** The committed value of one side rendered in the format in effect. */\n  public displayValue(side: DateRangeSide) {\n    const date = this.sideDate(side);\n\n    if (date === null) {\n      return '';\n    }\n\n    return (\n      formatInZone(date, {\n        format: this.effectiveDisplayFormat(),\n        locale: this.effectiveLocale(),\n        timeZone: this.effectiveTimeZone(),\n      }) ?? ''\n    );\n  }\n\n  /** The committed `Date` of one side, or `null` while that side is empty (or the value is masked). */\n  public sideDate(side: DateRangeSide) {\n    return side === 'start' ? this.startDate() : this.endDate();\n  }\n\n  /**\n   * One side as the calendar and the time picker see it: a plain `Date` whose local wall clock is\n   * the zone's. Highlighting only - see `zonedProxy`.\n   */\n  public pickerSideDate(side: DateRangeSide) {\n    const date = this.sideDate(side);\n    const timeZone = this.effectiveTimeZone();\n\n    return date === null || timeZone === null ? date : zonedProxy(date, timeZone);\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    const target = this.mixed() || this.value().start === null || this.value().end !== null ? 'start' : 'end';\n\n    this.sides[target].field()?.focus(options);\n  }\n\n  /** @internal */\n  public setInputText(side: DateRangeSide, text: string) {\n    this.sides[side].inputText.set(text);\n  }\n\n  /**\n   * @internal Commits one side's typed text, with the subclass's parse rules: empty clears that\n   * side, a successful parse writes it, anything else keeps the raw text and raises `parseError`.\n   */\n  public commitSide(side: DateRangeSide, raw: string) {\n    const outcome = resolvePickerCommit(raw, {\n      displayValue: this.displayValue(side),\n      parseError: this.sideParseError(side),\n      interactive: this.interactive(),\n      parse: (text) => this.parseSideCommit(text),\n    });\n\n    if (outcome === null) {\n      return;\n    }\n\n    this.beforeCommitSide(side);\n\n    const state = this.sides[side];\n\n    state.inputText.set(outcome.text);\n    state.parseError.set(outcome.text.length > 0);\n\n    if (outcome.parsed !== null) {\n      this.commitSideValue(side, this.formatSide(reinterpretInZone(outcome.parsed, this.effectiveTimeZone())));\n\n      return;\n    }\n\n    if (!this.mixed()) {\n      this.writeSide(side, null);\n    }\n  }\n\n  /** @internal Runs once a side's commit is known to apply. */\n  public beforeCommitSide(side: DateRangeSide) {\n    void side;\n  }\n\n  /** Clears both sides and any uncommitted field text - wired to the styled input's clear button. */\n  public clearRange() {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.value.set({ start: null, end: null });\n    this.mixed.set(false);\n\n    for (const side of DATE_RANGE_SIDES) {\n      this.clearSideText(side);\n      this.sides[side].field()?.resetText();\n    }\n  }\n\n  /**\n   * @internal Both reads are untracked: a field registers from an effect, so a tracked read of the\n   * signal the same call writes re-runs that effect forever.\n   */\n  public registerField({ side, field, duplicateFieldError }: RegisterFieldOptions) {\n    if (ngDevMode && untracked(() => this.sides[side].field())) {\n      throw duplicateFieldError();\n    }\n\n    this.sides[side].field.set(field);\n  }\n\n  /** @internal See {@link registerField} for why the read is untracked. */\n  public unregisterField(side: DateRangeSide, field: DatePickerInputFieldBase) {\n    if (untracked(() => this.sides[side].field()) === field) {\n      this.sides[side].field.set(null);\n    }\n  }\n\n  /** @internal One side's committed instant rendered in `valueFormat`, with the field zone's offset. */\n  public formatSide(instant: Date) {\n    return formatInZone(instant, {\n      format: this.effectiveValueFormat(),\n      locale: this.effectiveLocale(),\n      timeZone: this.effectiveTimeZone(),\n    });\n  }\n\n  /** @internal Commits one side's `Date`, dropping that side's pending field text. */\n  public commitSideDate(side: DateRangeSide, instant: Date) {\n    this.clearSideText(side);\n    this.commitSideValue(side, this.formatSide(instant));\n  }\n\n  /**\n   * @internal Writes one resolving side value. While mixed, replace semantics apply: the hidden raw\n   * range is dropped rather than merged into.\n   */\n  public commitSideValue(side: DateRangeSide, sideValue: string | null) {\n    if (this.mixed()) {\n      this.value.set({ start: null, end: null, [side]: sideValue });\n      this.mixed.set(false);\n\n      return;\n    }\n\n    this.writeSide(side, sideValue);\n  }\n\n  /**\n   * @internal Writes a picker-selected range: both sides at once, any pending field text dropped,\n   * and the masked bulk-edit state resolved.\n   */\n  public writeRange(range: { start: Date | null; end: Date | null }) {\n    for (const side of DATE_RANGE_SIDES) {\n      this.clearSideText(side);\n    }\n\n    this.value.set({\n      start: range.start === null ? null : this.formatSide(range.start),\n      end: range.end === null ? null : this.formatSide(range.end),\n    });\n    this.mixed.set(false);\n  }\n\n  /** @internal Drops one side's uncommitted text and its parse error. */\n  public clearSideText(side: DateRangeSide) {\n    this.sides[side].inputText.set('');\n    this.sides[side].parseError.set(false);\n  }\n\n  protected anchorField() {\n    return this.sides.start.field();\n  }\n\n  private parseSide(value: string | null) {\n    if (value === null) {\n      return null;\n    }\n\n    return parseDateValue(value, { format: this.effectiveValueFormat(), locale: this.effectiveLocale() });\n  }\n\n  private writeSide(side: DateRangeSide, sideValue: string | null) {\n    const current = this.value();\n\n    if (current[side] !== sideValue) {\n      this.value.set({ ...current, [side]: sideValue });\n    }\n  }\n}\n","import { computed, Signal } from '@angular/core';\nimport { DateRangePreset, DateRangePresetOption, DateRangePresetRange } from '../date-range-presets';\nimport { DateTimeLabels } from '../date-time-labels';\nimport { DateRangePickerInputDirective } from './date-range-picker-input.directive';\nimport { reinterpretInZone, zonedProxy } from './time-zone';\n\nexport type CreateDateRangePresetsOptions = {\n  host: DateRangePickerInputDirective;\n  presets: Signal<readonly DateRangePreset[]>;\n  labels: Signal<DateTimeLabels>;\n  /** Snaps a resolved wall-clock end onto what the control stores - a day range drops the time. */\n  normalize: (date: Date) => Date;\n};\n\n/** The preset state a range input shares with its styled component. Call in an injection context. */\nexport const createDateRangePresets = ({ host, presets, labels, normalize }: CreateDateRangePresetsOptions) => {\n  const resolveInstants = (preset: DateRangePreset): DateRangePresetRange => {\n    const timeZone = host.effectiveTimeZone();\n    const now = timeZone === null ? new Date() : zonedProxy(new Date(), timeZone);\n    const range = preset.resolve(now, { locale: host.effectiveLocale() });\n\n    return {\n      start: reinterpretInZone(normalize(range.start), timeZone),\n      end: reinterpretInZone(normalize(range.end), timeZone),\n    };\n  };\n\n  const options = computed<DateRangePresetOption[]>(() => {\n    const value = host.value();\n    const mixed = host.mixed();\n    const currentLabels = labels();\n\n    return presets().map((preset) => {\n      const range = resolveInstants(preset);\n\n      return {\n        preset,\n        label: typeof preset.label === 'string' ? preset.label : preset.label(currentLabels),\n        active: !mixed && value.start === host.formatSide(range.start) && value.end === host.formatSide(range.end),\n      };\n    });\n  });\n\n  return {\n    options,\n    /** Writes the preset's range, or does nothing while the control is not interactive. */\n    apply: (preset: DateRangePreset) => {\n      if (!host.interactive()) return false;\n\n      host.writeRange(resolveInstants(preset));\n      host.touched.set(true);\n\n      return true;\n    },\n  };\n};\n","import { Directive, booleanAttribute, computed, input, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { startOfDay } from 'date-fns';\nimport {\n  CalendarDateClassFn,\n  CalendarPrecision,\n  CalendarRangeSelectionStrategy,\n  CalendarView,\n  startOfCalendarUnit,\n} from '../../../../calendar/headless';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectDateFormat } from '../../date-time-formats';\nimport { DateRangePickerInputDirective, DateRangeValue } from '../../internals/date-range-picker-input.directive';\nimport { parseDateValue } from '../../internals/date-value';\nimport { displayFormatForPrecision } from '../../internals/precision-format';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\nimport { DateRangePreset } from '../../date-range-presets';\nimport { createDateRangePresets } from '../../internals/date-range-presets-state';\n\nexport type { DateRangeSide, DateRangeValue } from '../../internals/date-range-picker-input.directive';\n\n/**\n * A date range form control: one registered field-control containing two text\n * inputs that share a single range-mode calendar picker. The value is\n * `{ start, end }` of `valueFormat` wire strings; each side parses strictly\n * against `displayFormat` on blur/Enter, exactly like the single date input.\n */\n@Directive({\n  selector: '[etDateRangeInput]',\n  exportAs: 'etDateRangeInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: DateRangeInputDirective }],\n})\nexport class DateRangeInputDirective extends DateRangePickerInputDirective implements FormValueControl<DateRangeValue> {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectDateFormat();\n\n  /** Message the form field shows when either side's typed text can't be parsed as a date. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /**\n   * date-fns format shown in (and parsed from) the fields. Unset, it follows `precision`: the\n   * locale's short date at day precision, that same pattern without its day at month precision\n   * (`MM.yyyy`), the year alone at year precision.\n   */\n  public displayFormat = input<string | null>(null);\n\n  /**\n   * How precise the two dates are - `'month'` makes this a month range (`07/2025 – 03/2026`). Both\n   * ends are the start of their unit, and the picker calendar selects and bands in the grid holding it.\n   */\n  public precision = input<CalendarPrecision>('day');\n\n  /**\n   * What a pick means in the picker calendar - snap to whole weeks, take a fixed number of days.\n   * Unset, the usual open-then-close rule applies.\n   */\n  public rangeSelectionStrategy = input<CalendarRangeSelectionStrategy | null>(null);\n\n  /**\n   * A period to band behind the selected range in the picker - \"vs. the previous 30 days\". Purely\n   * presentational: it never enters the value and its cells stay selectable.\n   */\n  public comparisonStart = input<Date | null>(null);\n  public comparisonEnd = input<Date | null>(null);\n\n  /** Forwarded to the picker calendar. (`min`/`max` are reserved by signal forms.) */\n  public minDate = input<Date | null>(null);\n  public maxDate = input<Date | null>(null);\n  public dateFilter = input<((date: Date) => boolean) | null>(null);\n  /** Month the picker calendar opens at while the range is empty. */\n  public startAt = input<Date | null>(null);\n\n  /** Which grid the picker calendar opens on - `'year'` to pick a month first, `'multiYear'` a year. */\n  public startView = input<CalendarView>('month');\n\n  /** Per-cell classes for the picker calendar - busy days, holidays, markers of your own. */\n  public dateClass = input<CalendarDateClassFn | null>(null);\n\n  /** Renders the picker calendar's week-number column. */\n  public weekNumbers = input(false, { transform: booleanAttribute });\n\n  /**\n   * Ranges offered beside the picker calendar - build them with the preset factories\n   * (`lastDaysPreset(7)`, `thisMonthPreset()`, …) or write your own. Picking one commits it and\n   * closes the picker.\n   */\n  public presets = input<readonly DateRangePreset[]>([]);\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidDateRange);\n\n  /** @internal */\n  public presetList = createDateRangePresets({\n    host: this,\n    presets: this.presets,\n    labels: this.dateTimeLabels,\n    normalize: (date) => startOfCalendarUnit(date, this.precision()),\n  });\n\n  /** The format in effect: this instance's `displayFormat`, else the one `precision` implies. */\n  public effectiveDisplayFormat = computed(\n    () => this.displayFormat() ?? displayFormatForPrecision(this.precision(), this.effectiveLocale()),\n  );\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DATE_RANGE_INPUT);\n\n  /** Commits a picker range; a completed range closes the picker. */\n  public selectCalendarRange(range: { start: Date | null; end: Date | null }) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const precision = this.precision();\n    const unitStart = (date: Date | null) => (date === null ? null : startOfCalendarUnit(date, precision));\n\n    this.writeRange({ start: unitStart(range.start), end: unitStart(range.end) });\n\n    if (range.start !== null && range.end !== null) {\n      this.touched.set(true);\n      this.closePicker();\n    }\n  }\n\n  /** Commits a preset's range and closes the picker. */\n  public selectPreset(preset: DateRangePreset) {\n    if (this.presetList.apply(preset)) {\n      this.closePicker();\n    }\n  }\n\n  public parseSideCommit(raw: string) {\n    // reference midnight so a date-only `displayFormat` doesn't fold the current wall-clock time\n    // into a time-bearing `valueFormat`\n    const parsed = parseDateValue(raw, {\n      format: this.effectiveDisplayFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: startOfDay(new Date()),\n    });\n\n    if (parsed === null) {\n      return null;\n    }\n\n    return startOfCalendarUnit(parsed, this.precision());\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DateRangePickerInputFieldDirective } from '../../internals/date-range-picker-input-field.directive';\nimport { DATE_RANGE_INPUT_ERROR_CODES } from '../date-range-input-errors';\nimport { DateRangeInputDirective } from './date-range-input.directive';\n\n/**\n * One side of a date range input: shows the committed side value in the\n * display format, commits typed text strictly on blur/Enter, keeps\n * unparseable text visible, and opens the picker on Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etDateRangeInputField]',\n  exportAs: 'etDateRangeInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: DateRangeInputFieldDirective }],\n})\nexport class DateRangeInputFieldDirective extends DateRangePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected rangeInput = inject(DateRangeInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    if (ngDevMode && !this.rangeInput) {\n      throw new RuntimeError(\n        DATE_RANGE_INPUT_ERROR_CODES.FIELD_OUTSIDE_DATE_RANGE_INPUT,\n        '[DateRangeInputFieldDirective] etDateRangeInputField must be placed inside an [etDateRangeInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  /** @internal */\n  public duplicateFieldError(side: 'start' | 'end') {\n    return new RuntimeError(\n      DATE_RANGE_INPUT_ERROR_CODES.DUPLICATE_FIELD,\n      `[DateRangeInputFieldDirective] An [etDateRangeInput] accepts only one etDateRangeInputField for its \"${side}\" side.`,\n      { element: this.elementRef.nativeElement },\n    );\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { CALENDAR_IMPORTS } from '../../../calendar';\nimport { CALENDAR_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DateRangePresetsComponent } from '../date-range-presets.component';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateRangeInputDirective, DateRangeInputFieldDirective } from './headless';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-date-range-input',\n  templateUrl: './date-range-input.component.html',\n  styleUrls: ['../range-input-shell.css', './date-range-input.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...CALENDAR_IMPORTS,\n    DateRangeInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    DateRangePresetsComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: DateRangeInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'startPlaceholder',\n        'endPlaceholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'locale',\n        'mask',\n        'minDate',\n        'maxDate',\n        'dateFilter',\n        'startAt',\n        'precision',\n        'startView',\n        'dateClass',\n        'weekNumbers',\n        'rangeSelectionStrategy',\n        'comparisonStart',\n        'comparisonEnd',\n        'presets',\n        'pickerOpen',\n        'startAriaLabel',\n        'endAriaLabel',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-date-range-input',\n    role: 'group',\n    '[attr.aria-label]': 'rangeInput.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'rangeInput.labelId()',\n  },\n})\nexport class DateRangeInputComponent {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected rangeInput = inject(DateRangeInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n\n  /** Shows a clear (×) control while a value is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedStartAriaLabel = computed(\n    () => this.rangeInput.startAriaLabel() ?? this.dateTimeLabels().startDate,\n  );\n\n  protected resolvedEndAriaLabel = computed(() => this.rangeInput.endAriaLabel() ?? this.dateTimeLabels().endDate);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openCalendar,\n  );\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseDateRange);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () => this.clearable() && this.rangeInput.hasValue() && this.rangeInput.focused() && this.rangeInput.interactive(),\n  );\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.rangeInput.clearRange();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.rangeInput.focus(options);\n  }\n}\n","<input\n  [attr.aria-label]=\"resolvedStartAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-date-range-input-field\"\n  etDateRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"start\"\n/>\n\n<span class=\"et-date-range-input-separator\" aria-hidden=\"true\">–</span>\n\n<input\n  [attr.aria-label]=\"resolvedEndAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-date-range-input-field\"\n  etDateRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"end\"\n/>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-calendar\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <div class=\"et-date-range-presets-layout\">\n      @if (rangeInput.presetList.options().length > 0) {\n        <et-date-range-presets\n          [options]=\"rangeInput.presetList.options()\"\n          (presetSelect)=\"rangeInput.selectPreset($event)\"\n        />\n      }\n\n      <et-calendar\n        [rangeValue]=\"rangeInput.calendarRange()\"\n        [min]=\"rangeInput.minDate()\"\n        [max]=\"rangeInput.maxDate()\"\n        [dateFilter]=\"rangeInput.dateFilter()\"\n        [startAt]=\"rangeInput.startAt()\"\n        [precision]=\"rangeInput.precision()\"\n        [startView]=\"rangeInput.startView()\"\n        [dateClass]=\"rangeInput.dateClass()\"\n        [weekNumbers]=\"rangeInput.weekNumbers()\"\n        [rangeSelectionStrategy]=\"rangeInput.rangeSelectionStrategy()\"\n        [comparisonStart]=\"rangeInput.comparisonStart()\"\n        [comparisonEnd]=\"rangeInput.comparisonEnd()\"\n        [locale]=\"rangeInput.effectiveLocale()\"\n        (rangeValueChange)=\"rangeInput.selectCalendarRange($event)\"\n        mode=\"range\"\n      />\n    </div>\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateRangeInputComponent } from './date-range-input.component';\nimport { DateRangeInputDirective, DateRangeInputFieldDirective } from './headless';\n\nexport const DATE_RANGE_INPUT_IMPORTS = [\n  DateRangeInputComponent,\n  DateRangeInputDirective,\n  DateRangeInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","import {\n  addDays,\n  endOfMonth,\n  endOfWeek,\n  endOfYear,\n  Locale,\n  startOfDay,\n  startOfMonth,\n  startOfWeek,\n  startOfYear,\n  subDays,\n  subMonths,\n  subWeeks,\n} from 'date-fns';\nimport { DateTimeLabels } from './date-time-labels';\n\n/** What a preset's `resolve` receives besides `now`. */\nexport type DateRangePresetContext = {\n  /** The control's date-fns locale in effect - it decides where a week starts. */\n  locale: Locale | null;\n};\n\n/** The range a preset stands for, as local wall-clock dates. */\nexport type DateRangePresetRange = {\n  start: Date;\n  end: Date;\n};\n\n/**\n * One entry of a range input's `presets` list. `resolve` is called with the current wall-clock time\n * (in the control's `timeZone`, where it has one) whenever the list renders or a preset is picked.\n */\nexport type DateRangePreset = {\n  /** The button text, or a function reading it from the `DATE_TIME_LABELS` in effect. */\n  label: string | ((labels: DateTimeLabels) => string);\n  resolve: (now: Date, context: DateRangePresetContext) => DateRangePresetRange;\n};\n\n/** One rendered preset: its resolved label and whether the current value is exactly its range. */\nexport type DateRangePresetOption = {\n  preset: DateRangePreset;\n  label: string;\n  active: boolean;\n};\n\n/** Options every preset factory takes. */\nexport type DateRangePresetOptions = {\n  /** Replaces the label the factory reads from `DATE_TIME_LABELS`. */\n  label?: string;\n};\n\nconst endOfDayMinute = (date: Date) => {\n  const end = startOfDay(date);\n\n  end.setHours(23, 59);\n\n  return end;\n};\n\nconst dayRange = (start: Date, end: Date): DateRangePresetRange => ({\n  start: startOfDay(start),\n  end: endOfDayMinute(end),\n});\n\nconst weekOptions = ({ locale }: DateRangePresetContext) => (locale ? { locale } : undefined);\n\ntype CreatePresetConfig = {\n  defaultLabel: (labels: DateTimeLabels) => string;\n  resolve: DateRangePreset['resolve'];\n  options: DateRangePresetOptions;\n};\n\nconst createPreset = ({ defaultLabel, resolve, options }: CreatePresetConfig): DateRangePreset => ({\n  label: options.label ?? defaultLabel,\n  resolve,\n});\n\n/** Today alone. Every factory's range starts at 00:00 and ends at 23:59. */\nexport const todayPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({ defaultLabel: (labels) => labels.presetToday, resolve: (now) => dayRange(now, now), options });\n\n/** Yesterday alone. */\nexport const yesterdayPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetYesterday,\n    resolve: (now) => dayRange(subDays(now, 1), subDays(now, 1)),\n    options,\n  });\n\n/** The last `count` days, today included - `lastDaysPreset(7)` is today and the six days before it. */\nexport const lastDaysPreset = (count: number, options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetLastDays(count),\n    resolve: (now) => dayRange(subDays(now, Math.max(1, count) - 1), now),\n    options,\n  });\n\n/** The next `count` days, tomorrow onwards - `nextDaysPreset(7)` is the coming week. */\nexport const nextDaysPreset = (count: number, options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetNextDays(count),\n    resolve: (now) => dayRange(addDays(now, 1), addDays(now, Math.max(1, count))),\n    options,\n  });\n\n/** The current week, starting on the locale's first day of the week. */\nexport const thisWeekPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetThisWeek,\n    resolve: (now, context) => dayRange(startOfWeek(now, weekOptions(context)), endOfWeek(now, weekOptions(context))),\n    options,\n  });\n\n/** The week before the current one. */\nexport const lastWeekPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetLastWeek,\n    resolve: (now, context) => {\n      const lastWeek = subWeeks(now, 1);\n\n      return dayRange(startOfWeek(lastWeek, weekOptions(context)), endOfWeek(lastWeek, weekOptions(context)));\n    },\n    options,\n  });\n\n/** The current calendar month. */\nexport const thisMonthPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetThisMonth,\n    resolve: (now) => dayRange(startOfMonth(now), endOfMonth(now)),\n    options,\n  });\n\n/** The calendar month before the current one. */\nexport const lastMonthPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetLastMonth,\n    resolve: (now) => dayRange(startOfMonth(subMonths(now, 1)), endOfMonth(subMonths(now, 1))),\n    options,\n  });\n\n/** The current calendar year. */\nexport const thisYearPreset = (options: DateRangePresetOptions = {}) =>\n  createPreset({\n    defaultLabel: (labels) => labels.presetThisYear,\n    resolve: (now) => dayRange(startOfYear(now), endOfYear(now)),\n    options,\n  });\n","// codes 3040-3049 (inside the shared date & time inputs block 3000-3099)\nexport const DATE_TIME_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_DATE_TIME_INPUT: 3040,\n} as const;\n","// codes 3020-3029 (inside the shared date & time inputs block 3000-3099)\nexport const TIME_PICKER_ERROR_CODES = {\n  COLUMN_OUTSIDE_TIME_PICKER: 3020,\n  OPTION_OUTSIDE_COLUMN: 3021,\n} as const;\n","import { setHours, setMinutes, setSeconds } from 'date-fns';\n\nexport type TimeCandidate = {\n  /** `0–23`, regardless of the picker's hour cycle. */\n  hour: number;\n  minute: number;\n  second: number;\n};\n\nexport type PartialTimeCandidate = {\n  hour: number;\n  minute?: number | null;\n  second?: number | null;\n};\n\nexport type TimeBoundsOptions = {\n  min: Date | null;\n  max: Date | null;\n  filter: ((date: Date) => boolean) | null;\n  day: Date;\n};\n\nexport type TimeAvailabilityOptions = TimeBoundsOptions & {\n  minuteValues: readonly number[];\n  secondValues: readonly number[];\n};\n\nexport const secondsOfDay = (date: Date) => date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds();\n\nexport const setTimeOfDay = (day: Date, candidate: TimeCandidate) =>\n  setSeconds(setMinutes(setHours(day, candidate.hour), candidate.minute), candidate.second);\n\nexport const isTimeSelectable = (candidate: TimeCandidate, options: TimeBoundsOptions) => {\n  const { min, max, filter, day } = options;\n  const candidateSeconds = candidate.hour * 3600 + candidate.minute * 60 + candidate.second;\n\n  if (min !== null && candidateSeconds < secondsOfDay(min)) {\n    return false;\n  }\n\n  if (max !== null && candidateSeconds > secondsOfDay(max)) {\n    return false;\n  }\n\n  return filter === null || filter(setTimeOfDay(day, candidate));\n};\n\nexport const findSelectableTime = (\n  fixed: PartialTimeCandidate,\n  options: TimeAvailabilityOptions,\n): TimeCandidate | null => {\n  const minutes = fixed.minute ?? null;\n  const seconds = fixed.second ?? null;\n  const minuteValues = minutes === null ? options.minuteValues : [minutes];\n  const secondValues = seconds === null ? options.secondValues : [seconds];\n\n  for (const minute of minuteValues) {\n    for (const second of secondValues) {\n      const candidate = { hour: fixed.hour, minute, second };\n\n      if (isTimeSelectable(candidate, options)) {\n        return candidate;\n      }\n    }\n  }\n\n  return null;\n};\n\nexport const hasSelectableTime = (fixed: PartialTimeCandidate, options: TimeAvailabilityOptions) =>\n  findSelectableTime(fixed, options) !== null;\n","import { Locale } from 'date-fns';\nimport { formatDateValue } from '../../../forms/date-time/internals/date-value';\n\nexport type TimeFormatSpec = {\n  hourCycle: 12 | 24;\n  showSeconds: boolean;\n};\n\nexport type DeriveTimeFormatSpecOptions = {\n  format: string;\n  locale?: Locale | null;\n};\n\n// hour 13 renders as \"13\" only in a 24-hour format, second 57 only when seconds\n// are shown; the other parts avoid those digit pairs\nconst PROBE_DATE = /* @__PURE__ */ new Date(2000, 0, 1, 13, 35, 57);\n\nexport const deriveTimeFormatSpec = (options: DeriveTimeFormatSpecOptions): TimeFormatSpec => {\n  const rendered = formatDateValue(PROBE_DATE, options) ?? '';\n\n  return {\n    hourCycle: rendered.includes('13') ? 24 : 12,\n    showSeconds: rendered.includes('57'),\n  };\n};\n\nexport type SteppedValuesOptions = {\n  end: number;\n  step: number;\n  include?: number | null;\n};\n\nexport const generateSteppedValues = (options: SteppedValuesOptions): number[] => {\n  const values: number[] = [];\n\n  for (let value = 0; value < options.end; value += options.step) {\n    values.push(value);\n  }\n\n  const include = options.include ?? null;\n\n  if (include !== null && include >= 0 && include < options.end && !values.includes(include)) {\n    values.push(include);\n    values.sort((first, second) => first - second);\n  }\n\n  return values;\n};\n\nexport type TimeParts = {\n  /** Column-internal hour: `0–23`, or `0–11` in a 12-hour cycle (`0` renders as 12). */\n  hour: number;\n  minute: number;\n  second: number;\n  period: 0 | 1;\n};\n\nexport const getTimeParts = (date: Date, hourCycle: 12 | 24): TimeParts => ({\n  hour: hourCycle === 12 ? date.getHours() % 12 : date.getHours(),\n  minute: date.getMinutes(),\n  second: date.getSeconds(),\n  period: date.getHours() >= 12 ? 1 : 0,\n});\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings the time picker's columns announce - each is a listbox of numbers with no visible label. */\nexport type TimePickerLabels = {\n  /** Accessible label for the hours column. */\n  hours: string;\n  /** Accessible label for the minutes column. */\n  minutes: string;\n  /** Accessible label for the seconds column. */\n  seconds: string;\n  /** Accessible label for the AM/PM column. */\n  period: string;\n  /** Heading and accessible name of a time range picker's start side. */\n  startTime: string;\n  /** Heading and accessible name of a time range picker's end side. */\n  endTime: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_TIME_PICKER_LABELS: TimePickerLabels = {\n  hours: 'Hours',\n  minutes: 'Minutes',\n  seconds: 'Seconds',\n  period: 'AM/PM',\n  startTime: 'Start time',\n  endTime: 'End time',\n};\n\nconst TIME_PICKER_LABELS_DEF = /* @__PURE__ */ defineLabels<TimePickerLabels>(\n  'TIME_PICKER_LABELS',\n  DEFAULT_TIME_PICKER_LABELS,\n);\n\n/**\n * Localize the time picker's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_TIME_PICKER_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideTimePickerLabels({ hours: 'Stunden', minutes: 'Minuten' });\n */\nexport const provideTimePickerLabels = /* @__PURE__ */ toProvideFn(TIME_PICKER_LABELS_DEF);\nexport const injectTimePickerLabels = /* @__PURE__ */ toInjectFn(TIME_PICKER_LABELS_DEF);\nexport const TIME_PICKER_LABELS = /* @__PURE__ */ toToken(TIME_PICKER_LABELS_DEF);\n","import { Directive, computed, input, model, output, signal } from '@angular/core';\nimport { Locale, setHours, setMilliseconds, setMinutes, setSeconds, startOfDay } from 'date-fns';\nimport { injectDateLocale, injectTimeFormat } from '../../forms/date-time/date-time-formats';\nimport { formatDateValue } from '../../forms/date-time/internals/date-value';\nimport {\n  PartialTimeCandidate,\n  TimeAvailabilityOptions,\n  TimeCandidate,\n  findSelectableTime,\n  hasSelectableTime,\n  isTimeSelectable,\n  setTimeOfDay,\n} from './internals/time-availability';\nimport { TimeParts, deriveTimeFormatSpec, generateSteppedValues, getTimeParts } from './internals/time-format';\nimport { injectTimePickerLabels } from '../../time-picker/time-picker-labels';\nimport { positiveIntegerAttribute } from '../../internals/number-attributes';\n\nexport type TimePickerUnit = 'hour' | 'minute' | 'second' | 'period';\n\n/** What the picker holds: one time, or a range whose two ends take turns on the same columns. */\nexport type TimePickerMode = 'single' | 'range';\n\nexport type TimeRangeSide = 'start' | 'end';\n\nexport type TimeRange = {\n  start: Date | null;\n  end: Date | null;\n};\n\n/** What a range pick reports: the time, and which end of the range it filled. */\nexport type TimeRangePick = {\n  side: TimeRangeSide;\n  time: Date;\n};\n\n/**\n * Rejects individual times. The candidate is the picked time of day on the current day, so opening\n * hours can differ per weekday. `side` is the range end being filled, and is meaningless in\n * `single` mode.\n */\nexport type TimePickerTimeFilterFn = (date: Date, side: TimeRangeSide) => boolean;\n\n/**\n * Where an option sits in the band its column draws over the range. `'start'` and `'end'` are the\n * band's first and last option, not the range's start and end, and `'single'` is both at once.\n */\nexport type TimePickerBandPosition = 'start' | 'middle' | 'end' | 'single' | null;\n\nexport type TimePickerOption = {\n  unit: TimePickerUnit;\n  /** Column-internal value: hours `0–23` (or `0–11`, 12-hour), minutes/seconds `0–59`, period `0` (AM) / `1` (PM). */\n  value: number;\n  label: string;\n  selected: boolean;\n  /** Out of bounds or filtered out - announced `aria-disabled`, skipped by the keyboard model. */\n  disabled: boolean;\n  /** The column's roving-tabindex target (the selection, or the initial anchor while empty). */\n  focused: boolean;\n  /** `range` mode: holds the range's start value, in a column that can place it. */\n  rangeStart: boolean;\n  /** `range` mode: holds the range's end value, in a column that can place it. */\n  rangeEnd: boolean;\n  /** `range` mode: presentational position in the band of in-range options, `null` outside it. */\n  band: TimePickerBandPosition;\n};\n\nexport type TimePickerColumn = {\n  unit: TimePickerUnit;\n  label: string;\n  options: TimePickerOption[];\n};\n\n/** @internal What a rendered column hands the picker so arrow keys can move focus to it. */\nexport type TimePickerColumnHandle = {\n  unit: () => TimePickerUnit;\n  focus: () => void;\n};\n\n/** One end of a range, as the control that switches between the two needs it. */\nexport type TimePickerSide = {\n  side: TimeRangeSide;\n  label: string;\n  /** The end rendered as a bare time, `null` while it is unset. */\n  value: string | null;\n  /** Whether the columns are currently editing this end. */\n  active: boolean;\n};\n\ntype PendingTimeParts = Partial<Record<TimePickerUnit, number>>;\n\nconst NO_PENDING_PARTS: PendingTimeParts = {};\n\nconst secondsOfDay = (parts: Pick<TimeParts, 'hour' | 'minute' | 'second'>) =>\n  parts.hour * 3600 + parts.minute * 60 + parts.second;\n\nconst nextEnabledIndex = (options: readonly TimePickerOption[], walk: { from: number; step: number }) => {\n  for (let offset = 1; offset <= options.length; offset++) {\n    const index = (((walk.from + walk.step * offset) % options.length) + options.length) % options.length;\n\n    if (!options[index]?.disabled) {\n      return index;\n    }\n  }\n\n  return null;\n};\n\n/**\n * Headless time picker state: one listbox column per time unit (derived from a\n * date-fns `format` - hours, minutes, optional seconds and AM/PM), selection\n * per column committing into a single `Date` value. Operates on `Date` objects\n * only - string parsing/formatting belongs to the input directives.\n */\n@Directive({\n  selector: '[etTimePicker]',\n  exportAs: 'etTimePicker',\n})\nexport class TimePickerDirective {\n  private timePickerLabels = injectTimePickerLabels();\n\n  private defaultFormat = injectTimeFormat();\n  private defaultLocale = injectDateLocale();\n\n  /** Whether the columns hold one time (`value`) or a range (`rangeValue`). */\n  public mode = input<TimePickerMode>('single');\n\n  /** date-fns time format the column layout derives from. Defaults to the `TIME_FORMAT` token. */\n  public format = input<string | undefined>(undefined);\n  public locale = input<Locale | null>(null);\n  public minuteStep = input(5, { transform: positiveIntegerAttribute });\n  public secondStep = input(1, { transform: positiveIntegerAttribute });\n\n  /** Earliest selectable time. Only the time of day is read, so the bound applies to every day. */\n  public min = input<Date | null>(null);\n  /** Latest selectable time. Only the time of day is read, so the bound applies to every day. */\n  public max = input<Date | null>(null);\n  /**\n   * Return `false` to make a time unselectable. Receives the full candidate timestamp\n   * (the picked time of day on the current day), so opening hours can differ per weekday, and in\n   * `range` mode the end being filled. See {@link TimePickerTimeFilterFn}.\n   */\n  public timeFilter = input<TimePickerTimeFilterFn | null>(null);\n\n  public hoursLabel = input<string | null>(null);\n  public minutesLabel = input<string | null>(null);\n  public secondsLabel = input<string | null>(null);\n  public periodLabel = input<string | null>(null);\n\n  /** `range` mode: the two ends' names, on the control that switches between them. */\n  public startLabel = input<string | null>(null);\n  public endLabel = input<string | null>(null);\n\n  /**\n   * The selected time of day, carried on a `Date`. Stays `null` until an hour and a minute (and a\n   * second, where the format shows one) have been picked - parts arriving before that are held.\n   * `single` mode.\n   */\n  public value = model<Date | null>(null);\n\n  /** `range` mode: the two selected times. An end stays `null` until its parts add up to a time. */\n  public rangeValue = model<TimeRange>({ start: null, end: null });\n\n  /** `range` mode: the end the columns show, and the one a pick writes. */\n  public activeSide = model<TimeRangeSide>('start');\n\n  /** `range` mode: an end became a whole time. */\n  public timeSelect = output<TimeRangePick>();\n\n  public resolvedHoursLabel = computed(() => this.hoursLabel() ?? this.timePickerLabels().hours);\n\n  public resolvedMinutesLabel = computed(() => this.minutesLabel() ?? this.timePickerLabels().minutes);\n\n  public resolvedSecondsLabel = computed(() => this.secondsLabel() ?? this.timePickerLabels().seconds);\n\n  public resolvedPeriodLabel = computed(() => this.periodLabel() ?? this.timePickerLabels().period);\n\n  public resolvedStartLabel = computed(() => this.startLabel() ?? this.timePickerLabels().startTime);\n\n  public resolvedEndLabel = computed(() => this.endLabel() ?? this.timePickerLabels().endTime);\n\n  private now = new Date();\n\n  private autoAdvanceSpent = signal(false);\n\n  private columnHandles: TimePickerColumnHandle[] = [];\n\n  private pendingParts = signal<Record<TimeRangeSide, PendingTimeParts>>({ start: {}, end: {} });\n\n  public effectiveFormat = computed(() => this.format() ?? this.defaultFormat);\n  public effectiveLocale = computed(() => this.locale() ?? this.defaultLocale);\n\n  public formatSpec = computed(() =>\n    deriveTimeFormatSpec({ format: this.effectiveFormat(), locale: this.effectiveLocale() }),\n  );\n\n  /** The value the columns show and a pick writes: the whole value, or the range's active end. */\n  public activeValue = computed(() => (this.mode() === 'range' ? this.rangeValue()[this.activeSide()] : this.value()));\n\n  private sideFormat = computed(() => {\n    const spec = this.formatSpec();\n\n    return spec.hourCycle === 12 ? `h:mm${spec.showSeconds ? ':ss' : ''} a` : `HH:mm${spec.showSeconds ? ':ss' : ''}`;\n  });\n\n  /**\n   * The two ends as a side switch needs them: which end, its name, its value as a bare time, and\n   * whether the columns are currently editing it.\n   */\n  public sides = computed<readonly TimePickerSide[]>(() => {\n    const range = this.rangeValue();\n    const active = this.activeSide();\n    const options = { format: this.sideFormat(), locale: this.effectiveLocale() };\n    const rendered = (time: Date | null) => (time === null ? null : formatDateValue(time, options));\n\n    return [\n      { side: 'start', label: this.resolvedStartLabel(), value: rendered(range.start), active: active === 'start' },\n      { side: 'end', label: this.resolvedEndLabel(), value: rendered(range.end), active: active === 'end' },\n    ];\n  });\n\n  private requiredUnits = computed<readonly TimePickerUnit[]>(() =>\n    this.formatSpec().showSeconds ? ['hour', 'minute', 'second'] : ['hour', 'minute'],\n  );\n\n  private activePending = computed<PendingTimeParts>(() =>\n    this.activeValue() === null ? this.pendingParts()[this.activeSide()] : NO_PENDING_PARTS,\n  );\n\n  /**\n   * The value, or \"now\" snapped to the steps and moved onto whichever parts are\n   * already held - the time the columns anchor their roving focus and initial\n   * scroll position to, and the base the pick that completes a time builds on.\n   */\n  public anchorTime = computed<Date>(() => {\n    const value = this.activeValue();\n\n    if (value !== null) {\n      return value;\n    }\n\n    const pending = this.activePending();\n    const nowHour = this.now.getHours();\n    const period = pending.period === undefined ? null : pending.period === 1 ? 1 : 0;\n\n    let hour = nowHour;\n\n    if (pending.hour !== undefined) {\n      hour = this.toHour24(pending.hour, period ?? (nowHour < 12 ? 0 : 1));\n    } else if (period !== null) {\n      hour = (nowHour % 12) + period * 12;\n    }\n\n    const minute = pending.minute ?? this.now.getMinutes() - (this.now.getMinutes() % this.minuteStep());\n    const second = this.formatSpec().showSeconds\n      ? (pending.second ?? this.now.getSeconds() - (this.now.getSeconds() % this.secondStep()))\n      : 0;\n\n    return setMilliseconds(setSeconds(setMinutes(setHours(startOfDay(this.now), hour), minute), second), 0);\n  });\n\n  private periodLabels = computed(() => {\n    const locale = this.effectiveLocale();\n    const anchor = startOfDay(this.now);\n\n    return [\n      formatDateValue(setHours(anchor, 0), { format: 'a', locale }) ?? 'AM',\n      formatDateValue(setHours(anchor, 12), { format: 'a', locale }) ?? 'PM',\n    ];\n  });\n\n  private selectedParts = computed(() => {\n    const value = this.activeValue();\n\n    return value !== null ? getTimeParts(value, this.formatSpec().hourCycle) : null;\n  });\n\n  private rangeParts = computed(() => {\n    if (this.mode() !== 'range') {\n      return null;\n    }\n\n    const range = this.rangeValue();\n    const cycle = this.formatSpec().hourCycle;\n\n    return {\n      start: range.start === null ? null : getTimeParts(range.start, cycle),\n      end: range.end === null ? null : getTimeParts(range.end, cycle),\n    };\n  });\n\n  private hourValues = computed(() =>\n    generateSteppedValues({ end: this.formatSpec().hourCycle === 12 ? 12 : 24, step: 1 }),\n  );\n\n  private minuteValues = computed(() =>\n    generateSteppedValues({ end: 60, step: this.minuteStep(), include: this.selectedParts()?.minute }),\n  );\n\n  private secondValues = computed(() =>\n    generateSteppedValues({ end: 60, step: this.secondStep(), include: this.selectedParts()?.second }),\n  );\n\n  private constrained = computed(() => this.min() !== null || this.max() !== null || this.timeFilter() !== null);\n\n  private boundTimeFilter = computed(() => {\n    const filter = this.timeFilter();\n\n    if (filter === null) {\n      return null;\n    }\n\n    const side = this.activeSide();\n\n    return (date: Date) => filter(date, side);\n  });\n\n  private availability = computed<TimeAvailabilityOptions>(() => {\n    const anchor = this.anchorTime();\n\n    return {\n      min: this.min(),\n      max: this.max(),\n      filter: this.boundTimeFilter(),\n      day: startOfDay(anchor),\n      minuteValues: this.minuteValues(),\n      secondValues: this.formatSpec().showSeconds ? this.secondValues() : [anchor.getSeconds()],\n    };\n  });\n\n  public columns = computed<TimePickerColumn[]>(() => {\n    const spec = this.formatSpec();\n    const selected = this.selectedParts();\n    const anchor = getTimeParts(this.anchorTime(), spec.hourCycle);\n    const anchor24 = getTimeParts(this.anchorTime(), 24);\n    const constrained = this.constrained();\n    const availability = this.availability();\n    const pending = this.activePending();\n\n    const isDisabled = (fixed: PartialTimeCandidate) => constrained && !hasSelectableTime(fixed, availability);\n    const isSelected = (unit: TimePickerUnit, optionValue: number) =>\n      selected !== null ? selected[unit] === optionValue : pending[unit] === optionValue;\n    const rangeFlagsFor = this.rangeFlagsFactory(anchor24);\n\n    const buildOptions = (\n      unit: Exclude<TimePickerUnit, 'period'>,\n      column: { values: number[]; fixedOf: (value: number) => PartialTimeCandidate },\n    ) => {\n      const toLabel =\n        unit === 'hour' && spec.hourCycle === 12\n          ? (hour: number) => String(hour === 0 ? 12 : hour)\n          : (part: number) => String(part).padStart(2, '0');\n      const rangeFlags = rangeFlagsFor(unit, column.values);\n\n      return column.values.map<TimePickerOption>((optionValue) => ({\n        unit,\n        value: optionValue,\n        label: toLabel(optionValue),\n        selected: isSelected(unit, optionValue),\n        disabled: isDisabled(column.fixedOf(optionValue)),\n        focused: (selected ?? anchor)[unit] === optionValue,\n        ...rangeFlags(optionValue),\n      }));\n    };\n\n    const columns: TimePickerColumn[] = [\n      {\n        unit: 'hour',\n        label: this.resolvedHoursLabel(),\n        options: buildOptions('hour', {\n          values: this.hourValues(),\n          fixedOf: (hour) => ({ hour: this.toHour24(hour, anchor24.period) }),\n        }),\n      },\n      {\n        unit: 'minute',\n        label: this.resolvedMinutesLabel(),\n        options: buildOptions('minute', {\n          values: this.minuteValues(),\n          fixedOf: (minute) => ({ hour: anchor24.hour, minute }),\n        }),\n      },\n    ];\n\n    if (spec.showSeconds) {\n      columns.push({\n        unit: 'second',\n        label: this.resolvedSecondsLabel(),\n        options: buildOptions('second', {\n          values: this.secondValues(),\n          fixedOf: (second) => ({ hour: anchor24.hour, minute: anchor24.minute, second }),\n        }),\n      });\n    }\n\n    if (spec.hourCycle === 12) {\n      const labels = this.periodLabels();\n      const periodValues = [0, 1];\n      const rangeFlags = rangeFlagsFor('period', periodValues);\n\n      columns.push({\n        unit: 'period',\n        label: this.resolvedPeriodLabel(),\n        options: periodValues.map<TimePickerOption>((period) => ({\n          unit: 'period',\n          value: period,\n          label: labels[period] ?? '',\n          selected: isSelected('period', period),\n          disabled:\n            constrained &&\n            !this.hourValues().some((hour) => hasSelectableTime({ hour: hour + period * 12 }, availability)),\n          focused: (selected ?? anchor).period === period,\n          ...rangeFlags(period),\n        })),\n      });\n    }\n\n    return columns;\n  });\n\n  /**\n   * Takes one column's pick. While the end being edited is still empty the pick is *held*, not\n   * committed; the pick that supplies the last missing unit commits them all at once. Once a value\n   * exists every pick edits it directly.\n   */\n  public selectPart(unit: TimePickerUnit, optionValue: number) {\n    if (this.optionsOf(unit).find((option) => option.value === optionValue)?.disabled) {\n      return;\n    }\n\n    if (this.activeValue() === null && !this.completesTime(unit)) {\n      this.holdPart(unit, optionValue);\n\n      return;\n    }\n\n    const target = this.candidateFor(unit, optionValue);\n    const resolved = this.constrained() ? this.resolveSelectable(unit, target) : target;\n\n    if (resolved === null) {\n      return;\n    }\n\n    // the anchor folds in the held parts, so the value has to be built before they are dropped\n    const next = setTimeOfDay(this.anchorTime(), resolved);\n\n    this.clearPending();\n\n    if (this.mode() !== 'range') {\n      this.value.set(next);\n\n      return;\n    }\n\n    const side = this.activeSide();\n\n    this.rangeValue.set({ ...this.rangeValue(), [side]: next });\n    this.timeSelect.emit({ side, time: next });\n  }\n\n  /**\n   * @internal What *activating* an option does (click, Enter, Space): the pick, plus a range's\n   * one-time hop to the other end.\n   */\n  public activateOption(unit: TimePickerUnit, optionValue: number) {\n    const hops = this.mode() === 'range' && this.activeSide() === 'start' && !this.autoAdvanceSpent();\n    const startBefore = this.rangeValue().start;\n\n    this.selectPart(unit, optionValue);\n\n    if (hops && this.rangeValue().start !== startBefore) {\n      this.autoAdvanceSpent.set(true);\n      this.activeSide.set('end');\n    }\n  }\n\n  /** Switches the end the columns edit, spending the one-time auto-advance - an explicit choice wins. */\n  public setActiveSide(side: TimeRangeSide) {\n    this.autoAdvanceSpent.set(true);\n    this.activeSide.set(side);\n  }\n\n  /** @internal */\n  public registerColumn(handle: TimePickerColumnHandle) {\n    this.columnHandles.push(handle);\n\n    return () => {\n      this.columnHandles = this.columnHandles.filter((registered) => registered !== handle);\n    };\n  }\n\n  /** @internal Moves focus to the column before or after `unit`, without wrapping. */\n  public focusAdjacentColumn(unit: TimePickerUnit, delta: 1 | -1) {\n    const units = this.columns().map((column) => column.unit);\n    const target = units[units.indexOf(unit) + delta];\n\n    if (target) {\n      this.columnHandles.find((handle) => handle.unit() === target)?.focus();\n    }\n  }\n\n  /** @internal Moves a column's selection by `delta`, wrapping and skipping disabled options. */\n  public selectRelative(unit: TimePickerUnit, delta: number) {\n    const options = this.optionsOf(unit);\n\n    if (options.length === 0) {\n      return;\n    }\n\n    const step = delta < 0 ? -1 : 1;\n    const from = Math.max(\n      options.findIndex((option) => option.focused),\n      0,\n    );\n\n    let index = from;\n\n    for (let taken = 0; taken < Math.abs(delta); taken++) {\n      const next = nextEnabledIndex(options, { from: index, step });\n\n      if (next === null) {\n        return;\n      }\n\n      index = next;\n    }\n\n    const target = options[index];\n\n    if (target) {\n      this.selectPart(unit, target.value);\n    }\n  }\n\n  /** @internal */\n  public selectEdge(unit: TimePickerUnit, edge: 'start' | 'end') {\n    const options = this.optionsOf(unit);\n    const enabled = options.filter((option) => !option.disabled);\n    const target = edge === 'start' ? enabled[0] : enabled[enabled.length - 1];\n\n    if (target) {\n      this.selectPart(unit, target.value);\n    }\n  }\n\n  /** @internal Type-to-jump: selects the first selectable option matching the buffered query. */\n  public selectByQuery(unit: TimePickerUnit, query: string) {\n    const match = this.optionsOf(unit).find(\n      (option) =>\n        !option.disabled && (option.label.toLowerCase().startsWith(query) || String(option.value).startsWith(query)),\n    );\n\n    if (match) {\n      this.selectPart(unit, match.value);\n    }\n  }\n\n  private completesTime(unit: TimePickerUnit) {\n    const pending = this.activePending();\n\n    return this.requiredUnits().every((required) => required === unit || pending[required] !== undefined);\n  }\n\n  private holdPart(unit: TimePickerUnit, optionValue: number) {\n    const side = this.activeSide();\n    const parts = this.pendingParts();\n\n    this.pendingParts.set({ ...parts, [side]: { ...parts[side], [unit]: optionValue } });\n  }\n\n  private clearPending() {\n    const side = this.activeSide();\n    const parts = this.pendingParts();\n\n    if (Object.keys(parts[side]).length > 0) {\n      this.pendingParts.set({ ...parts, [side]: {} });\n    }\n  }\n\n  private rangeFlagsFactory(anchor24: TimeParts) {\n    const rangeParts = this.rangeParts();\n    const start = rangeParts?.start ?? null;\n    const end = rangeParts?.end ?? null;\n    const range = this.rangeValue();\n    const interval = this.intervalOfDay(range.start, range.end);\n\n    const candidateSeconds = (unit: TimePickerUnit, optionValue: number) => {\n      switch (unit) {\n        case 'hour':\n          return secondsOfDay({ ...anchor24, hour: this.toHour24(optionValue, anchor24.period) });\n        case 'minute':\n          return secondsOfDay({ ...anchor24, minute: optionValue });\n        case 'second':\n          return secondsOfDay({ ...anchor24, second: optionValue });\n        case 'period':\n          return secondsOfDay({ ...anchor24, hour: (anchor24.hour % 12) + optionValue * 12 });\n      }\n    };\n\n    return (unit: TimePickerUnit, values: readonly number[]) => {\n      const banded =\n        interval === null\n          ? []\n          : values.filter((optionValue) => {\n              const seconds = candidateSeconds(unit, optionValue);\n\n              return seconds >= interval.from && seconds <= interval.to;\n            });\n\n      const bandOf = (optionValue: number): TimePickerBandPosition => {\n        const index = banded.indexOf(optionValue);\n\n        if (index === -1) {\n          return null;\n        }\n\n        if (banded.length === 1) {\n          return 'single';\n        }\n\n        if (index === 0) {\n          return 'start';\n        }\n\n        return index === banded.length - 1 ? 'end' : 'middle';\n      };\n\n      return (optionValue: number) => ({\n        rangeStart: start !== null && start[unit] === optionValue,\n        rangeEnd: end !== null && end[unit] === optionValue,\n        band: bandOf(optionValue),\n      });\n    };\n  }\n\n  private intervalOfDay(start: Date | null, end: Date | null) {\n    if (this.mode() !== 'range' || start === null || end === null) {\n      return null;\n    }\n\n    const first = secondsOfDay(getTimeParts(start, 24));\n    const second = secondsOfDay(getTimeParts(end, 24));\n\n    return { from: Math.min(first, second), to: Math.max(first, second) };\n  }\n\n  private toHour24(hour: number, period: 0 | 1) {\n    return this.formatSpec().hourCycle === 12 ? (hour % 12) + period * 12 : hour;\n  }\n\n  private halfDayHours(from: number) {\n    const base = from >= 12 ? 12 : 0;\n\n    return Array.from({ length: 12 }, (_, index) => base + index).sort(\n      (first, second) => Math.abs(first - from) - Math.abs(second - from),\n    );\n  }\n\n  private candidateFor(unit: TimePickerUnit, optionValue: number): TimeCandidate {\n    const parts = getTimeParts(this.anchorTime(), 24);\n\n    switch (unit) {\n      case 'hour':\n        return { hour: this.toHour24(optionValue, parts.period), minute: parts.minute, second: parts.second };\n      case 'minute':\n        return { hour: parts.hour, minute: optionValue, second: parts.second };\n      case 'second':\n        return { hour: parts.hour, minute: parts.minute, second: optionValue };\n      case 'period':\n        return {\n          hour: (parts.hour % 12) + (optionValue === 1 ? 12 : 0),\n          minute: parts.minute,\n          second: parts.second,\n        };\n    }\n  }\n\n  private resolveSelectable(unit: TimePickerUnit, candidate: TimeCandidate) {\n    const availability = this.availability();\n\n    if (isTimeSelectable(candidate, availability)) {\n      return candidate;\n    }\n\n    if (unit === 'period') {\n      for (const hour of this.halfDayHours(candidate.hour)) {\n        const found = findSelectableTime({ hour }, availability);\n\n        if (found !== null) {\n          return found;\n        }\n      }\n\n      return null;\n    }\n\n    const fixed: PartialTimeCandidate =\n      unit === 'second'\n        ? candidate\n        : unit === 'minute'\n          ? { hour: candidate.hour, minute: candidate.minute }\n          : { hour: candidate.hour };\n\n    return findSelectableTime(fixed, availability);\n  }\n\n  private optionsOf(unit: TimePickerUnit) {\n    return this.columns().find((column) => column.unit === unit)?.options ?? [];\n  }\n}\n","import { DestroyRef, Directive, ElementRef, inject, input, signal } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { createTypeahead } from '../../internals/typeahead';\nimport { TIME_PICKER_ERROR_CODES } from '../time-picker-errors';\nimport { TimePickerColumn, TimePickerDirective } from './time-picker.directive';\n\n/**\n * One unit column (a vertical listbox): routes the keyboard model to the\n * picker - up/down arrows move the selection (selection follows focus, wrapping),\n * left/right arrows move focus to the neighbouring column, typed characters\n * jump to the matching option - and tracks whether focus is inside.\n */\n@Directive({\n  selector: '[etTimePickerColumn]',\n  exportAs: 'etTimePickerColumn',\n  host: {\n    role: 'listbox',\n    'aria-orientation': 'vertical',\n    '[attr.aria-label]': 'column().label',\n    '(keydown)': 'handleKeydown($event)',\n    '(focusin)': 'focusIsInside.set(true)',\n    '(focusout)': 'handleFocusOut($event)',\n  },\n})\nexport class TimePickerColumnDirective {\n  private timePicker = inject(TimePickerDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  public column = input.required<TimePickerColumn>();\n\n  /** @internal */\n  public focusIsInside = signal(false);\n\n  private typeahead = createTypeahead();\n  private hasScrolled = false;\n\n  constructor() {\n    this.destroyRef.onDestroy(() => this.typeahead.destroy());\n\n    const unregister = this.timePicker?.registerColumn({\n      unit: () => this.column().unit,\n      focus: () => this.focusIsInside.set(true),\n    });\n\n    if (unregister) {\n      this.destroyRef.onDestroy(unregister);\n    }\n\n    if (ngDevMode && !this.timePicker) {\n      throw new RuntimeError(\n        TIME_PICKER_ERROR_CODES.COLUMN_OUTSIDE_TIME_PICKER,\n        'An [etTimePickerColumn] must be placed inside an [etTimePicker].',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const timePicker = this.timePicker;\n\n    if (!timePicker) {\n      return;\n    }\n\n    const unit = this.column().unit;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        timePicker.selectRelative(unit, 1);\n\n        return;\n      case 'ArrowUp':\n        event.preventDefault();\n        timePicker.selectRelative(unit, -1);\n\n        return;\n      case 'Home':\n        event.preventDefault();\n        timePicker.selectEdge(unit, 'start');\n\n        return;\n      case 'End':\n        event.preventDefault();\n        timePicker.selectEdge(unit, 'end');\n\n        return;\n      case 'ArrowLeft':\n      case 'ArrowRight': {\n        event.preventDefault();\n        const forward = (event.key === 'ArrowRight') !== this.isRightToLeft();\n        timePicker.focusAdjacentColumn(unit, forward ? 1 : -1);\n\n        return;\n      }\n    }\n\n    if (event.key.length === 1 && event.key !== ' ' && !event.ctrlKey && !event.metaKey && !event.altKey) {\n      timePicker.selectByQuery(unit, this.typeahead.append(event.key));\n    }\n  }\n\n  protected handleFocusOut(event: FocusEvent) {\n    const nextTarget = event.relatedTarget;\n\n    if (nextTarget instanceof Node && event.currentTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\n      return;\n    }\n\n    // the focused option can be removed mid-interaction (an off-step selection\n    // leaving the list) with focus falling to body before the roving target pulls\n    // it back - settle the tick first, then decide based on where focus ended up\n    queueMicrotask(() => {\n      const element = this.elementRef.nativeElement;\n      const active = element.ownerDocument.activeElement;\n\n      if (!(active instanceof Node) || !element.contains(active)) {\n        this.focusIsInside.set(false);\n        this.typeahead.reset();\n      }\n    });\n  }\n\n  /**\n   * @internal Centers an option in the column's scrollport - instantly on the\n   * first (mount) call, smoothly afterwards. Deliberately not `scrollIntoView`,\n   * which would also scroll ancestors (the page, an overlay pane).\n   */\n  public scrollOptionIntoView(optionElement: HTMLElement) {\n    const columnElement = this.elementRef.nativeElement;\n    const columnRect = columnElement.getBoundingClientRect();\n    const optionRect = optionElement.getBoundingClientRect();\n    const optionTop = optionRect.top - columnRect.top + columnElement.scrollTop;\n    const top = optionTop - (columnElement.clientHeight - optionRect.height) / 2;\n    const behavior: ScrollBehavior = this.hasScrolled ? 'smooth' : 'auto';\n\n    this.hasScrolled = true;\n    columnElement.scrollTo?.({ top, behavior });\n  }\n\n  private isRightToLeft() {\n    const element = this.elementRef.nativeElement;\n\n    return element.ownerDocument.defaultView?.getComputedStyle(element).direction === 'rtl';\n  }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { TIME_PICKER_ERROR_CODES } from '../time-picker-errors';\nimport { TimePickerColumnDirective } from './time-picker-column.directive';\nimport { TimePickerOption, TimePickerDirective } from './time-picker.directive';\n\n/**\n * One option (place it on the option's `<button>`): ARIA/data attributes,\n * selection on activation, the roving-tabindex focus pull, and keeping the\n * column scrolled to the focused option.\n *\n * In the picker's `range` mode it also mirrors the option's relation to the\n * range: `data-range-start` / `data-range-end` for the two ends' own options and\n * `data-band` for its position in the band between them.\n */\n@Directive({\n  selector: 'button[etTimePickerOption]',\n  exportAs: 'etTimePickerOption',\n  host: {\n    type: 'button',\n    role: 'option',\n    '[attr.aria-selected]': 'option().selected',\n    // aria-disabled, not the disabled attribute: the roving tabindex needs the option focusable\n    '[attr.aria-disabled]': 'option().disabled || null',\n    '[attr.tabindex]': 'option().focused ? 0 : -1',\n    '[attr.data-selected]': \"option().selected ? '' : null\",\n    '[attr.data-disabled]': \"option().disabled ? '' : null\",\n    '[attr.data-focused]': \"option().focused ? '' : null\",\n    '[attr.data-range-start]': \"option().rangeStart ? '' : null\",\n    '[attr.data-range-end]': \"option().rangeEnd ? '' : null\",\n    '[attr.data-band]': 'option().band',\n    '(click)': 'timePicker?.activateOption(option().unit, option().value)',\n  },\n})\nexport class TimePickerOptionDirective {\n  protected timePicker = inject(TimePickerDirective, { optional: true });\n  private column = inject(TimePickerColumnDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public option = input.required<TimePickerOption>();\n\n  constructor() {\n    if (ngDevMode && (!this.timePicker || !this.column)) {\n      throw new RuntimeError(\n        TIME_PICKER_ERROR_CODES.OPTION_OUTSIDE_COLUMN,\n        'An [etTimePickerOption] must be placed inside an [etTimePickerColumn].',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n\n    effect(() => {\n      if (this.option().focused && this.column?.focusIsInside()) {\n        this.elementRef.nativeElement.focus({ preventScroll: true });\n      }\n    });\n\n    effect(() => {\n      if (this.option().focused && this.column) {\n        this.column.scrollOptionIntoView(this.elementRef.nativeElement);\n      }\n    });\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { ScrollbarComponent } from '../scrollbar';\nimport { TimePickerColumnDirective, TimePickerDirective, TimePickerOptionDirective } from './headless';\n\n@Component({\n  selector: 'et-time-picker',\n  templateUrl: './time-picker.component.html',\n  styleUrl: './time-picker.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [TimePickerColumnDirective, TimePickerOptionDirective, ScrollbarComponent],\n  hostDirectives: [\n    {\n      directive: TimePickerDirective,\n      inputs: [\n        'mode',\n        'format',\n        'locale',\n        'minuteStep',\n        'secondStep',\n        'min',\n        'max',\n        'timeFilter',\n        'hoursLabel',\n        'minutesLabel',\n        'secondsLabel',\n        'periodLabel',\n        'startLabel',\n        'endLabel',\n        'value',\n        'rangeValue',\n        'activeSide',\n      ],\n      outputs: ['valueChange', 'rangeValueChange', 'activeSideChange', 'timeSelect'],\n    },\n  ],\n  host: {\n    class: 'et-time-picker',\n    '[attr.data-mode]': 'timePicker.mode()',\n  },\n})\nexport class TimePickerComponent {\n  protected timePicker = inject(TimePickerDirective);\n}\n","@if (timePicker.mode() === 'range') {\n  <div class=\"et-time-picker-sides\">\n    @for (side of timePicker.sides(); track side.side) {\n      <button\n        [attr.aria-pressed]=\"side.active\"\n        [attr.data-side]=\"side.side\"\n        (click)=\"timePicker.setActiveSide(side.side)\"\n        class=\"et-time-picker-side\"\n        type=\"button\"\n      >\n        <span class=\"et-time-picker-side-label\">{{ side.label }}</span>\n        <span class=\"et-time-picker-side-value\">{{ side.value ?? '—' }}</span>\n      </button>\n    }\n  </div>\n}\n\n<div class=\"et-time-picker-columns\">\n  @for (column of timePicker.columns(); track column.unit) {\n    <div class=\"et-time-picker-column-wrapper\">\n      <div #columnElement [column]=\"column\" class=\"et-time-picker-column\" etTimePickerColumn>\n        @for (option of column.options; track option.value) {\n          <button [option]=\"option\" class=\"et-time-picker-option\" etTimePickerOption>{{ option.label }}</button>\n        }\n      </div>\n\n      <et-scrollbar [for]=\"columnElement\" autoHide />\n    </div>\n  }\n</div>\n","import { TimePickerColumnDirective, TimePickerDirective, TimePickerOptionDirective } from './headless';\nimport { TimePickerComponent } from './time-picker.component';\n\nexport const TIME_PICKER_IMPORTS = [\n  TimePickerComponent,\n  TimePickerDirective,\n  TimePickerColumnDirective,\n  TimePickerOptionDirective,\n] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The tab metric scale - trigger padding, label size, underline thickness and the baseline alpha -\n * as a styles-only component, so tabs, nav tabs and the segmented button group's `tabs` variant read\n * one set of numbers instead of three copies of them.\n *\n * @internal\n */\n@Component({\n  selector: 'et-tab-scale-styles',\n  template: '',\n  styleUrl: './tab-scale-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TabScaleStylesComponent {}\n\n/**\n * Mounts the tab metric scale. Call from anything that carries the `et-tab-scale` class, and put\n * `data-size` on the same element.\n *\n * @internal\n */\nexport const mountTabScaleStyles = () => injectStyleManager().mount(TabScaleStylesComponent);\n","import { ElementRef, InjectionToken, Signal, WritableSignal } from '@angular/core';\nimport { SelectionState } from './internals/selection-state';\n\nexport const SELECTION_LIST_TOKEN = new InjectionToken<SelectionListDirectiveBase>('SELECTION_LIST_TOKEN');\n\nexport const SELECTION_LIST_MULTIPLE = new InjectionToken<boolean>('SELECTION_LIST_MULTIPLE');\n\nexport type SelectionListItem<TValue = unknown> = {\n  value: Signal<TValue>;\n  checked: WritableSignal<boolean>;\n  disabled: Signal<boolean>;\n  elementRef: ElementRef<HTMLElement>;\n  /** The option's rendered text, which typeahead matches by prefix - its label must lead it. */\n  label: () => string;\n};\n\nexport type SelectionListDirectiveBase<TValue = unknown> = {\n  value: WritableSignal<TValue | TValue[] | null>;\n  multiple: Signal<boolean>;\n  disabled: Signal<boolean>;\n  readonly: Signal<boolean>;\n  required: Signal<boolean>;\n  name: Signal<string>;\n  selection: SelectionState<TValue, SelectionListItem<TValue>>;\n  focusItem(item: SelectionListItem<TValue>, options?: FocusOptions): void;\n  /** Buffers a typed character and returns the enabled item its prefix names next after `from`. */\n  findTypeaheadMatch(character: string, from: SelectionListItem<TValue>): SelectionListItem<TValue> | null;\n  markTouched(): void;\n};\n","import { computed, Directive, inject } from '@angular/core';\nimport { SELECTION_LIST_TOKEN } from './selection-list.tokens';\n\n@Directive({\n  selector: '[etSelectionListControl]',\n  host: {\n    // a checkbox, not an option: `option` is listbox-only and has no mixed state (it uses\n    // `aria-selected`), whereas the select-all genuinely needs `aria-checked=\"mixed\"`\n    '[attr.role]': '\"checkbox\"',\n    '[attr.aria-checked]': 'ariaChecked()',\n    '[attr.aria-disabled]': 'list.disabled() || null',\n    '[attr.aria-readonly]': 'list.readonly() || null',\n    '[attr.tabindex]': 'list.disabled() ? -1 : 0',\n    '(click)': 'toggle()',\n    '(keydown.space)': 'toggle(); $event.preventDefault()',\n    '(keydown.enter)': 'toggle(); $event.preventDefault()',\n  },\n})\nexport class SelectionListControlDirective {\n  public list = inject(SELECTION_LIST_TOKEN);\n\n  public checked = computed(() => this.list.selection.allSelected());\n  public indeterminate = computed(() => this.list.selection.someSelected());\n\n  public ariaChecked = computed(() => {\n    if (this.indeterminate()) {\n      return 'mixed';\n    }\n\n    return this.checked();\n  });\n\n  public toggle() {\n    if (this.list.disabled() || this.list.readonly()) {\n      return;\n    }\n\n    this.list.selection.toggleAll();\n  }\n}\n","import { DestroyRef, Signal, WritableSignal, computed, effect, inject, signal, untracked } from '@angular/core';\n\nexport type SelectionStateItem<TValue = unknown> = {\n  value: Signal<TValue>;\n  checked: WritableSignal<boolean>;\n  disabled: Signal<boolean>;\n};\n\nexport type SelectionStateConfig<TValue = unknown> = {\n  value: WritableSignal<TValue | TValue[] | null>;\n  multiple: Signal<boolean>;\n  disabled: Signal<boolean>;\n  /**\n   * When `true`, unregistering a *checked* item recomputes `value` from the remaining checked\n   * items, so destroying a selected option (e.g. `@for` churn) doesn't strand its value in the\n   * model. Off by default - the select family keeps values whose option isn't currently rendered\n   * (async/filtered lists), so it must not prune. Selection-list groups render every option, so\n   * a removed option is genuinely gone and opts in.\n   */\n  pruneValueOnUnregister?: boolean;\n  /**\n   * Mixed (bulk-edit) view state. While `true`, the value↔items sync masks every item to\n   * unchecked - the raw `value` stays untouched but nothing reports as checked. The first\n   * user commit (`select` / `toggleAll`) REPLACES the value (single → that value, multiple →\n   * a fresh array; never a toggle against the hidden raw value) and resolves the flag to\n   * `false`. External `value` writes never resolve it. Omit for controls without a mixed\n   * state - the select family masks pull-based in its own layer instead.\n   */\n  mixed?: WritableSignal<boolean>;\n  /** Whether an item's value matches a value in `value`. Defaults to `===`. */\n  compareWith?: Signal<(itemValue: TValue, value: TValue) => boolean>;\n};\n\nexport type SelectionState<TValue = unknown, TItem extends SelectionStateItem<TValue> = SelectionStateItem<TValue>> = {\n  items: Signal<TItem[]>;\n  allSelected: Signal<boolean>;\n  someSelected: Signal<boolean>;\n  registerItem: (item: TItem) => void;\n  unregisterItem: (item: TItem) => void;\n  select: (item: TItem) => void;\n  toggleAll: () => void;\n};\n\n/**\n * Item registry + value↔items sync shared by every selection-shaped control\n * (selection list groups, the select family). Must be created in an injection\n * context - it installs the effect that pushes value changes into the items.\n */\nexport const createSelectionState = <\n  TValue = unknown,\n  TItem extends SelectionStateItem<TValue> = SelectionStateItem<TValue>,\n>(\n  config: SelectionStateConfig<TValue>,\n): SelectionState<TValue, TItem> => {\n  const items = signal<TItem[]>([]);\n\n  // when the whole owner (list, form) tears down, every item unregisters in a cascade - pruning\n  // then would clobber the form value to empty. This flag flips synchronously during teardown, and\n  // the prune below runs in a microtask, so a genuine teardown is always seen as destroyed by then\n  // (order-independent of whether parent or child destroy hooks fire first).\n  let destroyed = false;\n\n  inject(DestroyRef).onDestroy(() => {\n    destroyed = true;\n  });\n\n  // `toggleAll` can only ever mutate enabled items, so the select-all tri-state must be\n  // computed over that same set. Evaluating `every`/`length` over all items (incl. disabled)\n  // meant a single disabled-and-unchecked item pinned `allSelected` to false forever, leaving\n  // the select-all control stuck showing \"mixed\" that no click could clear.\n  // With the whole list disabled nothing is togglable, and that same filter emptied the set and\n  // reported \"none selected\" over a group that has some - so there it falls back to every item.\n  const togglableItems = computed(() => {\n    const all = items();\n    const enabled = all.filter((item) => !item.disabled());\n\n    return enabled.length ? enabled : all;\n  });\n\n  const allSelected = computed(() => {\n    const list = togglableItems();\n\n    if (list.length === 0) {\n      return false;\n    }\n\n    return list.every((item) => item.checked());\n  });\n\n  const someSelected = computed(() => {\n    const list = togglableItems();\n\n    if (list.length === 0) {\n      return false;\n    }\n\n    const checkedCount = list.filter((item) => item.checked()).length;\n\n    return checkedCount > 0 && checkedCount < list.length;\n  });\n\n  effect(() => {\n    const currentValue = config.value();\n    const currentItems = items();\n    // tracked: entering/leaving mixed must re-run the sync (masking on, or restoring the\n    // checked states the raw value implies once mixed resolves)\n    const isMixed = config.mixed?.() ?? false;\n    const compareWith = config.compareWith?.() ?? null;\n\n    if (currentItems.length === 0) {\n      return;\n    }\n\n    // item values read tracked: an item's value signal may resolve late (projected options\n    // bind their inputs only once rendered) - the sync must re-run when it does, or items\n    // registered before their bindings executed stay unchecked forever\n    const syncEntries = currentItems.map((item) => ({ item, itemValue: item.value() }));\n\n    untracked(() => {\n      if (isMixed) {\n        for (const { item } of syncEntries) {\n          item.checked.set(false);\n        }\n\n        return;\n      }\n\n      if (config.multiple()) {\n        const valueArray = Array.isArray(currentValue) ? currentValue : [];\n\n        for (const { item, itemValue } of syncEntries) {\n          item.checked.set(\n            compareWith\n              ? valueArray.some((candidate) => compareWith(itemValue, candidate))\n              : valueArray.includes(itemValue),\n          );\n        }\n      } else {\n        for (const { item, itemValue } of syncEntries) {\n          item.checked.set(compareWith ? compareWith(itemValue, currentValue as TValue) : itemValue === currentValue);\n        }\n      }\n    });\n  });\n\n  const registerItem = (item: TItem) => {\n    items.update((list) => [...list, item]);\n  };\n\n  const unregisterItem = (item: TItem) => {\n    const wasChecked = item.checked();\n\n    items.update((list) => list.filter((i) => i !== item));\n\n    if (!config.pruneValueOnUnregister || !wasChecked) {\n      return;\n    }\n\n    // defer to a microtask so a full teardown (which unregisters every item) is skipped via the\n    // `destroyed` guard, while a single-option removal (@for churn, owner still alive) reconciles.\n    // While mixed the raw value is a preserved snapshot the (masked) items don't reflect -\n    // recomputing from checked states would clobber it, so pruning pauses.\n    queueMicrotask(() => {\n      if (destroyed || config.mixed?.()) {\n        return;\n      }\n\n      const remainingChecked = items().filter((i) => i.checked());\n\n      if (config.multiple()) {\n        config.value.set(remainingChecked.map((i) => i.value()));\n      } else {\n        config.value.set(remainingChecked[0]?.value() ?? null);\n      }\n    });\n  };\n\n  const select = (item: TItem) => {\n    if (config.disabled() || item.disabled()) {\n      return;\n    }\n\n    if (config.mixed?.()) {\n      for (const i of items()) {\n        i.checked.set(i === item);\n      }\n\n      config.value.set(config.multiple() ? [item.value()] : item.value());\n      config.mixed.set(false);\n\n      return;\n    }\n\n    if (config.multiple()) {\n      item.checked.update((v) => !v);\n      config.value.set(\n        items()\n          .filter((i) => i.checked())\n          .map((i) => i.value()),\n      );\n    } else {\n      for (const i of items()) {\n        i.checked.set(i === item);\n      }\n\n      config.value.set(item.value());\n    }\n  };\n\n  const toggleAll = () => {\n    if (config.disabled()) {\n      return;\n    }\n\n    if (config.mixed?.()) {\n      for (const item of items()) {\n        item.checked.set(!item.disabled());\n      }\n\n      config.value.set(\n        items()\n          .filter((i) => i.checked())\n          .map((i) => i.value()),\n      );\n      config.mixed.set(false);\n\n      return;\n    }\n\n    const shouldCheck = !allSelected();\n\n    for (const item of items()) {\n      if (!item.disabled()) {\n        item.checked.set(shouldCheck);\n      }\n    }\n\n    config.value.set(\n      items()\n        .filter((i) => i.checked())\n        .map((i) => i.value()),\n    );\n  };\n\n  return {\n    items: items.asReadonly(),\n    allSelected,\n    someSelected,\n    registerItem,\n    unregisterItem,\n    select,\n    toggleAll,\n  };\n};\n","import { booleanAttribute, computed, DestroyRef, Directive, inject, input, model, signal } from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\nimport { createTypeahead } from '../../../internals/typeahead';\nimport { createSelectionState } from './internals/selection-state';\nimport {\n  SELECTION_LIST_MULTIPLE,\n  SELECTION_LIST_TOKEN,\n  SelectionListDirectiveBase,\n  SelectionListItem,\n} from './selection-list.tokens';\n\n@Directive({\n  selector: '[etSelectionList]',\n  providers: [{ provide: SELECTION_LIST_TOKEN, useExisting: SelectionListDirective }],\n  host: {\n    '[attr.role]': 'role()',\n    '[attr.aria-invalid]': 'shouldDisplayError() || null',\n    '[attr.aria-required]': 'required() || null',\n    '[attr.aria-describedby]': 'describedBy() || null',\n    '[attr.aria-label]': 'ariaLabel()?.trim() || null',\n    '[attr.aria-labelledby]': 'labelId() || null',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-mixed]': 'mixed() || null',\n    // aria-readonly is only valid on radiogroup, not on group - the multi case reflects it\n    // per option instead (role=checkbox supports it)\n    '[attr.aria-readonly]': '!multiple() && readonly() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n  },\n})\nexport class SelectionListDirective\n  extends AccessibleNameControlDirective\n  implements SelectionListDirectiveBase, FormFieldControl\n{\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private multipleOverride = inject(SELECTION_LIST_MULTIPLE, { optional: true });\n\n  public value = model<unknown | unknown[] | null>(null);\n  /**\n   * View state for a group whose source values disagree (bulk edit). The raw `value` stays\n   * untouched but no option reports as checked; the first user commit replaces it and\n   * resolves the flag. There is no text display slot - the masking itself is the presentation.\n   */\n  public mixed = model(false);\n  public touched = model(false);\n  public multipleInput = input(false, { alias: 'multiple', transform: booleanAttribute });\n  public disabled = input(false, { transform: booleanAttribute });\n  /** View-only: options keep their normal look and focusability but cannot be (de)selected. */\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  public multiple = computed(() => this.multipleOverride ?? this.multipleInput());\n\n  public selection = createSelectionState<unknown, SelectionListItem>({\n    value: this.value,\n    multiple: this.multiple,\n    disabled: this.disabled,\n    pruneValueOnUnregister: true,\n    mixed: this.mixed,\n  });\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public role = computed(() => (this.multiple() ? 'group' : 'radiogroup'));\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.SELECTION_LIST);\n\n  private typeahead = createTypeahead();\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => {\n      this.formField?.unregisterControl(this);\n      this.typeahead.destroy();\n    });\n  }\n\n  public markTouched() {\n    this.touched.set(true);\n  }\n\n  public focusItem(item: SelectionListItem, options?: FocusOptions) {\n    item.elementRef.nativeElement.focus(options);\n  }\n\n  /** @internal */\n  public findTypeaheadMatch(character: string, from: SelectionListItem) {\n    const query = this.typeahead.append(character);\n    const items = this.selection.items();\n    const offset = query.length === 1 ? 1 : 0;\n    const start = items.indexOf(from) + offset;\n\n    for (let step = 0; step < items.length; step++) {\n      const item = items[(start + step + items.length) % items.length];\n\n      if (item && !item.disabled() && item.label().trim().toLowerCase().startsWith(query)) {\n        return item;\n      }\n    }\n\n    return null;\n  }\n\n  /** Mirrors the group's roving tabindex: the checked option, else the first enabled one. */\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    const items = this.selection.items();\n    const target = items.find((item) => item.checked() && !item.disabled()) ?? items.find((item) => !item.disabled());\n\n    if (target) {\n      this.focusItem(target, options);\n    }\n  }\n\n  public activate() {\n    this.focus({ preventScroll: true });\n  }\n}\n","import { Component, ElementRef, inject, ViewEncapsulation } from '@angular/core';\nimport { createComponentId } from '@ethlete/core';\n\n@Component({\n  selector: 'et-description',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-description',\n    '[attr.id]': 'id',\n  },\n  styles: `\n    et-description {\n      display: block;\n      font-size: var(--et-description-font-size, 12px);\n      color: var(--et-surface-color-muted-solid, currentColor);\n    }\n  `,\n})\nexport class DescriptionComponent {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** The id whatever this describes points its `aria-describedby` at. */\n  public readonly id = this.elementRef.nativeElement.id || createComponentId('et-description');\n}\n","import {\n  booleanAttribute,\n  computed,\n  contentChild,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { DescriptionComponent } from '../../description/description.component';\nimport { SELECTION_LIST_TOKEN, SelectionListItem } from './selection-list.tokens';\n\nlet uniqueOptionLabelId = 0;\n\nconst UNBOUND_VALUE = /* @__PURE__ */ Symbol('et-selection-option-unbound');\n\n@Directive({\n  selector: '[etSelectionOption]',\n  host: {\n    '[attr.role]': 'role()',\n    '[attr.aria-checked]': 'checked()',\n    '[attr.aria-labelledby]': 'labelId()',\n    '[attr.aria-describedby]': 'descriptionId()',\n    '[attr.aria-disabled]': 'effectiveDisabled() || null',\n    '[attr.aria-readonly]': '(role() === \"checkbox\" && effectiveReadonly()) || null',\n    '[attr.data-readonly]': 'effectiveReadonly() || null',\n    '[attr.tabindex]': 'tabindex()',\n    '(click)': 'select()',\n    '(keydown.space)': 'select(); $event.preventDefault()',\n    '(keydown.enter)': 'select(); $event.preventDefault()',\n    '(keydown.ArrowDown)': 'focusNext($event)',\n    '(keydown.ArrowRight)': 'focusNext($event)',\n    '(keydown.ArrowUp)': 'focusPrevious($event)',\n    '(keydown.ArrowLeft)': 'focusPrevious($event)',\n    '(keydown.Home)': 'focusEdge($event, \"first\")',\n    '(keydown.End)': 'focusEdge($event, \"last\")',\n    '(keydown)': 'focusTypeaheadMatch($event)',\n    '(blur)': 'markTouched()',\n  },\n})\nexport class SelectionOptionDirective {\n  private list = inject(SELECTION_LIST_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public value = input.required<unknown>();\n  public checked = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n\n  private description = contentChild(DescriptionComponent);\n\n  public effectiveDisabled = computed(() => this.disabled() || (this.list?.disabled() ?? false));\n  public effectiveReadonly = computed(() => this.list?.readonly() ?? false);\n  // multi-select lives in a `role=\"group\"`, where `option` is invalid ARIA (it's listbox-only) -\n  // a checkbox pairs correctly with `group` + `aria-checked`; single-select stays a radio.\n  public role = computed(() => (this.list?.multiple() ? 'checkbox' : 'radio'));\n\n  public labelId = signal(`et-selection-option-label-${uniqueOptionLabelId++}`);\n\n  /**\n   * The id of a projected `<et-description>`. The option pins its name to the label span, so the\n   * description is outside the name computation and only reaches assistive tech as a description.\n   */\n  public descriptionId = computed(() => this.description()?.id ?? null);\n\n  // reading through this computed keeps registry-wide reads (value↔checked sync) crash-free\n  // while the required `value` input has not executed its binding yet\n  private boundValue = computed(() => {\n    try {\n      return this.value();\n    } catch {\n      return UNBOUND_VALUE;\n    }\n  });\n\n  private listItem = {\n    value: this.boundValue,\n    checked: this.checked,\n    disabled: this.effectiveDisabled,\n    elementRef: this.el,\n    label: () => this.el.nativeElement.textContent ?? '',\n  };\n\n  public tabindex = computed(() => {\n    if (this.effectiveDisabled()) {\n      return -1;\n    }\n\n    if (!this.list) {\n      return 0;\n    }\n\n    const items = this.list.selection.items();\n    const checkedItem = items.find((i) => i.checked());\n\n    if (checkedItem) {\n      return checkedItem === this.listItem ? 0 : -1;\n    }\n\n    return items[0] === this.listItem ? 0 : -1;\n  });\n\n  constructor() {\n    if (this.list) {\n      const list = this.list;\n      list.selection.registerItem(this.listItem);\n      this.destroyRef.onDestroy(() => list.selection.unregisterItem(this.listItem));\n    }\n  }\n\n  public select() {\n    if (this.effectiveDisabled() || this.effectiveReadonly()) {\n      return;\n    }\n\n    if (this.list) {\n      this.list.selection.select(this.listItem);\n    } else {\n      this.checked.update((v) => !v);\n    }\n  }\n\n  public markTouched() {\n    if (this.list) {\n      this.list.markTouched();\n    }\n  }\n\n  public focusNext(event: Event) {\n    this.focusByStep(event, 1);\n  }\n\n  public focusPrevious(event: Event) {\n    this.focusByStep(event, -1);\n  }\n\n  /** Moves focus to the first or last enabled option (and, in a radio group, checks it). */\n  public focusEdge(event: Event, edge: 'first' | 'last') {\n    event.preventDefault();\n\n    if (!this.list || this.effectiveDisabled()) {\n      return;\n    }\n\n    const enabled = this.list.selection.items().filter((item) => !item.disabled());\n\n    this.moveFocusTo(edge === 'first' ? enabled[0] : enabled.at(-1));\n  }\n\n  /** Moves focus to the next option whose label starts with the typed characters. */\n  public focusTypeaheadMatch(event: KeyboardEvent) {\n    if (\n      !this.list ||\n      this.effectiveDisabled() ||\n      event.key.length !== 1 ||\n      event.key === ' ' ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.altKey\n    ) {\n      return;\n    }\n\n    const match = this.list.findTypeaheadMatch(event.key, this.listItem);\n\n    if (match) {\n      event.preventDefault();\n      this.moveFocusTo(match);\n    }\n  }\n\n  private focusByStep(event: Event, step: 1 | -1) {\n    event.preventDefault();\n\n    if (!this.list || this.effectiveDisabled()) {\n      return;\n    }\n\n    const items = this.list.selection.items();\n    const currentIndex = items.indexOf(this.listItem);\n    let index = (currentIndex + step + items.length) % items.length;\n\n    while (items[index]?.disabled() && index !== currentIndex) {\n      index = (index + step + items.length) % items.length;\n    }\n\n    this.moveFocusTo(items[index]);\n  }\n\n  private moveFocusTo(item: SelectionListItem | undefined) {\n    if (!this.list || !item || item.disabled()) {\n      return;\n    }\n\n    if (!this.list.multiple() && !this.effectiveReadonly()) {\n      this.list.selection.select(item);\n    }\n\n    this.list.focusItem(item);\n  }\n}\n","import { Component, computed, effect, inject, input, signal, ViewEncapsulation } from '@angular/core';\nimport { createCanAnimateSignal, injectStyleManager, ProvideColorDirective } from '@ethlete/core';\nimport { TabScaleStylesComponent } from '../../../tabs/tab-scale-styles.component';\nimport { FORM_FIELD_SIZES, FormFieldSize } from '../../form-field/form-field.variants';\nimport { FormSupportComponent } from '../../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../../form-field/headless';\nimport { SelectionListDirective } from '../headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n/** How a segmented button group presents its selection. See {@link SegmentedButtonGroupComponent.variant}. */\nexport const SEGMENTED_BUTTON_GROUP_VARIANTS = {\n  PILL: 'pill',\n  TABS: 'tabs',\n} as const;\n\nexport type SegmentedButtonGroupVariant =\n  (typeof SEGMENTED_BUTTON_GROUP_VARIANTS)[keyof typeof SEGMENTED_BUTTON_GROUP_VARIANTS];\n\n@Component({\n  selector: 'et-segmented-button-group',\n  templateUrl: './segmented-button-group.component.html',\n  styleUrl: './segmented-button-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: SelectionListDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-segmented-button-group',\n    '[class.et-tab-scale]': 'isTabsVariant()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n  },\n})\nexport class SegmentedButtonGroupComponent {\n  private list = inject(SelectionListDirective);\n  public support = injectFormSupport();\n  public size = input<FormFieldSize>(FORM_FIELD_SIZES.MD);\n\n  /**\n   * How the selection is drawn. `'pill'` fills the selected segment; `'tabs'` underlines it instead, for a group\n   * that reads as a set of views rather than a set of values.\n   *\n   * It is still a **selection control**, not navigation - it binds to a form field and announces itself as a radio\n   * group. If the segments correspond to routes, or to panels of content that should be linkable, reach for\n   * [tabs](/components/tabs) instead; this variant is for a filter that happens to look like tabs. @default 'pill'\n   */\n  public variant = input<SegmentedButtonGroupVariant>(SEGMENTED_BUTTON_GROUP_VARIANTS.PILL);\n\n  protected isTabsVariant = computed(() => this.variant() === SEGMENTED_BUTTON_GROUP_VARIANTS.TABS);\n\n  /** @internal The active background element of the currently checked button. Used as the flip animation origin. */\n  public lastActiveBackgroundElement = signal<HTMLElement | null>(null);\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    const styleManager = injectStyleManager();\n\n    effect(() => {\n      if (this.isTabsVariant()) {\n        styleManager.mount(TabScaleStylesComponent);\n      }\n    });\n  }\n\n  public focus(options?: FocusOptions) {\n    this.list.focus(options);\n  }\n}\n","<ng-content select=\"et-label\" />\n<ng-content select=\".et-segmented-button-group-label\" />\n\n<div class=\"et-segmented-button-group-buttons\">\n  <ng-content />\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { Component, effect, ElementRef, inject, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal, createFlipAnimation } from '@ethlete/core';\nimport { SelectionOptionDirective } from '../headless';\nimport { SegmentedButtonGroupComponent } from './segmented-button-group.component';\n\n@Component({\n  selector: 'et-segmented-button',\n  template: `\n    <div #background class=\"et-segmented-button-bg\"></div>\n    <span [attr.id]=\"optionDirective.labelId()\" class=\"et-segmented-button-label\">\n      <ng-content />\n    </span>\n  `,\n  styleUrl: './segmented-button.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: SelectionOptionDirective,\n      inputs: ['value', 'checked', 'disabled'],\n      outputs: ['checkedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-segmented-button',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class SegmentedButtonComponent {\n  public optionDirective = inject(SelectionOptionDirective);\n  private group = inject(SegmentedButtonGroupComponent, { optional: true });\n  private backgroundRef = viewChild.required<ElementRef<HTMLElement>>('background');\n\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    effect(() => {\n      const group = this.group;\n\n      if (!group || !this.optionDirective.checked()) {\n        return;\n      }\n\n      const backgroundEl = this.backgroundRef().nativeElement;\n      const previousOriginEl = untracked(() => group.lastActiveBackgroundElement());\n\n      untracked(() => group.lastActiveBackgroundElement.set(backgroundEl));\n\n      if (\n        !previousOriginEl ||\n        previousOriginEl === backgroundEl ||\n        !previousOriginEl.isConnected ||\n        !untracked(() => this.canAnimate.state())\n      ) {\n        return;\n      }\n\n      const flip = createFlipAnimation({\n        element: backgroundEl,\n        originElement: previousOriginEl,\n        duration: 250,\n        easing: 'cubic-bezier(0.35, 0.25, 0.2, 1)',\n      });\n\n      flip.play();\n    });\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  contentChild,\n  effect,\n  inject,\n  untracked,\n} from '@angular/core';\nimport { injectPrefersReducedMotion } from '@ethlete/core';\nimport { CalendarComponent } from '../../../calendar';\n\nconst COMPENSATION_DURATION = 160;\nconst COMPENSATION_EASING = 'ease';\n\nconst PICKER_ROWS = '.et-time-picker-sides, .et-time-picker-columns';\n\n/**\n * @internal Applied to the pane row of a date-time picker panel: when month navigation changes the\n * calendar height, the stretched time picker's vertically centered content jumps by half the delta,\n * and this slides it from its old visual position to the new one.\n *\n * Must stay a transform, never an animated `block-size`: animating the height would feed every\n * frame back into the row height this observes, so the panel would chase a moving target.\n */\n@Directive({\n  selector: '[etDateTimePickerPanes]',\n})\nexport class DateTimePickerPanesDirective {\n  private destroyRef = inject(DestroyRef);\n  private prefersReducedMotion = injectPrefersReducedMotion();\n  private host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private calendar = contentChild<CalendarComponent, ElementRef<HTMLElement>>(CalendarComponent, {\n    read: ElementRef,\n  });\n\n  private lastBlockSize: number | null = null;\n  private ready = false;\n  private animations: Animation[] = [];\n\n  constructor() {\n    // runs synchronously inside the resize-observer callback - after layout, before paint - so the\n    // columns never paint a frame at the jumped position; a signal-routed observer would be one\n    // painted frame late\n    // eslint-disable-next-line ethlete/no-native-observers -- pre-paint timing, see above\n    const observer = new ResizeObserver(() => {\n      if (this.ready) {\n        this.compensate();\n      }\n    });\n\n    effect(() => {\n      const calendar = this.calendar()?.nativeElement;\n\n      untracked(() => {\n        observer.disconnect();\n\n        if (calendar) {\n          observer.observe(calendar);\n        }\n      });\n    });\n\n    // the settled first-render height is the baseline - opening never animates\n    afterNextRender(() => {\n      this.lastBlockSize = this.measure();\n      this.ready = true;\n    });\n\n    this.destroyRef.onDestroy(() => {\n      observer.disconnect();\n      this.cancelAnimations();\n    });\n  }\n\n  private compensate() {\n    const blockSize = this.measure();\n\n    if (blockSize === null || blockSize === 0) {\n      return;\n    }\n\n    const previous = this.lastBlockSize;\n\n    this.lastBlockSize = blockSize;\n\n    if (previous === null || Math.abs(previous - blockSize) < 1 || this.prefersReducedMotion()) {\n      return;\n    }\n\n    // eslint-disable-next-line ethlete/no-dom-query -- the rows live inside et-time-picker's own view, out of reach of a content query from here\n    const rows = Array.from(this.host.nativeElement.querySelectorAll<HTMLElement>(PICKER_ROWS));\n    const firstRow = rows[0];\n\n    if (!firstRow) {\n      return;\n    }\n\n    const offset = (previous - blockSize) / 2 + this.currentOffset(firstRow);\n\n    this.cancelAnimations();\n\n    this.animations = rows.map((row) =>\n      row.animate([{ transform: `translateY(${offset}px)` }, { transform: 'translateY(0)' }], {\n        duration: COMPENSATION_DURATION,\n        easing: COMPENSATION_EASING,\n      }),\n    );\n  }\n\n  // the panes are stretched to one row, so every time picker has the same height\n  private measure() {\n    // eslint-disable-next-line ethlete/no-dom-query -- see compensate()\n    const timePicker = this.host.nativeElement.querySelector('.et-time-picker');\n\n    return timePicker?.getBoundingClientRect().height ?? null;\n  }\n\n  private currentOffset(row: HTMLElement) {\n    if (!this.animations.some((animation) => animation.playState === 'running')) {\n      return 0;\n    }\n\n    const transform = getComputedStyle(row).transform;\n    const translateY = /matrix\\(([^)]+)\\)/.exec(transform)?.[1]?.split(',')[5];\n    const offset = translateY === undefined ? 0 : Number(translateY);\n\n    return Number.isFinite(offset) ? offset : 0;\n  }\n\n  private cancelAnimations() {\n    for (const animation of this.animations) {\n      animation.cancel();\n    }\n\n    this.animations = [];\n  }\n}\n","import { setHours, setMinutes, setSeconds, startOfDay } from 'date-fns';\n\n/** The day of `day` carrying the time of day of `time`. */\nexport const withTimeOfDay = (day: Date, time: Date) =>\n  setSeconds(setMinutes(setHours(startOfDay(day), time.getHours()), time.getMinutes()), time.getSeconds());\n","import { setHours, setMinutes, setSeconds, startOfDay } from 'date-fns';\nimport { ParseDateValueOptions, parseDateValue } from './date-value';\n\ntype LenientTimeParts = {\n  hour: number;\n  minute: number;\n  second: number;\n};\n\nconst MERIDIEM_PATTERN = /\\s*([ap])\\.?\\s*(?:m\\.?)?$/i;\nconst SEPARATED_PATTERN = /^(\\d{1,2})(?:[:.\\s](\\d{1,2})(?:[:.\\s](\\d{1,2}))?)?$/;\nconst COMPACT_PATTERN = /^\\d{3,6}$/;\n\nconst extractLenientParts = (text: string): LenientTimeParts | null => {\n  const separated = SEPARATED_PATTERN.exec(text);\n\n  if (separated) {\n    return { hour: Number(separated[1]), minute: Number(separated[2] ?? 0), second: Number(separated[3] ?? 0) };\n  }\n\n  if (!COMPACT_PATTERN.test(text)) {\n    return null;\n  }\n\n  // digit runs split as H MM / HH MM / H MM SS / HH MM SS\n  const hourDigits = text.length % 2 === 0 ? 2 : 1;\n\n  return {\n    hour: Number(text.slice(0, hourDigits)),\n    minute: Number(text.slice(hourDigits, hourDigits + 2)),\n    second: text.length > 4 ? Number(text.slice(hourDigits + 2)) : 0,\n  };\n};\n\nconst parseLenient = (raw: string, referenceDate: Date): Date | null => {\n  let text = raw.trim().toLowerCase();\n\n  if (!text) {\n    return null;\n  }\n\n  let period: 'am' | 'pm' | null = null;\n  const meridiem = MERIDIEM_PATTERN.exec(text);\n\n  if (meridiem) {\n    period = meridiem[1] === 'a' ? 'am' : 'pm';\n    text = text.slice(0, meridiem.index).trim();\n  }\n\n  const parts = extractLenientParts(text);\n\n  if (parts === null) {\n    return null;\n  }\n\n  let { hour } = parts;\n\n  if (period !== null) {\n    if (hour < 1 || hour > 12) {\n      return null;\n    }\n\n    hour = (hour % 12) + (period === 'pm' ? 12 : 0);\n  } else if (hour > 23) {\n    return null;\n  }\n\n  if (parts.minute > 59 || parts.second > 59) {\n    return null;\n  }\n\n  return setSeconds(setMinutes(setHours(startOfDay(referenceDate), hour), parts.minute), parts.second);\n};\n\n/**\n * Parses typed time text: strictly against the display format first, then leniently (`930` → 09:30,\n * `9 30`, `930pm`). Returns the time of day on `referenceDate`, or `null` when nothing parses.\n */\nexport const parseTimeText = (value: string, options: ParseDateValueOptions): Date | null => {\n  const strict = parseDateValue(value, options);\n\n  if (strict !== null) {\n    return strict;\n  }\n\n  return parseLenient(value, options.referenceDate ?? new Date());\n};\n","import { startOfDay } from 'date-fns';\nimport { ParseDateValueOptions, parseDateValue } from './date-value';\nimport { parseTimeText } from './time-parse';\n\nconst SEPARATOR_PATTERN = /[,\\s]+/g;\n\n/**\n * Only the strict pass honors a custom `displayFormat` - the lenient fallback always uses the\n * locale's short `P`/`p` formats, so with a non-default format it accepts locale-shaped input.\n */\nexport const parseDateTimeText = (value: string, options: ParseDateValueOptions): Date | null => {\n  const strict = parseDateValue(value, options);\n\n  if (strict !== null) {\n    return strict;\n  }\n\n  const trimmed = value.trim();\n\n  if (!trimmed) {\n    return null;\n  }\n\n  const locale = options.locale;\n  // date-only parses must fill their missing time from midnight, not `new Date()` (parseDateValue's\n  // default), or a bare date leaks the current wall-clock time into the wire value\n  const referenceDate = startOfDay(options.referenceDate ?? new Date());\n\n  for (const separator of trimmed.matchAll(SEPARATOR_PATTERN)) {\n    const date = parseDateValue(trimmed.slice(0, separator.index), { format: 'P', locale, referenceDate });\n\n    if (date === null) {\n      continue;\n    }\n\n    const merged = parseTimeText(trimmed.slice(separator.index + separator[0].length), {\n      format: 'p',\n      locale,\n      referenceDate: date,\n    });\n\n    if (merged !== null) {\n      return merged;\n    }\n  }\n\n  return parseDateValue(trimmed, { format: 'P', locale, referenceDate });\n};\n","import { Signal, computed, signal } from '@angular/core';\nimport { Locale, startOfDay } from 'date-fns';\nimport { formatDateValue } from './date-value';\nimport { withTimeOfDay } from './date-time-merge';\nimport { splitDateTimeFormat } from './date-time-format-split';\n\nconst blankOut = (text: string, placeholderChar: string) => text.replace(/[\\p{L}\\p{N}]/gu, placeholderChar);\n\nexport type RenderPartialDateTimeOptions = {\n  day: Date | null;\n  time: Date | null;\n  format: string;\n  locale: Locale | null;\n  placeholderChar?: string;\n};\n\nexport const renderPartialDateTime = (options: RenderPartialDateTimeOptions) => {\n  const reference = options.day ?? options.time;\n\n  if (reference === null) {\n    return null;\n  }\n\n  const split = splitDateTimeFormat(options.format, options.locale);\n\n  if (split === null) {\n    return null;\n  }\n\n  const placeholderChar = options.placeholderChar ?? '_';\n  const render = (format: string, source: Date | null) => {\n    // date-fns throws on an empty pattern, and a split whose time span sits at either end has one\n    if (format === '') {\n      return '';\n    }\n\n    const text = formatDateValue(source ?? reference, { format, locale: options.locale }) ?? '';\n\n    return source === null ? blankOut(text, placeholderChar) : text;\n  };\n\n  return (\n    render(split.datePrefix, options.day) + render(split.time, options.time) + render(split.dateSuffix, options.day)\n  );\n};\n\n/**\n * One date-time slot's half-picked state: a day picked before a time (or the other way round) is\n * held here until its other half arrives.\n */\nexport type PendingDateTime = {\n  day: Signal<Date | null>;\n  time: Signal<Date | null>;\n  active: Signal<boolean>;\n  /** Takes a picked day: the completed date-time when a time was already held, else `null`. */\n  holdDay: (day: Date) => Date | null;\n  /** Takes a picked time: the completed date-time when a day was already held, else `null`. */\n  holdTime: (time: Date) => Date | null;\n  /** Drops a held day on its own. A time held for the same slot is a separate pick and survives. */\n  clearDay: () => void;\n  clear: () => void;\n};\n\nexport const createPendingDateTime = (): PendingDateTime => {\n  const day = signal<Date | null>(null);\n  const time = signal<Date | null>(null);\n\n  const clear = () => {\n    day.set(null);\n    time.set(null);\n  };\n\n  return {\n    day: day.asReadonly(),\n    time: time.asReadonly(),\n    active: computed(() => day() !== null || time() !== null),\n    holdDay: (picked) => {\n      const held = time();\n\n      if (held === null) {\n        day.set(startOfDay(picked));\n\n        return null;\n      }\n\n      clear();\n\n      return withTimeOfDay(picked, held);\n    },\n    holdTime: (picked) => {\n      const held = day();\n\n      if (held === null) {\n        time.set(picked);\n\n        return null;\n      }\n\n      clear();\n\n      return withTimeOfDay(held, picked);\n    },\n    clearDay: () => day.set(null),\n    clear,\n  };\n};\n","import { booleanAttribute, computed, effect, input, signal, Directive } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectDateFormat } from '../../date-time-formats';\nimport { DatePickerInputDirective } from '../../internals/date-picker-input.directive';\nimport { parseDateValue } from '../../internals/date-value';\nimport {\n  formatInZone,\n  isValidTimeZone,\n  localReading,\n  reinterpretInZone,\n  timeZoneDisplayName,\n  withZonedDay,\n  withZonedTimeOfDay,\n  zonedProxy,\n} from '../../internals/time-zone';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\nimport { withTimeOfDay } from '../../internals/date-time-merge';\nimport { parseDateTimeText } from '../../internals/date-time-parse';\nimport { createPendingDateTime, renderPartialDateTime } from '../../internals/pending-date-time';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport { CalendarDateClassFn, CalendarView } from '../../../../calendar/headless';\n\nlet localReadingIdCounter = 0;\n\n/**\n * A combined date & time form control with a `string | null` value (a date-fns\n * `valueFormat` wire string, ISO by default). Typed entry parses strictly\n * against the combined `displayFormat` on blur/Enter, then leniently (date and\n * time split at any separator, bare dates commit at midnight); the anchored\n * picker overlay hosts a calendar and a time picker side by side and stays open\n * across picks.\n *\n * Picking is two half-picks: whichever half lands first is held and the value stays `null` until\n * the second one arrives.\n */\n@Directive({\n  selector: '[etDateTimeInput]',\n  exportAs: 'etDateTimeInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: DateTimeInputDirective }],\n})\nexport class DateTimeInputDirective extends DatePickerInputDirective implements FormValueControl<string | null> {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectDateFormat();\n\n  /** Message the form field shows when typed text can't be parsed as a date & time. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /** Combined date-fns format shown in (and parsed from) the field. Locale-aware by default. */\n  public displayFormat = input('Pp');\n\n  /**\n   * IANA name of the zone the field's wall clock stands for - `'Asia/Tokyo'` makes the field, the\n   * calendar and the time picker all read in Tokyo, and writes the value with Tokyo's offset.\n   * `null` keeps the runtime's own zone.\n   */\n  public timeZone = input<string | null>(null);\n\n  /** A name for {@link timeZone} in the second reading. Defaults to the IANA name's last segment. */\n  public timeZoneLabel = input<string | null>(null);\n\n  /** Forwarded to the picker calendar. (`min`/`max` are reserved by signal forms.) */\n  public minDate = input<Date | null>(null);\n  public maxDate = input<Date | null>(null);\n  public dateFilter = input<((date: Date) => boolean) | null>(null);\n  /** Month the picker calendar opens at while the value is empty. */\n  public startAt = input<Date | null>(null);\n\n  /** Which grid the picker calendar opens on - `'year'` to pick a month first, `'multiYear'` a year. */\n  public startView = input<CalendarView>('month');\n\n  /** Per-cell classes for the picker calendar - busy days, holidays, markers of your own. */\n  public dateClass = input<CalendarDateClassFn | null>(null);\n\n  /** Renders the picker calendar's week-number column. */\n  public weekNumbers = input(false, { transform: booleanAttribute });\n\n  /**\n   * Forwarded to the picker's time picker. Only the time of day of `minTime`/`maxTime`\n   * is read, so the bound applies on every day; `timeFilter` receives the full candidate\n   * timestamp. Bounds shape the picker - validate typed entry with a schema validator.\n   */\n  public minTime = input<Date | null>(null);\n  public maxTime = input<Date | null>(null);\n  public timeFilter = input<((date: Date) => boolean) | null>(null);\n\n  public effectiveDisplayFormat = this.displayFormat;\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidDateTime);\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DATE_TIME_INPUT);\n\n  /** The zone in effect, or `null` when none is set or the name is not one `Intl` knows. */\n  public effectiveTimeZone = computed(() => {\n    const timeZone = this.timeZone();\n\n    return timeZone !== null && isValidTimeZone(timeZone) ? timeZone : null;\n  });\n\n  /** The name shown for the field's zone. */\n  public resolvedTimeZoneLabel = computed(() => {\n    const timeZone = this.effectiveTimeZone();\n\n    return timeZone === null ? null : (this.timeZoneLabel() ?? timeZoneDisplayName(timeZone));\n  });\n\n  /** The current value as a `Date` (what the picker calendar and time picker bind to). */\n  public dateTime = computed(() => {\n    if (this.mixed()) {\n      return null;\n    }\n\n    const value = this.value();\n\n    if (value === null) {\n      return null;\n    }\n\n    return parseDateValue(value, { format: this.effectiveValueFormat(), locale: this.effectiveLocale() });\n  });\n\n  private halfPick = createPendingDateTime();\n\n  /** Highlighting only - a committed value is always derived from the instant, never from this. */\n  private pickerDateTime = computed(() => {\n    const dateTime = this.dateTime();\n    const timeZone = this.effectiveTimeZone();\n\n    return dateTime === null || timeZone === null ? dateTime : zonedProxy(dateTime, timeZone);\n  });\n\n  /** The day the picker calendar highlights - the committed one, else a day picked with no time yet. */\n  public pickerDate = computed(() => this.pickerDateTime() ?? this.halfPick.day());\n\n  /** The time the picker's columns mark as selected - the committed one, else a time picked with no day yet. */\n  public pickerTime = computed(() => this.pickerDateTime() ?? this.halfPick.time());\n\n  /**\n   * The same moment read in the runtime's own zone, or `null` when no zone is set, the field is\n   * empty, or both zones show the same wall clock.\n   */\n  public localReading = computed(() =>\n    localReading(this.dateTime(), {\n      format: this.displayFormat(),\n      locale: this.effectiveLocale(),\n      timeZone: this.effectiveTimeZone(),\n    }),\n  );\n\n  private readonly LOCAL_READING_ELEMENT_ID = `et-date-time-local-reading-${localReadingIdCounter++}`;\n\n  /** @internal Id of the second-reading element, or `null` while it does not render. */\n  public localReadingId = computed(() => (this.localReading() === null ? null : this.LOCAL_READING_ELEMENT_ID));\n\n  public override ownDescribedBy = this.localReadingId;\n\n  /** The committed value rendered in `displayFormat`, or a half-pick rendered against placeholders. */\n  public displayValue = computed(() => {\n    const dateTime = this.dateTime();\n\n    if (dateTime !== null) {\n      return (\n        formatInZone(dateTime, {\n          format: this.displayFormat(),\n          locale: this.effectiveLocale(),\n          timeZone: this.effectiveTimeZone(),\n        }) ?? ''\n      );\n    }\n\n    if (this.maskPattern() !== null) {\n      return '';\n    }\n\n    return (\n      renderPartialDateTime({\n        day: this.halfPick.day(),\n        time: this.halfPick.time(),\n        format: this.displayFormat(),\n        locale: this.effectiveLocale(),\n      }) ?? ''\n    );\n  });\n\n  constructor() {\n    super();\n\n    if (ngDevMode) {\n      effect(() => {\n        const timeZone = this.timeZone();\n\n        if (timeZone !== null && !isValidTimeZone(timeZone)) {\n          console.warn(`[et-date-time-input] timeZone \"${timeZone}\" is not an IANA zone name, so it is ignored.`);\n        }\n      });\n    }\n  }\n\n  /** An actual edit invalidates whatever half was held. */\n  public override beforeCommit() {\n    this.halfPick.clear();\n  }\n\n  /** @internal A strict parse against `displayFormat`, then a lenient one. */\n  public parseCommitText(raw: string) {\n    return parseDateTimeText(raw, { format: this.displayFormat(), locale: this.effectiveLocale() });\n  }\n\n  /** @internal */\n  public writeCommitted(parsed: Date) {\n    this.commitInstant(reinterpretInZone(parsed, this.effectiveTimeZone()));\n  }\n\n  /**\n   * Commits a calendar-picked day onto the committed time of day, or holds it until a time is\n   * picked. The picker stays open.\n   */\n  public selectDate(date: Date | null) {\n    if (date === null || !this.interactive()) {\n      return;\n    }\n\n    const current = this.dateTime();\n    const timeZone = this.effectiveTimeZone();\n\n    if (current !== null) {\n      this.resolvePick(\n        timeZone === null ? withTimeOfDay(date, current) : withZonedDay(current, { day: date, timeZone }),\n      );\n\n      return;\n    }\n\n    this.resolvePick(this.holdHalfPick(this.halfPick.holdDay(date)));\n  }\n\n  /**\n   * Commits a picker-selected time onto the committed day, or holds it until a day is picked. The\n   * picker stays open.\n   */\n  public selectTime(time: Date | null) {\n    if (time === null || !this.interactive()) {\n      return;\n    }\n\n    const current = this.dateTime();\n    const timeZone = this.effectiveTimeZone();\n\n    if (current !== null) {\n      this.resolvePick(\n        timeZone === null ? withTimeOfDay(current, time) : withZonedTimeOfDay(current, { time, timeZone }),\n      );\n\n      return;\n    }\n\n    this.resolvePick(this.holdHalfPick(this.halfPick.holdTime(time)));\n  }\n\n  /** Drops a held half along with the value. */\n  public override clearValue() {\n    super.clearValue();\n    this.halfPick.clear();\n  }\n\n  private holdHalfPick(merged: Date | null) {\n    return merged === null ? null : reinterpretInZone(merged, this.effectiveTimeZone());\n  }\n\n  private resolvePick(instant: Date | null) {\n    if (instant !== null) {\n      this.commitInstant(instant);\n    } else if (this.mixed()) {\n      this.value.set(null);\n      this.mixed.set(false);\n    }\n\n    this.touched.set(true);\n  }\n\n  private commitInstant(instant: Date) {\n    this.halfPick.clear();\n    this.inputText.set('');\n    this.parseError.set(false);\n    this.value.set(\n      formatInZone(instant, {\n        format: this.effectiveValueFormat(),\n        locale: this.effectiveLocale(),\n        timeZone: this.effectiveTimeZone(),\n      }),\n    );\n    this.mixed.set(false);\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../../form-field/headless';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DatePickerInputFieldDirective } from '../../internals/date-picker-input-field.directive';\nimport { DATE_TIME_INPUT_ERROR_CODES } from '../date-time-input-errors';\nimport { DateTimeInputDirective } from './date-time-input.directive';\n\n/**\n * The text field of a date-time input: shows the committed value in the display\n * format, commits typed text (strict-then-lenient) on blur/Enter, keeps\n * unparseable text visible, and opens the picker on Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etDateTimeInputField]',\n  exportAs: 'etDateTimeInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: DateTimeInputFieldDirective }],\n})\nexport class DateTimeInputFieldDirective extends DatePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected pickerInput = inject(DateTimeInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    registerSingleton(this.pickerInput?.registeredField, this);\n\n    if (ngDevMode && !this.pickerInput) {\n      throw new RuntimeError(\n        DATE_TIME_INPUT_ERROR_CODES.FIELD_OUTSIDE_DATE_TIME_INPUT,\n        '[DateTimeInputFieldDirective] etDateTimeInputField must be placed inside an [etDateTimeInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, effect, inject, input, signal } from '@angular/core';\nimport { positiveIntegerAttribute } from '../../../internals/number-attributes';\nimport { CALENDAR_IMPORTS } from '../../../calendar';\nimport { CALENDAR_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { TIME_PICKER_IMPORTS } from '../../../time-picker';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { SegmentedButtonComponent, SegmentedButtonGroupComponent } from '../../selection-list/segmented-button-group';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateTimePickerPanesDirective } from '../internals/date-time-panes.directive';\nimport { DateTimeInputDirective, DateTimeInputFieldDirective } from './headless';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-date-time-input',\n  templateUrl: './date-time-input.component.html',\n  styleUrl: './date-time-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...CALENDAR_IMPORTS,\n    ...TIME_PICKER_IMPORTS,\n    DateTimeInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    DateTimePickerPanesDirective,\n    SegmentedButtonGroupComponent,\n    SegmentedButtonComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: DateTimeInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'timeZone',\n        'timeZoneLabel',\n        'locale',\n        'mask',\n        'minDate',\n        'maxDate',\n        'dateFilter',\n        'startAt',\n        'startView',\n        'dateClass',\n        'weekNumbers',\n        'minTime',\n        'maxTime',\n        'timeFilter',\n        'pickerOpen',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-date-time-input',\n  },\n})\nexport class DateTimeInputComponent {\n  protected dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected dateTimeInput = inject(DateTimeInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n  public minuteStep = input(5, { transform: positiveIntegerAttribute });\n  public secondStep = input(1, { transform: positiveIntegerAttribute });\n  /** Labels of the pane tabs shown when the picker mounts as a bottom sheet. */\n  public dateTabLabel = input<string | null>(null);\n  public timeTabLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openDateTimePicker,\n  );\n\n  protected resolvedDateTabLabel = computed(() => this.dateTabLabel() ?? this.dateTimeLabels().dateTab);\n\n  protected resolvedTimeTabLabel = computed(() => this.timeTabLabel() ?? this.dateTimeLabels().timeTab);\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseDateTime);\n\n  /**\n   * The second reading shown under the field: the zone the field is in, and the same moment in the\n   * reader's own zone. `null` whenever the two agree.\n   */\n  protected localReadingText = computed(() => {\n    const reading = this.dateTimeInput.localReading();\n    const timeZone = this.dateTimeInput.resolvedTimeZoneLabel();\n\n    if (reading === null || timeZone === null) {\n      return null;\n    }\n\n    return this.dateTimeLabels().timeZoneReading(timeZone, reading);\n  });\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.dateTimeInput.hasValue() &&\n      (this.dateTimeInput.focused() || this.dateTimeInput.pickerOpen()) &&\n      this.dateTimeInput.interactive(),\n  );\n\n  protected activePane = signal<'date' | 'time'>('date');\n\n  /**\n   * Direction of the last pane switch. `null` while untouched, so opening the picker does not\n   * animate.\n   */\n  protected paneNav = signal<'forward' | 'backward' | null>(null);\n\n  private paneAdvanceSpent = signal(false);\n\n  constructor() {\n    effect(() => {\n      if (this.dateTimeInput.pickerOpen()) {\n        this.activePane.set('date');\n        this.paneNav.set(null);\n        this.paneAdvanceSpent.set(false);\n      }\n    });\n  }\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.dateTimeInput.clearValue();\n  }\n\n  /**\n   * The first day picked carries the tabs on to the time pane. Once only: after that the tabs stay\n   * where they are put.\n   */\n  protected handleDateSelect(date: Date | null) {\n    this.dateTimeInput.selectDate(date);\n\n    if (date === null || this.paneAdvanceSpent()) {\n      return;\n    }\n\n    this.paneAdvanceSpent.set(true);\n    this.showPane('time');\n  }\n\n  protected setActivePane(pane: unknown) {\n    this.paneAdvanceSpent.set(true);\n    this.showPane(pane === 'time' ? 'time' : 'date');\n  }\n\n  public focus(options?: FocusOptions) {\n    this.dateTimeInput.focus(options);\n  }\n\n  private showPane(next: 'date' | 'time') {\n    if (next === this.activePane()) {\n      return;\n    }\n\n    this.paneNav.set(next === 'time' ? 'forward' : 'backward');\n    this.activePane.set(next);\n  }\n}\n","<input\n  [etInputMask]=\"dateTimeInput.maskPattern()\"\n  class=\"et-date-time-input-field\"\n  etDateTimeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n/>\n\n@if (localReadingText(); as reading) {\n  <span [id]=\"dateTimeInput.localReadingId()\" class=\"et-date-time-input-local-reading\">{{ reading }}</span>\n}\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-calendar\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <div class=\"et-date-time-input-panel\">\n      <div class=\"et-date-time-input-panel-tabs\">\n        <et-segmented-button-group\n          [value]=\"activePane()\"\n          [aria-label]=\"dateTimeLabels().paneSwitch\"\n          (valueChange)=\"setActivePane($event)\"\n        >\n          <et-segmented-button value=\"date\">{{ resolvedDateTabLabel() }}</et-segmented-button>\n          <et-segmented-button value=\"time\">{{ resolvedTimeTabLabel() }}</et-segmented-button>\n        </et-segmented-button-group>\n      </div>\n\n      <div\n        [attr.data-active-pane]=\"activePane()\"\n        [attr.data-nav]=\"paneNav()\"\n        class=\"et-date-time-input-panel-panes\"\n        etDateTimePickerPanes\n      >\n        <et-calendar\n          [value]=\"dateTimeInput.pickerDate()\"\n          [min]=\"dateTimeInput.minDate()\"\n          [max]=\"dateTimeInput.maxDate()\"\n          [dateFilter]=\"dateTimeInput.dateFilter()\"\n          [startAt]=\"dateTimeInput.startAt()\"\n          [startView]=\"dateTimeInput.startView()\"\n          [dateClass]=\"dateTimeInput.dateClass()\"\n          [weekNumbers]=\"dateTimeInput.weekNumbers()\"\n          [locale]=\"dateTimeInput.effectiveLocale()\"\n          (valueChange)=\"handleDateSelect($event)\"\n        />\n        <div class=\"et-date-time-input-panel-time-pane\">\n          <et-time-picker\n            [value]=\"dateTimeInput.pickerTime()\"\n            [format]=\"dateTimeInput.displayFormat()\"\n            [locale]=\"dateTimeInput.effectiveLocale()\"\n            [minuteStep]=\"minuteStep()\"\n            [secondStep]=\"secondStep()\"\n            [min]=\"dateTimeInput.minTime()\"\n            [max]=\"dateTimeInput.maxTime()\"\n            [timeFilter]=\"dateTimeInput.timeFilter()\"\n            (valueChange)=\"dateTimeInput.selectTime($event)\"\n          />\n        </div>\n      </div>\n    </div>\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateTimeInputComponent } from './date-time-input.component';\nimport { DateTimeInputDirective, DateTimeInputFieldDirective } from './headless';\n\nexport const DATE_TIME_INPUT_IMPORTS = [\n  DateTimeInputComponent,\n  DateTimeInputDirective,\n  DateTimeInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","// codes 3060-3069 (inside the shared date & time inputs block 3000-3099)\nexport const DATE_TIME_RANGE_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_DATE_TIME_RANGE_INPUT: 3060,\n  DUPLICATE_FIELD: 3061,\n} as const;\n","import { Directive, booleanAttribute, computed, effect, input, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { startOfDay } from 'date-fns';\nimport { CalendarDateClassFn, CalendarView } from '../../../../calendar/headless';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectDateFormat } from '../../date-time-formats';\nimport {\n  DateRangePickerInputDirective,\n  DateRangeSide,\n  DateRangeValue,\n} from '../../internals/date-range-picker-input.directive';\nimport { withTimeOfDay } from '../../internals/date-time-merge';\nimport {\n  isValidTimeZone,\n  localReading,\n  reinterpretInZone,\n  timeZoneDisplayName,\n  withZonedDay,\n} from '../../internals/time-zone';\nimport { parseDateTimeText } from '../../internals/date-time-parse';\nimport { createPendingDateTime, renderPartialDateTime } from '../../internals/pending-date-time';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\nimport { DateRangePreset } from '../../date-range-presets';\nimport { createDateRangePresets } from '../../internals/date-range-presets-state';\n\nexport type { DateRangeValue as DateTimeRangeValue } from '../../internals/date-range-picker-input.directive';\n\nlet localReadingIdCounter = 0;\n\n/**\n * Rejects individual times in the picker. The candidate is the picked time of day on the side's\n * committed day, and `side` says which end is being filled.\n */\nexport type DateTimeRangeTimeFilterFn = (date: Date, side: DateRangeSide) => boolean;\n\n/**\n * A combined date & time *range* form control: one registered field-control containing two text\n * inputs that share a single picker holding a range-mode calendar and one time picker per side. The\n * value is `{ start, end }` of `valueFormat` wire strings, both carrying a time; each side parses\n * strictly against the combined `displayFormat` on blur/Enter, then leniently, exactly like the\n * single date-time input.\n *\n * The picker never closes on its own. Each side is picked in two halves: whichever half lands first\n * is held and that side's value stays `null` until the second one arrives.\n */\n@Directive({\n  selector: '[etDateTimeRangeInput]',\n  exportAs: 'etDateTimeRangeInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: DateTimeRangeInputDirective }],\n})\nexport class DateTimeRangeInputDirective\n  extends DateRangePickerInputDirective\n  implements FormValueControl<DateRangeValue>\n{\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectDateFormat();\n\n  /** Message the form field shows when either side's typed text can't be parsed as a date & time. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /** Combined date-fns format shown in (and parsed from) both fields. Locale-aware by default. */\n  public displayFormat = input('Pp');\n\n  /**\n   * IANA name of the zone both fields' wall clock stands for - `'Asia/Tokyo'` makes the fields, the\n   * calendar and the time pickers all read in Tokyo, and writes both ends with Tokyo's offset.\n   * `null` keeps the runtime's own zone.\n   */\n  public timeZone = input<string | null>(null);\n\n  /** A name for {@link timeZone} in the second reading. Defaults to the IANA name's last segment. */\n  public timeZoneLabel = input<string | null>(null);\n\n  /** Forwarded to the picker calendar. (`min`/`max` are reserved by signal forms.) */\n  public minDate = input<Date | null>(null);\n  public maxDate = input<Date | null>(null);\n  public dateFilter = input<((date: Date) => boolean) | null>(null);\n  /** Month the picker calendar opens at while the range is empty. */\n  public startAt = input<Date | null>(null);\n\n  /** Which grid the picker calendar opens on - `'year'` to pick a month first, `'multiYear'` a year. */\n  public startView = input<CalendarView>('month');\n\n  /** Per-cell classes for the picker calendar - busy days, holidays, markers of your own. */\n  public dateClass = input<CalendarDateClassFn | null>(null);\n\n  /** Renders the picker calendar's week-number column. */\n  public weekNumbers = input(false, { transform: booleanAttribute });\n\n  /**\n   * Forwarded to both of the picker's time pickers. Only the time of day of `minTime`/`maxTime` is\n   * read, so the bound applies on every day; `timeFilter` receives the full candidate timestamp and\n   * the side it belongs to. Bounds shape the picker - validate typed entry with a schema validator.\n   */\n  public minTime = input<Date | null>(null);\n  public maxTime = input<Date | null>(null);\n  public timeFilter = input<DateTimeRangeTimeFilterFn | null>(null);\n\n  /**\n   * Ranges offered beside the picker - build them with the preset factories (`lastDaysPreset(7)`,\n   * `thisMonthPreset()`, …), which run from 00:00 to 23:59, or write your own. Picking one commits\n   * both ends; the picker stays open like after any other pick.\n   */\n  public presets = input<readonly DateRangePreset[]>([]);\n\n  public effectiveDisplayFormat = this.displayFormat;\n\n  public resolvedParseErrorMessage = computed(\n    () => this.parseErrorMessage() ?? this.dateTimeLabels().invalidDateTimeRange,\n  );\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DATE_TIME_RANGE_INPUT);\n\n  /** The zone in effect, or `null` when none is set or the name is not one `Intl` knows. */\n  public override effectiveTimeZone = computed(() => {\n    const timeZone = this.timeZone();\n\n    return timeZone !== null && isValidTimeZone(timeZone) ? timeZone : null;\n  });\n\n  /** The name shown for the fields' zone. */\n  public resolvedTimeZoneLabel = computed(() => {\n    const timeZone = this.effectiveTimeZone();\n\n    return timeZone === null ? null : (this.timeZoneLabel() ?? timeZoneDisplayName(timeZone));\n  });\n\n  private readonly LOCAL_READING_ELEMENT_ID = `et-date-time-range-local-reading-${localReadingIdCounter++}`;\n\n  /** @internal Id of the second-reading element, or `null` while it does not render. */\n  public localReadingId = computed(() =>\n    this.localReading('start') === null && this.localReading('end') === null ? null : this.LOCAL_READING_ELEMENT_ID,\n  );\n\n  public override ownDescribedBy = this.localReadingId;\n\n  private halfPicks = { start: createPendingDateTime(), end: createPendingDateTime() };\n\n  /** @internal */\n  public presetList = createDateRangePresets({\n    host: this,\n    presets: this.presets,\n    labels: this.dateTimeLabels,\n    normalize: (date) => date,\n  });\n\n  /** The two days the picker calendar highlights - committed, else picked with no time yet. */\n  public pickerDateRange = computed(() => ({\n    start: this.pickerSideDate('start') ?? this.halfPicks.start.day(),\n    end: this.pickerSideDate('end') ?? this.halfPicks.end.day(),\n  }));\n\n  /** The two times the picker's columns mark as selected - committed, else picked with no day yet. */\n  public pickerTimeRange = computed(() => ({\n    start: this.pickerSideDate('start') ?? this.halfPicks.start.time(),\n    end: this.pickerSideDate('end') ?? this.halfPicks.end.time(),\n  }));\n\n  constructor() {\n    super();\n\n    if (ngDevMode) {\n      effect(() => {\n        const timeZone = this.timeZone();\n\n        if (timeZone !== null && !isValidTimeZone(timeZone)) {\n          console.warn(`[et-date-time-range-input] timeZone \"${timeZone}\" is not an IANA zone name, so it is ignored.`);\n        }\n      });\n    }\n  }\n\n  /** One side read in the runtime's own zone, or `null` when it is empty or the readings agree. */\n  public localReading(side: DateRangeSide) {\n    return localReading(this.sideDate(side), {\n      format: this.effectiveDisplayFormat(),\n      locale: this.effectiveLocale(),\n      timeZone: this.effectiveTimeZone(),\n    });\n  }\n\n  /**\n   * Commits a picker day range onto each side's committed time of day, holding the days whose time\n   * is still missing. The picker stays open.\n   */\n  public selectCalendarRange(range: { start: Date | null; end: Date | null }) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    // both merges read the value the range is about to replace, so they run before `writeRange`\n    this.writeRange({ start: this.mergeDay(range.start, 'start'), end: this.mergeDay(range.end, 'end') });\n    this.touched.set(true);\n  }\n\n  /**\n   * Commits a picker-selected time onto one side's day. While that side has no day yet the *other*\n   * side's is used, and while the range is empty the time is held until a day is picked.\n   */\n  public selectTime(side: DateRangeSide, time: Date | null) {\n    if (time === null || !this.interactive()) {\n      return;\n    }\n\n    const day = this.sideDay(side) ?? this.sideDay(side === 'start' ? 'end' : 'start');\n\n    if (day === null) {\n      this.halfPicks[side].holdTime(time);\n      this.resolvePendingMixed();\n    } else {\n      this.halfPicks[side].clear();\n      this.commitSideDate(side, reinterpretInZone(withTimeOfDay(day, time), this.effectiveTimeZone()));\n    }\n\n    this.touched.set(true);\n  }\n\n  /** Commits a preset's range, dropping any held half-pick. */\n  public selectPreset(preset: DateRangePreset) {\n    if (this.presetList.apply(preset)) {\n      this.halfPicks.start.clear();\n      this.halfPicks.end.clear();\n    }\n  }\n\n  /** The committed text of one side, or its half-pick rendered against placeholders. */\n  public override displayValue(side: DateRangeSide) {\n    const committed = super.displayValue(side);\n\n    if (committed !== '' || this.maskPattern() !== null) {\n      return committed;\n    }\n\n    return (\n      renderPartialDateTime({\n        day: this.halfPicks[side].day(),\n        time: this.halfPicks[side].time(),\n        format: this.effectiveDisplayFormat(),\n        locale: this.effectiveLocale(),\n      }) ?? ''\n    );\n  }\n\n  /** An actual edit to a side's field invalidates whatever half was held for it. */\n  public override beforeCommitSide(side: DateRangeSide) {\n    this.halfPicks[side].clear();\n  }\n\n  /** Drops both held halves along with the range. */\n  public override clearRange() {\n    super.clearRange();\n    this.halfPicks.start.clear();\n    this.halfPicks.end.clear();\n  }\n\n  public parseSideCommit(raw: string) {\n    return parseDateTimeText(raw, {\n      format: this.effectiveDisplayFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: startOfDay(new Date()),\n    });\n  }\n\n  private sideDay(side: DateRangeSide) {\n    return this.pickerSideDate(side) ?? this.halfPicks[side].day();\n  }\n\n  private mergeDay(day: Date | null, side: DateRangeSide) {\n    const held = this.halfPicks[side];\n\n    // the calendar reports `end: null` for its whole first click, so dropping the held *time* here\n    // would delete a time the reader picked before the days\n    if (day === null) {\n      held.clearDay();\n\n      return null;\n    }\n\n    const committed = this.sideDate(side);\n    const timeZone = this.effectiveTimeZone();\n\n    if (committed !== null) {\n      return timeZone === null ? withTimeOfDay(day, committed) : withZonedDay(committed, { day, timeZone });\n    }\n\n    const merged = held.holdDay(day);\n\n    return merged === null ? null : reinterpretInZone(merged, timeZone);\n  }\n\n  private resolvePendingMixed() {\n    if (this.mixed()) {\n      this.value.set({ start: null, end: null });\n      this.mixed.set(false);\n    }\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DateRangePickerInputFieldDirective } from '../../internals/date-range-picker-input-field.directive';\nimport { DATE_TIME_RANGE_INPUT_ERROR_CODES } from '../date-time-range-input-errors';\nimport { DateTimeRangeInputDirective } from './date-time-range-input.directive';\n\n/**\n * One side of a date & time range input: shows the committed side value in the combined display\n * format, commits typed text (strict-then-lenient) on blur/Enter, keeps unparseable text visible,\n * and opens the picker on Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etDateTimeRangeInputField]',\n  exportAs: 'etDateTimeRangeInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: DateTimeRangeInputFieldDirective }],\n})\nexport class DateTimeRangeInputFieldDirective extends DateRangePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected rangeInput = inject(DateTimeRangeInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    if (ngDevMode && !this.rangeInput) {\n      throw new RuntimeError(\n        DATE_TIME_RANGE_INPUT_ERROR_CODES.FIELD_OUTSIDE_DATE_TIME_RANGE_INPUT,\n        '[DateTimeRangeInputFieldDirective] etDateTimeRangeInputField must be placed inside an [etDateTimeRangeInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  /** @internal */\n  public duplicateFieldError(side: 'start' | 'end') {\n    return new RuntimeError(\n      DATE_TIME_RANGE_INPUT_ERROR_CODES.DUPLICATE_FIELD,\n      `[DateTimeRangeInputFieldDirective] An [etDateTimeRangeInput] accepts only one etDateTimeRangeInputField for its \"${side}\" side.`,\n      { element: this.elementRef.nativeElement },\n    );\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, effect, inject, input, signal } from '@angular/core';\nimport { positiveIntegerAttribute } from '../../../internals/number-attributes';\nimport { CALENDAR_IMPORTS } from '../../../calendar';\nimport { CALENDAR_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { TIME_PICKER_IMPORTS } from '../../../time-picker';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { SegmentedButtonComponent, SegmentedButtonGroupComponent } from '../../selection-list/segmented-button-group';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DateRangePresetsComponent } from '../date-range-presets.component';\nimport { DateTimePickerPanesDirective } from '../internals/date-time-panes.directive';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateTimeRangeInputDirective, DateTimeRangeInputFieldDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\ntype DateTimeRangePane = 'dates' | 'times';\n\nconst PANE_ORDER: readonly DateTimeRangePane[] = ['dates', 'times'];\n\n@Component({\n  selector: 'et-date-time-range-input',\n  templateUrl: './date-time-range-input.component.html',\n  styleUrls: ['../range-input-shell.css', './date-time-range-input.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...CALENDAR_IMPORTS,\n    ...TIME_PICKER_IMPORTS,\n    DateTimeRangeInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    DateRangePresetsComponent,\n    DateTimePickerPanesDirective,\n    SegmentedButtonGroupComponent,\n    SegmentedButtonComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CALENDAR_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: DateTimeRangeInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'startPlaceholder',\n        'endPlaceholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'timeZone',\n        'timeZoneLabel',\n        'locale',\n        'mask',\n        'minDate',\n        'maxDate',\n        'dateFilter',\n        'startAt',\n        'startView',\n        'dateClass',\n        'weekNumbers',\n        'presets',\n        'minTime',\n        'maxTime',\n        'timeFilter',\n        'pickerOpen',\n        'startAriaLabel',\n        'endAriaLabel',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-date-time-range-input',\n    role: 'group',\n    '[attr.aria-label]': 'rangeInput.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'rangeInput.labelId()',\n  },\n})\nexport class DateTimeRangeInputComponent {\n  protected dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected rangeInput = inject(DateTimeRangeInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n  public minuteStep = input(5, { transform: positiveIntegerAttribute });\n  public secondStep = input(1, { transform: positiveIntegerAttribute });\n  /** The bottom sheet's two tab labels. */\n  public datesTabLabel = input<string | null>(null);\n  public timesTabLabel = input<string | null>(null);\n  /** The time picker's two ends, on the control that switches between them. */\n  public startTimeLabel = input<string | null>(null);\n  public endTimeLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedStartAriaLabel = computed(\n    () => this.rangeInput.startAriaLabel() ?? this.dateTimeLabels().startDateTime,\n  );\n\n  protected resolvedEndAriaLabel = computed(() => this.rangeInput.endAriaLabel() ?? this.dateTimeLabels().endDateTime);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openDateTimePicker,\n  );\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseDateTimeRange);\n\n  protected resolvedDatesTabLabel = computed(() => this.datesTabLabel() ?? this.dateTimeLabels().datesTab);\n\n  protected resolvedTimesTabLabel = computed(() => this.timesTabLabel() ?? this.dateTimeLabels().timesTab);\n\n  /**\n   * The second reading shown under the fields: the zone they are in, and the same moments in the\n   * reader's own zone. `null` whenever the two agree.\n   */\n  protected localReadingText = computed(() => {\n    const timeZone = this.rangeInput.resolvedTimeZoneLabel();\n    const start = this.rangeInput.localReading('start');\n    const end = this.rangeInput.localReading('end');\n\n    if (timeZone === null || (start === null && end === null)) {\n      return null;\n    }\n\n    const reading = start !== null && end !== null ? `${start} – ${end}` : ((start ?? end) as string);\n\n    return this.dateTimeLabels().timeZoneReading(timeZone, reading);\n  });\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.rangeInput.hasValue() &&\n      (this.rangeInput.focused() || this.rangeInput.pickerOpen()) &&\n      this.rangeInput.interactive(),\n  );\n\n  protected activePane = signal<DateTimeRangePane>('dates');\n\n  /**\n   * Direction of the last pane switch. `null` while untouched, so opening the picker does not\n   * animate.\n   */\n  protected paneNav = signal<'forward' | 'backward' | null>(null);\n\n  private paneAdvanceSpent = signal(false);\n\n  constructor() {\n    effect(() => {\n      if (this.rangeInput.pickerOpen()) {\n        this.activePane.set('dates');\n        this.paneNav.set(null);\n        this.paneAdvanceSpent.set(false);\n      }\n    });\n  }\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.rangeInput.clearRange();\n  }\n\n  /**\n   * Completing the two days carries the tabs on to the times pane. Once only: after that the tabs\n   * stay where they are put.\n   */\n  protected handleRangeSelect(range: { start: Date | null; end: Date | null }) {\n    this.rangeInput.selectCalendarRange(range);\n\n    if (range.start === null || range.end === null || this.paneAdvanceSpent()) {\n      return;\n    }\n\n    this.paneAdvanceSpent.set(true);\n    this.showPane('times');\n  }\n\n  protected setActivePane(pane: unknown) {\n    this.paneAdvanceSpent.set(true);\n    this.showPane(PANE_ORDER.find((candidate) => candidate === pane) ?? 'dates');\n  }\n\n  public focus(options?: FocusOptions) {\n    this.rangeInput.focus(options);\n  }\n\n  private showPane(next: DateTimeRangePane) {\n    const current = this.activePane();\n\n    if (next === current) {\n      return;\n    }\n\n    this.paneNav.set(PANE_ORDER.indexOf(next) > PANE_ORDER.indexOf(current) ? 'forward' : 'backward');\n    this.activePane.set(next);\n  }\n}\n","<input\n  [attr.aria-label]=\"resolvedStartAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-date-time-range-input-field\"\n  etDateTimeRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"start\"\n/>\n\n<span class=\"et-date-time-range-input-separator\" aria-hidden=\"true\">–</span>\n\n<input\n  [attr.aria-label]=\"resolvedEndAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-date-time-range-input-field\"\n  etDateTimeRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"end\"\n/>\n\n@if (localReadingText(); as reading) {\n  <span [id]=\"rangeInput.localReadingId()\" class=\"et-date-time-range-input-local-reading\">{{ reading }}</span>\n}\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-calendar\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <div class=\"et-date-range-presets-layout\">\n      @if (rangeInput.presetList.options().length > 0) {\n        <et-date-range-presets\n          [options]=\"rangeInput.presetList.options()\"\n          (presetSelect)=\"rangeInput.selectPreset($event)\"\n        />\n      }\n\n      <div class=\"et-date-time-range-input-panel\">\n        <div class=\"et-date-time-range-input-panel-tabs\">\n          <et-segmented-button-group\n            [value]=\"activePane()\"\n            [aria-label]=\"dateTimeLabels().paneSwitch\"\n            (valueChange)=\"setActivePane($event)\"\n          >\n            <et-segmented-button value=\"dates\">{{ resolvedDatesTabLabel() }}</et-segmented-button>\n            <et-segmented-button value=\"times\">{{ resolvedTimesTabLabel() }}</et-segmented-button>\n          </et-segmented-button-group>\n        </div>\n\n        <div\n          [attr.data-active-pane]=\"activePane()\"\n          [attr.data-nav]=\"paneNav()\"\n          class=\"et-date-time-range-input-panel-panes\"\n          etDateTimePickerPanes\n        >\n          <et-calendar\n            [rangeValue]=\"rangeInput.pickerDateRange()\"\n            [min]=\"rangeInput.minDate()\"\n            [max]=\"rangeInput.maxDate()\"\n            [dateFilter]=\"rangeInput.dateFilter()\"\n            [startAt]=\"rangeInput.startAt()\"\n            [startView]=\"rangeInput.startView()\"\n            [dateClass]=\"rangeInput.dateClass()\"\n            [weekNumbers]=\"rangeInput.weekNumbers()\"\n            [locale]=\"rangeInput.effectiveLocale()\"\n            (rangeValueChange)=\"handleRangeSelect($event)\"\n            mode=\"range\"\n          />\n\n          <et-time-picker\n            [rangeValue]=\"rangeInput.pickerTimeRange()\"\n            [format]=\"rangeInput.effectiveDisplayFormat()\"\n            [locale]=\"rangeInput.effectiveLocale()\"\n            [minuteStep]=\"minuteStep()\"\n            [secondStep]=\"secondStep()\"\n            [min]=\"rangeInput.minTime()\"\n            [max]=\"rangeInput.maxTime()\"\n            [timeFilter]=\"rangeInput.timeFilter()\"\n            [startLabel]=\"startTimeLabel()\"\n            [endLabel]=\"endTimeLabel()\"\n            (timeSelect)=\"rangeInput.selectTime($event.side, $event.time)\"\n            mode=\"range\"\n          />\n        </div>\n      </div>\n    </div>\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { DateTimeRangeInputComponent } from './date-time-range-input.component';\nimport { DateTimeRangeInputDirective, DateTimeRangeInputFieldDirective } from './headless';\n\nexport const DATE_TIME_RANGE_INPUT_IMPORTS = [\n  DateTimeRangeInputComponent,\n  DateTimeRangeInputDirective,\n  DateTimeRangeInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","import { inject } from '@angular/core';\nimport { FieldContext, LogicFn, validate, ValidationError } from '@angular/forms/signals';\nimport { format, startOfDay } from 'date-fns';\nimport { CalendarPrecision, startOfCalendarUnit } from '../../calendar/headless';\nimport { DATE_FORMAT, TIME_FORMAT } from './date-time-formats';\nimport { DateRangeValue } from './internals/date-range-picker-input.directive';\nimport { parseDateValue } from './internals/date-value';\nimport { displayFormatForPrecision } from './internals/precision-format';\n\ntype RangeFieldPath = Parameters<typeof validate<DateRangeValue>>[0];\n\ntype RangeBound = Date | null | LogicFn<DateRangeValue, Date | null>;\n\nexport type RangeOrderOptions = {\n  /**\n   * date-fns format of the two wire strings - the control's `valueFormat`. Defaults to the\n   * `DATE_FORMAT` token (`TIME_FORMAT` for {@link timeRangeOrder}), the same default the control uses.\n   */\n  valueFormat?: string;\n  /** Also fail while both ends are equal. @default false */\n  strict?: boolean;\n  /** Overrides the default \"The start must be before the end\" message. */\n  message?: string;\n};\n\nexport type DateRangeBoundsOptions = {\n  /** The earliest date either end may name, or a function returning it. */\n  min?: RangeBound;\n  /** The latest date either end may name, or a function returning it. */\n  max?: RangeBound;\n  /** date-fns format of the two wire strings. Defaults to the `DATE_FORMAT` token. */\n  valueFormat?: string;\n  /** Overrides the default \"Choose dates on or after …\" / \"… on or before …\" message. */\n  message?: string;\n};\n\nexport type DateOnlyRangeBoundsOptions = DateRangeBoundsOptions & {\n  /**\n   * The unit both ends and the bounds are compared in - the control's `precision`. At `'day'` a\n   * `min` of \"now\" still admits today.\n   * @default 'day'\n   */\n  precision?: CalendarPrecision;\n};\n\nexport type RangeOrderError = ValidationError & { kind: 'rangeOrder' };\n\nexport type RangeMinError = ValidationError & { kind: 'rangeMin'; min: Date };\n\nexport type RangeMaxError = ValidationError & { kind: 'rangeMax'; max: Date };\n\nconst parseSide = (value: string | null, valueFormat: string) =>\n  value === null ? null : parseDateValue(value, { format: valueFormat, referenceDate: startOfDay(new Date()) });\n\ntype RangeOrderConfig = { path: RangeFieldPath; valueFormat: string; options: RangeOrderOptions };\n\nconst rangeOrder = ({ path, valueFormat, options: { strict, message } }: RangeOrderConfig) =>\n  validate(path, ({ value }): RangeOrderError | undefined => {\n    const start = parseSide(value().start, valueFormat);\n    const end = parseSide(value().end, valueFormat);\n\n    if (start === null || end === null) return undefined;\n\n    const outOfOrder = strict ? start.getTime() >= end.getTime() : start.getTime() > end.getTime();\n\n    return outOfOrder ? { kind: 'rangeOrder', message: message ?? 'The start must be before the end' } : undefined;\n  });\n\n/**\n * Signal-forms validator for `et-date-range-input` and `et-date-time-range-input`: fails the range\n * while its start lies after its end. Neither control reorders the two ends itself.\n *\n * Passes while either end is empty or unparseable; pair it with `required()` on the child paths.\n *\n * ```ts\n * form(model, (s) => {\n *   dateRangeOrder(s.stay, { valueFormat: 'yyyy-MM-dd' });\n * });\n * ```\n */\nexport const dateRangeOrder = (path: RangeFieldPath, options: RangeOrderOptions = {}) =>\n  rangeOrder({ path, valueFormat: options.valueFormat ?? inject(DATE_FORMAT), options });\n\n/**\n * Signal-forms validator for `et-time-range-input`: fails the range while its start time lies after\n * its end time. Same contract as {@link dateRangeOrder}, read against the `TIME_FORMAT` token.\n *\n * ```ts\n * form(model, (s) => {\n *   timeRangeOrder(s.openingHours, { strict: true });\n * });\n * ```\n */\nexport const timeRangeOrder = (path: RangeFieldPath, options: RangeOrderOptions = {}) =>\n  rangeOrder({ path, valueFormat: options.valueFormat ?? inject(TIME_FORMAT), options });\n\ntype RangeBoundsConfig = {\n  path: RangeFieldPath;\n  valueFormat: string;\n  options: DateRangeBoundsOptions;\n  unit: (date: Date) => Date;\n  label: string;\n};\n\nconst resolveBound = (bound: RangeBound | undefined, ctx: FieldContext<DateRangeValue>) =>\n  typeof bound === 'function' ? bound(ctx) : (bound ?? null);\n\nconst rangeBounds = ({ path, valueFormat, options, unit, label }: RangeBoundsConfig) =>\n  validate(path, (ctx): RangeMinError | RangeMaxError | undefined => {\n    const sides = [ctx.value().start, ctx.value().end]\n      .map((side) => parseSide(side, valueFormat))\n      .filter((side) => side !== null)\n      .map((side) => unit(side).getTime());\n\n    const min = resolveBound(options.min, ctx);\n    const max = resolveBound(options.max, ctx);\n\n    if (min !== null && sides.some((side) => side < unit(min).getTime())) {\n      return { kind: 'rangeMin', min, message: options.message ?? `Choose dates on or after ${format(min, label)}` };\n    }\n\n    if (max !== null && sides.some((side) => side > unit(max).getTime())) {\n      return { kind: 'rangeMax', max, message: options.message ?? `Choose dates on or before ${format(max, label)}` };\n    }\n\n    return undefined;\n  });\n\n/**\n * Signal-forms validator for `et-date-range-input`: fails the range while either end lies before\n * `min` or after `max`, compared in whole `precision` units. The control's `minDate`/`maxDate` only\n * shape the picker, so a typed or patched value needs this to be rejected.\n *\n * Reports `kind: 'rangeMin'` (with `min`) or `kind: 'rangeMax'` (with `max`), so a\n * custom error resolver can format the bound itself. An empty end is skipped.\n *\n * ```ts\n * form(model, (s) => {\n *   dateRangeBounds(s.stay, { min: new Date(), valueFormat: 'yyyy-MM-dd' });\n * });\n * ```\n */\nexport const dateRangeBounds = (path: RangeFieldPath, options: DateOnlyRangeBoundsOptions) => {\n  const precision = options.precision ?? 'day';\n\n  rangeBounds({\n    path,\n    valueFormat: options.valueFormat ?? inject(DATE_FORMAT),\n    options,\n    unit: (date) => startOfCalendarUnit(date, precision),\n    label: displayFormatForPrecision(precision, null),\n  });\n};\n\n/**\n * Signal-forms validator for `et-date-time-range-input`: fails the range while either end lies\n * before `min` or after `max`, compared to the millisecond. Same contract as {@link dateRangeBounds}.\n *\n * ```ts\n * form(model, (s) => {\n *   dateTimeRangeBounds(s.slot, { min: () => new Date() });\n * });\n * ```\n */\nexport const dateTimeRangeBounds = (path: RangeFieldPath, options: DateRangeBoundsOptions) =>\n  rangeBounds({\n    path,\n    valueFormat: options.valueFormat ?? inject(DATE_FORMAT),\n    options,\n    unit: (date) => date,\n    label: 'Pp',\n  });\n","// codes 3050-3059 (inside the shared date & time inputs block 3000-3099)\nexport const DURATION_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_DURATION_INPUT: 3050,\n} as const;\n","export type DurationUnit = 'h' | 'm' | 's' | 'ms';\n\nexport type DurationSegment = {\n  unit: DurationUnit;\n  /** The number of characters the segment occupies in the display (e.g. 2 for `mm`). */\n  width: number;\n};\n\nexport type DurationFormatSpec = {\n  segments: DurationSegment[];\n  /** The literal text between consecutive segments - `separators.length === segments.length - 1`. */\n  separators: string[];\n};\n\n/** Milliseconds in one unit. */\nexport const UNIT_MS: Record<DurationUnit, number> = {\n  h: 3_600_000,\n  m: 60_000,\n  s: 1_000,\n  ms: 1,\n};\n\nconst TOKEN_UNIT: Record<string, DurationUnit> = { h: 'h', m: 'm', s: 's', S: 'ms' };\n\n/**\n * Compiles a duration format string into a segment spec. Recognized tokens are runs of\n * `h` (hours), `m` (minutes), `s` (seconds) and `S` (milliseconds); any other characters\n * are separators. E.g. `'hh:mm:ss.SSS'`, `'mm:ss'`, `'h m'`.\n */\nexport const deriveDurationFormatSpec = (format: string): DurationFormatSpec => {\n  const segments: DurationSegment[] = [];\n  const separators: string[] = [];\n  let currentSeparator = '';\n  let index = 0;\n\n  while (index < format.length) {\n    const char = format.charAt(index);\n    const unit = TOKEN_UNIT[char];\n\n    if (unit) {\n      let width = 0;\n\n      while (index < format.length && format[index] === char) {\n        width += 1;\n        index += 1;\n      }\n\n      if (segments.length) {\n        separators.push(currentSeparator);\n      }\n\n      currentSeparator = '';\n      segments.push({ unit, width });\n    } else {\n      currentSeparator += char;\n      index += 1;\n    }\n  }\n\n  return { segments, separators };\n};\n\nconst splitUnits = (ms: number, spec: DurationFormatSpec): Record<DurationUnit, number> => {\n  const result: Record<DurationUnit, number> = { h: 0, m: 0, s: 0, ms: 0 };\n  let remaining = Math.max(0, Math.round(ms));\n\n  for (const segment of spec.segments) {\n    const scale = UNIT_MS[segment.unit];\n\n    result[segment.unit] = Math.floor(remaining / scale);\n    remaining -= result[segment.unit] * scale;\n  }\n\n  return result;\n};\n\n/** Formats a millisecond duration into the spec's display string. `null` renders as empty. */\nexport const formatDuration = (ms: number | null, spec: DurationFormatSpec) => {\n  if (ms === null || Number.isNaN(ms)) {\n    return '';\n  }\n\n  const values = splitUnits(ms, spec);\n\n  return spec.segments\n    .map((segment, position) => {\n      const text = String(values[segment.unit]).padStart(segment.width, '0');\n      const separator = position < spec.separators.length ? spec.separators[position] : '';\n\n      return text + separator;\n    })\n    .join('');\n};\n\n/**\n * Parses typed duration text against the spec. Accepts the segment separators (`1:30`) and,\n * for separator-less digit runs, consumes digits from the right so a short entry fills the\n * smallest units first (`130` → `1:30` under `mm:ss`). Returns total milliseconds, or `null`.\n */\nexport const parseDuration = (value: string, spec: DurationFormatSpec): number | null => {\n  const text = value.trim();\n\n  if (!text || !spec.segments.length) {\n    return null;\n  }\n\n  const groups = text.split(/\\D+/).filter((group) => group.length > 0);\n\n  if (!groups.length || !/^[\\d\\s:.,hHmMsS]+$/.test(text)) {\n    return null;\n  }\n\n  let unitValues: number[];\n\n  if (groups.length > 1) {\n    if (groups.length > spec.segments.length) {\n      return null;\n    }\n\n    const offset = spec.segments.length - groups.length;\n\n    unitValues = spec.segments.map((_, position) => (position < offset ? 0 : Number(groups[position - offset])));\n  } else {\n    let digits = groups[0] ?? '';\n\n    unitValues = spec.segments\n      .map((segment) => segment.width)\n      .reverse()\n      .map((width) => {\n        const take = Math.min(width, digits.length);\n        const slice = digits.slice(digits.length - take);\n\n        digits = digits.slice(0, digits.length - take);\n\n        return slice.length ? Number(slice) : 0;\n      })\n      .reverse();\n\n    if (digits.length) {\n      unitValues[0] = Number(digits + String(unitValues[0]).padStart(spec.segments[0]?.width ?? 0, '0'));\n    }\n  }\n\n  let total = 0;\n\n  spec.segments.forEach((segment, position) => {\n    total += (unitValues[position] ?? 0) * UNIT_MS[segment.unit];\n  });\n\n  return total;\n};\n","import { DestroyRef, Directive, booleanAttribute, computed, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../../form-field/headless';\nimport { deriveDurationFormatSpec, formatDuration, parseDuration } from './internals/duration-format';\nimport { DurationInputFieldDirective } from './duration-input-field.directive';\nimport { injectFormFieldLabels } from '../../../../forms/form-field/form-field-labels';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport { mountTextFieldShellStyles } from '../../../form-field/form-field-text-shell-styles.component';\n\n/**\n * A duration form control whose value is a **total elapsed time in milliseconds**\n * (`number | null`), not a `Date`. Typed entry parses leniently on blur/Enter against a\n * configurable segment layout (`130` → `1:30` under `mm:ss`).\n */\n@Directive({\n  selector: '[etDurationInput]',\n  exportAs: 'etDurationInput',\n  host: {\n    '[attr.data-mixed]': 'mixed() || null',\n  },\n})\nexport class DurationInputDirective\n  extends AccessibleNameControlDirective\n  implements FormValueControl<number | null>, FormFieldControl\n{\n  private dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  /** Total elapsed milliseconds, or `null` while empty/unparseable. */\n  public value = model<number | null>(null);\n  /** View state for a field whose source values disagree (bulk edit). The raw form value stays untouched. */\n  public mixed = model(false);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n  public placeholder = input('');\n  /** Field placeholder shown while `mixed` is set. Presentation only - it never enters the form value. */\n  public mixedLabel = input<string | null>(null);\n\n  /** Message the form field shows when typed text can't be parsed as a duration. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /** The segment layout: `h`/`m`/`s`/`S` token runs plus separators. @default `'mm:ss'` */\n  public durationFormat = input('mm:ss');\n\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidDuration);\n\n  public spec = computed(() => deriveDurationFormatSpec(this.durationFormat()));\n\n  /** The committed value formatted for display - masked (empty) while mixed. */\n  public displayValue = computed(() => (this.mixed() ? '' : formatDuration(this.value(), this.spec())));\n\n  /** The raw text currently in the field (tracked so unparseable input survives). */\n  public inputText = signal('');\n\n  /** Set when the last commit could not be parsed - the raw text is kept visible. */\n  public parseError = signal(false);\n\n  public focused = signal(false);\n\n  public shouldDisplayError = computed(() => this.touched() && (this.invalid() || this.parseError()));\n  public hasValue = computed(() => this.mixed() || this.value() !== null || this.inputText().trim().length > 0);\n\n  /** What the field renders as its placeholder - `mixedLabel` while mixed masks the value. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DURATION_INPUT);\n\n  /** @internal */\n  public registeredField = signal<DurationInputFieldDirective | null>(null);\n\n  constructor() {\n    super();\n\n    mountTextFieldShellStyles();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.registeredField()?.focus(options);\n  }\n\n  /** Clears the value and any uncommitted field text - wired to the styled input's clear button. */\n  public clearValue() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    this.value.set(null);\n    this.mixed.set(false);\n    this.inputText.set('');\n    this.parseError.set(false);\n\n    // the field only mirrors state while unfocused, and a clear happens while focused\n    const field = this.registeredField();\n\n    if (field) {\n      field.elementRef.nativeElement.value = '';\n    }\n  }\n\n  /** Parses typed text and commits the resulting value (or flags a parse error). */\n  public commitInput(rawValue: string) {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    const trimmed = rawValue.trim();\n\n    this.inputText.set(rawValue);\n\n    if (!trimmed) {\n      this.parseError.set(false);\n\n      if (!this.mixed()) {\n        this.value.set(null);\n      }\n\n      return;\n    }\n\n    const parsed = parseDuration(trimmed, this.spec());\n\n    if (parsed === null) {\n      this.parseError.set(true);\n\n      if (!this.mixed() && this.value() !== null) {\n        this.value.set(null);\n      }\n\n      return;\n    }\n\n    this.parseError.set(false);\n    this.value.set(parsed);\n    this.mixed.set(false);\n  }\n}\n","import { Directive, ElementRef, effect, inject } from '@angular/core';\nimport { registerSingleton } from '../../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { DURATION_INPUT_ERROR_CODES } from '../duration-input-errors';\nimport { DurationInputDirective } from './duration-input.directive';\n\n/**\n * The text field of a duration input: shows the committed value in the format layout,\n * commits typed text (lenient parse) on blur/Enter, and keeps unparseable text visible.\n */\n@Directive({\n  selector: 'input[etDurationInputField]',\n  exportAs: 'etDurationInputField',\n  host: {\n    type: 'text',\n    inputmode: 'numeric',\n    autocomplete: 'off',\n    '[attr.placeholder]': 'durationInput?.effectivePlaceholder() || null',\n    '[attr.aria-required]': 'durationInput?.required() || null',\n    '[attr.aria-invalid]': 'durationInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'durationInput?.describedBy() || null',\n    '[attr.aria-label]': 'durationInput?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'durationInput?.labelId() || null',\n    '[disabled]': 'durationInput?.disabled() || false',\n    '[readOnly]': 'durationInput?.readonly() || false',\n    '(input)': 'handleInput()',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class DurationInputFieldDirective {\n  protected durationInput = inject(DurationInputDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  constructor() {\n    registerSingleton(this.durationInput?.registeredField, this);\n\n    // mid-typing rewrites would fight the caret, so the element only mirrors while unfocused\n    effect(() => {\n      const durationInput = this.durationInput;\n\n      if (!durationInput) {\n        return;\n      }\n\n      const text = durationInput.parseError() ? durationInput.inputText() : durationInput.displayValue();\n\n      if (!durationInput.focused() && this.elementRef.nativeElement.value !== text) {\n        this.elementRef.nativeElement.value = text;\n      }\n    });\n\n    if (ngDevMode && !this.durationInput) {\n      throw new RuntimeError(\n        DURATION_INPUT_ERROR_CODES.FIELD_OUTSIDE_DURATION_INPUT,\n        '[DurationInputFieldDirective] etDurationInputField must be placed inside an [etDurationInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  protected handleInput() {\n    this.durationInput?.inputText.set(this.elementRef.nativeElement.value);\n  }\n\n  protected handleFocus() {\n    this.durationInput?.focused.set(true);\n  }\n\n  protected handleBlur() {\n    const durationInput = this.durationInput;\n\n    if (!durationInput) {\n      return;\n    }\n\n    durationInput.commitInput(this.elementRef.nativeElement.value);\n    durationInput.focused.set(false);\n    durationInput.touched.set(true);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const durationInput = this.durationInput;\n\n    if (!durationInput || event.key !== 'Enter') {\n      return;\n    }\n\n    durationInput.commitInput(this.elementRef.nativeElement.value);\n\n    // the display effect only runs unfocused, so a successful commit reformats in place here\n    if (!durationInput.parseError()) {\n      this.elementRef.nativeElement.value = durationInput.displayValue();\n    }\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { DurationInputDirective, DurationInputFieldDirective } from './headless';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-duration-input',\n  templateUrl: './duration-input.component.html',\n  styleUrl: './duration-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DurationInputFieldDirective, IconDirective],\n  providers: [provideIcons(TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: DurationInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'parseErrorMessage',\n        'durationFormat',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-duration-input',\n    '(click)': 'durationInput.activate()',\n  },\n})\nexport class DurationInputComponent {\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected durationInput = inject(DurationInputDirective);\n\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.durationInput.hasValue() &&\n      this.durationInput.focused() &&\n      !this.durationInput.disabled() &&\n      !this.durationInput.readonly(),\n  );\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the host's activate-on-click handling\n    event.stopPropagation();\n    this.durationInput.clearValue();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.durationInput.focus(options);\n  }\n}\n","<input class=\"et-duration-input-field\" etDurationInputField />\n\n@if (showClear()) {\n  <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n       button before the click could land -->\n  <button\n    [attr.aria-label]=\"resolvedClearLabel()\"\n    (click)=\"handleClearClick($event)\"\n    (mousedown)=\"$event.preventDefault()\"\n    class=\"et-duration-input-clear\"\n    animate.enter=\"et-duration-input-clear--enter\"\n    animate.leave=\"et-duration-input-clear--leave\"\n    tabindex=\"-1\"\n    type=\"button\"\n  >\n    <i etIcon=\"et-times\"></i>\n  </button>\n}\n","import { DurationInputComponent } from './duration-input.component';\nimport { DurationInputDirective, DurationInputFieldDirective } from './headless';\n\nexport const DURATION_INPUT_IMPORTS = [\n  DurationInputComponent,\n  DurationInputDirective,\n  DurationInputFieldDirective,\n] as const;\n","// codes 3030-3039 (inside the shared date & time inputs block 3000-3099)\nexport const TIME_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_TIME_INPUT: 3030,\n} as const;\n","import { Directive, computed, input, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { startOfDay } from 'date-fns';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectTimeFormat } from '../../date-time-formats';\nimport { DatePickerInputDirective } from '../../internals/date-picker-input.directive';\nimport { formatDateValue, parseDateValue } from '../../internals/date-value';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\nimport { parseTimeText } from '../../internals/time-parse';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\n\n/**\n * A time form control with a `string | null` value (a date-fns `valueFormat`\n * wire string, `HH:mm` by default). Typed entry parses leniently on blur/Enter\n * (`930` → 09:30); the anchored picker overlay hosts a time picker and stays\n * open across part picks.\n */\n@Directive({\n  selector: '[etTimeInput]',\n  exportAs: 'etTimeInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: TimeInputDirective }],\n})\nexport class TimeInputDirective extends DatePickerInputDirective implements FormValueControl<string | null> {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectTimeFormat();\n\n  /** Message the form field shows when typed text can't be parsed as a time. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /** date-fns format shown in (and parsed from) the field. Locale-aware by default. */\n  public displayFormat = input('p');\n\n  /**\n   * Forwarded to the picker's time picker. (`min`/`max` are reserved by signal forms.)\n   * Only the time of day of `minTime`/`maxTime` is read; `timeFilter` receives the full\n   * candidate timestamp. Bounds shape the picker - validate typed entry with a schema validator.\n   */\n  public minTime = input<Date | null>(null);\n  public maxTime = input<Date | null>(null);\n  public timeFilter = input<((date: Date) => boolean) | null>(null);\n\n  public effectiveDisplayFormat = this.displayFormat;\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidTime);\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.TIME_INPUT);\n\n  // parses fill missing units (the date, unentered seconds) from here instead of \"now\"\n  private referenceDate = startOfDay(new Date());\n\n  /** The current value as a `Date` (what the picker binds to). */\n  public time = computed(() => {\n    if (this.mixed()) {\n      return null;\n    }\n\n    const value = this.value();\n\n    if (value === null) {\n      return null;\n    }\n\n    return parseDateValue(value, {\n      format: this.effectiveValueFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: this.referenceDate,\n    });\n  });\n\n  /** The committed value rendered in `displayFormat`. */\n  public displayValue = computed(() => {\n    const time = this.time();\n\n    if (time === null) {\n      return '';\n    }\n\n    return formatDateValue(time, { format: this.displayFormat(), locale: this.effectiveLocale() }) ?? '';\n  });\n\n  /** @internal A strict parse against `displayFormat`, then a lenient one. */\n  public parseCommitText(raw: string) {\n    return parseTimeText(raw, {\n      format: this.displayFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: this.referenceDate,\n    });\n  }\n\n  /** @internal */\n  public writeCommitted(parsed: Date) {\n    this.value.set(formatDateValue(parsed, { format: this.effectiveValueFormat(), locale: this.effectiveLocale() }));\n    this.mixed.set(false);\n  }\n\n  /** Commits a picker-selected time. The picker stays open. */\n  public selectTime(time: Date | null) {\n    if (time === null || !this.interactive()) {\n      return;\n    }\n\n    this.inputText.set('');\n    this.parseError.set(false);\n    this.writeCommitted(time);\n    this.touched.set(true);\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../../form-field/headless';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DatePickerInputFieldDirective } from '../../internals/date-picker-input-field.directive';\nimport { TIME_INPUT_ERROR_CODES } from '../time-input-errors';\nimport { TimeInputDirective } from './time-input.directive';\n\n/**\n * The text field of a time input: shows the committed value in the display\n * format, commits typed text (strict-then-lenient) on blur/Enter, keeps\n * unparseable text visible, and opens the picker on Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etTimeInputField]',\n  exportAs: 'etTimeInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: TimeInputFieldDirective }],\n})\nexport class TimeInputFieldDirective extends DatePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected pickerInput = inject(TimeInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    registerSingleton(this.pickerInput?.registeredField, this);\n\n    if (ngDevMode && !this.pickerInput) {\n      throw new RuntimeError(\n        TIME_INPUT_ERROR_CODES.FIELD_OUTSIDE_TIME_INPUT,\n        '[TimeInputFieldDirective] etTimeInputField must be placed inside an [etTimeInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { positiveIntegerAttribute } from '../../../internals/number-attributes';\nimport { CLOCK_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { TIME_PICKER_IMPORTS } from '../../../time-picker';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { TimeInputDirective, TimeInputFieldDirective } from './headless';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-time-input',\n  templateUrl: './time-input.component.html',\n  styleUrl: './time-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...TIME_PICKER_IMPORTS,\n    TimeInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CLOCK_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: TimeInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'locale',\n        'mask',\n        'minTime',\n        'maxTime',\n        'timeFilter',\n        'pickerOpen',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-time-input',\n  },\n})\nexport class TimeInputComponent {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected timeInput = inject(TimeInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n  public minuteStep = input(5, { transform: positiveIntegerAttribute });\n  public secondStep = input(1, { transform: positiveIntegerAttribute });\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openTimePicker,\n  );\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseTime);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.timeInput.hasValue() &&\n      (this.timeInput.focused() || this.timeInput.pickerOpen()) &&\n      this.timeInput.interactive(),\n  );\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.timeInput.clearValue();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.timeInput.focus(options);\n  }\n}\n","<input\n  [etInputMask]=\"timeInput.maskPattern()\"\n  class=\"et-time-input-field\"\n  etTimeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n/>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-clock\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <et-time-picker\n      [value]=\"timeInput.time()\"\n      [format]=\"timeInput.displayFormat()\"\n      [locale]=\"timeInput.effectiveLocale()\"\n      [minuteStep]=\"minuteStep()\"\n      [secondStep]=\"secondStep()\"\n      [min]=\"timeInput.minTime()\"\n      [max]=\"timeInput.maxTime()\"\n      [timeFilter]=\"timeInput.timeFilter()\"\n      (valueChange)=\"timeInput.selectTime($event)\"\n    />\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { TimeInputDirective, TimeInputFieldDirective } from './headless';\nimport { TimeInputComponent } from './time-input.component';\n\nexport const TIME_INPUT_IMPORTS = [\n  TimeInputComponent,\n  TimeInputDirective,\n  TimeInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","// codes 3070-3079 (inside the shared date & time inputs block 3000-3099)\nexport const TIME_RANGE_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_TIME_RANGE_INPUT: 3070,\n  DUPLICATE_FIELD: 3071,\n} as const;\n","import { Directive, computed, input, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { startOfDay } from 'date-fns';\nimport { injectDateTimeLabels } from '../../../../forms/date-time/date-time-labels';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../../form-field/headless';\nimport { injectTimeFormat } from '../../date-time-formats';\nimport {\n  DateRangePickerInputDirective,\n  DateRangeSide,\n  DateRangeValue,\n} from '../../internals/date-range-picker-input.directive';\nimport { parseTimeText } from '../../internals/time-parse';\nimport { DATE_PICKER_HOST } from '../../picker/date-picker-host';\n\nexport type { DateRangeSide as TimeRangeInputSide } from '../../internals/date-range-picker-input.directive';\nexport type { DateRangeValue as TimeRangeValue } from '../../internals/date-range-picker-input.directive';\n\n/**\n * Rejects individual times in the picker. The candidate is the picked time of day, and `side` says\n * which end is being filled.\n */\nexport type TimeRangeTimeFilterFn = (date: Date, side: DateRangeSide) => boolean;\n\n/**\n * A time *range* form control: one registered field-control containing two text inputs that share a\n * single range-mode time picker. The value is `{ start, end }` of `valueFormat` wire strings (`HH:mm`\n * by default); each side parses leniently on blur/Enter (`930` → 09:30), exactly like the single time\n * input.\n *\n * The picker never closes on its own.\n */\n@Directive({\n  selector: '[etTimeRangeInput]',\n  exportAs: 'etTimeRangeInput',\n  providers: [{ provide: DATE_PICKER_HOST, useExisting: TimeRangeInputDirective }],\n})\nexport class TimeRangeInputDirective extends DateRangePickerInputDirective implements FormValueControl<DateRangeValue> {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  public defaultValueFormat = injectTimeFormat();\n\n  /** Message the form field shows when either side's typed text can't be parsed as a time. */\n  public parseErrorMessage = input<string | null>(null);\n\n  /** date-fns format shown in (and parsed from) both fields. Locale-aware by default. */\n  public displayFormat = input('p');\n\n  /**\n   * Forwarded to the picker's time picker. (`min`/`max` are reserved by signal forms.) Only the time\n   * of day of `minTime`/`maxTime` is read; `timeFilter` receives the candidate together with the side\n   * it belongs to. Bounds shape the picker - validate typed entry with a schema validator.\n   */\n  public minTime = input<Date | null>(null);\n  public maxTime = input<Date | null>(null);\n  public timeFilter = input<TimeRangeTimeFilterFn | null>(null);\n\n  public effectiveDisplayFormat = this.displayFormat;\n\n  public resolvedParseErrorMessage = computed(() => this.parseErrorMessage() ?? this.dateTimeLabels().invalidTimeRange);\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.TIME_RANGE_INPUT);\n\n  // parses fill the missing date (and unentered seconds) from here instead of \"now\", so both ends\n  // land on the same day and a consumer `timeFilter` can compare them\n  private referenceDate = startOfDay(new Date());\n\n  /** Commits a picker-selected time onto one end. The picker stays open. */\n  public selectTime(side: DateRangeSide, time: Date | null) {\n    if (time === null || !this.interactive()) {\n      return;\n    }\n\n    this.commitSideDate(side, time);\n    this.touched.set(true);\n  }\n\n  public parseSideCommit(raw: string) {\n    return parseTimeText(raw, {\n      format: this.effectiveDisplayFormat(),\n      locale: this.effectiveLocale(),\n      referenceDate: this.referenceDate,\n    });\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { INPUT_MASK_HOST } from '../../../masked-input/headless/input-mask-host';\nimport { DateRangePickerInputFieldDirective } from '../../internals/date-range-picker-input-field.directive';\nimport { TIME_RANGE_INPUT_ERROR_CODES } from '../time-range-input-errors';\nimport { TimeRangeInputDirective } from './time-range-input.directive';\n\n/**\n * One side of a time range input: shows the committed side value in the display format, commits typed\n * text (strict-then-lenient) on blur/Enter, keeps unparseable text visible, and opens the picker on\n * Alt+ArrowDown.\n */\n@Directive({\n  selector: 'input[etTimeRangeInputField]',\n  exportAs: 'etTimeRangeInputField',\n  providers: [{ provide: INPUT_MASK_HOST, useExisting: TimeRangeInputFieldDirective }],\n})\nexport class TimeRangeInputFieldDirective extends DateRangePickerInputFieldDirective {\n  // eslint-disable-next-line ethlete/inject-member-accessibility -- referenced from the base class's host bindings\n  protected rangeInput = inject(TimeRangeInputDirective, { optional: true });\n\n  constructor() {\n    super();\n\n    if (ngDevMode && !this.rangeInput) {\n      throw new RuntimeError(\n        TIME_RANGE_INPUT_ERROR_CODES.FIELD_OUTSIDE_TIME_RANGE_INPUT,\n        '[TimeRangeInputFieldDirective] etTimeRangeInputField must be placed inside an [etTimeRangeInput] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n\n  /** @internal */\n  public duplicateFieldError(side: 'start' | 'end') {\n    return new RuntimeError(\n      TIME_RANGE_INPUT_ERROR_CODES.DUPLICATE_FIELD,\n      `[TimeRangeInputFieldDirective] An [etTimeRangeInput] accepts only one etTimeRangeInputField for its \"${side}\" side.`,\n      { element: this.elementRef.nativeElement },\n    );\n  }\n}\n","import { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { positiveIntegerAttribute } from '../../../internals/number-attributes';\nimport { injectDateTimeLabels } from '../../../forms/date-time/date-time-labels';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { CLOCK_ICON, IconDirective, TIMES_ICON, provideIcons } from '../../../icon';\nimport { TIME_PICKER_IMPORTS } from '../../../time-picker';\nimport { ControlSuffixDirective } from '../../form-field/partials';\nimport { InputMaskDirective } from '../../masked-input/headless';\nimport { DatePickerPanelComponent } from '../date-picker-panel.component';\nimport { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { TimeRangeInputDirective, TimeRangeInputFieldDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-time-range-input',\n  templateUrl: './time-range-input.component.html',\n  styleUrls: ['../range-input-shell.css', './time-range-input.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    ...TIME_PICKER_IMPORTS,\n    TimeRangeInputFieldDirective,\n    DatePickerSurfaceDirective,\n    DatePickerTriggerDirective,\n    DatePickerPanelComponent,\n    IconDirective,\n    InputMaskDirective,\n  ],\n  providers: [provideIcons(CLOCK_ICON, TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: TimeRangeInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'startPlaceholder',\n        'endPlaceholder',\n        'parseErrorMessage',\n        'valueFormat',\n        'displayFormat',\n        'locale',\n        'mask',\n        'minTime',\n        'maxTime',\n        'timeFilter',\n        'pickerOpen',\n        'startAriaLabel',\n        'endAriaLabel',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'pickerOpenChange'],\n    },\n  ],\n  host: {\n    class: 'et-time-range-input',\n    role: 'group',\n    '[attr.aria-label]': 'rangeInput.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'rangeInput.labelId()',\n  },\n})\nexport class TimeRangeInputComponent {\n  private dateTimeLabels = injectDateTimeLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected rangeInput = inject(TimeRangeInputDirective);\n\n  public pickerTriggerLabel = input<string | null>(null);\n  public dialogLabel = input<string | null>(null);\n  public minuteStep = input(5, { transform: positiveIntegerAttribute });\n  public secondStep = input(1, { transform: positiveIntegerAttribute });\n  /** The time picker's two ends, on the control that switches between them. */\n  public startTimeLabel = input<string | null>(null);\n  public endTimeLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a value or pending text is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  protected resolvedStartAriaLabel = computed(\n    () => this.rangeInput.startAriaLabel() ?? this.dateTimeLabels().startTime,\n  );\n\n  protected resolvedEndAriaLabel = computed(() => this.rangeInput.endAriaLabel() ?? this.dateTimeLabels().endTime);\n\n  protected resolvedPickerTriggerLabel = computed(\n    () => this.pickerTriggerLabel() ?? this.dateTimeLabels().openTimePicker,\n  );\n\n  protected resolvedDialogLabel = computed(() => this.dialogLabel() ?? this.dateTimeLabels().chooseTimeRange);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.rangeInput.hasValue() &&\n      (this.rangeInput.focused() || this.rangeInput.pickerOpen()) &&\n      this.rangeInput.interactive(),\n  );\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.rangeInput.clearRange();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.rangeInput.focus(options);\n  }\n}\n","<input\n  [attr.aria-label]=\"resolvedStartAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-time-range-input-field\"\n  etTimeRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"start\"\n/>\n\n<span class=\"et-time-range-input-separator\" aria-hidden=\"true\">–</span>\n\n<input\n  [attr.aria-label]=\"resolvedEndAriaLabel()\"\n  [etInputMask]=\"rangeInput.maskPattern()\"\n  class=\"et-time-range-input-field\"\n  etTimeRangeInputField\n  maskValueMode=\"masked\"\n  placeholderChar=\"_\"\n  side=\"end\"\n/>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- mousedown is prevented so the field keeps focus: its blur would unmount this\n         button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button [attr.aria-label]=\"resolvedPickerTriggerLabel()\" class=\"et-input-picker-trigger\" etDatePickerTrigger>\n    <i etIcon=\"et-clock\"></i>\n  </button>\n</ng-template>\n\n<ng-template etDatePickerSurface>\n  <et-date-picker-panel [dialogLabel]=\"resolvedDialogLabel()\">\n    <et-time-picker\n      [rangeValue]=\"rangeInput.calendarRange()\"\n      [format]=\"rangeInput.effectiveDisplayFormat()\"\n      [locale]=\"rangeInput.effectiveLocale()\"\n      [minuteStep]=\"minuteStep()\"\n      [secondStep]=\"secondStep()\"\n      [min]=\"rangeInput.minTime()\"\n      [max]=\"rangeInput.maxTime()\"\n      [timeFilter]=\"rangeInput.timeFilter()\"\n      [startLabel]=\"startTimeLabel()\"\n      [endLabel]=\"endTimeLabel()\"\n      (timeSelect)=\"rangeInput.selectTime($event.side, $event.time)\"\n      mode=\"range\"\n    />\n  </et-date-picker-panel>\n</ng-template>\n","import { DatePickerSurfaceDirective } from '../picker/date-picker-surface.directive';\nimport { DatePickerTriggerDirective } from '../picker/date-picker-trigger.directive';\nimport { TimeRangeInputDirective, TimeRangeInputFieldDirective } from './headless';\nimport { TimeRangeInputComponent } from './time-range-input.component';\n\nexport const TIME_RANGE_INPUT_IMPORTS = [\n  TimeRangeInputComponent,\n  TimeRangeInputDirective,\n  TimeRangeInputFieldDirective,\n  DatePickerTriggerDirective,\n  DatePickerSurfaceDirective,\n] as const;\n","import { DescriptionComponent } from './description.component';\n\n/** The muted `et-description` block for secondary copy next to a control or a label. */\nexport const DESCRIPTION_IMPORTS = [DescriptionComponent] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the dropzone renders or announces itself: the drop prompt, each entry's actions, and the\n * fallback wording for an upload that failed without saying why.\n *\n * The prompt is also replaceable as content (`<et-dropzone>` projects anything you put inside it), which\n * is the route to take when you want different markup rather than different words.\n */\nexport type DropzoneLabels = {\n  /** The drop-target prompt, shown when nothing is projected into the dropzone. */\n  prompt: string;\n  /** Replaces the prompt while the dropzone is readonly and holds no file. */\n  empty: string;\n  /** The retry action on a failed entry. */\n  retry: string;\n  /** Accessible label prefix for an entry's remove action - the file name is appended. */\n  remove: string;\n  /** Accessible label for the replace action, shown in single-file mode. */\n  replaceFile: string;\n  /** How a failure with no server message is worded: `\"photo.png\" failed to upload.` */\n  uploadFailed: string;\n  /** Announced while uploads are in flight. */\n  uploading: (count: number) => string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_DROPZONE_LABELS: DropzoneLabels = {\n  prompt: 'Drag & drop or click to browse',\n  empty: 'No files',\n  retry: 'Retry',\n  remove: 'Remove',\n  replaceFile: 'Replace file',\n  uploadFailed: 'failed to upload',\n  uploading: (count) => (count === 1 ? 'Uploading 1 file' : `Uploading ${count} files`),\n};\n\nconst DROPZONE_LABELS_DEF = /* @__PURE__ */ defineLabels<DropzoneLabels>('DROPZONE_LABELS', DEFAULT_DROPZONE_LABELS);\n\n/**\n * Localize the dropzone's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_DROPZONE_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideDropzoneLabels({ prompt: 'Datei hierher ziehen oder klicken', retry: 'Erneut versuchen' });\n */\nexport const provideDropzoneLabels = /* @__PURE__ */ toProvideFn(DROPZONE_LABELS_DEF);\nexport const injectDropzoneLabels = /* @__PURE__ */ toInjectFn(DROPZONE_LABELS_DEF);\nexport const DROPZONE_LABELS = /* @__PURE__ */ toToken(DROPZONE_LABELS_DEF);\n","import { randomId } from '@ethlete/core';\nimport { computed, Signal, signal } from '@angular/core';\nimport {\n  AnyDropzoneUploadConfig,\n  DropzoneExistingFileInfo,\n  DropzoneUploadError,\n  DropzoneUploadHandle,\n} from './dropzone-upload';\n\nexport const DROPZONE_ENTRY_STATUSES = {\n  UPLOADING: 'uploading',\n  SUCCESS: 'success',\n  ERROR: 'error',\n  EXISTING: 'existing',\n} as const;\n\nexport type DropzoneEntryStatus = (typeof DROPZONE_ENTRY_STATUSES)[keyof typeof DROPZONE_ENTRY_STATUSES];\n\nexport type DropzoneEntrySource<TValue = unknown> = { type: 'file'; file: File } | { type: 'existing'; value: TValue };\n\nexport type DropzoneEntry<TValue = unknown> = {\n  /** Unique id of this entry. Stable for the lifetime of the entry. */\n  id: string;\n\n  /** What this entry was created from - a picked/dropped file or an existing form control value. */\n  source: DropzoneEntrySource<TValue>;\n\n  /** Human readable name (file name or resolved from the existing value). */\n  name: Signal<string>;\n\n  /** File size in bytes. `null` when unknown. */\n  size: Signal<number | null>;\n\n  /**\n   * Preview URL: a `data:` URL for image files, read asynchronously so it starts as `null`, or the\n   * resolver-provided URL for existing values.\n   */\n  previewUrl: Signal<string | null>;\n\n  status: Signal<DropzoneEntryStatus>;\n\n  /** Upload progress in percent. `null` means indeterminate (or not uploading). */\n  progress: Signal<number | null>;\n\n  /** The upload error, if the last upload attempt failed. */\n  error: Signal<DropzoneUploadError | null>;\n\n  /** The first human readable error message of a failed upload, normalized across query flavors. */\n  errorMessage: Signal<string | null>;\n\n  /** The form control value of this entry. `null` until the upload succeeded. */\n  value: Signal<TValue | null>;\n\n  /** @internal The upload handle driving this entry. `null` for existing entries. */\n  handle: DropzoneUploadHandle<TValue> | null;\n\n  /** @internal Stops reading the preview, called when the entry is disposed. */\n  disposePreview: (() => void) | null;\n};\n\n/** A `data:` URL rather than an object URL: a strict `img-src` rarely allows `blob:`. */\nconst readImagePreview = (file: File) => {\n  const url = signal<string | null>(null);\n\n  if (typeof FileReader === 'undefined') return { url: url.asReadonly(), dispose: () => undefined };\n\n  const reader = new FileReader();\n\n  reader.onload = () => url.set(typeof reader.result === 'string' ? reader.result : null);\n  reader.readAsDataURL(file);\n\n  return {\n    url: url.asReadonly(),\n    dispose: () => {\n      reader.onload = null;\n      if (reader.readyState === FileReader.LOADING) reader.abort();\n      url.set(null);\n    },\n  };\n};\n\nexport type CreateFileDropzoneEntryOptions<TValue> = {\n  file: File;\n  handle: DropzoneUploadHandle<TValue>;\n};\n\nexport const createFileDropzoneEntry = <TValue>(\n  options: CreateFileDropzoneEntryOptions<TValue>,\n): DropzoneEntry<TValue> => {\n  const { file, handle } = options;\n\n  const preview = file.type.startsWith('image/') ? readImagePreview(file) : null;\n\n  const status = computed<DropzoneEntryStatus>(() => {\n    switch (handle.state()) {\n      case 'success':\n        return DROPZONE_ENTRY_STATUSES.SUCCESS;\n      case 'error':\n        return DROPZONE_ENTRY_STATUSES.ERROR;\n      default:\n        return DROPZONE_ENTRY_STATUSES.UPLOADING;\n    }\n  });\n\n  return {\n    id: randomId(),\n    source: { type: 'file', file },\n    name: computed(() => file.name),\n    size: computed(() => file.size),\n    previewUrl: preview?.url ?? computed(() => null),\n    status,\n    progress: handle.progress,\n    error: handle.error,\n    errorMessage: handle.errorMessage,\n    value: handle.value,\n    handle,\n    disposePreview: preview?.dispose ?? null,\n  };\n};\n\nexport type CreateExistingDropzoneEntryOptions<TValue> = {\n  value: TValue;\n  upload: Signal<AnyDropzoneUploadConfig<TValue>>;\n};\n\nexport const createExistingDropzoneEntry = <TValue>(\n  options: CreateExistingDropzoneEntryOptions<TValue>,\n): DropzoneEntry<TValue> => {\n  const { value, upload } = options;\n\n  const info = computed<DropzoneExistingFileInfo>(() => upload().resolveExisting?.(value) ?? {});\n\n  return {\n    id: randomId(),\n    source: { type: 'existing', value },\n    name: computed(() => info().name ?? String(value)),\n    size: computed(() => info().size ?? null),\n    previewUrl: computed(() => info().previewUrl ?? null),\n    status: computed(() => DROPZONE_ENTRY_STATUSES.EXISTING),\n    progress: computed(() => null),\n    error: computed(() => null),\n    errorMessage: computed(() => null),\n    value: computed(() => value),\n    handle: null,\n    disposePreview: null,\n  };\n};\n\n/** Releases all resources held by an entry (preview read, in-flight upload). */\nexport const disposeDropzoneEntry = <TValue>(entry: DropzoneEntry<TValue>) => {\n  entry.disposePreview?.();\n  entry.handle?.dispose();\n};\n\n/** Checks a file against the native `accept` attribute semantics (`.ext`, `type/subtype`, `type/*`). */\nexport const isFileAccepted = (file: File, accept: string) => {\n  const rules = accept\n    .split(',')\n    .map((rule) => rule.trim().toLowerCase())\n    .filter(Boolean);\n\n  if (!rules.length) {\n    return true;\n  }\n\n  const type = file.type.toLowerCase();\n  const name = file.name.toLowerCase();\n\n  return rules.some((rule) => {\n    if (rule.startsWith('.')) {\n      return name.endsWith(rule);\n    }\n\n    if (rule.endsWith('/*')) {\n      return type.startsWith(rule.slice(0, -1));\n    }\n\n    return type === rule;\n  });\n};\n\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/** Formats a byte count as a short human readable string (e.g. `1.5 MB`). */\nexport const formatFileSize = (bytes: number) => {\n  let size = bytes;\n  let unitIndex = 0;\n\n  while (size >= 1024 && unitIndex < FILE_SIZE_UNITS.length - 1) {\n    size /= 1024;\n    unitIndex++;\n  }\n\n  const rounded = unitIndex === 0 ? size : Math.round(size * 10) / 10;\n\n  return `${rounded} ${FILE_SIZE_UNITS[unitIndex]}`;\n};\n","import { Component, ElementRef, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { IconButtonComponent } from '../../button/icon-button.component';\nimport { FILE_ICON, IconDirective, provideIcons, ROTATE_RIGHT_ICON, TIMES_ICON } from '../../icon/headless';\nimport { ProgressBarComponent } from '../../loader/progress-bar/progress-bar.component';\nimport { DropzoneEntry, formatFileSize } from './headless/dropzone-entry';\n\n@Component({\n  selector: 'et-dropzone-item',\n  templateUrl: './dropzone-item.component.html',\n  styleUrl: './dropzone-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent, IconDirective, ProgressBarComponent],\n  providers: [provideIcons(FILE_ICON, ROTATE_RIGHT_ICON, TIMES_ICON)],\n  host: {\n    class: 'et-dropzone-item',\n    role: 'listitem',\n    '[attr.data-status]': 'entry().status()',\n  },\n})\nexport class DropzoneItemComponent {\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public entry = input.required<DropzoneEntry>();\n  public readonly = input(false);\n  public interactive = input(true);\n  public retryLabel = input('');\n  public removeLabel = input('');\n\n  public retry = output<void>();\n  public remove = output<void>();\n\n  protected readonly FORMAT_FILE_SIZE = formatFileSize;\n}\n","<div class=\"et-dropzone-item-thumbnail\" aria-hidden=\"true\">\n  @if (entry().previewUrl(); as previewUrl) {\n    <img [src]=\"previewUrl\" class=\"et-dropzone-preview-image\" alt=\"\" />\n  } @else {\n    <i class=\"et-dropzone-file-icon\" etIcon=\"et-file\"></i>\n  }\n</div>\n\n<div class=\"et-dropzone-item-info\">\n  <span class=\"et-dropzone-entry-name\">{{ entry().name() }}</span>\n\n  @if (entry().size(); as size) {\n    <span class=\"et-dropzone-entry-size\">{{ FORMAT_FILE_SIZE(size) }}</span>\n  }\n\n  @if (entry().source.type === 'file') {\n    <div [attr.data-active]=\"entry().status() === 'uploading' || null\" class=\"et-dropzone-entry-progress\">\n      <div class=\"et-dropzone-entry-progress-inner\">\n        <et-progress-bar [value]=\"entry().progress() ?? 0\" [indeterminate]=\"entry().progress() === null\" />\n      </div>\n    </div>\n  }\n</div>\n\n@if (!readonly()) {\n  @if (entry().status() === 'error') {\n    <button\n      [disabled]=\"!interactive()\"\n      [attr.aria-label]=\"retryLabel() + ' ' + entry().name()\"\n      (click)=\"retry.emit()\"\n      class=\"et-dropzone-retry-button\"\n      type=\"button\"\n      et-icon-button\n      size=\"sm\"\n    >\n      <i etIcon=\"et-rotate-right\"></i>\n    </button>\n  }\n\n  <button\n    [disabled]=\"!interactive()\"\n    [attr.aria-label]=\"removeLabel() + ' ' + entry().name()\"\n    (click)=\"remove.emit()\"\n    class=\"et-dropzone-remove-button\"\n    type=\"button\"\n    et-icon-button\n    size=\"sm\"\n  >\n    <i etIcon=\"et-times\"></i>\n  </button>\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n@Component({\n  selector: 'et-dropzone-preview-styles',\n  template: '',\n  styleUrl: './dropzone-preview-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DropzonePreviewStylesComponent {}\n\n/** @internal */\nexport const mountDropzonePreviewStyles = () => injectStyleManager().mount(DropzonePreviewStylesComponent);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n@Component({\n  selector: 'et-dropzone-readonly-styles',\n  template: '',\n  styleUrl: './dropzone-readonly-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DropzoneReadonlyStylesComponent {}\n\n/** @internal */\nexport const mountDropzoneReadonlyStyles = () => injectStyleManager().mount(DropzoneReadonlyStylesComponent);\n","// codes 2400-2499\nexport const DROPZONE_ERROR_CODES = {\n  INVALID_UPLOAD_CONFIG: 2400,\n  MISSING_EXISTING_RESOLVER: 2401,\n  VALUE_MODE_MISMATCH: 2402,\n} as const;\n","import { Signal, signal, WritableSignal } from '@angular/core';\nimport {\n  createManagedMetadataKey,\n  metadata,\n  PathKind,\n  SchemaPath,\n  SchemaPathRules,\n  validate,\n  ValidationError,\n} from '@angular/forms/signals';\nimport { formatFileSize } from './dropzone-entry';\n\nexport const DROPZONE_FILE_REJECTION_REASONS = {\n  ACCEPT: 'accept',\n  MAX_FILE_SIZE: 'maxFileSize',\n  MIN_FILE_SIZE: 'minFileSize',\n  MAX_FILES: 'maxFiles',\n} as const;\n\nexport type DropzoneFileRejectionReason =\n  (typeof DROPZONE_FILE_REJECTION_REASONS)[keyof typeof DROPZONE_FILE_REJECTION_REASONS];\n\nexport type DropzoneFileRejection = {\n  file: File;\n  reason: DropzoneFileRejectionReason;\n};\n\n/** The `kind` of the {@link ValidationError}s produced by {@link dropzoneFiles}. */\nexport const DROPZONE_FILES_ERROR_KIND = 'dropzoneFiles';\n\nexport type DropzoneFileConstraints = {\n  /**\n   * Accepted file types using the native `accept` attribute semantics\n   * (`.png`, `image/png`, `image/*`). Also applied to the native file picker.\n   */\n  accept?: string;\n\n  /** Maximum size of a single file in bytes. */\n  maxFileSize?: number;\n\n  /** Minimum size of a single file in bytes. */\n  minFileSize?: number;\n\n  /** Overrides the built-in per-rejection error message (e.g. for i18n). */\n  message?: (rejection: DropzoneFileRejection) => string;\n};\n\n/**\n * @internal\n * The channel between the {@link dropzoneFiles} schema rule and the dropzone directive:\n * the schema publishes the constraints, the directive publishes the rejected files of\n * the most recent selection.\n */\nexport type DropzoneFileValidationChannel = {\n  constraints: Signal<DropzoneFileConstraints | undefined>;\n  rejections: WritableSignal<DropzoneFileRejection[]>;\n};\n\n/** @internal Read by the dropzone directive via the bound field's metadata. */\nexport const DROPZONE_FILE_CONSTRAINTS = /* @__PURE__ */ createManagedMetadataKey<\n  DropzoneFileValidationChannel,\n  DropzoneFileConstraints\n>((_state, data) => ({\n  constraints: data,\n  rejections: signal<DropzoneFileRejection[]>([]),\n}));\n\nexport const defaultDropzoneRejectionMessage = (\n  rejection: DropzoneFileRejection,\n  constraints: DropzoneFileConstraints | undefined,\n) => {\n  const name = rejection.file.name;\n\n  switch (rejection.reason) {\n    case DROPZONE_FILE_REJECTION_REASONS.ACCEPT:\n      return `\"${name}\" has an unsupported file type.`;\n    case DROPZONE_FILE_REJECTION_REASONS.MAX_FILE_SIZE:\n      return `\"${name}\" is too large${\n        constraints?.maxFileSize !== undefined ? ` (max ${formatFileSize(constraints.maxFileSize)})` : ''\n      }.`;\n    case DROPZONE_FILE_REJECTION_REASONS.MIN_FILE_SIZE:\n      return `\"${name}\" is too small${\n        constraints?.minFileSize !== undefined ? ` (min ${formatFileSize(constraints.minFileSize)})` : ''\n      }.`;\n    default:\n      return `\"${name}\" was not added (only one file is allowed).`;\n  }\n};\n\n/**\n * Schema rule that validates the files selected in a dropzone bound to this field.\n *\n * Files violating the constraints are never uploaded; each violation surfaces as a\n * regular validation error (`kind: 'dropzoneFiles'`) on the field until the next\n * selection, removal or clear. Count and emptiness constraints are plain value\n * validation - use `required()`, `minLength()` and `maxLength()` for those.\n *\n * @example\n * ```ts\n * form(model, (s) => {\n *   required(s.media, { message: 'Please upload a file' });\n *   maxLength(s.media, 5, { message: 'Upload at most 5 files' });\n *   dropzoneFiles(s.media, { accept: 'image/*', maxFileSize: 5 * 1024 * 1024 });\n * });\n * ```\n */\nexport const dropzoneFiles = <TValue, TPathKind extends PathKind = PathKind.Root>(\n  path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>,\n  constraints: DropzoneFileConstraints | (() => DropzoneFileConstraints),\n) => {\n  metadata(path, DROPZONE_FILE_CONSTRAINTS, typeof constraints === 'function' ? constraints : () => constraints);\n\n  validate(path, (ctx) => {\n    const channel = ctx.state.metadata(DROPZONE_FILE_CONSTRAINTS);\n\n    if (!channel) {\n      return undefined;\n    }\n\n    const currentConstraints = channel.constraints();\n\n    return channel.rejections().map((rejection): ValidationError.WithoutFieldTree => ({\n      kind: DROPZONE_FILES_ERROR_KIND,\n      message:\n        currentConstraints?.message?.(rejection) ?? defaultDropzoneRejectionMessage(rejection, currentConstraints),\n    }));\n  });\n};\n","import {\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  EffectRef,\n  inject,\n  Injector,\n  input,\n  model,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FORM_FIELD, FormValueControl, ValidationError } from '@angular/forms/signals';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\nimport {\n  createExistingDropzoneEntry,\n  createFileDropzoneEntry,\n  disposeDropzoneEntry,\n  DROPZONE_ENTRY_STATUSES,\n  DropzoneEntry,\n  isFileAccepted,\n} from './dropzone-entry';\nimport { DROPZONE_ERROR_CODES } from './dropzone-errors';\nimport { AnyDropzoneUploadConfig, DropzoneUploadError } from './dropzone-upload';\nimport {\n  DROPZONE_FILE_CONSTRAINTS,\n  DROPZONE_FILE_REJECTION_REASONS,\n  DropzoneFileRejection,\n} from './dropzone-validation';\n\nconst isValueInControl = <TValue>(entry: DropzoneEntry<TValue>) => {\n  const status = entry.status();\n\n  return status === DROPZONE_ENTRY_STATUSES.SUCCESS || status === DROPZONE_ENTRY_STATUSES.EXISTING;\n};\n\nconst valuesEqual = (a: unknown, b: unknown) => {\n  if (a === b) {\n    return true;\n  }\n\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return a.length === b.length && a.every((item, index) => item === b[index]);\n  }\n\n  return false;\n};\n\n@Directive({\n  selector: '[etDropzone]',\n  host: {\n    '[attr.data-drag-over]': 'isDragOver() || null',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n    '(dragenter)': 'handleDragEnter($event)',\n    '(dragover)': 'handleDragOver($event)',\n    '(dragleave)': 'handleDragLeave()',\n    '(drop)': 'handleDrop($event)',\n  },\n})\nexport class DropzoneDirective<TValue = unknown>\n  extends AccessibleNameControlDirective\n  implements FormValueControl<TValue | TValue[] | null>, FormFieldControl\n{\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private signalFormField = inject(FORM_FIELD, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private injector = inject(Injector);\n  private hostElement = injectHostElement();\n\n  public value = model<TValue | TValue[] | null>(null);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  /** View-only: the entries stay visible and the control stays focusable, nothing can be changed. */\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  /** The upload workflow configuration. Create it via `createDropzoneUpload()`. */\n  public upload = input.required<AnyDropzoneUploadConfig<TValue>>();\n\n  /** Whether multiple files can be uploaded. The control value becomes an array. */\n  public multiple = input(false, { transform: booleanAttribute });\n\n  /** Emits all files of a selection that were rejected, with the reason per file. */\n  public filesReject = output<DropzoneFileRejection[]>();\n\n  /** Emits when the upload of an entry succeeded (after the control value was updated). */\n  public uploadSucceed = output<DropzoneEntry<TValue>>();\n\n  public uploadFail = output<DropzoneEntry<TValue>>();\n\n  /**\n   * Emits when the delete request for a removed entry's persisted value succeeded. Only fires for\n   * entries removed while the upload config has a `delete` option and the entry was already\n   * persisted (a successful upload or an existing value).\n   */\n  public deleteSucceed = output<TValue>();\n\n  /** Emits when that delete request failed. The entry is already gone from `entries()` by then. */\n  public deleteFail = output<{ value: TValue; error: DropzoneUploadError }>();\n\n  private internalEntries = signal<DropzoneEntry<TValue>[]>([]);\n  private internalLastRejections = signal<DropzoneFileRejection[]>([]);\n  private dragDepth = signal(0);\n  private entryWatchers = new Map<string, EffectRef>();\n  private lastSyncedValue: TValue | TValue[] | null = null;\n  private hasSyncedValue = false;\n\n  /** Whether files can still be added, replaced or removed. */\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  /** All entries currently managed by the dropzone, including uploading and failed ones. */\n  public entries = this.internalEntries.asReadonly();\n\n  /** The rejections of the most recent file selection. Reset by the next selection, removal or clear. */\n  public lastRejections = this.internalLastRejections.asReadonly();\n\n  private fileValidation = computed(() => {\n    const state = this.signalFormField?.state();\n\n    return state?.metadata(DROPZONE_FILE_CONSTRAINTS) ?? null;\n  });\n\n  /** The `accept` constraint of the bound field's `dropzoneFiles()` rule. Empty accepts everything. */\n  public accept = computed(() => this.fileValidation()?.constraints()?.accept ?? '');\n\n  public isDragOver = computed(() => this.dragDepth() > 0);\n\n  public anyUploading = computed(() =>\n    this.entries().some((entry) => entry.status() === DROPZONE_ENTRY_STATUSES.UPLOADING),\n  );\n  public anyFailed = computed(() => this.entries().some((entry) => entry.status() === DROPZONE_ENTRY_STATUSES.ERROR));\n  public hasValue = computed(() => this.entries().some(isValueInControl));\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.DROPZONE);\n\n  /** @internal */\n  public focusTarget = signal<HTMLElement | null>(null);\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => {\n      this.formField?.unregisterControl(this);\n\n      for (const entry of this.internalEntries()) {\n        this.disposeEntry(entry);\n      }\n    });\n\n    effect(() => {\n      const incoming = this.value();\n\n      untracked(() => this.reconcileValue(incoming));\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        const config = this.upload();\n\n        if (typeof config?.createUploadHandle !== 'function' || typeof config?.selectValue !== 'function') {\n          throw new RuntimeError(\n            DROPZONE_ERROR_CODES.INVALID_UPLOAD_CONFIG,\n            '[DropzoneDirective] The \"upload\" input must be a config created via createDropzoneUpload({ queryCreator, selectValue, ... }) ' +\n              'or createV2DropzoneUpload({ queryCreator, selectValue, ... }).',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Validates the given files and uploads all accepted ones. */\n  public selectFiles(files: FileList | readonly File[]) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const list = Array.from(files);\n\n    if (!list.length) {\n      return;\n    }\n\n    this.touched.set(true);\n\n    const rejections: DropzoneFileRejection[] = [];\n    const accepted: File[] = [];\n    const constraints = this.fileValidation()?.constraints();\n    const accept = this.accept();\n    const multiple = this.multiple();\n\n    const candidates = multiple ? list : list.slice(0, 1);\n\n    for (const file of list.slice(candidates.length)) {\n      rejections.push({ file, reason: DROPZONE_FILE_REJECTION_REASONS.MAX_FILES });\n    }\n\n    for (const file of candidates) {\n      if (accept && !isFileAccepted(file, accept)) {\n        rejections.push({ file, reason: DROPZONE_FILE_REJECTION_REASONS.ACCEPT });\n      } else if (constraints?.maxFileSize !== undefined && file.size > constraints.maxFileSize) {\n        rejections.push({ file, reason: DROPZONE_FILE_REJECTION_REASONS.MAX_FILE_SIZE });\n      } else if (constraints?.minFileSize !== undefined && file.size < constraints.minFileSize) {\n        rejections.push({ file, reason: DROPZONE_FILE_REJECTION_REASONS.MIN_FILE_SIZE });\n      } else {\n        accepted.push(file);\n      }\n    }\n\n    this.setRejections(rejections);\n\n    if (rejections.length) {\n      this.filesReject.emit(rejections);\n    }\n\n    if (!accepted.length) {\n      return;\n    }\n\n    const newEntries = accepted.map((file) => this.createFileEntry(file));\n\n    if (multiple) {\n      this.internalEntries.update((entries) => [...entries, ...newEntries]);\n    } else {\n      const replaced = this.internalEntries();\n      // read before disposing - `disposeEntry` tears the upload handle down, resetting entry.value()\n      const deletableValues = replaced.map((entry) => this.deletableValueOf(entry));\n\n      for (const entry of replaced) {\n        this.disposeEntry(entry);\n      }\n\n      this.internalEntries.set(newEntries);\n      this.syncValue();\n\n      for (const value of deletableValues) {\n        if (value !== null) {\n          this.executeDelete(value);\n        }\n      }\n    }\n  }\n\n  /** Removes an entry. Cancels its upload if it is still in flight. */\n  public removeEntry(id: string) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const entry = this.internalEntries().find((item) => item.id === id);\n\n    if (!entry) {\n      return;\n    }\n\n    const wasInControl = isValueInControl(entry);\n    const deletableValue = this.deletableValueOf(entry);\n\n    this.internalEntries.update((entries) => entries.filter((item) => item !== entry));\n    this.setRejections([]);\n    this.disposeEntry(entry);\n    this.touched.set(true);\n\n    if (wasInControl) {\n      this.syncValue();\n\n      if (deletableValue !== null) {\n        this.executeDelete(deletableValue);\n      }\n    }\n  }\n\n  /** Retries the upload of a failed entry with its original request args. */\n  public retryEntry(id: string) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const entry = this.internalEntries().find((item) => item.id === id);\n\n    if (!entry || entry.status() !== DROPZONE_ENTRY_STATUSES.ERROR || !entry.handle) {\n      return;\n    }\n\n    entry.handle.execute();\n  }\n\n  /**\n   * Removes every entry the way {@link removeEntry} does, including the upload config's `delete`\n   * request for each persisted value. Use {@link clear} for a local reset that leaves the server alone.\n   */\n  public removeAll() {\n    const entries = this.internalEntries();\n\n    if (!this.interactive() || !entries.length) {\n      return;\n    }\n\n    const deletableValues = entries\n      .map((entry) => this.deletableValueOf(entry))\n      .filter((value): value is TValue => value !== null);\n\n    for (const entry of entries) {\n      this.disposeEntry(entry);\n    }\n\n    this.internalEntries.set([]);\n    this.setRejections([]);\n    this.touched.set(true);\n    this.syncValue();\n\n    for (const value of deletableValues) {\n      this.executeDelete(value);\n    }\n  }\n\n  /** Removes all entries and resets the control value locally. Never sends a `delete` request - see {@link removeAll}. */\n  public clear() {\n    if (!this.interactive() || !this.internalEntries().length) {\n      return;\n    }\n\n    for (const entry of this.internalEntries()) {\n      this.disposeEntry(entry);\n    }\n\n    this.internalEntries.set([]);\n    this.setRejections([]);\n    this.syncValue();\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.focusTarget()?.focus(options);\n  }\n\n  protected handleDragEnter(event: DragEvent) {\n    if (!this.interactive() || !event.dataTransfer?.types.includes('Files')) {\n      return;\n    }\n\n    event.preventDefault();\n    this.dragDepth.update((depth) => depth + 1);\n  }\n\n  protected handleDragOver(event: DragEvent) {\n    if (!this.interactive() || !event.dataTransfer?.types.includes('Files')) {\n      return;\n    }\n\n    event.preventDefault();\n  }\n\n  protected handleDragLeave() {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.dragDepth.update((depth) => Math.max(0, depth - 1));\n  }\n\n  protected handleDrop(event: DragEvent) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    event.preventDefault();\n    this.dragDepth.set(0);\n\n    const files = event.dataTransfer?.files;\n\n    if (files?.length) {\n      this.selectFiles(files);\n    }\n  }\n\n  private setRejections(rejections: DropzoneFileRejection[]) {\n    this.internalLastRejections.set(rejections);\n    this.fileValidation()?.rejections.set(rejections);\n  }\n\n  private createFileEntry(file: File): DropzoneEntry<TValue> {\n    const config = this.upload();\n    const handle = config.createUploadHandle({ file, injector: this.injector });\n    const entry = createFileDropzoneEntry({ file, handle });\n\n    let previousStatus: string | null = null;\n\n    const watcher = effect(\n      () => {\n        const status = entry.status();\n\n        if (status === previousStatus) {\n          return;\n        }\n\n        previousStatus = status;\n\n        untracked(() => {\n          if (status === DROPZONE_ENTRY_STATUSES.SUCCESS) {\n            this.syncValue();\n            this.uploadSucceed.emit(entry);\n          } else if (status === DROPZONE_ENTRY_STATUSES.ERROR) {\n            this.uploadFail.emit(entry);\n          }\n        });\n      },\n      { injector: this.injector },\n    );\n\n    this.entryWatchers.set(entry.id, watcher);\n\n    handle.execute();\n\n    return entry;\n  }\n\n  private disposeEntry(entry: DropzoneEntry<TValue>) {\n    this.entryWatchers.get(entry.id)?.destroy();\n    this.entryWatchers.delete(entry.id);\n    disposeDropzoneEntry(entry);\n  }\n\n  private deletableValueOf(entry: DropzoneEntry<TValue>) {\n    if (!isValueInControl(entry)) {\n      return null;\n    }\n\n    const mayDelete =\n      entry.status() !== DROPZONE_ENTRY_STATUSES.EXISTING || (this.upload().deleteIncludesExisting ?? false);\n\n    return mayDelete ? entry.value() : null;\n  }\n\n  private executeDelete(value: TValue) {\n    const execute = this.upload().executeDelete;\n\n    if (!execute) {\n      return;\n    }\n\n    execute({ value, injector: this.injector }).then((error) => {\n      if (error) {\n        this.deleteFail.emit({ value, error });\n      } else {\n        this.deleteSucceed.emit(value);\n      }\n    });\n  }\n\n  private syncValue() {\n    const values = this.internalEntries()\n      .filter(isValueInControl)\n      .map((entry) => entry.value() as TValue);\n\n    const next = this.multiple() ? values : (values[0] ?? null);\n\n    this.lastSyncedValue = next;\n    this.hasSyncedValue = true;\n    this.value.set(next);\n  }\n\n  private reconcileValue(incoming: TValue | TValue[] | null) {\n    if (this.hasSyncedValue && valuesEqual(incoming, this.lastSyncedValue)) {\n      return;\n    }\n\n    this.lastSyncedValue = incoming;\n    this.hasSyncedValue = true;\n\n    let values: TValue[];\n\n    if (incoming === null || incoming === undefined) {\n      values = [];\n    } else if (Array.isArray(incoming)) {\n      if (ngDevMode && !this.multiple()) {\n        throw new RuntimeError(\n          DROPZONE_ERROR_CODES.VALUE_MODE_MISMATCH,\n          '[DropzoneDirective] The form control value is an array but the dropzone is in single mode. ' +\n            'Set the \"multiple\" input to true or write a single value.',\n          { element: this.hostElement },\n        );\n      }\n\n      values = this.multiple() ? incoming : incoming.slice(0, 1);\n    } else {\n      if (ngDevMode && this.multiple()) {\n        throw new RuntimeError(\n          DROPZONE_ERROR_CODES.VALUE_MODE_MISMATCH,\n          '[DropzoneDirective] The form control value is not an array but the dropzone is in multiple mode. ' +\n            'Write an array of values or remove the \"multiple\" input.',\n          { element: this.hostElement },\n        );\n      }\n\n      values = [incoming];\n    }\n\n    const currentEntries = this.internalEntries();\n    const usedEntries = new Set<DropzoneEntry<TValue>>();\n    const valueEntries: DropzoneEntry<TValue>[] = [];\n\n    for (const value of values) {\n      const match = currentEntries.find(\n        (entry) => !usedEntries.has(entry) && isValueInControl(entry) && entry.value() === value,\n      );\n\n      if (match) {\n        usedEntries.add(match);\n        valueEntries.push(match);\n        continue;\n      }\n\n      if (ngDevMode && !this.upload().resolveExisting) {\n        throw new RuntimeError(\n          DROPZONE_ERROR_CODES.MISSING_EXISTING_RESOLVER,\n          '[DropzoneDirective] The form control was initialized with a value but the upload config has no \"resolveExisting\" function. ' +\n            'Add one to createDropzoneUpload() so existing values can be displayed.',\n          { element: this.hostElement },\n        );\n      }\n\n      valueEntries.push(createExistingDropzoneEntry({ value, upload: this.upload }));\n    }\n\n    const pendingEntries = currentEntries.filter((entry) => !usedEntries.has(entry) && !isValueInControl(entry));\n    const droppedEntries = currentEntries.filter((entry) => !usedEntries.has(entry) && isValueInControl(entry));\n\n    for (const entry of droppedEntries) {\n      this.disposeEntry(entry);\n    }\n\n    const nextEntries = [...valueEntries, ...pendingEntries];\n    const changed =\n      nextEntries.length !== currentEntries.length ||\n      nextEntries.some((entry, index) => entry !== currentEntries[index]);\n\n    if (changed) {\n      this.internalEntries.set(nextEntries);\n    }\n  }\n}\n","import {\n  afterNextRender,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  viewChild,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  createCanAnimateSignal,\n  createFlipAnimationGroup,\n  injectPrefersReducedMotion,\n  injectRenderer,\n  injectStyleManager,\n  ProvideColorDirective,\n} from '@ethlete/core';\nimport { IconButtonComponent } from '../../button/icon-button.component';\nimport { FocusRingDirective } from '../../focus-ring/focus-ring.directive';\nimport {\n  FILE_ICON,\n  IconDirective,\n  provideIcons,\n  ROTATE_RIGHT_ICON,\n  TIMES_ICON,\n  UPLOAD_ICON,\n} from '../../icon/headless';\nimport { ProgressBarComponent } from '../../loader/progress-bar/progress-bar.component';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\nimport { DropzoneItemComponent } from './dropzone-item.component';\nimport { DropzonePreviewStylesComponent } from './dropzone-preview-styles.component';\nimport { DropzoneReadonlyStylesComponent } from './dropzone-readonly-styles.component';\nimport { DropzoneEntry, DROPZONE_ENTRY_STATUSES, formatFileSize } from './headless/dropzone-entry';\nimport { DropzoneDirective } from './headless/dropzone.directive';\nimport { injectDropzoneLabels } from '../../forms/dropzone/dropzone-labels';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-dropzone',\n  templateUrl: './dropzone.component.html',\n  styleUrl: './dropzone.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    DropzoneItemComponent,\n    FocusRingDirective,\n    FormSupportComponent,\n    IconButtonComponent,\n    IconDirective,\n    ProgressBarComponent,\n    ProvideColorDirective,\n  ],\n  providers: [provideFormSupport(), provideIcons(UPLOAD_ICON, FILE_ICON, ROTATE_RIGHT_ICON, TIMES_ICON)],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: DropzoneDirective,\n      inputs: [\n        'value',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'upload',\n        'multiple',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: [\n        'valueChange',\n        'touchedChange',\n        'filesReject',\n        'uploadSucceed',\n        'uploadFail',\n        'deleteSucceed',\n        'deleteFail',\n      ],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-dropzone',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n    '[attr.data-multiple]': 'dropzoneDir.multiple() || null',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class DropzoneComponent {\n  protected dropzoneLabels = injectDropzoneLabels();\n\n  protected dropzoneDir = inject(DropzoneDirective);\n  public support = injectFormSupport();\n  private injector = inject(Injector);\n  private renderer = injectRenderer();\n  private prefersReducedMotion = injectPrefersReducedMotion();\n\n  /** Label of the retry button shown for failed uploads. */\n  public retryLabel = input<string | null>(null);\n\n  /** Accessible label prefix of the remove button. The entry name is appended. */\n  public removeLabel = input<string | null>(null);\n\n  /** Accessible label of the replace button shown in single mode. */\n  public replaceLabel = input<string | null>(null);\n\n  /** Fallback error message shown when the upload error has no message. */\n  public uploadErrorLabel = input<string | null>(null);\n\n  /** Overrides the built-in per-entry upload failure message (e.g. for i18n). */\n  public uploadErrorMessage = input<((entry: DropzoneEntry) => string) | null>(null);\n\n  private fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n  private browseButton = viewChild<ElementRef<HTMLButtonElement>>('browseButton');\n  private entryElements = viewChildren<unknown, ElementRef<HTMLElement>>('entryEl', { read: ElementRef });\n\n  protected resolvedRetryLabel = computed(() => this.retryLabel() ?? this.dropzoneLabels().retry);\n\n  protected resolvedRemoveLabel = computed(() => this.removeLabel() ?? this.dropzoneLabels().remove);\n\n  protected resolvedReplaceLabel = computed(() => this.replaceLabel() ?? this.dropzoneLabels().replaceFile);\n\n  public resolvedUploadErrorLabel = computed(() => this.uploadErrorLabel() ?? this.dropzoneLabels().uploadFailed);\n  private removingEntryIds = new Set<string>();\n  private filePickerOpen = false;\n  public canAnimate = createCanAnimateSignal();\n\n  protected singleEntry = computed(() =>\n    this.dropzoneDir.multiple() ? null : (this.dropzoneDir.entries()[0] ?? null),\n  );\n\n  protected liveStatusMessage = computed(() => {\n    const entries = this.dropzoneDir.entries();\n    const uploading = entries.filter((entry) => entry.status() === DROPZONE_ENTRY_STATUSES.UPLOADING).length;\n\n    return uploading > 0 ? this.dropzoneLabels().uploading(uploading) : '';\n  });\n\n  protected internalErrorMessages = computed(() => {\n    const messages: string[] = [];\n\n    for (const entry of this.dropzoneDir.entries()) {\n      if (entry.status() === DROPZONE_ENTRY_STATUSES.ERROR) {\n        messages.push(this.uploadErrorMessage()?.(entry) ?? this.defaultUploadErrorMessage(entry));\n      }\n    }\n\n    return messages;\n  });\n\n  protected readonly FORMAT_FILE_SIZE = formatFileSize;\n\n  constructor() {\n    const styleManager = injectStyleManager();\n\n    effect(() => {\n      if (this.dropzoneDir.readonly()) styleManager.mount(DropzoneReadonlyStylesComponent);\n    });\n\n    effect(() => {\n      if (this.singleEntry()) styleManager.mount(DropzonePreviewStylesComponent);\n    });\n\n    afterNextRender(() => {\n      this.dropzoneDir.focusTarget.set(this.browseButton()?.nativeElement ?? null);\n    });\n  }\n\n  protected openFilePicker() {\n    if (this.dropzoneDir.disabled()) {\n      return;\n    }\n\n    this.filePickerOpen = true;\n    this.fileInput()?.nativeElement.click();\n  }\n\n  /**\n   * Opening the system file picker blurs the trigger - the control must not be\n   * marked as touched (and show validation errors) while the dialog is open.\n   */\n  protected markTriggerTouched() {\n    if (this.filePickerOpen) {\n      return;\n    }\n\n    this.dropzoneDir.touched.set(true);\n  }\n\n  protected resetFilePickerState() {\n    this.filePickerOpen = false;\n  }\n\n  protected uploadPickedFiles(event: Event) {\n    this.filePickerOpen = false;\n\n    const inputElement = event.target as HTMLInputElement;\n\n    if (inputElement.files?.length) {\n      this.dropzoneDir.selectFiles(inputElement.files);\n    }\n\n    // reset so picking the same file again re-triggers the change event\n    inputElement.value = '';\n  }\n\n  protected removeEntryAnimated(entry: DropzoneEntry, entryElement: HTMLElement) {\n    if (this.removingEntryIds.has(entry.id)) {\n      return;\n    }\n\n    const shouldAnimate =\n      typeof entryElement.animate === 'function' && this.canAnimate.state() && !this.prefersReducedMotion();\n\n    if (!shouldAnimate) {\n      this.dropzoneDir.removeEntry(entry.id);\n\n      return;\n    }\n\n    this.removingEntryIds.add(entry.id);\n    this.renderer.setStyle(entryElement, { pointerEvents: 'none' });\n\n    // animate the real element and remove the entry only afterwards - Angular unloads\n    // component styles once their last instance is destroyed, so a detached clone\n    // would lose the button/progress-bar styling mid-animation\n    const animation = entryElement.animate(\n      [\n        { opacity: 1, transform: 'scale(1)' },\n        { opacity: 0, transform: 'scale(0.9)' },\n      ],\n      { duration: 180, easing: 'ease-in', fill: 'forwards' },\n    );\n\n    animation.finished\n      .catch(() => undefined)\n      .finally(() => {\n        this.removingEntryIds.delete(entry.id);\n\n        const siblings = this.entryElements()\n          .map((ref) => ref.nativeElement)\n          .filter((element) => element !== entryElement);\n        const flip = siblings.length ? createFlipAnimationGroup({ elements: siblings, duration: 200 }) : null;\n\n        this.dropzoneDir.removeEntry(entry.id);\n\n        if (flip) {\n          afterNextRender(() => flip.play(), { injector: this.injector });\n        }\n      });\n  }\n\n  public focus(options?: FocusOptions) {\n    this.dropzoneDir.focus(options);\n  }\n\n  private defaultUploadErrorMessage(entry: DropzoneEntry) {\n    const serverMessage = entry.errorMessage();\n\n    return serverMessage\n      ? `\"${entry.name()}\": ${serverMessage}`\n      : `\"${entry.name()}\" ${this.resolvedUploadErrorLabel()}.`;\n  }\n}\n","<ng-content select=\"et-label\" />\n\n<input\n  #fileInput\n  [accept]=\"dropzoneDir.accept() || null\"\n  [multiple]=\"dropzoneDir.multiple()\"\n  [disabled]=\"!dropzoneDir.interactive()\"\n  (change)=\"uploadPickedFiles($event)\"\n  (cancel)=\"resetFilePickerState()\"\n  class=\"et-dropzone-native-input\"\n  type=\"file\"\n  tabindex=\"-1\"\n  aria-hidden=\"true\"\n/>\n\n<div [attr.data-has-preview]=\"singleEntry() ? true : null\" class=\"et-dropzone-area\">\n  <button\n    #browseButton\n    [disabled]=\"!dropzoneDir.interactive()\"\n    [attr.tabindex]=\"singleEntry() ? '-1' : null\"\n    [attr.aria-invalid]=\"dropzoneDir.shouldDisplayError() || null\"\n    [attr.aria-describedby]=\"dropzoneDir.describedBy() || null\"\n    [attr.aria-label]=\"dropzoneDir.ariaLabel() || null\"\n    [attr.aria-labelledby]=\"dropzoneDir.labelId() || null\"\n    (click)=\"openFilePicker()\"\n    (focus)=\"resetFilePickerState()\"\n    (blur)=\"markTriggerTouched()\"\n    class=\"et-dropzone-trigger\"\n    type=\"button\"\n    etFocusRing\n  >\n    <span class=\"et-dropzone-prompt\">\n      <ng-content>\n        <i class=\"et-dropzone-prompt-icon\" etIcon=\"et-upload\"></i>\n        <span class=\"et-dropzone-prompt-text\">{{ dropzoneLabels().prompt }}</span>\n      </ng-content>\n    </span>\n\n    @if (dropzoneDir.readonly()) {\n      <span class=\"et-dropzone-empty\">\n        <i class=\"et-dropzone-prompt-icon\" etIcon=\"et-file\"></i>\n        <span class=\"et-dropzone-prompt-text\">{{ dropzoneLabels().empty }}</span>\n      </span>\n    }\n  </button>\n\n  @if (singleEntry(); as entry) {\n    <div #entryEl [attr.data-status]=\"entry.status()\" class=\"et-dropzone-preview\">\n      @if (entry.previewUrl(); as previewUrl) {\n        <img [src]=\"previewUrl\" class=\"et-dropzone-preview-image\" alt=\"\" />\n      } @else {\n        <i class=\"et-dropzone-file-icon\" etIcon=\"et-file\"></i>\n      }\n\n      <div class=\"et-dropzone-preview-info\">\n        <span class=\"et-dropzone-entry-name\">{{ entry.name() }}</span>\n\n        @if (entry.size(); as size) {\n          <span class=\"et-dropzone-entry-size\">{{ FORMAT_FILE_SIZE(size) }}</span>\n        }\n\n        @if (entry.source.type === 'file') {\n          <div [attr.data-active]=\"entry.status() === 'uploading' || null\" class=\"et-dropzone-entry-progress\">\n            <div class=\"et-dropzone-entry-progress-inner\">\n              <et-progress-bar [value]=\"entry.progress() ?? 0\" [indeterminate]=\"entry.progress() === null\" />\n            </div>\n          </div>\n        }\n      </div>\n\n      @if (!dropzoneDir.readonly()) {\n        <div class=\"et-dropzone-preview-actions\">\n          @if (entry.status() === 'error') {\n            <button\n              [disabled]=\"!dropzoneDir.interactive()\"\n              [attr.aria-label]=\"resolvedRetryLabel() + ' ' + entry.name()\"\n              (click)=\"dropzoneDir.retryEntry(entry.id)\"\n              class=\"et-dropzone-retry-button\"\n              type=\"button\"\n              et-icon-button\n              variant=\"filled\"\n              size=\"sm\"\n            >\n              <i etIcon=\"et-rotate-right\"></i>\n            </button>\n          } @else {\n            <button\n              [disabled]=\"!dropzoneDir.interactive()\"\n              [attr.aria-label]=\"resolvedReplaceLabel()\"\n              (click)=\"openFilePicker()\"\n              class=\"et-dropzone-replace-button\"\n              type=\"button\"\n              et-icon-button\n              variant=\"filled\"\n              size=\"sm\"\n            >\n              <i etIcon=\"et-rotate-right\"></i>\n            </button>\n          }\n          <button\n            [disabled]=\"!dropzoneDir.interactive()\"\n            [attr.aria-label]=\"resolvedRemoveLabel() + ' ' + entry.name()\"\n            (click)=\"removeEntryAnimated(entry, entryEl)\"\n            class=\"et-dropzone-remove-button\"\n            type=\"button\"\n            et-icon-button\n            variant=\"filled\"\n            size=\"sm\"\n          >\n            <i etIcon=\"et-times\"></i>\n          </button>\n        </div>\n      }\n    </div>\n  }\n</div>\n\n@if (dropzoneDir.multiple() && dropzoneDir.entries().length) {\n  <ul class=\"et-dropzone-list\" role=\"list\">\n    @for (entry of dropzoneDir.entries(); track entry.id) {\n      <et-dropzone-item\n        #entryEl\n        [entry]=\"entry\"\n        [readonly]=\"dropzoneDir.readonly()\"\n        [interactive]=\"dropzoneDir.interactive()\"\n        [retryLabel]=\"resolvedRetryLabel()\"\n        [removeLabel]=\"resolvedRemoveLabel()\"\n        (retry)=\"dropzoneDir.retryEntry(entry.id)\"\n        (remove)=\"removeEntryAnimated(entry, entryEl.elementRef.nativeElement)\"\n      />\n    }\n  </ul>\n}\n\n<div class=\"et-dropzone-live-status\" role=\"status\" aria-live=\"polite\">{{ liveStatusMessage() }}</div>\n\n@if (internalErrorMessages().length) {\n  <div [etProvideColor]=\"support.errorColorTheme\" class=\"et-dropzone-internal-errors\" role=\"alert\">\n    @for (message of internalErrorMessages(); track $index) {\n      <span class=\"et-dropzone-internal-error\">{{ message }}</span>\n    }\n  </div>\n}\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { DropzoneComponent } from './dropzone.component';\nimport { DropzoneDirective } from './headless/dropzone.directive';\n\nexport const DROPZONE_IMPORTS = [DropzoneComponent, DropzoneDirective] as const;\n","import { computed, Injector, runInInjectionContext, signal, Signal, untracked } from '@angular/core';\nimport { filter, firstValueFrom, Observable, of, take } from 'rxjs';\nimport {\n  AnyLegacyQuery,\n  AnyLegacyQueryCreator,\n  AnyV2Query,\n  AnyV2QueryCreator,\n  executeUntilSettled,\n  extractQuery,\n  isQueryStateFailure,\n  isQueryStateLoading,\n  isQueryStateSuccess,\n  QueryArgs,\n  QueryCreator,\n  QueryDataOf,\n  QueryErrorResponse,\n  queryStateSignal,\n  RequestArgs,\n  RequestError,\n  ResponseType,\n  V2QueryState,\n} from '@ethlete/query';\n\n/**\n * Display information for a value that is already part of the form control\n * (e.g. media uploaded in a previous session inside an edit form).\n */\nexport type DropzoneExistingFileInfo = {\n  /** URL rendered as a preview thumbnail. */\n  previewUrl?: string | null;\n\n  /** Human readable name of the file. Falls back to the stringified value. */\n  name?: string;\n\n  /** File size in bytes. */\n  size?: number | null;\n};\n\n/** The upload error of a failed entry. */\nexport type DropzoneUploadError = QueryErrorResponse | RequestError;\n\n/** The lifecycle state of a single file upload, abstracted away from the query flavor. */\nexport type DropzoneUploadState = 'uploading' | 'success' | 'error';\n\n/**\n * @internal\n * A per-file upload handle. It hides which query system runs the upload (the new\n * `@ethlete/query` API or the legacy `V2QueryClient`) behind a uniform set of signals plus\n * `execute`/`dispose`.\n */\nexport type DropzoneUploadHandle<TValue> = {\n  state: Signal<DropzoneUploadState>;\n\n  /** Upload progress in percent. `null` when indeterminate (or not uploading). */\n  progress: Signal<number | null>;\n\n  /** The raw upload error of the last failed attempt. */\n  error: Signal<DropzoneUploadError | null>;\n\n  /** The first human readable error message, normalized across query flavors. */\n  errorMessage: Signal<string | null>;\n\n  /** The resolved form control value. `null` until the upload succeeded. */\n  value: Signal<TValue | null>;\n\n  /** (Re)runs the upload with the frozen request args. */\n  execute: () => void;\n\n  /** Releases the underlying query (aborts an in-flight request). */\n  dispose: () => void;\n};\n\n/** @internal */\nexport type DropzoneUploadHandleOptions = {\n  file: File;\n  injector: Injector;\n};\n\n/** @internal */\nexport type DropzoneDeleteOptions<TValue> = {\n  value: TValue;\n  injector: Injector;\n};\n\n/**\n * The resolved upload config the dropzone directive consumes. Both `createDropzoneUpload` (new\n * query) and `createV2DropzoneUpload` (legacy v2) produce this shape.\n */\nexport type ResolvedDropzoneUploadConfig<TValue = unknown> = {\n  /**\n   * Maps the upload response to the value that gets pushed into the form control\n   * (e.g. `(media) => media.uuid`).\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  selectValue: (response: any) => TValue;\n\n  /**\n   * Maps a value that is already part of the form control (edit forms) to display info.\n   * Called in a reactive context - reading signals inside it is supported, so async\n   * lookups can be modeled as signals updating over time.\n   *\n   * Required as soon as the form control can start with a non-empty value.\n   */\n  resolveExisting?: (value: TValue) => DropzoneExistingFileInfo;\n\n  /** @internal Creates a per-file upload handle. */\n  createUploadHandle: (options: DropzoneUploadHandleOptions) => DropzoneUploadHandle<TValue>;\n\n  /**\n   * @internal Fires the delete request for an already-persisted value being removed. Resolves\n   * with the request error, or `null` on success.\n   */\n  executeDelete?: (options: DropzoneDeleteOptions<TValue>) => Promise<DropzoneUploadError | null>;\n\n  /** @internal @see DropzoneDeleteConfig.includeExisting */\n  deleteIncludesExisting?: boolean;\n};\n\nexport type AnyDropzoneUploadConfig<TValue = unknown> = ResolvedDropzoneUploadConfig<TValue>;\n\n/**\n * The authoring config for a delete request run when an entry uploaded in this session is removed\n * - e.g. a `DELETE` route that cleans up the uploaded file server-side. Nest it under\n * `DropzoneUploadConfig.delete` / `V2DropzoneUploadConfig.delete`.\n */\nexport type DropzoneDeleteConfig<TArgs extends QueryArgs, TValue> = {\n  /** The query creator used to delete one value (e.g. a `DELETE /media/:id` route). */\n  queryCreator: QueryCreator<TArgs>;\n\n  /** Builds the request args to delete one value, e.g. `(id) => ({ pathParams: { id } })`. */\n  createArgs: (value: TValue) => RequestArgs<TArgs>;\n\n  /**\n   * Whether removing a value the control started with - one resolved through `resolveExisting`,\n   * rather than uploaded in this session - also deletes it server-side.\n   *\n   * @default false\n   */\n  includeExisting?: boolean;\n};\n\n/** The authoring config for `createDropzoneUpload` (new `@ethlete/query` API). */\nexport type DropzoneUploadConfig<\n  TArgs extends QueryArgs = QueryArgs,\n  TValue = unknown,\n  TDeleteArgs extends QueryArgs = QueryArgs,\n> = {\n  /**\n   * The query creator used to upload a single file (e.g. a POST multipart route).\n   *\n   * For per-file upload progress, create it with `reportProgress: true` and make sure the\n   * app uses the XHR `HttpClient` backend (upload progress events are not supported with\n   * `provideHttpClient(withFetch())`). Without progress information the dropzone falls\n   * back to an indeterminate progress display.\n   */\n  queryCreator: QueryCreator<TArgs>;\n\n  /**\n   * Builds the request args for one file.\n   * Override to change the multipart field name or to add extra fields, path params,\n   * query params or headers.\n   *\n   * @default (file) => ({ body: FormData with the file appended as \"file\" })\n   */\n  createArgs?: (file: File) => RequestArgs<TArgs>;\n\n  /**\n   * Maps the upload response to the value that gets pushed into the form control\n   * (e.g. `(media) => media.uuid`).\n   */\n  selectValue: (response: NonNullable<ResponseType<TArgs>>) => TValue;\n\n  /**\n   * Maps a value that is already part of the form control (edit forms) to display info.\n   * Called in a reactive context - reading signals inside it is supported, so async\n   * lookups can be modeled as signals updating over time.\n   *\n   * Required as soon as the form control can start with a non-empty value.\n   */\n  resolveExisting?: (value: TValue) => DropzoneExistingFileInfo;\n\n  /**\n   * Run when an entry uploaded in this session is removed - and, with `includeExisting`, when a\n   * value the control started with is removed too.\n   * Absent: removing an entry only updates the control locally, with no server-side cleanup.\n   */\n  delete?: DropzoneDeleteConfig<TDeleteArgs, TValue>;\n};\n\n/** The args accepted by a legacy v2 creator's `prepare()` - includes `mock`/`config` extras. */\nexport type V2DropzonePrepareArgsOf<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator> = Parameters<\n  TCreator['prepare']\n>[0];\n\n/** The legacy `V2QueryClient` counterpart of `DropzoneDeleteConfig` - see there for behavior. */\nexport type V2DropzoneDeleteConfig<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TValue> = {\n  /** The legacy query creator used to delete one value (from `V2QueryClient`'s `delete`). */\n  queryCreator: TCreator;\n\n  /** Builds the `prepare()` args to delete one value, e.g. `(id) => ({ pathParams: { id } })`. */\n  createArgs: (value: TValue) => V2DropzonePrepareArgsOf<TCreator>;\n\n  /** @see DropzoneDeleteConfig.includeExisting */\n  includeExisting?: boolean;\n};\n\n/**\n * The authoring config for `createV2DropzoneUpload` - the legacy `V2QueryClient` counterpart of\n * `DropzoneUploadConfig`, for apps that haven't migrated to the new `@ethlete/query` API yet.\n */\nexport type V2DropzoneUploadConfig<\n  TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n  TValue,\n  TDeleteCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator = TCreator,\n> = {\n  /**\n   * The legacy query creator used to upload a single file (from `V2QueryClient`'s `post`/`put`,\n   * or a `createLegacyQueryCreator` interop wrapper).\n   *\n   * For per-file upload progress, create it with `reportProgress: true` and make sure the app\n   * uses the XHR `HttpClient` backend. Without progress information the dropzone falls back to an\n   * indeterminate progress display.\n   */\n  queryCreator: TCreator;\n\n  /**\n   * Builds the `prepare()` args for one file.\n   * Override to change the multipart field name or to add extra fields, path params,\n   * query params or headers.\n   *\n   * @default (file) => ({ body: FormData with the file appended as \"file\" })\n   */\n  createArgs?: (file: File) => V2DropzonePrepareArgsOf<TCreator>;\n\n  /**\n   * Maps the upload response to the value that gets pushed into the form control\n   * (e.g. `(media) => media.uuid`).\n   */\n  selectValue: (response: NonNullable<QueryDataOf<TCreator>>) => TValue;\n\n  /**\n   * Maps a value that is already part of the form control (edit forms) to display info.\n   * Called in a reactive context - reading signals inside it is supported, so async\n   * lookups can be modeled as signals updating over time.\n   *\n   * Required as soon as the form control can start with a non-empty value.\n   */\n  resolveExisting?: (value: TValue) => DropzoneExistingFileInfo;\n\n  /**\n   * Run when an entry uploaded in this session is removed - and, with `includeExisting`, when a\n   * value the control started with is removed too.\n   * Absent: removing an entry only updates the control locally, with no server-side cleanup.\n   */\n  delete?: V2DropzoneDeleteConfig<TDeleteCreator, TValue>;\n};\n\nconst firstNewQueryErrorMessage = (error: QueryErrorResponse): string | null => {\n  const message = error.isList ? error.errors[0]?.message : error.error?.message;\n\n  return message ?? null;\n};\n\nconst firstV2ErrorMessage = (error: RequestError): string | null => {\n  const detail = error.detail;\n\n  if (typeof detail === 'object' && detail !== null) {\n    if ('message' in detail && typeof detail.message === 'string') {\n      return detail.message;\n    }\n\n    if ('detail' in detail && typeof detail.detail === 'string') {\n      return detail.detail;\n    }\n  }\n\n  if (typeof detail === 'string') {\n    return detail;\n  }\n\n  return error.statusText || null;\n};\n\nconst buildFileFormDataBody = (file: File) => {\n  const body = new FormData();\n  body.append('file', file, file.name);\n\n  return { body };\n};\n\nexport const createDefaultDropzoneArgs = (file: File): RequestArgs<QueryArgs> => buildFileFormDataBody(file);\n\nconst createNewQueryUploadHandle = <TArgs extends QueryArgs, TValue>(\n  options: DropzoneUploadHandleOptions & {\n    queryCreator: QueryCreator<TArgs>;\n    createArgs?: (file: File) => RequestArgs<TArgs>;\n    selectValue: (response: NonNullable<ResponseType<TArgs>>) => TValue;\n  },\n): DropzoneUploadHandle<TValue> => {\n  const { file, injector, queryCreator, createArgs, selectValue } = options;\n\n  const query = queryCreator({ injector, silenceMissingWithArgsFeatureError: true });\n  const args = (createArgs ?? (createDefaultDropzoneArgs as (file: File) => RequestArgs<TArgs>))(file);\n\n  const state = computed<DropzoneUploadState>(() => {\n    const executionState = query.executionState();\n\n    switch (executionState?.type) {\n      case 'success':\n        return 'success';\n      case 'failure':\n        return 'error';\n      default:\n        return 'uploading';\n    }\n  });\n\n  return {\n    state,\n    progress: computed(() => query.loading()?.progress?.percentage ?? null),\n    error: computed(() => query.error()),\n    errorMessage: computed(() => {\n      const error = query.error();\n\n      return error ? firstNewQueryErrorMessage(error) : null;\n    }),\n    value: computed(() => {\n      const response = query.response();\n\n      return response === null || response === undefined ? null : selectValue(response);\n    }),\n    execute: () => query.execute({ args }),\n    dispose: () => query.subtle.destroy(),\n  };\n};\n\nconst createV2QueryUploadHandle = <TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TValue>(\n  options: DropzoneUploadHandleOptions & {\n    queryCreator: TCreator;\n    createArgs?: (file: File) => V2DropzonePrepareArgsOf<TCreator>;\n    selectValue: (response: NonNullable<QueryDataOf<TCreator>>) => TValue;\n  },\n): DropzoneUploadHandle<TValue> =>\n  // `queryStateSignal` sets up a `toObservable` subscription and thus needs an injection context.\n  runInInjectionContext(options.injector, () => {\n    const { file, injector, queryCreator, createArgs, selectValue } = options;\n\n    const args = (createArgs ?? (buildFileFormDataBody as (file: File) => V2DropzonePrepareArgsOf<TCreator>))(file);\n    const currentQuery = signal<AnyV2Query | AnyLegacyQuery | null>(null);\n    const state = queryStateSignal(currentQuery);\n\n    const releaseCurrent = () => {\n      // We deliberately do not call the legacy `destroy()` - it re-enters through the underlying query's\n      // own `destroyRef` hook and double-destroys the injector (NG0205). The child injector is released\n      // when the owning component injector is torn down.\n      untracked(currentQuery)?.abort();\n    };\n\n    return {\n      state: computed<DropzoneUploadState>(() => {\n        const current = state();\n\n        if (isQueryStateSuccess(current)) {\n          return 'success';\n        }\n\n        if (isQueryStateFailure(current)) {\n          return 'error';\n        }\n\n        return 'uploading';\n      }),\n      progress: computed(() => {\n        const current = state();\n\n        return isQueryStateLoading(current) ? (current.progress?.percentage ?? null) : null;\n      }),\n      error: computed(() => {\n        const current = state();\n\n        return isQueryStateFailure(current) ? current.error : null;\n      }),\n      errorMessage: computed(() => {\n        const current = state();\n\n        return isQueryStateFailure(current) ? firstV2ErrorMessage(current.error) : null;\n      }),\n      value: computed(() => {\n        const current = state();\n\n        return isQueryStateSuccess(current)\n          ? selectValue(current.response as NonNullable<QueryDataOf<TCreator>>)\n          : null;\n      }),\n      execute: () => {\n        releaseCurrent();\n        // Legacy interop creators call `inject(Injector)` inside `prepare()`, so run in context.\n        const query = runInInjectionContext(\n          injector,\n          // `skipCache: true` forces the upload to run - uploads are uncacheable, and the legacy\n          // interop query rejects the default `allowCache: true` on an uncacheable request (ET301).\n          () => queryCreator.prepare(args).execute({ skipCache: true }) as AnyV2Query | AnyLegacyQuery,\n        );\n        currentQuery.set(query);\n      },\n      dispose: () => {\n        releaseCurrent();\n        currentQuery.set(null);\n      },\n    };\n  });\n\nconst createNewQueryDeleteExecutor = <TArgs extends QueryArgs, TValue>(config: {\n  queryCreator: QueryCreator<TArgs>;\n  createArgs: (value: TValue) => RequestArgs<TArgs>;\n}) => {\n  const { queryCreator, createArgs } = config;\n\n  return (options: DropzoneDeleteOptions<TValue>): Promise<DropzoneUploadError | null> => {\n    const { value, injector } = options;\n\n    const query = queryCreator({ injector, silenceMissingWithArgsFeatureError: true });\n    const args = createArgs(value);\n\n    return executeUntilSettled(query, { args })\n      .then((snapshot) => snapshot.error())\n      .finally(() => query.subtle.destroy());\n  };\n};\n\nconst createV2QueryDeleteExecutor = <TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TValue>(config: {\n  queryCreator: TCreator;\n  createArgs: (value: TValue) => V2DropzonePrepareArgsOf<TCreator>;\n}) => {\n  const { queryCreator, createArgs } = config;\n\n  return (options: DropzoneDeleteOptions<TValue>): Promise<DropzoneUploadError | null> =>\n    runInInjectionContext(options.injector, () => {\n      const { value, injector } = options;\n      const args = createArgs(value);\n\n      // Legacy interop creators call `inject(Injector)` inside `prepare()`, so run in context.\n      const query = runInInjectionContext(\n        injector,\n        // `skipCache: true` forces the delete to run - deletes are uncacheable, and the legacy\n        // interop query rejects the default `allowCache: true` on an uncacheable request (ET301).\n        () => queryCreator.prepare(args).execute({ skipCache: true }) as AnyV2Query | AnyLegacyQuery,\n      );\n\n      const state$: Observable<V2QueryState | null> = extractQuery(query)?.state$ ?? of(null);\n\n      return firstValueFrom(\n        state$.pipe(\n          filter((state) => isQueryStateSuccess(state) || isQueryStateFailure(state)),\n          take(1),\n        ),\n      ).then((state) => (isQueryStateFailure(state) ? state.error : null));\n    });\n};\n\n/**\n * Builds a dropzone upload config from a **new `@ethlete/query`** query creator. Pass the result\n * to the dropzone's `upload` input.\n *\n * For apps still on the legacy `V2QueryClient`, use {@link createV2DropzoneUpload} instead.\n */\nexport const createDropzoneUpload = <TArgs extends QueryArgs, TValue, TDeleteArgs extends QueryArgs = QueryArgs>(\n  config: DropzoneUploadConfig<TArgs, TValue, TDeleteArgs>,\n): AnyDropzoneUploadConfig<TValue> => ({\n  selectValue: config.selectValue as (response: unknown) => TValue,\n  resolveExisting: config.resolveExisting,\n  createUploadHandle: (options) =>\n    createNewQueryUploadHandle({\n      ...options,\n      queryCreator: config.queryCreator,\n      createArgs: config.createArgs,\n      selectValue: config.selectValue,\n    }),\n  executeDelete: config.delete\n    ? createNewQueryDeleteExecutor({ queryCreator: config.delete.queryCreator, createArgs: config.delete.createArgs })\n    : undefined,\n  deleteIncludesExisting: config.delete?.includeExisting ?? false,\n});\n\n/**\n * The legacy `V2QueryClient` counterpart of {@link createDropzoneUpload}. Builds a dropzone upload\n * config from a legacy v2 query creator (or a `createLegacyQueryCreator` interop wrapper), so apps\n * that haven't migrated to the new query API can still use the dropzone. Pass the result to the\n * same `upload` input.\n *\n * ```ts\n * upload = createV2DropzoneUpload({\n *   queryCreator: client.post({ route: '/media', types: { … }, reportProgress: true }),\n *   selectValue: (media) => media.uuid,\n * });\n * ```\n */\nexport const createV2DropzoneUpload = <\n  TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator,\n  TValue,\n  TDeleteCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator = TCreator,\n>(\n  config: V2DropzoneUploadConfig<TCreator, TValue, TDeleteCreator>,\n): AnyDropzoneUploadConfig<TValue> => ({\n  selectValue: config.selectValue as (response: unknown) => TValue,\n  resolveExisting: config.resolveExisting,\n  createUploadHandle: (options) =>\n    createV2QueryUploadHandle({\n      ...options,\n      queryCreator: config.queryCreator,\n      createArgs: config.createArgs,\n      selectValue: config.selectValue,\n    }),\n  executeDelete: config.delete\n    ? createV2QueryDeleteExecutor({ queryCreator: config.delete.queryCreator, createArgs: config.delete.createArgs })\n    : undefined,\n  deleteIncludesExisting: config.delete?.includeExisting ?? false,\n});\n","import { FieldTree, FormFieldBinding } from '@angular/forms/signals';\nimport { focusElement, getFocusableElements, isFocusable, matchesReducedMotion } from '@ethlete/core';\nimport { FORM_FIELD_TOKEN } from '../form-field/headless';\n\nexport type FocusFirstInvalidFieldOptions = {\n  /** Where the field lands in its scroll container. @default 'center' */\n  block?: ScrollLogicalPosition;\n  /** @default 'smooth', or 'auto' when the user asked for reduced motion */\n  behavior?: ScrollBehavior;\n  /** Whether to move focus into the field's control. @default true */\n  focus?: boolean;\n};\n\nconst isRendered = (element: HTMLElement) => element.isConnected && element.getClientRects().length > 0;\n\nconst firstRenderedInvalidBinding = <T>(field: FieldTree<T>) => {\n  let first: FormFieldBinding | null = null;\n\n  for (const error of field().errorSummary()) {\n    for (const binding of error.fieldTree().formFieldBindings()) {\n      if (!isRendered(binding.element)) {\n        continue;\n      }\n\n      const precedesFirst =\n        !!first && (first.element.compareDocumentPosition(binding.element) & Node.DOCUMENT_POSITION_PRECEDING) !== 0;\n\n      if (!first || precedesFirst) {\n        first = binding;\n      }\n    }\n  }\n\n  return first;\n};\n\n/**\n * Scrolls the first invalid field of `field` into view and focuses its control - what an invalid\n * submit attempt should do, now that a submit button stays enabled while the form is invalid.\n *\n * \"First\" is the first field in DOM order, not in field-tree order, and fields that are not\n * currently rendered (a collapsed section, another wizard step) are skipped - so the user lands on\n * an error they can see and fix.\n *\n * `[etForm]` calls this on every failed submit. Call it directly from a hand-written submit handler\n * or a `submission.onInvalid` hook.\n *\n * @returns Whether a field was found. `false` means no rendered field owns any of the form's errors -\n *   a form-level error, for instance.\n */\nexport const focusFirstInvalidField = <T>(field: FieldTree<T>, options?: FocusFirstInvalidFieldOptions) => {\n  const binding = firstRenderedInvalidBinding(field);\n\n  if (!binding) {\n    return false;\n  }\n\n  const element = binding.element;\n  const ownerDocument = element.ownerDocument;\n  const fieldShell = binding.injector.get(FORM_FIELD_TOKEN, null);\n\n  (fieldShell?.element ?? element).scrollIntoView({\n    block: options?.block ?? 'center',\n    inline: 'nearest',\n    behavior: options?.behavior ?? (matchesReducedMotion(element) ? 'auto' : 'smooth'),\n  });\n\n  if (options?.focus !== false) {\n    const activeBefore = ownerDocument.activeElement;\n\n    binding.focus({ preventScroll: true });\n\n    // Angular falls back to focusing the `[formField]` element itself for a control that implements\n    // no `focus()` - a no-op on a wrapper like `<et-input>`. Nothing moved and nothing was already\n    // focused inside, so go looking for the focusable descendant ourselves.\n    if (ownerDocument.activeElement === activeBefore && !element.contains(ownerDocument.activeElement)) {\n      focusElement(\n        isFocusable(element, ownerDocument) ? element : (getFocusableElements(element, ownerDocument)[0] ?? null),\n      );\n    }\n  }\n\n  return true;\n};\n","import { DestroyRef, Directive, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FieldTree, submit } from '@angular/forms/signals';\nimport { from, tap } from 'rxjs';\nimport { focusFirstInvalidField } from './focus-first-invalid-field';\n\n/**\n * Wires a `<form>` to the signal form it edits: it submits through the form's own\n * `submission.action`, and a submit that does not pass validation scrolls the first invalid field\n * into view and focuses it.\n *\n * ```html\n * <form [etForm]=\"form\">…</form>\n * ```\n *\n * The form declares what submitting means, so the template needs no handler and no\n * `$event.preventDefault()`:\n *\n * ```ts\n * protected form = form(this.model, mySchema, {\n *   submission: { action: async (field) => save(field().value()) },\n * });\n * ```\n *\n * Leave the submit button enabled while the form is invalid. Submitting marks every field touched,\n * which is what makes the errors appear, and the first one is scrolled to - a disabled button\n * instead says \"no\" without ever saying why. Bind `[loading]=\"form().submitting()\"` for the in-flight\n * state, and keep `disabled` for reasons that are not validity (a missing permission, data still\n * loading).\n */\n@Directive({\n  selector: 'form[etForm]',\n  host: {\n    novalidate: '',\n    '(submit)': 'handleSubmit($event)',\n  },\n})\nexport class FormDirective<T> {\n  private destroyRef = inject(DestroyRef);\n\n  public field = input.required<FieldTree<T>>({ alias: 'etForm' });\n\n  protected handleSubmit(event: Event) {\n    event.preventDefault();\n\n    const field = this.field();\n\n    if (field().submitting()) {\n      return;\n    }\n\n    from(submit(field))\n      .pipe(\n        tap((success) => {\n          if (!success) {\n            focusFirstInvalidField(field);\n          }\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import { FormDirective } from './form.directive';\n\n/** `[etForm]` - submits a `<form>` through its signal form and lands the user on the first error. */\nexport const FORM_IMPORTS = [FormDirective] as const;\n","import { Component, computed, DestroyRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CounterComponentBase, FORM_FIELD_TOKEN } from './headless';\n\nconst defaultLengthOf = (value: unknown) => {\n  if (value === null || value === undefined) {\n    return 0;\n  }\n\n  if (typeof value === 'string' || Array.isArray(value)) {\n    return value.length;\n  }\n\n  if (value instanceof Set || value instanceof Map) {\n    return value.size;\n  }\n\n  return String(value).length;\n};\n\nconst ANNOUNCE_FROM_FRACTION = 0.9;\n\n/**\n * The `x / N` character counter in a form field's support region.\n *\n * The limit comes from `[max]` if given, otherwise from the bound field's schema `maxLength()`\n * (signal forms binds that into the control automatically). With neither, the counter renders the\n * bare count.\n */\n@Component({\n  selector: 'et-counter',\n  template: `\n    <span aria-hidden=\"true\">{{ current() }}{{ limitSuffix() }}</span>\n    <span [attr.aria-live]=\"announcement() ? 'polite' : null\" class=\"et-counter-announcement\">\n      {{ announcement() }}\n    </span>\n  `,\n  styleUrl: './counter.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-counter',\n    '[attr.data-over-limit]': 'isOverLimit() || null',\n  },\n})\nexport class CounterComponent implements CounterComponentBase {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n\n  /**\n   * The limit to count towards. Wins over the schema's `maxLength()` - use it for a control whose\n   * length isn't schema-validated, or to count towards a softer limit than the one that validates.\n   */\n  public max = input<number | undefined>(undefined);\n\n  /** Measures the control's value. Override for a value type the default can't count. */\n  public lengthOf = input<(value: unknown) => number>(defaultLengthOf);\n\n  /** The limit actually in effect: the explicit `[max]`, else the bound field's `maxLength()`. */\n  public resolvedMax = computed(() => this.max() ?? this.formField?.controlMaxLength());\n\n  /** The current length of the control's value. */\n  public current = computed(() => this.lengthOf()(this.formField?.controlValue() ?? null));\n\n  /**\n   * Whether the value is past the limit. With a schema `maxLength()` this is the control's own\n   * validation error.\n   */\n  public isOverLimit = computed(() => {\n    const explicitMax = this.max();\n\n    if (explicitMax !== undefined) {\n      return this.current() > explicitMax;\n    }\n\n    return this.formField?.errors().some((error) => error.kind === 'maxLength') ?? false;\n  });\n\n  protected limitSuffix = computed(() => {\n    const max = this.resolvedMax();\n\n    return max === undefined ? '' : ` / ${max}`;\n  });\n\n  protected announcement = computed(() => {\n    const max = this.resolvedMax();\n\n    if (max === undefined || max <= 0) {\n      return null;\n    }\n\n    const current = this.current();\n\n    if (this.isOverLimit()) {\n      return `${current - max} characters over the limit of ${max}`;\n    }\n\n    if (current === max) {\n      return `Character limit of ${max} reached`;\n    }\n\n    return current / max >= ANNOUNCE_FROM_FRACTION ? `${max - current} characters remaining` : null;\n  });\n\n  constructor() {\n    this.formField?.registerCounter(this);\n    inject(DestroyRef).onDestroy(() => this.formField?.unregisterCounter(this));\n  }\n}\n","import { CounterComponent } from './counter.component';\nimport { FormFieldComponent } from './form-field.component';\nimport { FormFieldDirective, LabelDirective } from './headless';\nimport { HintComponent } from './hint.component';\nimport { InputPrefixDirective, InputSuffixDirective } from './partials';\n\nexport const FORM_FIELD_IMPORTS = [\n  FormFieldComponent,\n  FormFieldDirective,\n  LabelDirective,\n  HintComponent,\n  CounterComponent,\n  InputPrefixDirective,\n  InputSuffixDirective,\n] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings the text-field family's own controls render - the number input's steppers and the password\n * input's reveal toggle. The field's label, hint and errors are yours; these are the parts the control\n * adds by itself.\n */\nexport type InputLabels = {\n  /** Accessible label for the number input's step-up control. */\n  increment: string;\n  /** Accessible label for the number input's step-down control. */\n  decrement: string;\n  /** Accessible label for the password input's control while the value is masked. */\n  showPassword: string;\n  /** Accessible label for the password input's control while the value is visible. */\n  hidePassword: string;\n  /** The password input's warning that Caps Lock may be on. */\n  capsLockOn: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_INPUT_LABELS: InputLabels = {\n  increment: 'Increment',\n  decrement: 'Decrement',\n  showPassword: 'Show password',\n  hidePassword: 'Hide password',\n  capsLockOn: 'Caps Lock might be on',\n};\n\nconst INPUT_LABELS_DEF = /* @__PURE__ */ defineLabels<InputLabels>('INPUT_LABELS', DEFAULT_INPUT_LABELS);\n\n/**\n * Localize the text field family's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_INPUT_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideInputLabels({ increment: 'Erhöhen', decrement: 'Verringern' });\n */\nexport const provideInputLabels = /* @__PURE__ */ toProvideFn(INPUT_LABELS_DEF);\nexport const injectInputLabels = /* @__PURE__ */ toInjectFn(INPUT_LABELS_DEF);\nexport const INPUT_LABELS = /* @__PURE__ */ toToken(INPUT_LABELS_DEF);\n","import { DOCUMENT } from '@angular/common';\nimport {\n  afterNextRender,\n  booleanAttribute,\n  Component,\n  computed,\n  DestroyRef,\n  ElementRef,\n  inject,\n  input,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ColorInteractiveDirective, dragGestureFrom, injectRenderer } from '@ethlete/core';\nimport { finalize, fromEvent, merge, Subscription, takeUntil, tap, timer } from 'rxjs';\nimport { IconDirective, MINUS_ICON, PLUS_ICON, provideIcons } from '../../icon';\nimport { NumberInputDirective, numberInputStepMultiplierFrom } from './headless';\nimport { injectInputLabels } from '../../forms/input/input-labels';\nimport { TEXT_FIELD_CONTROL_INPUTS } from '../form-field/headless/text-field-control.directive';\n\nconst STEPPER_REPEAT_DELAY = 400;\nconst STEPPER_REPEAT_INTERVAL = 75;\n\n/** How far the pointer travels per `step` while scrubbing - a distance, never one unit per pixel. */\nconst SCRUB_PX_PER_STEP = 4;\n\n/** Far enough that a press meant as a click never commits to a scrub. */\nconst SCRUB_COMMIT_THRESHOLD = 8;\n\n/** Set on the document while a scrub runs - the pointer is captured, so the grip's own cursor is not enough. */\nconst SCRUB_ACTIVE_CLASS = 'et-number-input-scrubbing';\n\n@Component({\n  selector: 'et-number-input',\n  templateUrl: './number-input.component.html',\n  styleUrl: './number-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(MINUS_ICON, PLUS_ICON)],\n  hostDirectives: [\n    {\n      directive: NumberInputDirective,\n      inputs: ['min', 'max', 'step', 'placeholder', 'autocomplete', 'textAlign', 'value', ...TEXT_FIELD_CONTROL_INPUTS],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-number-input',\n    '[attr.data-stepper]': 'stepper() || null',\n    '(click)': 'numberInputDir.activate()',\n  },\n})\nexport class NumberInputComponent {\n  private inputLabels = injectInputLabels();\n\n  protected numberInputDir = inject(NumberInputDirective);\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private renderer = injectRenderer();\n\n  /** Renders −/+ stepper buttons with press-and-hold auto-repeat. */\n  public stepper = input(false, { transform: booleanAttribute });\n\n  /** Accessible name of the increment stepper button. */\n  public incrementLabel = input<string | null>(null);\n\n  /** Accessible name of the decrement stepper button. */\n  public decrementLabel = input<string | null>(null);\n\n  private nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n  /** The string in effect: this instance's `incrementLabel`, else the domain's label set. */\n  protected resolvedIncrementLabel = computed(() => this.incrementLabel() ?? this.inputLabels().increment);\n\n  /** The string in effect: this instance's `decrementLabel`, else the domain's label set. */\n  protected resolvedDecrementLabel = computed(() => this.decrementLabel() ?? this.inputLabels().decrement);\n\n  private repeatSub: Subscription | null = null;\n\n  constructor() {\n    afterNextRender(() => {\n      const nativeInput = this.nativeInput()?.nativeElement ?? null;\n\n      this.numberInputDir.focusTarget.set(nativeInput);\n      this.numberInputDir.nativeControl.set(nativeInput);\n    });\n  }\n\n  public syncNativeValue(event: Event) {\n    this.numberInputDir.syncFromNativeInput(event.target as HTMLInputElement);\n  }\n\n  protected startStepRepeat(event: PointerEvent, direction: 1 | -1) {\n    // keep focus on the input (or wherever it is) instead of the button\n    event.preventDefault();\n    this.numberInputDir.activate();\n\n    const button = event.currentTarget as HTMLElement;\n\n    try {\n      button.setPointerCapture(event.pointerId);\n    } catch {\n      // pointer capture is unavailable in some test environments - stepping still works\n    }\n\n    const multiplier = numberInputStepMultiplierFrom(event);\n\n    this.numberInputDir.stepBy(direction, { multiplier });\n    this.stopStepRepeat();\n\n    // stop on any pointer release anywhere, not just on the button: if `setPointerCapture`\n    // above threw (test envs, some browsers) and the pointer lifts off the button, the button\n    // never sees `pointerup`/`pointercancel` - without this document-level stop the timer would\n    // run until the component is destroyed\n    const release$ = merge(fromEvent(this.document, 'pointerup'), fromEvent(this.document, 'pointercancel'));\n\n    // one immediate step above, then repeat after the hold delay and accelerate\n    this.repeatSub = timer(STEPPER_REPEAT_DELAY, STEPPER_REPEAT_INTERVAL)\n      .pipe(\n        tap(() => this.numberInputDir.stepBy(direction, { multiplier })),\n        takeUntil(release$),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    // a scrub is a fine-pointer gesture: on touch a horizontal drag off a 24px button is a\n    // mis-grab far more often than an edit, and the buttons already refuse to scroll the page\n    if (event.pointerType === 'mouse') {\n      this.startScrub(event, { button, multiplier });\n    }\n  }\n\n  protected stopStepRepeat() {\n    this.repeatSub?.unsubscribe();\n    this.repeatSub = null;\n  }\n\n  public focus(options?: FocusOptions) {\n    this.numberInputDir.focus(options);\n  }\n\n  /**\n   * Drag the stepper sideways to run the value, Figma-style. The press has already stepped once and\n   * armed the auto-repeat by the time this can tell a drag from a click, so committing to the scrub\n   * cancels the repeat and leaves that first step standing.\n   *\n   * The multiplier is the one the modifiers asked for at press - the gesture carries positions, not\n   * key state, so a modifier pressed mid-drag does not change the sensitivity under way.\n   */\n  private startScrub(event: PointerEvent, { button, multiplier }: { button: HTMLElement; multiplier: number }) {\n    let scrubbing = false;\n    let skipCatchUpMove = false;\n    let travel = 0;\n\n    dragGestureFrom(event, button, { commitThreshold: SCRUB_COMMIT_THRESHOLD })\n      .pipe(\n        tap((gesture) => {\n          if (gesture.type === 'start') {\n            scrubbing = true;\n            // the move that arrives with `start` catches up the threshold distance - counting it\n            // would jump the value by two steps the instant the drag commits\n            skipCatchUpMove = true;\n            travel = 0;\n            this.stopStepRepeat();\n            this.renderer.addClass(this.document.documentElement, SCRUB_ACTIVE_CLASS);\n\n            return;\n          }\n\n          if (!scrubbing) return;\n\n          if (gesture.type === 'move') {\n            if (skipCatchUpMove) {\n              skipCatchUpMove = false;\n\n              return;\n            }\n\n            travel += gesture.data.stepX;\n\n            const steps = Math.trunc(travel / SCRUB_PX_PER_STEP);\n\n            if (!steps) return;\n\n            // keep the sub-step remainder so a slow drag still moves instead of rounding to zero\n            travel -= steps * SCRUB_PX_PER_STEP;\n\n            this.numberInputDir.stepBy(steps > 0 ? 1 : -1, {\n              multiplier: Math.abs(steps) * multiplier,\n              markTouched: false,\n            });\n\n            return;\n          }\n\n          if (gesture.type === 'end' || gesture.type === 'cancelled') {\n            scrubbing = false;\n            // the whole scrub is one edit: marking touched per step would flash a validation\n            // error under the pointer every time the drag passed a bound on its way somewhere valid\n            this.numberInputDir.touched.set(true);\n          }\n        }),\n        // also on destroy - a component torn down mid-drag would otherwise leave the whole\n        // document wearing the scrub cursor\n        finalize(() => this.renderer.removeClass(this.document.documentElement, SCRUB_ACTIVE_CLASS)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","<input\n  #nativeInput\n  [value]=\"numberInputDir.displayValue()\"\n  [disabled]=\"numberInputDir.disabled()\"\n  [readOnly]=\"numberInputDir.readonly()\"\n  [required]=\"numberInputDir.required()\"\n  [placeholder]=\"numberInputDir.effectivePlaceholder()\"\n  [attr.autocomplete]=\"numberInputDir.autocomplete() || null\"\n  [attr.min]=\"numberInputDir.min() ?? null\"\n  [attr.max]=\"numberInputDir.max() ?? null\"\n  [attr.step]=\"numberInputDir.step() ?? null\"\n  [attr.name]=\"numberInputDir.name() || null\"\n  [attr.aria-invalid]=\"numberInputDir.shouldDisplayError() || null\"\n  [attr.aria-describedby]=\"numberInputDir.describedBy() || null\"\n  [attr.aria-label]=\"numberInputDir.ariaLabel() || null\"\n  [attr.aria-labelledby]=\"numberInputDir.labelId() || null\"\n  [attr.data-text-align]=\"numberInputDir.textAlign()\"\n  (input)=\"syncNativeValue($event)\"\n  (focus)=\"numberInputDir.focused.set(true)\"\n  (blur)=\"numberInputDir.focused.set(false); numberInputDir.touched.set(true)\"\n  class=\"et-number-input-native\"\n  type=\"number\"\n/>\n\n@if (stepper()) {\n  <div class=\"et-number-input-stepper\">\n    <button\n      [attr.aria-label]=\"resolvedDecrementLabel()\"\n      [disabled]=\"!numberInputDir.canStepDown()\"\n      (pointerdown)=\"startStepRepeat($event, -1)\"\n      (pointerup)=\"stopStepRepeat()\"\n      (pointercancel)=\"stopStepRepeat()\"\n      (lostpointercapture)=\"stopStepRepeat()\"\n      class=\"et-number-input-stepper-button\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <i aria-hidden=\"true\" etIcon=\"et-minus\"></i>\n    </button>\n    <button\n      [attr.aria-label]=\"resolvedIncrementLabel()\"\n      [disabled]=\"!numberInputDir.canStepUp()\"\n      (pointerdown)=\"startStepRepeat($event, 1)\"\n      (pointerup)=\"stopStepRepeat()\"\n      (pointercancel)=\"stopStepRepeat()\"\n      (lostpointercapture)=\"stopStepRepeat()\"\n      class=\"et-number-input-stepper-button\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <i aria-hidden=\"true\" etIcon=\"et-plus\"></i>\n    </button>\n  </div>\n}\n","import { TooltipDirective } from './headless/tooltip.directive';\nimport { TooltipComponent } from './tooltip.component';\n\nexport const TOOLTIP_IMPORTS = [TooltipDirective, TooltipComponent] as const;\n","import {\n  afterNextRender,\n  booleanAttribute,\n  Component,\n  computed,\n  ElementRef,\n  inject,\n  input,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { EYE_ICON, EYE_SLASH_ICON, IconDirective, provideIcons, TRIANGLE_EXCLAMATION_ICON } from '../../icon';\nimport { TooltipDirective } from '../../tooltip';\nimport { PasswordInputDirective } from './headless';\nimport { injectInputLabels } from '../../forms/input/input-labels';\nimport { ControlSuffixDirective } from '../form-field/partials';\nimport { TEXT_FIELD_CONTROL_INPUTS } from '../form-field/headless/text-field-control.directive';\n\n@Component({\n  selector: 'et-password-input',\n  templateUrl: './password-input.component.html',\n  styleUrl: './password-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ControlSuffixDirective, IconDirective, TooltipDirective],\n  providers: [provideIcons(EYE_ICON, EYE_SLASH_ICON, TRIANGLE_EXCLAMATION_ICON)],\n  hostDirectives: [\n    {\n      directive: PasswordInputDirective,\n      inputs: ['placeholder', 'autocomplete', 'value', 'revealed', ...TEXT_FIELD_CONTROL_INPUTS],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange', 'revealedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-password-input',\n    '(click)': 'passwordDir.activate()',\n  },\n})\nexport class PasswordInputComponent {\n  private inputLabels = injectInputLabels();\n\n  protected passwordDir = inject(PasswordInputDirective);\n\n  /** Whether the reveal (show/hide) toggle renders. */\n  public revealable = input(true, { transform: booleanAttribute });\n\n  /** Accessible name of the reveal toggle while the value is hidden (the \"show\" action). */\n  public revealLabel = input<string | null>(null);\n\n  /** Accessible name of the reveal toggle while the value is shown (the \"hide\" action). */\n  public hideLabel = input<string | null>(null);\n\n  /** Show a warning indicator while the field is focused and Caps Lock is on. */\n  public capsLockWarning = input(false, { transform: booleanAttribute });\n\n  /** Text of the Caps Lock warning - announced by the live region and shown as the icon's tooltip. */\n  public capsLockLabel = input<string | null>(null);\n\n  private nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n  /** The string in effect: this instance's `revealLabel`, else the domain's label set. */\n  protected resolvedRevealLabel = computed(() => this.revealLabel() ?? this.inputLabels().showPassword);\n\n  /** The string in effect: this instance's `hideLabel`, else the domain's label set. */\n  protected resolvedHideLabel = computed(() => this.hideLabel() ?? this.inputLabels().hidePassword);\n\n  /** The string in effect: this instance's `capsLockLabel`, else the domain's label set. */\n  protected resolvedCapsLockLabel = computed(() => this.capsLockLabel() ?? this.inputLabels().capsLockOn);\n\n  protected showCapsLockWarning = computed(\n    () => this.capsLockWarning() && this.passwordDir.capsLockOn() && this.passwordDir.focused(),\n  );\n\n  constructor() {\n    afterNextRender(() => {\n      const nativeInput = this.nativeInput()?.nativeElement ?? null;\n\n      this.passwordDir.focusTarget.set(nativeInput);\n      this.passwordDir.nativeControl.set(nativeInput);\n    });\n  }\n\n  public syncNativeValue(event: Event) {\n    this.passwordDir.syncFromNativeInput(event.target as HTMLInputElement);\n  }\n\n  protected handleBlur(event: FocusEvent) {\n    this.passwordDir.focused.set(false);\n    this.passwordDir.touched.set(true);\n    this.passwordDir.syncCapsLock(event);\n  }\n\n  public focus(options?: FocusOptions) {\n    this.passwordDir.focus(options);\n  }\n}\n","<input\n  #nativeInput\n  [type]=\"passwordDir.inputType()\"\n  [value]=\"passwordDir.displayValue()\"\n  [disabled]=\"passwordDir.disabled()\"\n  [readOnly]=\"passwordDir.readonly()\"\n  [required]=\"passwordDir.required()\"\n  [placeholder]=\"passwordDir.effectivePlaceholder()\"\n  [attr.autocomplete]=\"passwordDir.autocomplete() || null\"\n  [attr.name]=\"passwordDir.name() || null\"\n  [attr.aria-invalid]=\"passwordDir.shouldDisplayError() || null\"\n  [attr.aria-describedby]=\"passwordDir.describedBy() || null\"\n  [attr.aria-label]=\"passwordDir.ariaLabel() || null\"\n  [attr.aria-labelledby]=\"passwordDir.labelId() || null\"\n  (input)=\"syncNativeValue($event)\"\n  (keydown)=\"passwordDir.syncCapsLock($event)\"\n  (keyup)=\"passwordDir.syncCapsLock($event)\"\n  (mousedown)=\"passwordDir.syncCapsLock($event)\"\n  (focus)=\"passwordDir.focused.set(true)\"\n  (blur)=\"handleBlur($event)\"\n  class=\"et-password-input-native\"\n/>\n\n@if (showCapsLockWarning()) {\n  <span class=\"et-password-input-caps-warning\" role=\"status\">\n    <i [etTooltip]=\"resolvedCapsLockLabel()\" aria-hidden=\"true\" etIcon=\"et-triangle-exclamation\"></i>\n    <span class=\"et-password-input-caps-warning-text\">{{ resolvedCapsLockLabel() }}</span>\n  </span>\n}\n\n<ng-template etControlSuffix>\n  @if (revealable()) {\n    <button\n      [attr.aria-label]=\"passwordDir.revealed() ? resolvedHideLabel() : resolvedRevealLabel()\"\n      [attr.aria-pressed]=\"passwordDir.revealed()\"\n      [disabled]=\"passwordDir.disabled()\"\n      (click)=\"passwordDir.toggleRevealed(); $event.stopPropagation()\"\n      class=\"et-password-input-reveal\"\n      type=\"button\"\n    >\n      <i [etIcon]=\"passwordDir.revealed() ? 'et-eye-slash' : 'et-eye'\" aria-hidden=\"true\"></i>\n    </button>\n  }\n</ng-template>\n","import { InputDirective, NumberInputDirective, PasswordInputDirective } from './headless';\nimport { InputComponent } from './input.component';\nimport { NumberInputComponent } from './number-input.component';\nimport { PasswordInputComponent } from './password-input.component';\n\nexport const INPUT_IMPORTS = [InputComponent, InputDirective] as const;\n\nexport const NUMBER_INPUT_IMPORTS = [NumberInputComponent, NumberInputDirective] as const;\n\nexport const PASSWORD_INPUT_IMPORTS = [PasswordInputComponent, PasswordInputDirective] as const;\n","import { InputMaskDirective } from './headless';\n\nexport const MASKED_INPUT_IMPORTS = [InputMaskDirective] as const;\n","import { MaskSpec } from '../headless/input-mask.types';\n\nconst CARD_MAX_LENGTH = 19;\n\n/**\n * Groups a payment-card number into blocks of four (uniform grouping - Amex-style\n * 4-6-5 layouts are out of scope). The raw value is the plain digit string.\n */\nexport const createCardMask = (): MaskSpec => ({\n  toRaw: (text) => text.replace(/[^0-9]/g, '').slice(0, CARD_MAX_LENGTH),\n  toDisplay: (raw) => raw.replace(/(.{4})(?=.)/g, '$1 '),\n});\n","import { MaskSpec } from '../headless/input-mask.types';\n\nexport type CurrencyMaskOptions = {\n  /** Separator shown (and used in the raw value) before the fraction. Default `','`. */\n  decimalSeparator?: string;\n  /** Separator grouping the integer digits in the display. Default `'.'`. */\n  groupSeparator?: string;\n  /** Maximum fraction digits; `0` disables the decimal separator entirely. Default `2`. */\n  decimals?: number;\n  /** Static text rendered before the amount (e.g. `'€ '`). Must not contain digits or the separators. */\n  prefix?: string;\n  /** Static text rendered after the amount (e.g. `' €'`). Must not contain digits or the separators. */\n  suffix?: string;\n  /** Allow a leading minus. Default `false`. */\n  allowNegative?: boolean;\n};\n\n/**\n * A right-growing grouped number mask for locale-formatted amounts.\n *\n * The raw value is the ungrouped amount using the configured `decimalSeparator`\n * (e.g. `'1234,56'` with the defaults) - parse it with\n * `Number(raw.replace(decimalSeparator, '.'))`.\n */\nexport const createCurrencyMask = (options: CurrencyMaskOptions = {}): MaskSpec => {\n  const {\n    decimalSeparator = ',',\n    groupSeparator = '.',\n    decimals = 2,\n    prefix = '',\n    suffix = '',\n    allowNegative = false,\n  } = options;\n\n  const toRaw = (text: string) => {\n    let digits = '';\n    let negative = false;\n    let hasDecimal = false;\n    let fractionLength = 0;\n\n    for (const char of text) {\n      if (char === '-' && allowNegative && !digits.length && !hasDecimal) {\n        negative = true;\n      } else if (/[0-9]/.test(char)) {\n        if (hasDecimal) {\n          if (fractionLength < decimals) {\n            digits += char;\n            fractionLength += 1;\n          }\n        } else {\n          digits += char;\n        }\n      } else if (char === decimalSeparator && !hasDecimal && decimals > 0) {\n        digits += decimalSeparator;\n        hasDecimal = true;\n      }\n    }\n\n    // strip redundant leading zeros (`007` → `7`, `0,5` stays); a bare fraction gets its zero\n    const [integer = '', fraction] = digits.split(decimalSeparator);\n    const trimmedInteger = integer.replace(/^0+(?=\\d)/, '') || (fraction === undefined ? '' : '0');\n    const normalized = fraction === undefined ? trimmedInteger : `${trimmedInteger}${decimalSeparator}${fraction}`;\n\n    if (!normalized.length) {\n      return '';\n    }\n\n    return negative ? `-${normalized}` : normalized;\n  };\n\n  const toDisplay = (raw: string) => {\n    if (!raw.length) {\n      return '';\n    }\n\n    const negative = raw.startsWith('-');\n    const unsigned = negative ? raw.slice(1) : raw;\n    const [integer = '', fraction] = unsigned.split(decimalSeparator);\n    const grouped = (integer || '0').replace(/\\B(?=(\\d{3})+(?!\\d))/g, groupSeparator);\n    const amount = fraction === undefined ? grouped : `${grouped}${decimalSeparator}${fraction}`;\n\n    return `${prefix}${negative ? '-' : ''}${amount}${suffix}`;\n  };\n\n  return { toRaw, toDisplay, caretAnchor: 'end' };\n};\n","import { MaskSpec } from '../headless/input-mask.types';\n\nconst IBAN_MAX_LENGTH = 34;\n\n/**\n * Groups an IBAN into blocks of four, uppercasing as you type. Charset and length\n * only - structural validation (country prefix, checksum) belongs to the schema/backend.\n * The raw value is the ungrouped uppercase IBAN.\n */\nexport const createIbanMask = (): MaskSpec => ({\n  toRaw: (text) =>\n    text\n      .replace(/[^a-zA-Z0-9]/g, '')\n      .toUpperCase()\n      .slice(0, IBAN_MAX_LENGTH),\n  toDisplay: (raw) => raw.replace(/(.{4})(?=.)/g, '$1 '),\n});\n","// codes 2600-2699\nexport const MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES = {\n  NO_LANGUAGES_CONFIGURED: 2600,\n  DUPLICATE_LANGUAGE_CODE: 2601,\n} as const;\n","import { booleanAttribute, computed, Directive, effect, input, linkedSignal, model } from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport { RuntimeError } from '@ethlete/core';\nimport {\n  MultiLanguageRichTextEditorLanguage,\n  MultiLanguageRichTextEditorValue,\n} from '../multi-language-rich-text-editor-config';\nimport { MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES } from '../multi-language-rich-text-editor-errors';\n\n@Directive({\n  selector: '[etMultiLanguageRichTextEditor]',\n})\nexport class MultiLanguageRichTextEditorDirective implements FormValueControl<MultiLanguageRichTextEditorValue> {\n  public value = model<MultiLanguageRichTextEditorValue>({});\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  /** The languages to offer, in switcher order. Consumer-provided - no languages are hard-wired. */\n  public languages = input.required<readonly MultiLanguageRichTextEditorLanguage[]>();\n\n  /** The language currently being edited. Kept valid across `languages` changing: if the active code\n   *  is removed, it falls back to the first remaining language. */\n  public activeLanguage = linkedSignal<readonly MultiLanguageRichTextEditorLanguage[], string>({\n    source: this.languages,\n    computation: (languages, previous) =>\n      previous && languages.some((language) => language.code === previous.value)\n        ? previous.value\n        : (languages[0]?.code ?? ''),\n  });\n\n  /** Markdown of the active language - bound one-way into the embedded editor. */\n  public activeMarkdown = computed(() => this.value()[this.activeLanguage()] ?? '');\n\n  /** Languages configured but still without content - what the switcher flags as \"missing\". */\n  public missingLanguages = computed(() => this.languages().filter((language) => !this.isFilled(language.code)));\n\n  public filledCount = computed(() => this.languages().length - this.missingLanguages().length);\n  public totalCount = computed(() => this.languages().length);\n\n  /** Any language holds content (used e.g. for form-field label float). */\n  public hasValue = computed(() => Object.values(this.value()).some((markdown) => markdown.trim().length > 0));\n\n  constructor() {\n    if (ngDevMode) {\n      effect(() => this.assertLanguages(this.languages()));\n    }\n  }\n\n  /** Whether the given language's stored Markdown is non-empty (trimmed). */\n  public isFilled(code: string) {\n    return (this.value()[code] ?? '').trim().length > 0;\n  }\n\n  /** Writes Markdown for the active language, preserving every other key - including translations\n   *  whose code isn't currently in `languages()` (never dropped). */\n  public writeActiveMarkdown(markdown: string) {\n    const code = this.activeLanguage();\n\n    this.value.update((record) => (record[code] === markdown ? record : { ...record, [code]: markdown }));\n  }\n\n  private assertLanguages(languages: readonly MultiLanguageRichTextEditorLanguage[]) {\n    if (languages.length === 0) {\n      throw new RuntimeError(\n        MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES.NO_LANGUAGES_CONFIGURED,\n        '[etMultiLanguageRichTextEditor] requires at least one language in its `languages` input.',\n      );\n    }\n\n    const seen = new Set<string>();\n\n    for (const language of languages) {\n      if (seen.has(language.code)) {\n        throw new RuntimeError(\n          MULTI_LANGUAGE_RICH_TEXT_EDITOR_ERROR_CODES.DUPLICATE_LANGUAGE_CODE,\n          `[etMultiLanguageRichTextEditor] has a duplicate language code \"${language.code}\". Codes must be unique.`,\n        );\n      }\n\n      seen.add(language.code);\n    }\n  }\n}\n","import { validate } from '@angular/forms/signals';\nimport { MultiLanguageRichTextEditorValue } from './multi-language-rich-text-editor-config';\n\n/** The path type `validate` accepts for a {@link MultiLanguageRichTextEditorValue} field. Derived so\n *  we don't depend on a non-exported path type name from `@angular/forms/signals`. */\ntype MultiLanguageRichTextEditorFieldPath = Parameters<typeof validate<MultiLanguageRichTextEditorValue>>[0];\n\nexport type RequiredLanguagesOptions = {\n  /** Language codes that must have content for the field to be valid. */\n  codes: readonly string[];\n  /** Overrides the generated \"Missing translations: …\" message. */\n  message?: string;\n};\n\n/**\n * Signal-forms validator: fails the field while any of the given language `codes` has no content\n * (trimmed Markdown is empty). Add it to your `form()` schema so a missing translation surfaces as\n * a normal form-field error (e.g. \"Missing translations: en\"), the same channel the single-language\n * editor uses. The per-language \"Empty\" flag in the switcher dropdown is independent and always shown.\n *\n * ```ts\n * form(model, (s) => {\n *   requiredLanguages(s.translations, { codes: ['en'] });\n * });\n * ```\n */\nexport const requiredLanguages = (\n  path: MultiLanguageRichTextEditorFieldPath,\n  { codes, message }: RequiredLanguagesOptions,\n) =>\n  validate(path, ({ value }) => {\n    const missing = codes.filter((code) => (value()[code] ?? '').trim().length === 0);\n\n    if (missing.length === 0) return undefined;\n\n    return { kind: 'requiredLanguages', message: message ?? `Missing translations: ${missing.join(', ')}` };\n  });\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the rich text editor renders or announces itself. Defaults are English\n * ({@link DEFAULT_RICH_TEXT_EDITOR_LABELS}); override them app-wide with\n * {@link provideRichTextEditorLabels} or per instance via `et-rich-text-editor`'s `labels` input.\n *\n * Almost all of it is accessible labels: the toolbar's buttons show icons, so their name is the only\n * thing a screen reader has to go on.\n *\n * The **tool** keys (`bold` … `table`) are named after their tool tokens, which is how the toolbar looks\n * a button's name up. A tool your app registers through `RICH_TEXT_EDITOR_TOOL` keeps the `label` on its\n * own definition instead - you wrote that string, so it is already in your language.\n */\nexport type RichTextEditorLabels = {\n  /** Accessible label for the toolbar. */\n  toolbar: string;\n  /** Accessible label for the toolbar that follows a selection (`floatingToolbar`). */\n  selectionToolbar: string;\n\n  /** Accessible name for the block-style menu's trigger, given the current style's own label. */\n  textStyle: (currentStyle: string) => string;\n  /** Block-style menu entry: a normal paragraph. */\n  paragraph: string;\n  /** Block-style menu entry for a heading level. */\n  heading: (level: number) => string;\n\n  /** Accessible label for the link editor popover. */\n  linkEditor: string;\n  /** The link editor's heading while the caret sits on an existing link. */\n  linkEditorEdit: string;\n  /** The link editor's heading while adding a new link. */\n  linkEditorAdd: string;\n  /** Accessible label for the link editor's close button. */\n  linkEditorClose: string;\n  /** Label for the link editor's text field. */\n  linkTextLabel: string;\n  /** Placeholder for the link editor's text field. */\n  linkTextPlaceholder: string;\n  /** Label for the link editor's URL field. */\n  linkUrlLabel: string;\n  /** Placeholder for the link editor's URL field. */\n  linkUrlPlaceholder: string;\n  /** The link editor's \"open in a new tab\" checkbox. */\n  linkNewTab: string;\n  /** The link editor's action that strips the link, shown only for an existing one. */\n  linkRemove: string;\n  /** The link editor's confirm action while adding a link. */\n  linkAdd: string;\n  /** The link editor's confirm action while editing an existing link. */\n  linkUpdate: string;\n\n  /** Accessible label for the image popover. */\n  imageEditor: string;\n  /** Accessible label for the image popover's close button. */\n  imageEditorClose: string;\n  /** Label for the image popover's alt-text field. */\n  imageAltLabel: string;\n  /** Placeholder for the image popover's alt-text field. */\n  imageAltPlaceholder: string;\n  /** Hint under the image popover's alt-text field. */\n  imageAltHint: string;\n  /** The image popover's action that takes the image out of the document. */\n  imageRemove: string;\n  /** The image popover's confirm action. */\n  imageUpdate: string;\n  /** Accessible name of the placeholder shown while an image uploads. */\n  imageUploading: string;\n  /** Accessible name of the placeholder left behind by a failed upload. */\n  imageUploadFailed: string;\n\n  /** The token palette's trigger. */\n  insertToken: string;\n  /** Shown by a token popup or palette that has nothing to offer. */\n  noResults: string;\n\n  /** Accessible label for a cell in the table tool's size picker, e.g. `'3 by 4'`. */\n  tableSize: (rows: number, columns: number) => string;\n  /** The size picker's readout while a size is hovered, e.g. `'3 × 4'`. */\n  tableSizePreview: (rows: number, columns: number) => string;\n  /** The size picker's readout before any size is hovered. */\n  tableInsert: string;\n  /** Table menu entry: add a header row to a table that has none. */\n  tableInsertHeaderRow: string;\n  /** Table menu entry: insert a row above the caret's. */\n  tableInsertRowAbove: string;\n  /** Table menu entry: insert a row below the caret's. */\n  tableInsertRowBelow: string;\n  /** Table menu entry: insert a column left of the caret's. */\n  tableInsertColumnLeft: string;\n  /** Table menu entry: insert a column right of the caret's. */\n  tableInsertColumnRight: string;\n  /** Table menu entry: delete the caret's row. */\n  tableDeleteRow: string;\n  /** Table menu entry: delete the caret's column. */\n  tableDeleteColumn: string;\n  /** Table menu entry: delete the whole table. */\n  tableDeleteTable: string;\n\n  /** Toolbar tool: undo the last edit. */\n  undo: string;\n  /** Toolbar tool: reapply the last undone edit. */\n  redo: string;\n  /** Toolbar tool: bold. */\n  bold: string;\n  /** Toolbar tool: italic. */\n  italic: string;\n  /** Toolbar tool: strikethrough. */\n  strike: string;\n  /** Toolbar tool: underline. */\n  underline: string;\n  /** Toolbar tool: inline code. */\n  code: string;\n  /** Toolbar tool: bulleted list. */\n  bulletedList: string;\n  /** Toolbar tool: numbered list. */\n  numberedList: string;\n  /** Toolbar tool: block quote. */\n  blockquote: string;\n  /** Toolbar tool: fenced code block. */\n  codeBlock: string;\n  /** Toolbar tool: link. */\n  link: string;\n  /** Toolbar tool: the opt-in alignment menu. */\n  align: string;\n  /** Accessible label for the alignment menu's trigger. */\n  alignTrigger: string;\n  /** Alignment menu entry: align left. */\n  alignLeft: string;\n  /** Alignment menu entry: center. */\n  alignCenter: string;\n  /** Alignment menu entry: align right. */\n  alignRight: string;\n  /** Alignment menu entry: justify. */\n  alignJustify: string;\n  /** Toolbar tool: the opt-in table menu, and its trigger. */\n  table: string;\n  /** Toolbar tool: the opt-in image tool. */\n  image: string;\n  /** Toolbar tool: the multi-language editor's language switcher. */\n  language: string;\n  /** Accessible name for the language switcher's trigger, given the active language's own name. */\n  languageTrigger: (currentLanguage: string) => string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_RICH_TEXT_EDITOR_LABELS: RichTextEditorLabels = {\n  toolbar: 'Text formatting',\n  selectionToolbar: 'Selection formatting',\n\n  textStyle: (currentStyle) => `Text style: ${currentStyle}`,\n  paragraph: 'Normal',\n  heading: (level) => `Heading ${level}`,\n\n  linkEditor: 'Edit link',\n  linkEditorEdit: 'Edit link',\n  linkEditorAdd: 'Add link',\n  linkEditorClose: 'Close',\n  linkTextLabel: 'Text',\n  linkTextPlaceholder: 'Link text',\n  linkUrlLabel: 'URL',\n  linkUrlPlaceholder: 'https://…',\n  linkNewTab: 'Open in new tab',\n  linkRemove: 'Remove',\n  linkAdd: 'Add',\n  linkUpdate: 'Update',\n\n  imageEditor: 'Image',\n  imageEditorClose: 'Close',\n  imageAltLabel: 'Alt text',\n  imageAltPlaceholder: 'Describe the image',\n  imageAltHint: 'Leave empty if the image is decorative',\n  imageRemove: 'Remove',\n  imageUpdate: 'Update',\n  imageUploading: 'Uploading image…',\n  imageUploadFailed: 'Image upload failed',\n\n  insertToken: 'Insert token',\n  noResults: 'No results',\n\n  tableSize: (rows, columns) => `${rows} by ${columns}`,\n  tableSizePreview: (rows, columns) => `${rows} × ${columns}`,\n  tableInsert: 'Insert table',\n  tableInsertHeaderRow: 'Insert header row',\n  tableInsertRowAbove: 'Insert row above',\n  tableInsertRowBelow: 'Insert row below',\n  tableInsertColumnLeft: 'Insert column left',\n  tableInsertColumnRight: 'Insert column right',\n  tableDeleteRow: 'Delete row',\n  tableDeleteColumn: 'Delete column',\n  tableDeleteTable: 'Delete table',\n\n  undo: 'Undo',\n  redo: 'Redo',\n  bold: 'Bold',\n  italic: 'Italic',\n  strike: 'Strikethrough',\n  underline: 'Underline',\n  code: 'Inline code',\n  bulletedList: 'Bulleted list',\n  numberedList: 'Numbered list',\n  blockquote: 'Block quote',\n  codeBlock: 'Code block',\n  link: 'Link',\n  align: 'Alignment',\n  alignTrigger: 'Text alignment',\n  alignLeft: 'Align left',\n  alignCenter: 'Align center',\n  alignRight: 'Align right',\n  alignJustify: 'Justify',\n  table: 'Table',\n  image: 'Image',\n  language: 'Language',\n  languageTrigger: (currentLanguage) => `Language: ${currentLanguage}`,\n};\n\nconst RICH_TEXT_EDITOR_LABELS_DEF = /* @__PURE__ */ defineLabels<RichTextEditorLabels>(\n  'RICH_TEXT_EDITOR_LABELS',\n  DEFAULT_RICH_TEXT_EDITOR_LABELS,\n);\n\n/**\n * Localize the rich text editor's strings for everything below this injector, and read the set in\n * effect here as a signal. Partial - whatever you leave out keeps its\n * {@link DEFAULT_RICH_TEXT_EDITOR_LABELS} value. See {@link defineLabels} for the shape, which every\n * domain in this library shares.\n *\n * @example\n * provideRichTextEditorLabels({\n *   toolbar: 'Textformatierung',\n *   bold: 'Fett',\n *   heading: (level) => `Überschrift ${level}`,\n * });\n */\nexport const provideRichTextEditorLabels = /* @__PURE__ */ toProvideFn(RICH_TEXT_EDITOR_LABELS_DEF);\nexport const injectRichTextEditorLabels = /* @__PURE__ */ toInjectFn(RICH_TEXT_EDITOR_LABELS_DEF);\nexport const RICH_TEXT_EDITOR_LABELS = /* @__PURE__ */ toToken(RICH_TEXT_EDITOR_LABELS_DEF);\n\n/**\n * A toolbar button's accessible name: the label set's entry for its tool token, or the `label` on the\n * definition itself for a tool this library doesn't ship (an app's own tool, already in its language).\n *\n * The cast is the price of an extensible token: tool tokens are open strings, so no index signature can\n * describe \"the built-in ones happen to be keys of {@link RichTextEditorLabels}\".\n */\nexport const richTextEditorToolLabel = (labels: RichTextEditorLabels, tool: { token: string; label: string }) => {\n  const label = (labels as Record<string, unknown>)[tool.token];\n\n  return typeof label === 'string' ? label : tool.label;\n};\n","import { InjectionToken, Type } from '@angular/core';\nimport { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { RichTextEditorDirective } from './headless/rich-text-editor.directive';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from './rich-text-editor-labels';\n\n/**\n * The formatting controls the rich text editor can render in its toolbar. `'divider'` renders a\n * visual separator and `'heading'` renders the block-style menu; every other token renders a toggle\n * button. Consumers pick and order them via the `tools` input or {@link provideRichTextEditorTools}.\n */\nexport const RICH_TEXT_EDITOR_TOOLS = {\n  UNDO: 'undo',\n  REDO: 'redo',\n  BOLD: 'bold',\n  ITALIC: 'italic',\n  UNDERLINE: 'underline',\n  STRIKE: 'strike',\n  CODE: 'code',\n  HEADING: 'heading',\n  ALIGN: 'align',\n  BULLETED_LIST: 'bulletedList',\n  NUMBERED_LIST: 'numberedList',\n  BLOCKQUOTE: 'blockquote',\n  CODE_BLOCK: 'codeBlock',\n  LINK: 'link',\n  TABLE: 'table',\n  IMAGE: 'image',\n  DIVIDER: 'divider',\n} as const;\n\n/**\n * A toolbar tool token. History, the inline marks and the lists are built in; every other tool is\n * opt-in and only renders when its provider is present, so its code tree-shakes away otherwise -\n * `provideRichTextEditorHeadingTool` / `…BlockquoteTool` / `…CodeBlockTool` / `…LinkTool` /\n * `…AlignmentTool` / `…TableTool` / `…ImageTool`. `(string & {})` keeps the union open for custom\n * tools.\n */\nexport type RichTextEditorTool = (typeof RICH_TEXT_EDITOR_TOOLS)[keyof typeof RICH_TEXT_EDITOR_TOOLS] | (string & {});\n\n/** The default toolbar: history, then the block-style menu, inline marks, lists, quotes/fences and\n *  links. The opt-in tokens in it render nothing until their provider is registered, so the bar an\n *  editor actually shows is this list intersected with what was provided. */\nexport const DEFAULT_RICH_TEXT_EDITOR_TOOLS: readonly RichTextEditorTool[] = [\n  'undo',\n  'redo',\n  'divider',\n  'heading',\n  'divider',\n  'bold',\n  'italic',\n  'underline',\n  'strike',\n  'code',\n  'divider',\n  'bulletedList',\n  'numberedList',\n  'divider',\n  'blockquote',\n  'codeBlock',\n  'divider',\n  'link',\n];\n\n/** The inline marks the selection (floating) toolbar can offer - headings/lists are block-level. */\nexport const RICH_TEXT_EDITOR_INLINE_TOOLS: readonly RichTextEditorTool[] = [\n  'bold',\n  'italic',\n  'underline',\n  'strike',\n  'code',\n  'link',\n];\n\nexport type RichTextEditorToolsConfig = { tools: readonly RichTextEditorTool[] };\n\nconst RICH_TEXT_EDITOR_TOOLS_DEF = /* @__PURE__ */ defineStaticRootProvider<RichTextEditorToolsConfig>(\n  { tools: DEFAULT_RICH_TEXT_EDITOR_TOOLS },\n  { name: 'RichTextEditorTools' },\n);\n\nconst ɵprovideRichTextEditorTools = /* @__PURE__ */ toProvideFn(RICH_TEXT_EDITOR_TOOLS_DEF);\nconst injectRichTextEditorTools = /* @__PURE__ */ toInjectFn(RICH_TEXT_EDITOR_TOOLS_DEF);\n\n/**\n * Sets the default set (and order) of toolbar tools for every `et-rich-text-editor` in scope. A\n * per-instance `[tools]` input still wins over this. Omit both for the full default toolbar.\n */\nexport const provideRichTextEditorTools = (tools: readonly RichTextEditorTool[]) =>\n  ɵprovideRichTextEditorTools({ tools });\n\nexport { injectRichTextEditorTools };\n\n/**\n * Icon + label + wiring for a single toggle-button tool.\n *\n * `label` is only the fallback: what the toolbar renders comes from `RICH_TEXT_EDITOR_LABELS`, keyed by\n * the tool's token - which is why the built-in tables below read their labels from that set's defaults\n * rather than repeating them.\n */\nexport type RichTextEditorToolButton = {\n  icon: string;\n  label: string;\n  isActive?: (editor: RichTextEditorDirective) => boolean;\n  run: (editor: RichTextEditorDirective) => void;\n  /** Disables the button in contexts where the tool cannot apply (e.g. lists inside a table cell). */\n  isDisabled?: (editor: RichTextEditorDirective) => boolean;\n  /** Link keeps its brand color, so its icon opts out of the neutral icon recolor. */\n  allowHardcodedColor?: boolean;\n};\n\nconst richTextEditorToolButtons = (): Partial<Record<RichTextEditorTool, RichTextEditorToolButton>> => ({\n  // Undo/redo are actions, not toggles: they never report an active state, and disable themselves\n  // at the ends of the history so the bar shows whether there is anything left to take back.\n  undo: {\n    icon: 'et-undo',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.undo,\n    run: (e) => e.undo(),\n    isDisabled: (e) => !e.canUndo(),\n  },\n  redo: {\n    icon: 'et-redo',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.redo,\n    run: (e) => e.redo(),\n    isDisabled: (e) => !e.canRedo(),\n  },\n  bold: {\n    icon: 'et-bold',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.bold,\n    isActive: (e) => e.boldActive(),\n    run: (e) => e.toggleBold(),\n    isDisabled: (e) => e.codeBlockActive(),\n  },\n  italic: {\n    icon: 'et-italic',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.italic,\n    isActive: (e) => e.italicActive(),\n    run: (e) => e.toggleItalic(),\n    isDisabled: (e) => e.codeBlockActive(),\n  },\n  strike: {\n    icon: 'et-strikethrough',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.strike,\n    isActive: (e) => e.strikeActive(),\n    run: (e) => e.toggleStrikethrough(),\n    isDisabled: (e) => e.codeBlockActive(),\n  },\n  underline: {\n    icon: 'et-underline',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.underline,\n    isActive: (e) => e.underlineActive(),\n    run: (e) => e.toggleUnderline(),\n    isDisabled: (e) => e.codeBlockActive(),\n  },\n  code: {\n    icon: 'et-code',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.code,\n    isActive: (e) => e.codeActive(),\n    run: (e) => e.toggleInlineCode(),\n    isDisabled: (e) => e.codeBlockActive(),\n  },\n  bulletedList: {\n    icon: 'et-list-bulleted',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.bulletedList,\n    isActive: (e) => e.unorderedListActive(),\n    run: (e) => e.toggleUnorderedList(),\n    isDisabled: (e) => e.listToolDisabled(),\n  },\n  numberedList: {\n    icon: 'et-list-numbered',\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.numberedList,\n    isActive: (e) => e.orderedListActive(),\n    run: (e) => e.toggleOrderedList(),\n    isDisabled: (e) => e.listToolDisabled(),\n  },\n});\n\n/** The toggle-button tools, keyed by token (`divider`/`heading` are rendered specially). */\nexport const RICH_TEXT_EDITOR_TOOL_BUTTONS = /* @__PURE__ */ richTextEditorToolButtons();\n\n/**\n * A tool contributed to the toolbar via DI. Base tools are the static {@link RICH_TEXT_EDITOR_TOOL_BUTTONS};\n * opt-in tools (table, alignment, or app-defined ones) register a definition through\n * {@link RICH_TEXT_EDITOR_TOOL} so their code only ships when provided. A tool renders either as a\n * toggle button (`icon` + `isActive`/`run`) or as a custom `control` component (given an `editor` input).\n */\nexport type RichTextEditorToolDefinition = {\n  /** The `tools` token this definition renders for (e.g. `'table'`). */\n  token: string;\n  label: string;\n  icon?: string;\n  allowHardcodedColor?: boolean;\n  isActive?: (editor: RichTextEditorDirective) => boolean;\n  run?: (editor: RichTextEditorDirective) => void;\n  /** Disables the button in contexts where the tool cannot apply (e.g. lists inside a table cell). */\n  isDisabled?: (editor: RichTextEditorDirective) => boolean;\n  /** Custom control rendered instead of a toggle button; it receives the editor as an `editor` input. */\n  control?: Type<unknown>;\n  /**\n   * Intercepts a keydown inside the editor content before the editor's own handling (but after\n   * list Tab/Enter handling). Runs for every provided tool - even when its `token` is not in the\n   * visible toolbar, since it acts on content, not the button (e.g. table caret navigation must\n   * work whenever the value can contain a table). Return `true` when the event was handled - the\n   * editor then calls `preventDefault()` and syncs its value from the DOM.\n   */\n  keydown?: (editor: RichTextEditorDirective, event: KeyboardEvent) => boolean;\n\n  /**\n   * Intercepts a paste into the editor content **before** the editor's own HTML/text handling - the\n   * hook for a payload only this tool understands (the image tool takes the clipboard's image\n   * files). Return `true` when it was handled; the editor then calls `preventDefault()`.\n   */\n  paste?: (editor: RichTextEditorDirective, event: ClipboardEvent) => boolean;\n\n  /**\n   * Intercepts a drop into the editor content. Return `true` when it was handled; the editor then\n   * calls `preventDefault()`, so the browser never inserts the dropped payload itself.\n   */\n  drop?: (editor: RichTextEditorDirective, event: DragEvent) => boolean;\n\n  /**\n   * Intercepts a click inside the editor content - for content this tool owns and lets the user act\n   * on (clicking an image opens its popover). Return `true` when it was handled.\n   */\n  click?: (editor: RichTextEditorDirective, event: MouseEvent) => boolean;\n\n  /**\n   * Normalizes the editor's content into the shape this tool needs, after every render and every\n   * value sync - the hook for structure the Markdown cannot carry (the image tool marks image blocks\n   * `contenteditable=\"false\"` and keeps a line after a trailing image). It must be **value-neutral**\n   * and idempotent: whatever it changes has to serialize to the same Markdown, or the editor would\n   * write a value it never got.\n   */\n  normalize?: (root: HTMLElement) => void;\n};\n\n/** Multi-provider token opt-in tools register their {@link RichTextEditorToolDefinition} into. */\nexport const RICH_TEXT_EDITOR_TOOL = new InjectionToken<RichTextEditorToolDefinition[]>('RichTextEditorTool');\n","import { Component, computed, effect, inject, input, untracked, ViewEncapsulation } from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective } from '@ethlete/core';\nimport { IconButtonComponent } from '../../button/icon-button.component';\nimport { DividerComponent } from '../../divider';\nimport {\n  BOLD_ICON,\n  CODE_ICON,\n  IconDirective,\n  ITALIC_ICON,\n  LINK_ICON,\n  provideIcons,\n  STRIKETHROUGH_ICON,\n  UNDERLINE_ICON,\n} from '../../icon';\nimport { RichTextEditorDirective } from './headless/rich-text-editor.directive';\nimport { richTextEditorToolLabel } from './rich-text-editor-labels';\nimport {\n  RICH_TEXT_EDITOR_INLINE_TOOLS,\n  RICH_TEXT_EDITOR_TOOLS,\n  RichTextEditorToolDefinition,\n} from './rich-text-editor-tools';\n\n@Component({\n  selector: 'et-rich-text-editor-floating-toolbar',\n  templateUrl: './rich-text-editor-floating-toolbar.component.html',\n  styleUrl: './rich-text-editor-floating-toolbar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DividerComponent, IconButtonComponent, IconDirective],\n  providers: [provideIcons(BOLD_ICON, ITALIC_ICON, UNDERLINE_ICON, STRIKETHROUGH_ICON, CODE_ICON, LINK_ICON)],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-rte-floating-toolbar',\n    role: 'toolbar',\n    '[attr.aria-label]': 'labels().selectionToolbar',\n    // keep the caret/selection in the editor when the user clicks a button\n    '(mousedown)': '$event.preventDefault()',\n  },\n})\nexport class RichTextEditorFloatingToolbarComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  /** The editor whose selection this toolbar formats (passed in - the toolbar is detached from the DOM). */\n  public editor = input.required<RichTextEditorDirective>();\n\n  protected readonly TOOLS = RICH_TEXT_EDITOR_TOOLS;\n\n  /** The editor's strings - the same set, since this toolbar is part of that editor. */\n  protected labels = computed(() => this.editor().resolvedLabels());\n\n  /** The inline marks from the editor's configured tools - headings/lists stay in the static toolbar.\n   *  A token whose tool was not provided has no definition and is dropped, same as in that bar. */\n  protected inlineTools = computed(() => {\n    const defs = this.editor().toolDefs;\n\n    return this.editor()\n      .resolvedTools()\n      .filter((tool) => RICH_TEXT_EDITOR_INLINE_TOOLS.includes(tool) && defs.has(tool))\n      .map((tool) => defs.get(tool) as RichTextEditorToolDefinition);\n  });\n\n  constructor() {\n    // Detached overlay pane: the toolbar's surface IS the overlay's own surface, so it paints the\n    // overlay's registered elevation exactly (via the surface-context tracker) - the same treatment\n    // as the token popup / menu.\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    // Color still has to be re-synced here instead of cascading through the detached DOM.\n    effect(() => {\n      const contextColorProvider = this.contextColorProvider;\n\n      untracked(() => {\n        if (contextColorProvider) {\n          this.ownColorProvider.syncWithProvider(contextColorProvider);\n        }\n      });\n    });\n  }\n\n  /** A tool button's accessible name, from the label set. */\n  protected toolLabel(tool: RichTextEditorToolDefinition) {\n    return richTextEditorToolLabel(this.labels(), tool);\n  }\n}\n","@for (def of inlineTools(); track def.token; let first = $first) {\n  @if (def.token === TOOLS.LINK && !first) {\n    <et-divider orientation=\"vertical\" decorative />\n  }\n\n  <!-- Icon tools only: this bar has no room for a custom control, and every inline tool is a toggle. -->\n  @if (def.icon; as icon) {\n    <button\n      [pressed]=\"def.isActive?.(editor())\"\n      [disabled]=\"def.isDisabled?.(editor()) ?? false\"\n      [attr.aria-label]=\"toolLabel(def)\"\n      (mousedown)=\"$event.preventDefault()\"\n      (click)=\"def.run?.(editor())\"\n      color=\"surface\"\n      pressedColor=\"inherit\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n      tabindex=\"-1\"\n    >\n      <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"icon\"></i>\n    </button>\n  }\n}\n","import { signal } from '@angular/core';\nimport { injectRenderer } from '@ethlete/core';\n\nexport type EditorRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n\nexport const INLINE_TAGS = ['strong', 'em', 'del', 'u', 'code'] as const;\nexport type InlineTag = (typeof INLINE_TAGS)[number];\nexport type ListTag = 'ul' | 'ol';\nexport type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport const HEADING_SELECTOR = 'h1, h2, h3, h4, h5, h6';\n/** Must list only block-level containers: an inline element re-tagged in place loses its mark, so a\n *  bare `<strong>` under the root has to be wrapped by the heading rather than turned into one. */\nexport const BLOCK_SELECTOR = 'p, div, blockquote, pre, li, figure, section, article';\n\n/** Alignment persists as a class, not an inline `text-align`, so rendered content passes a strict `style-src`. */\nexport const ALIGN_CLASS_PREFIX = 'et-rte-align-';\n\nexport const alignClassOf = (el: Element) =>\n  [...el.classList].find((cls) => cls.startsWith(ALIGN_CLASS_PREFIX)) ?? null;\n\nexport type EditableSelection = {\n  selection: Selection;\n  range: Range;\n};\n\nexport type RichTextMarkStates = {\n  bold: boolean;\n  italic: boolean;\n  strike: boolean;\n  underline: boolean;\n  /** Inline code only - the caret being inside a fenced code block reports {@link codeBlock}. */\n  code: boolean;\n  unorderedList: boolean;\n  orderedList: boolean;\n  link: boolean;\n  blockquote: boolean;\n  codeBlock: boolean;\n  heading: number | null;\n  tableCell: boolean;\n};\n\nexport const createRichTextEditorDomCore = (doc: Document, renderer: EditorRenderer) => {\n  const root = signal<HTMLElement | null>(null);\n\n  let lastRange: Range | null = null;\n\n  const getSelection = (): EditableSelection | null => {\n    const el = root();\n\n    if (!el) {\n      return null;\n    }\n\n    const selection = doc.getSelection();\n\n    if (!selection || selection.rangeCount === 0) {\n      return null;\n    }\n\n    const range = selection.getRangeAt(0);\n\n    if (!el.contains(range.commonAncestorContainer)) {\n      return null;\n    }\n\n    lastRange = range.cloneRange();\n\n    return { selection, range };\n  };\n\n  const restoreSelection = () => {\n    if (getSelection()) return;\n\n    const el = root();\n\n    if (!el || !lastRange) return;\n\n    el.focus();\n    doc.getSelection()?.removeAllRanges();\n    doc.getSelection()?.addRange(lastRange);\n  };\n\n  const closestWithin = (node: Node | null, selector: string): HTMLElement | null => {\n    const el = root();\n\n    if (!el) {\n      return null;\n    }\n\n    let current: HTMLElement | null = node instanceof HTMLElement ? node : (node?.parentElement ?? null);\n\n    while (current && el.contains(current)) {\n      if (current.matches(selector)) {\n        return current;\n      }\n\n      current = current.parentElement;\n    }\n\n    return null;\n  };\n\n  const selectNodeContents = (node: Node) => {\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    const range = doc.createRange();\n    range.selectNodeContents(node);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  const collapseAfter = (node: Node) => {\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    const range = doc.createRange();\n    range.setStartAfter(node);\n    range.collapse(true);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  /** The added space must be a no-break space: a plain trailing space at the end of a line is\n   *  CSS-collapsed and Chrome drops it from the text node on the next keystroke, gluing the word to\n   *  the inline after all. Serialization normalizes `&nbsp;` back to a plain space. */\n  const collapseAfterInline = (node: Node) => {\n    const parent = node.parentNode;\n    const next = node.nextSibling;\n    const endsLine = !next || (next instanceof Text && next.data.length === 0);\n\n    if (parent && endsLine) {\n      const space = renderer.createText('\\u00a0');\n      renderer.insertBefore(parent, space, next);\n      collapseAfter(space);\n\n      return;\n    }\n\n    collapseAfter(node);\n  };\n\n  const selectAcross = (first: Node, last: Node) => {\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    const range = doc.createRange();\n    range.setStartBefore(first);\n    range.setEndAfter(last);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  const collapseInto = (node: Node, offset: number) => {\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    const range = doc.createRange();\n    range.setStart(node, offset);\n    range.collapse(true);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  const unwrapElement = (el: HTMLElement) => {\n    const parent = el.parentNode;\n\n    if (!parent) {\n      return;\n    }\n\n    while (el.firstChild) {\n      renderer.insertBefore(parent, el.firstChild, el);\n    }\n\n    renderer.removeChild(parent, el);\n  };\n\n  const replaceWith = (oldEl: HTMLElement, newNodes: Node[]) => {\n    const parent = oldEl.parentNode;\n\n    if (!parent) {\n      return;\n    }\n\n    newNodes.forEach((node) => renderer.insertBefore(parent, node, oldEl));\n    renderer.removeChild(parent, oldEl);\n  };\n\n  const collectDescendants = (node: Node, selector: string): HTMLElement[] => {\n    const out: HTMLElement[] = [];\n\n    node.childNodes.forEach((child) => {\n      if (child instanceof HTMLElement) {\n        if (child.matches(selector)) {\n          out.push(child);\n        }\n\n        out.push(...collectDescendants(child, selector));\n      }\n    });\n\n    return out;\n  };\n\n  const childrenByTag = (parent: HTMLElement, tag: string): HTMLElement[] => {\n    const out: HTMLElement[] = [];\n\n    Array.from(parent.children).forEach((child) => {\n      if (child instanceof HTMLElement && child.tagName.toLowerCase() === tag) {\n        out.push(child);\n      }\n    });\n\n    return out;\n  };\n\n  const blocksInRange = (range: Range): ChildNode[] => {\n    const el = root();\n    const blocks: ChildNode[] = [];\n\n    el?.childNodes.forEach((child) => {\n      if (range.intersectsNode(child)) {\n        blocks.push(child);\n      }\n    });\n\n    return blocks;\n  };\n\n  const isBlockEmpty = (el: HTMLElement) => (el.textContent ?? '').trim().length === 0;\n\n  // A mark applied to whitespace at the edge of the selection is invisible and has no markdown\n  // representation, so the range is shrunk inward past it before (un)marking.\n  const trimRangeWhitespace = (range: Range) => {\n    if (range.collapsed) {\n      return;\n    }\n\n    const { startContainer, endContainer } = range;\n\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      const data = startContainer.textContent ?? '';\n      const limit = startContainer === endContainer ? range.endOffset : data.length;\n      let offset = range.startOffset;\n\n      while (offset < limit && /\\s/.test(data[offset] ?? '')) {\n        offset++;\n      }\n\n      range.setStart(startContainer, offset);\n    }\n\n    if (range.collapsed) {\n      return;\n    }\n\n    if (endContainer.nodeType === Node.TEXT_NODE) {\n      const data = endContainer.textContent ?? '';\n      const limit = endContainer === startContainer ? range.startOffset : 0;\n      let offset = range.endOffset;\n\n      while (offset > limit && /\\s/.test(data[offset - 1] ?? '')) {\n        offset--;\n      }\n\n      range.setEnd(endContainer, offset);\n    }\n  };\n\n  // A selection can be anchored on an element boundary rather than in a text node, and marks below\n  // such an anchor are invisible to an ancestor walk - so mark detection must resolve the leaf here\n  // first rather than read the raw container.\n  const resolveBoundaryNode = (container: Node, offset: number): Node => {\n    let node: Node = container;\n    let o = offset;\n\n    while (node.nodeType === Node.ELEMENT_NODE && node.childNodes.length > 0) {\n      node = node.childNodes[Math.min(o, node.childNodes.length - 1)] as Node;\n      o = 0;\n    }\n\n    return node;\n  };\n\n  const resolveStartNode = (range: Range): Node => resolveBoundaryNode(range.startContainer, range.startOffset);\n\n  const markStates = (): RichTextMarkStates | null => {\n    const editable = getSelection();\n\n    if (!editable) {\n      return null;\n    }\n\n    const node = resolveStartNode(editable.range);\n    const headingEl = closestWithin(node, HEADING_SELECTOR);\n    const codeBlock = !!closestWithin(node, 'pre');\n\n    return {\n      bold: !!closestWithin(node, 'strong'),\n      italic: !!closestWithin(node, 'em'),\n      strike: !!closestWithin(node, 'del'),\n      underline: !!closestWithin(node, 'u'),\n      code: !codeBlock && !!closestWithin(node, 'code'),\n      unorderedList: !!closestWithin(node, 'ul'),\n      orderedList: !!closestWithin(node, 'ol'),\n      link: !!closestWithin(node, 'a'),\n      blockquote: !!closestWithin(node, 'blockquote'),\n      codeBlock,\n      heading: headingEl ? Number(headingEl.tagName[1]) : null,\n      tableCell: !!closestWithin(node, 'td, th'),\n    };\n  };\n\n  const ensureCaret = () => {\n    const el = root();\n\n    if (!el) {\n      return false;\n    }\n\n    if (getSelection()) {\n      return true;\n    }\n\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return false;\n    }\n\n    const range = doc.createRange();\n\n    if (lastRange && el.contains(lastRange.commonAncestorContainer)) {\n      range.setStart(lastRange.startContainer, lastRange.startOffset);\n      range.collapse(true);\n    } else {\n      range.selectNodeContents(el);\n      range.collapse(false);\n    }\n\n    selection.removeAllRanges();\n    selection.addRange(range);\n\n    return true;\n  };\n\n  const insertToken = (node: Node) => {\n    const editable = getSelection();\n\n    if (!editable) {\n      return;\n    }\n\n    const { selection, range } = editable;\n\n    range.deleteContents();\n    range.insertNode(node);\n    range.setStartAfter(node);\n    range.collapse(true);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  return {\n    doc,\n    renderer,\n    root,\n    getSelection,\n    restoreSelection,\n    closestWithin,\n    selectNodeContents,\n    collapseAfter,\n    collapseAfterInline,\n    selectAcross,\n    collapseInto,\n    unwrapElement,\n    replaceWith,\n    collectDescendants,\n    childrenByTag,\n    blocksInRange,\n    isBlockEmpty,\n    trimRangeWhitespace,\n    resolveBoundaryNode,\n    resolveStartNode,\n    markStates,\n    ensureCaret,\n    insertToken,\n  };\n};\n\nexport type RichTextEditorDomCore = ReturnType<typeof createRichTextEditorDomCore>;\n","import { InjectionToken } from '@angular/core';\nimport { RichTextEditorDomAutoformat } from './rich-text-editor-dom-autoformat';\nimport { RichTextEditorDomBlockquote } from './rich-text-editor-dom-blockquote';\nimport { RichTextEditorDomCodeBlock } from './rich-text-editor-dom-code-block';\nimport { RichTextEditorDomCore } from './rich-text-editor-dom-core';\nimport { RichTextEditorDomLists } from './rich-text-editor-dom-lists';\nimport { RichTextEditorDomHeadings } from './rich-text-editor-dom-headings';\nimport { RichTextEditorDomLinks } from './rich-text-editor-dom-links';\n\n/**\n * Nothing outside a provider may import these implementations, only these types: an eager import\n * pulls the domain's code into a bundle that never asks for it.\n */\nexport type RichTextEditorDomFeatures = {\n  headings?: RichTextEditorDomHeadings;\n  links?: RichTextEditorDomLinks;\n  blockquote?: RichTextEditorDomBlockquote;\n  codeBlock?: RichTextEditorDomCodeBlock;\n  autoformat?: RichTextEditorDomAutoformat;\n};\n\n/**\n * `features` is the editor's **live** record, so a feature that builds on others must read it when\n * it runs, never destructure it at construction - registration order is the consumer's provider order.\n */\nexport type RichTextEditorDomFeatureContext = {\n  core: RichTextEditorDomCore;\n  lists: RichTextEditorDomLists;\n  features: RichTextEditorDomFeatures;\n};\n\nexport type RichTextEditorDomFeature = {\n  [K in keyof RichTextEditorDomFeatures]-?: {\n    key: K;\n    create: (ctx: RichTextEditorDomFeatureContext) => NonNullable<RichTextEditorDomFeatures[K]>;\n  };\n}[keyof RichTextEditorDomFeatures];\n\nexport const RICH_TEXT_EDITOR_DOM_FEATURE = new InjectionToken<RichTextEditorDomFeature[]>('RichTextEditorDomFeature');\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\nimport { RichTextEditorSelectionOffsets } from './rich-text-editor-history';\n\nconst locateTextOffset = (root: HTMLElement, target: number): { node: Node; offset: number } => {\n  const walker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n  let consumed = 0;\n  let last: Text | null = null;\n\n  while (walker.nextNode()) {\n    const text = walker.currentNode as Text;\n\n    if (consumed + text.length >= target) return { node: text, offset: target - consumed };\n\n    consumed += text.length;\n    last = text;\n  }\n\n  return last ? { node: last, offset: last.length } : { node: root, offset: root.childNodes.length };\n};\n\nexport const createRichTextEditorDomHistory = (core: RichTextEditorDomCore) => {\n  const { doc, root, getSelection } = core;\n\n  const readSelectionOffsets = (): RichTextEditorSelectionOffsets | null => {\n    const el = root();\n    const editable = getSelection();\n\n    if (!el || !editable) return null;\n\n    const { range } = editable;\n    const prefix = doc.createRange();\n\n    prefix.setStart(el, 0);\n    prefix.setEnd(range.startContainer, range.startOffset);\n\n    // Range.toString() concatenates the text nodes it spans - the same metric locateTextOffset walks.\n    const start = prefix.toString().length;\n\n    return { start, end: start + range.toString().length };\n  };\n\n  const restoreSelectionOffsets = (offsets: RichTextEditorSelectionOffsets | null) => {\n    const el = root();\n    const selection = doc.getSelection();\n\n    if (!el || !selection) return;\n\n    const range = doc.createRange();\n\n    if (offsets) {\n      const start = locateTextOffset(el, offsets.start);\n      const end = offsets.end === offsets.start ? start : locateTextOffset(el, offsets.end);\n\n      range.setStart(start.node, start.offset);\n      range.setEnd(end.node, end.offset);\n    } else {\n      range.selectNodeContents(el);\n      range.collapse(false);\n    }\n\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  return { readSelectionOffsets, restoreSelectionOffsets };\n};\n\nexport type RichTextEditorDomHistory = ReturnType<typeof createRichTextEditorDomHistory>;\n","import { INLINE_TAGS, RichTextEditorDomCore, InlineTag } from './rich-text-editor-dom-core';\n\nexport const createRichTextEditorInlineMarks = (core: RichTextEditorDomCore) => {\n  const {\n    doc,\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    selectNodeContents,\n    selectAcross,\n    unwrapElement,\n    replaceWith,\n    collectDescendants,\n    trimRangeWhitespace,\n    resolveBoundaryNode,\n  } = core;\n\n  // An inline wrapper must stay inside its block: a range crossing <li>/<p> boundaries would clone\n  // the partially covered blocks into the wrapper, which serializes to broken markdown.\n  const blockSlices = (range: Range): Range[] => {\n    const el = root();\n    const startBlock = closestWithin(range.startContainer, 'li, p, td, th');\n    const endBlock = closestWithin(range.endContainer, 'li, p, td, th');\n\n    if (!el || startBlock === endBlock) {\n      return [range];\n    }\n\n    const leaves: Node[] = [];\n\n    el.childNodes.forEach((child) => {\n      if (!range.intersectsNode(child)) {\n        return;\n      }\n\n      if (child instanceof HTMLElement && (child.tagName === 'UL' || child.tagName === 'OL')) {\n        child.childNodes.forEach((item) => {\n          if (range.intersectsNode(item)) {\n            leaves.push(item);\n          }\n        });\n      } else if (child instanceof HTMLTableElement) {\n        for (const section of child.children) {\n          if (!(section instanceof HTMLTableSectionElement)) continue;\n\n          for (const tr of section.children) {\n            if (!(tr instanceof HTMLTableRowElement)) continue;\n\n            for (const cell of tr.cells) if (range.intersectsNode(cell)) leaves.push(cell);\n          }\n        }\n      } else {\n        leaves.push(child);\n      }\n    });\n\n    const slices: Range[] = [];\n\n    leaves.forEach((leaf) => {\n      const slice = doc.createRange();\n      slice.selectNodeContents(leaf);\n\n      if (leaf.contains(range.startContainer)) {\n        slice.setStart(range.startContainer, range.startOffset);\n      }\n\n      if (leaf.contains(range.endContainer)) {\n        slice.setEnd(range.endContainer, range.endOffset);\n      }\n\n      trimRangeWhitespace(slice);\n\n      if (!slice.collapsed && slice.toString().trim().length > 0) {\n        slices.push(slice);\n      }\n    });\n\n    return slices;\n  };\n\n  const wrapInline = (range: Range, tag: InlineTag) => {\n    const wrappers: HTMLElement[] = [];\n\n    blockSlices(range).forEach((slice) => {\n      const wrapper = renderer.createElement(tag);\n\n      try {\n        slice.surroundContents(wrapper);\n      } catch {\n        renderer.appendChild(wrapper, slice.extractContents());\n        slice.insertNode(wrapper);\n      }\n\n      collectDescendants(wrapper, tag).forEach((nested) => unwrapElement(nested));\n      wrappers.push(wrapper);\n    });\n\n    const first = wrappers[0];\n    const last = wrappers[wrappers.length - 1];\n\n    if (!first || !last) {\n      return;\n    }\n\n    if (first === last) {\n      selectNodeContents(first);\n\n      return;\n    }\n\n    // markStates() reads the active marks off the selection's start container, so the restored\n    // selection must start inside the first wrapper rather than before it (selectAcross).\n    const selection = doc.getSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    const restored = doc.createRange();\n    restored.setStart(first, 0);\n    restored.setEnd(last, last.childNodes.length);\n    selection.removeAllRanges();\n    selection.addRange(restored);\n  };\n\n  const pathFromAncestor = (ancestor: Node, node: Node): number[] | null => {\n    const path: number[] = [];\n    let current: Node | null = node;\n\n    while (current && current !== ancestor) {\n      const parent: Node | null = current.parentNode;\n\n      if (!parent) {\n        return null;\n      }\n\n      path.unshift(Array.from(parent.childNodes).indexOf(current as ChildNode));\n      current = parent;\n    }\n\n    return current === ancestor ? path : null;\n  };\n\n  const resolvePath = (ancestor: Node, path: number[]): Node | null => {\n    let current: Node = ancestor;\n\n    for (const index of path) {\n      const next: Node | undefined = current.childNodes[index];\n\n      if (!next) {\n        return null;\n      }\n\n      current = next;\n    }\n\n    return current;\n  };\n\n  // `range.cloneContents()` collapses to plain text whenever the range's start and end share a\n  // container, silently dropping nested marks; trim a clone of `markEl` down to the span instead.\n  const extractMarkedMiddle = (markEl: HTMLElement, range: Range): Node[] => {\n    const startPath = pathFromAncestor(markEl, range.startContainer);\n    const endPath = pathFromAncestor(markEl, range.endContainer);\n\n    if (!startPath || !endPath) {\n      return Array.from(range.cloneContents().childNodes);\n    }\n\n    const clone = markEl.cloneNode(true) as HTMLElement;\n    const clonedStart = resolvePath(clone, startPath);\n    const clonedEnd = resolvePath(clone, endPath);\n\n    if (!clonedStart || !clonedEnd) {\n      return Array.from(range.cloneContents().childNodes);\n    }\n\n    const trimAfter = doc.createRange();\n    trimAfter.setStart(clonedEnd, range.endOffset);\n    trimAfter.setEnd(clone, clone.childNodes.length);\n    trimAfter.deleteContents();\n\n    const trimBefore = doc.createRange();\n    trimBefore.setStart(clone, 0);\n    trimBefore.setEnd(clonedStart, range.startOffset);\n    trimBefore.deleteContents();\n\n    return Array.from(clone.childNodes);\n  };\n\n  // A mark wrapping nothing but whitespace has no markdown representation (`** **` is not valid\n  // CommonMark emphasis), so a split must never leave one behind.\n  const markSegmentNodes = (frag: DocumentFragment, tag: InlineTag): Node[] => {\n    const text = frag.textContent ?? '';\n\n    if (text.length === 0) {\n      return [];\n    }\n\n    if (text.trim().length === 0) {\n      return Array.from(frag.childNodes);\n    }\n\n    const wrapper = renderer.createElement(tag);\n    renderer.appendChild(wrapper, frag);\n\n    return [wrapper];\n  };\n\n  const unwrapInline = (range: Range, tag: InlineTag) => {\n    const startEl = closestWithin(range.startContainer, tag);\n    const endEl = closestWithin(range.endContainer, tag);\n\n    if (startEl && startEl === endEl) {\n      const beforeRange = doc.createRange();\n      beforeRange.selectNodeContents(startEl);\n      beforeRange.setEnd(range.startContainer, range.startOffset);\n\n      const afterRange = doc.createRange();\n      afterRange.selectNodeContents(startEl);\n      afterRange.setStart(range.endContainer, range.endOffset);\n\n      const beforeFrag = beforeRange.cloneContents();\n      const afterFrag = afterRange.cloneContents();\n      const selectedNodes = extractMarkedMiddle(startEl, range);\n      const replacement: Node[] = [];\n\n      replacement.push(...markSegmentNodes(beforeFrag, tag));\n      selectedNodes.forEach((node) => replacement.push(node));\n      replacement.push(...markSegmentNodes(afterFrag, tag));\n\n      replaceWith(startEl, replacement);\n\n      const first = selectedNodes[0];\n      const last = selectedNodes[selectedNodes.length - 1];\n\n      if (first && last) {\n        selectAcross(first, last);\n      }\n\n      return;\n    }\n\n    const affected = new Set<HTMLElement>();\n\n    if (startEl) affected.add(startEl);\n    if (endEl) affected.add(endEl);\n\n    const el = root();\n\n    if (el) {\n      collectDescendants(el, tag).forEach((marked) => {\n        if (range.intersectsNode(marked)) {\n          affected.add(marked);\n        }\n      });\n    }\n\n    affected.forEach((marked) => unwrapElement(marked));\n  };\n\n  // wrapInline's surroundContents fallback can leave an untouched same-tag sibling next to the new\n  // wrapper; left unmerged, markdown serialization emits a duplicated `**` delimiter per element.\n  const mergeAdjacentSameTag = (tag: InlineTag) => {\n    const el = root();\n\n    if (!el) {\n      return;\n    }\n\n    let merged = true;\n\n    while (merged) {\n      merged = false;\n\n      for (const node of collectDescendants(el, tag)) {\n        const next = node.nextSibling;\n\n        if (next instanceof HTMLElement && next.tagName.toLowerCase() === tag) {\n          while (next.firstChild) {\n            renderer.appendChild(node, next.firstChild);\n          }\n\n          renderer.removeChild(next.parentNode as Node, next);\n          merged = true;\n\n          break;\n        }\n      }\n    }\n  };\n\n  const pruneEmptyInline = () => {\n    const el = root();\n\n    if (!el) {\n      return;\n    }\n\n    let removed = true;\n\n    while (removed) {\n      removed = false;\n\n      for (const t of INLINE_TAGS) {\n        for (const node of collectDescendants(el, t)) {\n          // A <code> directly inside a <pre> is an emptied fenced code block, not a stranded mark\n          // shell - removing it leaves a bare <pre> the Markdown pipeline cannot round-trip.\n          if (t === 'code' && node.parentElement?.tagName === 'PRE') continue;\n\n          // extractContents() drains a wholly-selected text node via replaceData rather than removing\n          // it, so an \"empty\" shell still holds a zero-length Text child: test textContent, not\n          // childNodes.length.\n          if ((node.textContent ?? '').length === 0) {\n            renderer.removeChild(node.parentNode as Node, node);\n            removed = true;\n          }\n        }\n      }\n    }\n  };\n\n  const toggleInline = (tag: InlineTag) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable || editable.range.collapsed) {\n      return;\n    }\n\n    trimRangeWhitespace(editable.range);\n\n    if (editable.range.collapsed) {\n      return;\n    }\n\n    const { range } = editable;\n    const startLeaf = resolveBoundaryNode(range.startContainer, range.startOffset);\n    const endLeaf = resolveBoundaryNode(range.endContainer, range.endOffset);\n    const fullyMarked = !!closestWithin(startLeaf, tag) && !!closestWithin(endLeaf, tag);\n\n    if (fullyMarked) {\n      unwrapInline(range, tag);\n    } else {\n      wrapInline(range, tag);\n    }\n\n    pruneEmptyInline();\n    mergeAdjacentSameTag(tag);\n    el.normalize();\n  };\n\n  const inlineMarkTags = new Set<string>(INLINE_TAGS.map((tag) => tag.toUpperCase()));\n\n  const activeInlineTags = (): InlineTag[] => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!editable || !el) return [];\n\n    const tags: InlineTag[] = [];\n    const start = editable.range.startContainer;\n    let node: HTMLElement | null = start.nodeType === Node.ELEMENT_NODE ? (start as HTMLElement) : start.parentElement;\n\n    while (node && node !== el) {\n      if (inlineMarkTags.has(node.tagName)) tags.push(node.tagName.toLowerCase() as InlineTag);\n      node = node.parentElement;\n    }\n\n    return tags;\n  };\n\n  const splitInlineAncestorsAtCaret = (range: Range) => {\n    const el = root();\n\n    if (!el) return;\n\n    let guard = 0;\n\n    while (guard++ < 32) {\n      const start = range.startContainer;\n      let mark: HTMLElement | null =\n        start.nodeType === Node.ELEMENT_NODE ? (start as HTMLElement) : start.parentElement;\n\n      while (mark && mark !== el && !inlineMarkTags.has(mark.tagName)) mark = mark.parentElement;\n\n      if (!mark || mark === el || !inlineMarkTags.has(mark.tagName)) return;\n\n      const tail = doc.createRange();\n      tail.setStart(range.startContainer, range.startOffset);\n      tail.setEnd(mark, mark.childNodes.length);\n      const frag = tail.extractContents();\n\n      if ((frag.textContent ?? '').length > 0) {\n        const clone = mark.cloneNode(false) as HTMLElement;\n        while (frag.firstChild) renderer.appendChild(clone, frag.firstChild);\n        renderer.insertBefore(mark.parentNode as Node, clone, mark.nextSibling);\n      }\n\n      range.setStartAfter(mark);\n      range.collapse(true);\n    }\n  };\n\n  const insertInlineText = (text: string, tags: InlineTag[]) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!editable || !el || !editable.range.collapsed) return;\n\n    const range = editable.range;\n\n    splitInlineAncestorsAtCaret(range);\n\n    let content: Node = renderer.createText(text);\n\n    for (const tag of tags) {\n      const wrapper = renderer.createElement(tag) as HTMLElement;\n      renderer.appendChild(wrapper, content);\n      content = wrapper;\n    }\n\n    range.insertNode(content);\n\n    let deepest: Node = content;\n    while (deepest.firstChild) deepest = deepest.firstChild;\n\n    // Chrome removes a CSS-collapsed trailing space from the text node on the next keystroke, which\n    // snaps the caret back inside the mark it just escaped; a no-break space survives that.\n    const next = content.nextSibling;\n    const endsLine = !next || (next instanceof Text && next.data.length === 0);\n\n    if (endsLine && deepest instanceof Text && deepest.data.endsWith(' ')) {\n      deepest.data = deepest.data.replace(/ +$/, (spaces) => '\\u00a0'.repeat(spaces.length));\n    }\n\n    const caret = doc.createRange();\n    caret.setStart(deepest, (deepest.textContent ?? '').length);\n    caret.collapse(true);\n    const selection = doc.getSelection();\n    selection?.removeAllRanges();\n    selection?.addRange(caret);\n\n    pruneEmptyInline();\n  };\n\n  return { toggleInline, activeInlineTags, insertInlineText };\n};\n\nexport type RichTextEditorDomInlineMarks = ReturnType<typeof createRichTextEditorInlineMarks>;\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\nimport { RichTextEditorDomFeatures } from './rich-text-editor-dom-features';\nimport { RichTextEditorDomLists } from './rich-text-editor-dom-lists';\n\n/** Every optional domain is read off `features` per event, never bound up front. */\nexport const createRichTextEditorKeymap = (\n  core: RichTextEditorDomCore,\n  deps: {\n    lists: RichTextEditorDomLists;\n    features: RichTextEditorDomFeatures;\n  },\n) => {\n  const { doc, renderer, root, getSelection, closestWithin, collapseInto, isBlockEmpty } = core;\n  const { exitListItem, mergeParagraphIntoPreviousList } = deps.lists;\n  const { features } = deps;\n\n  const handleBackspace = () => {\n    const editable = getSelection();\n\n    if (!editable || !editable.range.collapsed) {\n      return false;\n    }\n\n    if (features.codeBlock?.codeBlockBackspace()) {\n      return true;\n    }\n\n    const node = editable.range.startContainer;\n    const li = closestWithin(node, 'li');\n\n    if (li && isBlockEmpty(li)) {\n      exitListItem(li);\n\n      return true;\n    }\n\n    const paragraph = closestWithin(node, 'p');\n\n    if (paragraph && isBlockEmpty(paragraph)) {\n      // An empty first line sitting directly above a table cannot merge upward.\n      const next = paragraph.nextElementSibling;\n\n      if (!paragraph.previousElementSibling && next instanceof HTMLTableElement) {\n        const el = root();\n        let cell: HTMLTableCellElement | null = null;\n\n        for (const section of next.children) {\n          if (section instanceof HTMLTableSectionElement) {\n            for (const tr of section.children) {\n              if (tr instanceof HTMLTableRowElement && tr.cells[0]) {\n                cell = tr.cells[0];\n                break;\n              }\n            }\n          }\n\n          if (cell) break;\n        }\n\n        if (el) renderer.removeChild(el, paragraph);\n        if (cell) collapseInto(cell, 0);\n\n        return true;\n      }\n\n      return mergeParagraphIntoPreviousList(paragraph);\n    }\n\n    return false;\n  };\n\n  const handleEnter = () => {\n    const editable = getSelection();\n\n    if (features.codeBlock?.codeBlockEnter()) {\n      return true;\n    }\n\n    if (!editable || !editable.range.collapsed) {\n      return false;\n    }\n\n    const li = closestWithin(editable.range.startContainer, 'li');\n\n    if (li && isBlockEmpty(li)) {\n      exitListItem(li);\n\n      return true;\n    }\n\n    return (features.blockquote?.blockquoteEnter() || features.headings?.headingEnter()) ?? false;\n  };\n\n  const codeExit = (key: string) => {\n    if (key !== 'ArrowRight' && key !== 'ArrowLeft') return false;\n\n    const editable = getSelection();\n\n    if (!editable || !editable.range.collapsed) return false;\n\n    const { range } = editable;\n    const code = closestWithin(range.startContainer, 'code');\n\n    if (!code || closestWithin(range.startContainer, 'pre')) return false;\n\n    const emptyToward = (side: 'start' | 'end') => {\n      const r = doc.createRange();\n      r.selectNodeContents(code);\n      if (side === 'end') r.setStart(range.startContainer, range.startOffset);\n      else r.setEnd(range.startContainer, range.startOffset);\n\n      return r.toString().length === 0;\n    };\n\n    let target: Node;\n    let offset: number;\n\n    // Moving the caret past the code's boundary does not stick - the browser snaps it back inside.\n    // It has to land in a real text node; the zero-width space is stripped on serialize.\n    if (key === 'ArrowRight' && emptyToward('end')) {\n      const next = code.nextSibling;\n\n      if (next && next.nodeType === Node.TEXT_NODE) {\n        target = next;\n        offset = 0;\n      } else {\n        target = renderer.createText('\\u200b');\n        renderer.insertBefore(code.parentNode as Node, target, code.nextSibling);\n        offset = 1;\n      }\n    } else if (key === 'ArrowLeft' && emptyToward('start')) {\n      const previous = code.previousSibling;\n\n      if (previous && previous.nodeType === Node.TEXT_NODE) {\n        target = previous;\n        offset = previous.textContent?.length ?? 0;\n      } else {\n        target = renderer.createText('\\u200b');\n        renderer.insertBefore(code.parentNode as Node, target, code);\n        offset = 0;\n      }\n    } else {\n      return false;\n    }\n\n    const caret = doc.createRange();\n    caret.setStart(target, offset);\n    caret.collapse(true);\n    const selection = doc.getSelection();\n    selection?.removeAllRanges();\n    selection?.addRange(caret);\n\n    return true;\n  };\n\n  return { handleBackspace, handleEnter, codeExit };\n};\n\nexport type RichTextEditorDomKeymap = ReturnType<typeof createRichTextEditorKeymap>;\n","import { RichTextEditorDomCore, ListTag } from './rich-text-editor-dom-core';\n\nexport const createRichTextEditorLists = (core: RichTextEditorDomCore) => {\n  const {\n    doc,\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    selectNodeContents,\n    selectAcross,\n    collapseInto,\n    replaceWith,\n    childrenByTag,\n    blocksInRange,\n  } = core;\n\n  const unwrapList = (list: HTMLElement) => {\n    const paragraphs: Node[] = [];\n\n    childrenByTag(list, 'li').forEach((li) => {\n      const paragraph = renderer.createElement('p');\n\n      while (li.firstChild) {\n        renderer.appendChild(paragraph, li.firstChild);\n      }\n\n      paragraphs.push(paragraph);\n    });\n\n    replaceWith(list, paragraphs);\n\n    const first = paragraphs[0];\n    const last = paragraphs[paragraphs.length - 1];\n\n    if (first && last) {\n      selectAcross(first, last);\n    }\n  };\n\n  const exitListItem = (li: HTMLElement) => {\n    const list = li.parentElement;\n    const parent = list?.parentNode;\n\n    if (!list || !parent) {\n      return;\n    }\n\n    if (list.parentElement instanceof HTMLElement && list.parentElement.tagName === 'LI') {\n      outdentListItem();\n\n      return;\n    }\n\n    const tag = list.tagName.toLowerCase() as ListTag;\n\n    const trailing: HTMLElement[] = [];\n    let sibling = li.nextElementSibling;\n\n    while (sibling) {\n      trailing.push(sibling as HTMLElement);\n      sibling = sibling.nextElementSibling;\n    }\n\n    const paragraph = renderer.createElement('p');\n    const refAfterList = list.nextSibling;\n\n    // Carry over the <br> a browser inserts in an empty item: without one a bare <p> gets no line\n    // box, and the caret falls through to the next focusable position.\n    while (li.firstChild) {\n      renderer.appendChild(paragraph, li.firstChild);\n    }\n\n    if (!paragraph.firstChild) {\n      renderer.appendChild(paragraph, renderer.createElement('br'));\n    }\n\n    if (trailing.length > 0) {\n      const continuation = renderer.createElement(tag);\n      trailing.forEach((item) => renderer.appendChild(continuation, item));\n      renderer.insertBefore(parent, continuation, refAfterList);\n      renderer.insertBefore(parent, paragraph, continuation);\n    } else {\n      renderer.insertBefore(parent, paragraph, refAfterList);\n    }\n\n    renderer.removeChild(list, li);\n\n    if (childrenByTag(list, 'li').length === 0) {\n      renderer.removeChild(parent, list);\n    }\n\n    collapseInto(paragraph, 0);\n  };\n\n  const mergeParagraphIntoPreviousList = (paragraph: HTMLElement) => {\n    const previous = paragraph.previousElementSibling;\n    const tag = previous?.tagName.toLowerCase();\n\n    if (!previous || (tag !== 'ul' && tag !== 'ol')) {\n      return false;\n    }\n\n    const items = childrenByTag(previous as HTMLElement, 'li');\n    const lastLi = items[items.length - 1];\n\n    if (!lastLi) {\n      return false;\n    }\n\n    const parent = paragraph.parentNode;\n\n    if (parent) {\n      renderer.removeChild(parent, paragraph);\n    }\n\n    const selection = doc.getSelection();\n\n    if (selection) {\n      const range = doc.createRange();\n      range.selectNodeContents(lastLi);\n      range.collapse(false);\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n\n    return true;\n  };\n\n  const toggleList = (listTag: ListTag) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable) {\n      return;\n    }\n\n    const existingList = closestWithin(editable.range.startContainer, listTag);\n\n    if (existingList) {\n      unwrapList(existingList);\n      el.normalize();\n\n      return;\n    }\n\n    // Must switch the list's type in place: falling through to the block-wrapping path below would\n    // nest the list's <li>s inside a new <li>, going one level deeper on every toggle.\n    const otherList = closestWithin(editable.range.startContainer, listTag === 'ul' ? 'ol' : 'ul');\n\n    if (otherList) {\n      const converted = renderer.createElement(listTag);\n\n      while (otherList.firstChild) {\n        renderer.appendChild(converted, otherList.firstChild);\n      }\n\n      replaceWith(otherList, [converted]);\n      selectNodeContents(converted);\n      el.normalize();\n\n      return;\n    }\n\n    const rawBlocks = blocksInRange(editable.range);\n    const blocks = rawBlocks.filter((block) => !(block instanceof HTMLElement && block.tagName === 'TABLE'));\n\n    if (rawBlocks.length > 0 && blocks.length === 0) {\n      return;\n    }\n\n    const list = renderer.createElement(listTag);\n\n    if (blocks.length === 0) {\n      const li = renderer.createElement('li');\n      renderer.appendChild(li, renderer.createElement('br'));\n      renderer.appendChild(list, li);\n      renderer.appendChild(el, list);\n      collapseInto(li, 0);\n\n      return;\n    }\n\n    blocks.forEach((block) => {\n      // A block that is itself a list contributes its items directly - wrapping it would nest its\n      // <li>s inside a new <li>.\n      if (block instanceof HTMLElement && (block.tagName === 'UL' || block.tagName === 'OL')) {\n        childrenByTag(block, 'li').forEach((item) => renderer.appendChild(list, item));\n\n        return;\n      }\n\n      const li = renderer.createElement('li');\n\n      if (block.nodeType === Node.TEXT_NODE) {\n        renderer.appendChild(li, block.cloneNode(true));\n      } else {\n        while (block.firstChild) {\n          renderer.appendChild(li, block.firstChild);\n        }\n      }\n\n      renderer.appendChild(list, li);\n    });\n\n    renderer.insertBefore(el, list, blocks[0] ?? null);\n    blocks.forEach((block) => {\n      if (block.parentNode === el) {\n        renderer.removeChild(el, block);\n      }\n    });\n\n    selectNodeContents(list);\n    el.normalize();\n  };\n\n  const listItemAtCaret = (): HTMLElement | null => {\n    const editable = getSelection();\n\n    return editable ? closestWithin(editable.range.startContainer, 'li') : null;\n  };\n\n  const indentListItem = () => {\n    const editable = getSelection();\n    const li = listItemAtCaret();\n\n    if (!editable || !li) return false;\n\n    const prev = li.previousElementSibling;\n\n    if (!(prev instanceof HTMLElement) || prev.tagName !== 'LI') return false;\n\n    const listTag = (li.parentElement?.tagName.toLowerCase() ?? 'ul') as ListTag;\n    const last = prev.lastElementChild;\n    let sublist: HTMLElement;\n\n    if (last instanceof HTMLElement && (last.tagName === 'UL' || last.tagName === 'OL')) {\n      sublist = last;\n    } else {\n      sublist = renderer.createElement(listTag);\n      renderer.appendChild(prev, sublist);\n    }\n\n    const { startContainer, startOffset } = editable.range;\n    renderer.appendChild(sublist, li);\n    collapseInto(startContainer, startOffset);\n\n    return true;\n  };\n\n  const outdentListItem = () => {\n    const editable = getSelection();\n    const li = listItemAtCaret();\n\n    if (!editable || !li) return false;\n\n    const sublist = li.parentElement;\n    const parentLi = sublist?.parentElement;\n\n    if (!(parentLi instanceof HTMLElement) || parentLi.tagName !== 'LI') return false;\n\n    const outerList = parentLi.parentElement;\n\n    if (!outerList) return false;\n\n    const { startContainer, startOffset } = editable.range;\n    renderer.insertBefore(outerList, li, parentLi.nextSibling);\n\n    if (sublist && sublist.childElementCount === 0 && sublist.parentElement) {\n      renderer.removeChild(sublist.parentElement, sublist);\n    }\n\n    collapseInto(startContainer, startOffset);\n\n    return true;\n  };\n\n  return { toggleList, indentListItem, outdentListItem, exitListItem, mergeParagraphIntoPreviousList };\n};\n\nexport type RichTextEditorDomLists = ReturnType<typeof createRichTextEditorLists>;\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\n\nexport const createRichTextEditorPaste = (core: RichTextEditorDomCore) => {\n  const { doc, renderer, root, getSelection } = core;\n\n  const insertNormalizedHtml = (html: string) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!editable || !el) return;\n\n    const template = renderer.createElement('template') as HTMLTemplateElement;\n    template.innerHTML = html;\n\n    const only = template.content.childNodes.length === 1 ? template.content.firstChild : null;\n\n    if (only instanceof HTMLElement && only.tagName === 'P') {\n      only.replaceWith(...only.childNodes);\n    }\n\n    const nodes = Array.from(template.content.childNodes);\n\n    if (nodes.length === 0) return;\n\n    const { range } = editable;\n    range.deleteContents();\n\n    const isBlock = (node: Node) =>\n      node instanceof HTMLElement && !node.matches('a, strong, em, del, u, code, span, br, img');\n\n    if (nodes.some(isBlock)) {\n      let anchor: Node | null = range.startContainer;\n\n      while (anchor && anchor !== el && anchor.parentNode !== el) anchor = anchor.parentNode;\n\n      let ref: Node | null = anchor && anchor !== el ? anchor.nextSibling : null;\n\n      nodes.forEach((node) => {\n        renderer.insertBefore(el, node, ref);\n        ref = node.nextSibling;\n      });\n\n      const last = nodes[nodes.length - 1];\n\n      if (last) {\n        const caret = doc.createRange();\n        caret.selectNodeContents(last);\n        caret.collapse(false);\n        const selection = doc.getSelection();\n        selection?.removeAllRanges();\n        selection?.addRange(caret);\n      }\n    } else {\n      nodes.forEach((node) => {\n        range.insertNode(node);\n        range.setStartAfter(node);\n        range.collapse(true);\n      });\n\n      const selection = doc.getSelection();\n      selection?.removeAllRanges();\n      selection?.addRange(range);\n    }\n\n    el.normalize();\n  };\n\n  return { insertNormalizedHtml };\n};\n\nexport type RichTextEditorDomPaste = ReturnType<typeof createRichTextEditorPaste>;\n","import { DOCUMENT } from '@angular/common';\nimport { inject } from '@angular/core';\nimport { defineProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { createRichTextEditorDomCore } from './rich-text-editor-dom-core';\nimport { RICH_TEXT_EDITOR_DOM_FEATURE, RichTextEditorDomFeatures } from './rich-text-editor-dom-features';\nimport { createRichTextEditorDomHistory } from './rich-text-editor-dom-history';\nimport { createRichTextEditorInlineMarks } from './rich-text-editor-dom-inline-marks';\nimport { createRichTextEditorKeymap } from './rich-text-editor-dom-keymap';\nimport { createRichTextEditorLists } from './rich-text-editor-dom-lists';\nimport { createRichTextEditorPaste } from './rich-text-editor-dom-paste';\n\nexport { INLINE_TAGS } from './rich-text-editor-dom-core';\nexport type {\n  EditableSelection,\n  HeadingTag,\n  InlineTag,\n  ListTag,\n  RichTextMarkStates,\n} from './rich-text-editor-dom-core';\n\n/** A caret at an element boundary has no client rect at all, and an all-zero rect reads as\n *  \"reference hidden\" to the overlay, which then closes instantly. */\nconst caretRectFallback = (range: Range): DOMRect => {\n  const container = range.startContainer;\n  const el = container instanceof HTMLElement ? container : container.parentElement;\n  const view = el?.ownerDocument.defaultView;\n\n  if (!el || !view) return new DOMRect();\n\n  const rect = el.getBoundingClientRect();\n  const style = view.getComputedStyle(el);\n  const fontSize = Number.parseFloat(style.fontSize) || 16;\n  const lineHeight = Number.parseFloat(style.lineHeight) || fontSize * 1.2;\n\n  return new DOMRect(\n    rect.left + (Number.parseFloat(style.paddingLeft) || 0),\n    rect.top + (Number.parseFloat(style.paddingTop) || 0),\n    0,\n    Math.min(lineHeight, rect.height || lineHeight),\n  );\n};\n\nconst hasNoRect = (rect: DOMRect) => rect.x === 0 && rect.y === 0 && rect.width === 0 && rect.height === 0;\n\n/**\n * A range whose boundaries sit outside the text - a triple-click selects the whole `<li>`/`<p>` -\n * reports the block's full-width border box, which would center a popover's arrow on the block\n * instead of on the text, so both boundaries are clamped into the text nodes inside the range.\n */\nexport const rangeTextBoundingRect = (range: Range): DOMRect => {\n  const doc = range.commonAncestorContainer.ownerDocument;\n\n  if (range.collapsed || !doc) {\n    const rect = range.getBoundingClientRect();\n\n    return hasNoRect(rect) ? caretRectFallback(range) : rect;\n  }\n\n  const walker = doc.createTreeWalker(range.commonAncestorContainer, NodeFilter.SHOW_TEXT);\n  let first: Text | null = null;\n  let last: Text | null = null;\n\n  while (walker.nextNode()) {\n    const text = walker.currentNode as Text;\n\n    if (!text.data.trim() || !range.intersectsNode(text)) continue;\n\n    first ??= text;\n    last = text;\n  }\n\n  if (!first || !last) {\n    const rect = range.getBoundingClientRect();\n\n    return hasNoRect(rect) ? caretRectFallback(range) : rect;\n  }\n\n  const clamped = range.cloneRange();\n\n  if (first !== range.startContainer) clamped.setStart(first, 0);\n  if (last !== range.endContainer) clamped.setEnd(last, last.length);\n\n  return clamped.getBoundingClientRect();\n};\n\n/**\n * The opt-in domains must keep arriving through {@link RICH_TEXT_EDITOR_DOM_FEATURE}: nothing here\n * may reference their implementations, or they reach a bundle that never provides them.\n */\nconst richTextEditorDomFactory = () => {\n  const renderer = injectRenderer();\n  const doc = inject(DOCUMENT);\n  const registered = inject(RICH_TEXT_EDITOR_DOM_FEATURE, { optional: true });\n\n  const core = createRichTextEditorDomCore(doc, renderer);\n  const marks = createRichTextEditorInlineMarks(core);\n  const lists = createRichTextEditorLists(core);\n\n  const features: RichTextEditorDomFeatures = {};\n  const ctx = { core, lists, features };\n\n  for (const feature of registered ?? []) {\n    (features[feature.key] as unknown) = feature.create(ctx);\n  }\n\n  const keymap = createRichTextEditorKeymap(core, { lists, features });\n  const paste = createRichTextEditorPaste(core);\n  const history = createRichTextEditorDomHistory(core);\n\n  return {\n    root: core.root,\n    getSelection: core.getSelection,\n    restoreSelection: core.restoreSelection,\n    closestWithin: core.closestWithin,\n    markStates: core.markStates,\n    ensureCaret: core.ensureCaret,\n    insertToken: core.insertToken,\n    toggleInline: marks.toggleInline,\n    activeInlineTags: marks.activeInlineTags,\n    insertInlineText: marks.insertInlineText,\n    toggleList: lists.toggleList,\n    indentListItem: lists.indentListItem,\n    outdentListItem: lists.outdentListItem,\n    insertNormalizedHtml: paste.insertNormalizedHtml,\n    handleBackspace: keymap.handleBackspace,\n    handleEnter: keymap.handleEnter,\n    codeExit: keymap.codeExit,\n    readSelectionOffsets: history.readSelectionOffsets,\n    restoreSelectionOffsets: history.restoreSelectionOffsets,\n\n    headings: features.headings ?? null,\n    links: features.links ?? null,\n    blockquote: features.blockquote ?? null,\n    codeBlock: features.codeBlock ?? null,\n    autoformat: features.autoformat ?? null,\n  };\n};\n\nexport type RichTextEditorDom = ReturnType<typeof richTextEditorDomFactory>;\n\nconst RICH_TEXT_EDITOR_DOM_DEF = /* @__PURE__ */ defineProvider(richTextEditorDomFactory, {\n  name: 'RichTextEditorDom',\n});\n\nexport const provideRichTextEditorDom = /* @__PURE__ */ toProvideFn(RICH_TEXT_EDITOR_DOM_DEF);\nexport const injectRichTextEditorDom = /* @__PURE__ */ toInjectFn(RICH_TEXT_EDITOR_DOM_DEF);\n","// codes 2500-2599\nexport const RICH_TEXT_EDITOR_ERROR_CODES = {\n  DUPLICATE_TRIGGER_CHAR: 2500,\n  DUPLICATE_TRIGGER_TYPE: 2501,\n  INVALID_TOKEN_TYPE: 2502,\n  INVALID_TOKEN_ID: 2503,\n  TRIGGERS_OUTSIDE_EDITOR: 2504,\n  INSERT_TOKEN_WITHOUT_CODEC: 2505,\n  DOM_FEATURE_NOT_PROVIDED: 2506,\n} as const;\n","import { InjectionToken } from '@angular/core';\n// type-only import: erased at build time, so the base editor's import graph never pulls the codec\n// implementation (chip builders, regex) - that lives behind the opt-in directive / render provider.\nimport { RichTextEditorTokenCodec } from './headless/internals/rich-text-editor-token';\n\n/**\n * Optional codec the base editor uses to (de)serialize `{{type:id}}` token chips. Installed\n * either by `[etRichTextEditorTriggers]` (interactive authoring) or by\n * `provideRichTextEditorTokenRendering` (display/read-only rendering). Absent → the editor\n * treats token markdown as plain text.\n */\nexport const RICH_TEXT_EDITOR_TOKEN_CODEC = new InjectionToken<RichTextEditorTokenCodec>(\n  'RICH_TEXT_EDITOR_TOKEN_CODEC',\n);\n","import { signal } from '@angular/core';\n\n/**\n * Character offsets are the only form that survives a snapshot being restored: undo re-renders the\n * editable from the value, so every node a stored `Range` pointed at is gone by then.\n */\nexport type RichTextEditorSelectionOffsets = { start: number; end: number };\n\nexport type RichTextEditorHistoryEntry = {\n  value: string;\n  selection: RichTextEditorSelectionOffsets | null;\n};\n\nconst COALESCE_WINDOW_MS = 500;\n\nconst MAX_ENTRIES = 100;\n\nconst insertedChunk = (prev: string, next: string) => {\n  let start = 0;\n\n  while (start < prev.length && start < next.length && prev[start] === next[start]) start++;\n\n  let end = 0;\n\n  while (\n    end < prev.length - start &&\n    end < next.length - start &&\n    prev[prev.length - 1 - end] === next[next.length - 1 - end]\n  ) {\n    end++;\n  }\n\n  return next.slice(start, next.length - end);\n};\n\n/**\n * The editor cannot use the browser's native `contenteditable` undo stack: it rewrites the DOM\n * behind that stack's back (paste is normalized through the Markdown pipeline, autoformat turns\n * typed text into structure), so native undo would restore a DOM state the value model never had.\n */\nexport const createRichTextEditorHistory = () => {\n  let entries: RichTextEditorHistoryEntry[] = [{ value: '', selection: null }];\n  let index = 0;\n  let lastCommitAt = 0;\n\n  let burstOpen = false;\n\n  const canUndo = signal(false);\n  const canRedo = signal(false);\n\n  const syncFlags = () => {\n    canUndo.set(index > 0);\n    canRedo.set(index < entries.length - 1);\n  };\n\n  const recordSelection = (selection: RichTextEditorSelectionOffsets | null) => {\n    const current = entries[index];\n\n    if (current) current.selection = selection;\n  };\n\n  const commit = ({ value, selection }: RichTextEditorHistoryEntry, boundary = false) => {\n    const current = entries[index];\n\n    if (!current) return;\n\n    if (current.value === value) {\n      recordSelection(selection);\n\n      return;\n    }\n\n    if (index < entries.length - 1) entries = entries.slice(0, index + 1);\n\n    const now = Date.now();\n    const crossedWhitespace = /\\s/.test(insertedChunk(current.value, value));\n    const extendBurst = !boundary && burstOpen && !crossedWhitespace && now - lastCommitAt < COALESCE_WINDOW_MS;\n\n    burstOpen = !boundary;\n    lastCommitAt = now;\n\n    if (extendBurst) {\n      entries[index] = { value, selection };\n      syncFlags();\n\n      return;\n    }\n\n    entries.push({ value, selection });\n\n    if (entries.length > MAX_ENTRIES) entries.shift();\n\n    index = entries.length - 1;\n    syncFlags();\n  };\n\n  const reset = (value: string, selection: RichTextEditorSelectionOffsets | null = null) => {\n    entries = [{ value, selection }];\n    index = 0;\n    burstOpen = false;\n    syncFlags();\n  };\n\n  const step = (delta: number): RichTextEditorHistoryEntry | null => {\n    const next = index + delta;\n    const entry = next >= 0 && next < entries.length ? entries[next] : null;\n\n    if (!entry) return null;\n\n    index = next;\n    burstOpen = false;\n    syncFlags();\n\n    return entry;\n  };\n\n  const undo = () => step(-1);\n\n  const redo = () => step(1);\n\n  return { canUndo, canRedo, commit, recordSelection, reset, undo, redo };\n};\n\nexport type RichTextEditorHistory = ReturnType<typeof createRichTextEditorHistory>;\n","import { RuntimeError } from '@ethlete/core';\nimport { isObservable, Observable, take } from 'rxjs';\nimport { RICH_TEXT_EDITOR_ERROR_CODES } from '../../rich-text-editor-errors';\nimport { RichTextEditorTrigger, RichTextEditorTriggerItem } from '../../rich-text-editor-trigger';\nimport { EditorRenderer } from './rich-text-editor-dom-core';\n\nexport const TOKEN_CHIP_CLASS = 'et-rte-token';\nexport const TOKEN_CHIP_ATTR = 'data-et-token';\nexport const TOKEN_TYPE_ATTR = 'data-token-type';\nexport const TOKEN_ID_ATTR = 'data-token-id';\nexport const TOKEN_PREFIX_CLASS = 'et-rte-token-prefix';\nexport const TOKEN_LABEL_CLASS = 'et-rte-token-label';\n\nexport const TOKEN_TYPE_RE = /^[a-z][a-z0-9-]*$/;\n/** Widening this breaks the round trip: an id must stay Markdown-inert so `{{type:id}}` survives it untouched. */\nexport const TOKEN_ID_RE = /^[A-Za-z0-9._:-]+$/;\n\nconst TOKEN_MARKDOWN_RE = /\\{\\{([a-z][a-z0-9-]*):([A-Za-z0-9._:-]+)\\}\\}/g;\n\nexport type RichTextEditorTokenChip = { type: string; id: string; label: string; prefix?: string };\n\n/** @internal */\nexport const escapeHtmlText = (value: string) =>\n  value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nexport const tokenMarkdown = (type: string, id: string) => `{{${type}:${id}}}`;\n\nexport const buildChipHtml = ({ type, id, label, prefix }: RichTextEditorTokenChip) =>\n  `<span class=\"${TOKEN_CHIP_CLASS}\" ${TOKEN_CHIP_ATTR} ${TOKEN_TYPE_ATTR}=\"${escapeHtmlText(type)}\" ` +\n  `${TOKEN_ID_ATTR}=\"${escapeHtmlText(id)}\" contenteditable=\"false\">` +\n  (prefix ? `<span class=\"${TOKEN_PREFIX_CLASS}\">${escapeHtmlText(prefix)}</span>` : '') +\n  `<span class=\"${TOKEN_LABEL_CLASS}\">${escapeHtmlText(label)}</span></span>`;\n\n/**\n * The class/attr contract, prefix span and label span must stay identical to what\n * {@link buildChipHtml} serializes, or `serialize`/`render` round-trip inconsistently.\n */\nexport const buildChipElement = (\n  renderer: EditorRenderer,\n  { type, id, label, prefix }: RichTextEditorTokenChip,\n): HTMLElement => {\n  const chip = renderer.createElement('span') as HTMLElement;\n\n  renderer.addClass(chip, TOKEN_CHIP_CLASS);\n  renderer.setAttribute(chip, TOKEN_CHIP_ATTR, '');\n  renderer.setAttribute(chip, TOKEN_TYPE_ATTR, type);\n  renderer.setAttribute(chip, TOKEN_ID_ATTR, id);\n  renderer.setAttribute(chip, 'contenteditable', 'false');\n\n  if (prefix) {\n    const prefixEl = renderer.createElement('span') as HTMLElement;\n\n    renderer.addClass(prefixEl, TOKEN_PREFIX_CLASS);\n    renderer.appendChild(prefixEl, renderer.createText(prefix));\n    renderer.appendChild(chip, prefixEl);\n  }\n\n  const labelEl = renderer.createElement('span') as HTMLElement;\n\n  renderer.addClass(labelEl, TOKEN_LABEL_CLASS);\n  renderer.appendChild(labelEl, renderer.createText(label));\n  renderer.appendChild(chip, labelEl);\n\n  return chip;\n};\n\nexport const assertValidToken = (type: string, id: string) => {\n  if (!TOKEN_TYPE_RE.test(type)) {\n    throw new RuntimeError(\n      RICH_TEXT_EDITOR_ERROR_CODES.INVALID_TOKEN_TYPE,\n      `Invalid rich text editor token type \"${type}\". Types must match ${TOKEN_TYPE_RE}.`,\n    );\n  }\n\n  if (!TOKEN_ID_RE.test(id)) {\n    throw new RuntimeError(\n      RICH_TEXT_EDITOR_ERROR_CODES.INVALID_TOKEN_ID,\n      `Invalid rich text editor token id \"${id}\" for type \"${type}\". Ids must match ${TOKEN_ID_RE} so the {{type:id}} token round-trips through Markdown.`,\n    );\n  }\n};\n\nconst isPromiseLike = <T>(value: unknown): value is Promise<T> =>\n  !!value && typeof (value as Promise<T>).then === 'function';\n\n/**\n * `serialize` must reconstruct a token purely from the chip's `type`/`id` attributes, never the\n * visible label: the editor relies on `serialize(render(md))` being byte-stable regardless of the\n * resolved label to avoid re-rendering - and resetting the caret - on every keystroke.\n */\nexport type RichTextEditorTokenCodec = {\n  serialize: (root: HTMLElement) => void;\n  render: (html: string) => string;\n  hydrate: (root: HTMLElement) => void;\n  resolveChip: (type: string, id: string) => RichTextEditorTokenChip;\n  parseTokenText: (text: string) => string;\n};\n\nexport const createRichTextEditorTokenCodec = (\n  triggers: () => readonly RichTextEditorTrigger[],\n): RichTextEditorTokenCodec => {\n  const triggerFor = (type: string) => triggers().find((trigger) => trigger.type === type) ?? null;\n\n  const resolveSyncLabel = (type: string, id: string): string | null => {\n    const trigger = triggerFor(type);\n\n    if (!trigger) return null;\n\n    const resolved = trigger.resolveItem?.(id);\n\n    if (resolved && !isPromiseLike<RichTextEditorTriggerItem | null>(resolved) && !isObservable(resolved)) {\n      return resolved.label;\n    }\n\n    if (!Array.isArray(trigger.items)) return null;\n\n    return trigger.items.find((item) => item.id === id)?.label ?? null;\n  };\n\n  const serialize = (root: HTMLElement) => {\n    // eslint-disable-next-line ethlete/no-dom-query -- atomic chips carry no unique hook other than the marker attribute\n    root.querySelectorAll(`[${TOKEN_CHIP_ATTR}]`).forEach((chip) => {\n      const type = chip.getAttribute(TOKEN_TYPE_ATTR);\n      const id = chip.getAttribute(TOKEN_ID_ATTR);\n\n      if (!type || !id) return;\n\n      chip.replaceWith(tokenMarkdown(type, id));\n    });\n  };\n\n  const render = (html: string) =>\n    html.replace(TOKEN_MARKDOWN_RE, (_match, ...groups: string[]) => {\n      const [type = '', id = ''] = groups;\n\n      return buildChipHtml({ type, id, label: resolveSyncLabel(type, id) ?? id, prefix: triggerFor(type)?.char ?? '' });\n    });\n\n  const hydrate = (root: HTMLElement) => {\n    // eslint-disable-next-line ethlete/no-dom-query -- same marker-attribute lookup as serialize\n    root.querySelectorAll<HTMLElement>(`[${TOKEN_CHIP_ATTR}]`).forEach((chip) => {\n      const type = chip.getAttribute(TOKEN_TYPE_ATTR);\n      const id = chip.getAttribute(TOKEN_ID_ATTR);\n      const resolver = type ? triggerFor(type)?.resolveItem : null;\n\n      if (!type || !id || !resolver) return;\n\n      const resolved = resolver(id);\n      const apply = (item: RichTextEditorTriggerItem | null) => {\n        if (!item || !chip.isConnected) return;\n\n        // eslint-disable-next-line ethlete/no-dom-query -- structured chip, label span has no other hook\n        const labelEl = chip.querySelector<HTMLElement>(`.${TOKEN_LABEL_CLASS}`);\n\n        if (labelEl) labelEl.textContent = item.label;\n        else chip.textContent = item.label;\n      };\n\n      if (isPromiseLike<RichTextEditorTriggerItem | null>(resolved)) {\n        void resolved.then(apply);\n      } else if (isObservable(resolved)) {\n        (resolved as Observable<RichTextEditorTriggerItem | null>).pipe(take(1)).subscribe(apply);\n      } else {\n        apply(resolved);\n      }\n    });\n  };\n\n  const resolveChip = (type: string, id: string): RichTextEditorTokenChip => ({\n    type,\n    id,\n    label: resolveSyncLabel(type, id) ?? id,\n    prefix: triggerFor(type)?.char ?? '',\n  });\n\n  const parseTokenText = (text: string) => {\n    let out = text;\n\n    for (const trigger of triggers()) {\n      const items = Array.isArray(trigger.items) ? trigger.items : null;\n\n      if (!items?.length) continue;\n\n      const byText = new Map<string, string>();\n\n      for (const item of items) {\n        if (item.disabled) continue;\n\n        for (const candidate of [item.label, item.id]) {\n          const key = candidate?.trim().toLowerCase();\n\n          if (key && !byText.has(key)) byText.set(key, item.id);\n        }\n      }\n\n      if (byText.size === 0) continue;\n\n      // Longest first, so `#User Name` wins over an item merely labelled `User`.\n      const alternatives = [...byText.keys()].sort((a, b) => b.length - a.length).map(escapeRegExp);\n      const pattern = new RegExp(`(^|[^\\\\w])${escapeRegExp(trigger.char)}(${alternatives.join('|')})(?!\\\\w)`, 'gi');\n\n      out = out.replace(pattern, (match, ...groups: string[]) => {\n        const [before = '', matched = ''] = groups;\n        const id = byText.get(matched.toLowerCase());\n\n        return id ? `${before}${tokenMarkdown(trigger.type, id)}` : match;\n      });\n    }\n\n    return out;\n  };\n\n  return { serialize, render, hydrate, resolveChip, parseTokenText };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The form field's rich-text frame overrides, as a styles-only component mounted by the rich text\n * editor (see `FormFieldTextShellStylesComponent` for the pattern).\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-field-rich-text-styles',\n  template: '',\n  styleUrl: './form-field-rich-text-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldRichTextStylesComponent {}\n","import { DOCUMENT } from '@angular/common';\nimport { booleanAttribute, computed, DestroyRef, Directive, inject, input, model, signal } from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport {\n  htmlToMarkdown,\n  injectRenderer,\n  injectStyleManager,\n  markdownToHtml,\n  mountEasingTokens,\n  RuntimeError,\n} from '@ethlete/core';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\nimport { RICH_TEXT_EDITOR_ERROR_CODES } from '../rich-text-editor-errors';\nimport { injectRichTextEditorLabels, RichTextEditorLabels } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOKEN_CODEC } from '../rich-text-editor-token-codec.token';\nimport {\n  RICH_TEXT_EDITOR_TOOL,\n  RICH_TEXT_EDITOR_TOOL_BUTTONS,\n  RICH_TEXT_EDITOR_TOOLS,\n  injectRichTextEditorTools,\n  RichTextEditorTool,\n  RichTextEditorToolDefinition,\n} from '../rich-text-editor-tools';\nimport { RichTextEditorTriggerItem } from '../rich-text-editor-trigger';\nimport {\n  HeadingTag,\n  injectRichTextEditorDom,\n  INLINE_TAGS,\n  InlineTag,\n  provideRichTextEditorDom,\n  RichTextMarkStates,\n} from './internals/rich-text-editor-dom';\nimport { createRichTextEditorHistory, RichTextEditorHistoryEntry } from './internals/rich-text-editor-history';\nimport {\n  assertValidToken,\n  buildChipElement,\n  escapeHtmlText,\n  RichTextEditorTokenChip,\n  RichTextEditorTokenCodec,\n} from './internals/rich-text-editor-token';\nimport { mountTextFieldShellStyles } from '../../form-field/form-field-text-shell-styles.component';\nimport { FormFieldRichTextStylesComponent } from '../../form-field/form-field-rich-text-styles.component';\n\nconst EMPTY_INLINE_SWEEP_SELECTOR = /* @__PURE__ */ [...INLINE_TAGS, 'a'].join(', ');\n\n/** Every call must sit inside an `ngDevMode` branch - that is what keeps these strings out of a production bundle. */\nconst missingDomFeature = (method: string, provider: string) =>\n  new RuntimeError(\n    RICH_TEXT_EDITOR_ERROR_CODES.DOM_FEATURE_NOT_PROVIDED,\n    `${method} requires ${provider}(). Add it to a component or route's providers so this editor has the DOM operations it drives.`,\n  );\n\n@Directive({\n  selector: '[etRichTextEditor]',\n  exportAs: 'etRichTextEditor',\n  providers: [provideRichTextEditorDom()],\n})\nexport class RichTextEditorDirective\n  extends AccessibleNameControlDirective\n  implements FormValueControl<string>, FormFieldControl\n{\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private renderer = injectRenderer();\n  private toolsConfig = injectRichTextEditorTools();\n  private injectedLabels = injectRichTextEditorLabels();\n\n  private registeredTools = inject(RICH_TEXT_EDITOR_TOOL, { optional: true });\n\n  /** @internal */\n  public editorDom = injectRichTextEditorDom();\n\n  public value = model('');\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  // eslint-disable-next-line ethlete/no-native-html-input-name\n  public hidden = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n  public placeholder = input('');\n\n  /** Which formatting tools the toolbar renders, and in what order. Falls back to the value from\n   *  `provideRichTextEditorTools` (or the full default set). */\n  public tools = input<readonly RichTextEditorTool[] | null>(null);\n\n  /** Markdown autoformat while typing: `- `, `1. ` and `# `–`### ` at a line start convert into\n   *  lists/headings, and closing `**bold**`, `*italic*`, `` `code` ``, `~~strike~~`, `__`/`_` runs\n   *  convert into their marks. Registered token-trigger characters never autoformat. Switches off\n   *  what `provideRichTextEditorAutoformat()` turned on; without that provider there is nothing to\n   *  switch off. */\n  public autoformat = input(true, { transform: booleanAttribute });\n\n  /**\n   * Per-instance overrides for the editor's strings, merged over the injected `RICH_TEXT_EDITOR_LABELS`.\n   * Prefer `provideRichTextEditorLabels` for app-wide localization; use this for a one-off wording.\n   */\n  public labels = input<Partial<RichTextEditorLabels> | null>(null);\n\n  private history = createRichTextEditorHistory();\n\n  /** @internal */\n  public toolDefs = ((): ReadonlyMap<string, RichTextEditorToolDefinition> => {\n    const defs = new Map<string, RichTextEditorToolDefinition>();\n\n    for (const [token, button] of Object.entries(RICH_TEXT_EDITOR_TOOL_BUTTONS)) {\n      if (button) defs.set(token, { token, ...button });\n    }\n\n    for (const def of this.registeredTools ?? []) defs.set(def.token, def);\n\n    return defs;\n  })();\n\n  /**\n   * Resolved toolbar tools: the `tools` input if set, otherwise the provided/default config, with\n   * every token that has no definition dropped, and no doubled or dangling divider left behind.\n   */\n  public resolvedTools = computed(() => {\n    const configured = this.tools() ?? this.toolsConfig.tools;\n    const rendered: RichTextEditorTool[] = [];\n\n    for (const tool of configured) {\n      if (tool !== RICH_TEXT_EDITOR_TOOLS.DIVIDER) {\n        if (this.toolDefs.has(tool)) rendered.push(tool);\n      } else if (rendered.length && rendered[rendered.length - 1] !== RICH_TEXT_EDITOR_TOOLS.DIVIDER) {\n        rendered.push(tool);\n      }\n    }\n\n    if (rendered[rendered.length - 1] === RICH_TEXT_EDITOR_TOOLS.DIVIDER) rendered.pop();\n\n    return rendered;\n  });\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<RichTextEditorLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** @internal `null` when no codec is installed, in which case token markdown stays plain text. */\n  public tokenCodec = signal<RichTextEditorTokenCodec | null>(inject(RICH_TEXT_EDITOR_TOKEN_CODEC, { optional: true }));\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public hasValue = computed(() => this.value().trim().length > 0);\n\n  /** Whether {@link undo} would do anything: there is an edit left to take back, and the editor\n   *  can currently be edited at all. */\n  public canUndo = computed(() => this.canEdit() && this.history.canUndo());\n\n  /** Whether {@link redo} would do anything - see {@link canUndo}. */\n  public canRedo = computed(() => this.canEdit() && this.history.canRedo());\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.RICH_TEXT);\n  public focused = signal(false);\n\n  public boldActive = signal(false);\n  public italicActive = signal(false);\n  public strikeActive = signal(false);\n  public underlineActive = signal(false);\n  public codeActive = signal(false);\n  public unorderedListActive = signal(false);\n  public orderedListActive = signal(false);\n  public linkActive = signal(false);\n  public blockquoteActive = signal(false);\n\n  /** Whether the caret sits in a fenced code block, where the value is literal text. */\n  public codeBlockActive = signal(false);\n\n  public headingLevel = signal<number | null>(null);\n\n  /** Whether the selection sits inside a table cell. */\n  public inTableCell = signal(false);\n\n  public headingToolDisabled = computed(\n    () =>\n      this.inTableCell() ||\n      this.unorderedListActive() ||\n      this.orderedListActive() ||\n      this.blockquoteActive() ||\n      this.codeBlockActive(),\n  );\n\n  private inList = computed(() => this.unorderedListActive() || this.orderedListActive());\n\n  public listToolDisabled = computed(() => this.inTableCell() || this.blockquoteActive() || this.codeBlockActive());\n\n  public blockquoteToolDisabled = computed(() => this.inTableCell() || this.codeBlockActive() || this.inList());\n\n  public codeBlockToolDisabled = computed(() => this.inTableCell() || this.blockquoteActive() || this.inList());\n\n  /** @internal `null` means \"follow the caret\"; a list means the next typed text is wrapped in exactly these marks. */\n  public pendingMarks = signal<InlineTag[] | null>(null);\n\n  /** @internal Autoformat rules keyed on these characters never fire, so a `#` trigger keeps opening its autocomplete instead of becoming a heading. */\n  public autoformatReservedChars = signal<readonly string[]>([]);\n\n  /** @internal `true` while a token-trigger popup run is active - suspends all autoformat. */\n  public autoformatSuppressed = signal(false);\n\n  /** @internal */\n  public parsePastedTokens = signal(true);\n\n  /** @internal */\n  public lastEmittedMarkdown: string | null = null;\n\n  /** @internal `null` for a bare `[etRichTextEditor]` with no popover, where {@link promptForLink} falls back to a native prompt. */\n  public openLinkEditor = signal<(() => void) | null>(null);\n\n  /** @internal */\n  public linkEditorOpen = signal(false);\n\n  constructor() {\n    mountEasingTokens();\n    super();\n\n    injectStyleManager().mount(FormFieldRichTextStylesComponent);\n\n    mountTextFieldShellStyles();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) return;\n\n    const el = this.editorDom.root();\n\n    // Re-focusing a contenteditable that already holds the caret collapses the selection to its\n    // start, so only focus when the editor isn't already focused (e.g. a click on the frame padding).\n    if (!el || el.ownerDocument.activeElement === el) return;\n\n    el.focus(options);\n  }\n\n  /**\n   * Reads the DOM back into `value` and refreshes the toolbar state - the single point every edit\n   * funnels through.\n   *\n   * @param opts.boundary Commit as its own history entry instead of extending the running typing\n   *   burst. Every programmatic rewrite (paste, autoformat, a tool, a token insert) passes `true`,\n   *   so a single undo takes the whole rewrite back.\n   */\n  public syncFromDom(opts?: { boundary?: boolean }) {\n    const root = this.editorDom.root();\n\n    if (!root) return;\n\n    // A native edit can leave the wrapper of a code block or quote behind after its content was\n    // deleted whole - only the browser produces those, so this only runs on the native input path.\n    if (!opts?.boundary) {\n      this.editorDom.codeBlock?.repairCodeBlock();\n      this.editorDom.blockquote?.repairEmptyQuotes();\n    }\n\n    const markdown = htmlToMarkdown(this.serializeCleanHtml(root));\n\n    // Applied after reading, so it can never change what was read.\n    this.normalizeContent(root);\n\n    this.lastEmittedMarkdown = markdown;\n    this.value.set(markdown);\n    this.history.commit({ value: markdown, selection: this.editorDom.readSelectionOffsets() }, opts?.boundary);\n    this.refreshActiveMarks();\n  }\n\n  /** @internal */\n  public recordHistorySelection() {\n    const offsets = this.editorDom.readSelectionOffsets();\n\n    if (offsets) this.history.recordSelection(offsets);\n  }\n\n  /**\n   * Restores the value from before the last edit. A burst of typing goes back a word at a time;\n   * every programmatic rewrite (paste normalization, autoformat, a tool, a token insert) goes back\n   * in one step.\n   */\n  public undo() {\n    if (!this.canEdit()) return;\n\n    this.applyHistoryEntry(this.history.undo());\n  }\n\n  /** Reapplies the last undone edit. */\n  public redo() {\n    if (!this.canEdit()) return;\n\n    this.applyHistoryEntry(this.history.redo());\n  }\n\n  /** @internal Restarts the history: an outside write is a new document, so undo must not reach back into the previous one's states. */\n  public renderExternalValue(markdown = this.value()) {\n    if (!this.writeValueToDom(markdown)) return;\n\n    this.history.reset(markdown);\n  }\n\n  public refreshActiveMarks() {\n    const pending = this.pendingMarks();\n\n    if (pending !== null) {\n      const states = this.editorDom.markStates();\n\n      this.reflectMarks(pending);\n      this.reflectBlockStates(states);\n\n      return;\n    }\n\n    const states = this.editorDom.markStates();\n\n    this.boldActive.set(states?.bold ?? false);\n    this.italicActive.set(states?.italic ?? false);\n    this.strikeActive.set(states?.strike ?? false);\n    this.underlineActive.set(states?.underline ?? false);\n    this.codeActive.set(states?.code ?? false);\n    this.unorderedListActive.set(states?.unorderedList ?? false);\n    this.orderedListActive.set(states?.orderedList ?? false);\n    this.linkActive.set(states?.link ?? false);\n    this.reflectBlockStates(states);\n  }\n\n  public toggleBold() {\n    this.toggleMark('strong');\n  }\n\n  public toggleItalic() {\n    this.toggleMark('em');\n  }\n\n  public toggleStrikethrough() {\n    this.toggleMark('del');\n  }\n\n  public toggleUnderline() {\n    this.toggleMark('u');\n  }\n\n  public toggleInlineCode() {\n    this.toggleMark('code');\n  }\n\n  /**\n   * Runs markdown autoformat for a single typed character (called from `beforeinput`). Returns `true`\n   * when the character was consumed by a conversion.\n   */\n  public handleAutoformat(data: string) {\n    const autoformat = this.editorDom.autoformat;\n\n    if (\n      !autoformat ||\n      !this.autoformat() ||\n      this.autoformatSuppressed() ||\n      this.disabled() ||\n      this.readonly() ||\n      !this.editorDom.root()\n    ) {\n      return false;\n    }\n\n    const reserved = new Set(this.autoformatReservedChars());\n    const isReserved = (char: string) => reserved.has(char);\n\n    const handled =\n      data === ' '\n        ? autoformat.applyBlockAutoformat(isReserved)\n        : data.length === 1 && '*_~`'.includes(data)\n          ? autoformat.applyInlineAutoformat(data, isReserved)\n          : false;\n\n    if (handled) this.syncFromDom({ boundary: true });\n\n    return handled;\n  }\n\n  public consumePendingInsert(text: string) {\n    const pending = this.pendingMarks();\n\n    if (pending === null) return false;\n\n    this.pendingMarks.set(null);\n    this.runCommand(() => this.editorDom.insertInlineText(text, pending));\n\n    return true;\n  }\n\n  public clearPendingMarks() {\n    if (this.pendingMarks() !== null) {\n      this.pendingMarks.set(null);\n      this.refreshActiveMarks();\n    }\n  }\n\n  public toggleUnorderedList() {\n    this.runCommand(() => this.editorDom.toggleList('ul'));\n  }\n\n  public toggleOrderedList() {\n    this.runCommand(() => this.editorDom.toggleList('ol'));\n  }\n\n  /** Quotes the selected blocks as `> ` lines, or lifts the caret's quote out one nesting level.\n   *  Needs `provideRichTextEditorBlockquoteTool()`. */\n  public toggleBlockquote() {\n    const { blockquote } = this.editorDom;\n\n    if (!blockquote) {\n      if (ngDevMode) throw missingDomFeature('toggleBlockquote', 'provideRichTextEditorBlockquoteTool');\n\n      return;\n    }\n\n    this.runCommand(() => blockquote.toggleBlockquote());\n  }\n\n  /** Turns the selected blocks into a fenced code block, or a code block back into paragraphs - only\n   *  the text survives either way. Needs `provideRichTextEditorCodeBlockTool()`. */\n  public toggleCodeBlock() {\n    const { codeBlock } = this.editorDom;\n\n    if (!codeBlock) {\n      if (ngDevMode) throw missingDomFeature('toggleCodeBlock', 'provideRichTextEditorCodeBlockTool');\n\n      return;\n    }\n\n    this.runCommand(() => codeBlock.toggleCodeBlock());\n  }\n\n  /** Needs `provideRichTextEditorHeadingTool()`. */\n  public toggleHeading(level: number) {\n    const { headings } = this.editorDom;\n\n    if (!headings) {\n      if (ngDevMode) throw missingDomFeature('toggleHeading', 'provideRichTextEditorHeadingTool');\n\n      return;\n    }\n\n    this.runCommand(() => headings.toggleHeading(`h${level}` as HeadingTag));\n  }\n\n  /** Needs `provideRichTextEditorHeadingTool()`. */\n  public setHeading(level: number | null) {\n    const current = this.headingLevel();\n\n    if (level === current) return;\n\n    // `toggleHeading` turns a heading back into a paragraph only when handed its own level.\n    const tagLevel = level ?? current;\n\n    if (tagLevel === null) return;\n\n    this.toggleHeading(tagLevel);\n  }\n\n  /** Applies (or, with an empty `href`, removes) a link on the current selection. `newTab` sets\n   *  `target=\"_blank\"` + `rel=\"noopener noreferrer\"`; `text` overrides the visible label. Needs\n   *  `provideRichTextEditorLinkTool()`. */\n  public applyLink(href: string, options: { newTab?: boolean; text?: string | null } = {}) {\n    const { links } = this.editorDom;\n\n    if (!links) {\n      if (ngDevMode) throw missingDomFeature('applyLink', 'provideRichTextEditorLinkTool');\n\n      return;\n    }\n\n    const url = href.trim();\n\n    this.runCommand(() => (url ? links.applyLink(url, options) : links.removeLink()));\n  }\n\n  /** Needs `provideRichTextEditorLinkTool()`. */\n  public removeLink() {\n    const { links } = this.editorDom;\n\n    if (!links) {\n      if (ngDevMode) throw missingDomFeature('removeLink', 'provideRichTextEditorLinkTool');\n\n      return;\n    }\n\n    this.runCommand(() => links.removeLink());\n  }\n\n  /** Needs `provideRichTextEditorLinkTool()`. */\n  public promptForLink() {\n    if (this.disabled() || this.readonly() || this.codeBlockActive()) return;\n\n    if (!this.editorDom.links) {\n      if (ngDevMode) throw missingDomFeature('promptForLink', 'provideRichTextEditorLinkTool');\n\n      return;\n    }\n\n    const open = this.openLinkEditor();\n\n    if (open) {\n      open();\n\n      return;\n    }\n\n    if (this.linkActive()) {\n      this.removeLink();\n\n      return;\n    }\n\n    const url = this.document.defaultView?.prompt('Link URL');\n\n    if (url === null || url === undefined) return;\n\n    this.applyLink(url);\n  }\n\n  public handleBackspace() {\n    if (this.disabled() || this.readonly() || !this.editorDom.root()) return false;\n\n    const handled = this.editorDom.handleBackspace();\n\n    if (handled) {\n      this.syncFromDom({ boundary: true });\n    }\n\n    return handled;\n  }\n\n  public pasteHtml(html: string) {\n    if (this.disabled() || this.readonly() || !this.editorDom.root()) return false;\n\n    this.clearPendingMarks();\n\n    // DOMParser yields an inert document: clipboard scripts never run and images never load\n    // while the foreign markup is being reduced.\n    const body = new DOMParser().parseFromString(html, 'text/html').body;\n\n    // eslint-disable-next-line ethlete/no-dom-query -- clipboard HTML (e.g. from Word) embeds <style> blocks whose CSS text would survive the tag-strip as plain text\n    body.querySelectorAll('style, script, noscript, meta, link, title').forEach((junk) => junk.remove());\n\n    const codec = this.tokenCodec();\n\n    codec?.serialize(body);\n\n    const markdown = this.parseTokenText(htmlToMarkdown(body.innerHTML));\n\n    if (!markdown) return false;\n\n    const normalized = markdownToHtml(markdown);\n\n    this.editorDom.insertNormalizedHtml(codec ? codec.render(normalized) : normalized);\n\n    const root = this.editorDom.root();\n\n    if (codec && root) codec.hydrate(root);\n\n    this.syncFromDom({ boundary: true });\n\n    return true;\n  }\n\n  /**\n   * Inserts plain clipboard text, recognizing tokens written the way they read - `#User Name` - and\n   * turning them back into chips. Everything else stays literal; with nothing to recognize this\n   * returns `false` so the browser inserts the text itself.\n   */\n  public pasteText(text: string) {\n    const codec = this.tokenCodec();\n\n    if (!codec || !this.canEdit()) return false;\n\n    const parsed = this.parseTokenText(text);\n\n    if (parsed === text) return false;\n\n    this.clearPendingMarks();\n\n    // escape first: only the recognized tokens become markup, the rest of the text stays text\n    this.editorDom.insertNormalizedHtml(codec.render(escapeHtmlText(parsed).replace(/\\n/g, '<br>')));\n\n    const root = this.editorDom.root();\n\n    if (root) codec.hydrate(root);\n\n    this.syncFromDom({ boundary: true });\n\n    return true;\n  }\n\n  public insertAtomicToken(node: Node) {\n    if (this.disabled() || this.readonly() || !this.editorDom.root()) return;\n\n    this.editorDom.insertToken(node);\n    this.syncFromDom({ boundary: true });\n  }\n\n  /**\n   * Inserts a `{{type:id}}` token chip at the caret - the same result as picking it from the `#`/`@`\n   * trigger popup - resolving its label via the matching trigger's `resolveItem`.\n   *\n   * Inserts at the current caret, or - if the editor isn't focused - at the position it last held,\n   * falling back to the end of the content. The caret is left after the chip. A token codec must be\n   * installed (by `[etRichTextEditorTriggers]` or `provideRichTextEditorTokenRendering`); without one\n   * this throws in dev and no-ops in production.\n   *\n   * @param opts.focus Focus the editor after inserting so the user can keep typing. @default true\n   */\n  // eslint-disable-next-line max-params -- (type, id, opts?) is the documented public API shape, mirroring common editor insert methods\n  public insertToken(type: string, id: string, opts?: { focus?: boolean }) {\n    const codec = this.requireTokenCodec();\n\n    if (!codec) return;\n    if (ngDevMode) assertValidToken(type, id);\n\n    this.insertChip(codec.resolveChip(type, id), { focus: opts?.focus, hydrate: true });\n  }\n\n  /**\n   * Like {@link insertToken}, but for when the app already holds the resolved `{ id, label }` item\n   * (e.g. the row a palette button represents) - the label is used as-is, skipping resolution.\n   *\n   * @param opts.focus Focus the editor after inserting so the user can keep typing. @default true\n   */\n  // eslint-disable-next-line max-params -- (type, item, opts?) mirrors insertToken's documented public API shape\n  public insertTokenItem(type: string, item: RichTextEditorTriggerItem, opts?: { focus?: boolean }) {\n    const codec = this.requireTokenCodec();\n\n    if (!codec || item.disabled) return;\n    if (ngDevMode) assertValidToken(type, item.id);\n\n    this.insertChip({ ...codec.resolveChip(type, item.id), label: item.label }, { focus: opts?.focus, hydrate: false });\n  }\n\n  private parseTokenText(text: string) {\n    if (!this.parsePastedTokens()) return text;\n\n    return this.tokenCodec()?.parseTokenText(text) ?? text;\n  }\n\n  private requireTokenCodec(): RichTextEditorTokenCodec | null {\n    const codec = this.tokenCodec();\n\n    if (!codec && ngDevMode) {\n      throw new RuntimeError(\n        RICH_TEXT_EDITOR_ERROR_CODES.INSERT_TOKEN_WITHOUT_CODEC,\n        'insertToken requires a token codec. Add [etRichTextEditorTriggers] or provideRichTextEditorTokenRendering() so {{type:id}} tokens can (de)serialize.',\n      );\n    }\n\n    return codec;\n  }\n\n  private insertChip(chip: RichTextEditorTokenChip, { focus, hydrate }: { focus?: boolean; hydrate: boolean }) {\n    if (this.disabled() || this.readonly()) return;\n\n    const root = this.editorDom.root();\n\n    if (!root || !this.editorDom.ensureCaret()) return;\n\n    this.editorDom.insertToken(buildChipElement(this.renderer, chip));\n    // A plain trailing space is CSS-collapsed and dropped by Chrome, so park a no-break space after\n    // the chip instead; serialization normalizes it back to a plain space.\n    this.editorDom.insertToken(this.renderer.createText(' '));\n\n    if (hydrate) this.tokenCodec()?.hydrate(root);\n\n    this.syncFromDom({ boundary: true });\n\n    // Focus last so the caret placed after the nbsp stays live. Skip when already focused -\n    // re-focusing a contenteditable that holds the caret collapses the selection to its start.\n    if ((focus ?? true) && root.ownerDocument.activeElement !== root) root.focus();\n  }\n\n  private normalizeContent(root: HTMLElement) {\n    for (const tool of this.registeredTools ?? []) tool.normalize?.(root);\n  }\n\n  private serializeCleanHtml(root: HTMLElement) {\n    const clone = root.cloneNode(true) as HTMLElement;\n\n    // Must run before the HTML→markdown pass strips unknown tags, which would flatten a chip to its label.\n    this.tokenCodec()?.serialize(clone);\n\n    let removed = true;\n\n    while (removed) {\n      removed = false;\n\n      // eslint-disable-next-line ethlete/no-dom-query\n      clone.querySelectorAll(EMPTY_INLINE_SWEEP_SELECTOR).forEach((el) => {\n        if ((el.textContent ?? '').length === 0) {\n          el.remove();\n          removed = true;\n        }\n      });\n    }\n\n    return (\n      clone.innerHTML\n        .replace(/<div>/gi, '<p>')\n        .replace(/<\\/div>/gi, '</p>')\n        // drop zero-width spaces used transiently to park the caret outside an inline mark (code exit)\n        .replace(/\\u200b/g, '')\n    );\n  }\n\n  private toggleMark(tag: InlineTag) {\n    if (this.disabled() || this.readonly()) return;\n\n    this.editorDom.restoreSelection();\n\n    // inside a fenced code block every mark would be literal text - read it off the DOM rather\n    // than the signal, so a keyboard shortcut fired before the next selectionchange is covered too\n    if (this.editorDom.markStates()?.codeBlock) return;\n\n    const selection = this.editorDom.getSelection();\n\n    if (selection && !selection.range.collapsed) {\n      this.pendingMarks.set(null);\n      this.runCommand(() => this.editorDom.toggleInline(tag));\n\n      return;\n    }\n\n    const base = this.pendingMarks() ?? this.editorDom.activeInlineTags();\n    const next = base.includes(tag) ? base.filter((mark) => mark !== tag) : [...base, tag];\n\n    this.pendingMarks.set(next);\n    this.reflectMarks(next);\n  }\n\n  private reflectBlockStates(states: RichTextMarkStates | null) {\n    this.blockquoteActive.set(states?.blockquote ?? false);\n    this.codeBlockActive.set(states?.codeBlock ?? false);\n    this.headingLevel.set(states?.heading ?? null);\n    this.inTableCell.set(states?.tableCell ?? false);\n  }\n\n  private reflectMarks(tags: InlineTag[]) {\n    this.boldActive.set(tags.includes('strong'));\n    this.italicActive.set(tags.includes('em'));\n    this.strikeActive.set(tags.includes('del'));\n    this.underlineActive.set(tags.includes('u'));\n    this.codeActive.set(tags.includes('code'));\n  }\n\n  private runCommand(command: () => void) {\n    if (!this.canEdit()) return;\n\n    this.editorDom.restoreSelection();\n\n    command();\n    this.syncFromDom({ boundary: true });\n  }\n\n  private canEdit() {\n    return !this.disabled() && !this.readonly() && !!this.editorDom.root();\n  }\n\n  private applyHistoryEntry(entry: RichTextEditorHistoryEntry | null) {\n    if (!entry) return;\n\n    this.clearPendingMarks();\n    this.writeValueToDom(entry.value);\n    this.value.set(entry.value);\n    this.editorDom.restoreSelectionOffsets(entry.selection);\n    this.refreshActiveMarks();\n  }\n\n  private writeValueToDom(markdown: string) {\n    const root = this.editorDom.root();\n\n    if (!root) return false;\n\n    const codec = this.tokenCodec();\n    const html = markdownToHtml(markdown);\n\n    root.innerHTML = codec ? codec.render(html) : html;\n    codec?.hydrate(root);\n    this.normalizeContent(root);\n    // the DOM now matches this value, so the render effect skips it as \"already emitted\"\n    this.lastEmittedMarkdown = markdown;\n\n    return true;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Directive, effect, inject, inputBinding, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  anchoredOverlayPosition,\n  createComponentId,\n  enableAnchoredOverlayPositionExtras,\n  injectHasTouchInput,\n  injectRenderer,\n  OverlayRuntimeAnchoredPosition,\n} from '@ethlete/core';\nimport { VirtualElement } from '@floating-ui/dom';\nimport { take, tap } from 'rxjs';\nimport { OverlayConfig } from '../../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../../overlay/overlay-manager';\nimport { OverlayRef } from '../../../overlay/overlay-ref';\nimport { OverlayStrategy, OverlayStrategyBreakpoint } from '../../../overlay/strategies';\nimport { RichTextEditorFloatingToolbarComponent } from '../rich-text-editor-floating-toolbar.component';\nimport { rangeTextBoundingRect } from './internals/rich-text-editor-dom';\nimport { RichTextEditorDirective } from './rich-text-editor.directive';\n\n/**\n * Must run in an injection context tied to the editor's lifetime.\n *\n * @internal\n */\nexport const setupRichTextEditorFloatingToolbar = (editor: RichTextEditorDirective) => {\n  const document = inject(DOCUMENT);\n  const renderer = injectRenderer();\n  const overlayManager = injectOverlayManager();\n  const destroyRef = inject(DestroyRef);\n  const hasTouchInput = injectHasTouchInput();\n\n  const overlayId = createComponentId('et-rte-floating-toolbar');\n  const overlayRef = signal<OverlayRef<RichTextEditorFloatingToolbarComponent, unknown> | null>(null);\n\n  let activeRange: Range | null = null;\n  let pointerSelectingInContent = false;\n\n  const hide = () => {\n    const ref = overlayRef();\n\n    if (!ref) return;\n\n    overlayRef.set(null);\n    ref.close();\n  };\n\n  const selectableRange = (): Range | null => {\n    if (hasTouchInput()) return null;\n\n    const range = editor.editorDom.getSelection()?.range ?? null;\n    const usable = !!range && !range.collapsed && editor.focused() && !editor.disabled() && !editor.readonly();\n\n    return usable ? range : null;\n  };\n\n  const buildAnchoredPosition = (): OverlayRuntimeAnchoredPosition => {\n    const referenceElement: VirtualElement = {\n      getBoundingClientRect: () => (activeRange ? rangeTextBoundingRect(activeRange) : new DOMRect()),\n      contextElement: editor.editorDom.root() ?? undefined,\n    };\n\n    enableAnchoredOverlayPositionExtras();\n\n    return anchoredOverlayPosition({\n      referenceElement,\n      placement: 'top',\n      fallbackPlacements: ['bottom'],\n      offset: 8,\n      boundary: editor.editorDom.root() ?? undefined,\n      autoCloseIfReferenceHidden: true,\n    });\n  };\n\n  const openOrReposition = () => {\n    const existing = overlayRef();\n\n    if (existing) {\n      existing.updatePositionStrategy(buildAnchoredPosition());\n\n      return;\n    }\n\n    const strategy: OverlayStrategy = {\n      id: overlayId,\n      config: {\n        containerClass: ['et-overlay--anchored', 'et-rte-floating-toolbar-overlay'],\n        positionStrategy: () => buildAnchoredPosition(),\n      },\n    };\n\n    const strategies = (): OverlayStrategyBreakpoint[] => [{ strategy }];\n\n    const config: OverlayConfig = {\n      mode: 'non-modal',\n      hasBackdrop: false,\n      // the toolbar formats the editor's selection, so it must never take focus away from it\n      autoFocus: false,\n      restoreFocus: false,\n      closeOnEscape: false,\n      closeOnOutsidePointer: false,\n      origin: editor.editorDom.root() ?? undefined,\n      bindings: [inputBinding('editor', () => editor)],\n      strategies,\n    };\n\n    const ref = overlayManager.open<RichTextEditorFloatingToolbarComponent>(\n      RichTextEditorFloatingToolbarComponent,\n      config,\n    );\n\n    overlayRef.set(ref);\n\n    ref\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          if (overlayRef() === ref) overlayRef.set(null);\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  const evaluate = () => {\n    const range = selectableRange();\n\n    if (!range) {\n      hide();\n\n      return;\n    }\n\n    activeRange = range.cloneRange();\n    openOrReposition();\n  };\n\n  const reposition = () => {\n    const ref = overlayRef();\n\n    if (!ref) return;\n\n    const range = selectableRange();\n\n    if (!range) {\n      hide();\n\n      return;\n    }\n\n    activeRange = range.cloneRange();\n    ref.updatePositionStrategy(buildAnchoredPosition());\n  };\n\n  const finishContentPointerSelection = () => {\n    if (!pointerSelectingInContent) return;\n\n    pointerSelectingInContent = false;\n    evaluate();\n  };\n\n  effect(() => {\n    if (hasTouchInput()) hide();\n  });\n\n  effect((onCleanup) => {\n    const root = editor.editorDom.root();\n\n    if (!root) return;\n\n    const listeners = [\n      renderer.listen(root, 'pointerdown', () => (pointerSelectingInContent = true)),\n      renderer.listen(root, 'keyup', () => evaluate()),\n      renderer.listen(root, 'blur', () => hide()),\n      renderer.listen(document, 'pointerup', () => finishContentPointerSelection()),\n      renderer.listen(document, 'selectionchange', () => reposition()),\n    ];\n\n    onCleanup(() => listeners.forEach((off) => off()));\n  });\n\n  destroyRef.onDestroy(() => hide());\n};\n\n/**\n * Adds the selection toolbar to a headless `[etRichTextEditor]`. The default `et-rich-text-editor`\n * takes the same wiring through `provideRichTextEditorFloatingToolbar()`.\n */\n@Directive({\n  selector: '[etRichTextEditorFloatingToolbar]',\n})\nexport class RichTextEditorFloatingToolbarDirective {\n  constructor() {\n    setupRichTextEditorFloatingToolbar(inject(RichTextEditorDirective));\n  }\n}\n","import {\n  booleanAttribute,\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  output,\n  untracked,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../../button';\nimport { IconDirective, provideIcons, TIMES_ICON } from '../../icon';\nimport { CHECKBOX_IMPORTS } from '../checkbox';\nimport { CHOICE_FIELD_IMPORTS } from '../choice-field';\nimport { FORM_FIELD_IMPORTS } from '../form-field';\nimport { INPUT_IMPORTS } from '../input';\nimport { RichTextEditorLabels } from './rich-text-editor-labels';\n\n/** The payload the link editor emits on apply. */\nexport type RichTextEditorLinkEditorValue = {\n  href: string;\n  text: string;\n  newTab: boolean;\n};\n\n@Component({\n  selector: 'et-rich-text-editor-link-editor',\n  templateUrl: './rich-text-editor-link-editor.component.html',\n  styleUrl: './rich-text-editor-link-editor.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ...BUTTON_IMPORTS,\n    ...FORM_FIELD_IMPORTS,\n    ...INPUT_IMPORTS,\n    ...CHOICE_FIELD_IMPORTS,\n    ...CHECKBOX_IMPORTS,\n    IconDirective,\n  ],\n  providers: [provideIcons(TIMES_ICON)],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-rte-link-editor',\n    role: 'dialog',\n    '[attr.aria-label]': 'labels().linkEditor',\n    '(keydown.escape)': 'dismiss.emit()',\n  },\n})\nexport class RichTextEditorLinkEditorComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  /** The editor's strings, handed in by `[etRichTextEditorLinkEditor]` - the popover renders detached. */\n  public labels = input.required<RichTextEditorLabels>();\n\n  public href = input('');\n  public text = input('');\n  public newTab = input(false, { transform: booleanAttribute });\n  /** Whether the caret sits on an existing link (shows the Remove action + \"Update\"/\"Add\" wording). */\n  public exists = input(false, { transform: booleanAttribute });\n\n  public saveLink = output<RichTextEditorLinkEditorValue>();\n  public removeLink = output<void>();\n  public dismiss = output<void>();\n\n  protected urlValue = linkedSignal(() => this.href());\n  protected textValue = linkedSignal(() => this.text());\n  protected newTabValue = linkedSignal(() => this.newTab());\n\n  protected title = computed(() => (this.exists() ? this.labels().linkEditorEdit : this.labels().linkEditorAdd));\n\n  constructor() {\n    // The popover mounts in a detached overlay pane. Its surface IS the overlay's own surface, so it\n    // paints the overlay's registered elevation exactly (via the surface-context tracker) - the same\n    // treatment as the token popup / menu. Initial focus of the URL field is handled by the overlay's\n    // `autoFocus` (reliable timing; works within the tap's user-activation window so the mobile\n    // keyboard opens).\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    // Color still has to be re-synced here instead of cascading through the detached DOM.\n    effect(() => {\n      const contextColorProvider = this.contextColorProvider;\n\n      untracked(() => {\n        if (contextColorProvider) this.ownColorProvider.syncWithProvider(contextColorProvider);\n      });\n    });\n  }\n\n  protected save() {\n    const href = this.urlValue().trim();\n\n    if (!href) return;\n\n    this.saveLink.emit({ href, text: this.textValue().trim(), newTab: this.newTabValue() });\n  }\n\n  /** Applying re-focuses the editor before the browser processes the Enter keydown's default\n   *  action, which would then insert a line break into the editor - so the default is prevented. */\n  protected saveOnEnter(event: Event) {\n    event.preventDefault();\n    this.save();\n  }\n}\n","<div class=\"et-rte-link-editor-header\">\n  <span class=\"et-rte-link-editor-title\">{{ title() }}</span>\n  <button\n    [attr.aria-label]=\"labels().linkEditorClose\"\n    (click)=\"dismiss.emit()\"\n    et-icon-button\n    size=\"sm\"\n    type=\"button\"\n    variant=\"transparent\"\n    color=\"surface\"\n    pressedColor=\"inherit\"\n  >\n    <i etIcon=\"et-times\"></i>\n  </button>\n</div>\n\n<et-form-field size=\"sm\">\n  <et-label>{{ labels().linkTextLabel }}</et-label>\n  <et-input\n    [value]=\"textValue()\"\n    [placeholder]=\"labels().linkTextPlaceholder\"\n    (valueChange)=\"textValue.set($event)\"\n    (keydown.enter)=\"saveOnEnter($event)\"\n  />\n</et-form-field>\n\n<et-form-field size=\"sm\">\n  <et-label>{{ labels().linkUrlLabel }}</et-label>\n  <et-input\n    [value]=\"urlValue()\"\n    [placeholder]=\"labels().linkUrlPlaceholder\"\n    (valueChange)=\"urlValue.set($event)\"\n    (keydown.enter)=\"saveOnEnter($event)\"\n    type=\"url\"\n  />\n</et-form-field>\n\n<et-choice-field size=\"sm\">\n  <et-checkbox [checked]=\"newTabValue()\" (checkedChange)=\"newTabValue.set($event)\" />\n  <et-label>{{ labels().linkNewTab }}</et-label>\n</et-choice-field>\n\n<div class=\"et-rte-link-editor-actions\">\n  @if (exists()) {\n    <button (click)=\"removeLink.emit()\" et-text-button size=\"sm\" type=\"button\">{{ labels().linkRemove }}</button>\n  }\n  <button [disabled]=\"!urlValue().trim()\" (click)=\"save()\" et-button size=\"sm\" type=\"button\">\n    {{ exists() ? labels().linkUpdate : labels().linkAdd }}\n  </button>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Directive, ElementRef, inject, inputBinding, outputBinding, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  anchoredOverlayPosition,\n  enableAnchoredOverlayPositionExtras,\n  OverlayRuntimeAnchoredPosition,\n} from '@ethlete/core';\nimport { VirtualElement } from '@floating-ui/dom';\nimport { take, tap } from 'rxjs';\nimport { OverlayConfig } from '../../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../../overlay/overlay-manager';\nimport { OverlayRef } from '../../../overlay/overlay-ref';\nimport { injectAnchoredDialogStrategy, injectTopSheetStrategy } from '../../../overlay/strategies';\nimport {\n  RichTextEditorLinkEditorComponent,\n  RichTextEditorLinkEditorValue,\n} from '../rich-text-editor-link-editor.component';\nimport { rangeTextBoundingRect } from './internals/rich-text-editor-dom';\nimport { RichTextEditorDirective } from './rich-text-editor.directive';\n\n/**\n * Must run in an injection context tied to the editor's lifetime.\n *\n * @internal\n */\nexport const setupRichTextEditorLinkEditor = (editor: RichTextEditorDirective, host: HTMLElement) => {\n  const document = inject(DOCUMENT);\n  const overlayManager = injectOverlayManager();\n  const destroyRef = inject(DestroyRef);\n\n  const overlayRef = signal<OverlayRef<RichTextEditorLinkEditorComponent, unknown> | null>(null);\n\n  /** The selection the popover edits - captured on open, restored before applying (the popover's\n   *  inputs take focus, which would otherwise collapse the live selection). */\n  let savedRange: Range | null = null;\n\n  const close = () => {\n    const ref = overlayRef();\n\n    if (!ref) return;\n\n    overlayRef.set(null);\n    ref.close();\n  };\n\n  const restoreSelection = () => {\n    if (!savedRange) return;\n\n    const selection = document.getSelection();\n\n    if (!selection) return;\n\n    selection.removeAllRanges();\n    selection.addRange(savedRange);\n  };\n\n  const buildAnchoredPosition = (): OverlayRuntimeAnchoredPosition => {\n    const referenceElement: VirtualElement = {\n      getBoundingClientRect: () => (savedRange ? rangeTextBoundingRect(savedRange) : new DOMRect()),\n      contextElement: editor.editorDom.root() ?? undefined,\n    };\n\n    enableAnchoredOverlayPositionExtras();\n\n    return anchoredOverlayPosition({\n      referenceElement,\n      placement: 'bottom',\n      fallbackPlacements: ['top'],\n      offset: 10,\n      arrowPadding: 16,\n      autoCloseIfReferenceHidden: true,\n    });\n  };\n\n  const apply = (value: RichTextEditorLinkEditorValue) => {\n    restoreSelection();\n    editor.applyLink(value.href, { newTab: value.newTab, text: value.text });\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const remove = () => {\n    restoreSelection();\n    editor.removeLink();\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const dismiss = () => {\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const open = () => {\n    if (overlayRef()) {\n      close();\n\n      return;\n    }\n\n    if (editor.disabled() || editor.readonly()) return;\n\n    // a tap on the link button can move focus off the editor on touch; restore the selection so the\n    // popover edits and re-links what was actually selected\n    editor.editorDom.restoreSelection();\n\n    const selection = editor.editorDom.getSelection();\n    const info = editor.editorDom.links?.readActiveLink();\n\n    if (!selection || !info) return;\n\n    savedRange = selection.range.cloneRange();\n\n    const config: OverlayConfig = {\n      mode: 'non-modal',\n      // the overlay focuses this within the opening tap's user-activation window, so the mobile\n      // keyboard opens\n      autoFocus: 'input[type=\"url\"]',\n      restoreFocus: false,\n      closeOnEscape: true,\n      closeOnOutsidePointer: true,\n      // the whole editor (toolbar + content) is the origin, so clicking the link button that opened\n      // the popover cleanly toggles it shut instead of closing-then-reopening\n      origin: host,\n      bindings: [\n        inputBinding('href', () => info.href),\n        inputBinding('text', () => info.text),\n        inputBinding('newTab', () => info.newTab),\n        inputBinding('exists', () => info.exists),\n        inputBinding('labels', () => editor.resolvedLabels()),\n        outputBinding<RichTextEditorLinkEditorValue>('saveLink', (value) => apply(value)),\n        outputBinding<void>('removeLink', () => remove()),\n        outputBinding<void>('dismiss', () => dismiss()),\n      ],\n      strategies: () => {\n        const topSheet = injectTopSheetStrategy();\n        const anchoredDialog = injectAnchoredDialogStrategy();\n\n        return [\n          {\n            strategy: topSheet.build({ containerClass: 'et-rte-link-editor-overlay', hasBackdrop: true }),\n          },\n          {\n            breakpoint: 'md',\n            strategy: anchoredDialog.build({\n              containerClass: 'et-rte-link-editor-overlay',\n              positionStrategy: () => buildAnchoredPosition(),\n              applyTransformOrigin: false,\n              minWidth: 'unset',\n              hasBackdrop: false,\n            }),\n          },\n        ];\n      },\n    };\n\n    const ref = overlayManager.open<RichTextEditorLinkEditorComponent>(RichTextEditorLinkEditorComponent, config);\n\n    overlayRef.set(ref);\n    editor.linkEditorOpen.set(true);\n\n    ref\n      .afterClosedEvent()\n      .pipe(\n        take(1),\n        tap((event) => {\n          editor.linkEditorOpen.set(false);\n\n          if (overlayRef() === ref) overlayRef.set(null);\n\n          // Escape is an explicit \"back to the editor\" - hand focus back (restoreFocus is off).\n          // An outside-pointer close is aimed at something else; don't steal its focus.\n          if (event.source === 'escape') {\n            queueMicrotask(() => editor.activate());\n          }\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  editor.openLinkEditor.set(() => open());\n\n  destroyRef.onDestroy(() => {\n    editor.openLinkEditor.set(null);\n    close();\n  });\n};\n\n/**\n * Adds the link editor popover to a headless `[etRichTextEditor]`. The default `et-rich-text-editor`\n * takes the same wiring through `provideRichTextEditorLinkEditor()`.\n */\n@Directive({\n  selector: '[etRichTextEditorLinkEditor]',\n})\nexport class RichTextEditorLinkEditorDirective {\n  constructor() {\n    const host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    setupRichTextEditorLinkEditor(inject(RichTextEditorDirective), host.nativeElement);\n  }\n}\n","import {\n  booleanAttribute,\n  Component,\n  effect,\n  inject,\n  input,\n  output,\n  untracked,\n  viewChild,\n  ElementRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  AutoSurfaceDirective,\n  COLOR_PROVIDER,\n  ColorTheme,\n  injectAnimatedBlockSize,\n  injectErrorTheme,\n  ProvideColorDirective,\n} from '@ethlete/core';\nimport { ProgressBarComponent, SpinnerComponent } from '../../loader';\nimport { RichTextEditorTriggerItem } from './rich-text-editor-trigger';\n\n/**\n * The caret-anchored autocomplete list opened by `[etRichTextEditorTriggers]`. Purely\n * presentational: it renders items / loading / error / empty states and reports selection and\n * hover. Focus stays in the editor's `contenteditable` - the active row is driven by\n * `aria-activedescendant`, and pointer events are `preventDefault`ed so mousedown never steals it.\n *\n * Mirrors `et-menu`: neutral surface chrome, an animated block-size resize as the list changes,\n * and an error line in the app's error color theme.\n */\n@Component({\n  selector: 'et-rich-text-editor-token-popup',\n  templateUrl: './rich-text-editor-token-popup.component.html',\n  styleUrl: './rich-text-editor-token-popup.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [SpinnerComponent, ProgressBarComponent, ProvideColorDirective],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-rte-token-popup',\n    role: 'listbox',\n    '[id]': 'listboxId()',\n    // keep the caret/selection in the editor when the user clicks a row\n    '(mousedown)': '$event.preventDefault()',\n  },\n})\nexport class RichTextEditorTokenPopupComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  public items = input.required<RichTextEditorTriggerItem[]>();\n  public activeIndex = input.required<number>();\n  public loading = input(false, { transform: booleanAttribute });\n  public error = input<string | null>(null);\n  public emptyLabel = input.required<string>();\n  public listboxId = input.required<string>();\n\n  public selectItem = output<RichTextEditorTriggerItem>();\n  public activateItem = output<number>();\n\n  private bodyElement = viewChild<ElementRef<HTMLElement>>('body');\n\n  /** The app's error color theme, or `null` when none is registered (error text stays neutral). */\n  protected errorColorTheme: ColorTheme | null = this.resolveErrorTheme();\n\n  constructor() {\n    // The popup mounts in a detached overlay pane. Its surface IS the overlay's own surface, so it\n    // paints the overlay's registered elevation exactly (via the surface-context tracker) rather\n    // than stacking a level above it - the same treatment as the menu / tooltip panels.\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    // Color still has to be re-synced here instead of cascading through the detached DOM.\n    effect(() => {\n      const contextColorProvider = this.contextColorProvider;\n\n      untracked(() => {\n        if (contextColorProvider) {\n          this.ownColorProvider.syncWithProvider(contextColorProvider);\n        }\n      });\n    });\n\n    // Smoothly animate the panel's height as the list changes (loading → results, filtering).\n    injectAnimatedBlockSize({ observe: this.bodyElement, resizingClass: 'et-rte-token-popup--resizing' });\n  }\n\n  private resolveErrorTheme(): ColorTheme | null {\n    try {\n      return injectErrorTheme();\n    } catch {\n      return null;\n    }\n  }\n}\n","<!-- reloading over existing results: a top progress bar keeps the loading cue out of layout, so\n     the list height never changes while re-fetching. Kept mounted and faded via `--visible` so it\n     animates in/out instead of popping. -->\n<et-progress-bar\n  [class.et-rte-token-popup-progress--visible]=\"loading() && items().length > 0\"\n  class=\"et-rte-token-popup-progress\"\n  indeterminate\n/>\n\n<!-- re-fetch failed while results are still on screen: annotate above the list without disturbing it -->\n@if (error(); as err) {\n  @if (items().length > 0) {\n    <p [etProvideColor]=\"errorColorTheme\" class=\"et-rte-token-popup-error\" role=\"alert\">{{ err }}</p>\n  }\n}\n\n<div #body class=\"et-rte-token-popup-body\">\n  @if (items().length === 0) {\n    @if (error(); as err) {\n      <!-- nothing to show and the source failed: a centered, self-contained error state so the panel\n           doesn't read as an empty box with a stray line of text -->\n      <div\n        [etProvideColor]=\"errorColorTheme\"\n        class=\"et-rte-token-popup-state et-rte-token-popup-state--error\"\n        role=\"alert\"\n      >\n        <svg class=\"et-rte-token-popup-state-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n          <path\n            d=\"M12 8.5v4.5M12 16.5h.01M10.3 3.86 1.82 18.5A2 2 0 0 0 3.53 21.5h16.94a2 2 0 0 0 1.71-3L13.7 3.86a2 2 0 0 0-3.4 0Z\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            stroke-width=\"2\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n        </svg>\n        <span class=\"et-rte-token-popup-state-label\">{{ err }}</span>\n      </div>\n    } @else {\n      <!-- loading and empty share one fixed-height box so the transition between them doesn't resize -->\n      <div class=\"et-rte-token-popup-placeholder\">\n        @if (loading()) {\n          <et-spinner diameter=\"18\" />\n        } @else {\n          {{ emptyLabel() }}\n        }\n      </div>\n    }\n  } @else {\n    @for (item of items(); track item.id; let i = $index) {\n      <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- combobox/listbox: focus stays in the editor and keyboard is driven via aria-activedescendant; rows are pointer affordances only -->\n      <div\n        [id]=\"listboxId() + '-option-' + i\"\n        [attr.aria-selected]=\"i === activeIndex()\"\n        [attr.aria-disabled]=\"item.disabled || null\"\n        [attr.data-active]=\"i === activeIndex() ? '' : null\"\n        (click)=\"!item.disabled && selectItem.emit(item)\"\n        (pointerenter)=\"activateItem.emit(i)\"\n        class=\"et-rte-token-popup-option\"\n        role=\"option\"\n      >\n        <span class=\"et-rte-token-popup-option-label\">{{ item.label }}</span>\n        @if (item.description) {\n          <span class=\"et-rte-token-popup-option-description\">{{ item.description }}</span>\n        }\n      </div>\n    }\n  }\n</div>\n","import { RichTextEditorTrigger } from '../../rich-text-editor-trigger';\n\nexport type RichTextEditorTriggerMatch = {\n  trigger: RichTextEditorTrigger;\n  textNode: Text;\n  charOffset: number;\n  caretOffset: number;\n  query: string;\n};\n\nconst isWordBoundary = (text: string, index: number) => index === 0 || /\\s/.test(text[index - 1] ?? '');\n\nexport type ResolveTriggerMatchOptions = {\n  triggers: readonly RichTextEditorTrigger[];\n  root: HTMLElement;\n  range: Range;\n};\n\nexport const resolveTriggerMatch = ({\n  triggers,\n  root,\n  range,\n}: ResolveTriggerMatchOptions): RichTextEditorTriggerMatch | null => {\n  if (!range.collapsed) return null;\n\n  const node = range.startContainer;\n\n  if (node.nodeType !== Node.TEXT_NODE || !root.contains(node)) return null;\n\n  const textNode = node as Text;\n  const caretOffset = range.startOffset;\n  const text = textNode.data;\n\n  // `lastIndexOf` clamps a negative `fromIndex` to 0, so a caret at a node's start would match the\n  // trigger char in front of it and picking an item would add a chip without consuming the text.\n  if (caretOffset === 0) return null;\n\n  let best: RichTextEditorTriggerMatch | null = null;\n\n  for (const trigger of triggers) {\n    const charOffset = text.lastIndexOf(trigger.char, caretOffset - 1);\n\n    if (charOffset === -1 || !isWordBoundary(text, charOffset)) continue;\n\n    const query = text.slice(charOffset + 1, caretOffset);\n\n    if (!(trigger.allowSpaces ?? false) && /\\s/.test(query)) continue;\n\n    if (!best || charOffset > best.charOffset) {\n      best = { trigger, textNode, charOffset, caretOffset, query };\n    }\n  }\n\n  return best;\n};\n\nexport const triggerCharRect = (doc: Document, match: RichTextEditorTriggerMatch): DOMRect => {\n  const range = doc.createRange();\n\n  range.setStart(match.textNode, match.charOffset);\n  range.setEnd(match.textNode, Math.min(match.charOffset + 1, match.textNode.length));\n\n  const rect = range.getBoundingClientRect();\n\n  if (rect.width > 0 || rect.height > 0) return rect;\n\n  range.collapse(true);\n\n  return range.getBoundingClientRect();\n};\n","import {\n  catchError,\n  concat,\n  distinctUntilChanged,\n  EMPTY,\n  from,\n  isObservable,\n  map,\n  Observable,\n  of,\n  scan,\n  switchMap,\n  timer,\n} from 'rxjs';\nimport { RichTextEditorTrigger, RichTextEditorTriggerItem } from '../../rich-text-editor-trigger';\n\nexport type RichTextEditorTriggerItemsState = {\n  items: RichTextEditorTriggerItem[];\n  loading: boolean;\n  error: unknown | null;\n};\n\nconst isPromiseLike = <T>(value: unknown): value is Promise<T> =>\n  !!value && typeof (value as Promise<T>).then === 'function';\n\nconst matchesQuery = (item: RichTextEditorTriggerItem, query: string) => {\n  if (!query) return true;\n\n  const needle = query.toLowerCase();\n  const haystack = [item.label, item.description ?? '', item.id].join(' ').toLowerCase();\n\n  return haystack.includes(needle);\n};\n\nexport const filterStaticItems = (\n  items: readonly RichTextEditorTriggerItem[],\n  query: string,\n): RichTextEditorTriggerItem[] => items.filter((item) => matchesQuery(item, query));\n\n/**\n * Callers must pipe this through `switchMap`: that unsubscribes stale requests, which is why a\n * superseded Promise/Observable needs no manual generation guard.\n */\nexport const resolveTriggerItems = (\n  trigger: RichTextEditorTrigger,\n  query: string,\n): Observable<RichTextEditorTriggerItem[]> => {\n  const source = trigger.items;\n\n  if (typeof source !== 'function') {\n    return of(filterStaticItems(source, query));\n  }\n\n  if (query.length < (trigger.minQueryLength ?? 0)) {\n    return of([]);\n  }\n\n  const result = source(query);\n\n  if (isObservable(result)) return result;\n  if (isPromiseLike<RichTextEditorTriggerItem[]>(result)) return from(result);\n\n  return of(result);\n};\n\ntype InternalState = RichTextEditorTriggerItemsState & { trigger: RichTextEditorTrigger | null };\n\nconst EMPTY_STATE: InternalState = { items: [], loading: false, error: null, trigger: null };\n\nexport type RichTextEditorTriggerRequest = { trigger: RichTextEditorTrigger; query: string } | null;\n\nexport const trackTriggerItems = (\n  request$: Observable<RichTextEditorTriggerRequest>,\n): Observable<RichTextEditorTriggerItemsState> =>\n  request$.pipe(\n    distinctUntilChanged((a, b) => a?.trigger === b?.trigger && a?.query === b?.query),\n    switchMap((request): Observable<InternalState> => {\n      // Emitting an empty state here would flash \"No results\" through the closing popup's fade-out.\n      if (!request) return EMPTY;\n\n      const trigger = request.trigger;\n      const fetch$ = resolveTriggerItems(trigger, request.query).pipe(\n        map((items): InternalState => ({ items, loading: false, error: null, trigger })),\n        catchError((error): Observable<InternalState> => of({ items: [], loading: false, error, trigger })),\n      );\n\n      if (typeof trigger.items !== 'function') return fetch$;\n\n      return concat(\n        of<InternalState>({ items: [], loading: true, error: null, trigger }),\n        fetch$.pipe(delayFetch(trigger)),\n      );\n    }),\n    scan((previous, next): InternalState => {\n      const keepPrevious = next.loading && next.items.length === 0 && previous.trigger === next.trigger;\n\n      return { ...next, items: keepPrevious ? previous.items : next.items };\n    }, EMPTY_STATE),\n    map(({ items, loading, error }): RichTextEditorTriggerItemsState => ({ items, loading, error })),\n  );\n\nconst delayFetch =\n  (trigger: RichTextEditorTrigger) =>\n  (source$: Observable<InternalState>): Observable<InternalState> =>\n    timer(trigger.debounceTime ?? 150).pipe(switchMap(() => source$));\n","import { DOCUMENT } from '@angular/common';\nimport {\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  outputBinding,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n  anchoredOverlayPosition,\n  createComponentId,\n  enableAnchoredOverlayPositionExtras,\n  injectRenderer,\n  OverlayRuntimeAnchoredPosition,\n  RuntimeError,\n} from '@ethlete/core';\nimport { VirtualElement } from '@floating-ui/dom';\nimport { fromEvent, map, take, tap } from 'rxjs';\nimport { OverlayConfig } from '../../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../../overlay/overlay-manager';\nimport { OverlayRef } from '../../../overlay/overlay-ref';\nimport { OverlayStrategy, OverlayStrategyBreakpoint } from '../../../overlay/strategies';\nimport { RICH_TEXT_EDITOR_ERROR_CODES } from '../rich-text-editor-errors';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RichTextEditorTokenPopupComponent } from '../rich-text-editor-token-popup.component';\nimport { RichTextEditorTrigger, RichTextEditorTriggerItem } from '../rich-text-editor-trigger';\nimport {\n  assertValidToken,\n  buildChipElement,\n  createRichTextEditorTokenCodec,\n  TOKEN_CHIP_ATTR,\n} from './internals/rich-text-editor-token';\nimport {\n  resolveTriggerMatch,\n  RichTextEditorTriggerMatch,\n  triggerCharRect,\n} from './internals/rich-text-editor-trigger-detection';\nimport { trackTriggerItems } from './internals/rich-text-editor-trigger-source';\nimport { RichTextEditorDirective } from './rich-text-editor.directive';\n\n@Directive({\n  selector: '[etRichTextEditorTriggers]',\n})\nexport class RichTextEditorTriggersDirective {\n  private editor = inject(RichTextEditorDirective, { optional: true });\n  private document = inject(DOCUMENT);\n  private renderer = injectRenderer();\n  private overlayManager = injectOverlayManager();\n  private destroyRef = inject(DestroyRef);\n\n  public triggers = input<readonly RichTextEditorTrigger[]>([]);\n\n  /**\n   * Recognize tokens in pasted text that spell themselves out - `#User Name`, a trigger char plus an\n   * item's label or id - and insert them as chips instead of literal text. Matches only against\n   * triggers with a static `items` list. Turn it off to keep such text literal.\n   *\n   * @default true\n   */\n  public parsePastedTokens = input(true, { transform: booleanAttribute });\n\n  /** Shown by the popup when a query matches nothing. `null` (the default) uses the editor's\n   *  `noResults` label. */\n  public emptyLabel = input<string | null>(null);\n\n  private resolvedEmptyLabel = computed(\n    () => this.emptyLabel() ?? this.editor?.resolvedLabels().noResults ?? DEFAULT_RICH_TEXT_EDITOR_LABELS.noResults,\n  );\n\n  private readonly listboxId = createComponentId('et-rte-token-popup');\n\n  private activeMatch = signal<RichTextEditorTriggerMatch | null>(null);\n  private activeIndex = signal(0);\n  private overlayRef = signal<OverlayRef<RichTextEditorTokenPopupComponent, unknown> | null>(null);\n\n  private itemsState = toSignal(\n    trackTriggerItems(\n      toObservable(this.activeMatch).pipe(map((m) => (m ? { trigger: m.trigger, query: m.query } : null))),\n    ),\n    // Start in the loading state, not empty - otherwise the popup flashes \"No results\" for a frame\n    // before `toObservable(activeMatch)` emits (its effect fires on the next tick).\n    { initialValue: { items: [], loading: true, error: null } },\n  );\n\n  private errorText = computed(() => {\n    const error = this.itemsState().error;\n\n    if (!error) return null;\n\n    return error instanceof Error ? error.message : String(error);\n  });\n\n  private isComposing = false;\n  private listenersAttached = false;\n  /** Position of a trigger char the user dismissed (Escape) - suppresses reopening for that run. */\n  private dismissed: { node: Text; offset: number } | null = null;\n\n  constructor() {\n    if (!this.editor) {\n      throw new RuntimeError(\n        RICH_TEXT_EDITOR_ERROR_CODES.TRIGGERS_OUTSIDE_EDITOR,\n        '[etRichTextEditorTriggers] must be placed on an element that also has [etRichTextEditor] (e.g. <et-rich-text-editor>).',\n      );\n    }\n\n    const editor = this.editor;\n\n    editor.tokenCodec.set(createRichTextEditorTokenCodec(() => this.triggers()));\n\n    // Reserve the trigger chars so markdown autoformat never converts what may start a token run\n    // (e.g. a `#` trigger vs `# ` heading), and suspend autoformat while a popup run is active.\n    effect(() => {\n      const reservedChars = this.triggers().map((trigger) => trigger.char);\n\n      untracked(() => editor.autoformatReservedChars.set(reservedChars));\n    });\n    effect(() => {\n      const suppressed = this.activeMatch() !== null;\n\n      untracked(() => editor.autoformatSuppressed.set(suppressed));\n    });\n    effect(() => {\n      const parse = this.parsePastedTokens();\n\n      untracked(() => editor.parsePastedTokens.set(parse));\n    });\n\n    if (ngDevMode) {\n      effect(() => this.assertUniqueTriggers(this.triggers()));\n    }\n\n    effect(() => {\n      const root = editor.editorDom.root();\n\n      if (!root || this.listenersAttached) return;\n\n      this.listenersAttached = true;\n      this.attachListeners(root);\n    });\n\n    effect(() => {\n      const length = this.itemsState().items.length;\n\n      untracked(() => {\n        if (this.activeIndex() > length - 1) this.activeIndex.set(Math.max(0, length - 1));\n      });\n    });\n\n    effect(() => {\n      const root = editor.editorDom.root();\n      const open = !!this.overlayRef();\n      const index = this.activeIndex();\n\n      if (!root) return;\n\n      untracked(() => {\n        if (open) {\n          this.renderer.setAttribute(root, 'aria-activedescendant', `${this.listboxId}-option-${index}`);\n        } else {\n          this.renderer.removeAttribute(root, 'aria-activedescendant');\n        }\n      });\n    });\n\n    this.destroyRef.onDestroy(() => this.close());\n  }\n\n  private attachListeners(root: HTMLElement) {\n    fromEvent(root, 'input')\n      .pipe(\n        tap(() => this.syncDetection()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    // capture phase so navigation keys win over the editor's own (bubble-phase) key handling\n    fromEvent<KeyboardEvent>(root, 'keydown', { capture: true })\n      .pipe(\n        tap((event) => this.interceptPopupKeys(event)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    fromEvent(root, 'compositionstart')\n      .pipe(\n        tap(() => (this.isComposing = true)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    fromEvent(root, 'compositionend')\n      .pipe(\n        tap(() => {\n          this.isComposing = false;\n          this.syncDetection();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    fromEvent(this.document, 'selectionchange')\n      .pipe(\n        tap(() => this.syncDetection()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private syncDetection() {\n    if (this.isComposing || !this.editor) return;\n\n    const root = this.editor.editorDom.root();\n    const selection = root ? this.editor.editorDom.getSelection() : null;\n    const match =\n      root && selection ? resolveTriggerMatch({ triggers: this.triggers(), root, range: selection.range }) : null;\n\n    if (!match || this.isDismissed(match)) {\n      this.activeMatch.set(null);\n      this.close();\n\n      return;\n    }\n\n    if (this.dismissed && (this.dismissed.node !== match.textNode || this.dismissed.offset !== match.charOffset)) {\n      this.dismissed = null;\n    }\n\n    const previous = this.activeMatch();\n\n    this.activeMatch.set(match);\n\n    if (!previous || previous.textNode !== match.textNode || previous.charOffset !== match.charOffset) {\n      this.activeIndex.set(0);\n    }\n\n    this.openOrReposition();\n  }\n\n  private interceptPopupKeys(event: KeyboardEvent) {\n    if (event.key === 'Backspace' && this.deletePrecedingChip()) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      return;\n    }\n\n    if (!this.overlayRef() || !this.activeMatch()) return;\n\n    const hasItems = this.itemsState().items.length > 0;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        if (!hasItems) return;\n        event.preventDefault();\n        event.stopPropagation();\n        this.moveActive(1);\n        break;\n      case 'ArrowUp':\n        if (!hasItems) return;\n        event.preventDefault();\n        event.stopPropagation();\n        this.moveActive(-1);\n        break;\n      case 'Enter':\n      case 'Tab':\n        if (!hasItems) return;\n        event.preventDefault();\n        event.stopPropagation();\n        this.selectActive();\n        break;\n      case 'Escape':\n        event.preventDefault();\n        event.stopPropagation();\n        this.dismiss();\n        break;\n    }\n  }\n\n  private moveActive(delta: number) {\n    const length = this.itemsState().items.length;\n\n    if (length === 0) return;\n\n    this.activeIndex.set((this.activeIndex() + delta + length) % length);\n  }\n\n  private selectActive() {\n    const items = this.itemsState().items;\n    const item = items[Math.min(this.activeIndex(), items.length - 1)];\n\n    if (item) this.insertItem(item);\n  }\n\n  private insertItem(item: RichTextEditorTriggerItem) {\n    const match = this.activeMatch();\n\n    if (!match || item.disabled || !this.editor || this.editor.disabled() || this.editor.readonly()) return;\n\n    const { type } = match.trigger;\n\n    if (ngDevMode) assertValidToken(type, item.id);\n\n    const range = this.document.createRange();\n\n    range.setStart(match.textNode, match.charOffset);\n    range.setEnd(match.textNode, Math.min(match.caretOffset, match.textNode.length));\n\n    const selection = this.document.getSelection();\n\n    selection?.removeAllRanges();\n    selection?.addRange(range);\n\n    this.editor.editorDom.insertToken(this.buildChip(match.trigger, item));\n    // Trailing space so the caret escapes the chip and the next word doesn't hug it. Must be a\n    // no-break space: a plain space at the end of a line is CSS-collapsed and Chrome drops it from\n    // the text node on the next keystroke. Serialization normalizes it back to a plain space.\n    this.editor.editorDom.insertToken(this.renderer.createText('\\u00a0'));\n    this.editor.syncFromDom({ boundary: true });\n\n    this.activeMatch.set(null);\n    this.close();\n  }\n\n  private buildChip(trigger: RichTextEditorTrigger, item: RichTextEditorTriggerItem): HTMLElement {\n    return buildChipElement(this.renderer, {\n      type: trigger.type,\n      id: item.id,\n      label: item.label,\n      prefix: trigger.char,\n    });\n  }\n\n  private deletePrecedingChip() {\n    if (!this.editor) return false;\n\n    const selection = this.editor.editorDom.getSelection();\n\n    if (!selection || !selection.range.collapsed) return false;\n\n    const { range } = selection;\n    const container = range.startContainer;\n    let candidate: Node | null;\n\n    if (container.nodeType === Node.TEXT_NODE) {\n      if (range.startOffset !== 0) return false;\n      candidate = container.previousSibling;\n    } else {\n      candidate = container.childNodes[range.startOffset - 1] ?? null;\n    }\n\n    if (!(candidate instanceof HTMLElement) || !candidate.hasAttribute(TOKEN_CHIP_ATTR)) return false;\n\n    candidate.remove();\n    this.editor.syncFromDom({ boundary: true });\n\n    return true;\n  }\n\n  private dismiss() {\n    const match = this.activeMatch();\n\n    if (match) this.dismissed = { node: match.textNode, offset: match.charOffset };\n\n    this.activeMatch.set(null);\n    this.close();\n  }\n\n  private isDismissed(match: RichTextEditorTriggerMatch) {\n    return !!this.dismissed && this.dismissed.node === match.textNode && this.dismissed.offset === match.charOffset;\n  }\n\n  private openOrReposition() {\n    const existing = this.overlayRef();\n\n    if (existing) {\n      existing.updatePositionStrategy(this.buildAnchoredPosition());\n\n      return;\n    }\n\n    const strategy: OverlayStrategy = {\n      id: this.listboxId,\n      config: {\n        containerClass: ['et-overlay--anchored', 'et-rte-token-popup-overlay'],\n        positionStrategy: () => this.buildAnchoredPosition(),\n      },\n    };\n\n    const strategies = (): OverlayStrategyBreakpoint[] => [{ strategy }];\n\n    const config: OverlayConfig = {\n      mode: 'non-modal',\n      hasBackdrop: false,\n      autoFocus: false,\n      restoreFocus: false,\n      closeOnEscape: false,\n      closeOnOutsidePointer: true,\n      origin: this.editor?.editorDom.root() ?? undefined,\n      bindings: [\n        inputBinding('items', () => this.itemsState().items),\n        inputBinding('activeIndex', () => this.activeIndex()),\n        inputBinding('loading', () => this.itemsState().loading),\n        inputBinding('error', () => this.errorText()),\n        inputBinding('emptyLabel', () => this.resolvedEmptyLabel()),\n        inputBinding('listboxId', () => this.listboxId),\n        outputBinding<RichTextEditorTriggerItem>('selectItem', (item) => this.insertItem(item)),\n        outputBinding<number>('activateItem', (index) => this.activeIndex.set(index)),\n      ],\n      strategies,\n    };\n\n    const ref = this.overlayManager.open<RichTextEditorTokenPopupComponent>(RichTextEditorTokenPopupComponent, config);\n\n    this.overlayRef.set(ref);\n    this.setAriaExpanded(true);\n\n    ref\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          if (this.overlayRef() !== ref) return;\n\n          this.overlayRef.set(null);\n          this.setAriaExpanded(false);\n          if (this.activeMatch()) this.dismiss();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private close() {\n    const ref = this.overlayRef();\n\n    if (!ref) return;\n\n    this.overlayRef.set(null);\n    this.setAriaExpanded(false);\n    ref.close();\n  }\n\n  private buildAnchoredPosition(): OverlayRuntimeAnchoredPosition {\n    const referenceElement: VirtualElement = {\n      getBoundingClientRect: () => {\n        const match = this.activeMatch();\n\n        return match ? triggerCharRect(this.document, match) : new DOMRect();\n      },\n      contextElement: this.editor?.editorDom.root() ?? undefined,\n    };\n\n    enableAnchoredOverlayPositionExtras();\n\n    return anchoredOverlayPosition({\n      referenceElement,\n      placement: 'bottom-start',\n      fallbackPlacements: ['top-start', 'bottom-end', 'top-end'],\n      offset: 4,\n      shift: { crossAxis: true },\n      autoResize: true,\n      autoCloseIfReferenceHidden: true,\n    });\n  }\n\n  private setAriaExpanded(open: boolean) {\n    const root = this.editor?.editorDom.root();\n\n    if (!root) return;\n\n    this.renderer.setAttribute(root, 'aria-expanded', String(open));\n\n    if (open) {\n      this.renderer.setAttribute(root, 'aria-controls', this.listboxId);\n      this.renderer.setAttribute(root, 'aria-haspopup', 'listbox');\n    }\n  }\n\n  private assertUniqueTriggers(triggers: readonly RichTextEditorTrigger[]) {\n    const chars = new Set<string>();\n    const types = new Set<string>();\n\n    for (const trigger of triggers) {\n      if (chars.has(trigger.char)) {\n        throw new RuntimeError(\n          RICH_TEXT_EDITOR_ERROR_CODES.DUPLICATE_TRIGGER_CHAR,\n          `[etRichTextEditorTriggers] duplicate trigger char \"${trigger.char}\". Each trigger needs a unique char.`,\n        );\n      }\n\n      if (types.has(trigger.type)) {\n        throw new RuntimeError(\n          RICH_TEXT_EDITOR_ERROR_CODES.DUPLICATE_TRIGGER_TYPE,\n          `[etRichTextEditorTriggers] duplicate trigger type \"${trigger.type}\". Each trigger needs a unique type.`,\n        );\n      }\n\n      chars.add(trigger.char);\n      types.add(trigger.type);\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { RichTextEditorDirective } from './headless/rich-text-editor.directive';\n\n/**\n * Wires the selection toolbar to one editor instance. Called from the editor's constructor (an\n * injection context), so an implementation may `inject()`.\n */\nexport type RichTextEditorFloatingToolbarSetup = (editor: RichTextEditorDirective) => void;\n\n/**\n * The selection toolbar's wiring, registered by `provideRichTextEditorFloatingToolbar()`. Absent\n * means the editor shows its static toolbar only.\n */\nexport const RICH_TEXT_EDITOR_FLOATING_TOOLBAR = new InjectionToken<RichTextEditorFloatingToolbarSetup>(\n  'RichTextEditorFloatingToolbar',\n);\n","import { Provider } from '@angular/core';\nimport { setupRichTextEditorFloatingToolbar } from './headless/rich-text-editor-floating-toolbar.directive';\nimport { RICH_TEXT_EDITOR_FLOATING_TOOLBAR } from './rich-text-editor-floating-toolbar.token';\n\n/**\n * Gives every `et-rich-text-editor` in scope the toolbar that follows the selection: selecting text\n * with a pointer or the keyboard floats the inline marks (bold, italic, underline, strikethrough,\n * code and - with the link tool - link) above the selected text.\n *\n * Without this provider the editor keeps its static toolbar, and the floating one, with the overlay\n * runtime and anchored positioning it pulls in, never reaches the bundle.\n *\n * @example\n * providers: [provideRichTextEditorFloatingToolbar()]\n */\nexport const provideRichTextEditorFloatingToolbar = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_FLOATING_TOOLBAR,\n  useValue: setupRichTextEditorFloatingToolbar,\n});\n","import {\n  Component,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  output,\n  untracked,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AutoSurfaceDirective, COLOR_PROVIDER, ProvideColorDirective } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../../button';\nimport { IconDirective, provideIcons, TIMES_ICON } from '../../icon';\nimport { FORM_FIELD_IMPORTS } from '../form-field';\nimport { INPUT_IMPORTS } from '../input';\nimport { RichTextEditorLabels } from './rich-text-editor-labels';\n\n/**\n * The image popover of the opt-in image tool: the alt text of the image at the caret, plus the action\n * that takes the image back out. Opened by `provideRichTextEditorImageTool`, in the same kind of\n * overlay as the link editor (anchored card on desktop, top sheet on phones).\n */\n@Component({\n  selector: 'et-rich-text-editor-image-editor',\n  templateUrl: './rich-text-editor-image-editor.component.html',\n  styleUrl: './rich-text-editor-image-editor.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS, ...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS, IconDirective],\n  providers: [provideIcons(TIMES_ICON)],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-rte-image-editor',\n    role: 'dialog',\n    '[attr.aria-label]': 'labels().imageEditor',\n    '(keydown.escape)': 'dismiss.emit()',\n  },\n})\nexport class RichTextEditorImageEditorComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n\n  /** The editor's strings, handed in by the tool - the popover renders detached. */\n  public labels = input.required<RichTextEditorLabels>();\n\n  /** The image's current alt text. */\n  public alt = input('');\n\n  /** The image's URL, shown as a thumbnail so it is clear which image is being edited. */\n  public src = input('');\n\n  public saveAlt = output<string>();\n  public removeImage = output<void>();\n  public dismiss = output<void>();\n\n  protected altValue = linkedSignal(() => this.alt());\n\n  protected fileName = computed(() => {\n    const path = this.src().split(/[?#]/)[0] ?? '';\n\n    return decodeURIComponent(path.split('/').pop() ?? '') || this.src();\n  });\n\n  constructor() {\n    // Same detached-overlay treatment as the link editor: paint the overlay's own surface elevation,\n    // and re-sync the color scope, which cannot cascade through the portal boundary.\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    effect(() => {\n      const contextColorProvider = this.contextColorProvider;\n\n      untracked(() => {\n        if (contextColorProvider) this.ownColorProvider.syncWithProvider(contextColorProvider);\n      });\n    });\n  }\n\n  protected save() {\n    this.saveAlt.emit(this.altValue().trim());\n  }\n\n  /** Enter applies. Prevented so the editor, focused right after, doesn't also see the keydown. */\n  protected saveOnEnter(event: Event) {\n    event.preventDefault();\n    this.save();\n  }\n}\n","<div class=\"et-rte-image-editor-header\">\n  <span class=\"et-rte-image-editor-title\">{{ labels().imageEditor }}</span>\n  <button\n    [attr.aria-label]=\"labels().imageEditorClose\"\n    (click)=\"dismiss.emit()\"\n    et-icon-button\n    size=\"sm\"\n    type=\"button\"\n    variant=\"transparent\"\n    color=\"surface\"\n    pressedColor=\"inherit\"\n  >\n    <i etIcon=\"et-times\"></i>\n  </button>\n</div>\n\n<div class=\"et-rte-image-editor-preview\">\n  <img [src]=\"src()\" [alt]=\"altValue()\" class=\"et-rte-image-editor-thumb\" />\n  <span class=\"et-rte-image-editor-file\">{{ fileName() }}</span>\n</div>\n\n<et-form-field size=\"sm\">\n  <et-label>{{ labels().imageAltLabel }}</et-label>\n  <et-input\n    [value]=\"altValue()\"\n    [placeholder]=\"labels().imageAltPlaceholder\"\n    (valueChange)=\"altValue.set($event)\"\n    (keydown.enter)=\"saveOnEnter($event)\"\n  />\n  <et-hint>{{ labels().imageAltHint }}</et-hint>\n</et-form-field>\n\n<div class=\"et-rte-image-editor-actions\">\n  <button (click)=\"removeImage.emit()\" et-text-button size=\"sm\" type=\"button\">{{ labels().imageRemove }}</button>\n  <button (click)=\"save()\" et-button size=\"sm\" type=\"button\">{{ labels().imageUpdate }}</button>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { RichTextEditorDirective } from './headless/rich-text-editor.directive';\n\n/**\n * Wires the link editor popover to one editor instance. Called from the editor's constructor (an\n * injection context), so an implementation may `inject()`.\n */\nexport type RichTextEditorLinkEditorSetup = (editor: RichTextEditorDirective, host: HTMLElement) => void;\n\n/**\n * The link editor popover's wiring, registered by `provideRichTextEditorLinkEditor()`. Absent means\n * the link tool falls back to `window.prompt`.\n */\nexport const RICH_TEXT_EDITOR_LINK_EDITOR = new InjectionToken<RichTextEditorLinkEditorSetup>(\n  'RichTextEditorLinkEditor',\n);\n","import { Provider } from '@angular/core';\nimport { setupRichTextEditorLinkEditor } from './headless/rich-text-editor-link-editor.directive';\nimport { RICH_TEXT_EDITOR_LINK_EDITOR } from './rich-text-editor-link-editor.token';\n\n/**\n * Gives every `et-rich-text-editor` in scope the link editor popover: the `'link'` tool then opens a\n * form (URL, text, \"open in new tab\", remove) anchored to the selection instead of the browser's\n * `prompt()`.\n *\n * Without this provider the editor keeps working — the link tool falls back to `window.prompt` — and\n * the popover, with the form controls and overlay strategies it pulls in, never reaches the bundle.\n *\n * @example\n * providers: [provideRichTextEditorLinkEditor()]\n */\nexport const provideRichTextEditorLinkEditor = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_LINK_EDITOR,\n  useValue: setupRichTextEditorLinkEditor,\n});\n","import { booleanAttribute, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { catchError, combineLatest, map, of, switchMap } from 'rxjs';\nimport { BUTTON_IMPORTS } from '../../button';\nimport { RichTextEditorDirective } from './headless';\nimport { resolveTriggerItems } from './headless/internals/rich-text-editor-trigger-source';\nimport { RichTextEditorTrigger, RichTextEditorTriggerItem } from './rich-text-editor-trigger';\n\n/** A trigger and the items it currently offers, rendered as one run of chip buttons. */\ntype RichTextEditorTokenPaletteGroup = {\n  trigger: RichTextEditorTrigger;\n  items: readonly RichTextEditorTriggerItem[];\n};\n\n/**\n * An opt-in row of click-to-insert token chips, driven by the same `RichTextEditorTrigger[]` as the\n * `#`/`@` popup. Clicking a chip inserts its `{{type:id}}` token into the bound editor at the caret\n * (via {@link RichTextEditorDirective.insertTokenItem}) - the palette equivalent of picking it from\n * the popup - so apps get a merge-field/placeholder palette without re-implementing chip rendering,\n * label resolution, or caret handling.\n *\n * Point it at the editor with `[editor]` (a template ref to the `[etRichTextEditor]` directive) and\n * pass the trigger config with `[triggers]`. Only items available for an empty query are shown, so\n * static-array sources list all their items while search-only (`minQueryLength`) sources stay empty\n * - a palette is for fixed sets, not search. The editor must have a token codec installed (by\n * `[etRichTextEditorTriggers]` or `provideRichTextEditorTokenRendering`) so tokens (de)serialize.\n *\n * ```html\n * <et-rich-text-editor #rte=\"etRichTextEditor\" [triggers]=\"triggers\" etRichTextEditorTriggers />\n * <et-rich-text-editor-token-palette [editor]=\"rte\" [triggers]=\"triggers\" />\n * ```\n */\n@Component({\n  selector: 'et-rich-text-editor-token-palette',\n  templateUrl: './rich-text-editor-token-palette.component.html',\n  styleUrl: './rich-text-editor-token-palette.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS],\n  host: {\n    class: 'et-rte-token-palette',\n    role: 'group',\n    '[attr.aria-label]': 'resolvedLabel()',\n  },\n})\nexport class RichTextEditorTokenPaletteComponent {\n  /** The editor to insert into - a template ref to its `[etRichTextEditor]` directive. */\n  public editor = input.required<RichTextEditorDirective>();\n\n  /** The triggers whose items become chip buttons. Use the same array as the editor's triggers. */\n  public triggers = input<readonly RichTextEditorTrigger[]>([]);\n\n  /** Accessible name for the palette group. `null` (the default) uses the editor's `insertToken` label. */\n  public label = input<string | null>(null);\n\n  /** Focus the editor after inserting so the user can keep typing. */\n  public focusEditorOnInsert = input(true, { transform: booleanAttribute });\n\n  /** The name in effect: this instance's `label`, else the editor's label set. */\n  protected resolvedLabel = computed(() => this.label() ?? this.editor().resolvedLabels().insertToken);\n\n  private groups = toSignal(\n    toObservable(this.triggers).pipe(\n      switchMap((triggers) =>\n        triggers.length === 0\n          ? of<RichTextEditorTokenPaletteGroup[]>([])\n          : combineLatest(\n              triggers.map((trigger) =>\n                resolveTriggerItems(trigger, '').pipe(\n                  // a failing source drops to an empty run rather than blanking the whole palette\n                  catchError(() => of<RichTextEditorTriggerItem[]>([])),\n                  map((items): RichTextEditorTokenPaletteGroup => ({ trigger, items })),\n                ),\n              ),\n            ),\n      ),\n    ),\n    { initialValue: [] as RichTextEditorTokenPaletteGroup[] },\n  );\n\n  /** Only groups that actually have items to offer - empty (e.g. search-only) triggers are dropped. */\n  protected visibleGroups = computed(() => this.groups().filter((group) => group.items.length > 0));\n\n  /** Chips are inert while the editor can't take an edit. */\n  protected editorInactive = computed(() => this.editor().disabled() || this.editor().readonly());\n\n  protected insert(trigger: RichTextEditorTrigger, item: RichTextEditorTriggerItem) {\n    if (item.disabled || this.editorInactive()) return;\n\n    this.editor().insertTokenItem(trigger.type, item, { focus: this.focusEditorOnInsert() });\n  }\n}\n","@for (group of visibleGroups(); track group.trigger.type) {\n  @for (item of group.items; track item.id) {\n    <button\n      [disabled]=\"item.disabled || editorInactive()\"\n      [title]=\"item.description || null\"\n      (click)=\"insert(group.trigger, item)\"\n      (mousedown)=\"$event.preventDefault()\"\n      et-button\n      variant=\"tonal\"\n      size=\"sm\"\n      type=\"button\"\n    >\n      @if (group.trigger.char) {\n        <span class=\"et-rte-token-palette-chip-prefix\" aria-hidden=\"true\">{{ group.trigger.char }}</span>\n      }\n      {{ item.label }}\n    </button>\n  }\n}\n","import { RichTextEditorTokenPaletteComponent } from './rich-text-editor-token-palette.component';\n\n/**\n * Opt-in click-to-insert token palette. Spread this into a component's `imports` alongside\n * `RICH_TEXT_EDITOR_IMPORTS` when the editor should be paired with a row of merge-field/placeholder\n * chip buttons. Kept separate so editors without a palette don't pull it in.\n */\nexport const RICH_TEXT_EDITOR_TOKEN_PALETTE_IMPORTS = [RichTextEditorTokenPaletteComponent] as const;\n","import { Provider } from '@angular/core';\nimport { createRichTextEditorTokenCodec } from './headless/internals/rich-text-editor-token';\nimport { RICH_TEXT_EDITOR_TOKEN_CODEC } from './rich-text-editor-token-codec.token';\nimport { RichTextEditorTrigger } from './rich-text-editor-trigger';\n\n/**\n * Renders stored `{{type:id}}` tokens as labelled chips in a display/read-only editor without\n * pulling in the interactive trigger machinery (detection, popup, floating-ui). Provide it on the\n * component/route that shows editor values, passing the same triggers used to author them (only\n * `type`, `char` and the labels are consulted here - from `resolveItem`, or from a static `items`\n * list where the trigger has one).\n *\n * ```ts\n * providers: [provideRichTextEditorTokenRendering([\n *   createRichTextEditorTrigger({ char: '#', type: 'block', items: [], resolveItem: id => byId(id) }),\n * ])]\n * ```\n */\nexport const provideRichTextEditorTokenRendering = (triggers: readonly RichTextEditorTrigger[]): Provider[] => [\n  { provide: RICH_TEXT_EDITOR_TOKEN_CODEC, useValue: createRichTextEditorTokenCodec(() => triggers) },\n];\n","import { Observable } from 'rxjs';\n\n/**\n * Namespaces a token in the serialized Markdown (`{{type:id}}`). Apps pick their own\n * values (`'block'`, `'mention'`, `'link'`, …); the union just nudges the common ones.\n */\nexport type RichTextEditorTriggerType = 'block' | 'mention' | 'link' | (string & {});\n\n/** A single row shown in the trigger popup and the source of an inserted token. */\nexport type RichTextEditorTriggerItem = {\n  /** Stable identity, embedded in the token as `{{type:id}}`. Must match `[A-Za-z0-9._:-]+`. */\n  id: string;\n  /** Text shown in the popup row and rendered inside the inserted chip. */\n  label: string;\n  /** Optional secondary line rendered under the label in the popup. */\n  description?: string;\n  /** Arbitrary passthrough for consumers that render custom rows/chips. */\n  data?: unknown;\n  /** When `true`, the row is shown but cannot be selected. */\n  disabled?: boolean;\n};\n\n/**\n * Where a trigger gets its items from. Either a static list, or a function of the current\n * query returning items synchronously, as a `Promise`, or as an `Observable` (for\n * search-as-you-type). Function sources are re-run (debounced) as the query changes.\n */\nexport type RichTextEditorTriggerItemSource =\n  | readonly RichTextEditorTriggerItem[]\n  | ((\n      query: string,\n    ) => RichTextEditorTriggerItem[] | Promise<RichTextEditorTriggerItem[]> | Observable<RichTextEditorTriggerItem[]>);\n\n/**\n * Resolves a stored token id back to an item so a `{{type:id}}` value can render as a\n * labelled chip in display/read contexts. Sync, `Promise`, or `Observable`; returning\n * `null` (or omitting the resolver) falls back to rendering the raw id.\n */\nexport type RichTextEditorTriggerItemResolver = (\n  id: string,\n) =>\n  | RichTextEditorTriggerItem\n  | null\n  | Promise<RichTextEditorTriggerItem | null>\n  | Observable<RichTextEditorTriggerItem | null>;\n\n/** A single trigger character and the domain-specific items it offers. */\nexport type RichTextEditorTrigger = {\n  /** The character that opens the popup at a word boundary (e.g. `'#'`, `'@'`). */\n  char: string;\n  /** Namespaces the inserted token. Unique per editor. Must match `[a-z][a-z0-9-]*`. */\n  type: RichTextEditorTriggerType;\n  /** The items offered while this trigger is active. */\n  items: RichTextEditorTriggerItemSource;\n  /** Renders stored `{{type:id}}` tokens as labelled chips. See {@link RichTextEditorTriggerItemResolver}. */\n  resolveItem?: RichTextEditorTriggerItemResolver;\n  /** Keep the popup open when the query contains spaces. @default false */\n  allowSpaces?: boolean;\n  /** Minimum query length before items are requested. @default 0 */\n  minQueryLength?: number;\n  /** Debounce applied to async (function) sources, in ms. @default 150 */\n  debounceTime?: number;\n};\n\n/**\n * Declares a trigger for the rich text editor's building-block autocomplete. A thin\n * identity helper - kept as a function so the config type is inferred and the call site\n * reads intentionally. Pass the results to `[etRichTextEditorTriggers]`.\n *\n * ```ts\n * createRichTextEditorTrigger({ char: '#', type: 'block', items: MERGE_FIELDS })\n * ```\n */\nexport const createRichTextEditorTrigger = (trigger: RichTextEditorTrigger): RichTextEditorTrigger => trigger;\n","// codes 1300-1399\nexport const MENU_ERROR_CODES = {\n  MISSING_MENU_SURFACE: 1300,\n  TRIGGER_OUTSIDE_MENU: 1301,\n  SURFACE_OUTSIDE_MENU: 1302,\n  ITEM_OUTSIDE_MENU: 1303,\n  PANEL_OUTSIDE_MENU: 1304,\n  SEARCH_OUTSIDE_MENU: 1305,\n  CONTEXT_TRIGGER_OUTSIDE_MENU: 1306,\n  CONTEXT_TRIGGER_ON_SUBMENU: 1307,\n  SELECTION_ITEM_MISSING_VALUE: 1320,\n  RADIO_ITEM_OUTSIDE_GROUP: 1321,\n} as const;\n","export const sortByDomOrder = <T>(items: readonly T[], getElement: (item: T) => HTMLElement): T[] =>\n  [...items].sort((a, b) =>\n    getElement(a).compareDocumentPosition(getElement(b)) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n  );\n","import { Subscription, tap, timer } from 'rxjs';\n\nexport type MenuHoverIntent = {\n  scheduleOpen: (callback: () => void, delay: number) => void;\n  scheduleClose: (callback: () => void, delay: number) => void;\n  cancelOpen: () => void;\n  cancelClose: () => void;\n  cancelAll: () => void;\n  destroy: () => void;\n};\n\n/**\n * Holds the pending open/close timers a menu uses to interpret submenu hover intent.\n * One pending open and one pending close can exist at a time - scheduling replaces\n * the previous timer of the same kind.\n */\nexport const createMenuHoverIntent = (): MenuHoverIntent => {\n  let openSubscription: Subscription | null = null;\n  let closeSubscription: Subscription | null = null;\n\n  const cancelOpen = () => {\n    openSubscription?.unsubscribe();\n    openSubscription = null;\n  };\n\n  const cancelClose = () => {\n    closeSubscription?.unsubscribe();\n    closeSubscription = null;\n  };\n\n  const cancelAll = () => {\n    cancelOpen();\n    cancelClose();\n  };\n\n  const scheduleOpen = (callback: () => void, delay: number) => {\n    cancelOpen();\n    openSubscription = timer(delay)\n      .pipe(\n        tap(() => {\n          openSubscription = null;\n          callback();\n        }),\n      )\n      .subscribe();\n  };\n\n  const scheduleClose = (callback: () => void, delay: number) => {\n    cancelClose();\n    closeSubscription = timer(delay)\n      .pipe(\n        tap(() => {\n          closeSubscription = null;\n          callback();\n        }),\n      )\n      .subscribe();\n  };\n\n  return {\n    scheduleOpen,\n    scheduleClose,\n    cancelOpen,\n    cancelClose,\n    cancelAll,\n    destroy: cancelAll,\n  };\n};\n","import {\n  DestroyRef,\n  Directive,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  model,\n  numberAttribute,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  OverlayRuntimeAnchoredPosition,\n  RuntimeError,\n  anchoredOverlayPosition,\n  enableAnchoredOverlayPositionExtras,\n  injectHostElement,\n  isOnHigherOverlayLayer,\n  nextFrame,\n  randomId,\n  resolveOverlayLayer,\n} from '@ethlete/core';\nimport { OffsetOptions, Padding, Placement, VirtualElement } from '@floating-ui/dom';\nimport { fromEvent, take, tap } from 'rxjs';\nimport { mountFloatingPanelStyles } from '../../overlay/floating-panel-styles.component';\nimport { OverlayConfig } from '../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../overlay/overlay-manager';\nimport { OverlayRef } from '../../overlay/overlay-ref';\nimport { OverlayTemplateHostComponent } from '../../overlay/overlay-template-host.component';\nimport { OverlayStrategy, OverlayStrategyBreakpoint, anchoredOverlayStrategy } from '../../overlay/strategies';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { sortByDomOrder } from './internals/menu-dom-order';\nimport { createMenuHoverIntent } from './internals/menu-hover-intent';\nimport { createMenuTypeahead } from './internals/menu-typeahead';\nimport { MenuContextTriggerDirective } from './menu-context-trigger.directive';\nimport { MenuItemDirective } from './menu-item.directive';\nimport { MenuPanelDirective } from './menu-panel.directive';\nimport { MenuSearchDirective } from './menu-search.directive';\nimport { MenuSurfaceContext, MenuSurfaceDirective } from './menu-surface.directive';\nimport { MenuTriggerDirective } from './menu-trigger.directive';\n\nexport type MenuCloseReason = 'item' | 'escape' | 'tab' | 'outside' | 'api';\n\nexport type MenuOpenSource = 'click' | 'hover' | 'keyboard' | 'api';\n\nexport type MenuAnchorPoint = { x: number; y: number };\n\n/** Options for {@link MenuDirective.show}, {@link MenuDirective.toggle} and {@link MenuDirective.openAt}. */\nexport type MenuShowOptions = {\n  /** Where the request came from. Provenance only - it never decides whether the menu takes focus. @default 'api' */\n  source?: MenuOpenSource;\n\n  /**\n   * Move focus into the panel once it is up: the search field if there is one, otherwise the first\n   * (`true` / `'first'`) or last (`'last'`) enabled item. `false` leaves focus where it is.\n   *\n   * Defaults to the `autoFocus` input, except for a hover-opened submenu, which never takes focus.\n   */\n  focus?: boolean | 'first' | 'last';\n};\n\nconst MENU_MIN_AVAILABLE_SPACE = 160;\n\n@Directive({\n  selector: '[etMenu]',\n  exportAs: 'etMenu',\n  host: {\n    '[attr.data-menu-open]': 'open() || null',\n  },\n})\nexport class MenuDirective {\n  private destroyRef = inject(DestroyRef);\n  private overlayManager = injectOverlayManager();\n  private hostElement = injectHostElement();\n\n  public parent = inject(MenuDirective, { optional: true, skipSelf: true });\n\n  public placement = input<Placement | 'auto'>('auto');\n  public fallbackPlacements = input<Placement[] | undefined>(undefined);\n  public offset = input<OffsetOptions | null | 'auto'>('auto');\n  public viewportPadding = input<Padding | null>(8);\n  /** Render an arrow pointing at the trigger. Trigger-anchored root menus only - submenus and context menus never render one. */\n  public arrow = input(true, { transform: booleanAttribute });\n  public arrowPadding = input<Padding | null>(14);\n  // eslint-disable-next-line ethlete/no-native-html-input-name -- mirrors the native autofocus behaviour on open\n  public autoFocus = input(true, { transform: booleanAttribute });\n  public hoverOpen = input(true, { transform: booleanAttribute });\n  /**\n   * Wrap around at the ends: `ArrowDown` on the last item goes to the first. Turn it off for a long\n   * menu, where wrapping reads as a jump to somewhere unrelated rather than as continuing - the\n   * arrows then simply stop at the ends.\n   *\n   * Does not apply to a menu with a search field: there the ends hand focus back to the field, which\n   * is a more useful destination than either wrapping or stopping.\n   * @default true\n   */\n  public loop = input(true, { transform: booleanAttribute });\n  public hoverOpenDelay = input(120, { transform: numberAttribute });\n  public hoverCloseDelay = input(300, { transform: numberAttribute });\n  public disabled = input(false, { transform: booleanAttribute });\n  public open = model(false);\n\n  public root: MenuDirective = this.parent?.root ?? this;\n  public depth: number = (this.parent?.depth ?? -1) + 1;\n  public isRoot = this.parent === null;\n\n  /** @internal */\n  public registeredTrigger = signal<MenuTriggerDirective | null>(null);\n  /** @internal */\n  public registeredContextTrigger = signal<MenuContextTriggerDirective | null>(null);\n  /** @internal */\n  public registeredSurface = signal<MenuSurfaceDirective | null>(null);\n  /** @internal */\n  public registeredPanel = signal<MenuPanelDirective | null>(null);\n  /** @internal */\n  public registeredSearch = signal<MenuSearchDirective | null>(null);\n  /** @internal */\n  public overlayRef = signal<OverlayRef<OverlayTemplateHostComponent, unknown> | null>(null);\n  /** @internal */\n  public openSubmenu = signal<MenuDirective | null>(null);\n  /** @internal */\n  public activeItem = signal<MenuItemDirective | null>(null);\n  /** @internal */\n  public anchorPoint = signal<MenuAnchorPoint | null>(null);\n\n  private items = signal<MenuItemDirective[]>([]);\n\n  /** @internal */\n  public sortedItems = computed(() => sortByDomOrder(this.items(), (item) => item.elementRef.nativeElement));\n  /** @internal */\n  public enabledItems = computed(() => this.sortedItems().filter((item) => !item.isDisabled()));\n\n  public isMounted = computed(() => this.overlayRef() !== null);\n\n  private openSource: MenuOpenSource = 'api';\n  private requestedFocus: boolean | 'first' | 'last' | null = null;\n  private hoverIntent = createMenuHoverIntent();\n  private typeahead = createMenuTypeahead();\n  private rootListenersCleanup: (() => void) | null = null;\n\n  constructor() {\n    mountFloatingPanelStyles();\n\n    effect(() => {\n      const disabled = this.disabled();\n      const shouldBeOpen = this.open();\n      const currentRef = this.overlayRef();\n\n      if (disabled) {\n        if (currentRef) {\n          untracked(() => this.hide());\n        }\n\n        if (shouldBeOpen) {\n          untracked(() => {\n            this.open.set(false);\n          });\n        }\n\n        return;\n      }\n\n      if (shouldBeOpen && !currentRef) {\n        untracked(() => {\n          this.mountOverlay();\n        });\n\n        return;\n      }\n\n      if (!shouldBeOpen && currentRef) {\n        untracked(() => {\n          this.openSubmenu()?.hide();\n          currentRef.close();\n        });\n      }\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.hoverIntent.destroy();\n      this.typeahead.destroy();\n      this.detachRootInteractionListeners();\n\n      if (this.parent?.openSubmenu() === this) {\n        this.parent.openSubmenu.set(null);\n      }\n\n      this.overlayRef()?.close();\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.registeredSurface()) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.MISSING_MENU_SURFACE,\n            '[MenuDirective] Menu surface not found. Add <ng-template etMenuSurface> inside the [etMenu] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Opens the menu. Focus follows the `autoFocus` input unless {@link MenuShowOptions.focus} says otherwise. */\n  public show({ source = 'api', focus }: MenuShowOptions = {}) {\n    if (this.disabled() || this.open()) {\n      return;\n    }\n\n    this.openSource = source;\n    this.requestedFocus = focus ?? null;\n    this.parent?.openSubmenuExclusive(this);\n    this.open.set(true);\n  }\n\n  public hide() {\n    this.hoverIntent.cancelAll();\n    this.openSubmenu()?.hide();\n\n    if (this.parent?.openSubmenu() === this) {\n      this.parent.openSubmenu.set(null);\n    }\n\n    if (this.open()) {\n      this.open.set(false);\n    } else {\n      this.overlayRef()?.close();\n    }\n  }\n\n  public toggle(options: MenuShowOptions = {}) {\n    if (this.open()) {\n      this.hide();\n\n      return;\n    }\n\n    this.show(options);\n  }\n\n  /** Closes the whole menu tree, regardless of which level this is called on. */\n  public closeAll(reason: MenuCloseReason = 'api') {\n    const root = this.root;\n\n    if (reason === 'item' || reason === 'escape' || reason === 'tab') {\n      root.focusTrigger();\n    }\n\n    root.hide();\n  }\n\n  /** Opens the menu anchored to a viewport point instead of the trigger element. */\n  public openAt(point: MenuAnchorPoint, options: MenuShowOptions = {}) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.anchorPoint.set(point);\n\n    const overlayRef = this.overlayRef();\n\n    if (overlayRef) {\n      // already mounted (or still closing) - reposition in place and cancel any pending close\n      overlayRef.updatePositionStrategy(this.buildVirtualAnchoredPosition(point));\n      this.open.set(true);\n\n      return;\n    }\n\n    this.show({ source: 'click', ...options });\n  }\n\n  /** @internal Closes this level and returns focus to the trigger item in the parent menu. */\n  public closeLevel(reason: MenuCloseReason) {\n    if (this.isRoot) {\n      this.closeAll(reason);\n\n      return;\n    }\n\n    const triggerItem = this.registeredTrigger()?.hostItem ?? null;\n\n    if (triggerItem && this.parent) {\n      this.parent.setActiveItem(triggerItem);\n    }\n\n    this.hide();\n  }\n\n  /** @internal */\n  public openSubmenuExclusive(submenu: MenuDirective) {\n    const current = this.openSubmenu();\n\n    if (current && current !== submenu) {\n      current.hide();\n    }\n\n    this.openSubmenu.set(submenu);\n  }\n\n  /** @internal */\n  public registerItem(item: MenuItemDirective) {\n    this.items.update((items) => [...items, item]);\n  }\n\n  /** @internal */\n  public unregisterItem(item: MenuItemDirective) {\n    this.items.update((items) => items.filter((registered) => registered !== item));\n\n    if (this.activeItem() === item) {\n      this.activeItem.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterTrigger(trigger: MenuTriggerDirective) {\n    if (this.registeredTrigger() === trigger) {\n      this.registeredTrigger.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterContextTrigger(trigger: MenuContextTriggerDirective) {\n    if (this.registeredContextTrigger() === trigger) {\n      this.registeredContextTrigger.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterSurface(surface: MenuSurfaceDirective) {\n    if (this.registeredSurface() === surface) {\n      this.registeredSurface.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterPanel(panel: MenuPanelDirective) {\n    if (this.registeredPanel() === panel) {\n      this.registeredPanel.set(null);\n    }\n  }\n\n  /** @internal */\n  public unregisterSearch(search: MenuSearchDirective) {\n    if (this.registeredSearch() === search) {\n      this.registeredSearch.set(null);\n    }\n  }\n\n  /** @internal */\n  public setActiveItem(item: MenuItemDirective, options?: { focus?: boolean }) {\n    this.activeItem.set(item);\n\n    if (options?.focus !== false) {\n      item.focus();\n    }\n  }\n\n  /** @internal Central keyboard handling for items, the panel, and the search input. */\n  public handleKeydown(event: KeyboardEvent) {\n    if (event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    const search = this.registeredSearch();\n    const searchFocused = search?.isFocused() ?? false;\n\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        this.moveActive(1);\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        this.moveActive(-1);\n\n        return;\n      }\n      case 'ArrowRight': {\n        const submenu = this.activeItem()?.submenu ?? null;\n\n        if (submenu) {\n          event.preventDefault();\n          submenu.show({ source: 'keyboard' });\n        }\n\n        return;\n      }\n      case 'ArrowLeft': {\n        if (!this.isRoot) {\n          event.preventDefault();\n          this.closeLevel('escape');\n        }\n\n        return;\n      }\n      case 'Home': {\n        if (!searchFocused) {\n          event.preventDefault();\n          this.setActiveToEdge('first');\n        }\n\n        return;\n      }\n      case 'End': {\n        if (!searchFocused) {\n          event.preventDefault();\n          this.setActiveToEdge('last');\n        }\n\n        return;\n      }\n      case 'Enter':\n      case ' ': {\n        if (searchFocused) {\n          return;\n        }\n\n        const item = this.activeItem();\n\n        if (!item) {\n          return;\n        }\n\n        event.preventDefault();\n\n        if (item.submenu) {\n          item.submenu.show({ source: 'keyboard' });\n        } else {\n          item.activateFromKeyboard(event.key === 'Enter' ? 'keyboard-enter' : 'keyboard-space');\n        }\n\n        return;\n      }\n      case 'Escape': {\n        event.preventDefault();\n        this.closeLevel('escape');\n\n        return;\n      }\n      case 'Tab': {\n        this.closeAll('tab');\n\n        return;\n      }\n      default: {\n        if (event.key.length !== 1 || searchFocused) {\n          return;\n        }\n\n        if (search) {\n          event.preventDefault();\n          this.activeItem.set(null);\n          search.appendCharacter(event.key);\n\n          return;\n        }\n\n        const query = this.typeahead.append(event.key);\n        const match = this.enabledItems().find((item) => item.textContent().toLowerCase().startsWith(query));\n\n        if (match) {\n          event.preventDefault();\n          this.setActiveItem(match);\n        }\n\n        return;\n      }\n    }\n  }\n\n  /** @internal */\n  public notifyItemPointerEnter(item: MenuItemDirective) {\n    if (!item.isDisabled()) {\n      // Hovering marks the item active, but it must not pull DOM focus out of the search field: the\n      // pointer crossing the list while someone is typing would otherwise swallow the rest of their\n      // query. Keyboard navigation still moves focus into the items (see `moveActive`), which is the\n      // gesture that means \"I am done typing\".\n      const searchFocused = this.registeredSearch()?.isFocused() ?? false;\n\n      this.setActiveItem(item, { focus: !searchFocused && this.isFocusInsideTree() });\n    }\n\n    this.handleItemHover(item);\n  }\n\n  /** @internal Cancels pending submenu hover timers along the ancestor chain. */\n  public notifyPanelPointerEnter() {\n    for (let ancestor = this.parent; ancestor; ancestor = ancestor.parent) {\n      ancestor.hoverIntent.cancelAll();\n    }\n  }\n\n  /** @internal */\n  public focusTrigger() {\n    const element =\n      this.registeredTrigger()?.elementRef.nativeElement ?? this.registeredContextTrigger()?.elementRef.nativeElement;\n\n    element?.focus({ preventScroll: true });\n  }\n\n  /** @internal True while a pointerdown target belongs to any open pane of this menu's tree. */\n  public isTargetInsideTree(target: EventTarget | null) {\n    if (!(target instanceof Node)) {\n      return false;\n    }\n\n    let menu: MenuDirective | null = this.root;\n\n    while (menu) {\n      const pane = menu.overlayRef()?.elements?.paneElement;\n\n      if (pane?.contains(target)) {\n        return true;\n      }\n\n      menu = menu.openSubmenu();\n    }\n\n    return false;\n  }\n\n  private isFocusInsideTree() {\n    const active = this.hostElement.ownerDocument.activeElement;\n\n    if (!active) {\n      return false;\n    }\n\n    if (this.isTargetInsideTree(active)) {\n      return true;\n    }\n\n    const triggerElement = this.root.registeredTrigger()?.elementRef.nativeElement;\n\n    return triggerElement?.contains(active) ?? false;\n  }\n\n  private handleItemHover(item: MenuItemDirective) {\n    if (!this.hoverOpen()) {\n      return;\n    }\n\n    const submenu = item.submenu;\n    const currentSubmenu = this.openSubmenu();\n\n    this.hoverIntent.cancelOpen();\n\n    if (submenu) {\n      if (currentSubmenu === submenu) {\n        this.hoverIntent.cancelClose();\n\n        return;\n      }\n\n      this.hoverIntent.scheduleOpen(() => submenu.show({ source: 'hover' }), this.hoverOpenDelay());\n    }\n\n    if (currentSubmenu && currentSubmenu !== submenu) {\n      this.hoverIntent.scheduleClose(() => {\n        if (this.openSubmenu() === currentSubmenu) {\n          currentSubmenu.hide();\n        }\n      }, this.hoverCloseDelay());\n    }\n  }\n\n  private moveActive(delta: 1 | -1) {\n    const items = this.enabledItems();\n    const search = this.registeredSearch();\n\n    if (!items.length) {\n      search?.focus();\n\n      return;\n    }\n\n    if (search?.isFocused()) {\n      this.setActiveToEdge(delta === 1 ? 'first' : 'last');\n\n      return;\n    }\n\n    const current = this.activeItem();\n    const index = current ? items.indexOf(current) : -1;\n\n    if (index === -1) {\n      this.setActiveToEdge(delta === 1 ? 'first' : 'last');\n\n      return;\n    }\n\n    const nextIndex = index + delta;\n\n    if (search && (nextIndex < 0 || nextIndex >= items.length)) {\n      this.activeItem.set(null);\n      search.focus();\n\n      return;\n    }\n\n    // Past an end with `loop` off, there is nowhere to go - the active item stays where it is rather\n    // than jumping to the other end of the menu.\n    if (!this.loop() && (nextIndex < 0 || nextIndex >= items.length)) {\n      return;\n    }\n\n    const wrappedIndex = (nextIndex + items.length) % items.length;\n    const next = items[wrappedIndex];\n\n    if (next) {\n      this.setActiveItem(next);\n    }\n  }\n\n  private setActiveToEdge(edge: 'first' | 'last') {\n    const items = this.enabledItems();\n    const target = edge === 'first' ? items[0] : items.at(-1);\n\n    if (target) {\n      this.setActiveItem(target);\n    }\n  }\n\n  private mountOverlay() {\n    const surface = this.registeredSurface();\n\n    if (!surface) {\n      return;\n    }\n\n    const templateContext: MenuSurfaceContext = {\n      $implicit: this,\n      menu: this,\n      close: () => this.closeAll(),\n    };\n\n    const config: OverlayConfig = {\n      bindings: [inputBinding('template', () => surface.templateRef), inputBinding('context', () => templateContext)],\n      mode: 'non-modal',\n      hasBackdrop: false,\n      autoFocus: false,\n      restoreFocus: false,\n      closeOnEscape: false,\n      closeOnOutsidePointer: false,\n      origin: this.registeredTrigger()?.elementRef.nativeElement,\n      panelClass: 'et-menu-overlay-pane',\n      strategies: this.buildStrategies(),\n    };\n\n    const overlayRef = this.overlayManager.open<OverlayTemplateHostComponent>(OverlayTemplateHostComponent, config);\n\n    this.overlayRef.set(overlayRef);\n\n    if (this.isRoot) {\n      this.attachRootInteractionListeners();\n    }\n\n    nextFrame(() => {\n      if (this.overlayRef() === overlayRef) {\n        this.applyInitialFocus();\n      }\n    });\n\n    overlayRef\n      .afterClosed()\n      .pipe(\n        take(1),\n        tap(() => {\n          if (this.overlayRef() !== overlayRef) {\n            return;\n          }\n\n          this.overlayRef.set(null);\n          this.openSubmenu()?.hide();\n          this.activeItem.set(null);\n          this.detachRootInteractionListeners();\n\n          if (this.parent?.openSubmenu() === this) {\n            this.parent.openSubmenu.set(null);\n          }\n\n          // `open` was set back to true while the overlay was still closing (e.g. a context\n          // menu reopened at a new position) - the mount effect remounts, keep the anchor\n          if (this.open()) {\n            return;\n          }\n\n          this.anchorPoint.set(null);\n          this.openSource = 'api';\n          this.requestedFocus = null;\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private applyInitialFocus() {\n    // A hover-opened submenu is the one case the pointer stays in charge of; everything else - a\n    // click, a key, `show()`, a write to `open` - follows `autoFocus`, or whatever `show()` asked for.\n    const focus = this.requestedFocus ?? (this.openSource === 'hover' ? false : this.autoFocus());\n\n    if (!focus) {\n      return;\n    }\n\n    const search = this.registeredSearch();\n\n    if (search) {\n      // a query kept from the last time the menu was open gets replaced by simply typing\n      search.focus({ select: true });\n\n      return;\n    }\n\n    const items = this.enabledItems();\n    const target = focus === 'last' ? items.at(-1) : items[0];\n\n    if (target) {\n      this.setActiveItem(target);\n    } else {\n      this.registeredPanel()?.focus();\n    }\n  }\n\n  private attachRootInteractionListeners() {\n    this.detachRootInteractionListeners();\n\n    // Resolved on every open, not injected: the menu's host may since have been adopted by another\n    // document (a devtools pop-up), and outside-close listeners belong to the window the menu is in.\n    const menuDocument = this.hostElement.ownerDocument;\n\n    const pointerdownSubscription = fromEvent<PointerEvent>(menuDocument, 'pointerdown', { capture: true })\n      .pipe(\n        tap((event) => {\n          if (this.isTargetInsideTree(event.target)) {\n            return;\n          }\n\n          if (isOnHigherOverlayLayer(event.target, resolveOverlayLayer(this.hostElement))) {\n            return;\n          }\n\n          const triggerElement = this.registeredTrigger()?.elementRef.nativeElement;\n\n          // the subsequent click on the trigger toggles the menu closed on its own\n          if (triggerElement && event.target instanceof Node && triggerElement.contains(event.target)) {\n            return;\n          }\n\n          const contextTriggerElement = this.registeredContextTrigger()?.elementRef.nativeElement;\n\n          // a right click on the context zone repositions via the upcoming contextmenu event\n          if (\n            event.button === 2 &&\n            contextTriggerElement &&\n            event.target instanceof Node &&\n            contextTriggerElement.contains(event.target)\n          ) {\n            return;\n          }\n\n          this.closeAll('outside');\n        }),\n      )\n      .subscribe();\n\n    // bubble phase so handlers inside the tree (panel, items, search) can preventDefault first\n    const keydownSubscription = fromEvent<KeyboardEvent>(menuDocument, 'keydown')\n      .pipe(\n        tap((event) => {\n          if (event.key !== 'Escape' || event.defaultPrevented || this.isTargetInsideTree(event.target)) {\n            return;\n          }\n\n          this.closeAll('escape');\n        }),\n      )\n      .subscribe();\n\n    this.rootListenersCleanup = () => {\n      pointerdownSubscription.unsubscribe();\n      keydownSubscription.unsubscribe();\n    };\n  }\n\n  private detachRootInteractionListeners() {\n    this.rootListenersCleanup?.();\n    this.rootListenersCleanup = null;\n  }\n\n  private buildStrategies(): () => OverlayStrategyBreakpoint[] {\n    const point = this.anchorPoint();\n    const containerClass = ['et-overlay--anchored', 'et-overlay--menu', 'et-floating-panel'];\n    const positionOptions = {\n      placement: this.resolvedPlacement(),\n      fallbackPlacements: this.resolvedFallbackPlacements(),\n      minAvailableSpace: this.resolvedMinAvailableSpace(),\n      offset: this.resolvedOffset(),\n      arrowPadding: this.arrowPadding(),\n      viewportPadding: this.viewportPadding(),\n      autoResize: true,\n      // cross axis so a menu that fits on neither side slides over its parent instead of\n      // overflowing the viewport\n      shift: { crossAxis: true },\n    };\n\n    if (!point) {\n      return anchoredOverlayStrategy({\n        containerClass,\n        arrow: this.resolvedArrow(),\n        ...positionOptions,\n      });\n    }\n\n    const anchoredPosition = this.buildVirtualAnchoredPosition(point);\n\n    const strategy: OverlayStrategy = {\n      id: randomId(),\n      config: {\n        containerClass,\n        positionStrategy: () => anchoredPosition,\n      },\n    };\n\n    return () => [{ strategy }];\n  }\n\n  private buildVirtualAnchoredPosition(point: MenuAnchorPoint): OverlayRuntimeAnchoredPosition {\n    const referenceElement: VirtualElement = {\n      getBoundingClientRect: () => new DOMRect(point.x, point.y, 0, 0),\n      contextElement: this.registeredContextTrigger()?.elementRef.nativeElement,\n    };\n\n    enableAnchoredOverlayPositionExtras();\n\n    return anchoredOverlayPosition({\n      referenceElement,\n      placement: this.resolvedPlacement(),\n      fallbackPlacements: this.resolvedFallbackPlacements(),\n      offset: this.resolvedOffset(),\n      viewportPadding: this.viewportPadding(),\n      autoResize: true,\n      shift: { crossAxis: true },\n    });\n  }\n\n  private resolvedPlacement(): Placement {\n    const placement = this.placement();\n\n    if (placement !== 'auto') {\n      return placement;\n    }\n\n    if (this.anchorPoint()) {\n      return 'right-start';\n    }\n\n    return this.isRoot ? 'bottom-start' : 'right-start';\n  }\n\n  private resolvedFallbackPlacements(): Placement[] {\n    const fallbackPlacements = this.fallbackPlacements();\n\n    if (fallbackPlacements) {\n      return fallbackPlacements;\n    }\n\n    if (this.isRoot && !this.anchorPoint()) {\n      return ['bottom-end', 'top-start', 'top-end'];\n    }\n\n    return ['left-start', 'right-end', 'left-end'];\n  }\n\n  /**\n   * `minAvailableSpace` replaces `flip` outright, so it may only kick in where no consumer has\n   * expressed a placement preference of their own. It is also vertical-only: a submenu opens on the\n   * x axis, where shrinking to the space beside the parent means a narrower - not a shorter - panel.\n   */\n  private resolvedMinAvailableSpace(): number | undefined {\n    if (this.fallbackPlacements() || this.anchorPoint() || !this.isRoot) {\n      return undefined;\n    }\n\n    const side = this.resolvedPlacement().split('-')[0];\n\n    return side === 'top' || side === 'bottom' ? MENU_MIN_AVAILABLE_SPACE : undefined;\n  }\n\n  private resolvedArrow() {\n    // a point anchor (context menu) has no element the arrow could meaningfully point at\n    return this.arrow() && this.isRoot && !this.anchorPoint();\n  }\n\n  private resolvedOffset(): OffsetOptions | null {\n    const offset = this.offset();\n\n    if (offset !== 'auto') {\n      return offset;\n    }\n\n    // the arrow protrudes half its size past the pane edge, so it needs a real gap\n    if (this.resolvedArrow()) {\n      return 10;\n    }\n\n    return this.isRoot && !this.anchorPoint() ? 4 : 0;\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, effect, inject, untracked } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { Subscription, fromEvent, tap } from 'rxjs';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuDirective } from './menu.directive';\n\n@Directive({\n  selector: '[etMenuContextTrigger]',\n  exportAs: 'etMenuContextTrigger',\n  host: {\n    '[attr.data-menu-open]': 'isOpen() || null',\n    '(contextmenu)': 'handleContextMenu($event)',\n  },\n})\nexport class MenuContextTriggerDirective {\n  private menu = inject(MenuDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  private repositionSubscription: Subscription | null = null;\n\n  constructor() {\n    this.menu?.registeredContextTrigger.set(this);\n\n    // while the menu is open the pane can cover the context zone, so right clicks are\n    // intercepted at document level - including those landing on the pane - to reposition\n    effect(() => {\n      const open = this.menu?.open() ?? false;\n\n      untracked(() => {\n        if (open) {\n          this.attachRepositionListener();\n        } else {\n          this.detachRepositionListener();\n        }\n      });\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.detachRepositionListener();\n      this.menu?.unregisterContextTrigger(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menu) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.CONTEXT_TRIGGER_OUTSIDE_MENU,\n            '[MenuContextTriggerDirective] etMenuContextTrigger must be placed inside an [etMenu] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        if (this.menu && !this.menu.isRoot) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.CONTEXT_TRIGGER_ON_SUBMENU,\n            '[MenuContextTriggerDirective] etMenuContextTrigger can only open root menus. Move it to the outermost [etMenu] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public isOpen() {\n    return this.menu?.open() ?? false;\n  }\n\n  protected handleContextMenu(event: MouseEvent) {\n    // while open, the document-level listener owns repositioning\n    if (!this.menu || this.menu.disabled() || this.menu.open()) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.menu.openAt({ x: event.clientX, y: event.clientY });\n  }\n\n  private attachRepositionListener() {\n    if (this.repositionSubscription) {\n      return;\n    }\n\n    // the zone's own document, resolved on attach - the host may have been adopted by another window\n    this.repositionSubscription = fromEvent<MouseEvent>(this.elementRef.nativeElement.ownerDocument, 'contextmenu', {\n      capture: true,\n    })\n      .pipe(\n        tap((event) => {\n          if (!this.menu || this.menu.disabled() || !this.isEventOnZone(event)) {\n            return;\n          }\n\n          event.preventDefault();\n          event.stopPropagation();\n\n          this.menu.openAt({ x: event.clientX, y: event.clientY });\n        }),\n      )\n      .subscribe();\n  }\n\n  private detachRepositionListener() {\n    this.repositionSubscription?.unsubscribe();\n    this.repositionSubscription = null;\n  }\n\n  private isEventOnZone(event: MouseEvent) {\n    const zone = this.elementRef.nativeElement;\n\n    if (event.target instanceof Node && zone.contains(event.target)) {\n      return true;\n    }\n\n    // right clicks landing on the open pane never target the zone - compare coordinates instead\n    const rect = zone.getBoundingClientRect();\n\n    return (\n      rect.width > 0 &&\n      rect.height > 0 &&\n      event.clientX >= rect.left &&\n      event.clientX <= rect.right &&\n      event.clientY >= rect.top &&\n      event.clientY <= rect.bottom\n    );\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuItemDirective } from './menu-item.directive';\nimport { MenuDirective } from './menu.directive';\n\n@Directive({\n  selector: '[etMenuTrigger]',\n  exportAs: 'etMenuTrigger',\n  host: {\n    'aria-haspopup': 'menu',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.aria-controls]': 'controls()',\n    '[attr.data-menu-open]': 'isOpen() || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class MenuTriggerDirective {\n  /** @internal The menu this trigger opens - for submenu trigger items, that is the submenu. */\n  public menu = inject(MenuDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  /** @internal The same-element menu item this trigger is combined with, if any. Set by the item. */\n  public hostItem: MenuItemDirective | null = null;\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-menu-trigger');\n    }\n\n    this.menu?.registeredTrigger.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.menu?.unregisterTrigger(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menu) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.TRIGGER_OUTSIDE_MENU,\n            '[MenuTriggerDirective] etMenuTrigger must be placed inside an [etMenu] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public setHostItem(item: MenuItemDirective) {\n    this.hostItem = item;\n  }\n\n  public isOpen() {\n    return this.menu?.open() ?? false;\n  }\n\n  protected expanded() {\n    return this.menu?.open() ?? null;\n  }\n\n  protected controls() {\n    if (!this.menu?.open()) {\n      return null;\n    }\n\n    return this.menu.registeredPanel()?.elementRef.nativeElement.id ?? null;\n  }\n\n  protected handleClick() {\n    this.menu?.toggle({ source: 'click' });\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const menu = this.menu;\n\n    // submenu trigger items are driven by the menu's central keyboard handling\n    if (!menu || this.hostItem) {\n      return;\n    }\n\n    if (menu.open()) {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        menu.closeAll('escape');\n      }\n\n      return;\n    }\n\n    switch (event.key) {\n      case 'Enter':\n      case ' ':\n      case 'ArrowDown': {\n        event.preventDefault();\n        menu.show({ source: 'keyboard' });\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        menu.show({ source: 'keyboard', focus: 'last' });\n\n        return;\n      }\n    }\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  Signal,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuTriggerDirective } from './menu-trigger.directive';\nimport { MenuDirective } from './menu.directive';\n\nexport type MenuItemActivationSource = 'pointer' | 'keyboard-enter' | 'keyboard-space';\n\nexport type MenuItemActivationEvent = {\n  source: MenuItemActivationSource;\n};\n\n@Directive({\n  selector: '[etMenuItem]',\n  exportAs: 'etMenuItem',\n  host: {\n    '[attr.role]': 'role()',\n    '[attr.tabindex]': 'tabIndex()',\n    '[attr.aria-disabled]': 'isDisabled() || null',\n    '[attr.data-active]': 'isActive() || null',\n    '(click)': 'handleClick($event)',\n    '(keydown)': 'handleKeydown($event)',\n    '(mousedown)': 'handleMousedown($event)',\n    '(pointerenter)': 'handlePointerEnter($event)',\n    '(focus)': 'handleFocus()',\n  },\n})\nexport class MenuItemDirective {\n  private nearestMenu = inject(MenuDirective, { optional: true });\n  private sameElementTrigger = inject(MenuTriggerDirective, { self: true, optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  public disabled = input(false, { transform: booleanAttribute });\n  public closeOnActivate = input<boolean | undefined>(undefined);\n  public activate = output<MenuItemActivationEvent>();\n\n  /** @internal The menu whose item list this item belongs to. */\n  public owner: MenuDirective | null = null;\n  /** @internal The submenu this item opens when it doubles as a submenu trigger. */\n  public submenu: MenuDirective | null = null;\n\n  /** @internal Role source overriding the default `menuitem`, e.g. with `menuitemradio` or `menuitemcheckbox`. */\n  public roleOverride = signal<Signal<string> | null>(null);\n  /** @internal Additional disabled state source, e.g. from a composing selection item directive. */\n  public disabledOverride = signal<Signal<boolean> | null>(null);\n  private defaultCloseOnActivate = true;\n  private pendingKeyboardSource: MenuItemActivationSource | null = null;\n\n  protected role = computed(() => this.roleOverride()?.() ?? 'menuitem');\n\n  protected isActive = computed(() => this.owner?.activeItem() === this);\n\n  /** @internal Combines the item's own `disabled` input with a state pushed in by a composing directive. */\n  public isDisabled = computed(() => this.disabled() || (this.disabledOverride()?.() ?? false));\n\n  protected tabIndex = computed(() => {\n    const owner = this.owner;\n\n    if (!owner || this.isDisabled()) {\n      return -1;\n    }\n\n    const active = owner.activeItem();\n\n    if (active) {\n      return active === this ? 0 : -1;\n    }\n\n    return owner.enabledItems()[0] === this ? 0 : -1;\n  });\n\n  constructor() {\n    const nearest = this.nearestMenu;\n    const trigger = this.sameElementTrigger;\n\n    // an item that is also a submenu trigger sits inside the nested [etMenu] element,\n    // but as a focusable row it belongs to the parent menu's item list\n    if (nearest && trigger && trigger.menu === nearest) {\n      this.owner = nearest.parent;\n      this.submenu = nearest;\n      trigger.setHostItem(this);\n    } else {\n      this.owner = nearest;\n    }\n\n    this.owner?.registerItem(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.owner?.unregisterItem(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.owner) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.ITEM_OUTSIDE_MENU,\n            '[MenuItemDirective] etMenuItem must be rendered inside the surface of an [etMenu] element. When combined with etMenuTrigger, the [etMenu] element must be nested inside a parent menu.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal Sets whether activation closes the menu tree when the `closeOnActivate` input is not set. */\n  public setDefaultCloseOnActivate(value: boolean) {\n    this.defaultCloseOnActivate = value;\n  }\n\n  /** @internal */\n  public focus() {\n    const element = this.elementRef.nativeElement;\n\n    element.focus({ preventScroll: true });\n    element.scrollIntoView?.({ block: 'nearest' });\n  }\n\n  /** @internal Returns the visible label used for typeahead matching. */\n  public textContent() {\n    return this.elementRef.nativeElement.textContent?.trim() ?? '';\n  }\n\n  /** @internal Activates via a synthesized click so consumer (click) handlers fire for keyboard users too. */\n  public activateFromKeyboard(source: MenuItemActivationSource) {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.pendingKeyboardSource = source;\n    this.elementRef.nativeElement.click();\n  }\n\n  protected handleClick(event: MouseEvent) {\n    const source = this.pendingKeyboardSource ?? 'pointer';\n\n    this.pendingKeyboardSource = null;\n\n    // pointer clicks on submenu trigger items are handled by the trigger itself\n    if (this.sameElementTrigger) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      return;\n    }\n\n    this.activate.emit({ source });\n\n    if (this.closeOnActivate() ?? this.defaultCloseOnActivate) {\n      this.owner?.closeAll('item');\n    }\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    this.owner?.handleKeydown(event);\n  }\n\n  protected handleMousedown(event: MouseEvent) {\n    // keeps focus where it is (menu or an outside editor) while still allowing the click\n    event.preventDefault();\n  }\n\n  protected handlePointerEnter(event: PointerEvent) {\n    if (event.pointerType === 'touch') {\n      return;\n    }\n\n    this.owner?.notifyItemPointerEnter(this);\n  }\n\n  protected handleFocus() {\n    this.owner?.activeItem.set(this);\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuDirective } from './menu.directive';\n\n@Directive({\n  selector: '[etMenuPanel]',\n  exportAs: 'etMenuPanel',\n  host: {\n    role: 'menu',\n    'aria-orientation': 'vertical',\n    tabindex: '-1',\n    '[attr.aria-labelledby]': 'labelledBy()',\n    '[attr.aria-busy]': 'busy()',\n    '(keydown)': 'handleKeydown($event)',\n    '(pointerenter)': 'handlePointerEnter($event)',\n  },\n})\nexport class MenuPanelDirective {\n  /** @internal */\n  public menu = inject(MenuDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  protected labelledBy = computed(() => this.menu?.registeredTrigger()?.elementRef.nativeElement.id ?? null);\n\n  protected busy = computed(() => (this.menu?.registeredSearch()?.loading() ?? false) || null);\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-menu-panel');\n    }\n\n    this.menu?.registeredPanel.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.menu?.unregisterPanel(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menu) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.PANEL_OUTSIDE_MENU,\n            '[MenuPanelDirective] etMenuPanel must be rendered inside the surface of an [etMenu] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public focus() {\n    this.elementRef.nativeElement.focus({ preventScroll: true });\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    // items and the search input delegate their own keydowns - only handle keys targeting the panel itself\n    if (event.target !== this.elementRef.nativeElement) {\n      return;\n    }\n\n    this.menu?.handleKeydown(event);\n  }\n\n  protected handlePointerEnter(event: PointerEvent) {\n    if (event.pointerType === 'touch') {\n      return;\n    }\n\n    this.menu?.notifyPanelPointerEnter();\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The search field's own chrome (input, spinner, error line, `--et-menu-search-height`), as a\n * styles-only component mounted by `MenuSearchDirective`. A menu without a search field still\n * renders the (empty) header wrapper - hiding it is `menu.component.css`'s job - so only the\n * field-specific rules move here.\n *\n * @internal\n */\n@Component({\n  selector: 'et-menu-search-styles',\n  template: '',\n  styleUrl: './menu-search-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MenuSearchStylesComponent {}\n","import { Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { signalDeferredLoading } from '@ethlete/core';\nimport { SpinnerComponent } from '../loader';\nimport { MenuSearchDirective } from './headless/menu-search.directive';\n\n@Component({\n  selector: 'et-menu-search-spinner',\n  template: `\n    @if (showSpinner()) {\n      <et-spinner class=\"et-menu-search-spinner\" diameter=\"16\" />\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [SpinnerComponent],\n})\nexport class MenuSearchSpinnerComponent {\n  public search = input.required<MenuSearchDirective>();\n\n  protected showSpinner = signalDeferredLoading(computed(() => this.search().loading()));\n}\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { ScrollbarComponent } from '../scrollbar';\n\n@Component({\n  selector: 'et-menu-scrollbar',\n  template: `<et-scrollbar [for]=\"target()\" autoHide />`,\n  encapsulation: ViewEncapsulation.None,\n  imports: [ScrollbarComponent],\n})\nexport class MenuScrollbarComponent {\n  public target = input.required<HTMLElement>();\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  effect,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { RuntimeError, injectStyleManager } from '@ethlete/core';\nimport { MenuSearchChrome } from '../menu-chrome';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuSearchStylesComponent } from '../menu-search-styles.component';\nimport { MenuSearchSpinnerComponent } from '../menu-search-spinner.component';\nimport { MenuScrollbarComponent } from '../menu-scrollbar.component';\nimport { MenuDirective } from './menu.directive';\n\n@Directive({\n  selector: 'input[etMenuSearch]',\n  exportAs: 'etMenuSearch',\n  host: {\n    autocomplete: 'off',\n    '[attr.aria-invalid]': \"error() ? 'true' : null\",\n    '[attr.aria-describedby]': 'error() ? errorElementId() : null',\n    '(input)': 'handleInput()',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class MenuSearchDirective {\n  private menu = inject(MenuDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n  private styleManager = injectStyleManager();\n\n  public query = model('');\n\n  public loading = input(false, { transform: booleanAttribute });\n\n  public error = input<string | null>(null);\n\n  /** @internal Id of the element rendering the error message, set by the component displaying it. */\n  public errorElementId = signal<string | null>(null);\n\n  constructor() {\n    this.styleManager.mount(MenuSearchStylesComponent);\n\n    this.menu?.registeredSearch.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.menu?.unregisterSearch(this);\n    });\n\n    effect(() => {\n      const query = this.query();\n      const element = this.elementRef.nativeElement;\n\n      if (element.value !== query) {\n        element.value = query;\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menu) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.SEARCH_OUTSIDE_MENU,\n            '[MenuSearchDirective] etMenuSearch must be rendered inside the surface of an [etMenu] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public isFocused() {\n    const element = this.elementRef.nativeElement;\n\n    return element.ownerDocument.activeElement === element;\n  }\n\n  /** @internal */\n  public focus(options?: { select?: boolean }) {\n    const element = this.elementRef.nativeElement;\n\n    element.focus({ preventScroll: true });\n\n    if (options?.select) {\n      element.select();\n    }\n  }\n\n  /** @internal Focuses the input and appends a character typed while an item had focus. */\n  public appendCharacter(character: string) {\n    const element = this.elementRef.nativeElement;\n\n    this.focus();\n    element.value += character;\n    this.query.set(element.value);\n  }\n\n  public clear() {\n    const element = this.elementRef.nativeElement;\n\n    element.value = '';\n    this.query.set('');\n  }\n\n  /** @internal */\n  public getChrome(): MenuSearchChrome {\n    return {\n      scrollbar: MenuScrollbarComponent,\n      spinner: MenuSearchSpinnerComponent,\n    };\n  }\n\n  protected handleInput() {\n    this.query.set(this.elementRef.nativeElement.value);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (event.key === 'Escape' && this.elementRef.nativeElement.value) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.clear();\n\n      return;\n    }\n\n    // everything else (printable keys, Home/End, ArrowLeft/Right) is native input editing\n    if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Escape' || event.key === 'Tab') {\n      this.menu?.handleKeydown(event);\n    }\n  }\n}\n","import { ElementRef, InjectionToken, Signal, WritableSignal } from '@angular/core';\n\nexport const MENU_SELECTION_GROUP_TOKEN = new InjectionToken<MenuSelectionGroupDirectiveBase>(\n  'MENU_SELECTION_GROUP_TOKEN',\n);\n\nexport const MENU_SELECTION_GROUP_MULTIPLE = new InjectionToken<boolean>('MENU_SELECTION_GROUP_MULTIPLE');\n\nexport const MENU_SELECTION_ITEM_KIND = new InjectionToken<MenuSelectionItemKind>('MENU_SELECTION_ITEM_KIND');\n\nexport type MenuSelectionItemKind = 'radio' | 'checkbox';\n\nexport type MenuSelectionGroupItem<TValue = unknown> = {\n  value: Signal<TValue | undefined>;\n  checked: WritableSignal<boolean>;\n  disabled: Signal<boolean>;\n  elementRef: ElementRef<HTMLElement>;\n};\n\nexport type MenuSelectionGroupDirectiveBase<TValue = unknown> = {\n  value: WritableSignal<TValue | TValue[] | null>;\n  multiple: Signal<boolean>;\n  disabled: Signal<boolean>;\n  items: Signal<MenuSelectionGroupItem<TValue>[]>;\n  labelId: WritableSignal<string | null>;\n  registerItem(item: MenuSelectionGroupItem<TValue>): void;\n  unregisterItem(item: MenuSelectionGroupItem<TValue>): void;\n  select(item: MenuSelectionGroupItem<TValue>): void;\n  markTouched(): void;\n};\n","import { booleanAttribute, Directive, computed, effect, inject, input, model, signal, untracked } from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport {\n  MENU_SELECTION_GROUP_MULTIPLE,\n  MENU_SELECTION_GROUP_TOKEN,\n  MenuSelectionGroupDirectiveBase,\n  MenuSelectionGroupItem,\n} from './menu-selection-group.tokens';\n\n@Directive({\n  selector: '[etMenuSelectionGroup]',\n  exportAs: 'etMenuSelectionGroup',\n  providers: [{ provide: MENU_SELECTION_GROUP_TOKEN, useExisting: MenuSelectionGroupDirective }],\n  host: {\n    role: 'group',\n    '[attr.aria-labelledby]': 'labelId()',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-invalid]': 'shouldDisplayError() || null',\n  },\n})\nexport class MenuSelectionGroupDirective implements MenuSelectionGroupDirectiveBase {\n  private multipleOverride = inject(MENU_SELECTION_GROUP_MULTIPLE, { optional: true });\n\n  public value = model<unknown | unknown[] | null>(null);\n  public touched = model(false);\n  public multipleInput = input(false, { alias: 'multiple', transform: booleanAttribute });\n  public disabled = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  public multiple = computed(() => this.multipleOverride ?? this.multipleInput());\n  public items = signal<MenuSelectionGroupItem[]>([]);\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  /** @internal Set by a group label component so `aria-labelledby` can reference it. */\n  public labelId = signal<string | null>(null);\n\n  constructor() {\n    effect(() => {\n      const currentValue = this.value();\n      const currentItems = this.items();\n\n      const itemValues = currentItems.map((item) => item.value());\n\n      if (currentItems.length === 0) {\n        return;\n      }\n\n      untracked(() => {\n        if (this.multiple()) {\n          const valueArray = Array.isArray(currentValue) ? currentValue : [];\n\n          currentItems.forEach((item, index) => item.checked.set(valueArray.includes(itemValues[index])));\n        } else {\n          currentItems.forEach((item, index) => item.checked.set(itemValues[index] === currentValue));\n        }\n      });\n    });\n  }\n\n  /** @internal */\n  public registerItem(item: MenuSelectionGroupItem) {\n    this.items.update((items) => [...items, item]);\n  }\n\n  /** @internal */\n  public unregisterItem(item: MenuSelectionGroupItem) {\n    this.items.update((items) => items.filter((registered) => registered !== item));\n  }\n\n  public markTouched() {\n    this.touched.set(true);\n  }\n\n  public select(item: MenuSelectionGroupItem) {\n    if (this.disabled() || item.disabled()) {\n      return;\n    }\n\n    if (this.multiple()) {\n      item.checked.update((checked) => !checked);\n      this.value.set(\n        this.items()\n          .filter((registered) => registered.checked())\n          .map((registered) => registered.value()),\n      );\n    } else {\n      for (const registered of this.items()) {\n        registered.checked.set(registered === item);\n      }\n\n      this.value.set(item.value());\n    }\n\n    this.markTouched();\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  model,\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ValidationError } from '@angular/forms/signals';\nimport { tap } from 'rxjs';\nimport { RuntimeError } from '@ethlete/core';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuItemActivationEvent, MenuItemDirective } from './menu-item.directive';\nimport {\n  MENU_SELECTION_GROUP_TOKEN,\n  MENU_SELECTION_ITEM_KIND,\n  MenuSelectionItemKind,\n} from './menu-selection-group.tokens';\n\n@Directive({\n  selector: '[etMenuSelectionItem]',\n  exportAs: 'etMenuSelectionItem',\n  host: {\n    '[attr.aria-checked]': 'ariaChecked()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class MenuSelectionItemDirective {\n  private group = inject(MENU_SELECTION_GROUP_TOKEN, { optional: true });\n  private kindOverride = inject(MENU_SELECTION_ITEM_KIND, { optional: true });\n  private menuItem = inject(MenuItemDirective, { self: true, optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  public value = input<unknown>(undefined);\n  public checked = model(false);\n  public indeterminate = model(false);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  public kind = computed<MenuSelectionItemKind>(() => {\n    if (this.kindOverride) {\n      return this.kindOverride;\n    }\n\n    if (this.group) {\n      return this.group.multiple() ? 'checkbox' : 'radio';\n    }\n\n    return 'checkbox';\n  });\n\n  public ariaChecked = computed(() => {\n    if (this.kind() === 'checkbox' && this.indeterminate()) {\n      return 'mixed';\n    }\n\n    return this.checked();\n  });\n\n  private isDisabled = computed(() => this.disabled() || (this.group?.disabled() ?? false));\n\n  constructor() {\n    const menuItem = this.menuItem;\n\n    if (menuItem) {\n      menuItem.roleOverride.set(computed(() => (this.kind() === 'radio' ? 'menuitemradio' : 'menuitemcheckbox')));\n      menuItem.setDefaultCloseOnActivate(false);\n      menuItem.disabledOverride.set(this.isDisabled);\n\n      outputToObservable(menuItem.activate)\n        .pipe(\n          tap((event) => this.handleActivation(event)),\n          takeUntilDestroyed(),\n        )\n        .subscribe();\n    }\n\n    this.group?.registerItem(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.group?.unregisterItem(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menuItem) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.ITEM_OUTSIDE_MENU,\n            '[MenuSelectionItemDirective] etMenuSelectionItem must be combined with etMenuItem on the same element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        if (this.group && this.value() === undefined) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.SELECTION_ITEM_MISSING_VALUE,\n            '[MenuSelectionItemDirective] Selection items inside a selection group require a value. Add a [value] input.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        if (!this.group && this.kind() === 'radio') {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.RADIO_ITEM_OUTSIDE_GROUP,\n            '[MenuSelectionItemDirective] Radio items require a surrounding selection group. Wrap them in an et-menu-radio-group.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public toggle() {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.indeterminate()) {\n      this.indeterminate.set(false);\n      this.checked.set(true);\n\n      return;\n    }\n\n    this.checked.update((checked) => !checked);\n  }\n\n  protected handleBlur() {\n    if (this.group) {\n      this.group.markTouched();\n    } else {\n      this.touched.set(true);\n    }\n  }\n\n  private handleActivation(event: MenuItemActivationEvent) {\n    if (this.group) {\n      this.group.select(this);\n    } else {\n      this.toggle();\n      this.touched.set(true);\n    }\n\n    // Enter picks and dismisses, Space and pointer clicks keep the menu open for further picks\n    if (event.source === 'keyboard-enter') {\n      this.menuItem?.owner?.closeAll('item');\n    }\n  }\n}\n","import { DestroyRef, Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { MENU_ERROR_CODES } from '../menu-errors';\nimport { MenuDirective } from './menu.directive';\n\nexport type MenuSurfaceContext = {\n  $implicit: MenuDirective;\n  menu: MenuDirective;\n  close: (result?: unknown) => void;\n};\n\n@Directive({\n  selector: 'ng-template[etMenuSurface]',\n  exportAs: 'etMenuSurface',\n})\nexport class MenuSurfaceDirective {\n  private menu = inject(MenuDirective, { optional: true });\n  public templateRef = inject<TemplateRef<MenuSurfaceContext>>(TemplateRef);\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  constructor() {\n    this.menu?.registeredSurface.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      this.menu?.unregisterSurface(this);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.menu) {\n          throw new RuntimeError(\n            MENU_ERROR_CODES.SURFACE_OUTSIDE_MENU,\n            '[MenuSurfaceDirective] etMenuSurface must be placed inside an [etMenu] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { MENU_SELECTION_GROUP_MULTIPLE, MenuSelectionGroupDirective } from './headless';\n\n@Component({\n  selector: 'et-menu-checkbox-group',\n  template: `\n    <ng-content select=\"et-menu-group-label\" />\n    <ng-content />\n  `,\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: MENU_SELECTION_GROUP_MULTIPLE, useValue: true }],\n  hostDirectives: [\n    {\n      directive: MenuSelectionGroupDirective,\n      inputs: ['value', 'touched', 'disabled', 'invalid', 'errors', 'required', 'name'],\n      outputs: ['valueChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-menu-group et-menu-checkbox-group',\n  },\n})\nexport class MenuCheckboxGroupComponent {}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { IconDirective } from '../icon';\nimport { MENU_SELECTION_ITEM_KIND, MenuItemDirective, MenuSelectionItemDirective } from './headless';\n\n@Component({\n  selector: 'et-menu-checkbox-item',\n  templateUrl: './menu-selection-item.component.html',\n  styleUrl: './menu-selection-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [{ provide: MENU_SELECTION_ITEM_KIND, useValue: 'checkbox' }],\n  hostDirectives: [\n    {\n      directive: MenuItemDirective,\n      inputs: ['closeOnActivate'],\n      outputs: ['activate'],\n    },\n    {\n      directive: MenuSelectionItemDirective,\n      inputs: ['value', 'checked', 'indeterminate', 'touched', 'disabled', 'invalid', 'errors', 'required', 'name'],\n      outputs: ['checkedChange', 'indeterminateChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-menu-item et-menu-selection-item et-menu-checkbox-item',\n    '[class.et-menu-selection-item--has-icon]': '!!icon()',\n  },\n})\nexport class MenuCheckboxItemComponent {\n  public icon = input<string | null>(null);\n}\n","<span class=\"et-menu-item-content\">\n  <ng-content />\n</span>\n\n<span class=\"et-menu-item-check\" aria-hidden=\"true\">\n  @if (icon(); as itemIcon) {\n    <i [etIcon]=\"itemIcon\"></i>\n  }\n</span>\n","import { Component, DestroyRef, ElementRef, ViewEncapsulation, inject } from '@angular/core';\nimport { createComponentId } from '@ethlete/core';\nimport { MENU_SELECTION_GROUP_TOKEN } from './headless';\n\n@Component({\n  selector: 'et-menu-group-label',\n  template: `<ng-content />`,\n  styleUrl: './menu-group-label.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-menu-group-label',\n    role: 'presentation',\n  },\n})\nexport class MenuGroupLabelComponent {\n  private group = inject(MENU_SELECTION_GROUP_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-menu-group-label');\n    }\n\n    this.group?.labelId.set(element.id);\n\n    this.destroyRef.onDestroy(() => {\n      this.group?.labelId.set(null);\n    });\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { CHEVRON_ICON } from '../icon/headless/chevron-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\n\n/**\n * The chevron a menu item shows when it also opens a submenu. `MenuItemComponent` stamps it, so its\n * styles only reach a document that renders a submenu trigger.\n *\n * Never move the `provideIcons` up onto the item: it shadows the app's registry for everything below\n * it, which would hide the consumer's own icons projected into the same row.\n *\n * @internal\n */\n@Component({\n  selector: 'et-menu-item-submenu-icon',\n  template: `<i etIcon=\"et-chevron\"></i>`,\n  styleUrl: './menu-item-submenu-icon.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(CHEVRON_ICON)],\n  host: {\n    class: 'et-menu-item-submenu-icon',\n    'aria-hidden': 'true',\n  },\n})\nexport class MenuItemSubmenuIconComponent {}\n","import { Component, ViewEncapsulation, effect, inject, input, untracked } from '@angular/core';\nimport { ProvideColorDirective, injectErrorTheme } from '@ethlete/core';\nimport { MenuItemDirective } from './headless';\nimport { MenuItemSubmenuIconComponent } from './menu-item-submenu-icon.component';\n\nexport const MENU_ITEM_VARIANTS = {\n  DEFAULT: 'default',\n  DESTRUCTIVE: 'destructive',\n} as const;\n\nexport type MenuItemVariant = (typeof MENU_ITEM_VARIANTS)[keyof typeof MENU_ITEM_VARIANTS];\n\n@Component({\n  selector: 'button[et-menu-item], a[et-menu-item]',\n  templateUrl: './menu-item.component.html',\n  styleUrl: './menu-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MenuItemSubmenuIconComponent],\n  hostDirectives: [\n    {\n      directive: MenuItemDirective,\n      inputs: ['disabled', 'closeOnActivate'],\n      outputs: ['activate'],\n    },\n    ProvideColorDirective,\n  ],\n  host: {\n    class: 'et-menu-item',\n    '[attr.data-variant]': 'variant()',\n  },\n})\nexport class MenuItemComponent {\n  private provideColor = inject(ProvideColorDirective);\n  private errorColorTheme = injectErrorTheme();\n  private item = inject(MenuItemDirective);\n\n  public variant = input<MenuItemVariant>(MENU_ITEM_VARIANTS.DEFAULT);\n\n  // static: the host directive resolves `submenu` in its own constructor, which runs before this one\n  protected isSubmenuTrigger = this.item.submenu !== null;\n\n  constructor() {\n    effect(() => {\n      const isDestructive = this.variant() === MENU_ITEM_VARIANTS.DESTRUCTIVE;\n\n      untracked(() => {\n        if (isDestructive) {\n          this.provideColor.forceColor(this.errorColorTheme);\n\n          return;\n        }\n\n        this.provideColor.clearForcedColor();\n      });\n    });\n  }\n}\n","<span class=\"et-menu-item-icon\">\n  <ng-content select=\"[etIcon]\" />\n</span>\n\n<span class=\"et-menu-item-content\">\n  <ng-content />\n</span>\n\n<span class=\"et-menu-item-trailing\">\n  <ng-content select=\"et-menu-item-shortcut\" />\n\n  @if (isSubmenuTrigger) {\n    <et-menu-item-submenu-icon />\n  }\n</span>\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-menu-item-shortcut',\n  template: `<ng-content />`,\n  styleUrl: './menu-item-shortcut.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-menu-item-shortcut',\n    'aria-hidden': 'true',\n  },\n})\nexport class MenuItemShortcutComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { MenuSelectionGroupDirective } from './headless';\n\n@Component({\n  selector: 'et-menu-radio-group',\n  template: `\n    <ng-content select=\"et-menu-group-label\" />\n    <ng-content />\n  `,\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: MenuSelectionGroupDirective,\n      inputs: ['value', 'touched', 'disabled', 'invalid', 'errors', 'required', 'name'],\n      outputs: ['valueChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-menu-group et-menu-radio-group',\n  },\n})\nexport class MenuRadioGroupComponent {}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { IconDirective } from '../icon';\nimport { MENU_SELECTION_ITEM_KIND, MenuItemDirective, MenuSelectionItemDirective } from './headless';\n\n@Component({\n  selector: 'et-menu-radio-item',\n  templateUrl: './menu-selection-item.component.html',\n  styleUrl: './menu-selection-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [{ provide: MENU_SELECTION_ITEM_KIND, useValue: 'radio' }],\n  hostDirectives: [\n    {\n      directive: MenuItemDirective,\n      inputs: ['closeOnActivate'],\n      outputs: ['activate'],\n    },\n    {\n      directive: MenuSelectionItemDirective,\n      inputs: ['value', 'checked', 'touched', 'disabled', 'invalid', 'errors', 'required', 'name'],\n      outputs: ['checkedChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-menu-item et-menu-selection-item et-menu-radio-item',\n    '[class.et-menu-selection-item--has-icon]': '!!icon()',\n  },\n})\nexport class MenuRadioItemComponent {\n  public icon = input<string | null>(null);\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-menu-separator',\n  template: ``,\n  styleUrl: './menu-separator.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-menu-separator',\n    role: 'separator',\n    'aria-orientation': 'horizontal',\n  },\n})\nexport class MenuSeparatorComponent {}\n","import {\n  Component,\n  ElementRef,\n  ViewContainerRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  viewChild,\n} from '@angular/core';\nimport {\n  AutoSurfaceDirective,\n  COLOR_PROVIDER,\n  ProvideColorDirective,\n  createComponentId,\n  injectAnimatedBlockSize,\n  injectErrorTheme,\n} from '@ethlete/core';\nimport { MenuDirective, MenuPanelDirective } from './headless';\n\nconst RESIZE_ANIMATION_CLASS = 'et-menu--resizing';\n\n@Component({\n  selector: 'et-menu',\n  templateUrl: './menu.component.html',\n  styleUrl: './menu.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ProvideColorDirective],\n  hostDirectives: [MenuPanelDirective, ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-menu',\n  },\n})\nexport class MenuComponent {\n  private ownColorProvider = inject(ProvideColorDirective);\n  private contextColorProvider = inject(COLOR_PROVIDER, { optional: true, skipSelf: true });\n  private menu = inject(MenuDirective, { optional: true });\n  protected errorColorTheme = injectErrorTheme();\n\n  // both must stay content-sized: the host's used size is overridden by the resize animation and\n  // the scroller is sized by the host, so observing either would feed the animation back in\n  private headerElement = viewChild<ElementRef<HTMLElement>>('menuHeader');\n  private bodyElement = viewChild<ElementRef<HTMLElement>>('menuBody');\n  private bodyContentElement = viewChild<ElementRef<HTMLElement>>('menuBodyContent');\n  private searchChrome = viewChild('menuSearchChrome', { read: ViewContainerRef });\n  private scrollbarChrome = viewChild('menuScrollbarChrome', { read: ViewContainerRef });\n\n  public search = computed(() => this.menu?.registeredSearch() ?? null);\n  protected searchError = computed(() => this.search()?.error() ?? null);\n  protected searchErrorId = createComponentId('et-menu-search-error');\n\n  constructor() {\n    // this panel IS the overlay's own surface - paint the overlay's registered elevation exactly,\n    // don't stack a level above it (the tracker is authoritative; content inside elevates off it)\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    // the panel renders inside a detached overlay pane, so color context from the\n    // trigger location has to be re-applied here instead of cascading via the DOM\n    // (the surface context is handled the same way by AutoSurfaceDirective). Synced\n    // in the constructor so the theme is applied before the first painted frame of\n    // the enter animation - an effect would flush one render too late.\n    if (this.contextColorProvider) {\n      this.ownColorProvider.syncWithProvider(this.contextColorProvider);\n    }\n\n    // lets the search input reference the error line rendered below it via aria-describedby\n    effect(() => {\n      this.search()?.errorElementId.set(this.searchErrorId);\n    });\n\n    effect((onCleanup) => {\n      const search = this.search();\n      const target = this.bodyElement()?.nativeElement;\n      const searchChrome = this.searchChrome();\n      const scrollbarChrome = this.scrollbarChrome();\n\n      if (!search || !target || !searchChrome || !scrollbarChrome) {\n        return;\n      }\n\n      const chrome = search.getChrome();\n      const spinner = searchChrome.createComponent(chrome.spinner);\n      spinner.setInput('search', search);\n\n      const scrollbar = scrollbarChrome.createComponent(chrome.scrollbar);\n      scrollbar.setInput('target', target);\n\n      onCleanup(() => {\n        spinner.destroy();\n        scrollbar.destroy();\n      });\n    });\n\n    // animate the menu's block size when its content changes while open\n    // (e.g. search filtering items away or the search error line appearing)\n    injectAnimatedBlockSize({\n      observe: [this.headerElement, this.bodyContentElement],\n      resizingClass: RESIZE_ANIMATION_CLASS,\n    });\n  }\n}\n","<div #menuHeader class=\"et-menu-header\">\n  <div class=\"et-menu-search-field\">\n    <ng-content select=\"input[etMenuSearch]\" />\n    <ng-container #menuSearchChrome />\n  </div>\n\n  @if (searchError(); as error) {\n    <p [id]=\"searchErrorId\" [etProvideColor]=\"errorColorTheme\" class=\"et-menu-search-error\" role=\"alert\">\n      {{ error }}\n    </p>\n  }\n</div>\n\n<div class=\"et-menu-body-wrapper\">\n  <div #menuBody class=\"et-menu-body\">\n    <div #menuBodyContent class=\"et-menu-body-content\">\n      <ng-content />\n    </div>\n  </div>\n\n  <ng-container #menuScrollbarChrome />\n</div>\n","import {\n  MenuContextTriggerDirective,\n  MenuDirective,\n  MenuItemDirective,\n  MenuPanelDirective,\n  MenuSelectionGroupDirective,\n  MenuSelectionItemDirective,\n  MenuSurfaceDirective,\n  MenuTriggerDirective,\n} from './headless';\nimport { MenuSearchDirective } from './headless/menu-search.directive';\nimport { MenuCheckboxGroupComponent } from './menu-checkbox-group.component';\nimport { MenuCheckboxItemComponent } from './menu-checkbox-item.component';\nimport { MenuGroupLabelComponent } from './menu-group-label.component';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemShortcutComponent } from './menu-item-shortcut.component';\nimport { MenuRadioGroupComponent } from './menu-radio-group.component';\nimport { MenuRadioItemComponent } from './menu-radio-item.component';\nimport { MenuSeparatorComponent } from './menu-separator.component';\nimport { MenuComponent } from './menu.component';\n\nexport const MENU_IMPORTS = [\n  MenuDirective,\n  MenuTriggerDirective,\n  MenuContextTriggerDirective,\n  MenuSurfaceDirective,\n  MenuPanelDirective,\n  MenuItemDirective,\n  MenuSelectionGroupDirective,\n  MenuSelectionItemDirective,\n  MenuComponent,\n  MenuItemComponent,\n  MenuItemShortcutComponent,\n  MenuSeparatorComponent,\n  MenuGroupLabelComponent,\n  MenuRadioGroupComponent,\n  MenuRadioItemComponent,\n  MenuCheckboxGroupComponent,\n  MenuCheckboxItemComponent,\n] as const;\n\n/** Search input, loading indicator and custom scrollbar chrome for a menu. */\nexport const MENU_SEARCH_IMPORTS = [MenuSearchDirective] as const;\n","import { DOCUMENT } from '@angular/common';\nimport { Component, computed, inject, input, signal, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectHasTouchInput, injectRenderer } from '@ethlete/core';\nimport { fromEvent, tap } from 'rxjs';\nimport { BUTTON_IMPORTS } from '../../../button';\nimport {\n  ALIGN_CENTER_ICON,\n  ALIGN_JUSTIFY_ICON,\n  ALIGN_LEFT_ICON,\n  ALIGN_RIGHT_ICON,\n  IconDirective,\n  provideIcons,\n} from '../../../icon';\nimport { MENU_IMPORTS } from '../../../menu';\nimport { ALIGN_CLASS_PREFIX, alignClassOf } from '../headless/internals/rich-text-editor-dom-core';\nimport { RichTextEditorDirective } from '../headless/rich-text-editor.directive';\n\nexport const TEXT_ALIGNS = ['left', 'center', 'right', 'justify'] as const;\nexport type TextAlign = (typeof TEXT_ALIGNS)[number];\n\n/**\n * The opt-in alignment tool's toolbar control: a menu of block alignments (left/center/right/justify).\n * Alignment has no Markdown form, so it is persisted as an `et-rte-align-*` class on the block (or\n * table cell) and round-tripped as raw HTML by the Markdown converter. Registered via\n * `provideRichTextEditorAlignmentTool`.\n */\n@Component({\n  selector: 'et-rich-text-editor-align-tool',\n  templateUrl: './rich-text-editor-align-tool.component.html',\n  styleUrl: './rich-text-editor-align-tool.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS, IconDirective, ...MENU_IMPORTS],\n  providers: [provideIcons(ALIGN_LEFT_ICON, ALIGN_CENTER_ICON, ALIGN_RIGHT_ICON, ALIGN_JUSTIFY_ICON)],\n  host: { class: 'et-rte-align-tool' },\n})\nexport class RichTextEditorAlignToolComponent {\n  private renderer = injectRenderer();\n  private document = inject(DOCUMENT);\n  /** On touch, open the menu without stealing focus so the keyboard (and docked toolbar) stay put. */\n  protected hasTouchInput = injectHasTouchInput();\n\n  public editor = input.required<RichTextEditorDirective>();\n\n  /** The editor's strings - the tool is part of that editor's toolbar. */\n  protected labels = computed(() => this.editor().resolvedLabels());\n\n  protected options = computed<{ value: TextAlign; label: string; icon: string }[]>(() => {\n    const labels = this.labels();\n\n    return [\n      { value: 'left', label: labels.alignLeft, icon: 'et-align-left' },\n      { value: 'center', label: labels.alignCenter, icon: 'et-align-center' },\n      { value: 'right', label: labels.alignRight, icon: 'et-align-right' },\n      { value: 'justify', label: labels.alignJustify, icon: 'et-align-justify' },\n    ];\n  });\n\n  /** Alignment of the caret's block/cell - kept live so the trigger icon and menu stay in sync. */\n  protected current = signal<TextAlign>('left');\n  protected currentIcon = computed(\n    () => this.options().find((o) => o.value === this.current())?.icon ?? 'et-align-left',\n  );\n  /** Also locked inside lists: `text-align` on a list has no Markdown form and would not survive\n   *  serialization, so the tool disables there instead of silently losing the alignment. */\n  protected disabled = computed(\n    () =>\n      this.editor().disabled() ||\n      this.editor().readonly() ||\n      this.editor().unorderedListActive() ||\n      this.editor().orderedListActive(),\n  );\n\n  constructor() {\n    // track the caret's alignment as it moves so the button reflects it without needing a click\n    fromEvent(this.document, 'selectionchange')\n      .pipe(\n        tap(() => this.current.set(this.readAlign())),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  protected select(value: unknown) {\n    const align = value as TextAlign;\n    const root = this.editor().editorDom.root();\n    const range = this.editor().editorDom.getSelection()?.range;\n\n    if (!root || !range || this.disabled()) return;\n\n    // wrapping loose top-level text in a paragraph is a mutation, so it only happens here (on the\n    // explicit align action) - never in readAlign, which runs on every selection change\n    const blocks = this.targetBlocks(root, range) ?? this.wrapLooseContent(root, range);\n\n    for (const block of blocks) {\n      const current = alignClassOf(block);\n\n      if (current) this.renderer.removeClass(block, current);\n      if (align !== 'left') this.renderer.addClass(block, `${ALIGN_CLASS_PREFIX}${align}`);\n    }\n\n    this.current.set(align);\n    this.editor().syncFromDom({ boundary: true });\n    queueMicrotask(() => this.editor().activate());\n  }\n\n  private readAlign(): TextAlign {\n    const root = this.editor().editorDom.root();\n    const range = this.editor().editorDom.getSelection()?.range;\n\n    if (!root || !range) return 'left';\n\n    const block = this.targetBlocks(root, range)?.[0];\n    const value = (block && alignClassOf(block)?.slice(ALIGN_CLASS_PREFIX.length)) ?? '';\n\n    return (TEXT_ALIGNS as readonly string[]).includes(value) ? (value as TextAlign) : 'left';\n  }\n\n  /**\n   * The elements alignment applies to: inside a table, the full columns the selection touches\n   * (GFM table alignment is per column - the serializer reads it from the header cells, so a\n   * single aligned cell would not survive), otherwise the root-level blocks. Lists are skipped -\n   * their alignment has no Markdown form. Read-only - returns `null` when the selection is over\n   * loose top-level text with no block to align (see {@link wrapLooseContent}).\n   */\n  private targetBlocks(root: HTMLElement, range: Range): HTMLElement[] | null {\n    // eslint-disable-next-line ethlete/no-dom-query -- cells carry no unique hook; an atomic tag query is simplest\n    const cells = [...root.querySelectorAll<HTMLElement>('th, td')].filter((cell) => range.intersectsNode(cell));\n\n    if (cells.length > 0) return this.expandToColumns(cells);\n\n    const blocks: HTMLElement[] = [];\n\n    for (const child of root.children) {\n      if (child instanceof HTMLElement && range.intersectsNode(child)) {\n        if (child.tagName === 'UL' || child.tagName === 'OL') continue;\n\n        blocks.push(child);\n      }\n    }\n\n    return blocks.length > 0 ? blocks : null;\n  }\n\n  /** Every cell of the columns the given cells belong to, so alignment applies column-wide. */\n  private expandToColumns(cells: HTMLElement[]): HTMLElement[] {\n    const out = new Set<HTMLElement>();\n\n    for (const cell of cells) {\n      if (!(cell instanceof HTMLTableCellElement)) continue;\n\n      let table: HTMLElement | null = cell;\n\n      while (table && !(table instanceof HTMLTableElement)) table = table.parentElement;\n\n      if (!(table instanceof HTMLTableElement)) continue;\n\n      for (const row of table.rows) {\n        const columnCell = row.cells[cell.cellIndex];\n\n        if (columnCell) out.add(columnCell);\n      }\n    }\n\n    return [...out];\n  }\n\n  /** Wraps the loose top-level nodes the selection touches in a paragraph (the editor doesn't wrap\n   *  the first typed line until Enter) so there is a block to align. Mutates - call only on action. */\n  private wrapLooseContent(root: HTMLElement, range: Range): HTMLElement[] {\n    const loose = [...root.childNodes].filter((node) => range.intersectsNode(node));\n\n    if (loose.length === 0 || !loose[0]) return [];\n\n    const paragraph = this.renderer.createElement('p') as HTMLElement;\n    this.renderer.insertBefore(root, paragraph, loose[0]);\n    for (const node of loose) this.renderer.appendChild(paragraph, node);\n\n    return [paragraph];\n  }\n}\n","<div #alignMenu=\"etMenu\" [autoFocus]=\"!hasTouchInput()\" etMenu>\n  <button\n    [disabled]=\"disabled()\"\n    [pressed]=\"alignMenu.open()\"\n    [attr.aria-label]=\"labels().alignTrigger\"\n    (mousedown)=\"$event.preventDefault()\"\n    emitAriaPressed=\"false\"\n    etMenuTrigger\n    et-icon-button\n    size=\"sm\"\n    type=\"button\"\n    color=\"surface\"\n    pressedColor=\"inherit\"\n  >\n    <i [etIcon]=\"currentIcon()\"></i>\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu>\n      <et-menu-radio-group [value]=\"current()\" (valueChange)=\"select($event)\" (mousedown)=\"$event.preventDefault()\">\n        @for (option of options(); track option.value) {\n          <!-- eslint-disable-next-line ethlete/prefer-static-boolean-properties -- closeOnActivate is tri-state (boolean | undefined); a transform would collapse its unset state -->\n          <et-menu-radio-item [value]=\"option.value\" [closeOnActivate]=\"true\" [icon]=\"option.icon\">\n            {{ option.label }}\n          </et-menu-radio-item>\n        }\n      </et-menu-radio-group>\n    </et-menu>\n  </ng-template>\n</div>\n","import { Provider } from '@angular/core';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { RichTextEditorAlignToolComponent } from './rich-text-editor-align-tool.component';\n\n/**\n * Registers the opt-in `'align'` tool (block text-align: left / center / right / justify). Add to a\n * component/route's providers and include `'align'` in the editor's `tools`. Alignment persists as a\n * `et-rte-align-*` class on the block (Markdown has no alignment syntax). Tree-shakes when unused.\n */\nexport const provideRichTextEditorAlignmentTool = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_TOOL,\n  useValue: {\n    token: 'align',\n    // Only a fallback: the toolbar reads `align` from the label set, which is what a consumer localizes.\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.align,\n    control: RichTextEditorAlignToolComponent,\n  } satisfies RichTextEditorToolDefinition,\n  multi: true,\n});\n","import { HEADING_SELECTOR, RichTextEditorDomCore, HeadingTag, InlineTag } from './rich-text-editor-dom-core';\nimport { RichTextEditorDomFeatures } from './rich-text-editor-dom-features';\nimport { RichTextEditorDomLists } from './rich-text-editor-dom-lists';\n\nexport const createRichTextEditorAutoformat = (\n  core: RichTextEditorDomCore,\n  deps: {\n    lists: RichTextEditorDomLists;\n    features: RichTextEditorDomFeatures;\n  },\n) => {\n  const {\n    doc,\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    collapseInto,\n    resolveStartNode,\n    isBlockEmpty,\n    collectDescendants,\n  } = core;\n  const { toggleList } = deps.lists;\n  const { features } = deps;\n\n  /** Returns `true` when it converted, and the caller must then swallow the typed space. */\n  const applyBlockAutoformat = (isReserved: (char: string) => boolean) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable || !editable.range.collapsed) return false;\n\n    const { range } = editable;\n\n    if (closestWithin(range.startContainer, `li, td, th, pre, code, ${HEADING_SELECTOR}`)) return false;\n\n    // A browser-created <div> line counts as the caret's block too (Chrome inserts <div>s on Enter),\n    // and the root stands in for the loose first line a contenteditable holds before any block exists.\n    const container = closestWithin(range.startContainer, 'p, div') ?? el;\n    const probe = doc.createRange();\n\n    probe.selectNodeContents(container);\n    probe.setEnd(range.startContainer, range.startOffset);\n\n    const prefix = probe.toString();\n\n    const { headings, blockquote, codeBlock } = features;\n\n    let action: (() => void) | null = null;\n\n    if (/^[-*+]$/.test(prefix) && !isReserved(prefix)) {\n      action = () => toggleList('ul');\n    } else if (/^\\d{1,9}\\.$/.test(prefix) && !isReserved(prefix[0] ?? '')) {\n      action = () => toggleList('ol');\n    } else if (headings && /^#{1,3}$/.test(prefix) && !isReserved('#')) {\n      action = () => headings.toggleHeading(`h${prefix.length}` as HeadingTag);\n    } else if (codeBlock && prefix === '```') {\n      action = codeBlock.toggleCodeBlock;\n    } else if (blockquote && prefix === '>' && !isReserved('>') && !closestWithin(range.startContainer, 'blockquote')) {\n      action = blockquote.toggleBlockquote;\n    }\n\n    if (!action) return false;\n\n    probe.deleteContents();\n    el.normalize();\n    collapseInto(container === el ? el : container, 0);\n    action();\n\n    const editableAfter = getSelection();\n    const landed = editableAfter\n      ? closestWithin(resolveStartNode(editableAfter.range), `li, ${HEADING_SELECTOR}`)\n      : null;\n\n    if (landed && isBlockEmpty(landed)) {\n      if (collectDescendants(landed, 'br').length === 0) {\n        renderer.appendChild(landed, renderer.createElement('br'));\n      }\n\n      collapseInto(landed, 0);\n    }\n\n    return true;\n  };\n\n  /** Longer delimiters must come first so `**` wins over `*`, and `__` over `_`. */\n  const inlineAutoformatRules: { char: string; tag: InlineTag; re: RegExp }[] = [\n    { char: '*', tag: 'strong', re: /\\*\\*([^\\s*](?:[^*]*[^\\s*])?)\\*\\*$/ },\n    { char: '*', tag: 'em', re: /(?<!\\*)\\*([^\\s*](?:[^*]*[^\\s*])?)\\*$/ },\n    { char: '~', tag: 'del', re: /~~([^\\s~](?:[^~]*[^\\s~])?)~~$/ },\n    { char: '`', tag: 'code', re: /`([^`]+)`$/ },\n    { char: '_', tag: 'strong', re: /(?<![\\w_])__([^\\s_](?:[^_]*[^\\s_])?)__$/ },\n    { char: '_', tag: 'em', re: /(?<![\\w_])_([^\\s_](?:[^_]*[^\\s_])?)_$/ },\n  ];\n\n  /** `typed` is the char about to be inserted; returns `true` when it consumed it. */\n  const applyInlineAutoformat = (typed: string, isReserved: (char: string) => boolean) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable || !editable.range.collapsed) return false;\n\n    const { range } = editable;\n    const node = range.startContainer;\n\n    if (!(node instanceof Text)) return false;\n\n    if (closestWithin(node, 'code, pre')) return false;\n\n    const text = (node.textContent ?? '').slice(0, range.startOffset) + typed;\n\n    for (const rule of inlineAutoformatRules) {\n      if (rule.char !== typed || isReserved(rule.char)) continue;\n\n      const match = rule.re.exec(text);\n\n      if (!match) continue;\n\n      const inner = match[1] ?? '';\n      const start = match.index;\n\n      node.deleteData(start, range.startOffset - start);\n\n      const mark = renderer.createElement(rule.tag) as HTMLElement;\n\n      renderer.appendChild(mark, renderer.createText(inner));\n\n      const insertAt = doc.createRange();\n\n      insertAt.setStart(node, start);\n      insertAt.collapse(true);\n      insertAt.insertNode(mark);\n\n      // The caret has to land in a real text node: a bare element boundary does not stick and the\n      // browser snaps it back inside the mark. The zero-width space is stripped on serialize.\n      let target = mark.nextSibling;\n      let offset = 0;\n\n      if (!(target instanceof Text) || target.length === 0) {\n        target = renderer.createText('\\u200b');\n        renderer.insertBefore(mark.parentNode as Node, target, mark.nextSibling);\n        offset = 1;\n      }\n\n      collapseInto(target, offset);\n\n      return true;\n    }\n\n    return false;\n  };\n\n  return { applyBlockAutoformat, applyInlineAutoformat };\n};\n\nexport type RichTextEditorDomAutoformat = ReturnType<typeof createRichTextEditorAutoformat>;\n","import { Provider } from '@angular/core';\nimport { createRichTextEditorAutoformat } from '../headless/internals/rich-text-editor-dom-autoformat';\nimport {\n  RICH_TEXT_EDITOR_DOM_FEATURE,\n  RichTextEditorDomFeature,\n} from '../headless/internals/rich-text-editor-dom-features';\n\n/**\n * Turns on markdown-as-you-type for every editor in scope: at a line start `- `, `1. `, `# `–`### `,\n * `> ` and ```` ``` ```` convert the block, and a closing `**bold**`, `*italic*`, `` `code` ``,\n * `~~strike~~`, `__`/`_` run converts into its mark. Registered token-trigger characters never\n * autoformat, and the editor's `autoformat` input still switches it off per instance.\n *\n * Each block rule needs its own domain to be provided as well - `# ` only converts with\n * `provideRichTextEditorHeadingTool()`, `> ` with `provideRichTextEditorBlockquoteTool()`,\n * ```` ``` ```` with `provideRichTextEditorCodeBlockTool()`. The list and inline rules work on their\n * own.\n *\n * @example\n * providers: [provideRichTextEditorAutoformat()]\n */\nexport const provideRichTextEditorAutoformat = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_DOM_FEATURE,\n  useValue: {\n    key: 'autoformat',\n    create: ({ core, lists, features }) => createRichTextEditorAutoformat(core, { lists, features }),\n  } satisfies RichTextEditorDomFeature,\n  multi: true,\n});\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\n\nconst NOT_QUOTABLE = /* @__PURE__ */ new Set(['TABLE', 'UL', 'OL', 'PRE']);\n\n/**\n * A quote's lines must stay `<br>`-separated inline content inside one `<blockquote>` - the shape\n * `markdownToHtml` produces for `> ` lines, and so the only one that survives a re-render from the\n * value (undo, an external write) unchanged.\n */\nexport const createRichTextEditorBlockquote = (core: RichTextEditorDomCore) => {\n  const {\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    selectNodeContents,\n    collapseInto,\n    collapseAfter,\n    replaceWith,\n    collectDescendants,\n    blocksInRange,\n  } = core;\n\n  const quoteAtCaret = () => {\n    const editable = getSelection();\n\n    return editable ? closestWithin(editable.range.startContainer, 'blockquote') : null;\n  };\n\n  const unwrapQuote = (quote: HTMLElement) => {\n    const parent = quote.parentNode;\n\n    if (!parent) return;\n\n    const produced: HTMLElement[] = [];\n    let current = renderer.createElement('p');\n\n    const flush = () => {\n      if (!current.firstChild) renderer.appendChild(current, renderer.createElement('br'));\n\n      produced.push(current);\n      current = renderer.createElement('p');\n    };\n\n    while (quote.firstChild) {\n      const child = quote.firstChild;\n\n      if (child instanceof HTMLElement && child.tagName === 'BR') {\n        renderer.removeChild(quote, child);\n        flush();\n\n        continue;\n      }\n\n      if (child instanceof HTMLElement && (child.tagName === 'BLOCKQUOTE' || child.tagName === 'P')) {\n        if (current.firstChild) flush();\n\n        renderer.removeChild(quote, child);\n        produced.push(child);\n\n        continue;\n      }\n\n      renderer.removeChild(quote, child);\n      renderer.appendChild(current, child);\n    }\n\n    if (current.firstChild) flush();\n    if (produced.length === 0) flush();\n\n    replaceWith(quote, produced);\n\n    const first = produced[0];\n\n    if (first) collapseInto(first, 0);\n  };\n\n  const toggleBlockquote = () => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable) return;\n\n    const existing = quoteAtCaret();\n\n    if (existing) {\n      unwrapQuote(existing);\n      el.normalize();\n\n      return;\n    }\n\n    const blocks = blocksInRange(editable.range);\n\n    if (blocks.some((block) => block instanceof HTMLElement && NOT_QUOTABLE.has(block.tagName))) return;\n\n    const quote = renderer.createElement('blockquote');\n\n    if (blocks.length === 0) {\n      renderer.appendChild(quote, renderer.createElement('br'));\n      renderer.appendChild(el, quote);\n      collapseInto(quote, 0);\n\n      return;\n    }\n\n    blocks.forEach((block, index) => {\n      if (index > 0) renderer.appendChild(quote, renderer.createElement('br'));\n\n      if (block.nodeType === Node.TEXT_NODE) {\n        renderer.appendChild(quote, block.cloneNode(true));\n\n        return;\n      }\n\n      while (block.firstChild) renderer.appendChild(quote, block.firstChild);\n    });\n\n    if (!quote.firstChild) renderer.appendChild(quote, renderer.createElement('br'));\n\n    renderer.insertBefore(el, quote, blocks[0] ?? null);\n    blocks.forEach((block) => {\n      if (block.parentNode === el) renderer.removeChild(el, block);\n    });\n\n    selectNodeContents(quote);\n    el.normalize();\n  };\n\n  const indentBlockquote = () => {\n    const editable = getSelection();\n    const quote = quoteAtCaret();\n\n    if (!editable || !quote) return false;\n\n    const { startContainer, startOffset } = editable.range;\n    const wrapper = renderer.createElement('blockquote');\n\n    replaceWith(quote, [wrapper]);\n    renderer.appendChild(wrapper, quote);\n    collapseInto(startContainer, startOffset);\n\n    return true;\n  };\n\n  const outdentBlockquote = () => {\n    const editable = getSelection();\n    const quote = quoteAtCaret();\n\n    if (!editable || !quote) return false;\n\n    const outer = quote.parentElement;\n\n    if (outer instanceof HTMLElement && outer.tagName === 'BLOCKQUOTE') {\n      const { startContainer, startOffset } = editable.range;\n      const ref = quote.nextSibling;\n\n      if (\n        quote.previousSibling &&\n        !(quote.previousSibling instanceof HTMLElement && quote.previousSibling.tagName === 'BR')\n      ) {\n        renderer.insertBefore(outer, renderer.createElement('br'), quote);\n      }\n\n      while (quote.firstChild) renderer.insertBefore(outer, quote.firstChild, ref);\n\n      renderer.removeChild(outer, quote);\n      collapseInto(startContainer, startOffset);\n\n      return true;\n    }\n\n    unwrapQuote(quote);\n\n    return true;\n  };\n\n  const atLineStart = (quote: HTMLElement, range: Range) => {\n    const { startContainer, startOffset } = range;\n    const isBreak = (node: Node | null) => !node || (node instanceof HTMLElement && node.tagName === 'BR');\n\n    if (startContainer === quote) return isBreak(quote.childNodes[startOffset - 1] ?? null);\n    if (startContainer.nodeType !== Node.TEXT_NODE) return false;\n\n    return startOffset === 0 && isBreak(startContainer.previousSibling);\n  };\n\n  /**\n   * Left to the browser, Enter splits the quote into two `<blockquote>`s instead of breaking the\n   * line inside one - a shape the value does not round-trip to.\n   */\n  const blockquoteEnter = () => {\n    const editable = getSelection();\n    const el = root();\n    const quote = quoteAtCaret();\n\n    if (!editable || !el || !quote || !editable.range.collapsed) return false;\n\n    const { range } = editable;\n    const toEnd = range.cloneRange();\n    toEnd.setEnd(quote, quote.childNodes.length);\n    const atQuoteEnd = toEnd.toString().trim().length === 0;\n\n    if (atQuoteEnd && atLineStart(quote, range)) {\n      let outermost = quote;\n\n      while (outermost.parentElement && outermost.parentElement !== el) outermost = outermost.parentElement;\n\n      // `Range.insertNode` leaves empty text nodes behind when it splits a text node: they are\n      // invisible in the markup, but the loop below would stop at one before reaching the break.\n      const isTrailingBlank = (node: ChildNode | null) =>\n        !!node &&\n        ((node instanceof HTMLElement && node.tagName === 'BR') ||\n          (node.nodeType === Node.TEXT_NODE && (node.textContent ?? '') === ''));\n\n      while (isTrailingBlank(quote.lastChild)) renderer.removeChild(quote, quote.lastChild as ChildNode);\n\n      const paragraph = renderer.createElement('p');\n      renderer.appendChild(paragraph, renderer.createElement('br'));\n      renderer.insertBefore(el, paragraph, outermost.nextSibling);\n\n      if (!quote.firstChild && quote.parentNode) renderer.removeChild(quote.parentNode, quote);\n      if (!outermost.firstChild && outermost.parentNode) renderer.removeChild(el, outermost);\n\n      collapseInto(paragraph, 0);\n\n      return true;\n    }\n\n    range.deleteContents();\n\n    const lineBreak = renderer.createElement('br');\n    range.insertNode(lineBreak);\n\n    // A break at the very end of the quote needs a second one after it, or the new (empty) line\n    // gets no line box and the caret snaps back to the end of the previous one.\n    if (atQuoteEnd && lineBreak.parentNode) {\n      renderer.insertBefore(lineBreak.parentNode, renderer.createElement('br'), lineBreak.nextSibling);\n    }\n\n    collapseAfter(lineBreak);\n\n    return true;\n  };\n\n  /**\n   * Deleting a quote's whole content leaves the browser's empty `<blockquote>` behind. An empty\n   * quote the editor itself made always holds a `<br>`, so a childless one is only ever that\n   * leftover.\n   */\n  const repairEmptyQuotes = () => {\n    const el = root();\n\n    if (!el) return false;\n\n    let repaired = false;\n\n    for (const quote of collectDescendants(el, 'blockquote')) {\n      const blank = Array.from(quote.childNodes).every(\n        (node) => node.nodeType === Node.TEXT_NODE && (node.textContent ?? '') === '',\n      );\n\n      if (!blank || !quote.parentNode) continue;\n\n      renderer.removeChild(quote.parentNode, quote);\n      repaired = true;\n    }\n\n    return repaired;\n  };\n\n  return { toggleBlockquote, indentBlockquote, outdentBlockquote, blockquoteEnter, repairEmptyQuotes };\n};\n\nexport type RichTextEditorDomBlockquote = ReturnType<typeof createRichTextEditorBlockquote>;\n","import { InjectionToken } from '@angular/core';\nimport { IconDefinition } from '../../../icon';\n\nexport const RICH_TEXT_EDITOR_TOOL_ICON = new InjectionToken<IconDefinition[]>('RichTextEditorToolIcon');\n","import { Provider } from '@angular/core';\nimport { QUOTE_ICON } from '../../../icon';\nimport { createRichTextEditorBlockquote } from '../headless/internals/rich-text-editor-dom-blockquote';\nimport {\n  RICH_TEXT_EDITOR_DOM_FEATURE,\n  RichTextEditorDomFeature,\n} from '../headless/internals/rich-text-editor-dom-features';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { RICH_TEXT_EDITOR_TOOL_ICON } from './rich-text-editor-tool-icons';\n\n/**\n * Registers the `'blockquote'` tool: quoting the selected blocks as `> ` lines, lifting a quote back\n * out, Tab/Shift+Tab nesting, the Enter-on-the-last-line exit and the `> ` markdown autoformat\n * prefix. `'blockquote'` is in the default toolbar, so this provider is all it takes - without it the\n * editor renders no quote control, `> ` stays literal text, and the quote DOM operations tree-shake\n * away.\n *\n * @example\n * providers: [provideRichTextEditorBlockquoteTool()]\n */\nexport const provideRichTextEditorBlockquoteTool = (): Provider[] => [\n  {\n    provide: RICH_TEXT_EDITOR_DOM_FEATURE,\n    useValue: {\n      key: 'blockquote',\n      create: ({ core }) => createRichTextEditorBlockquote(core),\n    } satisfies RichTextEditorDomFeature,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL_ICON,\n    useValue: QUOTE_ICON,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL,\n    useValue: {\n      token: 'blockquote',\n      icon: 'et-quote',\n      // Only a fallback: the toolbar reads `blockquote` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.blockquote,\n      isActive: (editor) => editor.blockquoteActive(),\n      run: (editor) => editor.toggleBlockquote(),\n      isDisabled: (editor) => editor.blockquoteToolDisabled(),\n    } satisfies RichTextEditorToolDefinition,\n    multi: true,\n  },\n];\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\n\nconst NOT_FENCEABLE = /* @__PURE__ */ new Set(['TABLE', 'UL', 'OL', 'BLOCKQUOTE']);\n\nexport const createRichTextEditorCodeBlock = (core: RichTextEditorDomCore) => {\n  const { doc, renderer, root, getSelection, closestWithin, collapseInto, replaceWith, childrenByTag, blocksInRange } =\n    core;\n\n  const codeAtCaret = () => {\n    const editable = getSelection();\n    const pre = editable ? closestWithin(editable.range.startContainer, 'pre') : null;\n\n    return pre;\n  };\n\n  const codeHost = (pre: HTMLElement) => {\n    const first = pre.firstElementChild;\n\n    return first instanceof HTMLElement && first.tagName === 'CODE' ? first : pre;\n  };\n\n  const textAround = (host: HTMLElement, range: Range) => {\n    const start = doc.createRange();\n    start.selectNodeContents(host);\n    start.setEnd(range.startContainer, range.startOffset);\n\n    const end = doc.createRange();\n    end.selectNodeContents(host);\n    end.setStart(range.endContainer, range.endOffset);\n\n    return { before: start.toString(), after: end.toString() };\n  };\n\n  const atEnd = (host: HTMLElement, range: Range) => textAround(host, range).after.length === 0;\n\n  /**\n   * The trailing newline that gives an empty last line its line box sits *after* the caret (see\n   * {@link codeBlockEnter}), so a lone `\\n` still counts as being on the last line.\n   */\n  const onLastLine = (host: HTMLElement, range: Range) => {\n    const { after } = textAround(host, range);\n\n    return after === '' || after === '\\n';\n  };\n\n  const onFirstLine = (host: HTMLElement, range: Range) => !textAround(host, range).before.includes('\\n');\n\n  const toggleCodeBlock = () => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable) return;\n\n    const existing = codeAtCaret();\n\n    if (existing) {\n      const lines = (codeHost(existing).textContent ?? '').split('\\n');\n      const paragraphs = lines.map((line) => {\n        const paragraph = renderer.createElement('p');\n\n        if (line.length > 0) renderer.appendChild(paragraph, renderer.createText(line));\n        else renderer.appendChild(paragraph, renderer.createElement('br'));\n\n        return paragraph;\n      });\n\n      replaceWith(existing, paragraphs);\n\n      const first = paragraphs[0];\n\n      if (first) collapseInto(first, 0);\n\n      el.normalize();\n\n      return;\n    }\n\n    const blocks = blocksInRange(editable.range);\n\n    if (blocks.some((block) => block instanceof HTMLElement && NOT_FENCEABLE.has(block.tagName))) return;\n\n    const pre = renderer.createElement('pre');\n    const code = renderer.createElement('code');\n    renderer.appendChild(pre, code);\n\n    // With `white-space: pre` an empty block has no line box, and so no caret, without a newline\n    // (and a <br> would serialize literally).\n    const text = blocks.map((block) => block.textContent ?? '').join('\\n') || '\\n';\n\n    renderer.appendChild(code, renderer.createText(text));\n\n    renderer.insertBefore(el, pre, blocks[0] ?? null);\n    blocks.forEach((block) => {\n      if (block.parentNode === el) renderer.removeChild(el, block);\n    });\n\n    collapseInto(code.firstChild as Node, 0);\n    el.normalize();\n  };\n\n  const codeBlockEnter = () => {\n    const editable = getSelection();\n    const el = root();\n    const pre = codeAtCaret();\n\n    if (!editable || !el || !pre) return false;\n\n    const { range } = editable;\n    const host = codeHost(pre);\n    const text = host.textContent ?? '';\n    const { before } = textAround(host, range);\n\n    if (range.collapsed && onLastLine(host, range) && (before === '' || before.endsWith('\\n'))) {\n      const paragraph = renderer.createElement('p');\n      renderer.appendChild(paragraph, renderer.createElement('br'));\n\n      const kept = text.replace(/\\n+$/, '');\n\n      if (kept === '') {\n        replaceWith(pre, [paragraph]);\n      } else {\n        host.textContent = kept;\n        renderer.insertBefore(el, paragraph, pre.nextSibling);\n      }\n\n      collapseInto(paragraph, 0);\n\n      return true;\n    }\n\n    range.deleteContents();\n\n    // A newline at the very end renders no line box of its own, so add the one the caret lands on.\n    // The two text nodes are left unmerged on purpose - normalizing them would drop the caret.\n    const newline = renderer.createText(atEnd(host, range) ? '\\n\\n' : '\\n');\n\n    range.insertNode(newline);\n    collapseInto(newline, 1);\n\n    return true;\n  };\n\n  /**\n   * Nothing else can produce a paragraph at either edge of the content, so without this a code block\n   * flush against the start or the end of it is a keyboard trap: {@link exitCodeBlock}'s Escape only\n   * ever exits downward.\n   */\n  const codeBlockArrowStep = (key: 'ArrowUp' | 'ArrowDown') => {\n    const editable = getSelection();\n    const el = root();\n    const pre = codeAtCaret();\n\n    if (!editable || !el || !pre || !editable.range.collapsed) return false;\n\n    const up = key === 'ArrowUp';\n    const host = codeHost(pre);\n    const neighbor = up ? pre.previousElementSibling : pre.nextElementSibling;\n    const atEdge = up ? onFirstLine(host, editable.range) : onLastLine(host, editable.range);\n\n    if (neighbor || !atEdge) return false;\n\n    const paragraph = renderer.createElement('p');\n    renderer.appendChild(paragraph, renderer.createElement('br'));\n    renderer.insertBefore(el, paragraph, up ? pre : pre.nextSibling);\n    collapseInto(paragraph, 0);\n\n    return true;\n  };\n\n  const exitCodeBlock = () => {\n    const el = root();\n    const pre = codeAtCaret();\n\n    if (!el || !pre) return false;\n\n    const next = pre.nextElementSibling;\n\n    if (next instanceof HTMLElement && next.tagName === 'P') {\n      collapseInto(next, 0);\n\n      return true;\n    }\n\n    const paragraph = renderer.createElement('p');\n    renderer.appendChild(paragraph, renderer.createElement('br'));\n    renderer.insertBefore(el, paragraph, pre.nextSibling);\n    collapseInto(paragraph, 0);\n\n    return true;\n  };\n\n  /**\n   * Deleting a code block's whole content leaves the `<pre>` behind minus its `<code>`, which the\n   * browser removes with the content. The editor never builds a bare `<pre>` itself, so this only\n   * ever catches that leftover.\n   */\n  const repairCodeBlock = () => {\n    const editable = getSelection();\n\n    if (!editable) return false;\n\n    const pre = closestWithin(editable.range.startContainer, 'pre');\n\n    if (!pre || childrenByTag(pre, 'code').length > 0) return false;\n\n    const paragraph = renderer.createElement('p');\n\n    while (pre.firstChild) renderer.appendChild(paragraph, pre.firstChild);\n    if (!paragraph.firstChild) renderer.appendChild(paragraph, renderer.createElement('br'));\n\n    const { startContainer, startOffset } = editable.range;\n    const caretInside = paragraph.contains(startContainer);\n\n    replaceWith(pre, [paragraph]);\n\n    if (caretInside) collapseInto(startContainer, startOffset);\n    else collapseInto(paragraph, 0);\n\n    return true;\n  };\n\n  const codeBlockBackspace = () => {\n    const pre = codeAtCaret();\n\n    if (!pre) return false;\n\n    const text = codeHost(pre).textContent ?? '';\n\n    if (text.trim().length > 0) return false;\n\n    const paragraph = renderer.createElement('p');\n    renderer.appendChild(paragraph, renderer.createElement('br'));\n    replaceWith(pre, [paragraph]);\n    collapseInto(paragraph, 0);\n\n    return true;\n  };\n\n  return {\n    toggleCodeBlock,\n    codeBlockEnter,\n    codeBlockArrowStep,\n    exitCodeBlock,\n    codeBlockBackspace,\n    repairCodeBlock,\n  };\n};\n\nexport type RichTextEditorDomCodeBlock = ReturnType<typeof createRichTextEditorCodeBlock>;\n","import { Provider } from '@angular/core';\nimport { CODE_BLOCK_ICON } from '../../../icon';\nimport { createRichTextEditorCodeBlock } from '../headless/internals/rich-text-editor-dom-code-block';\nimport {\n  RICH_TEXT_EDITOR_DOM_FEATURE,\n  RichTextEditorDomFeature,\n} from '../headless/internals/rich-text-editor-dom-features';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { RICH_TEXT_EDITOR_TOOL_ICON } from './rich-text-editor-tool-icons';\n\n/**\n * Registers the `'codeBlock'` tool: turning the selected blocks into a fenced code block and back,\n * the newline-on-Enter behavior inside a fence, the Escape and arrow-key exits, and the ```` ``` ````\n * markdown autoformat prefix. `'codeBlock'` is in the default toolbar, so this provider is all it\n * takes - without it the editor renders no fence control, ```` ``` ```` stays literal text, and the\n * fenced-code DOM operations tree-shake away.\n *\n * A fence a value already contains still renders (Markdown → HTML does not need this), but it is\n * then plain content: none of the caret handling above applies to it.\n *\n * @example\n * providers: [provideRichTextEditorCodeBlockTool()]\n */\nexport const provideRichTextEditorCodeBlockTool = (): Provider[] => [\n  {\n    provide: RICH_TEXT_EDITOR_DOM_FEATURE,\n    useValue: {\n      key: 'codeBlock',\n      create: ({ core }) => createRichTextEditorCodeBlock(core),\n    } satisfies RichTextEditorDomFeature,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL_ICON,\n    useValue: CODE_BLOCK_ICON,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL,\n    useValue: {\n      token: 'codeBlock',\n      icon: 'et-code-block',\n      // Only a fallback: the toolbar reads `codeBlock` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.codeBlock,\n      isActive: (editor) => editor.codeBlockActive(),\n      run: (editor) => editor.toggleCodeBlock(),\n      isDisabled: (editor) => editor.codeBlockToolDisabled(),\n    } satisfies RichTextEditorToolDefinition,\n    multi: true,\n  },\n];\n","import {\n  alignClassOf,\n  BLOCK_SELECTOR,\n  HEADING_SELECTOR,\n  RichTextEditorDomCore,\n  HeadingTag,\n} from './rich-text-editor-dom-core';\n\nexport const createRichTextEditorHeadings = (core: RichTextEditorDomCore) => {\n  const {\n    doc,\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    selectNodeContents,\n    selectAcross,\n    collapseInto,\n    replaceWith,\n    blocksInRange,\n    isBlockEmpty,\n  } = core;\n\n  const replaceBlockTag = (block: HTMLElement, tag: HeadingTag | 'p'): HTMLElement => {\n    const replacement = renderer.createElement(tag);\n\n    const align = alignClassOf(block);\n\n    // Alignment is the one presentation the editor persists on blocks, so it has to survive the re-tag.\n    if (align) renderer.addClass(replacement, align);\n\n    while (block.firstChild) {\n      renderer.appendChild(replacement, block.firstChild);\n    }\n\n    replaceWith(block, [replacement]);\n\n    return replacement;\n  };\n\n  const toggleHeading = (tag: HeadingTag) => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!el || !editable) {\n      return;\n    }\n\n    const rawBlocks = blocksInRange(editable.range);\n    const blocks = rawBlocks.filter((block) => !(block instanceof HTMLElement && block.tagName === 'TABLE'));\n\n    if (rawBlocks.length > 0 && blocks.length === 0) {\n      return;\n    }\n\n    if (blocks.length === 0) {\n      const heading = renderer.createElement(tag);\n      renderer.appendChild(heading, renderer.createElement('br'));\n      renderer.appendChild(el, heading);\n      collapseInto(heading, 0);\n\n      return;\n    }\n\n    const produced: Node[] = [];\n\n    blocks.forEach((block) => {\n      // A heading cannot contain list items, so a selected list is left untouched.\n      if (block instanceof HTMLElement && (block.tagName === 'UL' || block.tagName === 'OL')) {\n        produced.push(block);\n\n        return;\n      }\n\n      if (block instanceof HTMLElement && block.matches(HEADING_SELECTOR)) {\n        produced.push(replaceBlockTag(block, block.tagName.toLowerCase() === tag ? 'p' : tag));\n\n        return;\n      }\n\n      if (block instanceof HTMLElement && block.matches(BLOCK_SELECTOR)) {\n        produced.push(replaceBlockTag(block, tag));\n\n        return;\n      }\n\n      // A bare text node or inline element directly under the root has no wrapping block, so it must\n      // be moved into a fresh heading rather than re-tagged, which would drop its inline markup.\n      const heading = renderer.createElement(tag);\n      const ref = block.nextSibling;\n\n      renderer.removeChild(el, block);\n      renderer.appendChild(heading, block);\n      renderer.insertBefore(el, heading, ref);\n      produced.push(heading);\n    });\n\n    const first = produced[0];\n    const last = produced[produced.length - 1];\n\n    if (first && last) {\n      if (first === last) {\n        selectNodeContents(first);\n      } else {\n        selectAcross(first, last);\n      }\n    }\n\n    el.normalize();\n  };\n\n  const headingEnter = () => {\n    const editable = getSelection();\n    const el = root();\n\n    if (!editable || !el || !editable.range.collapsed) {\n      return false;\n    }\n\n    const { range } = editable;\n    const heading = closestWithin(range.startContainer, HEADING_SELECTOR);\n\n    if (!heading || heading.parentElement !== el || isBlockEmpty(heading)) {\n      return false;\n    }\n\n    const textToward = (side: 'start' | 'end') => {\n      const probe = doc.createRange();\n      probe.selectNodeContents(heading);\n\n      if (side === 'end') probe.setStart(range.startContainer, range.startOffset);\n      else probe.setEnd(range.startContainer, range.startOffset);\n\n      return probe.toString().length;\n    };\n\n    const paragraph = renderer.createElement('p');\n    renderer.appendChild(paragraph, renderer.createElement('br'));\n\n    if (textToward('end') === 0) {\n      renderer.insertBefore(el, paragraph, heading.nextSibling);\n      collapseInto(paragraph, 0);\n\n      return true;\n    }\n\n    if (textToward('start') === 0) {\n      renderer.insertBefore(el, paragraph, heading);\n\n      return true;\n    }\n\n    return false;\n  };\n\n  return { toggleHeading, headingEnter };\n};\n\nexport type RichTextEditorDomHeadings = ReturnType<typeof createRichTextEditorHeadings>;\n","import { Component, computed, ViewEncapsulation, input } from '@angular/core';\nimport { injectHasTouchInput } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../../../button';\nimport {\n  HEADING_1_ICON,\n  HEADING_2_ICON,\n  HEADING_3_ICON,\n  IconDirective,\n  PARAGRAPH_ICON,\n  provideIcons,\n} from '../../../icon';\nimport { MENU_IMPORTS } from '../../../menu';\nimport { RichTextEditorDirective } from '../headless/rich-text-editor.directive';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\n\nconst richTextEditorHeadingOptions = (): readonly { level: number | null; label: string; icon: string }[] => [\n  { level: null, label: DEFAULT_RICH_TEXT_EDITOR_LABELS.paragraph, icon: 'et-paragraph' },\n  { level: 1, label: DEFAULT_RICH_TEXT_EDITOR_LABELS.heading(1), icon: 'et-heading-1' },\n  { level: 2, label: DEFAULT_RICH_TEXT_EDITOR_LABELS.heading(2), icon: 'et-heading-2' },\n  { level: 3, label: DEFAULT_RICH_TEXT_EDITOR_LABELS.heading(3), icon: 'et-heading-3' },\n];\n\n/** Block-style options for the heading menu. `null` is a normal paragraph. */\nexport const RICH_TEXT_EDITOR_HEADING_OPTIONS = /* @__PURE__ */ richTextEditorHeadingOptions();\n\n/**\n * The opt-in `'heading'` tool's toolbar control: a menu of block styles (paragraph, H1, H2, H3).\n * Registered via `provideRichTextEditorHeadingTool`.\n */\n@Component({\n  selector: 'et-rich-text-editor-heading-tool',\n  templateUrl: './rich-text-editor-heading-tool.component.html',\n  styleUrl: './rich-text-editor-heading-tool.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS, IconDirective, ...MENU_IMPORTS],\n  providers: [provideIcons(PARAGRAPH_ICON, HEADING_1_ICON, HEADING_2_ICON, HEADING_3_ICON)],\n  host: { class: 'et-rte-heading-tool' },\n})\nexport class RichTextEditorHeadingToolComponent {\n  /** On touch, open the menu without stealing focus so the keyboard (and docked toolbar) stay put. */\n  protected hasTouchInput = injectHasTouchInput();\n\n  public editor = input.required<RichTextEditorDirective>();\n\n  /** The editor's strings - the tool is part of that editor's toolbar. */\n  protected labels = computed(() => this.editor().resolvedLabels());\n\n  /** The menu's entries, named by the label set rather than by the option table. */\n  protected options = computed(() => {\n    const labels = this.labels();\n\n    return RICH_TEXT_EDITOR_HEADING_OPTIONS.map((option) => ({\n      ...option,\n      label: option.level === null ? labels.paragraph : labels.heading(option.level),\n    }));\n  });\n\n  private current = computed(() => this.options().find((option) => option.level === this.editor().headingLevel()));\n\n  protected currentLabel = computed(() => this.current()?.label ?? this.labels().paragraph);\n  protected currentIcon = computed(() => this.current()?.icon ?? 'et-paragraph');\n\n  protected disabled = computed(\n    () => this.editor().disabled() || this.editor().readonly() || this.editor().headingToolDisabled(),\n  );\n\n  protected select(level: unknown) {\n    this.editor().setHeading(level as number | null);\n    // the menu overlay pulled focus off the editor; hand it back (deferred so it wins over the\n    // menu's own focus restoration on close) so the re-applied selection stays live in the editor.\n    queueMicrotask(() => this.editor().activate());\n  }\n}\n","<div #headingMenu=\"etMenu\" [autoFocus]=\"!hasTouchInput()\" etMenu>\n  <button\n    [disabled]=\"disabled()\"\n    [pressed]=\"headingMenu.open()\"\n    [attr.aria-label]=\"labels().textStyle(currentLabel())\"\n    (mousedown)=\"$event.preventDefault()\"\n    emitAriaPressed=\"false\"\n    etMenuTrigger\n    et-icon-button\n    size=\"sm\"\n    type=\"button\"\n    color=\"surface\"\n    pressedColor=\"inherit\"\n  >\n    <i [etIcon]=\"currentIcon()\"></i>\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu>\n      <et-menu-radio-group\n        [value]=\"editor().headingLevel()\"\n        (valueChange)=\"select($event)\"\n        (mousedown)=\"$event.preventDefault()\"\n      >\n        @for (option of options(); track option.level) {\n          <!-- eslint-disable-next-line ethlete/prefer-static-boolean-properties -- closeOnActivate is tri-state (boolean | undefined); a transform would collapse its unset state -->\n          <et-menu-radio-item [value]=\"option.level\" [closeOnActivate]=\"true\" [icon]=\"option.icon\">\n            {{ option.label }}\n          </et-menu-radio-item>\n        }\n      </et-menu-radio-group>\n    </et-menu>\n  </ng-template>\n</div>\n","import { Provider } from '@angular/core';\nimport {\n  RICH_TEXT_EDITOR_DOM_FEATURE,\n  RichTextEditorDomFeature,\n} from '../headless/internals/rich-text-editor-dom-features';\nimport { createRichTextEditorHeadings } from '../headless/internals/rich-text-editor-dom-headings';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { RichTextEditorHeadingToolComponent } from './rich-text-editor-heading-tool.component';\n\n/**\n * Registers the `'heading'` tool: the block-style menu (paragraph, H1, H2, H3), the Enter-at-a-\n * heading-edge behavior and the `# `–`### ` markdown autoformat prefixes. `'heading'` is in the\n * default toolbar, so this provider is all it takes - without it the editor renders no block-style\n * control, `# ` stays literal text, and the heading DOM operations tree-shake away.\n */\nexport const provideRichTextEditorHeadingTool = (): Provider[] => [\n  {\n    provide: RICH_TEXT_EDITOR_DOM_FEATURE,\n    useValue: {\n      key: 'headings',\n      create: ({ core }) => createRichTextEditorHeadings(core),\n    } satisfies RichTextEditorDomFeature,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL,\n    useValue: {\n      token: 'heading',\n      // Only a fallback: the toolbar reads `heading` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.textStyle(DEFAULT_RICH_TEXT_EDITOR_LABELS.paragraph),\n      control: RichTextEditorHeadingToolComponent,\n    } satisfies RichTextEditorToolDefinition,\n    multi: true,\n  },\n];\n","import { RichTextEditorDomCore } from './rich-text-editor-dom-core';\n\nexport const createRichTextEditorLinks = (core: RichTextEditorDomCore) => {\n  const {\n    renderer,\n    root,\n    getSelection,\n    closestWithin,\n    collapseAfter,\n    collapseAfterInline,\n    unwrapElement,\n    collectDescendants,\n  } = core;\n\n  /**\n   * The link editor trims the label it emits, which would otherwise mismatch an untrimmed selection\n   * and delete the surrounding space along with it.\n   */\n  const trimSelectionEdges = (range: Range) => {\n    const text = range.toString();\n\n    // Trimming an all-whitespace selection from both ends would invert the range.\n    if (!text.trim()) return;\n\n    const leading = text.length - text.trimStart().length;\n    const trailing = text.length - text.trimEnd().length;\n    const { startContainer, startOffset, endContainer, endOffset } = range;\n\n    if (leading && startContainer instanceof Text && startOffset + leading <= startContainer.length) {\n      range.setStart(startContainer, startOffset + leading);\n    }\n\n    if (trailing && endContainer instanceof Text && endOffset - trailing >= 0) {\n      range.setEnd(endContainer, endOffset - trailing);\n    }\n  };\n\n  const applyTargetRel = (anchor: HTMLElement, newTab: boolean) => {\n    if (newTab) {\n      renderer.setAttribute(anchor, 'target', '_blank');\n      renderer.setAttribute(anchor, 'rel', 'noopener noreferrer');\n    } else {\n      renderer.removeAttribute(anchor, 'target');\n      renderer.removeAttribute(anchor, 'rel');\n    }\n  };\n\n  const readActiveLink = (): { href: string; text: string; newTab: boolean; exists: boolean } | null => {\n    const editable = getSelection();\n\n    if (!editable) return null;\n\n    const anchor = closestWithin(editable.range.startContainer, 'a');\n\n    if (anchor) {\n      return {\n        href: anchor.getAttribute('href') ?? '',\n        text: anchor.textContent ?? '',\n        newTab: anchor.getAttribute('target') === '_blank',\n        exists: true,\n      };\n    }\n\n    return {\n      href: '',\n      text: editable.range.collapsed ? '' : editable.range.toString(),\n      newTab: false,\n      exists: false,\n    };\n  };\n\n  const applyLink = (href: string, options: { newTab?: boolean; text?: string | null } = {}) => {\n    const editable = getSelection();\n\n    if (!editable) {\n      return;\n    }\n\n    const newTab = options.newTab ?? false;\n    const text = options.text ?? null;\n    const el = root();\n    const existing = closestWithin(editable.range.startContainer, 'a');\n\n    if (existing) {\n      renderer.setAttribute(existing, 'href', href);\n      applyTargetRel(existing, newTab);\n\n      if (text !== null && text !== existing.textContent) {\n        existing.textContent = text;\n      }\n\n      collapseAfter(existing);\n\n      return;\n    }\n\n    const anchor = renderer.createElement('a') as HTMLElement;\n    renderer.setAttribute(anchor, 'href', href);\n    applyTargetRel(anchor, newTab);\n\n    if (!editable.range.collapsed) {\n      trimSelectionEdges(editable.range);\n    }\n\n    const selectionText = editable.range.collapsed ? '' : editable.range.toString();\n    const label = (text ?? selectionText).trim() || href;\n\n    if (!editable.range.collapsed && text === selectionText) {\n      try {\n        editable.range.surroundContents(anchor);\n      } catch {\n        // surroundContents throws when the range crosses an existing <a> boundary. The extract\n        // fallback can nest an <a> inside an <a> and, per Range.extractContents()'s spec, strand the\n        // drained original as an empty shell - both broken markdown, hence the sweeps below.\n        renderer.appendChild(anchor, editable.range.extractContents());\n        editable.range.insertNode(anchor);\n      }\n    } else {\n      renderer.appendChild(anchor, renderer.createText(label));\n      editable.range.deleteContents();\n      editable.range.insertNode(anchor);\n    }\n\n    collectDescendants(anchor, 'a').forEach((nested) => unwrapElement(nested));\n\n    if (el) {\n      collectDescendants(el, 'a')\n        .filter((node) => (node.textContent ?? '').length === 0)\n        .forEach((empty) => renderer.removeChild(empty.parentNode as Node, empty));\n\n      el.normalize();\n    }\n\n    collapseAfterInline(anchor);\n  };\n\n  const removeLink = () => {\n    const editable = getSelection();\n    const anchor = editable ? closestWithin(editable.range.startContainer, 'a') : null;\n    const el = root();\n\n    if (anchor && el) {\n      unwrapElement(anchor);\n      el.normalize();\n    }\n  };\n\n  return { applyLink, readActiveLink, removeLink };\n};\n\nexport type RichTextEditorDomLinks = ReturnType<typeof createRichTextEditorLinks>;\n","import { Provider } from '@angular/core';\nimport { LINK_ICON } from '../../../icon';\nimport {\n  RICH_TEXT_EDITOR_DOM_FEATURE,\n  RichTextEditorDomFeature,\n} from '../headless/internals/rich-text-editor-dom-features';\nimport { createRichTextEditorLinks } from '../headless/internals/rich-text-editor-dom-links';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { RICH_TEXT_EDITOR_TOOL_ICON } from './rich-text-editor-tool-icons';\n\n/**\n * Registers the `'link'` tool and the link DOM operations behind\n * {@link RichTextEditorDirective.applyLink} / `removeLink` / `promptForLink`. `'link'` is in the\n * default toolbar and in {@link RICH_TEXT_EDITOR_INLINE_TOOLS}, so this provider is all it takes -\n * without it neither toolbar renders a link control and the link DOM operations tree-shake away.\n *\n * What the tool *opens* is a separate opt-in: with `provideRichTextEditorLinkEditor()` it is the\n * popover form, without it `window.prompt`.\n *\n * @example\n * providers: [provideRichTextEditorLinkTool(), provideRichTextEditorLinkEditor()]\n */\nexport const provideRichTextEditorLinkTool = (): Provider[] => [\n  {\n    provide: RICH_TEXT_EDITOR_DOM_FEATURE,\n    useValue: {\n      key: 'links',\n      create: ({ core }) => createRichTextEditorLinks(core),\n    } satisfies RichTextEditorDomFeature,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL_ICON,\n    useValue: LINK_ICON,\n    multi: true,\n  },\n  {\n    provide: RICH_TEXT_EDITOR_TOOL,\n    useValue: {\n      token: 'link',\n      icon: 'et-link',\n      // Only a fallback: the toolbar reads `link` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.link,\n      // Also pressed while the link editor popover is open, matching the menu-trigger tools.\n      isActive: (editor) => editor.linkActive() || editor.linkEditorOpen(),\n      run: (editor) => editor.promptForLink(),\n      isDisabled: (editor) => editor.codeBlockActive(),\n      // Link keeps its brand color, so its icon opts out of the neutral icon recolor.\n      allowHardcodedColor: true,\n    } satisfies RichTextEditorToolDefinition,\n    multi: true,\n  },\n];\n","import { Provider } from '@angular/core';\nimport { provideRichTextEditorAutoformat } from './rich-text-editor-autoformat.provider';\nimport { provideRichTextEditorBlockquoteTool } from './rich-text-editor-blockquote.provider';\nimport { provideRichTextEditorCodeBlockTool } from './rich-text-editor-code-block.provider';\nimport { provideRichTextEditorHeadingTool } from './rich-text-editor-heading.provider';\nimport { provideRichTextEditorLinkTool } from './rich-text-editor-link.provider';\n\n/**\n * Everything {@link DEFAULT_RICH_TEXT_EDITOR_TOOLS} names that is opt-in: the block-style menu,\n * quotes, fenced code, links and markdown-as-you-type. Registering this gives an editor the full\n * default toolbar in one line.\n *\n * It also pulls all five domains into the bundle. An editor that needs fewer - a comment box wants\n * marks, lists and links, not fences - registers just those providers instead and leaves the rest\n * out; that is the whole reason they are separate.\n *\n * The always-built-in tools (undo/redo, the inline marks, the two lists) need no provider, and\n * alignment, tables and images are not in the default toolbar - they have their own providers.\n *\n * @example\n * providers: [provideRichTextEditorDefaultTools()]\n */\nexport const provideRichTextEditorDefaultTools = (): Provider[] => [\n  provideRichTextEditorHeadingTool(),\n  provideRichTextEditorBlockquoteTool(),\n  provideRichTextEditorCodeBlockTool(),\n  provideRichTextEditorLinkTool(),\n  provideRichTextEditorAutoformat(),\n];\n","import { effect, Injector, untracked } from '@angular/core';\nimport { catchError, EMPTY, isObservable, Observable, Subscription, take, tap } from 'rxjs';\nimport { AnyDropzoneUploadConfig } from '../../dropzone/headless';\n\n/**\n * Uploads one file and resolves to the URL the editor should point at. The simple shape: anything\n * that produces a URL - an `HttpClient` call, a query's response stream, a plain promise.\n */\nexport type RichTextEditorImageUploadFn = (file: File) => Observable<string> | PromiseLike<string>;\n\n/**\n * How the image tool uploads. Either an upload function, or a dropzone upload config built with\n * `createDropzoneUpload` / `createV2DropzoneUpload` - the config route reuses the dropzone's\n * per-file query machinery, which is what gives the placeholder real upload progress.\n */\nexport type RichTextEditorImageUpload = RichTextEditorImageUploadFn | AnyDropzoneUploadConfig<string>;\n\n/** Why an image never made it into the editor. */\nexport type RichTextEditorImageFailureReason = 'unsupported-type' | 'too-large' | 'upload-failed';\n\nexport type RichTextEditorImageFailure = {\n  file: File;\n  reason: RichTextEditorImageFailureReason;\n  /** The upload's own error, for `'upload-failed'` only. */\n  error?: unknown;\n  /** A human-readable message when the upload provided one. */\n  message?: string | null;\n};\n\n/** A single upload in flight, reported back to whoever placed the placeholder. */\nexport type RichTextEditorImageUploadRun = {\n  /** Stops reporting and releases the underlying query/subscription. */\n  cancel: () => void;\n};\n\nexport type StartImageUploadOptions = {\n  file: File;\n  upload: RichTextEditorImageUpload;\n  injector: Injector;\n  /** Percentage 0–100, or `null` while the upload reports no progress. */\n  onProgress: (percentage: number | null) => void;\n  onSuccess: (url: string) => void;\n  onError: (error: unknown, message: string | null) => void;\n};\n\nconst isDropzoneUploadConfig = (upload: RichTextEditorImageUpload): upload is AnyDropzoneUploadConfig<string> =>\n  typeof upload === 'object' && upload !== null && 'createUploadHandle' in upload;\n\n/**\n * Runs one image upload, whichever flavor the consumer configured, and reports progress/outcome\n * through plain callbacks - so the tool doesn't care whether a query or a promise is behind it.\n */\nexport const startImageUpload = (options: StartImageUploadOptions): RichTextEditorImageUploadRun => {\n  const { file, upload, injector, onProgress, onSuccess, onError } = options;\n\n  if (isDropzoneUploadConfig(upload)) {\n    return runQueryUpload({ file, upload, injector, onProgress, onSuccess, onError });\n  }\n\n  const result = upload(file);\n\n  if (isObservable(result)) {\n    const subscription: Subscription = result\n      .pipe(\n        take(1),\n        tap((url) => onSuccess(url)),\n        // The failure is the tool's to report (it removes the placeholder); rethrowing it would\n        // surface as an unhandled RxJS error on top of that.\n        catchError((error: unknown) => {\n          onError(error, errorMessageOf(error));\n\n          return EMPTY;\n        }),\n      )\n      .subscribe();\n\n    return { cancel: () => subscription.unsubscribe() };\n  }\n\n  let cancelled = false;\n\n  Promise.resolve(result).then(\n    (url) => {\n      if (!cancelled) onSuccess(url);\n    },\n    (error: unknown) => {\n      if (!cancelled) onError(error, errorMessageOf(error));\n    },\n  );\n\n  return { cancel: () => (cancelled = true) };\n};\n\n/**\n * The dropzone's per-file upload handle already models progress, errors and the two query flavors;\n * this only mirrors its signals onto the callbacks. Reading them needs a reactive context, hence the\n * effect (destroyed with the run, so a cancelled upload stops reporting).\n */\nconst runQueryUpload = (\n  options: Omit<StartImageUploadOptions, 'upload'> & { upload: AnyDropzoneUploadConfig<string> },\n): RichTextEditorImageUploadRun => {\n  const { file, upload, injector, onProgress, onSuccess, onError } = options;\n  const handle = upload.createUploadHandle({ file, injector });\n  let settled = false;\n\n  const effectRef = effect(\n    () => {\n      const state = handle.state();\n      const progress = handle.progress();\n\n      untracked(() => {\n        if (settled) return;\n\n        if (state === 'uploading') {\n          onProgress(progress);\n\n          return;\n        }\n\n        settled = true;\n\n        if (state === 'success') {\n          const url = handle.value();\n\n          if (url) onSuccess(url);\n          else onError(null, null);\n\n          return;\n        }\n\n        onError(handle.error(), handle.errorMessage());\n      });\n    },\n    { injector },\n  );\n\n  handle.execute();\n\n  return {\n    cancel: () => {\n      effectRef.destroy();\n      handle.dispose();\n    },\n  };\n};\n\n/** Best-effort message for the failure callback - an `Error`, or a query error's own message. */\nconst errorMessageOf = (error: unknown): string | null => {\n  if (error instanceof Error) return error.message;\n\n  if (typeof error === 'object' && error !== null && 'message' in error) {\n    const message = (error as { message: unknown }).message;\n\n    return typeof message === 'string' ? message : null;\n  }\n\n  return null;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * How image blocks and the upload placeholder render inside the editor's content, as a styles-only\n * component mounted by the image tool and by `et-rich-text-viewer` when its content has an image.\n *\n * @internal\n */\n@Component({\n  selector: 'et-rich-text-editor-image-styles',\n  template: '',\n  styleUrl: './rich-text-editor-image-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class RichTextEditorImageStylesComponent {}\n\n/** @internal */\nexport const mountRichTextEditorImageStyles = () => injectStyleManager().mount(RichTextEditorImageStylesComponent);\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { BUTTON_IMPORTS } from '../../../button';\nimport { IconDirective, IMAGE_ICON, provideIcons } from '../../../icon';\nimport { RichTextEditorDirective } from '../headless/rich-text-editor.directive';\nimport { richTextEditorToolLabel } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL } from '../rich-text-editor-tools';\n\n/**\n * The opt-in image tool's toolbar button. It exists so the tool's icon is registered here rather than\n * in the editor's own `provideIcons` - an editor without the image tool then ships neither.\n *\n * The behavior lives on the tool definition (`provideRichTextEditorImageTool`), which this looks up\n * through DI: pressing the button inserts an image, or opens the popover of the one at the caret.\n */\n@Component({\n  selector: 'et-rich-text-editor-image-tool',\n  template: `\n    <button\n      [disabled]=\"disabled()\"\n      [attr.aria-label]=\"label()\"\n      (mousedown)=\"$event.preventDefault()\"\n      (click)=\"run()\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n      color=\"surface\"\n      pressedColor=\"inherit\"\n    >\n      <i etIcon=\"et-image\"></i>\n    </button>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS, IconDirective],\n  providers: [provideIcons(IMAGE_ICON)],\n  host: { class: 'et-rte-image-tool' },\n})\nexport class RichTextEditorImageToolComponent {\n  private tools = inject(RICH_TEXT_EDITOR_TOOL);\n\n  public editor = input.required<RichTextEditorDirective>();\n\n  private definition = computed(() => this.tools.find((tool) => tool.token === 'image') ?? null);\n\n  protected label = computed(() => {\n    const definition = this.definition();\n\n    return definition ? richTextEditorToolLabel(this.editor().resolvedLabels(), definition) : '';\n  });\n\n  protected disabled = computed(() => {\n    const editor = this.editor();\n\n    return editor.disabled() || editor.readonly() || (this.definition()?.isDisabled?.(editor) ?? false);\n  });\n\n  protected run() {\n    this.definition()?.run?.(this.editor());\n  }\n}\n","import { injectRenderer } from '@ethlete/core';\nimport { RichTextEditorDom } from '../headless/internals/rich-text-editor-dom';\n\n/** The Ethlete renderer wrapper returned by `injectRenderer()`. */\ntype EditorRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n\n/** Class on the transient upload placeholder. Also the CSS hook - see `rich-text-editor.component.css`. */\nexport const RICH_TEXT_EDITOR_IMAGE_PLACEHOLDER_CLASS = 'et-rte-image-upload';\n\n/** The image at the caret, as the alt editor needs it. */\nexport type RichTextEditorActiveImage = {\n  element: HTMLImageElement;\n  src: string;\n  alt: string;\n};\n\n/** Whether a block holds nothing but (at most) the line break that gives an empty line its box. */\nconst isBlockEmpty = (block: HTMLElement) =>\n  !block.textContent?.trim() && Array.from(block.children).every((child) => child.tagName === 'BR');\n\n/**\n * Whether a block is an image and nothing else - the shape `![alt](url)` renders to, and the one the\n * editor treats as an atom. A paragraph with an image *among text* is ordinary editable prose.\n */\nconst isImageBlock = (block: Element): block is HTMLElement =>\n  block.tagName === 'P' &&\n  !block.textContent?.trim() &&\n  block.children.length === 1 &&\n  block.children[0]?.tagName === 'IMG';\n\n/**\n * Every image inside the editor. Walked by hand rather than queried: the editable's content is not\n * Angular's to know about, and the DOM-query lint rule (rightly) points at view queries for anything\n * that is.\n */\nconst imagesIn = (node: Element, found: HTMLImageElement[] = []): HTMLImageElement[] => {\n  for (const child of Array.from(node.children)) {\n    if (child instanceof HTMLImageElement) found.push(child);\n    else imagesIn(child, found);\n  }\n\n  return found;\n};\n\n/** The root-level node `node` lives in, or `null` when it *is* the root (an empty editor). */\nconst rootLevelBlockOf = (root: HTMLElement, node: Node): HTMLElement | null => {\n  let current: Node | null = node;\n\n  while (current && current !== root && current.parentNode !== root) current = current.parentNode;\n\n  return current && current !== root && current instanceof HTMLElement ? current : null;\n};\n\n/** Resolves the node a range boundary points at, which for `(element, offset)` is that child. */\nconst nodeAtBoundary = (container: Node, offset: number): Node => {\n  if (container instanceof Text) return container;\n\n  return container.childNodes[offset] ?? container.childNodes[Math.max(0, offset - 1)] ?? container;\n};\n\n/**\n * DOM operations for the opt-in image tool: the upload placeholder, inserting the finished image as\n * its own block, and reading/editing/removing the image at the caret.\n *\n * The placeholder is deliberately **text-free** - an element with no text content serializes to\n * nothing, so an upload in flight leaves the editor's Markdown value untouched (and out of the undo\n * history). Everything it shows - spinner, progress, failure - is CSS on its attributes.\n */\nexport const createImageOps = (renderer: EditorRenderer) => {\n  /**\n   * Puts the placeholder on a line of its own after the block the caret sits in, and moves the caret\n   * to the line below it - so writing continues under the image from the moment the upload starts,\n   * not once it lands. Returns it, or `null` when there is nowhere to insert.\n   *\n   * A `<span>` (styled `display: block`), not a real block element: `<p>`/`<div>` would serialize as a\n   * paragraph boundary, and this has to serialize as nothing at all.\n   */\n  const insertPlaceholder = (dom: RichTextEditorDom, label: string): HTMLElement | null => {\n    const root = dom.root();\n\n    if (!root || !dom.ensureCaret()) return null;\n\n    const editable = dom.getSelection();\n\n    if (!editable) return null;\n\n    const placeholder = renderer.createElement('span') as HTMLElement;\n\n    renderer.addClass(placeholder, RICH_TEXT_EDITOR_IMAGE_PLACEHOLDER_CLASS);\n    renderer.setAttribute(placeholder, 'contenteditable', 'false');\n    renderer.setAttribute(placeholder, 'role', 'img');\n    renderer.setAttribute(placeholder, 'aria-label', label);\n    renderer.setAttribute(placeholder, 'data-state', 'uploading');\n\n    if (!editable.range.collapsed) editable.range.deleteContents();\n\n    const host = rootLevelBlockOf(root, editable.range.startContainer);\n\n    if (host && isBlockEmpty(host)) {\n      // The caret is on an empty line: put the placeholder above it and let that line be the one\n      // below the image, instead of leaving a blank line stranded over it.\n      renderer.insertBefore(root, placeholder, host);\n    } else if (host) {\n      renderer.insertBefore(root, placeholder, host.nextSibling);\n    } else {\n      // An empty editor has no block to sit after.\n      dom.insertToken(placeholder);\n    }\n\n    placeCaretIn(ensureLineAfter(root, placeholder));\n\n    return placeholder;\n  };\n\n  /** Reflects upload progress on the placeholder. `null` keeps it indeterminate. */\n  const setPlaceholderProgress = (placeholder: HTMLElement, percentage: number | null) => {\n    if (percentage === null) {\n      renderer.removeAttribute(placeholder, 'data-progress');\n\n      return;\n    }\n\n    renderer.setAttribute(placeholder, 'data-progress', `${Math.round(percentage)}`);\n    renderer.setCssProperty(placeholder, '--_et-rte-image-progress', `${Math.round(percentage)}%`);\n  };\n\n  const removePlaceholder = (placeholder: HTMLElement) => {\n    const parent = placeholder.parentNode;\n\n    if (parent) renderer.removeChild(parent, placeholder);\n  };\n\n  /** Puts the caret at the start of `block`. */\n  const placeCaretIn = (block: HTMLElement) => {\n    const doc = block.ownerDocument;\n    const selection = doc.getSelection();\n\n    if (!selection) return;\n\n    const range = doc.createRange();\n    range.setStart(block, 0);\n    range.collapse(true);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  /**\n   * The editable line after `block`, reusing an empty one that already follows. An image block is not\n   * editable, so without this there would be nowhere to put the caret - and no way to keep writing\n   * when the image is the last thing in the document.\n   */\n  const ensureLineAfter = (root: HTMLElement, block: Element): HTMLElement => {\n    const next = block.nextElementSibling;\n\n    if (next instanceof HTMLElement && next.tagName === 'P' && !isImageBlock(next) && isBlockEmpty(next)) {\n      return next;\n    }\n\n    const paragraph = renderer.createElement('p') as HTMLElement;\n\n    // The line break gives the empty paragraph a line box, so the caret has somewhere to sit.\n    renderer.appendChild(paragraph, renderer.createElement('br'));\n    renderer.insertBefore(root, paragraph, block.nextSibling);\n\n    return paragraph;\n  };\n\n  /**\n   * Makes every image block an atom: `contenteditable=\"false\"`, so a tap can no longer land the caret\n   * beside the image (a position that reads as a line of text the image happens to be in, and that\n   * typing would break the block out of), and an editable line after a trailing image so the document\n   * never ends on something that cannot be typed after.\n   *\n   * Runs on every render and every value sync - both are value-neutral: `htmlToMarkdown` drops the\n   * attribute, and an empty trailing paragraph serializes to nothing.\n   */\n  const normalizeImages = (root: HTMLElement) => {\n    for (const image of imagesIn(root)) {\n      const block = image.parentElement;\n\n      if (block && block !== root && isImageBlock(block)) {\n        renderer.setAttribute(block, 'contenteditable', 'false');\n      }\n    }\n\n    const last = root.lastElementChild;\n\n    if (last && isImageBlock(last)) ensureLineAfter(root, last);\n  };\n\n  /**\n   * Swaps the placeholder for the uploaded image, in the exact place it was holding - the\n   * `<p><img></p>` shape `markdownToHtml` produces for `![alt](url)`, so a re-render keeps what was\n   * inserted. The caret is deliberately left where it is: it moved below the placeholder when the\n   * upload started, and by now the user may be typing somewhere else entirely.\n   *\n   * Returns the image, or `null` when the placeholder is gone (an undo or an external value write\n   * replaced the content while the upload was in flight).\n   */\n  const replacePlaceholderWithImage = ({\n    dom,\n    placeholder,\n    image,\n  }: {\n    dom: RichTextEditorDom;\n    placeholder: HTMLElement;\n    image: { src: string; alt: string };\n  }): HTMLImageElement | null => {\n    const root = dom.root();\n\n    if (!root || !root.contains(placeholder)) return null;\n\n    const paragraph = renderer.createElement('p') as HTMLElement;\n    const img = renderer.createElement('img') as HTMLImageElement;\n\n    renderer.setAttribute(img, 'src', image.src);\n    renderer.setAttribute(img, 'alt', image.alt);\n    renderer.appendChild(paragraph, img);\n\n    const anchor = placeholder.nextSibling;\n\n    removePlaceholder(placeholder);\n    renderer.insertBefore(root, paragraph, anchor);\n    renderer.setAttribute(paragraph, 'contenteditable', 'false');\n\n    // Keeps the \"an image never ends the document\" rule when the placeholder was the last thing.\n    normalizeImages(root);\n\n    return img;\n  };\n\n  /** The image the caret sits on (a clicked image is selected, so it is the boundary's own node). */\n  const readActiveImage = (dom: RichTextEditorDom): RichTextEditorActiveImage | null => {\n    const editable = dom.getSelection();\n\n    if (!editable) return null;\n\n    const { range } = editable;\n    const candidates = [\n      nodeAtBoundary(range.startContainer, range.startOffset),\n      nodeAtBoundary(range.endContainer, range.endOffset),\n    ];\n\n    const element = candidates.find((node): node is HTMLImageElement => node instanceof HTMLImageElement) ?? null;\n\n    if (!element) return null;\n\n    return { element, src: element.getAttribute('src') ?? '', alt: element.getAttribute('alt') ?? '' };\n  };\n\n  const applyAlt = (image: HTMLImageElement, alt: string) => {\n    renderer.setAttribute(image, 'alt', alt);\n  };\n\n  /** Removes the image, and the block it was alone in - an empty paragraph is not what was meant. */\n  const removeImage = (dom: RichTextEditorDom, image: HTMLImageElement) => {\n    const root = dom.root();\n    const block = image.parentElement;\n\n    if (image.parentNode) renderer.removeChild(image.parentNode, image);\n\n    if (root && block && block !== root && isBlockEmpty(block) && block.parentNode) {\n      renderer.removeChild(block.parentNode, block);\n    }\n  };\n\n  return {\n    insertPlaceholder,\n    setPlaceholderProgress,\n    removePlaceholder,\n    replacePlaceholderWithImage,\n    normalizeImages,\n    readActiveImage,\n    applyAlt,\n    removeImage,\n  };\n};\n\nexport type RichTextEditorImageOps = ReturnType<typeof createImageOps>;\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, inject, Injector, inputBinding, outputBinding, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { anchoredOverlayPosition, enableAnchoredOverlayPositionExtras, injectRenderer } from '@ethlete/core';\nimport { fromEvent, take, tap, timer } from 'rxjs';\nimport { OverlayConfig } from '../../../overlay/overlay-config';\nimport { injectOverlayManager } from '../../../overlay/overlay-manager';\nimport { OverlayRef } from '../../../overlay/overlay-ref';\nimport { injectAnchoredDialogStrategy, injectTopSheetStrategy } from '../../../overlay/strategies';\nimport { RichTextEditorDirective } from '../headless/rich-text-editor.directive';\nimport { RichTextEditorImageEditorComponent } from '../rich-text-editor-image-editor.component';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport {\n  RichTextEditorImageFailure,\n  RichTextEditorImageUpload,\n  startImageUpload,\n} from './rich-text-editor-image-upload';\nimport { mountRichTextEditorImageStyles } from './rich-text-editor-image-styles.component';\nimport { RichTextEditorImageToolComponent } from './rich-text-editor-image-tool.component';\nimport { createImageOps } from './rich-text-editor-image.util';\n\n/** How long a failed upload's placeholder stays visible before it removes itself. */\nconst FAILURE_VISIBLE_MS = 4000;\n\nexport type RichTextEditorImageToolConfig = {\n  /**\n   * Uploads one file and resolves to the URL to embed. Either a function returning a promise or\n   * observable, or a dropzone upload config (`createDropzoneUpload`) - the latter reuses the\n   * dropzone's per-file query machinery and reports upload progress on the placeholder.\n   */\n  upload: RichTextEditorImageUpload;\n\n  /**\n   * `accept` for the file picker, and the filter applied to pasted/dropped files.\n   * @default 'image/*'\n   */\n  accept?: string;\n\n  /** Largest file accepted, in bytes. A bigger one is rejected before the upload starts. */\n  maxSize?: number;\n\n  /**\n   * Called when an image did not make it in: the wrong type, too large, or a failed upload. Wire it\n   * to whatever your app uses to tell the user - a notification, a form error, a log.\n   */\n  onFailure?: (failure: RichTextEditorImageFailure) => void;\n};\n\n/** Whether a file is acceptable per the tool's `accept` pattern (`image/*`, `image/png`, `.png`). */\nconst matchesAccept = (file: File, accept: string) =>\n  accept\n    .split(',')\n    .map((pattern) => pattern.trim().toLowerCase())\n    .filter(Boolean)\n    .some((pattern) => {\n      if (pattern.startsWith('.')) return file.name.toLowerCase().endsWith(pattern);\n      if (pattern.endsWith('/*')) return file.type.toLowerCase().startsWith(pattern.slice(0, -1));\n\n      return file.type.toLowerCase() === pattern;\n    });\n\n/** The image files carried by a clipboard/drag payload, ignoring everything else it offers. */\nconst imageFilesOf = (data: DataTransfer | null | undefined, accept: string): File[] =>\n  Array.from(data?.files ?? []).filter((file) => file.type.startsWith('image/') || matchesAccept(file, accept));\n\n/**\n * Registers the opt-in `'image'` tool: pick (or paste, or drop) an image, upload it through the\n * consumer's handler, and embed it as `![alt](url)`. Add it to a component/route's providers and\n * include `'image'` in the editor's `tools`.\n *\n * The button inserts, and - with the caret on an image - opens the image popover instead, where the\n * alt text is edited and the image can be removed; clicking an image opens the same popover. Both\n * paste and drop of image files run through the same upload, whether or not `'image'` is in the\n * visible toolbar. Everything here (and the image DOM ops and popover it pulls in) tree-shakes away\n * for editors that don't provide the tool.\n *\n * @example\n * providers: [\n *   provideRichTextEditorImageTool({\n *     upload: (file) => this.api.uploadImage(file).pipe(map((res) => res.url)),\n *     maxSize: 5 * 1024 * 1024,\n *     onFailure: ({ reason }) => this.notifications.open({ status: 'error', title: `Upload failed: ${reason}` }),\n *   }),\n * ]\n */\nexport const provideRichTextEditorImageTool = (config: RichTextEditorImageToolConfig): Provider => ({\n  provide: RICH_TEXT_EDITOR_TOOL,\n  useFactory: (): RichTextEditorToolDefinition => {\n    const controller = createImageToolController(config);\n\n    return {\n      token: 'image',\n      // Only a fallback: the toolbar reads `image` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.image,\n      // The button is a control component so the image icon ships with the tool, not with every editor.\n      control: RichTextEditorImageToolComponent,\n      run: (editor) => controller.run(editor),\n      isDisabled: (editor) => editor.disabled() || editor.readonly() || editor.codeBlockActive(),\n      normalize: (root) => controller.normalize(root),\n      paste: (editor, event) => controller.handlePaste(editor, event),\n      drop: (editor, event) => controller.handleDrop(editor, event),\n      click: (editor, event) => controller.handleClick(editor, event),\n    };\n  },\n  multi: true,\n});\n\nconst createImageToolController = (config: RichTextEditorImageToolConfig) => {\n  mountRichTextEditorImageStyles();\n\n  const document = inject(DOCUMENT);\n  const injector = inject(Injector);\n  const destroyRef = inject(DestroyRef);\n  const renderer = injectRenderer();\n  const overlayManager = injectOverlayManager();\n  const ops = createImageOps(renderer);\n  const accept = config.accept ?? 'image/*';\n\n  let overlayRef: OverlayRef<RichTextEditorImageEditorComponent, unknown> | null = null;\n\n  const fail = (failure: RichTextEditorImageFailure) => config.onFailure?.(failure);\n\n  /** Opens the OS file dialog. Created per pick so nothing lingers in the DOM between uploads. */\n  const pickFiles = (editor: RichTextEditorDirective) => {\n    const input = renderer.createElement('input') as HTMLInputElement;\n\n    renderer.setAttribute(input, 'type', 'file');\n    renderer.setAttribute(input, 'accept', accept);\n    renderer.setAttribute(input, 'multiple', 'true');\n    renderer.setStyle(input, { display: 'none' });\n    renderer.appendChild(document.body, input);\n\n    fromEvent(input, 'change')\n      .pipe(\n        take(1),\n        tap(() => {\n          upload(editor, Array.from(input.files ?? []));\n          input.remove();\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n\n    // A cancelled dialog fires `cancel` in every browser that ships the event; where it doesn't, the\n    // input is cleaned up on the next pick or when the editor goes away.\n    fromEvent(input, 'cancel')\n      .pipe(\n        take(1),\n        tap(() => input.remove()),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n\n    destroyRef.onDestroy(() => input.remove());\n\n    input.click();\n  };\n\n  const upload = (editor: RichTextEditorDirective, files: File[]) => {\n    for (const file of files) {\n      if (!matchesAccept(file, accept)) {\n        fail({ file, reason: 'unsupported-type' });\n        continue;\n      }\n\n      if (config.maxSize !== undefined && file.size > config.maxSize) {\n        fail({ file, reason: 'too-large' });\n        continue;\n      }\n\n      uploadOne(editor, file);\n    }\n  };\n\n  const uploadOne = (editor: RichTextEditorDirective, file: File) => {\n    const dom = editor.editorDom;\n    const labels = editor.resolvedLabels();\n    const placeholder = ops.insertPlaceholder(dom, labels.imageUploading);\n\n    if (!placeholder) return;\n\n    // The placeholder itself serializes to nothing, but inserting it replaced the selection - commit\n    // that edit so the value stays in step with the DOM even if the upload never finishes.\n    editor.syncFromDom({ boundary: true });\n\n    const run = startImageUpload({\n      file,\n      upload: config.upload,\n      injector,\n      onProgress: (percentage) => ops.setPlaceholderProgress(placeholder, percentage),\n      onSuccess: (url) => {\n        const image = ops.replacePlaceholderWithImage({ dom, placeholder, image: { src: url, alt: '' } });\n\n        // Gone means the content was replaced while the upload ran (an undo, an external write) -\n        // silently drop the result rather than putting an image back into a document that moved on.\n        if (image) editor.syncFromDom({ boundary: true });\n      },\n      onError: (error, message) => {\n        showFailure(placeholder, labels.imageUploadFailed);\n        fail({ file, reason: 'upload-failed', error, message });\n      },\n    });\n\n    destroyRef.onDestroy(() => run.cancel());\n  };\n\n  /** Leaves the placeholder in its failed state briefly, so the user sees which image didn't make it. */\n  const showFailure = (placeholder: HTMLElement, label: string) => {\n    renderer.setAttribute(placeholder, 'data-state', 'error');\n    renderer.setAttribute(placeholder, 'aria-label', label);\n    ops.setPlaceholderProgress(placeholder, null);\n\n    timer(FAILURE_VISIBLE_MS)\n      .pipe(\n        take(1),\n        tap(() => ops.removePlaceholder(placeholder)),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  /** The toolbar button: edit the image under the caret, or insert a new one. */\n  const run = (editor: RichTextEditorDirective) => {\n    if (editor.disabled() || editor.readonly()) return;\n\n    editor.editorDom.restoreSelection();\n\n    const active = ops.readActiveImage(editor.editorDom);\n\n    if (active) {\n      openEditor(editor, active.element);\n\n      return;\n    }\n\n    pickFiles(editor);\n  };\n\n  const handlePaste = (editor: RichTextEditorDirective, event: ClipboardEvent) => {\n    // A clipboard that also carries HTML is a *content* paste - text that happens to include images\n    // (Word, a web page) puts both on the clipboard, and uploading the file would drop the text. Only\n    // a bare file payload (a screenshot, an image copied from the file manager) is an upload.\n    if (event.clipboardData?.types.includes('text/html')) return false;\n\n    const files = imageFilesOf(event.clipboardData, accept);\n\n    if (!files.length || editor.disabled() || editor.readonly() || editor.codeBlockActive()) return false;\n\n    upload(editor, files);\n\n    return true;\n  };\n\n  const handleDrop = (editor: RichTextEditorDirective, event: DragEvent) => {\n    const files = imageFilesOf(event.dataTransfer, accept);\n\n    if (!files.length || editor.disabled() || editor.readonly() || editor.codeBlockActive()) return false;\n\n    // Drop lands where it was dropped, not where the caret was - the browser has already moved the\n    // caret there by the time this runs, so the placeholder goes in at the drop point.\n    upload(editor, files);\n\n    return true;\n  };\n\n  /** A click on an image opens its popover - the discoverable way to reach the alt text. */\n  const handleClick = (editor: RichTextEditorDirective, event: MouseEvent) => {\n    const target = event.target;\n\n    if (!(target instanceof HTMLImageElement) || editor.disabled() || editor.readonly()) return false;\n\n    openEditor(editor, target);\n\n    return true;\n  };\n\n  const openEditor = (editor: RichTextEditorDirective, image: HTMLImageElement) => {\n    if (overlayRef) {\n      close();\n\n      return;\n    }\n\n    const overlayConfig: OverlayConfig = {\n      mode: 'non-modal',\n      autoFocus: 'input',\n      restoreFocus: false,\n      closeOnEscape: true,\n      closeOnOutsidePointer: true,\n      origin: image,\n      bindings: [\n        inputBinding('labels', () => editor.resolvedLabels()),\n        inputBinding('alt', () => image.getAttribute('alt') ?? ''),\n        inputBinding('src', () => image.getAttribute('src') ?? ''),\n        outputBinding<string>('saveAlt', (alt) => applyAlt({ editor, image, alt })),\n        outputBinding<void>('removeImage', () => removeImage(editor, image)),\n        outputBinding<void>('dismiss', () => dismiss(editor)),\n      ],\n      // Same responsive shape as the link editor: a top sheet on phones (an anchored card would be\n      // cramped against the keyboard), an anchored popover pointing at the image above `md`.\n      strategies: () => {\n        const topSheet = injectTopSheetStrategy();\n        const anchoredDialog = injectAnchoredDialogStrategy();\n\n        return [\n          { strategy: topSheet.build({ containerClass: 'et-rte-image-editor-overlay', hasBackdrop: true }) },\n          {\n            breakpoint: 'md',\n            strategy: anchoredDialog.build({\n              containerClass: 'et-rte-image-editor-overlay',\n              positionStrategy: () => {\n                enableAnchoredOverlayPositionExtras();\n\n                return anchoredOverlayPosition({\n                  referenceElement: image,\n                  placement: 'bottom',\n                  fallbackPlacements: ['top'],\n                  offset: 10,\n                  arrowPadding: 16,\n                  autoCloseIfReferenceHidden: true,\n                });\n              },\n              applyTransformOrigin: false,\n              minWidth: 'unset',\n              hasBackdrop: false,\n            }),\n          },\n        ];\n      },\n    };\n\n    const ref = overlayManager.open<RichTextEditorImageEditorComponent>(\n      RichTextEditorImageEditorComponent,\n      overlayConfig,\n    );\n\n    overlayRef = ref;\n\n    ref\n      .afterClosedEvent()\n      .pipe(\n        take(1),\n        tap((closeEvent) => {\n          if (overlayRef === ref) overlayRef = null;\n\n          // Escape means \"back to the text\"; an outside pointer was aimed somewhere else.\n          if (closeEvent.source === 'escape') queueMicrotask(() => editor.activate());\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  const applyAlt = ({\n    editor,\n    image,\n    alt,\n  }: {\n    editor: RichTextEditorDirective;\n    image: HTMLImageElement;\n    alt: string;\n  }) => {\n    ops.applyAlt(image, alt);\n    editor.syncFromDom({ boundary: true });\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const removeImage = (editor: RichTextEditorDirective, image: HTMLImageElement) => {\n    ops.removeImage(editor.editorDom, image);\n    editor.syncFromDom({ boundary: true });\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const dismiss = (editor: RichTextEditorDirective) => {\n    close();\n    queueMicrotask(() => editor.activate());\n  };\n\n  const close = () => {\n    const ref = overlayRef;\n\n    if (!ref) return;\n\n    overlayRef = null;\n    ref.close();\n  };\n\n  destroyRef.onDestroy(close);\n\n  return { run, normalize: ops.normalizeImages, handlePaste, handleDrop, handleClick };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * How tables render inside the editor's content, as a styles-only component mounted by the table\n * tool and by `et-rich-text-viewer` when its content has a table.\n *\n * @internal\n */\n@Component({\n  selector: 'et-rich-text-editor-table-styles',\n  template: '',\n  styleUrl: './rich-text-editor-table-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class RichTextEditorTableStylesComponent {}\n\n/** @internal */\nexport const mountRichTextEditorTableStyles = () => injectStyleManager().mount(RichTextEditorTableStylesComponent);\n","import { injectRenderer } from '@ethlete/core';\nimport { RichTextEditorDom } from '../headless/internals/rich-text-editor-dom';\n\n/** The Ethlete renderer wrapper returned by `injectRenderer()`. */\ntype EditorRenderer = NonNullable<ReturnType<typeof injectRenderer>>;\n\n/** Where the caret currently sits inside a table, if anywhere. */\nexport type TableContext = {\n  table: HTMLTableElement;\n  row: HTMLTableRowElement;\n  cell: HTMLTableCellElement;\n  rowIndex: number;\n  cellIndex: number;\n};\n\nconst allRows = (table: HTMLTableElement): HTMLTableRowElement[] => {\n  const rows: HTMLTableRowElement[] = [];\n\n  for (const section of table.children) {\n    if (section instanceof HTMLTableSectionElement) {\n      for (const row of section.children) if (row instanceof HTMLTableRowElement) rows.push(row);\n    }\n  }\n\n  return rows;\n};\n\n/** Walks up from a node to the table cell/row/table wrapping it (within the editor root). */\nexport const findTableContext = (root: HTMLElement, node: Node | null): TableContext | null => {\n  let el: HTMLElement | null = node instanceof HTMLElement ? node : (node?.parentElement ?? null);\n\n  while (el && el !== root && !(el instanceof HTMLTableCellElement)) {\n    el = el.parentElement;\n  }\n\n  if (!(el instanceof HTMLTableCellElement) || !root.contains(el)) return null;\n\n  const cell = el;\n  const row = cell.parentElement instanceof HTMLTableRowElement ? cell.parentElement : null;\n  let table: HTMLElement | null = row;\n\n  while (table && !(table instanceof HTMLTableElement)) table = table.parentElement;\n\n  if (!row || !(table instanceof HTMLTableElement)) return null;\n\n  const rows = allRows(table);\n\n  return { table, row, cell, rowIndex: rows.indexOf(row), cellIndex: [...row.cells].indexOf(cell) };\n};\n\n/** Whether the table still has a header row (a `<tr>` inside `<thead>`) - the picker always creates\n *  one, but \"Delete row\" can remove it. */\nexport const hasHeaderRow = (table: HTMLTableElement) => (table.tHead?.rows.length ?? 0) > 0;\n\n/** Whether a context's caret row is the table's header row. */\nexport const isHeaderRow = (ctx: TableContext) => ctx.row.parentElement?.nodeName === 'THEAD';\n\n/** The first editable cell of a table - where the caret lands after inserting. */\nexport const firstTableCell = (table: HTMLElement): HTMLElement | null =>\n  table instanceof HTMLTableElement ? (allRows(table)[0]?.cells[0] ?? null) : null;\n\n/** The cell nearest a context's (row, cell) position, clamped to what still exists - for restoring\n *  the caret after an edit removed the original row/column. `null` when the table has no cells. */\nexport const cellAt = (ctx: TableContext): HTMLElement | null => {\n  const rows = allRows(ctx.table);\n\n  if (rows.length === 0) return null;\n\n  const row = rows[Math.min(ctx.rowIndex, rows.length - 1)] ?? rows[rows.length - 1];\n\n  if (!row || row.cells.length === 0) return null;\n\n  return row.cells[Math.min(ctx.cellIndex, row.cells.length - 1)] ?? null;\n};\n\n/** Table DOM operations bound to a renderer - kept together so table code tree-shakes as one unit. */\nexport const createTableOps = (renderer: EditorRenderer) => {\n  const fillCell = (cell: HTMLElement) => renderer.appendChild(cell, renderer.createElement('br'));\n\n  const makeCell = (tag: 'th' | 'td') => {\n    const cell = renderer.createElement(tag) as HTMLElement;\n    fillCell(cell);\n\n    return cell;\n  };\n\n  /** Builds a `rows × cols` table (first row is the header) with empty, editable cells. */\n  const create = (rows: number, cols: number): HTMLElement => {\n    const table = renderer.createElement('table') as HTMLElement;\n    const thead = renderer.createElement('thead') as HTMLElement;\n    const headRow = renderer.createElement('tr') as HTMLElement;\n\n    for (let c = 0; c < cols; c++) renderer.appendChild(headRow, makeCell('th'));\n\n    renderer.appendChild(thead, headRow);\n    renderer.appendChild(table, thead);\n\n    const tbody = renderer.createElement('tbody') as HTMLElement;\n\n    for (let r = 0; r < Math.max(rows - 1, 1); r++) {\n      const tr = renderer.createElement('tr') as HTMLElement;\n      for (let c = 0; c < cols; c++) renderer.appendChild(tr, makeCell('td'));\n      renderer.appendChild(tbody, tr);\n    }\n\n    renderer.appendChild(table, tbody);\n\n    return table;\n  };\n\n  /** Inserts a row (matching the current column count) above or below the caret's row. */\n  const insertRow = (ctx: TableContext, position: 'above' | 'below') => {\n    const tr = renderer.createElement('tr') as HTMLElement;\n    for (let c = 0; c < ctx.row.cells.length; c++) renderer.appendChild(tr, makeCell('td'));\n\n    // body rows never belong in <thead> - from the header row, the new row lands at the top of the body\n    if (isHeaderRow(ctx)) {\n      const body = ctx.table.tBodies[0] ?? null;\n\n      if (body) {\n        renderer.insertBefore(body, tr, body.firstChild);\n      } else {\n        const tbody = renderer.createElement('tbody') as HTMLElement;\n        renderer.appendChild(tbody, tr);\n        renderer.appendChild(ctx.table, tbody);\n      }\n\n      return;\n    }\n\n    const section = ctx.row.parentElement as HTMLElement;\n    renderer.insertBefore(section, tr, position === 'above' ? ctx.row : ctx.row.nextSibling);\n  };\n\n  /** Re-adds the header row (matching the current column count) after \"Delete row\" removed it. */\n  const insertHeaderRow = (ctx: TableContext) => {\n    const tr = renderer.createElement('tr') as HTMLElement;\n    for (let c = 0; c < ctx.row.cells.length; c++) renderer.appendChild(tr, makeCell('th'));\n\n    let head: HTMLElement | null = ctx.table.tHead;\n\n    if (!head) {\n      head = renderer.createElement('thead') as HTMLElement;\n      renderer.insertBefore(ctx.table, head, ctx.table.firstChild);\n    }\n\n    renderer.appendChild(head, tr);\n  };\n\n  /** Inserts a column left or right of the caret's cell, adding a matching cell to every row. */\n  const insertColumn = (ctx: TableContext, position: 'left' | 'right') => {\n    for (const row of allRows(ctx.table)) {\n      const cell = makeCell(row.parentElement?.nodeName === 'THEAD' ? 'th' : 'td');\n      const at = row.cells[ctx.cellIndex] ?? null;\n      renderer.insertBefore(row, cell, position === 'left' ? at : (at?.nextSibling ?? null));\n    }\n  };\n\n  const deleteTable = (ctx: TableContext) => {\n    const parent = ctx.table.parentElement;\n    if (parent) renderer.removeChild(parent, ctx.table);\n  };\n\n  /** Removes the caret's row; removes the whole table when it was the last row. */\n  const deleteRow = (ctx: TableContext) => {\n    if (allRows(ctx.table).length <= 1) {\n      deleteTable(ctx);\n\n      return;\n    }\n\n    const section = ctx.row.parentElement as HTMLElement;\n    renderer.removeChild(section, ctx.row);\n\n    // don't leave an empty <thead>/<tbody> behind\n    if (section.childElementCount === 0) {\n      renderer.removeChild(ctx.table, section);\n    }\n  };\n\n  /** Removes the caret's column; removes the whole table when it was the last column. */\n  const deleteColumn = (ctx: TableContext) => {\n    if (ctx.row.cells.length <= 1) {\n      deleteTable(ctx);\n\n      return;\n    }\n\n    for (const row of allRows(ctx.table)) {\n      const cell = row.cells[ctx.cellIndex];\n      if (cell) renderer.removeChild(row, cell);\n    }\n  };\n\n  return { create, insertRow, insertHeaderRow, insertColumn, deleteRow, deleteColumn, deleteTable };\n};\n\n/**\n * Arrow-key caret navigation across table boundaries, registered as the table tool's `keydown`\n * interceptor (so it ships - like all table code - only with `provideRichTextEditorTableTool`).\n * `exit` steps the caret OUT of an edge cell into the block next to the table (creating an empty\n * paragraph when the table ends the document); `enter` steps it INTO the first/last cell of an\n * adjacent root-level table instead of stranding it at the table's edge.\n */\nexport const createTableNav = (renderer: EditorRenderer) => {\n  const collapseInto = (node: Node, offset: number) => {\n    const doc = node.ownerDocument;\n    const selection = doc?.getSelection();\n\n    if (!doc) return;\n\n    if (!selection) return;\n\n    const range = doc.createRange();\n\n    range.setStart(node, offset);\n    range.collapse(true);\n    selection.removeAllRanges();\n    selection.addRange(range);\n  };\n\n  const exit = (dom: RichTextEditorDom, key: string) => {\n    if (!key.startsWith('Arrow')) return false;\n\n    const el = dom.root();\n    const editable = dom.getSelection();\n\n    if (!el || !editable || !editable.range.collapsed) return false;\n\n    const doc = el.ownerDocument;\n    const { range } = editable;\n    let cell: HTMLElement | null =\n      range.startContainer instanceof HTMLElement ? range.startContainer : range.startContainer.parentElement;\n\n    while (cell && cell !== el && !(cell instanceof HTMLTableCellElement)) cell = cell.parentElement;\n\n    if (!(cell instanceof HTMLTableCellElement)) return false;\n\n    const cellEl = cell;\n    const row = cell.parentElement;\n    const table = row?.parentElement?.parentElement;\n\n    if (!(row instanceof HTMLTableRowElement) || !(table instanceof HTMLTableElement) || table.parentElement !== el) {\n      return false;\n    }\n\n    const rows = allRows(table);\n    const firstRow = rows[0] === row;\n    const lastRow = rows[rows.length - 1] === row;\n    const firstCell = row.cells[0] === cell;\n    const lastCell = row.cells[row.cells.length - 1] === cell;\n\n    const atCellStart = () => {\n      const r = doc.createRange();\n      r.selectNodeContents(cellEl);\n      r.setEnd(range.startContainer, range.startOffset);\n\n      return r.toString().length === 0;\n    };\n    const atCellEnd = () => {\n      const r = doc.createRange();\n      r.selectNodeContents(cellEl);\n      r.setStart(range.startContainer, range.startOffset);\n\n      return r.toString().length === 0;\n    };\n\n    let edge: 'before' | 'after' | null = null;\n\n    if (key === 'ArrowUp' && firstRow) edge = 'before';\n    else if (key === 'ArrowDown' && lastRow) edge = 'after';\n    else if (key === 'ArrowLeft' && firstRow && firstCell && atCellStart()) edge = 'before';\n    else if (key === 'ArrowRight' && lastRow && lastCell && atCellEnd()) edge = 'after';\n\n    if (!edge) return false;\n\n    stepOut(table, edge);\n\n    return true;\n  };\n\n  /** Moves the caret out of `table` (a root-level block - both callers verify that) into the\n   *  adjacent block, creating an empty paragraph when the table starts/ends the document. */\n  const stepOut = (table: HTMLTableElement, edge: 'before' | 'after') => {\n    const el = table.parentElement as HTMLElement;\n    const doc = el.ownerDocument;\n    const sibling = edge === 'before' ? table.previousElementSibling : table.nextElementSibling;\n    let target = sibling instanceof HTMLElement ? sibling : null;\n\n    if (!target) {\n      target = renderer.createElement('p') as HTMLElement;\n      renderer.appendChild(target, renderer.createElement('br'));\n      renderer.insertBefore(el, target, edge === 'before' ? table : table.nextSibling);\n    }\n\n    const caret = doc.createRange();\n\n    caret.selectNodeContents(target);\n    caret.collapse(edge === 'before' ? false : true);\n\n    const selection = doc.getSelection();\n\n    selection?.removeAllRanges();\n    selection?.addRange(caret);\n  };\n\n  /** Tab / Shift+Tab cell navigation: next/previous cell in row-major order; from the table's\n   *  last/first cell it steps OUT to the adjacent block (like the arrow-key `exit`), so Tab still\n   *  offers a keyboard escape route out of the editor's table instead of trapping the caret. */\n  const tab = (dom: RichTextEditorDom, event: KeyboardEvent) => {\n    if (event.key !== 'Tab') return false;\n\n    const el = dom.root();\n    const editable = dom.getSelection();\n\n    if (!el || !editable) return false;\n\n    const ctx = findTableContext(el, editable.range.startContainer);\n\n    if (!ctx || ctx.table.parentElement !== el) return false;\n\n    const cells = allRows(ctx.table).flatMap((row) => [...row.cells]);\n    const index = cells.indexOf(ctx.cell);\n    const target = cells[index + (event.shiftKey ? -1 : 1)] ?? null;\n\n    if (target) {\n      collapseInto(target, 0);\n    } else {\n      stepOut(ctx.table, event.shiftKey ? 'before' : 'after');\n    }\n\n    return true;\n  };\n\n  const enter = (dom: RichTextEditorDom, key: string) => {\n    if (!key.startsWith('Arrow')) return false;\n\n    const el = dom.root();\n    const editable = dom.getSelection();\n\n    if (!el || !editable || !editable.range.collapsed) return false;\n\n    const doc = el.ownerDocument;\n    const { range } = editable;\n    let block: Node | null = range.startContainer;\n\n    while (block && block.parentNode !== el) block = block.parentNode;\n\n    if (!block || block instanceof HTMLTableElement) return false;\n\n    const blockNode = block;\n\n    const atEdge = (side: 'start' | 'end') => {\n      const r = doc.createRange();\n      r.selectNodeContents(blockNode);\n      if (side === 'start') r.setEnd(range.startContainer, range.startOffset);\n      else r.setStart(range.startContainer, range.startOffset);\n\n      return r.toString().length === 0;\n    };\n\n    const elementSibling = (from: Node, dir: 'next' | 'prev'): Element | null => {\n      let sib = dir === 'next' ? from.nextSibling : from.previousSibling;\n      while (sib && sib.nodeType !== Node.ELEMENT_NODE) sib = dir === 'next' ? sib.nextSibling : sib.previousSibling;\n\n      return sib instanceof Element ? sib : null;\n    };\n\n    let table: Element | null = null;\n    let edge: 'first' | 'last' = 'first';\n\n    if ((key === 'ArrowDown' || key === 'ArrowRight') && atEdge('end')) {\n      table = elementSibling(block, 'next');\n      edge = 'first';\n    } else if ((key === 'ArrowUp' || key === 'ArrowLeft') && atEdge('start')) {\n      table = elementSibling(block, 'prev');\n      edge = 'last';\n    }\n\n    if (!(table instanceof HTMLTableElement)) return false;\n\n    const rows = allRows(table);\n    const targetRow = edge === 'first' ? rows[0] : rows[rows.length - 1];\n    const cell = targetRow?.cells[edge === 'first' ? 0 : targetRow.cells.length - 1];\n\n    if (!cell) return false;\n\n    collapseInto(cell, 0);\n\n    return true;\n  };\n\n  return { exit, enter, tab };\n};\n","import { Component, computed, ElementRef, input, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { injectHasTouchInput, injectRenderer } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../../../button';\nimport { IconDirective, provideIcons, TABLE_ICON } from '../../../icon';\nimport { MENU_IMPORTS, MenuDirective } from '../../../menu';\nimport { RichTextEditorDirective } from '../headless/rich-text-editor.directive';\nimport {\n  cellAt,\n  createTableOps,\n  findTableContext,\n  firstTableCell,\n  hasHeaderRow,\n  isHeaderRow,\n  TableContext,\n} from './rich-text-editor-table.util';\n\nconst PICKER_ROWS = 6;\nconst PICKER_COLS = 8;\n\nconst PICKER_KEY_STEPS: Record<string, { row: number; col: number }> = {\n  ArrowUp: { row: -1, col: 0 },\n  ArrowDown: { row: 1, col: 0 },\n  ArrowLeft: { row: 0, col: -1 },\n  ArrowRight: { row: 0, col: 1 },\n};\n\nconst clampToPicker = (value: number, max: number) => Math.max(0, Math.min(value, max));\n\n/**\n * The opt-in table tool's toolbar control: a menu that shows a grid-size picker to insert a table,\n * or row/column actions when the caret is inside one. Registered via `provideRichTextEditorTableTool`,\n * so all of this (and the table DOM ops it imports) only ships when a consumer opts in.\n */\n@Component({\n  selector: 'et-rich-text-editor-table-tool',\n  templateUrl: './rich-text-editor-table-tool.component.html',\n  styleUrl: './rich-text-editor-table-tool.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...BUTTON_IMPORTS, IconDirective, ...MENU_IMPORTS],\n  providers: [provideIcons(TABLE_ICON)],\n  host: { class: 'et-rte-table-tool' },\n})\nexport class RichTextEditorTableToolComponent {\n  private renderer = injectRenderer();\n  /** On touch, open the menu without stealing focus so the keyboard (and docked toolbar) stay put. */\n  protected hasTouchInput = injectHasTouchInput();\n\n  public editor = input.required<RichTextEditorDirective>();\n\n  public menu = viewChild.required(MenuDirective);\n  public pickerGrid = viewChild<ElementRef<HTMLElement>>('pickerGrid');\n\n  /** The editor's strings - the tool is part of that editor's toolbar. */\n  protected labels = computed(() => this.editor().resolvedLabels());\n\n  private ops = createTableOps(this.renderer);\n\n  protected readonly pickerRows = Array.from({ length: PICKER_ROWS }, (_, i) => i);\n  protected readonly pickerCols = Array.from({ length: PICKER_COLS }, (_, i) => i);\n\n  protected hoverRows = signal(0);\n  protected hoverCols = signal(0);\n  protected sizeLabel = computed(() => {\n    const labels = this.labels();\n\n    return this.hoverRows() > 0 ? labels.tableSizePreview(this.hoverRows(), this.hoverCols()) : labels.tableInsert;\n  });\n\n  /** Table context at the caret, recomputed when the menu opens (via `refreshContext`). */\n  protected context = signal<TableContext | null>(null);\n\n  /** Set when a touch/pen release already inserted, so the synthetic click after a tap doesn't insert twice. */\n  private insertedByPointer = false;\n\n  /** \"Insert header row\" only shows when the table lost its header (the picker always creates one). */\n  protected canAddHeaderRow = computed(() => {\n    const ctx = this.context();\n\n    return !!ctx && !hasHeaderRow(ctx.table);\n  });\n\n  /** \"Insert row above\" makes no sense from inside the header row - nothing goes above the header. */\n  protected inHeaderRow = computed(() => {\n    const ctx = this.context();\n\n    return !!ctx && isHeaderRow(ctx);\n  });\n\n  protected disabled = computed(() => this.editor().disabled() || this.editor().readonly());\n\n  protected refreshContext() {\n    this.context.set(this.currentContext());\n    this.hoverRows.set(0);\n    this.hoverCols.set(0);\n  }\n\n  protected hover(row: number, col: number) {\n    this.hoverRows.set(row + 1);\n    this.hoverCols.set(col + 1);\n  }\n\n  /**\n   * Arrow-key support for the size picker - it has no menu items, so the menu's own keyboard\n   * navigation has nothing to drive. The menu opens with the panel focused; the first arrow steps\n   * onto the 1×1 cell and further arrows move through the grid, with Enter/Space committing via the\n   * focused cell's native click. Listens on the `et-menu` element (= the panel) so the initial\n   * panel-targeted keydown is caught alongside the bubbling cell ones.\n   */\n  protected handlePickerKeydown(event: KeyboardEvent) {\n    // caret inside a table: the menu shows regular items, which the menu navigates itself\n    if (this.context()) return;\n\n    const grid = this.pickerGrid()?.nativeElement;\n\n    if (!grid) return;\n\n    // A focused cell isn't a menu item and doesn't target the panel, so the menu's own\n    // Escape/Tab handling never sees its keydowns - mirror it (panel-targeted ones still work).\n    if (event.target instanceof Element && grid.contains(event.target)) {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        this.menu().closeLevel('escape');\n\n        return;\n      }\n\n      if (event.key === 'Tab') {\n        this.menu().closeAll('tab');\n\n        return;\n      }\n    }\n\n    const step = PICKER_KEY_STEPS[event.key];\n\n    if (!step) return;\n\n    // eslint-disable-next-line ethlete/no-dom-query -- cells carry no unique hook; an atomic class query is simplest\n    const cells = Array.from(grid.querySelectorAll<HTMLButtonElement>('.et-rte-table-picker-cell'));\n    const focused = cells.indexOf(event.target as HTMLButtonElement);\n    const row = focused === -1 ? 0 : clampToPicker(Math.floor(focused / PICKER_COLS) + step.row, PICKER_ROWS - 1);\n    const col = focused === -1 ? 0 : clampToPicker((focused % PICKER_COLS) + step.col, PICKER_COLS - 1);\n    const cell = cells[row * PICKER_COLS + col];\n\n    if (!cell) return;\n\n    event.preventDefault();\n    cell.focus();\n    this.hover(row, col);\n  }\n\n  /**\n   * Touch implicitly captures the pointer on the cell it went down on, which would stop\n   * `pointerenter` from reaching the other cells - release it so a swipe extends the selection.\n   */\n  protected beginSwipeSelection(event: PointerEvent) {\n    this.insertedByPointer = false;\n\n    if (event.target instanceof Element && event.target.hasPointerCapture(event.pointerId)) {\n      event.target.releasePointerCapture(event.pointerId);\n    }\n  }\n\n  /**\n   * Commits a touch/pen selection where the finger lifts. A swipe's down and up targets differ,\n   * so no cell ever gets the click event - the grid's pointerup is the only commit signal.\n   * Mouse keeps committing via the cell's click.\n   */\n  protected commitSwipeSelection(event: PointerEvent) {\n    if (event.pointerType === 'mouse') return;\n\n    const rows = this.hoverRows();\n    const cols = this.hoverCols();\n\n    if (!rows || !cols) return;\n\n    this.insertedByPointer = true;\n    this.insert(rows - 1, cols - 1);\n    this.menu().closeAll();\n  }\n\n  protected insertFromCell(row: number, col: number) {\n    if (this.insertedByPointer) {\n      this.insertedByPointer = false;\n\n      return;\n    }\n\n    this.insert(row, col);\n    this.menu().closeAll();\n  }\n\n  public insert(row: number, col: number) {\n    const editor = this.editor();\n    const root = editor.editorDom.root();\n\n    if (!root || this.disabled()) return;\n\n    const table = this.ops.create(row + 1, col + 1);\n    const block = this.caretBlock(root);\n\n    if (block) {\n      this.renderer.insertBefore(root, table, block.nextSibling);\n    } else {\n      this.renderer.appendChild(root, table);\n    }\n\n    // A table with nothing after it traps the caret at the bottom edge, so add a trailing empty\n    // paragraph to step down into. Nothing is added above (an existing block, or the editor top).\n    if (!table.nextSibling) {\n      this.renderer.insertBefore(root, this.emptyParagraph(), table.nextSibling);\n    }\n\n    editor.syncFromDom({ boundary: true });\n    queueMicrotask(() => this.restoreCaret(firstTableCell(table)));\n  }\n\n  protected addRow(position: 'above' | 'below') {\n    this.mutate((ctx) => this.ops.insertRow(ctx, position));\n  }\n\n  protected addHeaderRow() {\n    this.mutate((ctx) => this.ops.insertHeaderRow(ctx));\n  }\n\n  protected addColumn(position: 'left' | 'right') {\n    this.mutate((ctx) => this.ops.insertColumn(ctx, position));\n  }\n\n  protected removeRow() {\n    this.mutate((ctx) => this.ops.deleteRow(ctx));\n  }\n\n  protected removeColumn() {\n    this.mutate((ctx) => this.ops.deleteColumn(ctx));\n  }\n\n  protected removeTable() {\n    this.mutate((ctx) => this.ops.deleteTable(ctx));\n  }\n\n  private mutate(operation: (ctx: TableContext) => void) {\n    const ctx = this.context() ?? this.currentContext();\n\n    if (!ctx || this.disabled()) return;\n\n    operation(ctx);\n    this.editor().syncFromDom({ boundary: true });\n\n    // keep the caret inside the (surviving) table so reopening the menu still shows the edit actions\n    const survivingCell = ctx.table.isConnected ? cellAt(ctx) : null;\n    queueMicrotask(() => this.restoreCaret(survivingCell));\n  }\n\n  private currentContext(): TableContext | null {\n    const editor = this.editor();\n    const root = editor.editorDom.root();\n    const selection = editor.editorDom.getSelection();\n\n    if (!root || !selection) return null;\n\n    return findTableContext(root, selection.range.startContainer);\n  }\n\n  /** An empty paragraph (`<p><br></p>`) the caret can step into when exiting a table. */\n  private emptyParagraph(): HTMLElement {\n    const paragraph = this.renderer.createElement('p') as HTMLElement;\n    this.renderer.appendChild(paragraph, this.renderer.createElement('br'));\n\n    return paragraph;\n  }\n\n  /** The editor-root-level block the caret sits in, so a new table lands after it (not inside it). */\n  private caretBlock(root: HTMLElement): HTMLElement | null {\n    const selection = this.editor().editorDom.getSelection();\n\n    if (!selection) return null;\n\n    let node: HTMLElement | null =\n      selection.range.startContainer instanceof HTMLElement\n        ? selection.range.startContainer\n        : selection.range.startContainer.parentElement;\n\n    while (node && node.parentElement !== root) node = node.parentElement;\n\n    return node;\n  }\n\n  /** Refocuses the editor and drops the caret into `cell` (or leaves focus alone when it is gone). */\n  private restoreCaret(cell: HTMLElement | null) {\n    this.editor().activate();\n\n    const root = this.editor().editorDom.root();\n\n    if (!cell || !root?.contains(cell)) return;\n\n    const selection = root.ownerDocument.getSelection();\n    const range = root.ownerDocument.createRange();\n\n    range.selectNodeContents(cell);\n    range.collapse(true);\n    selection?.removeAllRanges();\n    selection?.addRange(range);\n  }\n}\n","<div #tableMenu=\"etMenu\" [autoFocus]=\"!hasTouchInput()\" etMenu>\n  <button\n    [disabled]=\"disabled()\"\n    [pressed]=\"tableMenu.open()\"\n    [attr.aria-label]=\"labels().table\"\n    (mousedown)=\"$event.preventDefault(); refreshContext()\"\n    emitAriaPressed=\"false\"\n    etMenuTrigger\n    et-icon-button\n    size=\"sm\"\n    type=\"button\"\n    color=\"surface\"\n    pressedColor=\"inherit\"\n  >\n    <i etIcon=\"et-table\"></i>\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu (keydown)=\"handlePickerKeydown($event)\">\n      @if (context()) {\n        @if (canAddHeaderRow()) {\n          <button (click)=\"addHeaderRow()\" et-menu-item type=\"button\">{{ labels().tableInsertHeaderRow }}</button>\n        }\n        @if (!inHeaderRow()) {\n          <button (click)=\"addRow('above')\" et-menu-item type=\"button\">{{ labels().tableInsertRowAbove }}</button>\n        }\n        <button (click)=\"addRow('below')\" et-menu-item type=\"button\">{{ labels().tableInsertRowBelow }}</button>\n        <button (click)=\"addColumn('left')\" et-menu-item type=\"button\">{{ labels().tableInsertColumnLeft }}</button>\n        <button (click)=\"addColumn('right')\" et-menu-item type=\"button\">{{ labels().tableInsertColumnRight }}</button>\n        <button (click)=\"removeRow()\" et-menu-item type=\"button\" variant=\"destructive\">\n          {{ labels().tableDeleteRow }}\n        </button>\n        <button (click)=\"removeColumn()\" et-menu-item type=\"button\" variant=\"destructive\">\n          {{ labels().tableDeleteColumn }}\n        </button>\n        <button (click)=\"removeTable()\" et-menu-item type=\"button\" variant=\"destructive\">\n          {{ labels().tableDeleteTable }}\n        </button>\n      } @else {\n        <div class=\"et-rte-table-picker\">\n          <div\n            #pickerGrid\n            (pointerleave)=\"hover(-1, -1)\"\n            (pointerdown)=\"beginSwipeSelection($event)\"\n            (pointerup)=\"commitSwipeSelection($event)\"\n            class=\"et-rte-table-picker-grid\"\n          >\n            @for (row of pickerRows; track row) {\n              @for (col of pickerCols; track col) {\n                <button\n                  [class.et-rte-table-picker-cell--active]=\"row < hoverRows() && col < hoverCols()\"\n                  [attr.aria-label]=\"labels().tableSize(row + 1, col + 1)\"\n                  (pointerenter)=\"hover(row, col)\"\n                  (mousedown)=\"$event.preventDefault()\"\n                  (click)=\"insertFromCell(row, col)\"\n                  class=\"et-rte-table-picker-cell\"\n                  type=\"button\"\n                ></button>\n              }\n            }\n          </div>\n          <span class=\"et-rte-table-picker-label\">{{ sizeLabel() }}</span>\n        </div>\n      }\n    </et-menu>\n  </ng-template>\n</div>\n","import { Provider } from '@angular/core';\nimport { injectRenderer } from '@ethlete/core';\nimport { DEFAULT_RICH_TEXT_EDITOR_LABELS } from '../rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_TOOL, RichTextEditorToolDefinition } from '../rich-text-editor-tools';\nimport { mountRichTextEditorTableStyles } from './rich-text-editor-table-styles.component';\nimport { RichTextEditorTableToolComponent } from './rich-text-editor-table-tool.component';\nimport { createTableNav } from './rich-text-editor-table.util';\n\n/**\n * Registers the opt-in `'table'` tool (insert via a grid-size picker, plus row/column editing) and\n * the caret navigation across table boundaries: arrow keys step in/out at the table's edges, and\n * Tab/Shift+Tab move between cells (stepping out past the first/last cell). Add to a\n * component/route's providers and include `'table'` in the editor's `tools`. Because the tool\n * component and all table DOM operations (including the caret navigation) are only referenced from\n * here, they tree-shake away for editors that don't provide it.\n */\nexport const provideRichTextEditorTableTool = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_TOOL,\n  useFactory: (): RichTextEditorToolDefinition => {\n    mountRichTextEditorTableStyles();\n\n    const nav = createTableNav(injectRenderer());\n\n    return {\n      token: 'table',\n      // Only a fallback: the toolbar reads `table` from the label set, which is what a consumer localizes.\n      label: DEFAULT_RICH_TEXT_EDITOR_LABELS.table,\n      control: RichTextEditorTableToolComponent,\n      keydown: (editor, event) =>\n        nav.tab(editor.editorDom, event) ||\n        nav.exit(editor.editorDom, event.key) ||\n        nav.enter(editor.editorDom, event.key),\n    };\n  },\n  multi: true,\n});\n","import { Signal, signal } from '@angular/core';\nimport {\n  AnyQueryCreator,\n  QueryArgsOf,\n  QueryErrorResponse,\n  QueryExecutionState,\n  RequestArgs,\n  ResponseType,\n  withArgs,\n} from '@ethlete/query';\nimport { filter, map, take } from 'rxjs';\nimport {\n  createRichTextEditorTrigger,\n  RichTextEditorTrigger,\n  RichTextEditorTriggerItem,\n  RichTextEditorTriggerItemResolver,\n} from './rich-text-editor-trigger';\n\n// Note: `@ethlete/components` intentionally depends on `@ethlete/query` (the legacy `cdk` does too),\n// so this query-aware convenience factory can live here. It is a standalone function in its own\n// module - editors that don't use it (and apps not using `@ethlete/query`) tree-shake it away.\n\n/** Config for {@link createRichTextEditorTriggerWithQuery}. */\nexport type RichTextEditorQueryTriggerConfig<TCreator extends AnyQueryCreator> = {\n  /** The character that opens the popup at a word boundary (e.g. `'@'`). */\n  char: string;\n  /** Namespaces the inserted token (`{{type:id}}`). Unique per editor; matches `[a-z][a-z0-9-]*`. */\n  type: string;\n  /**\n   * The query creator to run (e.g. from `createGetQuery`). Like a query stack, the query is created\n   * **once** and re-executes reactively - never per keystroke.\n   */\n  queryCreator: TCreator;\n  /**\n   * Builds the request args from the current query text. Runs reactively (like `withArgs`): reading\n   * `search()` re-executes the query as the user types. Return `null` to skip a request (e.g. for an\n   * empty query) so the popup shows no results without hitting the backend.\n   */\n  args: (search: Signal<string>) => RequestArgs<QueryArgsOf<TCreator>> | null;\n  /** Maps a successful query response to popup items. */\n  toItems: (response: ResponseType<QueryArgsOf<TCreator>>) => RichTextEditorTriggerItem[];\n  /** Resolves a stored token id to a chip label (see the generic factory's `resolveItem`). */\n  resolveItem?: RichTextEditorTriggerItemResolver;\n  /** Turns a query failure into the popup's error text. Defaults to the first error message. */\n  toErrorMessage?: (error: QueryErrorResponse) => string;\n  /** Keep the popup open when the query contains spaces. @default false */\n  allowSpaces?: boolean;\n  /** Minimum query length before items are requested. @default 0 */\n  minQueryLength?: number;\n  /** Debounce applied before the query text is written and results are read, in ms. @default 150 */\n  debounceTime?: number;\n};\n\nconst firstErrorMessage = (error: QueryErrorResponse) => {\n  const message = 'errors' in error ? error.errors[0]?.message : error.error?.message;\n\n  return message ?? error.raw?.statusText ?? 'Something went wrong';\n};\n\n/**\n * A query-aware wrapper around {@link createRichTextEditorTrigger} that removes the manual wiring.\n * Mirroring `createQueryStack`, it takes the `queryCreator` plus a reactive `args` builder: the\n * query is created once and re-executes as the user types (the factory owns the search signal and\n * the `withArgs` feature). It maps the response to items and surfaces a query failure as the popup's\n * error state.\n *\n * Call it from a field initializer / constructor (injection context), the same place you'd create a\n * query or a query stack.\n *\n * ```ts\n * createRichTextEditorTriggerWithQuery({\n *   char: '@',\n *   type: 'mention',\n *   queryCreator: searchUsers,\n *   args: (search) => (search() ? { queryParams: { q: search() } } : null),\n *   toItems: (res) => res.items.map((u) => ({ id: u.id, label: u.name })),\n *   resolveItem: (id) => userById(id),\n * })\n * ```\n */\nexport const createRichTextEditorTriggerWithQuery = <TCreator extends AnyQueryCreator>(\n  config: RichTextEditorQueryTriggerConfig<TCreator>,\n): RichTextEditorTrigger => {\n  type TArgs = QueryArgsOf<TCreator>;\n\n  const search = signal('');\n  // Created once, exactly like a query stack - `withArgs` re-runs as `search` changes.\n  const query = config.queryCreator(withArgs<TArgs>(() => config.args(search)));\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  return createRichTextEditorTrigger({\n    char: config.char,\n    type: config.type,\n    resolveItem: config.resolveItem,\n    allowSpaces: config.allowSpaces,\n    minQueryLength: config.minQueryLength,\n    debounceTime: config.debounceTime,\n    items: (text) => {\n      search.set(text);\n\n      // The signal write above re-executes the query; take the first settled state for this text.\n      // A failure is thrown so the editor's async pipeline surfaces it as the popup's error.\n      return query.executionState.asObservable().pipe(\n        filter(\n          (state): state is Exclude<QueryExecutionState<TArgs>, { type: 'loading' }> =>\n            state !== null && state.type !== 'loading',\n        ),\n        take(1),\n        map((state) => {\n          // Deliberately a plain `Error`, not a coded `RuntimeError`: the triggers directive renders\n          // `error.message` verbatim as the popup's `role=\"alert\"` text, so a `ET25xx: ` prefix would\n          // end up in front of the user.\n          if (state.type === 'failure') throw new Error(toErrorMessage(state.error));\n\n          return config.toItems(state.response);\n        }),\n      );\n    },\n  });\n};\n","import { RichTextEditorTriggersDirective } from './headless';\n\n/**\n * Opt-in building-block autocomplete. Spread this into a component's `imports` alongside\n * `RICH_TEXT_EDITOR_IMPORTS` when the editor needs `#`/`@`/… triggers. Kept separate from\n * `RICH_TEXT_EDITOR_IMPORTS` so editors that don't use triggers tree-shake the whole feature.\n */\nexport const RICH_TEXT_EDITOR_TRIGGERS_IMPORTS = [RichTextEditorTriggersDirective] as const;\n","export const TOOLBAR_ORIENTATIONS = {\n  HORIZONTAL: 'horizontal',\n  VERTICAL: 'vertical',\n} as const;\n\nexport type ToolbarOrientation = (typeof TOOLBAR_ORIENTATIONS)[keyof typeof TOOLBAR_ORIENTATIONS];\n","import { DOCUMENT } from '@angular/common';\nimport { afterEveryRender, Directive, ElementRef, inject, input } from '@angular/core';\nimport { TOOLBAR_ORIENTATIONS, ToolbarOrientation } from './toolbar.types';\n\nconst CONTROL_SELECTOR = 'button, [href], input, select, textarea';\nconst TOOLBAR_SELECTOR = '[role=\"toolbar\"]';\n\n/**\n * Turns its host into an ARIA toolbar: a single tab stop that Tab enters and leaves, with the arrow\n * keys moving focus between the controls inside it. `Home`/`End` jump to the first/last control and\n * arrow navigation wraps around; in a horizontal toolbar the left/right keys follow the writing\n * direction.\n *\n * Every focusable control rendered inside the host is a toolbar control - projected content,\n * `@for` output and components that own their own button templates included - so nothing has to be\n * marked up per item. Natively disabled controls are skipped; controls belonging to a nested\n * toolbar stay with that toolbar.\n *\n * Pair it with an accessible name (`aria-label`, or `aria-labelledby` pointing at a visible\n * heading), which is what tells the user what the toolbar is for.\n *\n * @example\n * <div [attr.aria-label]=\"'Text formatting'\" etToolbar>\n *   <button et-icon-button type=\"button\">…</button>\n *   <button et-icon-button type=\"button\">…</button>\n * </div>\n */\n@Directive({\n  selector: '[etToolbar]',\n  host: {\n    role: 'toolbar',\n    '[attr.aria-orientation]': 'orientation()',\n    '(keydown)': 'handleKeydown($event)',\n    '(focusin)': 'handleFocusIn($event)',\n  },\n})\nexport class ToolbarDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private document = inject(DOCUMENT);\n\n  public orientation = input<ToolbarOrientation>(TOOLBAR_ORIENTATIONS.HORIZONTAL);\n\n  private tabStop: HTMLElement | null = null;\n\n  constructor() {\n    afterEveryRender(() => this.syncTabStops());\n  }\n\n  /** Moves focus to the toolbar's first control, the tab stop a fresh Tab would land on. */\n  public focusFirst() {\n    this.focusableControls()[0]?.focus();\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const horizontal = this.orientation() === TOOLBAR_ORIENTATIONS.HORIZONTAL;\n    const rtl = horizontal && getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n    const nextKey = horizontal ? (rtl ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';\n    const previousKey = horizontal ? (rtl ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';\n\n    let target: HTMLElement | undefined;\n    const controls = this.focusableControls();\n\n    if (!controls.length) return;\n\n    const current = controls.indexOf(this.document.activeElement as HTMLElement);\n\n    switch (event.key) {\n      case nextKey:\n        target = controls[(current + 1) % controls.length];\n        break;\n      case previousKey:\n        target = controls[current <= 0 ? controls.length - 1 : current - 1];\n        break;\n      case 'Home':\n        target = controls[0];\n        break;\n      case 'End':\n        target = controls[controls.length - 1];\n        break;\n      default:\n        return;\n    }\n\n    if (!target) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    target.focus();\n  }\n\n  /** The last focused control keeps the tab stop, so Shift+Tab back re-enters where the user left. */\n  protected handleFocusIn(event: FocusEvent) {\n    const target = event.target;\n\n    if (!(target instanceof HTMLElement) || !this.focusableControls().includes(target)) return;\n\n    this.tabStop = target;\n    this.syncTabStops();\n  }\n\n  /** Every control this toolbar owns. Disabled ones are included: they must lose their tab stop too,\n   *  or re-enabling one would leave the toolbar with two. */\n  private controls() {\n    const host = this.elementRef.nativeElement;\n\n    // eslint-disable-next-line ethlete/no-dom-query -- any focusable descendant is a toolbar control, including those inside components that own their own button templates, which no directive token could reach\n    const found = Array.from(host.querySelectorAll<HTMLElement>(`${CONTROL_SELECTOR}, ${TOOLBAR_SELECTOR}`));\n    const nested = found.filter((element) => element.matches(TOOLBAR_SELECTOR));\n\n    return found.filter((control) => !nested.includes(control) && !nested.some((toolbar) => toolbar.contains(control)));\n  }\n\n  private focusableControls() {\n    return this.controls().filter((control) => !(control as HTMLElement & { disabled?: boolean }).disabled);\n  }\n\n  private syncTabStops() {\n    const focusable = this.focusableControls();\n\n    if (!this.tabStop || !focusable.includes(this.tabStop)) {\n      this.tabStop = focusable[0] ?? null;\n    }\n\n    for (const control of this.controls()) {\n      const tabIndex = control === this.tabStop ? 0 : -1;\n\n      // written imperatively rather than as a binding: the controls are arbitrary projected content,\n      // so only touch the DOM when the value changed to keep the per-render pass free\n      if (control.tabIndex !== tabIndex) control.tabIndex = tabIndex;\n    }\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ToolbarDirective } from './headless/toolbar.directive';\n\n/**\n * A bar of related controls that share one tab stop, laid out in a row (or a column with\n * `orientation=\"vertical\"`) and navigated with the arrow keys - see `[etToolbar]` for the keyboard\n * model. Group the controls inside it with `et-divider`.\n *\n * Pass an `aria-label` naming what the toolbar acts on; without one a screen reader announces only\n * that a toolbar is present.\n *\n * @example\n * <et-toolbar aria-label=\"Text formatting\">\n *   <button et-icon-button type=\"button\"><i etIcon=\"et-bold\"></i></button>\n *   <button et-icon-button type=\"button\"><i etIcon=\"et-italic\"></i></button>\n *   <et-divider orientation=\"vertical\" decorative />\n *   <button et-icon-button type=\"button\"><i etIcon=\"et-link\"></i></button>\n * </et-toolbar>\n */\n@Component({\n  selector: 'et-toolbar, [et-toolbar]',\n  template: `<ng-content />`,\n  styleUrl: './toolbar.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: ToolbarDirective,\n      inputs: ['orientation'],\n    },\n  ],\n  host: {\n    class: 'et-toolbar',\n  },\n})\nexport class ToolbarComponent {}\n","import { ToolbarDirective } from './headless/toolbar.directive';\nimport { ToolbarComponent } from './toolbar.component';\n\nexport const TOOLBAR_IMPORTS = [ToolbarComponent, ToolbarDirective] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * How rendered rich text looks - headings, lists, quotes, code, links and token chips - as a\n * styles-only component shared by `et-rich-text-editor` and `et-rich-text-viewer`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-rich-text-content-styles',\n  template: '',\n  styleUrl: './rich-text-content-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class RichTextContentStylesComponent {}\n\n/** @internal */\nexport const mountRichTextContentStyles = () => injectStyleManager().mount(RichTextContentStylesComponent);\n","import { DOCUMENT, NgComponentOutlet } from '@angular/common';\nimport {\n  afterNextRender,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { injectHasTouchInput, injectRenderer } from '@ethlete/core';\nimport { EMPTY, fromEvent, interval, merge, switchMap, tap } from 'rxjs';\nimport { BUTTON_IMPORTS } from '../../button';\nimport { DividerComponent } from '../../divider';\nimport { ScrollbarComponent } from '../../scrollbar';\nimport { ToolbarDirective } from '../../toolbar';\nimport {\n  BOLD_ICON,\n  CODE_ICON,\n  ICONS_TOKEN,\n  IconDirective,\n  ITALIC_ICON,\n  LIST_BULLETED_ICON,\n  LIST_NUMBERED_ICON,\n  provideIcons,\n  REDO_ICON,\n  STRIKETHROUGH_ICON,\n  UNDERLINE_ICON,\n  UNDO_ICON,\n} from '../../icon';\nimport { RichTextEditorDirective } from './headless';\nimport { mountRichTextContentStyles } from './rich-text-content-styles.component';\nimport { RICH_TEXT_EDITOR_FLOATING_TOOLBAR } from './rich-text-editor-floating-toolbar.token';\nimport { richTextEditorToolLabel } from './rich-text-editor-labels';\nimport { RICH_TEXT_EDITOR_LINK_EDITOR } from './rich-text-editor-link-editor.token';\nimport { RICH_TEXT_EDITOR_TOOL, RICH_TEXT_EDITOR_TOOLS, RichTextEditorToolDefinition } from './rich-text-editor-tools';\nimport { RICH_TEXT_EDITOR_TOOL_ICON } from './tools/rich-text-editor-tool-icons';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n/** How often the docked toolbar re-checks where the keyboard is, to recover a missed viewport event. */\nconst DOCKED_TOOLBAR_POLL_MS = 500;\n\n/** Caret-navigation / deletion keys that should drop any pending stored-mark toggle. */\nconst NAVIGATION_KEYS = /* @__PURE__ */ new Set([\n  'ArrowLeft',\n  'ArrowRight',\n  'ArrowUp',\n  'ArrowDown',\n  'Home',\n  'End',\n  'PageUp',\n  'PageDown',\n  'Escape',\n  'Delete',\n  'Backspace',\n]);\n\nconst RICH_TEXT_EDITOR_ICONS = [\n  BOLD_ICON,\n  ITALIC_ICON,\n  UNDERLINE_ICON,\n  STRIKETHROUGH_ICON,\n  CODE_ICON,\n  LIST_BULLETED_ICON,\n  LIST_NUMBERED_ICON,\n  UNDO_ICON,\n  REDO_ICON,\n];\n\nconst provideRichTextEditorIcons = () =>\n  provideIcons(...RICH_TEXT_EDITOR_ICONS, ...(inject(RICH_TEXT_EDITOR_TOOL_ICON, { optional: true }) ?? [])).useValue;\n\n@Component({\n  selector: 'et-rich-text-editor',\n  templateUrl: './rich-text-editor.component.html',\n  styleUrl: './rich-text-editor.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ...BUTTON_IMPORTS,\n    DividerComponent,\n    IconDirective,\n    NgComponentOutlet,\n    ScrollbarComponent,\n    ToolbarDirective,\n  ],\n  providers: [{ provide: ICONS_TOKEN, useFactory: provideRichTextEditorIcons }],\n  hostDirectives: [\n    {\n      directive: RichTextEditorDirective,\n      inputs: [\n        'value',\n        'touched',\n        'disabled',\n        'readonly',\n        'hidden',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'tools',\n        'autoformat',\n        'labels',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'touchedChange'],\n    },\n  ],\n  host: {\n    class: 'et-rich-text-editor',\n    // on touch the toolbar is hidden until the editor is active, then docks above the keyboard (the\n    // OS selection menu owns the top, so a top toolbar there is unreachable) - it never sits at the\n    // top or shuffles around\n    '[class.et-rich-text-editor--touch]': 'hasTouchInput()',\n    '[class.et-rich-text-editor--docked-toolbar]': 'dockedToolbar()',\n    '(click)': 'dir.activate()',\n  },\n})\nexport class RichTextEditorComponent {\n  protected dir = inject(RichTextEditorDirective);\n\n  private document = inject(DOCUMENT);\n  private destroyRef = inject(DestroyRef);\n  private renderer = injectRenderer();\n  private host = inject<ElementRef<HTMLElement>>(ElementRef);\n  /** Touch devices: menus open without stealing focus (keeps the keyboard up so the docked toolbar\n   *  stays put) and the toolbar docks above the keyboard. */\n  protected hasTouchInput = injectHasTouchInput();\n\n  /** Present only when `provideRichTextEditorLinkEditor()` is in scope; otherwise the link tool\n   *  falls back to `window.prompt` and the popover never ships. */\n  private linkEditorSetup = inject(RICH_TEXT_EDITOR_LINK_EDITOR, { optional: true });\n  /** Present only when `provideRichTextEditorFloatingToolbar()` is in scope; otherwise the editor\n   *  shows its static toolbar only and the overlay runtime never ships. */\n  private floatingToolbarSetup = inject(RICH_TEXT_EDITOR_FLOATING_TOOLBAR, { optional: true });\n  public editable = viewChild.required<ElementRef<HTMLElement>>('editable');\n\n  protected readonly TOOLS = RICH_TEXT_EDITOR_TOOLS;\n\n  /** The strings in effect, owned by the directive so the opt-in tools read the same set. */\n  protected labels = computed(() => this.dir.resolvedLabels());\n\n  private registeredTools = inject(RICH_TEXT_EDITOR_TOOL, { optional: true }) ?? [];\n\n  /** Keeps the docked toolbar up briefly after a blur so opening a menu/link editor from it (which\n   *  moves focus into an overlay) doesn't collapse the bar mid-interaction. */\n  private editingActive = signal(false);\n  private blurGraceTimer: ReturnType<Window['setTimeout']> | null = null;\n\n  /** Dock the toolbar above the keyboard only on touch while editing. */\n  protected dockedToolbar = computed(() => this.hasTouchInput() && this.editingActive());\n\n  constructor() {\n    mountRichTextContentStyles();\n    this.linkEditorSetup?.(this.dir, this.host.nativeElement);\n    this.floatingToolbarSetup?.(this.dir);\n\n    this.trackKeyboardInset();\n    this.trackEditingActive();\n\n    afterNextRender(() => {\n      this.dir.editorDom.root.set(this.editable().nativeElement ?? null);\n      this.dir.renderExternalValue();\n    });\n\n    fromEvent(this.document, 'selectionchange')\n      .pipe(\n        tap(() => {\n          this.dir.refreshActiveMarks();\n          this.dir.recordHistorySelection();\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    // Render programmatic (external) value changes into the DOM. Skip the user's own edits -\n    // those already match `lastEmittedMarkdown`, so re-rendering would reset the caret.\n    effect(() => {\n      const markdown = this.dir.value();\n\n      if (markdown === this.dir.lastEmittedMarkdown) return;\n\n      this.dir.renderExternalValue(markdown);\n    });\n  }\n\n  /** A tool button's accessible name, from the label set where this library owns the tool. */\n  protected toolLabel(tool: RichTextEditorToolDefinition) {\n    return richTextEditorToolLabel(this.labels(), tool);\n  }\n\n  protected syncValueFromDom() {\n    this.dir.syncFromDom();\n  }\n\n  protected interceptEditorKeydown(event: KeyboardEvent) {\n    // History first, and always prevented: the native contenteditable undo stack must never run,\n    // since paste normalization and autoformat rewrite the DOM behind its back and it would restore\n    // a state the value model never had. Ctrl/Cmd+Z undoes, Ctrl+Y and Ctrl/Cmd+Shift+Z redo.\n    if ((event.ctrlKey || event.metaKey) && !event.altKey) {\n      const key = event.key.toLowerCase();\n\n      if (key === 'z' || key === 'y') {\n        event.preventDefault();\n\n        if (key === 'y' || event.shiftKey) this.dir.redo();\n        else this.dir.undo();\n\n        return;\n      }\n    }\n\n    // moving the caret (or deleting) without typing abandons a pending stored-mark toggle\n    if (NAVIGATION_KEYS.has(event.key)) {\n      this.dir.clearPendingMarks();\n    }\n\n    // Tab / Shift+Tab nest / un-nest the current list item, or change a quote's nesting depth.\n    // Outside both this falls through to the tool keydown hooks below (the table tool moves between\n    // cells) and only then to the default focus move.\n    if (event.key === 'Tab') {\n      const blockquote = this.dir.editorDom.blockquote;\n      const handled = event.shiftKey\n        ? this.dir.editorDom.outdentListItem() || blockquote?.outdentBlockquote()\n        : this.dir.editorDom.indentListItem() || blockquote?.indentBlockquote();\n\n      if (handled) {\n        event.preventDefault();\n        this.dir.syncFromDom({ boundary: true });\n\n        return;\n      }\n    }\n\n    // Escape inside a code block moves the caret to a paragraph after it - everything typed in\n    // there is literal, so there is no other way out with the keyboard alone.\n    if (event.key === 'Escape' && this.dir.codeBlockActive() && this.dir.editorDom.codeBlock?.exitCodeBlock()) {\n      event.preventDefault();\n      this.dir.syncFromDom({ boundary: true });\n\n      return;\n    }\n\n    // ArrowDown off the last line of a code block that ends the content - or ArrowUp off the first\n    // line of one that starts it - creates the line it would move to: the exit people reach for\n    // before they think of Escape, and at the top edge the only one there is.\n    if (\n      (event.key === 'ArrowDown' || event.key === 'ArrowUp') &&\n      this.dir.codeBlockActive() &&\n      this.dir.editorDom.codeBlock?.codeBlockArrowStep(event.key)\n    ) {\n      event.preventDefault();\n      this.dir.syncFromDom({ boundary: true });\n\n      return;\n    }\n\n    // Enter on an empty list item steps out of the list one level at a time; Enter at a heading's\n    // edge starts a plain paragraph. Shift+Enter stays native (soft line break).\n    if (event.key === 'Enter' && !event.shiftKey && this.dir.editorDom.handleEnter()) {\n      event.preventDefault();\n      this.dir.syncFromDom({ boundary: true });\n\n      return;\n    }\n\n    // opt-in tools can intercept keys for content they own (e.g. the table tool steps the caret\n    // cleanly across table boundaries instead of stranding it at the table's edge)\n    for (const tool of this.registeredTools) {\n      if (tool.keydown?.(this.dir, event)) {\n        event.preventDefault();\n        this.dir.syncFromDom({ boundary: true });\n\n        return;\n      }\n    }\n\n    // step out of an inline code span so the next typed text isn't code (caret move only, no edit)\n    if (event.key.startsWith('Arrow') && this.dir.editorDom.codeExit(event.key)) {\n      event.preventDefault();\n      this.dir.refreshActiveMarks();\n\n      return;\n    }\n\n    if (event.key === 'Backspace' && this.dir.handleBackspace()) {\n      event.preventDefault();\n    }\n  }\n\n  protected interceptPaste(event: ClipboardEvent) {\n    // Tools own their payloads first: the image tool takes the clipboard's image files, which the\n    // HTML/text branches below cannot represent.\n    for (const tool of this.registeredTools) {\n      if (tool.paste?.(this.dir, event)) {\n        event.preventDefault();\n\n        return;\n      }\n    }\n\n    // Files nobody claimed: the browser would insert them itself, and for an image that means a\n    // `blob:` URL in the value - one that dies with the tab. Provide the image tool to keep them.\n    if (event.clipboardData?.files.length && !event.clipboardData.getData('text/html')) {\n      event.preventDefault();\n\n      return;\n    }\n\n    const html = event.clipboardData?.getData('text/html');\n\n    if (html) {\n      event.preventDefault();\n      this.dir.pasteHtml(html);\n\n      return;\n    }\n\n    // A plain-text paste is already schema-safe - the browser inserts it as text. The exception is\n    // text spelling out a token (`#User Name`), which only the editor can turn back into a chip.\n    const text = event.clipboardData?.getData('text/plain');\n\n    if (text && this.dir.pasteText(text)) event.preventDefault();\n  }\n\n  /**\n   * Dropped content, in the same order as a paste: a tool that owns the payload takes it (the image\n   * tool uploads image files), and anything left that carries files is refused - dropping a file on a\n   * `contenteditable` otherwise has the browser embed it as a `blob:` URL, which outlives nothing.\n   */\n  protected interceptDrop(event: DragEvent) {\n    for (const tool of this.registeredTools) {\n      if (tool.drop?.(this.dir, event)) {\n        event.preventDefault();\n\n        return;\n      }\n    }\n\n    if (event.dataTransfer?.files.length) event.preventDefault();\n  }\n\n  /** Lets a tool act on the content it owns - clicking an image opens the image tool's popover. */\n  protected interceptClick(event: MouseEvent) {\n    for (const tool of this.registeredTools) {\n      if (tool.click?.(this.dir, event)) return;\n    }\n  }\n\n  protected interceptFormattingCommand(event: InputEvent) {\n    // Keep keyboard shortcuts (Ctrl/Cmd+B, …) running through our Selection/Range commands\n    // instead of the browser's deprecated execCommand-backed formatting.\n    switch (event.inputType) {\n      case 'formatBold':\n        event.preventDefault();\n        this.dir.toggleBold();\n        break;\n      case 'formatItalic':\n        event.preventDefault();\n        this.dir.toggleItalic();\n        break;\n      case 'formatStrikeThrough':\n        event.preventDefault();\n        this.dir.toggleStrikethrough();\n        break;\n      case 'formatUnderline':\n        event.preventDefault();\n        this.dir.toggleUnderline();\n        break;\n      // The platform's own undo affordances - the macOS Edit menu, iOS shake-to-undo, the Android\n      // keyboard's undo key - never produce a keydown, but do arrive here.\n      case 'historyUndo':\n        event.preventDefault();\n        this.dir.undo();\n        break;\n      case 'historyRedo':\n        event.preventDefault();\n        this.dir.redo();\n        break;\n      case 'insertText':\n        // markdown autoformat: a space may convert a line-start prefix (`- `, `1. `, `# `), a\n        // delimiter may close an inline run (`**bold**`, `` `code` ``, …) into its mark\n        if (event.data !== null && this.dir.handleAutoformat(event.data)) {\n          event.preventDefault();\n          break;\n        }\n\n        // apply any pending stored marks to the typed text (collapsed-caret formatting toggle)\n        if (event.data !== null && this.dir.consumePendingInsert(event.data)) {\n          event.preventDefault();\n        }\n        break;\n    }\n  }\n\n  public focus(options?: FocusOptions) {\n    this.dir.focus(options);\n  }\n\n  /** Track the visual viewport so the docked (fixed) toolbar sits right above the on-screen\n   *  keyboard: the inset is the gap from where `position: fixed; bottom: 0` actually renders (a\n   *  measured probe - see below) down past the keyboard's top edge\n   *  (`visualViewport.offsetTop + height`). Reacting to BOTH `resize` and `scroll` keeps it glued\n   *  while the page scrolls (the visual viewport pans, the URL bar shows/hides).\n   *\n   *  Performance: the CSS var is written straight to the host element, outside Angular - no signal,\n   *  so no change detection fires per scroll frame (that was what made scrolling feel sluggish). The\n   *  position has no CSS transition, so it tracks the viewport instantly instead of lagging behind. */\n  private trackKeyboardInset() {\n    const view = this.document.defaultView;\n    const viewport = view?.visualViewport;\n\n    if (!view || !viewport) return;\n\n    const host = this.host.nativeElement;\n\n    // In a same-origin iframe (Storybook, docs story embeds) the frame's own visualViewport never\n    // reflects the soft keyboard - only the top window's does. Track the top viewport plus the\n    // frame's position to compute how much of THIS frame the keyboard covers. A cross-origin\n    // parent exposes neither (`frameElement` is null / viewport access throws), so those frames\n    // keep the local metrics - the status quo of not seeing the keyboard at all.\n    let frameElement: Element | null = null;\n    let topViewport: VisualViewport | null = null;\n\n    try {\n      // no instanceof here - frameElement belongs to the PARENT document's realm, so it is never\n      // an instance of this window's HTMLElement constructor\n      frameElement = view.frameElement;\n      topViewport = frameElement ? (view.top?.visualViewport ?? null) : null;\n    } catch {\n      frameElement = null;\n      topViewport = null;\n    }\n\n    // Where \"position: fixed; bottom: 0\" actually lands is NOT derivable from window/visualViewport\n    // on iOS: with the soft keyboard open (and focus zoom active), WebKit positions fixed elements\n    // against an internal rect that tracks the visual viewport and is clamped to the document - its\n    // bottom sits well below where `innerHeight` says. Measure it with a zero-size fixed probe\n    // instead of assuming layout-viewport math; on engines without the quirk the probe bottom IS\n    // `innerHeight`, so this degenerates to the plain `innerHeight - height - offsetTop`.\n    const probe = this.renderer.createElement('div') as HTMLElement;\n    this.renderer.setCssProperties(probe, {\n      position: 'fixed',\n      'inset-block-end': '0',\n      'inline-size': '0',\n      'block-size': '0',\n      visibility: 'hidden',\n    });\n    this.renderer.appendChild(this.document.body, probe);\n    this.destroyRef.onDestroy(() => probe.remove());\n\n    let lastApplied = -1;\n\n    const apply = () => {\n      const fixedBottom = probe.getBoundingClientRect().bottom;\n      let keyboardTop: number;\n\n      if (frameElement && topViewport) {\n        // keyboard overlap of this frame, in the frame's own client coordinates\n        const covered = frameElement.getBoundingClientRect().bottom - (topViewport.offsetTop + topViewport.height);\n        keyboardTop = view.innerHeight - Math.max(0, covered);\n      } else {\n        keyboardTop = viewport.offsetTop + viewport.height;\n      }\n\n      const inset = Math.max(0, fixedBottom - keyboardTop);\n\n      if (inset === lastApplied) return false;\n\n      lastApplied = inset;\n      // set the CSS var directly via the renderer (not a signal) so scroll/resize don't schedule\n      // change detection each frame - that per-frame CD was what made scrolling feel sluggish\n      this.renderer.setCssProperty(host, '--_et-rte-keyboard-inset', `${inset}px`);\n\n      return true;\n    };\n\n    // iOS moves its fixed-position rect ASYNCHRONOUSLY while scrolling with the keyboard open (and\n    // fires few or no visualViewport events mid-scroll, including when the scroll itself dismisses\n    // the keyboard) - a single synchronous re-measure per event reads a stale probe rect and the\n    // toolbar drifts under the keyboard. So each event kicks a rAF loop that keeps re-measuring\n    // until the inset has been stable for a few frames, then stops - continuous tracking while\n    // anything moves, zero per-frame work at rest.\n    let rafId: number | null = null;\n    let quietFrames = 0;\n\n    const settle = () => {\n      quietFrames = apply() ? 0 : quietFrames + 1;\n      // ~30 quiet frames (≈500ms) so the loop outlasts the keyboard show/hide animation - iOS can\n      // fire its last viewport event right at the animation's start while the fixed-position rect\n      // keeps moving until the end\n      rafId = quietFrames < 30 ? view.requestAnimationFrame(settle) : null;\n    };\n\n    const kick = () => {\n      quietFrames = 0;\n      apply();\n      rafId ??= view.requestAnimationFrame(settle);\n    };\n\n    kick();\n    this.destroyRef.onDestroy(() => {\n      if (rafId !== null) view.cancelAnimationFrame(rafId);\n    });\n\n    // The event stream is not guaranteed to be complete: a soft keyboard can change height without a\n    // viewport event (Gboard switching layout, a suggestion row appearing), and inside an embedded\n    // frame the event may land while the ancestor layout is still moving. Either leaves the bar parked\n    // for a keyboard that is no longer there - floating over the content instead of sitting on it. So\n    // re-measure on a slow timer for as long as the bar is actually docked: one rect read every\n    // POLL_MS, no rAF loop and no change detection, and a stale position heals within half a second.\n    toObservable(this.dockedToolbar)\n      .pipe(\n        switchMap((docked) => (docked ? interval(DOCKED_TOOLBAR_POLL_MS) : EMPTY)),\n        tap(() => apply()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    const viewports = topViewport ? [viewport, topViewport] : [viewport];\n    // window scroll too: a root scroll pans the keyboard-tracking fixed rect without necessarily\n    // firing any visualViewport event (top window as well when embedded in an iframe)\n    const scrollTargets: (Window | VisualViewport)[] = [...viewports, view];\n\n    try {\n      if (frameElement && view.top) scrollTargets.push(view.top);\n    } catch {\n      // cross-origin top - its scrolls are invisible to us; the frame keeps local tracking\n    }\n\n    merge(\n      ...viewports.map((v) => fromEvent(v, 'resize')),\n      // These are ancestor viewports/windows (visualViewport, iframe top), not a component-owned\n      // scroll container - signalElementScrollState targets a known elementRef and doesn't apply.\n      // eslint-disable-next-line ethlete/prefer-scroll-state\n      ...scrollTargets.map((t) => fromEvent(t, 'scroll', { passive: true })),\n    )\n      .pipe(\n        tap(() => kick()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /** `editingActive` follows the editor's focus, but lingers ~400ms after a blur so a menu/link\n   *  editor opened from the docked toolbar (which takes focus into an overlay) keeps the bar up. */\n  private trackEditingActive() {\n    effect(() => {\n      // stay \"active\" while the editor is focused OR the link editor popover (part of the same\n      // editing flow) is open - the popover borrows focus, but the toolbar should hold its place\n      const active = this.dir.focused() || this.dir.linkEditorOpen();\n\n      if (active) {\n        if (this.blurGraceTimer !== null) this.document.defaultView?.clearTimeout(this.blurGraceTimer);\n        this.blurGraceTimer = null;\n        this.editingActive.set(true);\n\n        return;\n      }\n\n      this.blurGraceTimer = this.document.defaultView?.setTimeout(() => this.editingActive.set(false), 400) ?? null;\n    });\n\n    this.destroyRef.onDestroy(() => {\n      if (this.blurGraceTimer !== null) this.document.defaultView?.clearTimeout(this.blurGraceTimer);\n    });\n  }\n}\n","<div class=\"et-rte-toolbar-dock\">\n  <div class=\"et-rte-toolbar-viewport\">\n    <div #toolbarElement [attr.aria-label]=\"labels().toolbar\" class=\"et-rte-toolbar\" etToolbar>\n      @for (tool of dir.resolvedTools(); track $index) {\n        @switch (tool) {\n          @case (TOOLS.DIVIDER) {\n            <et-divider orientation=\"vertical\" decorative />\n          }\n          @default {\n            @if (dir.toolDefs.get(tool); as def) {\n              @if (def.control; as control) {\n                <ng-container [ngComponentOutlet]=\"control\" [ngComponentOutletInputs]=\"{ editor: dir }\" />\n              } @else {\n                <button\n                  [pressed]=\"def.isActive?.(dir)\"\n                  [disabled]=\"dir.disabled() || dir.readonly() || (def.isDisabled?.(dir) ?? false)\"\n                  [attr.aria-label]=\"toolLabel(def)\"\n                  (mousedown)=\"$event.preventDefault()\"\n                  (click)=\"def.run?.(dir)\"\n                  color=\"surface\"\n                  pressedColor=\"inherit\"\n                  et-icon-button\n                  size=\"sm\"\n                  type=\"button\"\n                >\n                  <i [allowHardcodedColor]=\"def.allowHardcodedColor ?? false\" [etIcon]=\"def.icon ?? ''\"></i>\n                </button>\n              }\n            }\n          }\n        }\n      }\n    </div>\n\n    <et-scrollbar [for]=\"toolbarElement\" orientation=\"horizontal\" autoHide />\n  </div>\n</div>\n\n<div\n  #editable\n  [attr.contenteditable]=\"dir.disabled() || dir.readonly() ? 'false' : 'true'\"\n  [attr.tabindex]=\"dir.disabled() ? -1 : 0\"\n  [attr.data-placeholder]=\"dir.placeholder() || null\"\n  [attr.aria-required]=\"dir.required() || null\"\n  [attr.aria-invalid]=\"dir.shouldDisplayError() || null\"\n  [attr.aria-describedby]=\"dir.describedBy() || null\"\n  [attr.aria-label]=\"dir.ariaLabel() || null\"\n  [attr.aria-labelledby]=\"dir.labelId() || null\"\n  [attr.aria-disabled]=\"dir.disabled() || null\"\n  [attr.aria-readonly]=\"dir.readonly() || null\"\n  (input)=\"syncValueFromDom()\"\n  (beforeinput)=\"interceptFormattingCommand($event)\"\n  (keydown)=\"interceptEditorKeydown($event)\"\n  (paste)=\"interceptPaste($event)\"\n  (drop)=\"interceptDrop($event)\"\n  (click)=\"interceptClick($event)\"\n  (pointerdown)=\"dir.clearPendingMarks()\"\n  (focus)=\"dir.focused.set(true)\"\n  (blur)=\"dir.focused.set(false); dir.touched.set(true)\"\n  class=\"et-rte-content\"\n  role=\"textbox\"\n  aria-multiline=\"true\"\n></div>\n","import { RichTextEditorDirective } from './headless';\nimport { RichTextEditorComponent } from './rich-text-editor.component';\n\nexport const RICH_TEXT_EDITOR_IMPORTS = [RichTextEditorComponent, RichTextEditorDirective] as const;\n","import { Component, computed, effect, ElementRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { injectRenderer, injectStyleManager, markdownToHtml } from '@ethlete/core';\nimport { mountRichTextContentStyles } from './rich-text-content-styles.component';\nimport { RICH_TEXT_EDITOR_TOKEN_CODEC } from './rich-text-editor-token-codec.token';\nimport { RichTextEditorImageStylesComponent } from './tools/rich-text-editor-image-styles.component';\nimport { RichTextEditorTableStylesComponent } from './tools/rich-text-editor-table-styles.component';\n\n/**\n * Renders a stored `et-rich-text-editor` value (its Markdown) read-only, styled like the editor's\n * content area, without loading the editor. Raw HTML in the value is escaped and unsafe link and\n * image URLs are dropped. Provide `provideRichTextEditorTokenRendering(triggers)` to show `{{type:id}}`\n * tokens as chips.\n *\n * ```html\n * <et-rich-text-viewer [value]=\"article.body\" />\n * ```\n */\n@Component({\n  selector: 'et-rich-text-viewer',\n  template: '',\n  styleUrl: './rich-text-viewer.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-rich-text-viewer et-rte-content',\n  },\n})\nexport class RichTextViewerComponent {\n  private host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private renderer = injectRenderer();\n  private styleManager = injectStyleManager();\n  private tokenCodec = inject(RICH_TEXT_EDITOR_TOKEN_CODEC, { optional: true });\n\n  /** The Markdown value an `et-rich-text-editor` produced. */\n  public value = input<string | null | undefined>('');\n\n  private html = computed(() => {\n    const html = markdownToHtml(this.value() ?? '');\n\n    return this.tokenCodec ? this.tokenCodec.render(html) : html;\n  });\n\n  constructor() {\n    mountRichTextContentStyles();\n\n    effect(() => {\n      const html = this.html();\n      const host = this.host.nativeElement;\n\n      if (html.includes('<table')) this.styleManager.mount(RichTextEditorTableStylesComponent);\n      if (html.includes('<img')) this.styleManager.mount(RichTextEditorImageStylesComponent);\n\n      this.renderer.setProperty(host, 'innerHTML', html);\n      this.tokenCodec?.hydrate(host);\n    });\n  }\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { injectHasTouchInput } from '@ethlete/core';\nimport { CHECK_ICON, provideIcons } from '../../../icon';\nimport { MENU_IMPORTS } from '../../../menu';\nimport { RichTextEditorDirective } from '../../rich-text-editor';\nimport { MultiLanguageRichTextEditorDirective } from '../headless/multi-language-rich-text-editor.directive';\n\n@Component({\n  selector: 'et-multi-language-rich-text-editor-language-tool',\n  templateUrl: './multi-language-rich-text-editor-language-tool.component.html',\n  styleUrl: './multi-language-rich-text-editor-language-tool.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...MENU_IMPORTS],\n  providers: [provideIcons(CHECK_ICON)],\n  host: { class: 'et-ml-rte-lang-tool' },\n})\nexport class MultiLanguageRichTextEditorLanguageToolComponent {\n  private wrapper = inject(MultiLanguageRichTextEditorDirective, { optional: true });\n  /** On touch, open the menu without stealing focus so the keyboard (and docked toolbar) stay put. */\n  protected hasTouchInput = injectHasTouchInput();\n\n  public editor = input.required<RichTextEditorDirective>();\n\n  /** The editor's strings - the switcher is part of that editor's toolbar. */\n  protected labels = computed(() => this.editor().resolvedLabels());\n\n  protected languages = computed(() => this.wrapper?.languages() ?? []);\n  protected activeCode = computed(() => this.wrapper?.activeLanguage() ?? '');\n  protected activeLabel = computed(\n    () => this.languages().find((language) => language.code === this.activeCode())?.label ?? this.activeCode(),\n  );\n\n  protected missingCount = computed(() => this.wrapper?.missingLanguages().length ?? 0);\n\n  protected disabled = computed(\n    () => this.editor().disabled() || this.editor().readonly() || this.languages().length === 0,\n  );\n\n  /** The active language shows a leading check; others show no leading marker. */\n  protected activeIcon(code: string) {\n    return code === this.activeCode() ? 'et-check' : null;\n  }\n\n  protected isFilled(code: string) {\n    return this.wrapper?.isFilled(code) ?? false;\n  }\n\n  protected select(value: unknown) {\n    this.wrapper?.activeLanguage.set(value as string);\n    // the menu overlay pulled focus off the editor; hand it back (deferred so it wins over the\n    // menu's own focus restoration on close) so the re-applied selection stays live in the editor\n    queueMicrotask(() => this.editor().activate());\n  }\n}\n","<div [autoFocus]=\"!hasTouchInput()\" etMenu>\n  <button\n    [disabled]=\"disabled()\"\n    [attr.aria-label]=\"labels().languageTrigger(activeLabel())\"\n    [class.et-ml-rte-lang-trigger--flagged]=\"missingCount() > 0\"\n    (mousedown)=\"$event.preventDefault()\"\n    class=\"et-ml-rte-lang-trigger\"\n    etMenuTrigger\n    type=\"button\"\n  >\n    <span class=\"et-ml-rte-lang-trigger-code\">{{ activeCode() }}</span>\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu>\n      <et-menu-radio-group [value]=\"activeCode()\" (valueChange)=\"select($event)\" (mousedown)=\"$event.preventDefault()\">\n        @for (language of languages(); track language.code) {\n          <!-- eslint-disable-next-line ethlete/prefer-static-boolean-properties -- closeOnActivate is tri-state (boolean | undefined); a transform would collapse its unset state -->\n          <et-menu-radio-item [value]=\"language.code\" [icon]=\"activeIcon(language.code)\" [closeOnActivate]=\"true\">\n            <span class=\"et-ml-rte-lang-item\">\n              <span class=\"et-ml-rte-lang-item-label\">{{ language.label }}</span>\n              <span\n                [class.et-ml-rte-lang-dot--filled]=\"isFilled(language.code)\"\n                [attr.aria-label]=\"isFilled(language.code) ? 'has content' : 'empty'\"\n                class=\"et-ml-rte-lang-dot\"\n              ></span>\n            </span>\n          </et-menu-radio-item>\n        }\n      </et-menu-radio-group>\n    </et-menu>\n  </ng-template>\n</div>\n","import { Provider } from '@angular/core';\nimport {\n  DEFAULT_RICH_TEXT_EDITOR_LABELS,\n  RICH_TEXT_EDITOR_TOOL,\n  RichTextEditorToolDefinition,\n} from '../../rich-text-editor';\nimport { MultiLanguageRichTextEditorLanguageToolComponent } from './multi-language-rich-text-editor-language-tool.component';\n\n/** The toolbar token the language switcher renders for. Include it in the editor's `tools` to place\n *  the switcher; `et-multi-language-rich-text-editor` prepends it automatically. */\nexport const RICH_TEXT_EDITOR_LANGUAGE_TOOL = 'language';\n\n/**\n * Registers the `'language'` toolbar tool (the multi-language switcher dropdown). The\n * `et-multi-language-rich-text-editor` component provides this itself and auto-includes the token in\n * the embedded editor's `tools`, so consumers don't wire it manually. Exported for advanced setups\n * that compose the switcher into a bare `<et-rich-text-editor>`.\n */\nexport const provideRichTextEditorLanguageTool = (): Provider => ({\n  provide: RICH_TEXT_EDITOR_TOOL,\n  useValue: {\n    token: RICH_TEXT_EDITOR_LANGUAGE_TOOL,\n    // Only a fallback: the toolbar reads `language` from the label set, which is what a consumer localizes.\n    label: DEFAULT_RICH_TEXT_EDITOR_LABELS.language,\n    control: MultiLanguageRichTextEditorLanguageToolComponent,\n  } satisfies RichTextEditorToolDefinition,\n  multi: true,\n});\n","import { booleanAttribute, Component, computed, inject, input, viewChild, ViewEncapsulation } from '@angular/core';\nimport {\n  DEFAULT_RICH_TEXT_EDITOR_TOOLS,\n  RICH_TEXT_EDITOR_IMPORTS,\n  RichTextEditorComponent,\n  RichTextEditorTool,\n} from '../rich-text-editor';\nimport { MultiLanguageRichTextEditorDirective } from './headless/multi-language-rich-text-editor.directive';\nimport {\n  provideRichTextEditorLanguageTool,\n  RICH_TEXT_EDITOR_LANGUAGE_TOOL,\n} from './tools/multi-language-rich-text-editor-language.provider';\n\n@Component({\n  selector: 'et-multi-language-rich-text-editor',\n  templateUrl: './multi-language-rich-text-editor.component.html',\n  styleUrl: './multi-language-rich-text-editor.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...RICH_TEXT_EDITOR_IMPORTS],\n  providers: [provideRichTextEditorLanguageTool()],\n  hostDirectives: [\n    {\n      directive: MultiLanguageRichTextEditorDirective,\n      inputs: ['value', 'touched', 'disabled', 'readonly', 'invalid', 'errors', 'required', 'name', 'languages'],\n      outputs: ['valueChange', 'touchedChange'],\n    },\n  ],\n  host: { class: 'et-multi-language-rich-text-editor' },\n})\nexport class MultiLanguageRichTextEditorComponent {\n  protected dir = inject(MultiLanguageRichTextEditorDirective);\n\n  public placeholder = input('');\n  public autoformat = input(true, { transform: booleanAttribute });\n\n  /** Formatting tools for the embedded editor (the language switcher is prepended automatically).\n   *  `null` uses the default toolbar. */\n  public tools = input<readonly RichTextEditorTool[] | null>(null);\n\n  private editor = viewChild(RichTextEditorComponent);\n\n  /** The embedded editor's tools with the language switcher prepended, so it always leads the bar. */\n  protected innerTools = computed<readonly RichTextEditorTool[]>(() => [\n    RICH_TEXT_EDITOR_LANGUAGE_TOOL,\n    'divider',\n    ...(this.tools() ?? DEFAULT_RICH_TEXT_EDITOR_TOOLS),\n  ]);\n\n  public focus(options?: FocusOptions) {\n    this.editor()?.focus(options);\n  }\n}\n","<et-rich-text-editor\n  [value]=\"dir.activeMarkdown()\"\n  [disabled]=\"dir.disabled()\"\n  [readonly]=\"dir.readonly()\"\n  [invalid]=\"dir.invalid()\"\n  [errors]=\"dir.errors()\"\n  [required]=\"dir.required()\"\n  [placeholder]=\"placeholder()\"\n  [tools]=\"innerTools()\"\n  [autoformat]=\"autoformat()\"\n  (valueChange)=\"dir.writeActiveMarkdown($event)\"\n  (touchedChange)=\"dir.touched.set($event)\"\n/>\n","import { MultiLanguageRichTextEditorDirective } from './headless';\nimport { MultiLanguageRichTextEditorComponent } from './multi-language-rich-text-editor.component';\n\nexport const MULTI_LANGUAGE_RICH_TEXT_EDITOR_IMPORTS = [\n  MultiLanguageRichTextEditorComponent,\n  MultiLanguageRichTextEditorDirective,\n] as const;\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\n\nexport type OtpInputCharset = 'numeric' | 'alphanumeric' | RegExp;\n\nconst CHARSET_PATTERNS: Record<'numeric' | 'alphanumeric', RegExp> = {\n  numeric: /[0-9]/,\n  alphanumeric: /[a-zA-Z0-9]/,\n};\n\n@Directive({\n  selector: '[etOtpInput]',\n  exportAs: 'etOtpInput',\n})\nexport class OtpInputDirective\n  extends AccessibleNameControlDirective\n  implements FormValueControl<string>, FormFieldControl\n{\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  public value = model('');\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  /** Number of characters/segments. */\n  public length = input(6, { transform: numberAttribute });\n  /** Which characters are accepted - anything else is stripped (also from pastes). */\n  public charset = input<OtpInputCharset>('numeric');\n  /** Renders dots instead of the typed characters (PIN entry). */\n  public masked = input(false, { transform: booleanAttribute });\n\n  /** Emits once each time the value reaches the full length. */\n  public complete = output<string>();\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public hasValue = computed(() => this.value().length > 0);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.OTP_INPUT);\n  public focused = signal(false);\n\n  /**\n   * The native input this directive controls. Auto-initialized when the directive sits on\n   * an `<input>` (headless usage); otherwise set by the hosting component (`et-otp-input`).\n   */\n  public nativeControl = signal<HTMLInputElement | null>(null);\n\n  public inputMode = computed(() => (this.charset() === 'numeric' ? 'numeric' : 'text'));\n\n  /** The character each segment displays (`null` for empty slots). */\n  public segmentChars = computed(() => {\n    const value = this.value();\n    const masked = this.masked();\n\n    return Array.from({ length: this.length() }, (_, index) => {\n      const char = value[index];\n\n      return char === undefined ? null : masked ? '•' : char;\n    });\n  });\n\n  /** The segment the synthetic caret sits on while focused - the next empty slot, or the last one when full. */\n  public caretIndex = computed(() => Math.min(this.value().length, this.length() - 1));\n\n  private charPattern = computed(() => {\n    const charset = this.charset();\n\n    if (typeof charset === 'string') {\n      return CHARSET_PATTERNS[charset];\n    }\n\n    // `test` on a global/sticky regex advances its `lastIndex`, so the per-character scan in\n    // `sanitize` would alternate true/false - strip both flags off a consumer's charset\n    return charset.global || charset.sticky ? new RegExp(charset.source, charset.flags.replace(/[gy]/g, '')) : charset;\n  });\n\n  private completedValue: string | null = null;\n  private lastSeenValue: string | null = null;\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n\n    // the segments follow `length`/`charset`, an already committed value does not - so\n    // re-sanitize it here, and emit `complete` from the value rather than from the `input`\n    // handler, which never sees a programmatic write\n    effect(() => {\n      const raw = this.value();\n      const sanitized = this.sanitize(raw);\n      const isComplete = sanitized.length === this.length();\n\n      untracked(() => {\n        const written = raw !== this.lastSeenValue;\n\n        this.lastSeenValue = sanitized;\n\n        if (sanitized !== raw) {\n          this.value.set(sanitized);\n        }\n\n        if (!isComplete) {\n          this.completedValue = null;\n\n          return;\n        }\n\n        if (sanitized !== this.completedValue) {\n          this.completedValue = sanitized;\n\n          if (written) this.complete.emit(sanitized);\n        }\n      });\n    });\n\n    const hostRef = inject<ElementRef<HTMLElement | null>>(ElementRef);\n    const hostElement = hostRef.nativeElement;\n\n    if (hostElement?.tagName === 'INPUT') {\n      this.nativeControl.set(hostElement as HTMLInputElement);\n    }\n  }\n\n  public activate() {\n    this.focus({ preventScroll: true });\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.nativeControl()?.focus(options);\n  }\n\n  /** Strips characters outside the charset and truncates to `length` - pastes included. */\n  public sanitize(raw: string) {\n    const pattern = this.charPattern();\n\n    return Array.from(raw)\n      .filter((char) => pattern.test(char))\n      .join('')\n      .slice(0, this.length());\n  }\n\n  /** @internal Wired to the native input's `input` event. */\n  public handleNativeInput() {\n    const element = this.nativeControl();\n\n    if (!element) {\n      return;\n    }\n\n    const sanitized = this.sanitize(element.value);\n\n    // normalize the element (rejected characters must not linger) and pin the caret to the\n    // end - editing is append/delete-at-end only, which keeps segment display and caret in\n    // lockstep without tracking native selection over invisible text\n    if (element.value !== sanitized) {\n      element.value = sanitized;\n    }\n\n    element.setSelectionRange(sanitized.length, sanitized.length);\n    this.value.set(sanitized);\n  }\n\n  /** @internal */\n  public handleNativeFocus() {\n    this.focused.set(true);\n\n    const element = this.nativeControl();\n\n    element?.setSelectionRange(element.value.length, element.value.length);\n  }\n\n  /** @internal */\n  public handleNativeBlur() {\n    this.focused.set(false);\n    this.touched.set(true);\n  }\n\n  /** @internal Keeps the caret at the end - arrow/Home keys would detach it from the segment display. */\n  public handleNativeSelectionEvent() {\n    const element = this.nativeControl();\n\n    if (!element || this.focused() === false) {\n      return;\n    }\n\n    const end = element.value.length;\n\n    if (element.selectionStart !== end || element.selectionEnd !== end) {\n      element.setSelectionRange(end, end);\n    }\n  }\n}\n","import { Component, ElementRef, ViewEncapsulation, afterNextRender, computed, inject, viewChild } from '@angular/core';\nimport { ProvideColorDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\nimport { OtpInputDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-otp-input',\n  templateUrl: './otp-input.component.html',\n  styleUrl: './otp-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: OtpInputDirective,\n      inputs: [\n        'value',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'length',\n        'charset',\n        'masked',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'touchedChange', 'complete'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-otp-input',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n    '(click)': 'otp.activate()',\n  },\n})\nexport class OtpInputComponent {\n  public support = injectFormSupport();\n  protected otp = inject(OtpInputDirective);\n\n  public nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n  public canAnimate = createCanAnimateSignal();\n\n  protected segmentIndexes = computed(() => Array.from({ length: this.otp.length() }, (_, index) => index));\n\n  constructor() {\n    afterNextRender(() => {\n      this.otp.nativeControl.set(this.nativeInput()?.nativeElement ?? null);\n    });\n  }\n\n  public focus(options?: FocusOptions) {\n    this.otp.focus(options);\n  }\n}\n","<ng-content />\n\n<div class=\"et-otp-input-field\">\n  <div class=\"et-otp-input-segments\" aria-hidden=\"true\">\n    @for (index of segmentIndexes(); track index) {\n      <div\n        [attr.data-caret]=\"(otp.focused() && otp.caretIndex() === index) || null\"\n        [attr.data-filled]=\"otp.segmentChars()[index] !== null || null\"\n        class=\"et-otp-input-segment\"\n      >\n        @if (otp.segmentChars()[index]; as char) {\n          <span class=\"et-otp-input-segment-char\">{{ char }}</span>\n        } @else if (otp.focused() && otp.caretIndex() === index) {\n          <span class=\"et-otp-input-caret\"></span>\n        }\n      </div>\n    }\n  </div>\n\n  <!-- one real input stretched invisibly over the segments: reliable SMS autofill\n       (autocomplete=\"one-time-code\") and native paste for free -->\n  <input\n    #nativeInput\n    [attr.aria-describedby]=\"otp.describedBy() || null\"\n    [attr.aria-invalid]=\"otp.shouldDisplayError() || null\"\n    [attr.aria-label]=\"otp.ariaLabel() || null\"\n    [attr.aria-labelledby]=\"otp.labelId() || null\"\n    [attr.inputmode]=\"otp.inputMode()\"\n    [attr.name]=\"otp.name() || null\"\n    [disabled]=\"otp.disabled()\"\n    [readOnly]=\"otp.readonly()\"\n    [required]=\"otp.required()\"\n    [value]=\"otp.value()\"\n    (blur)=\"otp.handleNativeBlur()\"\n    (focus)=\"otp.handleNativeFocus()\"\n    (input)=\"otp.handleNativeInput()\"\n    (keyup)=\"otp.handleNativeSelectionEvent()\"\n    (mouseup)=\"otp.handleNativeSelectionEvent()\"\n    class=\"et-otp-input-native\"\n    autocapitalize=\"off\"\n    autocomplete=\"one-time-code\"\n    spellcheck=\"false\"\n    type=\"text\"\n  />\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { OtpInputDirective } from './headless';\nimport { OtpInputComponent } from './otp-input.component';\n\nexport const OTP_INPUT_IMPORTS = [OtpInputComponent, OtpInputDirective] as const;\n","export type PhoneCountry = {\n  /** ISO 3166-1 alpha-2, lower case. */\n  iso2: string;\n  /** International dialing code without the `+`. */\n  dialCode: string;\n};\n\n/**\n * ISO alpha-2 → dial code, nothing more. Display names come from\n * `Intl.DisplayNames(locale, { type: 'region' })` and flags from regional-indicator emoji -\n * no bundled name/flag data. Shared dial codes list their primary country first (`+1` → US).\n */\nexport const PHONE_COUNTRIES: readonly PhoneCountry[] = [\n  { iso2: 'us', dialCode: '1' },\n  { iso2: 'ca', dialCode: '1' },\n  { iso2: 'ru', dialCode: '7' },\n  { iso2: 'kz', dialCode: '7' },\n  { iso2: 'eg', dialCode: '20' },\n  { iso2: 'za', dialCode: '27' },\n  { iso2: 'gr', dialCode: '30' },\n  { iso2: 'nl', dialCode: '31' },\n  { iso2: 'be', dialCode: '32' },\n  { iso2: 'fr', dialCode: '33' },\n  { iso2: 'es', dialCode: '34' },\n  { iso2: 'hu', dialCode: '36' },\n  { iso2: 'it', dialCode: '39' },\n  { iso2: 'ro', dialCode: '40' },\n  { iso2: 'ch', dialCode: '41' },\n  { iso2: 'at', dialCode: '43' },\n  { iso2: 'gb', dialCode: '44' },\n  { iso2: 'dk', dialCode: '45' },\n  { iso2: 'se', dialCode: '46' },\n  { iso2: 'no', dialCode: '47' },\n  { iso2: 'pl', dialCode: '48' },\n  { iso2: 'de', dialCode: '49' },\n  { iso2: 'pe', dialCode: '51' },\n  { iso2: 'mx', dialCode: '52' },\n  { iso2: 'cu', dialCode: '53' },\n  { iso2: 'ar', dialCode: '54' },\n  { iso2: 'br', dialCode: '55' },\n  { iso2: 'cl', dialCode: '56' },\n  { iso2: 'co', dialCode: '57' },\n  { iso2: 've', dialCode: '58' },\n  { iso2: 'my', dialCode: '60' },\n  { iso2: 'au', dialCode: '61' },\n  { iso2: 'id', dialCode: '62' },\n  { iso2: 'ph', dialCode: '63' },\n  { iso2: 'nz', dialCode: '64' },\n  { iso2: 'sg', dialCode: '65' },\n  { iso2: 'th', dialCode: '66' },\n  { iso2: 'jp', dialCode: '81' },\n  { iso2: 'kr', dialCode: '82' },\n  { iso2: 'vn', dialCode: '84' },\n  { iso2: 'cn', dialCode: '86' },\n  { iso2: 'tr', dialCode: '90' },\n  { iso2: 'in', dialCode: '91' },\n  { iso2: 'pk', dialCode: '92' },\n  { iso2: 'af', dialCode: '93' },\n  { iso2: 'lk', dialCode: '94' },\n  { iso2: 'mm', dialCode: '95' },\n  { iso2: 'ir', dialCode: '98' },\n  { iso2: 'ss', dialCode: '211' },\n  { iso2: 'ma', dialCode: '212' },\n  { iso2: 'dz', dialCode: '213' },\n  { iso2: 'tn', dialCode: '216' },\n  { iso2: 'ly', dialCode: '218' },\n  { iso2: 'gm', dialCode: '220' },\n  { iso2: 'sn', dialCode: '221' },\n  { iso2: 'mr', dialCode: '222' },\n  { iso2: 'ml', dialCode: '223' },\n  { iso2: 'gn', dialCode: '224' },\n  { iso2: 'ci', dialCode: '225' },\n  { iso2: 'bf', dialCode: '226' },\n  { iso2: 'ne', dialCode: '227' },\n  { iso2: 'tg', dialCode: '228' },\n  { iso2: 'bj', dialCode: '229' },\n  { iso2: 'mu', dialCode: '230' },\n  { iso2: 'lr', dialCode: '231' },\n  { iso2: 'sl', dialCode: '232' },\n  { iso2: 'gh', dialCode: '233' },\n  { iso2: 'ng', dialCode: '234' },\n  { iso2: 'td', dialCode: '235' },\n  { iso2: 'cf', dialCode: '236' },\n  { iso2: 'cm', dialCode: '237' },\n  { iso2: 'cv', dialCode: '238' },\n  { iso2: 'st', dialCode: '239' },\n  { iso2: 'gq', dialCode: '240' },\n  { iso2: 'ga', dialCode: '241' },\n  { iso2: 'cg', dialCode: '242' },\n  { iso2: 'cd', dialCode: '243' },\n  { iso2: 'ao', dialCode: '244' },\n  { iso2: 'gw', dialCode: '245' },\n  { iso2: 'io', dialCode: '246' },\n  { iso2: 'sc', dialCode: '248' },\n  { iso2: 'sd', dialCode: '249' },\n  { iso2: 'rw', dialCode: '250' },\n  { iso2: 'et', dialCode: '251' },\n  { iso2: 'so', dialCode: '252' },\n  { iso2: 'dj', dialCode: '253' },\n  { iso2: 'ke', dialCode: '254' },\n  { iso2: 'tz', dialCode: '255' },\n  { iso2: 'ug', dialCode: '256' },\n  { iso2: 'bi', dialCode: '257' },\n  { iso2: 'mz', dialCode: '258' },\n  { iso2: 'zm', dialCode: '260' },\n  { iso2: 'mg', dialCode: '261' },\n  { iso2: 're', dialCode: '262' },\n  { iso2: 'zw', dialCode: '263' },\n  { iso2: 'na', dialCode: '264' },\n  { iso2: 'mw', dialCode: '265' },\n  { iso2: 'ls', dialCode: '266' },\n  { iso2: 'bw', dialCode: '267' },\n  { iso2: 'sz', dialCode: '268' },\n  { iso2: 'km', dialCode: '269' },\n  { iso2: 'sh', dialCode: '290' },\n  { iso2: 'er', dialCode: '291' },\n  { iso2: 'aw', dialCode: '297' },\n  { iso2: 'fo', dialCode: '298' },\n  { iso2: 'gl', dialCode: '299' },\n  { iso2: 'gi', dialCode: '350' },\n  { iso2: 'pt', dialCode: '351' },\n  { iso2: 'lu', dialCode: '352' },\n  { iso2: 'ie', dialCode: '353' },\n  { iso2: 'is', dialCode: '354' },\n  { iso2: 'al', dialCode: '355' },\n  { iso2: 'mt', dialCode: '356' },\n  { iso2: 'cy', dialCode: '357' },\n  { iso2: 'fi', dialCode: '358' },\n  { iso2: 'bg', dialCode: '359' },\n  { iso2: 'lt', dialCode: '370' },\n  { iso2: 'lv', dialCode: '371' },\n  { iso2: 'ee', dialCode: '372' },\n  { iso2: 'md', dialCode: '373' },\n  { iso2: 'am', dialCode: '374' },\n  { iso2: 'by', dialCode: '375' },\n  { iso2: 'ad', dialCode: '376' },\n  { iso2: 'mc', dialCode: '377' },\n  { iso2: 'sm', dialCode: '378' },\n  { iso2: 'ua', dialCode: '380' },\n  { iso2: 'rs', dialCode: '381' },\n  { iso2: 'me', dialCode: '382' },\n  { iso2: 'xk', dialCode: '383' },\n  { iso2: 'hr', dialCode: '385' },\n  { iso2: 'si', dialCode: '386' },\n  { iso2: 'ba', dialCode: '387' },\n  { iso2: 'mk', dialCode: '389' },\n  { iso2: 'cz', dialCode: '420' },\n  { iso2: 'sk', dialCode: '421' },\n  { iso2: 'li', dialCode: '423' },\n  { iso2: 'fk', dialCode: '500' },\n  { iso2: 'bz', dialCode: '501' },\n  { iso2: 'gt', dialCode: '502' },\n  { iso2: 'sv', dialCode: '503' },\n  { iso2: 'hn', dialCode: '504' },\n  { iso2: 'ni', dialCode: '505' },\n  { iso2: 'cr', dialCode: '506' },\n  { iso2: 'pa', dialCode: '507' },\n  { iso2: 'pm', dialCode: '508' },\n  { iso2: 'ht', dialCode: '509' },\n  { iso2: 'gp', dialCode: '590' },\n  { iso2: 'bo', dialCode: '591' },\n  { iso2: 'gy', dialCode: '592' },\n  { iso2: 'ec', dialCode: '593' },\n  { iso2: 'gf', dialCode: '594' },\n  { iso2: 'py', dialCode: '595' },\n  { iso2: 'mq', dialCode: '596' },\n  { iso2: 'sr', dialCode: '597' },\n  { iso2: 'uy', dialCode: '598' },\n  { iso2: 'cw', dialCode: '599' },\n  { iso2: 'tl', dialCode: '670' },\n  { iso2: 'nf', dialCode: '672' },\n  { iso2: 'bn', dialCode: '673' },\n  { iso2: 'nr', dialCode: '674' },\n  { iso2: 'pg', dialCode: '675' },\n  { iso2: 'to', dialCode: '676' },\n  { iso2: 'sb', dialCode: '677' },\n  { iso2: 'vu', dialCode: '678' },\n  { iso2: 'fj', dialCode: '679' },\n  { iso2: 'pw', dialCode: '680' },\n  { iso2: 'wf', dialCode: '681' },\n  { iso2: 'ck', dialCode: '682' },\n  { iso2: 'nu', dialCode: '683' },\n  { iso2: 'ws', dialCode: '685' },\n  { iso2: 'ki', dialCode: '686' },\n  { iso2: 'nc', dialCode: '687' },\n  { iso2: 'tv', dialCode: '688' },\n  { iso2: 'pf', dialCode: '689' },\n  { iso2: 'tk', dialCode: '690' },\n  { iso2: 'fm', dialCode: '691' },\n  { iso2: 'mh', dialCode: '692' },\n  { iso2: 'kp', dialCode: '850' },\n  { iso2: 'hk', dialCode: '852' },\n  { iso2: 'mo', dialCode: '853' },\n  { iso2: 'kh', dialCode: '855' },\n  { iso2: 'la', dialCode: '856' },\n  { iso2: 'bd', dialCode: '880' },\n  { iso2: 'tw', dialCode: '886' },\n  { iso2: 'mv', dialCode: '960' },\n  { iso2: 'lb', dialCode: '961' },\n  { iso2: 'jo', dialCode: '962' },\n  { iso2: 'sy', dialCode: '963' },\n  { iso2: 'iq', dialCode: '964' },\n  { iso2: 'kw', dialCode: '965' },\n  { iso2: 'sa', dialCode: '966' },\n  { iso2: 'ye', dialCode: '967' },\n  { iso2: 'om', dialCode: '968' },\n  { iso2: 'ps', dialCode: '970' },\n  { iso2: 'ae', dialCode: '971' },\n  { iso2: 'il', dialCode: '972' },\n  { iso2: 'bh', dialCode: '973' },\n  { iso2: 'qa', dialCode: '974' },\n  { iso2: 'bt', dialCode: '975' },\n  { iso2: 'mn', dialCode: '976' },\n  { iso2: 'np', dialCode: '977' },\n  { iso2: 'tj', dialCode: '992' },\n  { iso2: 'tm', dialCode: '993' },\n  { iso2: 'az', dialCode: '994' },\n  { iso2: 'ge', dialCode: '995' },\n  { iso2: 'kg', dialCode: '996' },\n  { iso2: 'uz', dialCode: '998' },\n];\n\n/** The country whose dial code is the longest prefix of `+<digits>` (primary country wins shared codes). */\nexport const matchCountryByDialCode = (digits: string): PhoneCountry | null => {\n  let match: PhoneCountry | null = null;\n\n  for (const country of PHONE_COUNTRIES) {\n    if (digits.startsWith(country.dialCode) && (!match || country.dialCode.length > match.dialCode.length)) {\n      match = country;\n    }\n  }\n\n  return match;\n};\n\n/** Countries where a leading `0` is part of the international number (e.g. Italian landlines). */\nconst TRUNK_ZERO_KEPT = /* @__PURE__ */ new Set(['it', 'sm']);\n\n/**\n * Strips the national trunk prefix `0` (`'0171…'` → `'171…'`) - in most countries it replaces\n * the dial code in national notation and is never part of the international number. Countries\n * that keep their leading `0` are exempt. A `00…` international prefix must be handled before\n * calling this.\n */\nexport const stripTrunkZero = (nationalDigits: string, iso2: string) =>\n  nationalDigits.startsWith('0') && !TRUNK_ZERO_KEPT.has(iso2) ? nationalDigits.slice(1) : nationalDigits;\n\n/** Regional-indicator emoji for an ISO alpha-2 code (`'de'` → 🇩🇪). */\nexport const phoneCountryFlag = (iso2: string) =>\n  String.fromCodePoint(...Array.from(iso2.toUpperCase()).map((char) => 0x1f1a5 + char.charCodeAt(0)));\n\n/** Localized display name via `Intl.DisplayNames` - falls back to the upper-cased code. */\nexport const phoneCountryName = (iso2: string, locale?: string) => {\n  try {\n    return (\n      new Intl.DisplayNames(locale ? [locale] : undefined, { type: 'region' }).of(iso2.toUpperCase()) ??\n      iso2.toUpperCase()\n    );\n  } catch {\n    return iso2.toUpperCase();\n  }\n};\n","// codes 2800-2899\nexport const PHONE_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_PHONE_INPUT: 2800,\n  FLAG_TEMPLATE_OUTSIDE_PHONE_INPUT: 2801,\n} as const;\n","import { Directive, computed, input, linkedSignal, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../form-field/headless';\nimport { PHONE_COUNTRIES, matchCountryByDialCode, stripTrunkZero } from './phone-countries';\nimport { PhoneInputFieldDirective } from './phone-input-field.directive';\nimport { PhoneInputFlagDirective } from './phone-input-flag.directive';\nimport { mountControlSuffixStyles } from '../../form-field/form-field-control-suffix-styles.component';\nimport { TextShellControlDirective } from '../../form-field/headless/text-shell-control.directive';\n\nconst onlyDigits = (raw: string) => raw.replace(/\\D/g, '');\n\n@Directive({\n  selector: '[etPhoneInput]',\n  exportAs: 'etPhoneInput',\n  host: {\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n  },\n})\nexport class PhoneInputDirective extends TextShellControlDirective implements FormValueControl<string> {\n  /** Normalized `+<dialCode><national digits>` - empty string while nothing is entered. */\n  public value = model('');\n  public placeholder = input('');\n\n  public defaultCountry = input('us');\n  /** ISO codes listed on top of the country dropdown. */\n  public preferredCountries = input<string[]>([]);\n\n  public hasValue = computed(() => this.mixed() || this.value().length > 0);\n\n  /** The placeholder the tel field currently shows - `mixedLabel` while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.PHONE_INPUT);\n\n  /** @internal */\n  public registeredField = signal<PhoneInputFieldDirective | null>(null);\n  /** @internal Replaces the emoji flags in the trigger and the option list. */\n  public registeredFlagTemplate = signal<PhoneInputFlagDirective | null>(null);\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  private countryPicked = false;\n\n  /**\n   * The active country's ISO code: derived from the value's dial code, manually selectable.\n   * A manual pick survives value edits as long as its dial code still fits - dial codes are\n   * shared (`+1` → US, CA, …) and typing digits must not flip a chosen country.\n   */\n  public country = linkedSignal<{ matched: string | null; fallback: string }, string>({\n    source: () => ({\n      matched: matchCountryByDialCode(onlyDigits(this.value()))?.iso2 ?? null,\n      fallback: this.defaultCountry(),\n    }),\n    computation: (source, previous) => {\n      // a defaultCountry that resolves late (a locale or geo lookup) still lands, but only while\n      // nothing has moved the country off the previous default\n      const followsDefault =\n        previous === undefined || (!this.countryPicked && previous.value === previous.source.fallback);\n      const fallback = followsDefault ? source.fallback : previous.value;\n\n      if (!source.matched) {\n        return fallback;\n      }\n\n      const matchedDial = this.dialCodeOf(source.matched);\n\n      return this.dialCodeOf(fallback) === matchedDial && previous !== undefined ? fallback : source.matched;\n    },\n  });\n\n  public dialCode = computed(() => this.dialCodeOf(this.country()));\n\n  /** The digits after the dial code. Mixed masks the hidden raw number - it is never displayed. */\n  public nationalNumber = computed(() => {\n    if (this.mixed()) {\n      return '';\n    }\n\n    const digits = onlyDigits(this.value());\n    const dialCode = this.dialCode();\n\n    return digits.startsWith(dialCode) ? digits.slice(dialCode.length) : digits;\n  });\n\n  /**\n   * Cosmetic display grouping (groups of three) - deliberately **not** metadata-driven\n   * per-country formatting; real validation belongs to the backend/schema.\n   */\n  public formattedNational = computed(() =>\n    this.nationalNumber()\n      .replace(/(\\d{3})(?=\\d)/g, '$1 ')\n      .trim(),\n  );\n\n  /** A cheap length-window sanity check (4–14 national digits) - not real validation. */\n  public isPlausible = computed(() => {\n    const length = this.nationalNumber().length;\n\n    return length >= 4 && length <= 14;\n  });\n\n  constructor() {\n    super();\n\n    mountControlSuffixStyles();\n  }\n\n  /** Clears the number (the selected country stays) - wired to the styled input's clear button. */\n  public clearValue() {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.value.set('');\n    this.mixed.set(false);\n\n    // the tel field shows raw digits while focused (blur reformats) - a clear happens\n    // while focused, so reset the element text directly\n    const field = this.registeredField();\n\n    if (field) {\n      field.elementRef.nativeElement.value = '';\n    }\n  }\n\n  /** Switches the country, keeping the national number. */\n  public selectCountry(iso2: string) {\n    if (!this.interactive() || !PHONE_COUNTRIES.some((country) => country.iso2 === iso2)) {\n      return;\n    }\n\n    this.countryPicked = true;\n\n    // while mixed a country pick is preparatory (like opening a select): it updates the\n    // presentation only - rebuilding a value would leak the hidden national number, and\n    // mixed resolves only once a national number is committed\n    if (this.mixed()) {\n      this.country.set(iso2);\n\n      return;\n    }\n\n    const national = this.nationalNumber();\n\n    this.country.set(iso2);\n    this.value.set(national ? `+${this.dialCodeOf(iso2)}${national}` : '');\n  }\n\n  /**\n   * @internal Wired to the tel field. Raw text starting with `+` (or the `00` international\n   * call prefix) re-derives the country by longest dial-code match; anything else is national\n   * digits for the active country, with a national trunk `0` stripped where applicable\n   * (`0171…` with Germany active → `+49171…`).\n   */\n  public setNationalInput(raw: string) {\n    const trimmed = raw.trim();\n    const digits = onlyDigits(trimmed);\n\n    if (trimmed.startsWith('+') || digits.startsWith('00')) {\n      const international = digits.startsWith('00') ? digits.slice(2) : digits;\n\n      this.commitTypedValue(international ? `+${international}` : '');\n\n      return;\n    }\n\n    const national = stripTrunkZero(digits, this.country());\n\n    this.commitTypedValue(national ? `+${this.dialCode()}${national}` : '');\n  }\n\n  public focusControl(options?: FocusOptions) {\n    this.registeredField()?.focus(options);\n  }\n\n  /**\n   * Writes a user-typed value. While mixed, only a non-empty entry commits - it is built\n   * from scratch with the chosen country (never from the hidden number) and resolves mixed;\n   * an empty entry leaves the hidden raw value untouched.\n   */\n  private commitTypedValue(next: string) {\n    if (this.mixed()) {\n      if (!next) {\n        return;\n      }\n\n      this.mixed.set(false);\n    }\n\n    this.value.set(next);\n  }\n\n  private dialCodeOf(iso2: string) {\n    return PHONE_COUNTRIES.find((country) => country.iso2 === iso2)?.dialCode ?? '';\n  }\n}\n","import { Directive, ElementRef, afterNextRender, effect, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { PHONE_INPUT_ERROR_CODES } from '../phone-input-errors';\nimport { PhoneInputDirective } from './phone-input.directive';\n\n/** The tel field of a phone input - displays the national number, grouped while unfocused. */\n@Directive({\n  selector: 'input[etPhoneInputField]',\n  exportAs: 'etPhoneInputField',\n  host: {\n    type: 'tel',\n    autocomplete: 'tel',\n    inputmode: 'tel',\n    '[attr.placeholder]': 'phoneInput?.effectivePlaceholder() || null',\n    '[attr.aria-required]': 'phoneInput?.required() || null',\n    '[attr.aria-invalid]': 'phoneInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'phoneInput?.describedBy() || null',\n    '[attr.aria-label]': 'phoneInput?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'phoneInput?.labelId() || null',\n    '[disabled]': 'phoneInput?.disabled() || false',\n    '[readOnly]': 'phoneInput?.readonly() || false',\n    '(input)': 'handleInput()',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class PhoneInputFieldDirective {\n  protected phoneInput = inject(PhoneInputDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  constructor() {\n    registerSingleton(this.phoneInput?.registeredField, this);\n\n    // the element mirrors the grouped national form only while unfocused. Never rewrite it\n    // during an edit: the text the user is part-way through typing is what `setNationalInput`\n    // re-reads on the next keystroke, so replacing a half-typed `+33…` with its national\n    // interpretation makes the next character read as national digits and re-prepend the dial code\n    effect(() => {\n      const phoneInput = this.phoneInput;\n\n      if (!phoneInput) {\n        return;\n      }\n\n      const element = this.elementRef.nativeElement;\n      const text = phoneInput.formattedNational();\n\n      if (!phoneInput.focused() && element.value !== text) {\n        element.value = text;\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.phoneInput) {\n          throw new RuntimeError(\n            PHONE_INPUT_ERROR_CODES.FIELD_OUTSIDE_PHONE_INPUT,\n            '[PhoneInputFieldDirective] etPhoneInputField must be placed inside an [etPhoneInput] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  protected handleInput() {\n    this.phoneInput?.setNationalInput(this.elementRef.nativeElement.value);\n  }\n\n  protected handleFocus() {\n    const phoneInput = this.phoneInput;\n\n    if (!phoneInput) {\n      return;\n    }\n\n    // editing works on the raw digits\n    this.elementRef.nativeElement.value = phoneInput.nationalNumber();\n    phoneInput.focused.set(true);\n  }\n\n  protected handleBlur() {\n    const phoneInput = this.phoneInput;\n\n    if (!phoneInput) {\n      return;\n    }\n\n    this.elementRef.nativeElement.value = phoneInput.formattedNational();\n    phoneInput.focused.set(false);\n    phoneInput.touched.set(true);\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { PHONE_INPUT_ERROR_CODES } from '../phone-input-errors';\nimport { PhoneInputDirective } from './phone-input.directive';\n\nexport type PhoneInputFlagCountry = {\n  /** Lower-cased ISO 3166-1 alpha-2 code (`'de'`, `'us'`, …). */\n  iso2: string;\n  /** Dial code without the leading `+` (`'49'`). */\n  dialCode: string;\n  /** The default emoji flag - render it to keep the built-in look for some countries. */\n  flag: string;\n};\n\nexport type PhoneInputFlagContext = {\n  $implicit: PhoneInputFlagCountry;\n};\n\n/**\n * Replaces the emoji flags of `et-phone-input` (in the country trigger and the option list)\n * with custom art:\n *\n * ```html\n * <et-phone-input>\n *   <ng-template etPhoneInputFlag let-country>\n *     <img [src]=\"'/flags/' + country.iso2 + '.svg'\" [alt]=\"''\" />\n *   </ng-template>\n * </et-phone-input>\n * ```\n */\n@Directive({ selector: 'ng-template[etPhoneInputFlag]' })\nexport class PhoneInputFlagDirective {\n  private phoneInput = inject(PhoneInputDirective, { optional: true });\n  public templateRef = inject<TemplateRef<PhoneInputFlagContext>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.phoneInput?.registeredFlagTemplate, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.phoneInput) {\n          throw new RuntimeError(\n            PHONE_INPUT_ERROR_CODES.FLAG_TEMPLATE_OUTSIDE_PHONE_INPUT,\n            '[PhoneInputFlagDirective] etPhoneInputFlag must be placed inside an [etPhoneInput] element.',\n            { element: this.templateRef.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings the phone input renders itself. The country *names* are not here - they come from\n * `Intl.DisplayNames` for the current locale, so they are already translated.\n */\nexport type PhoneInputLabels = {\n  /** Accessible label for the country-code selector. */\n  selectCountry: string;\n  /** Placeholder for the country list's search field. */\n  searchCountries: string;\n  /** Shown when a country search matched nothing. */\n  noCountries: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_PHONE_INPUT_LABELS: PhoneInputLabels = {\n  selectCountry: 'Select country',\n  searchCountries: 'Search countries',\n  noCountries: 'No countries found',\n};\n\nconst PHONE_INPUT_LABELS_DEF = /* @__PURE__ */ defineLabels<PhoneInputLabels>(\n  'PHONE_INPUT_LABELS',\n  DEFAULT_PHONE_INPUT_LABELS,\n);\n\n/**\n * Localize the phone input's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_PHONE_INPUT_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * providePhoneInputLabels({ selectCountry: 'Land auswählen' });\n */\nexport const providePhoneInputLabels = /* @__PURE__ */ toProvideFn(PHONE_INPUT_LABELS_DEF);\nexport const injectPhoneInputLabels = /* @__PURE__ */ toInjectFn(PHONE_INPUT_LABELS_DEF);\nexport const PHONE_INPUT_LABELS = /* @__PURE__ */ toToken(PHONE_INPUT_LABELS_DEF);\n","// codes 1000-1099\nexport const SELECT_ERROR_CODES = {\n  MISSING_TRIGGER: 1000,\n  MISSING_SURFACE: 1001,\n  TRIGGER_OUTSIDE_SELECT: 1002,\n  SURFACE_OUTSIDE_SELECT: 1003,\n  LISTBOX_OUTSIDE_SELECT: 1004,\n  OPTION_OUTSIDE_SELECT: 1005,\n  VALUE_OUTSIDE_SELECT: 1006,\n  SEARCH_OUTSIDE_SELECT: 1007,\n  STATE_TEMPLATE_OUTSIDE_SELECT: 1008,\n  OPTION_GROUP_OUTSIDE_SELECT: 1009,\n  VIRTUAL_OPTION_OUTSIDE_SELECT: 1010,\n  OPTION_TEMPLATE_OUTSIDE_SELECT: 1011,\n  VIEWPORT_OUTSIDE_SELECT: 1012,\n  OPTIONS_OUTSIDE_SELECT: 1013,\n  SELECT_ALL_OPTION_OUTSIDE_SELECT: 1014,\n} as const;\n","import { Signal, computed, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { signalElementDimensions } from '@ethlete/core';\nimport { EMPTY, fromEvent, switchMap, tap } from 'rxjs';\n\nexport type VirtualWindowConfig = {\n  /**\n   * The scrollable viewport the window tracks. While `null`, the window is pass-through:\n   * every item is inside the range and the paddings are zero.\n   */\n  container: Signal<HTMLElement | null>;\n  itemCount: Signal<number>;\n  /** Row height assumed until a rendered row was measured. Reactive so a host input can drive it. */\n  estimateItemHeight: number | Signal<number>;\n  /** Rows kept rendered beyond the visible range on both sides. Reactive so a host input can drive it. */\n  overscan: number | Signal<number>;\n};\n\nexport type VirtualWindowRange = {\n  start: number;\n  end: number;\n};\n\nexport type VirtualWindow = {\n  /** The slice of items to render: `items.slice(start, end)`. */\n  range: Signal<VirtualWindowRange>;\n  /** Block padding standing in for the unrendered rows above/below the range. */\n  paddingTop: Signal<number>;\n  paddingBottom: Signal<number>;\n  /** Feeds a rendered row's real height into the window (uniform row height model). */\n  measureItem: (element: HTMLElement) => void;\n  /** Scrolls the container the minimal amount that brings the row into the viewport. */\n  scrollToIndex: (index: number) => void;\n};\n\n/**\n * Height assumed for the viewport until the container reports a real one - matches the\n * select panel's default max height order of magnitude, so the first frame after mounting\n * renders roughly one viewport worth of rows instead of everything or nothing.\n */\nconst FALLBACK_VIEWPORT_SIZE = 400;\n\nconst asSignal = (value: number | Signal<number>): Signal<number> =>\n  typeof value === 'number' ? signal(value) : value;\n\n/**\n * Uniform-row-height windowing over a scroll container: only the rows near the viewport are\n * rendered, block paddings stand in for the rest of the scroll height. Purely behavioral -\n * the caller renders `range()` and applies the paddings. Must be created in an injection\n * context (it subscribes to the container's scroll and size).\n */\nexport const createVirtualWindow = (config: VirtualWindowConfig): VirtualWindow => {\n  const estimateItemHeight = asSignal(config.estimateItemHeight);\n  const overscan = asSignal(config.overscan);\n  // Height of a real, rendered row once one was measured; falls back to the estimate until then.\n  const measuredItemHeight = signal<number | null>(null);\n  const itemHeight = computed(() => measuredItemHeight() ?? estimateItemHeight());\n  const scrollOffset = signal(0);\n  const containerDimensions = signalElementDimensions(config.container);\n  const viewportSize = computed(() => containerDimensions().client?.height ?? 0);\n\n  // a scroll request that arrived before the container existed (e.g. scrolling the selected\n  // option into view while the panel is still mounting) - replayed once it does\n  let pendingScrollIndex: number | null = null;\n\n  const scrollToIndex = (index: number) => {\n    const container = config.container();\n\n    if (!container) {\n      pendingScrollIndex = index;\n\n      return;\n    }\n\n    const height = itemHeight();\n    const viewport = viewportSize() || FALLBACK_VIEWPORT_SIZE;\n    const rowTop = index * height;\n    const rowBottom = rowTop + height;\n    const current = container.scrollTop;\n    let next = current;\n\n    if (rowTop < current) {\n      next = rowTop;\n    } else if (rowBottom > current + viewport) {\n      next = rowBottom - viewport;\n    }\n\n    if (next !== current) {\n      container.scrollTop = next;\n      // read back instead of trusting `next` - the browser clamps to the scrollable range\n      scrollOffset.set(container.scrollTop);\n    }\n  };\n\n  toObservable(config.container)\n    .pipe(\n      switchMap((container) => {\n        if (!container) {\n          return EMPTY;\n        }\n\n        scrollOffset.set(container.scrollTop);\n\n        if (pendingScrollIndex !== null) {\n          const index = pendingScrollIndex;\n\n          pendingScrollIndex = null;\n          scrollToIndex(index);\n        }\n\n        // windowing needs the raw scroll offset on every scroll event - the scroll-state\n        // utility only exposes can-scroll flags, not a live position\n        // eslint-disable-next-line ethlete/prefer-scroll-state\n        return fromEvent(container, 'scroll', { passive: true }).pipe(tap(() => scrollOffset.set(container.scrollTop)));\n      }),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  const range = computed<VirtualWindowRange>(() => {\n    const count = config.itemCount();\n\n    if (!count || !config.container()) {\n      return { start: 0, end: count };\n    }\n\n    const height = itemHeight();\n    const viewport = viewportSize() || FALLBACK_VIEWPORT_SIZE;\n    const offset = scrollOffset();\n    // clamp into the item range: when the count shrinks while scrolled far down (filtering a\n    // long list), the stale offset would otherwise start past the end - the browser's own\n    // clamp-scroll event arrives a frame later, but the window must never be empty until then\n    const rows = overscan();\n    const start = Math.min(Math.max(0, Math.floor(offset / height) - rows), Math.max(0, count - 1));\n    const end = Math.min(count, Math.max(Math.ceil((offset + viewport) / height) + rows, start + 1));\n\n    return { start, end };\n  });\n\n  const paddingTop = computed(() => range().start * itemHeight());\n  const paddingBottom = computed(() => Math.max(0, (config.itemCount() - range().end) * itemHeight()));\n\n  const measureItem = (element: HTMLElement) => {\n    const height = element.offsetHeight;\n\n    if (height > 0 && height !== measuredItemHeight()) {\n      measuredItemHeight.set(height);\n    }\n  };\n\n  return { range, paddingTop, paddingBottom, measureItem, scrollToIndex };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The select panel's state and action rows (busy bar, loading/error/empty rows, load-more,\n * add-new), as a styles-only component mounted the first time a select can render one of them.\n *\n * @internal\n */\n@Component({\n  selector: 'et-select-extras-styles',\n  template: '',\n  styleUrl: './select-extras-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SelectExtrasStylesComponent {}\n","import {\n  DOCUMENT,\n  DestroyRef,\n  Directive,\n  Signal,\n  WritableSignal,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport {\n  RuntimeError,\n  createComponentId,\n  injectHostElement,\n  injectStyleManager,\n  nextFrame,\n  signalDeferredLoading,\n} from '@ethlete/core';\nimport { EMPTY, fromEvent, switchMap, tap } from 'rxjs';\nimport { sortByDomOrder } from '../../../internals/dom-order';\nimport { createTypeahead } from '../../../internals/typeahead';\nimport { createVirtualWindow } from '../../../internals/virtual-window';\nimport { mountFloatingPanelStyles } from '../../../overlay/floating-panel-styles.component';\nimport { anchoredOverlayStrategy } from '../../../overlay/strategies';\nimport {\n  AccessibleNameControlDirective,\n  AnchoredPanelOverlayRef,\n  createAnchoredPanelController,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n  hitsInteractiveElement,\n} from '../../form-field/headless';\nimport { createSelectionState } from '../../selection-list/headless/internals/selection-state';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectListboxDirective } from './select-listbox.directive';\nimport { SelectOptionTemplateDirective } from './select-option-template.directive';\nimport { SelectSearchDirective } from './select-search.directive';\nimport { SelectExtrasStylesComponent } from '../select-extras-styles.component';\nimport { SelectEmptyDirective, SelectErrorDirective, SelectLoadingDirective } from './select-state-templates.directive';\nimport { SelectSurfaceContext, SelectSurfaceDirective } from './select-surface.directive';\nimport { SelectTriggerDirective } from './select-trigger.directive';\nimport { SelectValueDirective } from './select-value.directive';\nimport { SelectViewportDirective } from './select-viewport.directive';\nimport { SelectCompareWith, SelectItem, SelectOptionData, SelectSelectedEntry } from './select.tokens';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\nimport { mountTextFieldShellStyles } from '../../form-field/form-field-text-shell-styles.component';\n\nexport const SELECT_FILTER_MODES = {\n  /** The select never filters - a search input is purely informational for the consumer. */\n  NONE: 'none',\n  /** Non-matching registered options are hidden while a search query is set (client-side data). */\n  INTERNAL: 'internal',\n  /** The consumer reacts to `queryChange` (drives an `@for` / a query); the select hides nothing. */\n  EXTERNAL: 'external',\n} as const;\n\nexport type SelectFilterMode = (typeof SELECT_FILTER_MODES)[keyof typeof SELECT_FILTER_MODES];\n\nconst VIRTUALIZATION_MIN_ITEMS = 40;\n\ntype SelectDataItemEntry = {\n  item: SelectItem;\n  value: WritableSignal<unknown>;\n  label: WritableSignal<string>;\n  disabledInput: WritableSignal<boolean>;\n  element: WritableSignal<HTMLElement | null>;\n  data: WritableSignal<SelectOptionData>;\n};\n\n/**\n * The async option state a source (e.g. the bundle from `selectOptionsFromQuery`) pushes into a\n * select via `[etSelectOptions]`. While one is set it overrides the `loading`/`error`/`hasMoreItems`\n * inputs and forces `filterMode` to `external`.\n */\nexport type SelectAsyncOptions = {\n  loading: Signal<boolean>;\n  error: Signal<string | null>;\n  hasMore: Signal<boolean>;\n};\n\nconst referenceEquality: SelectCompareWith = (a, b) => a === b;\n\nconst defaultNormalizeCustomValue = (raw: string) => {\n  const trimmed = raw.trim();\n\n  return trimmed.length ? trimmed : null;\n};\n\n@Directive({\n  selector: '[etSelect]',\n  exportAs: 'etSelect',\n  host: {\n    '[attr.data-select-open]': 'open() || null',\n    '[attr.data-mixed]': 'mixed() || null',\n  },\n})\nexport class SelectDirective\n  extends AccessibleNameControlDirective\n  implements FormValueControl<unknown>, FormFieldControl\n{\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private hostElement = injectHostElement();\n\n  public value = model<unknown | unknown[] | null>(null);\n  /** View state for a field whose source values disagree. The raw form value stays untouched. */\n  public mixed = model(false);\n  public touched = model(false);\n  public open = model(false);\n  public multiple = input(false, { transform: booleanAttribute });\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n  public placeholder = input('');\n  /** Trigger text shown while `mixed` is set. */\n  public mixedLabel = input<string | null>(null);\n\n  /**\n   * Data-driven options: the select owns the option rows instead of the consumer projecting\n   * `et-select-option`s. Values must be unique.\n   */\n  public options = input<readonly SelectOptionData[] | null>(null);\n\n  /**\n   * Decides whether an option's value and a value in the model are the same choice - set it when\n   * values are objects that are not the same instance (e.g. `(a, b) => a.id === b.id`). Only\n   * called with two non-null values; identical values always match. Defaults to `===`.\n   */\n  public compareWith = input<SelectCompareWith<never>>(referenceEquality);\n\n  public filterModeInput = input<SelectFilterMode>(SELECT_FILTER_MODES.INTERNAL, { alias: 'filterMode' });\n  /** Enter with a search query that matches no option commits the raw query string as the value. */\n  public allowCustomValues = input(false, { transform: booleanAttribute });\n  /**\n   * Single characters that commit the pending search query as a custom value the moment they\n   * are typed (e.g. `[',']`), and split pasted text in multi mode. Only with `allowCustomValues`.\n   */\n  public customValueSeparators = input<string[]>([]);\n  /** Maps raw text to the stored custom value - return `null` to reject. Defaults to trimming. */\n  public normalizeCustomValue = input<(raw: string) => string | null>(defaultNormalizeCustomValue);\n  /**\n   * Commits a pending search query as a custom value when the panel closes (Tab, outside\n   * click) instead of discarding it. An Escape close never commits - it clears the query first.\n   */\n  public commitCustomValueOnClose = input(false, { transform: booleanAttribute });\n  /** Maximum number of selected values (multi select) - further adds are ignored. */\n  public maxSelection = input<number | undefined>(undefined);\n  /** Renders an \"Add new\" row in `et-select`'s panel - clicking it emits `addNew`. */\n  public allowAddNew = input(false, { transform: booleanAttribute });\n  /** Async option state - rendered by `et-select` as a loading row inside the panel. */\n  public loadingInput = input(false, { alias: 'loading', transform: booleanAttribute });\n  /** Async option state - rendered by `et-select` as an error row inside the panel. */\n  public errorInput = input<string | null>(null, { alias: 'error' });\n  /** Async option state - `et-select` renders a load-more control emitting `loadMore`. */\n  public hasMoreItemsInput = input(false, { alias: 'hasMoreItems', transform: booleanAttribute });\n  /** Whether the panel mirrors the anchor's width. Off for compact triggers (e.g. a country picker). */\n  public mirrorPanelWidth = input(true, { transform: booleanAttribute });\n  /**\n   * Fire-and-forget picker mode: committing an option emits `pickOption` without ever writing\n   * `value`, so the field never displays a value of its own (no chips, no label, no clear) and can\n   * feed an external list without the set-then-clear dance. Bind `value` to that list to check the\n   * picked options in the panel.\n   */\n  public pickOnly = input(false, { transform: booleanAttribute });\n  /**\n   * Renders a tri-state \"Select all\" row above the options of a multi select. It adds or removes\n   * every visible, enabled option and leaves disabled options and values without a visible option\n   * as they are. Ignored for single and `pickOnly` selects.\n   */\n  public selectAll = input(false, { transform: booleanAttribute });\n\n  public queryChange = output<string>();\n  public loadMore = output<void>();\n  /** The user picked the \"Add new\" row (`allowAddNew`). Emits the current search query for prefilling. */\n  public addNew = output<string>();\n  /**\n   * A single select - or a `pickOnly` multi select - committed an option, carrying the picked\n   * value. In `pickOnly` mode this is the only pick signal and `value` is never mutated;\n   * otherwise it fires alongside the normal value selection.\n   */\n  public pickOption = output<unknown>();\n\n  private valuesMatch = computed<SelectCompareWith>(() => {\n    const compareWith = this.compareWith() as SelectCompareWith;\n\n    return (a, b) => a === b || (a !== null && a !== undefined && b !== null && b !== undefined && compareWith(a, b));\n  });\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  /**\n   * An async option source pushed in by `[etSelectOptions]` (from `selectOptionsFromQuery` /\n   * `selectOptionsFromV2Query`). `null` when the select is wired manually.\n   * @internal\n   */\n  public asyncOptions = signal<SelectAsyncOptions | null>(null);\n\n  /** How a search query filters. Forced to `external` while an `[etSelectOptions]` source is set. */\n  public filterMode = computed<SelectFilterMode>(() =>\n    this.asyncOptions() ? SELECT_FILTER_MODES.EXTERNAL : this.filterModeInput(),\n  );\n  /** Async option state - rendered by `et-select` as a loading row. From `[etSelectOptions]` if set. */\n  public loading = computed(() => this.asyncOptions()?.loading() ?? this.loadingInput());\n\n  /**\n   * `loading()`, held back so a request that resolves quickly never flashes an indicator. Drive what\n   * the reader *sees* off this - the spinner, the busy bar - and geometry off `loading()`, so the\n   * panel takes its final height from the first frame instead of growing into it.\n   */\n  public showLoadingIndicator = signalDeferredLoading(this.loading);\n  /** Async option state - rendered by `et-select` as an error row. From `[etSelectOptions]` if set. */\n  public error = computed(() => this.asyncOptions()?.error() ?? this.errorInput());\n  /** Async option state - drives the load-more control. From `[etSelectOptions]` if set. */\n  public hasMoreItems = computed(() => this.asyncOptions()?.hasMore() ?? this.hasMoreItemsInput());\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  private effectiveValues = computed<readonly unknown[]>(() => {\n    if (this.mixed() || this.pickOnly()) {\n      return [];\n    }\n\n    const value = this.value();\n\n    return Array.isArray(value) ? value : value === null || value === undefined ? [] : [value];\n  });\n\n  public hasValue = computed(() => this.mixed() || this.effectiveValues().length > 0);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.SELECT);\n\n  /** @internal */\n  public triggerFocused = signal(false);\n  public focused = computed(() => this.triggerFocused() || this.open());\n\n  /** @internal */\n  public expanded = computed(() => this.open());\n\n  /** @internal */\n  public registeredTrigger = signal<SelectTriggerDirective | null>(null);\n  /** @internal */\n  public registeredSurface = signal<SelectSurfaceDirective | null>(null);\n  /** @internal */\n  public registeredListbox = signal<SelectListboxDirective | null>(null);\n  /** @internal */\n  public registeredValueTemplate = signal<SelectValueDirective | null>(null);\n  /** @internal */\n  public registeredSearch = signal<SelectSearchDirective | null>(null);\n  /** @internal */\n  public mixedLabelId = signal<string | null>(null);\n  /** @internal */\n  public registeredLoadingTemplate = signal<SelectLoadingDirective | null>(null);\n  /** @internal */\n  public registeredErrorTemplate = signal<SelectErrorDirective | null>(null);\n  /** @internal */\n  public registeredEmptyTemplate = signal<SelectEmptyDirective | null>(null);\n  /** @internal */\n  public registeredOptionTemplate = signal<SelectOptionTemplateDirective | null>(null);\n  /** @internal The scrollable viewport that data-driven rendering windows against. */\n  public registeredViewport = signal<SelectViewportDirective | null>(null);\n  /** @internal The option that holds virtual focus while the listbox is open. */\n  public activeItem = signal<SelectItem | null>(null);\n  /** @internal How the current active item was set. */\n  public activeItemSource = signal<'keyboard' | 'pointer'>('keyboard');\n\n  public selection = createSelectionState<unknown, SelectItem>({\n    value: this.value,\n    multiple: this.multiple,\n    disabled: this.disabled,\n    compareWith: this.valuesMatch,\n  });\n\n  public activeId = computed(() => this.activeItem()?.id() ?? null);\n  public listboxId = computed(() => this.registeredListbox()?.id ?? null);\n\n  /** @internal */\n  public overlayRef = signal<AnchoredPanelOverlayRef | null>(null);\n  public isMounted = computed(() => this.overlayRef() !== null);\n\n  private panel = createAnchoredPanelController({\n    canOpen: computed(() => !this.disabled()),\n    open: this.open,\n    overlayRef: this.overlayRef,\n    surface: this.registeredSurface,\n    anchor: () => this.resolveAnchorElement(),\n    config: ({ origin }) => {\n      const context: SelectSurfaceContext = { $implicit: this, select: this, close: () => this.hide() };\n\n      return {\n        bindings: [\n          inputBinding('template', () => this.registeredSurface()?.templateRef),\n          inputBinding('context', () => context),\n        ],\n        mode: 'non-modal',\n        hasBackdrop: false,\n        autoFocus: false,\n        restoreFocus: false,\n        // both interactive closes are owned by the document-level listeners below: the first\n        // Escape only clears a search query, and a pointerdown inside the field (e.g. the\n        // inline search input) must not close - the runtime's handlers cannot know either\n        closeOnEscape: false,\n        closeOnOutsidePointer: false,\n        origin,\n        panelClass: 'et-select-overlay-pane',\n        strategies: anchoredOverlayStrategy({\n          containerClass: [\n            'et-overlay--anchored',\n            'et-overlay--select',\n            'et-floating-panel',\n            // when the panel does not mirror the field width the pane is content-sized, so the\n            // panel needs a max-inline-size guard; when it does mirror, the pane width already\n            // pins the panel to the field and any cap would make wide fields stop matching\n            ...(this.mirrorPanelWidth() ? [] : ['et-overlay--select-content-width']),\n          ],\n          placement: 'bottom-start',\n          offset: 4,\n          viewportPadding: 8,\n          autoResize: true,\n          minAvailableSpace: 160,\n          mirrorWidth: this.mirrorPanelWidth(),\n        }),\n      };\n    },\n    onMounted: (overlayRef) => this.handlePanelMounted(overlayRef),\n    onBeforeClosed: () => this.handlePanelBeforeClosed(),\n    onAfterClosed: ({ byOutsidePointer, byFocusLeave }) => {\n      if (!byOutsidePointer && !byFocusLeave && this.document.activeElement === this.document.body) {\n        this.activate();\n      }\n    },\n    onDocumentKeydown: (event) => this.handlePanelKeydown(event),\n  });\n\n  private dataItems = signal<SelectItem[]>([]);\n  private dataItemRegistry = new Map<unknown, SelectDataItemEntry>();\n\n  public sortedItems = computed(() => {\n    const dataItems = this.dataItems();\n    const projectedItems = this.selection.items().filter((item) => !item.data);\n\n    // re-evaluate when the panel mounts - that's when the options gain document positions\n    this.isMounted();\n\n    if (projectedItems.some((item) => !item.element()?.isConnected)) {\n      return dataItems.length ? [...dataItems, ...projectedItems] : projectedItems;\n    }\n\n    const sortedProjected = sortByDomOrder(projectedItems, (item) => item.element() as HTMLElement);\n\n    return dataItems.length ? [...dataItems, ...sortedProjected] : sortedProjected;\n  });\n  /** The current search query (empty string when no search is registered). */\n  public query = computed(() => this.registeredSearch()?.query() ?? '');\n\n  /** @internal */\n  public normalizedQuery = computed(() => this.query().trim().toLowerCase());\n\n  /**\n   * Whether the request in flight is the next page the reader asked for, rather than a refetch of the\n   * list itself.\n   */\n  public loadingMore = linkedSignal<{ loading: boolean; query: string }, boolean>({\n    source: () => ({ loading: this.loading(), query: this.normalizedQuery() }),\n    computation: (source, previous) =>\n      source.loading && source.query === previous?.source.query && (previous?.value ?? false),\n  });\n\n  /**\n   * @internal The query the panel filters by. Live while open; frozen at its last value\n   * otherwise.\n   */\n  public panelFilterQuery = linkedSignal<{ open: boolean; query: string }, string>({\n    source: () => ({ open: this.open(), query: this.normalizedQuery() }),\n    computation: (source, previous) => (source.open || previous === undefined ? source.query : previous.value),\n  });\n\n  /** The options the panel currently shows - with `filterMode` `internal`, non-matching ones are excluded. */\n  public visibleItems = computed(() => {\n    const items = this.sortedItems();\n\n    if (this.filterMode() !== SELECT_FILTER_MODES.INTERNAL) {\n      return items;\n    }\n\n    const query = this.panelFilterQuery();\n\n    if (!query) {\n      return items;\n    }\n\n    return items.filter((item) => item.label().toLowerCase().includes(query));\n  });\n\n  public enabledItems = computed(() => this.visibleItems().filter((item) => !item.disabled()));\n\n  /** Whether the \"Select all\" row renders: `selectAll` on a multi select with at least one visible option. */\n  public showSelectAll = computed(\n    () =>\n      this.selectAll() && this.multiple() && !this.pickOnly() && this.visibleItems().some((item) => !item.custom?.()),\n  );\n\n  private selectAllTargets = computed(() => this.enabledItems().filter((item) => !item.custom?.()));\n\n  /** How many of the options the \"Select all\" row acts on are selected. */\n  public selectAllState = computed<'all' | 'some' | 'none'>(() => {\n    const targets = this.selectAllTargets();\n    const selectedCount = targets.filter((item) => this.isValueSelected(item.value())).length;\n\n    if (selectedCount === 0) {\n      return 'none';\n    }\n\n    return selectedCount === targets.length ? 'all' : 'some';\n  });\n\n  /** @internal The rendered \"Select all\" row, set by `etSelectAllOption`. */\n  public selectAllElement = signal<HTMLElement | null>(null);\n\n  /** @internal Holds virtual focus like an option, but is never registered with the selection. */\n  public selectAllItem: SelectItem = {\n    value: signal<unknown>(null).asReadonly(),\n    checked: signal(false),\n    disabled: computed(() => !this.selectAllTargets().length),\n    element: this.selectAllElement.asReadonly(),\n    id: signal(createComponentId('et-select-all-option')).asReadonly(),\n    label: computed(() => this.formFieldLabels().selectAll),\n  };\n\n  private navigableItems = computed(() =>\n    this.showSelectAll() && !this.selectAllItem.disabled()\n      ? [this.selectAllItem, ...this.enabledItems()]\n      : this.enabledItems(),\n  );\n  public selectedItems = computed(() => (this.mixed() ? [] : this.sortedItems().filter((item) => item.checked())));\n\n  /** @internal The query-visible slice of data-driven options - the virtual window renders these. */\n  public visibleDataItems = computed(() => this.visibleItems().filter((item) => !!item.data));\n\n  /** @internal Whether the data-driven rows are windowed. */\n  public windowsOptions = computed(() => this.visibleDataItems().length > VIRTUALIZATION_MIN_ITEMS);\n\n  /**\n   * The window over the data-driven rows: `paddingTop()`/`paddingBottom()` stand in for the\n   * scroll height of everything outside `virtualizedItems()` - apply them as block paddings\n   * around the rendered rows.\n   */\n  public virtualWindow = createVirtualWindow({\n    container: computed(() =>\n      this.windowsOptions() ? (this.registeredViewport()?.elementRef.nativeElement ?? null) : null,\n    ),\n    itemCount: computed(() => this.visibleDataItems().length),\n    estimateItemHeight: 36,\n    overscan: 5,\n  });\n\n  /**\n   * The windowed slice of data-driven options to render - every visible one while the list is\n   * short enough to render in full or no `etSelectViewport` is registered. Render with\n   * `etSelectVirtualOption` rows between the `virtualWindow` block paddings.\n   */\n  public virtualizedItems = computed(() => {\n    const items = this.visibleDataItems();\n    const { start, end } = this.virtualWindow.range();\n\n    return items.slice(start, end);\n  });\n\n  private pendingActiveScrollItem: SelectItem | null = null;\n\n  /** True once `maxSelection` is reached (multi select) - further adds are ignored. */\n  public isFull = computed(() => {\n    const maxSelection = this.maxSelection();\n\n    if (maxSelection === undefined || !this.multiple()) {\n      return false;\n    }\n\n    if (this.mixed()) {\n      return this.effectiveValues().length >= maxSelection;\n    }\n\n    const value = this.value();\n\n    return Array.isArray(value) && value.length >= maxSelection;\n  });\n\n  /**\n   * The normalized custom value the current search query would commit, or `null` when there\n   * is nothing to commit: custom values are off, the query is empty/rejected, the value is\n   * already selected, a visible option carries the same label, or the selection is full.\n   */\n  public customValueCandidate = computed(() => {\n    if (!this.allowCustomValues() || this.disabled() || this.readonly() || this.isFull()) {\n      return null;\n    }\n\n    const candidate = this.normalizeCustomValue()(this.query());\n\n    if (candidate === null) {\n      return null;\n    }\n\n    if (this.includesValue(this.effectiveValues(), candidate)) {\n      return null;\n    }\n\n    const loweredCandidate = candidate.toLowerCase();\n    const duplicatesOption = this.visibleItems().some(\n      (item) => !item.custom?.() && item.label().toLowerCase() === loweredCandidate,\n    );\n\n    return duplicatesOption ? null : candidate;\n  });\n\n  private labelCache = signal(new Map<unknown, string>());\n\n  /**\n   * One entry per selected value, resolved for display: the label comes from the live\n   * option, from a previously seen option, or - for string values without any option\n   * (custom values) - from the value itself. `item` is `null` when no live option\n   * carries the value.\n   */\n  public selectedEntries = computed<SelectSelectedEntry[]>(() => {\n    if (this.mixed()) {\n      return [];\n    }\n\n    const values = this.effectiveValues();\n    const items = this.sortedItems();\n    const cache = this.labelCache();\n    const valuesMatch = this.valuesMatch();\n\n    return values.map((entryValue) => {\n      const item = items.find((candidate) => valuesMatch(candidate.value(), entryValue)) ?? null;\n      const label =\n        item?.label() ||\n        this.findCachedLabel(cache, entryValue) ||\n        (typeof entryValue === 'string' ? entryValue : null);\n\n      return { value: entryValue, label, item };\n    });\n  });\n\n  /**\n   * The label(s) of the current value for trigger display. `null` when no label is\n   * known (show the placeholder).\n   */\n  public displayValue = computed(() => {\n    if (this.mixed()) {\n      return this.resolvedMixedLabel();\n    }\n\n    const labels = this.selectedEntries()\n      .map((entry) => entry.label)\n      .filter((label): label is string => label !== null);\n\n    return labels.length ? labels.join(', ') : null;\n  });\n\n  private typeahead = createTypeahead();\n\n  constructor() {\n    super();\n\n    mountTextFieldShellStyles();\n    mountFloatingPanelStyles();\n\n    const styleManager = injectStyleManager();\n    let hasMountedExtrasStyles = false;\n\n    // every render branch of et-select's panel-extras template must be covered here, or its row\n    // paints unstyled - the empty row shows for any open select whose options are all filtered away\n    effect(() => {\n      if (\n        hasMountedExtrasStyles ||\n        !(\n          this.loading() ||\n          this.error() !== null ||\n          this.hasMoreItems() ||\n          this.allowAddNew() ||\n          this.asyncOptions() !== null ||\n          (this.open() && !this.visibleItems().length)\n        )\n      ) {\n        return;\n      }\n\n      hasMountedExtrasStyles = true;\n      styleManager.mount(SelectExtrasStylesComponent);\n    });\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n\n    effect(() => {\n      const optionsData = this.options();\n      const usesReferenceEquality = this.compareWith() === referenceEquality;\n      const valuesMatch = this.valuesMatch();\n\n      untracked(() => {\n        const registry = this.dataItemRegistry;\n        const nextItems: SelectItem[] = [];\n        const seenValues = new Set<unknown>();\n        const isDuplicate = (value: unknown) =>\n          seenValues.has(value) ||\n          (!usesReferenceEquality && nextItems.some((item) => valuesMatch(item.value(), value)));\n        const findReusableEntry = (value: unknown) => {\n          const exact = registry.get(value);\n\n          if (exact || usesReferenceEquality) {\n            return exact;\n          }\n\n          for (const [registeredValue, candidate] of registry) {\n            if (!seenValues.has(registeredValue) && valuesMatch(registeredValue, value)) {\n              registry.delete(registeredValue);\n              registry.set(value, candidate);\n              candidate.value.set(value);\n\n              return candidate;\n            }\n          }\n\n          return undefined;\n        };\n\n        for (const data of optionsData ?? []) {\n          if (isDuplicate(data.value)) {\n            continue;\n          }\n\n          let entry = findReusableEntry(data.value);\n\n          seenValues.add(data.value);\n\n          if (entry) {\n            entry.label.set(data.label);\n            entry.disabledInput.set(data.disabled ?? false);\n            entry.data.set(data);\n          } else {\n            entry = this.createDataItem(data);\n            registry.set(data.value, entry);\n            this.selection.registerItem(entry.item);\n          }\n\n          nextItems.push(entry.item);\n        }\n\n        for (const [value, entry] of registry) {\n          if (seenValues.has(value)) {\n            continue;\n          }\n\n          registry.delete(value);\n\n          if (this.activeItem() === entry.item) {\n            this.activeItem.set(null);\n          }\n\n          if (this.pendingActiveScrollItem === entry.item) {\n            this.pendingActiveScrollItem = null;\n          }\n\n          this.selection.unregisterItem(entry.item);\n        }\n\n        this.dataItems.set(nextItems);\n      });\n    });\n\n    effect(() => {\n      const value = this.value();\n      const selectedValues = Array.isArray(value) ? value : value === null || value === undefined ? [] : [value];\n      const items = this.selection.items();\n      const valuesMatch = this.valuesMatch();\n\n      const liveLabels = new Map<unknown, string>();\n\n      for (const selectedValue of selectedValues) {\n        const item = items.find((candidate) => valuesMatch(candidate.value(), selectedValue));\n\n        if (item) {\n          liveLabels.set(selectedValue, item.label());\n        }\n      }\n\n      untracked(() => {\n        this.labelCache.update((cache) => {\n          const next = new Map<unknown, string>();\n\n          for (const selectedValue of selectedValues) {\n            const label = liveLabels.get(selectedValue) ?? this.findCachedLabel(cache, selectedValue);\n\n            if (label !== undefined) {\n              next.set(selectedValue, label);\n            }\n          }\n\n          return next;\n        });\n      });\n    });\n\n    effect(() => {\n      const enabled = this.enabledItems();\n      const navigable = this.navigableItems();\n      const isOpen = this.open();\n\n      untracked(() => {\n        if (!isOpen) {\n          return;\n        }\n\n        const active = this.activeItem();\n\n        if (active && navigable.includes(active)) {\n          return;\n        }\n\n        const next =\n          (!active ? this.selectedItems().find((item) => enabled.includes(item)) : null) ?? enabled[0] ?? null;\n\n        if (next) {\n          this.setActiveItem(next, { scroll: !active });\n        } else {\n          this.activeItem.set(null);\n        }\n      });\n    });\n\n    toObservable(computed(() => this.formField?.controlFrameElement() ?? null))\n      .pipe(\n        switchMap((frame) => (frame ? fromEvent<MouseEvent>(frame, 'click') : EMPTY)),\n        tap((event) => this.handleFrameClick(event)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    this.destroyRef.onDestroy(() => {\n      this.typeahead.destroy();\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.registeredTrigger()) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.MISSING_TRIGGER,\n            '[SelectDirective] Select trigger not found. Add an element with etSelectTrigger inside the [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n\n        if (!this.registeredSurface()) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.MISSING_SURFACE,\n            '[SelectDirective] Select surface not found. Add <ng-template etSelectSurface> inside the [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal Whether a value belongs to the effective selection (always false while mixed). */\n  public isValueSelected(value: unknown) {\n    if (this.mixed()) {\n      return false;\n    }\n\n    const current = this.value();\n    const valuesMatch = this.valuesMatch();\n\n    return Array.isArray(current)\n      ? current.some((candidate) => valuesMatch(value, candidate))\n      : valuesMatch(value, current);\n  }\n\n  public show() {\n    if (this.disabled() || this.readonly() || this.open()) {\n      return;\n    }\n\n    this.open.set(true);\n  }\n\n  public hide() {\n    if (this.open()) {\n      this.open.set(false);\n    } else {\n      this.panel.close();\n    }\n  }\n\n  public toggle() {\n    if (this.open()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  public activate() {\n    this.focus({ preventScroll: true });\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    const search = this.registeredSearch();\n\n    if (search) {\n      search.focus(options);\n\n      return;\n    }\n\n    this.registeredTrigger()?.elementRef.nativeElement.focus(options);\n  }\n\n  /** @internal Commits an option as the (or a) selected value. Single select closes afterwards. */\n  public commitOption(item: SelectItem) {\n    if (this.disabled() || this.readonly() || item.disabled()) {\n      return;\n    }\n\n    if (item === this.selectAllItem) {\n      this.toggleSelectAll();\n\n      return;\n    }\n\n    if (this.mixed()) {\n      if (!this.commitMixedOption(item)) {\n        return;\n      }\n\n      this.registeredSearch()?.clear();\n\n      if (!this.multiple()) {\n        this.hide();\n      }\n\n      return;\n    }\n\n    if (this.multiple()) {\n      if (this.pickOnly()) {\n        this.pickOption.emit(item.value());\n        this.registeredSearch()?.clear();\n\n        return;\n      }\n\n      // toggle by value arithmetic instead of the registry (`selection.select` recomputes the\n      // array from registered options only, silently dropping values without a live option -\n      // custom values, or options an external filter removed)\n      const itemValue = item.value();\n      const current = this.value();\n      const values = Array.isArray(current) ? current : [];\n      const adding = !this.includesValue(values, itemValue);\n\n      if (adding && this.isFull()) {\n        return;\n      }\n\n      const valuesMatch = this.valuesMatch();\n\n      this.value.set(\n        adding ? [...values, itemValue] : values.filter((candidate) => !valuesMatch(itemValue, candidate)),\n      );\n\n      if (adding) {\n        this.registeredSearch()?.clear();\n      }\n    } else {\n      this.pickSingleOption(item);\n      // cleared before the close so a `commitCustomValueOnClose` close cannot re-commit\n      // the leftover query over the just-picked option\n      this.registeredSearch()?.clear();\n      this.hide();\n    }\n  }\n\n  /**\n   * Selects every visible, enabled option (up to `maxSelection`), or deselects them once all are\n   * selected - wired to the \"Select all\" row.\n   */\n  public toggleSelectAll() {\n    if (this.disabled() || this.readonly() || !this.showSelectAll()) {\n      return;\n    }\n\n    const targets = this.selectAllTargets();\n    const current = this.value();\n    const values = this.mixed() || !Array.isArray(current) ? [] : current;\n\n    if (this.selectAllState() === 'all') {\n      const valuesMatch = this.valuesMatch();\n\n      this.value.set(values.filter((value) => !targets.some((item) => valuesMatch(item.value(), value))));\n\n      return;\n    }\n\n    const room = (this.maxSelection() ?? Infinity) - values.length;\n    const additions = targets\n      .map((item) => item.value())\n      .filter((value) => !this.includesValue(values, value))\n      .slice(0, Math.max(0, room));\n\n    this.value.set([...values, ...additions]);\n    this.mixed.set(false);\n  }\n\n  /** @internal Emits `loadMore` - wired to the panel's load-more control. */\n  public requestLoadMore() {\n    if (this.loading()) {\n      return;\n    }\n\n    // marked before the emit: the consumer may turn `loading` on synchronously from the handler,\n    // and the flag has to be set by the time that lands or the panel reports the wrong wait\n    this.loadingMore.set(true);\n    this.loadMore.emit();\n  }\n\n  /**\n   * Emits `addNew` with the current search query and closes the panel - wired to\n   * the panel's \"Add new\" row (`allowAddNew`). The consumer reacts by e.g. opening a\n   * creation dialog and, once the new option exists, setting it as the value.\n   */\n  public requestAddNew() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    this.addNew.emit(this.query().trim());\n    // the query was handed off - it must not double as a custom value when the close commits\n    this.registeredSearch()?.clear();\n    this.hide();\n  }\n\n  /** Deselects a selected option (multi select) - e.g. from a chip's remove button. */\n  public deselectOption(item: SelectItem) {\n    if (item.disabled() || !item.checked()) {\n      return;\n    }\n\n    this.deselectValue(item.value());\n  }\n\n  /** Clears the entire selection and any search query - wired to `et-select`'s clear button. */\n  public clearValue() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    this.value.set(this.multiple() ? [] : null);\n    this.mixed.set(false);\n\n    const search = this.registeredSearch();\n\n    if (search && this.query()) {\n      search.clear();\n    }\n  }\n\n  /** Deselects by value - covers selected values without a live option (e.g. custom values). */\n  public deselectValue(value: unknown) {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (this.mixed()) {\n      return;\n    }\n\n    const valuesMatch = this.valuesMatch();\n    const entry = this.selectedEntries().find((candidate) => valuesMatch(candidate.value, value));\n\n    if (entry?.item && entry.item.disabled()) {\n      return;\n    }\n\n    if (this.multiple()) {\n      const current = this.value();\n      const values = Array.isArray(current) ? current : [];\n\n      this.value.set(values.filter((candidate) => !valuesMatch(candidate, value)));\n    } else {\n      this.value.set(null);\n    }\n  }\n\n  /** @internal */\n  public setActiveItem(item: SelectItem, options?: { scroll?: boolean; source?: 'keyboard' | 'pointer' }) {\n    this.activeItem.set(item);\n    this.activeItemSource.set(options?.source ?? 'keyboard');\n    this.pendingActiveScrollItem = null;\n\n    if (options?.scroll === false) {\n      return;\n    }\n\n    const element = item.element();\n\n    if (element) {\n      element.scrollIntoView?.({ block: 'nearest' });\n\n      return;\n    }\n\n    const index = this.visibleDataItems().indexOf(item);\n\n    if (index !== -1) {\n      this.pendingActiveScrollItem = item;\n      this.virtualWindow.scrollToIndex(index);\n    }\n  }\n\n  /** @internal A rendered virtual row attaches its element to its item while it is windowed in. */\n  public attachVirtualOptionElement(item: SelectItem, element: HTMLElement) {\n    const entry = this.dataItemRegistry.get(item.value());\n\n    if (!entry || entry.item !== item) {\n      return;\n    }\n\n    entry.element.set(element);\n    this.virtualWindow.measureItem(element);\n\n    if (this.pendingActiveScrollItem === item) {\n      this.pendingActiveScrollItem = null;\n      element.scrollIntoView?.({ block: 'nearest' });\n    }\n  }\n\n  /** @internal */\n  public detachVirtualOptionElement(item: SelectItem, element: HTMLElement) {\n    const entry = this.dataItemRegistry.get(item.value());\n\n    if (!entry || entry.item !== item || entry.element() !== element) {\n      return;\n    }\n\n    entry.element.set(null);\n  }\n\n  /** @internal Keyboard input arrives on the trigger - DOM focus never enters the listbox. */\n  public handleTriggerKeydown(event: KeyboardEvent) {\n    if (event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    if (!this.open()) {\n      this.handleClosedKeydown(event);\n\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        this.moveActive(1);\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        this.moveActive(-1);\n\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        this.setActiveToEdge('first');\n\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        this.setActiveToEdge('last');\n\n        return;\n      }\n      case ' ': {\n        if (this.registeredSearch()?.isFocused()) {\n          return;\n        }\n\n        event.preventDefault();\n        this.commitActiveOrClose();\n\n        return;\n      }\n      case 'Enter': {\n        event.preventDefault();\n        this.commitActiveOrClose();\n\n        return;\n      }\n      case 'Tab': {\n        // a Tab out of a panel-hosted control must reach the panel controller's tab-out close,\n        // which defers the close past the browser's focus move and reports it as a focus leave.\n        // Closing here would tear the pane down first and hand focus back to the field.\n        if (this.isEventInsideThePane(event)) {\n          return;\n        }\n\n        this.panel.closeByFocusLeave();\n\n        return;\n      }\n      case 'Escape': {\n        // handled centrally by the document-level escape listener (clear query, then close)\n        return;\n      }\n      default: {\n        if (event.key.length !== 1 || this.registeredSearch()?.isFocused()) {\n          return;\n        }\n\n        const match = this.findTypeaheadMatch(event.key);\n\n        if (match) {\n          this.setActiveItem(match);\n        }\n\n        return;\n      }\n    }\n  }\n\n  /**\n   * Commits raw text as a custom value: normalized via `normalizeCustomValue`, appended in\n   * multi mode (duplicates and adds beyond `maxSelection` are rejected), set and closed in\n   * single mode. Returns whether the value was committed.\n   */\n  public commitCustomValue(raw: string) {\n    const committed = this.applyCustomValue(raw);\n\n    if (committed && !this.multiple()) {\n      this.hide();\n    }\n\n    return committed;\n  }\n\n  private pickSingleOption(item: SelectItem) {\n    this.pickOption.emit(item.value());\n\n    if (!this.pickOnly()) {\n      this.selection.select(item);\n    }\n  }\n\n  private commitMixedOption(item: SelectItem) {\n    if (this.isFull()) {\n      return false;\n    }\n\n    this.value.set(this.multiple() ? [item.value()] : item.value());\n    this.mixed.set(false);\n\n    return true;\n  }\n\n  private includesValue(values: readonly unknown[], value: unknown) {\n    const valuesMatch = this.valuesMatch();\n\n    return values.some((candidate) => valuesMatch(candidate, value));\n  }\n\n  private findCachedLabel(cache: ReadonlyMap<unknown, string>, value: unknown) {\n    const exact = cache.get(value);\n\n    if (exact !== undefined) {\n      return exact;\n    }\n\n    const valuesMatch = this.valuesMatch();\n\n    for (const [cachedValue, label] of cache) {\n      if (valuesMatch(cachedValue, value)) {\n        return label;\n      }\n    }\n\n    return undefined;\n  }\n\n  private createDataItem(data: SelectOptionData): SelectDataItemEntry {\n    const value = signal(data.value);\n    const label = signal(data.label);\n    const disabledInput = signal(data.disabled ?? false);\n    const element = signal<HTMLElement | null>(null);\n    const dataSignal = signal(data);\n\n    const selected = computed(() => this.isValueSelected(value()));\n\n    const item: SelectItem = {\n      value: value.asReadonly(),\n      checked: signal(false),\n      disabled: computed(() => disabledInput() || (this.isFull() && !selected())),\n      element: element.asReadonly(),\n      id: signal(createComponentId('et-select-option')).asReadonly(),\n      label: label.asReadonly(),\n      data: dataSignal.asReadonly(),\n    };\n\n    return { item, value, label, disabledInput, element, data: dataSignal };\n  }\n\n  private handleClosedKeydown(event: KeyboardEvent) {\n    const searchFocused = this.registeredSearch()?.isFocused() ?? false;\n\n    switch (event.key) {\n      case 'Enter':\n      case ' ': {\n        if (searchFocused) {\n          return;\n        }\n\n        event.preventDefault();\n        this.show();\n\n        return;\n      }\n      case 'ArrowDown':\n      case 'ArrowUp': {\n        event.preventDefault();\n        this.show();\n\n        return;\n      }\n      default: {\n        if (event.key.length !== 1 || searchFocused) {\n          return;\n        }\n\n        const match = this.findTypeaheadMatch(event.key);\n\n        if (match) {\n          event.preventDefault();\n          this.commitOptionWhileClosed(match);\n        }\n\n        return;\n      }\n    }\n  }\n\n  private commitActiveOrClose() {\n    const item = this.activeItem();\n\n    if (item) {\n      this.commitOption(item);\n\n      return;\n    }\n\n    if (this.allowCustomValues() && this.commitCustomValue(this.query())) {\n      return;\n    }\n\n    this.hide();\n  }\n\n  // the value write shared by `commitCustomValue` and the close-time commit - the latter\n  // must not call `hide()` while the panel is already closing\n  private applyCustomValue(raw: string) {\n    if (this.disabled() || this.readonly() || this.isFull()) {\n      return false;\n    }\n\n    const value = this.normalizeCustomValue()(raw);\n\n    if (value === null) {\n      return false;\n    }\n\n    this.labelCache.update((cache) => new Map(cache).set(value, value));\n\n    if (this.multiple()) {\n      const current = this.value();\n      const values = this.mixed() ? [] : Array.isArray(current) ? current : [];\n\n      if (this.includesValue(values, value)) {\n        return false;\n      }\n\n      this.value.set([...values, value]);\n      this.mixed.set(false);\n      this.registeredSearch()?.clear();\n    } else {\n      this.value.set(value);\n      this.mixed.set(false);\n    }\n\n    return true;\n  }\n\n  private commitOptionWhileClosed(item: SelectItem) {\n    if (this.disabled() || this.readonly() || item.disabled()) {\n      return;\n    }\n\n    if (this.mixed()) {\n      this.commitMixedOption(item);\n\n      return;\n    }\n\n    this.pickSingleOption(item);\n  }\n\n  private findTypeaheadMatch(character: string) {\n    const query = this.typeahead.append(character);\n\n    return this.enabledItems().find((item) => item.label().toLowerCase().startsWith(query)) ?? null;\n  }\n\n  private moveActive(delta: 1 | -1) {\n    const items = this.navigableItems();\n\n    if (!items.length) {\n      return;\n    }\n\n    const current = this.activeItem();\n    const index = current ? items.indexOf(current) : -1;\n\n    if (index === -1) {\n      const target = this.selectedItems().find((item) => !item.disabled()) ?? null;\n\n      if (target) {\n        this.setActiveItem(target);\n      } else {\n        this.setActiveToEdge(delta === 1 ? 'first' : 'last');\n      }\n\n      return;\n    }\n\n    // deliberately no wrap - matches the ARIA select-only combobox pattern\n    const next = items[index + delta];\n\n    if (next) {\n      this.setActiveItem(next);\n    } else if (delta === 1 && this.hasMoreItems()) {\n      this.requestLoadMore();\n    }\n  }\n\n  private setActiveToEdge(edge: 'first' | 'last') {\n    const items = this.navigableItems();\n    const target = edge === 'first' ? items[0] : items.at(-1);\n\n    if (target) {\n      this.setActiveItem(target);\n    }\n  }\n\n  private isEventInsideThePane(event: Event) {\n    const pane = this.overlayRef()?.elements?.paneElement;\n    const target = event.target;\n\n    return !!pane && target instanceof Node && pane.contains(target);\n  }\n\n  private resolveAnchorElement() {\n    return this.formField?.controlFrameElement() ?? this.registeredTrigger()?.elementRef.nativeElement;\n  }\n\n  private handleFrameClick(event: MouseEvent) {\n    const target = event.target;\n    const frame = event.currentTarget;\n\n    if (!(target instanceof HTMLElement) || !(frame instanceof HTMLElement) || this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (this.registeredTrigger()?.elementRef.nativeElement.contains(target)) {\n      return;\n    }\n\n    if (hitsInteractiveElement(target, frame)) {\n      return;\n    }\n\n    const search = this.registeredSearch();\n\n    if (search) {\n      this.show();\n      search.focus();\n\n      return;\n    }\n\n    this.registeredTrigger()?.elementRef.nativeElement.focus({ preventScroll: true });\n    this.toggle();\n  }\n\n  private handlePanelMounted(overlayRef: AnchoredPanelOverlayRef) {\n    nextFrame(() => {\n      if (this.overlayRef() !== overlayRef) {\n        return;\n      }\n\n      const search = this.registeredSearch();\n\n      if (search && !search.isFocused()) {\n        search.focus();\n      }\n\n      search?.handleOpened();\n\n      if (this.activeItem()) {\n        return;\n      }\n\n      const target = this.selectedItems().find((item) => !item.disabled()) ?? this.enabledItems()[0] ?? null;\n\n      if (target) {\n        this.setActiveItem(target);\n      }\n    });\n  }\n\n  private handlePanelBeforeClosed() {\n    this.activeItem.set(null);\n    this.pendingActiveScrollItem = null;\n\n    if (this.allowCustomValues() && this.commitCustomValueOnClose()) {\n      this.applyCustomValue(this.query());\n    }\n\n    // a stale query would silently keep filtering the next open - cleared at close-start so the\n    // trigger's value display is correct during the leave animation\n    const search = this.registeredSearch();\n\n    if (search && this.query()) {\n      search.clear();\n    }\n  }\n\n  // Escape is handled here instead of by the overlay runtime: with a search input the first\n  // Escape only clears the query (the runtime's capture-phase handler would close before the\n  // input ever saw the key).\n  private handlePanelKeydown(event: KeyboardEvent) {\n    if (event.key !== 'Escape' || event.defaultPrevented) {\n      return;\n    }\n\n    event.preventDefault();\n\n    const search = this.registeredSearch();\n\n    if (search && this.query()) {\n      if (this.mixed()) {\n        search.restoreMixedDisplay();\n      } else {\n        search.clear();\n      }\n\n      return;\n    }\n\n    this.hide();\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n/**\n * The \"Select all\" row of a multi select (`selectAll`). Place it first inside the listbox; it takes\n * part in keyboard navigation like an option and reports `aria-checked=\"mixed\"` while only some\n * options are selected.\n */\n@Directive({\n  selector: '[etSelectAllOption]',\n  exportAs: 'etSelectAllOption',\n  host: {\n    role: 'option',\n    '[attr.id]': 'select?.selectAllItem.id()',\n    '[attr.aria-checked]': 'ariaChecked()',\n    '[attr.aria-disabled]': 'select?.selectAllItem.disabled() || null',\n    '[attr.data-active]': 'active() || null',\n    '[attr.data-active-source]': 'activeSource()',\n    '(click)': 'handleClick($event)',\n    '(mousedown)': '$event.preventDefault()',\n    '(pointerenter)': 'handlePointerEnter($event)',\n  },\n})\nexport class SelectAllOptionDirective {\n  protected select = inject(SelectDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public ariaChecked = computed(() => {\n    const state = this.select?.selectAllState() ?? 'none';\n\n    return state === 'some' ? 'mixed' : state === 'all';\n  });\n\n  public active = computed(() => !!this.select && this.select.activeItem() === this.select.selectAllItem);\n  protected activeSource = computed(() => (this.active() ? (this.select?.activeItemSource() ?? null) : null));\n\n  constructor() {\n    const select = this.select;\n    const element = this.elementRef.nativeElement;\n\n    if (select) {\n      select.selectAllElement.set(element);\n\n      inject(DestroyRef).onDestroy(() => {\n        if (select.selectAllElement() === element) {\n          select.selectAllElement.set(null);\n        }\n      });\n    }\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.SELECT_ALL_OPTION_OUTSIDE_SELECT,\n            '[SelectAllOptionDirective] etSelectAllOption must be placed inside an [etSelect] element.',\n            { element },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick(event: MouseEvent) {\n    const select = this.select;\n\n    if (!select || select.selectAllItem.disabled()) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      return;\n    }\n\n    select.commitOption(select.selectAllItem);\n  }\n\n  protected handlePointerEnter(event: PointerEvent) {\n    const select = this.select;\n\n    if (!select || event.pointerType === 'touch' || select.selectAllItem.disabled()) {\n      return;\n    }\n\n    select.setActiveItem(select.selectAllItem, { scroll: false, source: 'pointer' });\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n@Directive({\n  selector: '[etSelectListbox]',\n  exportAs: 'etSelectListbox',\n  host: {\n    role: 'listbox',\n    '[attr.aria-labelledby]': 'labelledBy()',\n    '[attr.aria-multiselectable]': 'multiselectable()',\n  },\n})\nexport class SelectListboxDirective {\n  /** @internal */\n  public select = inject(SelectDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public readonly id: string;\n\n  protected labelledBy = computed(\n    () => this.select?.labelId() ?? this.select?.registeredTrigger()?.elementRef.nativeElement.id ?? null,\n  );\n\n  protected multiselectable = computed(() => (this.select?.multiple() ? true : null));\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-select-listbox');\n    }\n\n    this.id = element.id;\n\n    registerSingleton(this.select?.registeredListbox, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.LISTBOX_OUTSIDE_SELECT,\n            '[SelectListboxDirective] etSelectListbox must be rendered inside the surface of an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, afterNextRender, computed, inject, input, signal } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n/** The subset of an option a group needs to track its visibility. */\nexport type SelectOptionGroupItem = {\n  filteredOut: () => boolean;\n};\n\n/**\n * Groups a set of `[etSelectOption]`s under a labelled `role=\"group\"` section. Purely\n * presentational - options still register flat with the select, so keyboard navigation and\n * typeahead run across the whole list.\n */\n@Directive({\n  selector: '[etSelectOptionGroup]',\n  exportAs: 'etSelectOptionGroup',\n  host: {\n    role: 'group',\n    '[attr.aria-labelledby]': 'labelledById()',\n    '[attr.aria-label]': 'labelledById() ? null : label() || null',\n    '[hidden]': 'isHidden()',\n    '[attr.data-hidden]': 'isHidden() || null',\n  },\n})\nexport class SelectOptionGroupDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n\n  /** The group's accessible name - also the default header text in `et-select-option-group`. */\n  public label = input('');\n\n  /** @internal Set by the rendered label element so `aria-labelledby` points at it. */\n  public labelledById = signal<string | null>(null);\n\n  private options = signal<readonly SelectOptionGroupItem[]>([]);\n\n  /** Whether any of the group's options are currently shown (false hides the whole group). */\n  public hasVisibleOptions = computed(() => {\n    const options = this.options();\n\n    return options.length === 0 || options.some((option) => !option.filteredOut());\n  });\n\n  public isHidden = computed(() => !this.hasVisibleOptions());\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.OPTION_GROUP_OUTSIDE_SELECT,\n            '[SelectOptionGroupDirective] etSelectOptionGroup must be placed inside an [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public registerOption(option: SelectOptionGroupItem) {\n    this.options.update((options) => [...options, option]);\n  }\n\n  /** @internal */\n  public unregisterOption(option: SelectOptionGroupItem) {\n    this.options.update((options) => options.filter((registered) => registered !== option));\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject, input } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\nimport { SelectItem, SelectOptionData } from './select.tokens';\n\nexport type SelectOptionTemplateContext<TOption extends SelectOptionData = SelectOptionData> = {\n  /** The option's source entry from the `options` input - extra fields included. */\n  $implicit: TOption;\n  item: SelectItem;\n};\n\n/**\n * Custom render template for the rows of a data-driven (`options` input) select. When\n * present, `et-select` renders this template as each option's label content instead of the\n * plain label text.\n */\n@Directive({\n  selector: 'ng-template[etSelectOptionTemplate]',\n  exportAs: 'etSelectOptionTemplate',\n})\nexport class SelectOptionTemplateDirective<TOption extends SelectOptionData = SelectOptionData> {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<SelectOptionTemplateContext<TOption>>>(TemplateRef);\n\n  /** Type witness only, to type `let-option` - bind the same array passed to the select's `[options]`. Never read. */\n  public options = input<readonly TOption[] | undefined>(undefined);\n\n  constructor() {\n    registerSingleton(this.select?.registeredOptionTemplate, this as unknown as SelectOptionTemplateDirective);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.OPTION_TEMPLATE_OUTSIDE_SELECT,\n            '[SelectOptionTemplateDirective] etSelectOptionTemplate must be placed inside an [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  // static on purpose (the lint ban excepts it): Angular's template type checker requires\n  // the context guard to be static - it types the `let-` bindings of the host ng-template\n  public static ngTemplateContextGuard<TOption extends SelectOptionData>(\n    _directive: SelectOptionTemplateDirective<TOption>,\n    _context: unknown,\n  ): _context is SelectOptionTemplateContext<TOption> {\n    return true;\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectOptionGroupDirective } from './select-option-group.directive';\nimport { SelectDirective } from './select.directive';\n\nconst UNBOUND_VALUE = /* @__PURE__ */ Symbol('et-select-option-unbound');\n\n@Directive({\n  selector: '[etSelectOption]',\n  exportAs: 'etSelectOption',\n  host: {\n    role: 'option',\n    '[attr.aria-selected]': 'selected()',\n    '[attr.aria-disabled]': 'isDisabled() || null',\n    '[attr.data-selected]': 'selected() || null',\n    '[attr.data-active]': 'active() || null',\n    '[attr.data-active-source]': 'activeSource()',\n    '[attr.data-filtered]': 'filteredOut() || null',\n    '(click)': 'handleClick($event)',\n    '(mousedown)': 'handleMousedown($event)',\n    '(pointerenter)': 'handlePointerEnter($event)',\n  },\n})\nexport class SelectOptionDirective {\n  private select = inject(SelectDirective, { optional: true });\n  private group = inject(SelectOptionGroupDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  public value = input.required<unknown>();\n  /** Display label. Falls back to the element's text content rendered on first paint. */\n  public labelInput = input('', { alias: 'label' });\n  public disabled = input(false, { transform: booleanAttribute });\n  /**\n   * Marks the option as the select's \"Create …\" row for the current `customValueCandidate` -\n   * it is excluded from the candidate's duplicate-label check (it would otherwise hide\n   * itself, since its label *is* the candidate).\n   */\n  public customValueOption = input(false, { transform: booleanAttribute });\n\n  private optionId = signal(createComponentId('et-select-option'));\n  private textLabel = signal('');\n\n  public label = computed(() => this.labelInput() || this.textLabel());\n  public checked = signal(false);\n\n  // the required `value` input throws until its binding executes - which never happens for\n  // projected options whose view is not rendered (a lazy, closed surface). Reading through\n  // this computed keeps registry-wide reads (value↔checked sync, label cache) crash-free.\n  private boundValue = computed(() => {\n    try {\n      return this.value();\n    } catch {\n      return UNBOUND_VALUE;\n    }\n  });\n\n  // derived from the select's value instead of `checked` (which the registry sync effect only\n  // writes after the first render) - the overlay's fresh option instances must paint their\n  // selected state correctly on the very first frame of the enter animation\n  public selected = computed(() => {\n    const value = this.boundValue();\n\n    if (!this.select) {\n      return this.checked();\n    }\n\n    if (value === UNBOUND_VALUE) {\n      return this.select.mixed() ? false : this.checked();\n    }\n\n    return this.select.isValueSelected(value);\n  });\n\n  /**\n   * The option's effective interactivity: its own `disabled` input, or - once `maxSelection`\n   * is reached in multi mode - every still-unselected option, so the remaining choices read\n   * as unavailable instead of silently ignoring clicks. Selected options stay enabled for\n   * deselection; keyboard navigation skips full options like any other disabled option.\n   */\n  public isDisabled = computed(() => {\n    if (this.disabled()) {\n      return true;\n    }\n\n    return !!this.select && this.select.isFull() && !this.selected();\n  });\n\n  private listItem = {\n    value: this.boundValue,\n    checked: this.checked,\n    disabled: this.isDisabled,\n    element: signal(this.elementRef.nativeElement).asReadonly(),\n    id: this.optionId.asReadonly(),\n    label: this.label,\n    custom: this.customValueOption,\n  };\n  public active = computed(() => this.select?.activeItem() === this.listItem);\n  protected activeSource = computed(() => (this.active() ? (this.select?.activeItemSource() ?? null) : null));\n\n  /** With internal filtering, true while the option does not match the search query. Hide it via CSS. */\n  public filteredOut = computed(() => {\n    const select = this.select;\n\n    if (!select || select.filterMode() !== 'internal') {\n      return false;\n    }\n\n    // panelFilterQuery, not the live query: the filter freezes while the panel animates out\n    const query = select.panelFilterQuery();\n\n    return !!query && !this.label().toLowerCase().includes(query);\n  });\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = this.optionId();\n    }\n\n    const select = this.select;\n\n    if (select) {\n      select.selection.registerItem(this.listItem);\n\n      this.destroyRef.onDestroy(() => {\n        if (select.activeItem() === this.listItem) {\n          select.activeItem.set(null);\n        }\n\n        select.selection.unregisterItem(this.listItem);\n      });\n    }\n\n    const group = this.group;\n\n    if (group) {\n      const groupItem = { filteredOut: () => this.filteredOut() };\n\n      group.registerOption(groupItem);\n      this.destroyRef.onDestroy(() => group.unregisterOption(groupItem));\n    }\n\n    afterNextRender(() => {\n      this.textLabel.set(element.textContent?.trim() ?? '');\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.OPTION_OUTSIDE_SELECT,\n            '[SelectOptionDirective] etSelectOption must be placed inside an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick(event: MouseEvent) {\n    if (this.isDisabled()) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      return;\n    }\n\n    this.select?.commitOption(this.listItem);\n  }\n\n  protected handleMousedown(event: MouseEvent) {\n    // DOM focus stays on the trigger - options only ever hold virtual focus\n    event.preventDefault();\n  }\n\n  protected handlePointerEnter(event: PointerEvent) {\n    if (event.pointerType === 'touch' || this.isDisabled()) {\n      return;\n    }\n\n    this.select?.setActiveItem(this.listItem, { scroll: false, source: 'pointer' });\n  }\n}\n","import { DestroyRef, Directive, OnInit, afterNextRender, inject, input } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectOptionsFromQuery } from '../select-options-from-query';\nimport { SelectDirective } from './select.directive';\n\n/**\n * Wires an async options bundle - the return value of `selectOptionsFromQuery` or\n * `selectOptionsFromV2Query` - into a select with a single binding, replacing the manual\n * per-input wiring. Push the bundle in and it forwards `loading`, `error` and `hasMoreItems`,\n * forces `filterMode` to `external`, and drives the bundle's `setQuery`/`loadMore` from the\n * select's `(queryChange)`/`(loadMore)` outputs. Render `options` yourself as before:\n *\n * ```html\n * <et-select [formField]=\"form.assignee\" [etSelectOptions]=\"users\">\n *   <input etSelectSearch placeholder=\"Search users\" />\n *   @for (user of users.options(); track user.id) {\n *     <et-select-option [value]=\"user.id\">{{ user.name }}</et-select-option>\n *   }\n * </et-select>\n * ```\n */\n@Directive({\n  selector: '[etSelectOptions]',\n  exportAs: 'etSelectOptions',\n})\nexport class SelectOptionsDirective implements OnInit {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n\n  /** The bundle from `selectOptionsFromQuery` / `selectOptionsFromV2Query`. */\n  public bundle = input.required<SelectOptionsFromQuery<unknown>>({ alias: 'etSelectOptions' });\n\n  constructor() {\n    const select = this.select;\n\n    if (select) {\n      this.destroyRef.onDestroy(() => select.asyncOptions.set(null));\n\n      outputToObservable(select.queryChange)\n        .pipe(\n          tap((query) => this.bundle().setQuery(query)),\n          takeUntilDestroyed(),\n        )\n        .subscribe();\n      outputToObservable(select.loadMore)\n        .pipe(\n          tap(() => this.bundle().loadMore()),\n          takeUntilDestroyed(),\n        )\n        .subscribe();\n    }\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.OPTIONS_OUTSIDE_SELECT,\n            '[SelectOptionsDirective] etSelectOptions must be placed on an [etSelect] / et-select element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public ngOnInit() {\n    // The factory bundle is created once (a field initializer), so a one-time push is enough -\n    // it overrides loading/error/hasMoreItems and forces filterMode to external while set.\n    this.select?.asyncOptions.set(this.bundle());\n  }\n}\n","import {\n  DOCUMENT,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  computed,\n  effect,\n  inject,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n/**\n * Opts a select into search. `et-select` renders the input inline in the trigger (combobox\n * pattern): typing opens the panel and filters.\n */\n@Directive({\n  selector: 'input[etSelectSearch]',\n  exportAs: 'etSelectSearch',\n  host: {\n    autocomplete: 'off',\n    role: 'combobox',\n    'aria-autocomplete': 'list',\n    'aria-haspopup': 'listbox',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.aria-controls]': 'controls()',\n    '[attr.aria-activedescendant]': 'activeDescendant()',\n    '[attr.aria-required]': 'select?.required() || null',\n    '[attr.aria-invalid]': 'select?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'describedBy()',\n    '[attr.aria-label]': 'select?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'select?.labelId() || null',\n    '[disabled]': 'select?.disabled() || false',\n    '[readOnly]': 'select?.readonly() || isFull()',\n    '(input)': 'handleInput()',\n    '(keydown)': 'handleKeydown($event)',\n    '(paste)': 'handlePaste($event)',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class SelectSearchDirective {\n  protected select = inject(SelectDirective, { optional: true });\n  private document = inject(DOCUMENT);\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  public query = model('');\n\n  private edited = signal(false);\n\n  protected expanded = computed(() => this.select?.open() ?? false);\n  protected controls = computed(() => (this.select?.open() ? this.select.listboxId() : null));\n  protected activeDescendant = computed(() => (this.select?.open() ? this.select.activeId() : null));\n  protected isFull = computed(() => this.select?.isFull() ?? false);\n  protected describedBy = computed(() => {\n    const select = this.select;\n\n    if (!select) {\n      return null;\n    }\n\n    const ids = [select.describedBy()];\n\n    if (select.mixed() && select.multiple() && this.isInlineInTrigger()) {\n      ids.push(select.mixedLabelId());\n    }\n\n    return ids.filter((id): id is string => !!id).join(' ') || null;\n  });\n\n  // the last placeholder this directive wrote - anything else on the element came from the\n  // consumer (a static attribute or their own binding) and owns it from then on\n  private writtenPlaceholder: string | null = null;\n\n  private fallbackPlaceholder = computed(() => {\n    const select = this.select;\n\n    if (!select || !this.isInlineInTrigger() || select.hasValue()) {\n      return '';\n    }\n\n    return select.placeholder();\n  });\n\n  constructor() {\n    registerSingleton(this.select?.registeredSearch, this);\n\n    effect(() => {\n      const placeholder = this.fallbackPlaceholder();\n      const element = this.elementRef.nativeElement;\n\n      if (element.placeholder && element.placeholder !== this.writtenPlaceholder) {\n        return;\n      }\n\n      this.writtenPlaceholder = placeholder;\n      element.placeholder = placeholder;\n    });\n\n    effect(() => {\n      const element = this.elementRef.nativeElement;\n      const query = this.query();\n      const select = this.select;\n      let text = query;\n\n      if (\n        select &&\n        !select.multiple() &&\n        (!select.registeredValueTemplate() || select.mixed() || select.focused()) &&\n        !query &&\n        !this.edited() &&\n        this.isInlineInTrigger()\n      ) {\n        text = select.displayValue() ?? '';\n      }\n\n      if (element.value !== text) {\n        element.value = text;\n      }\n    });\n\n    effect(() => {\n      const open = this.select?.open() ?? false;\n\n      untracked(() => {\n        if (!open) {\n          this.edited.set(false);\n        }\n      });\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.SEARCH_OUTSIDE_SELECT,\n            '[SelectSearchDirective] etSelectSearch must be placed inside an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public isFocused() {\n    return this.document.activeElement === this.elementRef.nativeElement;\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  /** @internal Selects a displayed value label on open, so typing replaces it (single select). */\n  public handleOpened() {\n    const select = this.select;\n\n    if (this.edited() || !select || select.multiple() || !this.isInlineInTrigger()) {\n      return;\n    }\n\n    const element = this.elementRef.nativeElement;\n\n    // a custom value template kept the resting input empty (the rich display showed instead) -\n    // now in edit mode the input becomes the editable label, so write it before the display\n    // effect catches up so it can be selected for replace-on-type\n    if (select.registeredValueTemplate() && !select.mixed() && !element.value) {\n      element.value = select.displayValue() ?? '';\n    }\n\n    if (element.value) {\n      element.select();\n    }\n  }\n\n  public clear() {\n    // no direct element.value write - the display effect owns the element (it may need to\n    // show the selected value's label instead of the empty query)\n    this.query.set('');\n    this.select?.queryChange.emit('');\n  }\n\n  /** @internal Restores and selects the masked label after Escape without changing normal search behavior. */\n  public restoreMixedDisplay() {\n    const select = this.select;\n\n    this.edited.set(false);\n    this.clear();\n\n    if (!select || select.multiple() || !this.isInlineInTrigger()) {\n      return;\n    }\n\n    // Signal effects update the value after this event. Write it eagerly so the selection\n    // range belongs to the restored label and the next keystroke replaces it.\n    const element = this.elementRef.nativeElement;\n    element.value = select.displayValue() ?? '';\n\n    if (element.value) {\n      element.select();\n    }\n  }\n\n  protected handleInput() {\n    const value = this.elementRef.nativeElement.value;\n    const select = this.select;\n\n    if (select?.allowCustomValues()) {\n      const lastChar = value.at(-1);\n\n      if (lastChar !== undefined && select.customValueSeparators().includes(lastChar)) {\n        const pending = value.slice(0, -1);\n\n        this.edited.set(true);\n        this.elementRef.nativeElement.value = pending;\n        this.query.set(pending);\n        select.queryChange.emit(pending);\n\n        if (!pending || !select.commitCustomValue(pending)) {\n          select.show();\n        }\n\n        return;\n      }\n    }\n\n    this.edited.set(true);\n    this.query.set(value);\n    select?.queryChange.emit(value);\n\n    if (!value && select && !select.multiple() && select.hasValue() && this.isInlineInTrigger()) {\n      if (select.mixed()) {\n        select.clearValue();\n      } else {\n        select.deselectValue(select.value());\n      }\n    }\n\n    select?.show();\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (event.key === 'Backspace' && !this.elementRef.nativeElement.value) {\n      const select = this.select;\n\n      if (!select || select.disabled() || select.readonly()) {\n        return;\n      }\n\n      if (select.mixed()) {\n        return;\n      }\n\n      const lastEntry = select.selectedEntries().at(-1);\n\n      if (lastEntry) {\n        event.preventDefault();\n        select.deselectValue(lastEntry.value);\n      }\n\n      return;\n    }\n\n    if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter' || event.key === 'Tab') {\n      this.select?.handleTriggerKeydown(event);\n    }\n  }\n\n  protected handlePaste(event: ClipboardEvent) {\n    const select = this.select;\n    const text = event.clipboardData?.getData('text/plain');\n\n    if (!select || !text || !select.allowCustomValues() || !select.multiple()) {\n      return;\n    }\n\n    const separators = select.customValueSeparators();\n\n    if (!separators.length && !text.includes('\\n')) {\n      return;\n    }\n\n    const pattern = new RegExp(\n      `[\\\\n${separators.map((separator) => separator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('')}]`,\n    );\n    const parts = text.split(pattern);\n\n    if (parts.length < 2) {\n      return;\n    }\n\n    event.preventDefault();\n\n    for (const part of parts) {\n      select.commitCustomValue(part);\n    }\n  }\n\n  protected handleFocus() {\n    this.select?.triggerFocused.set(true);\n  }\n\n  protected handleBlur() {\n    this.select?.triggerFocused.set(false);\n\n    if (!this.select?.open()) {\n      this.select?.touched.set(true);\n    }\n  }\n\n  private isInlineInTrigger() {\n    const trigger = this.select?.registeredTrigger()?.elementRef.nativeElement;\n\n    return !!trigger && trigger.contains(this.elementRef.nativeElement);\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\nconst assertInsideSelect = (\n  select: SelectDirective | null,\n  options: { directiveName: string; element: HTMLElement },\n) => {\n  const { directiveName, element } = options;\n\n  if (ngDevMode) {\n    afterNextRender(() => {\n      if (!select) {\n        throw new RuntimeError(\n          SELECT_ERROR_CODES.STATE_TEMPLATE_OUTSIDE_SELECT,\n          `[${directiveName}] Select state templates must be placed inside an [etSelect] element.`,\n          { element },\n        );\n      }\n    });\n  }\n};\n\n/** Replaces the default loading row rendered while the select's `loading` input is true. */\n@Directive({ selector: 'ng-template[etSelectLoading]' })\nexport class SelectLoadingDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.select?.registeredLoadingTemplate, this);\n\n    assertInsideSelect(this.select, { directiveName: 'SelectLoadingDirective', element: this.hostElement });\n  }\n}\n\nexport type SelectErrorContext = {\n  $implicit: string;\n};\n\n/** Replaces the default error row rendered while the select's `error` input is set. Context: the error text. */\n@Directive({ selector: 'ng-template[etSelectError]' })\nexport class SelectErrorDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<SelectErrorContext>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.select?.registeredErrorTemplate, this);\n\n    assertInsideSelect(this.select, { directiveName: 'SelectErrorDirective', element: this.hostElement });\n  }\n}\n\n/** Replaces the default empty row rendered when no options are visible. */\n@Directive({ selector: 'ng-template[etSelectEmpty]' })\nexport class SelectEmptyDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.select?.registeredEmptyTemplate, this);\n\n    assertInsideSelect(this.select, { directiveName: 'SelectEmptyDirective', element: this.hostElement });\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\nexport type SelectSurfaceContext = {\n  $implicit: SelectDirective;\n  select: SelectDirective;\n  close: () => void;\n};\n\n@Directive({\n  selector: 'ng-template[etSelectSurface]',\n  exportAs: 'etSelectSurface',\n})\nexport class SelectSurfaceDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<SelectSurfaceContext>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.select?.registeredSurface, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.SURFACE_OUTSIDE_SELECT,\n            '[SelectSurfaceDirective] etSelectSurface must be placed inside an [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError, createComponentId } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n@Directive({\n  selector: '[etSelectTrigger]',\n  exportAs: 'etSelectTrigger',\n  host: {\n    '[attr.role]': 'role()',\n    '[attr.aria-haspopup]': 'hasSearch() ? null : \"listbox\"',\n    '[attr.aria-expanded]': 'expanded()',\n    '[attr.aria-controls]': 'controls()',\n    '[attr.aria-activedescendant]': 'activeDescendant()',\n    '[attr.aria-required]': 'hasSearch() ? null : select?.required() || null',\n    '[attr.aria-invalid]': 'hasSearch() ? null : select?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'hasSearch() ? null : select?.describedBy() || null',\n    '[attr.aria-label]': 'select?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'labelledBy()',\n    '[attr.aria-disabled]': 'select?.disabled() || null',\n    '[attr.data-disabled]': 'select?.disabled() || null',\n    '[attr.data-readonly]': 'select?.readonly() || null',\n    '[attr.tabindex]': 'tabIndex()',\n    '[attr.data-select-open]': 'isOpen() || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class SelectTriggerDirective {\n  /** @internal */\n  public select = inject(SelectDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  protected hasSearch = computed(() => !!this.select?.registeredSearch());\n\n  protected role = computed(() => (this.hasSearch() ? null : 'combobox'));\n  protected expanded = computed(() => (this.hasSearch() ? null : (this.select?.open() ?? false)));\n  protected controls = computed(() => (!this.hasSearch() && this.select?.open() ? this.select.listboxId() : null));\n  protected activeDescendant = computed(() =>\n    !this.hasSearch() && this.select?.open() ? this.select.activeId() : null,\n  );\n\n  private readonly IS_NATIVELY_FOCUSABLE = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'A'].includes(\n    this.elementRef.nativeElement.tagName,\n  );\n\n  protected tabIndex = computed(() => {\n    if (this.IS_NATIVELY_FOCUSABLE || this.hasSearch()) {\n      return null;\n    }\n\n    return this.select?.disabled() ? -1 : 0;\n  });\n\n  protected labelledBy = computed(() => {\n    if (this.hasSearch()) {\n      return null;\n    }\n\n    const labelId = this.select?.labelId();\n\n    return labelId ? `${labelId} ${this.elementRef.nativeElement.id}` : null;\n  });\n\n  constructor() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.id) {\n      element.id = createComponentId('et-select-trigger');\n    }\n\n    registerSingleton(this.select?.registeredTrigger, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.TRIGGER_OUTSIDE_SELECT,\n            '[SelectTriggerDirective] etSelectTrigger must be placed inside an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public isOpen() {\n    return this.select?.open() ?? false;\n  }\n\n  protected handleClick() {\n    const search = this.select?.registeredSearch();\n\n    if (search) {\n      this.select?.show();\n      search.focus();\n\n      return;\n    }\n\n    this.select?.toggle();\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (this.select?.registeredSearch()?.isFocused()) {\n      return;\n    }\n\n    this.select?.handleTriggerKeydown(event);\n  }\n\n  protected handleFocus() {\n    this.select?.triggerFocused.set(true);\n  }\n\n  protected handleBlur() {\n    this.select?.triggerFocused.set(false);\n\n    if (!this.select?.open()) {\n      this.select?.touched.set(true);\n    }\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectSelectedEntry } from './select.tokens';\nimport { SelectDirective } from './select.directive';\n\nexport type SelectValueContext = {\n  /**\n   * One entry per selected value - `label` is the resolved display label and `item` the live\n   * option (or `null`, e.g. while an external filter hides it). Look up your own option data\n   * by `entry.value` to render rich content such as flags.\n   */\n  $implicit: SelectSelectedEntry[];\n  select: SelectDirective;\n};\n\n/**\n * Custom render template for the trigger's value area. When present, `et-select` renders\n * this template instead of its default single label / chips display, with the currently\n * selected items as context.\n */\n@Directive({\n  selector: 'ng-template[etSelectValue]',\n  exportAs: 'etSelectValue',\n})\nexport class SelectValueDirective {\n  private hostElement = injectHostElement();\n\n  private select = inject(SelectDirective, { optional: true });\n  public templateRef = inject<TemplateRef<SelectValueContext>>(TemplateRef);\n\n  constructor() {\n    registerSingleton(this.select?.registeredValueTemplate, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.VALUE_OUTSIDE_SELECT,\n            '[SelectValueDirective] etSelectValue must be placed inside an [etSelect] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  afterNextRender,\n  computed,\n  effect,\n  inject,\n  linkedSignal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError, signalElementDimensions } from '@ethlete/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\n\n/**\n * Marks the scrollable element that data-driven (`options` input) rendering windows\n * against. `et-select-panel` applies it to its own scroller - headless consumers put it\n * on theirs.\n */\n@Directive({\n  selector: '[etSelectViewport]',\n  exportAs: 'etSelectViewport',\n  host: {\n    '[style.min-inline-size.px]': 'minInlineSize()',\n  },\n})\nexport class SelectViewportDirective {\n  private select = inject(SelectDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private dimensions = signalElementDimensions(this.elementRef);\n\n  private locksWidth = computed(() => {\n    const select = this.select;\n\n    return !!select?.windowsOptions() && !select.mirrorPanelWidth();\n  });\n\n  private widthFloor = linkedSignal<string, number>({\n    source: () => this.select?.panelFilterQuery() ?? '',\n    computation: () => 0,\n  });\n\n  protected minInlineSize = computed(() => (this.locksWidth() ? this.widthFloor() || null : null));\n\n  constructor() {\n    registerSingleton(this.select?.registeredViewport, this);\n\n    effect(() => {\n      if (!this.locksWidth()) {\n        return;\n      }\n\n      const width = this.dimensions().offset?.width ?? 0;\n\n      if (width > untracked(this.widthFloor)) {\n        this.widthFloor.set(width);\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.VIEWPORT_OUTSIDE_SELECT,\n            '[SelectViewportDirective] etSelectViewport must be rendered inside the surface of an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, effect, inject, input, untracked } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { SELECT_ERROR_CODES } from '../select-errors';\nimport { SelectDirective } from './select.directive';\nimport { SelectItem } from './select.tokens';\n\n/**\n * Renders one select-owned item (an entry of `virtualizedItems()`, data-driven `options`\n * mode) as a listbox option. Unlike `etSelectOption` it registers nothing - the item\n * already lives in the select's registry; this directive wires the rendered row to it\n * (ARIA attributes, active/selected state, pointer handling) while the row is inside the\n * virtual window.\n */\n@Directive({\n  selector: '[etSelectVirtualOption]',\n  exportAs: 'etSelectVirtualOption',\n  host: {\n    role: 'option',\n    '[attr.id]': 'item().id()',\n    '[attr.aria-selected]': 'selected()',\n    '[attr.aria-disabled]': 'item().disabled() || null',\n    '[attr.data-selected]': 'selected() || null',\n    '[attr.data-active]': 'active() || null',\n    '[attr.data-active-source]': 'activeSource()',\n    '(click)': 'handleClick($event)',\n    '(mousedown)': 'handleMousedown($event)',\n    '(pointerenter)': 'handlePointerEnter($event)',\n  },\n})\nexport class SelectVirtualOptionDirective {\n  private select = inject(SelectDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public item = input.required<SelectItem>({ alias: 'etSelectVirtualOption' });\n\n  // derived from the select's value instead of the item's `checked` (which the registry sync\n  // effect writes after the fact) - a freshly windowed-in row must paint its selected state\n  // on its very first frame\n  public selected = computed(() => this.select?.isValueSelected(this.item().value()) ?? false);\n\n  public active = computed(() => this.select?.activeItem() === this.item());\n  protected activeSource = computed(() => (this.active() ? (this.select?.activeItemSource() ?? null) : null));\n\n  constructor() {\n    effect((onCleanup) => {\n      const item = this.item();\n      const select = this.select;\n\n      if (!select) {\n        return;\n      }\n\n      const element = this.elementRef.nativeElement;\n\n      untracked(() => select.attachVirtualOptionElement(item, element));\n      onCleanup(() => select.detachVirtualOptionElement(item, element));\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.select) {\n          throw new RuntimeError(\n            SELECT_ERROR_CODES.VIRTUAL_OPTION_OUTSIDE_SELECT,\n            '[SelectVirtualOptionDirective] etSelectVirtualOption must be placed inside an [etSelect] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick(event: MouseEvent) {\n    if (this.item().disabled()) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      return;\n    }\n\n    this.select?.commitOption(this.item());\n  }\n\n  protected handleMousedown(event: MouseEvent) {\n    event.preventDefault();\n  }\n\n  protected handlePointerEnter(event: PointerEvent) {\n    if (event.pointerType === 'touch' || this.item().disabled()) {\n      return;\n    }\n\n    this.select?.setActiveItem(this.item(), { scroll: false, source: 'pointer' });\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { CHECK_ICON, IconDirective, provideIcons } from '../../icon';\nimport { SelectAllOptionDirective } from './headless';\n\n/** The styled \"Select all\" row `et-select` renders for `selectAll`. Project the row's text. */\n@Component({\n  selector: 'et-select-all-option',\n  template: `\n    <span class=\"et-select-option-label\">\n      <ng-content />\n    </span>\n\n    <span class=\"et-select-option-check\">\n      @if (option.ariaChecked() === 'mixed') {\n        <span class=\"et-select-all-option-dash\" aria-hidden=\"true\"></span>\n      } @else {\n        <i etIcon=\"et-check\"></i>\n      }\n    </span>\n  `,\n  styleUrls: ['./select-option.component.css', './select-all-option.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(CHECK_ICON)],\n  hostDirectives: [SelectAllOptionDirective],\n  host: {\n    class: 'et-select-option et-select-all-option',\n  },\n})\nexport class SelectAllOptionComponent {\n  protected option = inject(SelectAllOptionDirective);\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings the select's panel renders itself. The options are yours; these are the panel's own\n * affordances - paging through an async option list, and the create-a-value flow (`customValues`).\n */\nexport type SelectLabels = {\n  /** Shown while the option list is being fetched. */\n  loading: string;\n  /** Shown when the option list came back empty. */\n  empty: string;\n  /** The \"fetch the next page of options\" control in an async panel. */\n  loadMore: string;\n  /** The panel's entry that starts creating a value that isn't in the list. */\n  addNew: string;\n  /** The confirm action of the create-a-value flow. */\n  create: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_SELECT_LABELS: SelectLabels = {\n  loading: 'Loading…',\n  empty: 'No results',\n  loadMore: 'Load more',\n  addNew: 'Add new',\n  create: 'Create',\n};\n\nconst SELECT_LABELS_DEF = /* @__PURE__ */ defineLabels<SelectLabels>('SELECT_LABELS', DEFAULT_SELECT_LABELS);\n\n/**\n * Localize the select's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_SELECT_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideSelectLabels({ loadMore: 'Mehr laden', create: 'Erstellen' });\n */\nexport const provideSelectLabels = /* @__PURE__ */ toProvideFn(SELECT_LABELS_DEF);\nexport const injectSelectLabels = /* @__PURE__ */ toInjectFn(SELECT_LABELS_DEF);\nexport const SELECT_LABELS = /* @__PURE__ */ toToken(SELECT_LABELS_DEF);\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { createComponentId } from '@ethlete/core';\nimport { SelectOptionGroupDirective } from './headless';\n\n@Component({\n  selector: 'et-select-option-group',\n  template: `\n    <div [id]=\"labelId\" class=\"et-select-option-group-label\">{{ group.label() }}</div>\n    <ng-content />\n  `,\n  styleUrl: './select-option-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [{ directive: SelectOptionGroupDirective, inputs: ['label'] }],\n  host: {\n    class: 'et-select-option-group',\n  },\n})\nexport class SelectOptionGroupComponent {\n  protected group = inject(SelectOptionGroupDirective);\n\n  protected readonly labelId = createComponentId('et-select-option-group-label');\n\n  constructor() {\n    this.group.labelledById.set(this.labelId);\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { CHECK_ICON, IconDirective, PLUS_ICON, provideIcons } from '../../icon';\nimport { SelectOptionDirective } from './headless';\n\n@Component({\n  selector: 'et-select-option',\n  templateUrl: './select-option.component.html',\n  styleUrl: './select-option.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  // PLUS is used by the \"Create …\" flavor of the option (`et-select`'s custom value row) -\n  // provideIcons shadows the parent registry entirely, so the option must carry it itself\n  providers: [provideIcons(CHECK_ICON, PLUS_ICON)],\n  hostDirectives: [\n    {\n      directive: SelectOptionDirective,\n      inputs: ['value', 'label', 'disabled', 'customValueOption'],\n    },\n  ],\n  host: {\n    class: 'et-select-option',\n  },\n})\nexport class SelectOptionComponent {}\n","<span class=\"et-select-option-label\">\n  <ng-content />\n</span>\n\n<span class=\"et-select-option-check\">\n  <i etIcon=\"et-check\"></i>\n</span>\n","import { equal } from '@ethlete/core';\n\nexport type PageState<TItem> = {\n  slices: TItem[][];\n  ended: boolean;\n};\n\n/**\n * Whether a freshly settled page ends the pagination. Asking a paginated API for a page past the end\n * commonly clamps to the last one; appending that would show the tail of the list twice.\n *\n * @internal\n */\nexport const endsPagination = <TItem>(nextSlice: TItem[], previousSlice: TItem[] | undefined) =>\n  nextSlice.length === 0 || (previousSlice !== undefined && equal(nextSlice, previousSlice));\n","import { Signal, computed, effect, linkedSignal, signal, untracked } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { AnyQueryCreator, QueryArgsOf, QueryErrorResponse, RequestArgs, ResponseType, withArgs } from '@ethlete/query';\nimport { debounceTime as rxDebounceTime } from 'rxjs';\nimport { PageState, endsPagination } from './select-options-paging';\n\n/** Config for {@link selectOptionsFromQuery}. */\nexport type SelectOptionsFromQueryConfig<TCreator extends AnyQueryCreator, TOption> = {\n  /**\n   * The query creator to run (e.g. from `createGetQuery`). Like a query stack, the query is created\n   * **once** and re-executes reactively - never per keystroke.\n   */\n  queryCreator: TCreator;\n  /**\n   * Builds the request args from the debounced search query and the current `page`. Return `null`\n   * to skip a request (e.g. for an empty query) - `options` is empty while skipped.\n   */\n  args: (query: Signal<string>, page: Signal<number>) => RequestArgs<QueryArgsOf<TCreator>> | null;\n  /**\n   * Maps a successful response to the option slice for the **current page**. The factory appends\n   * each page's slice to the accumulated `options` (and resets when the query changes).\n   */\n  toOptions: (response: ResponseType<QueryArgsOf<TCreator>>) => TOption[];\n  /** Derives whether more pages exist from the latest page's response - drives `hasMoreItems` and gates `loadMore()`. */\n  toHasMore?: (response: ResponseType<QueryArgsOf<TCreator>>) => boolean;\n  /** Turns a query failure into the select's error text. Defaults to the first error message. */\n  toErrorMessage?: (error: QueryErrorResponse) => string;\n  /** Minimum query length before requests run. @default 0 */\n  minQueryLength?: number;\n  /** Debounce applied to the query before it reaches `args`, in ms. @default 300 */\n  debounceTime?: number;\n  /** The page `args` receives on first load and after each query change. @default 1 */\n  initialPage?: number;\n};\n\nexport type SelectOptionsFromQuery<TOption> = {\n  /** The mapped options - render them with an `@for` of `et-select-option`s (`filterMode=\"external\"`). */\n  options: Signal<TOption[]>;\n  /** Bind to the select's `loading` input. */\n  loading: Signal<boolean>;\n  /** Bind to the select's `error` input. */\n  error: Signal<string | null>;\n  /** Bind to the select's `hasMoreItems` input (always false without `toHasMore`). */\n  hasMore: Signal<boolean>;\n  /** The debounced query currently driving the request. */\n  query: Signal<string>;\n  /** Wire to the select's `(queryChange)` output. */\n  setQuery: (query: string) => void;\n  /**\n   * Wire to the select's `(loadMore)` output - advances to the next page and appends it\n   * to `options`. A no-op while loading, when skipped, or once `hasMore` is false.\n   */\n  loadMore: () => void;\n};\n\nconst firstErrorMessage = (error: QueryErrorResponse) => {\n  const message = 'errors' in error ? error.errors[0]?.message : error.error?.message;\n\n  return message ?? error.raw?.statusText ?? 'Something went wrong';\n};\n\n/**\n * Feeds a select's options from an `@ethlete/query` query as the user searches. Mirroring\n * `createQueryStack`, it takes the `queryCreator` plus a reactive `args` builder: the query is\n * created once and re-executes as the (debounced) search query changes. Wire the returned signals\n * to the select's async inputs and render `options` yourself with `filterMode=\"external\"`:\n *\n * ```ts\n * users = selectOptionsFromQuery({\n *   queryCreator: searchUsers,\n *   args: (query, page) => (query() ? { queryParams: { q: query(), page: page() } } : null),\n *   toOptions: (res) => res.items,\n *   toHasMore: (res) => res.page < res.totalPages,\n * });\n * ```\n *\n * ```html\n * <et-select\n *   [formField]=\"form.assignee\"\n *   [loading]=\"users.loading()\"\n *   [error]=\"users.error()\"\n *   [hasMoreItems]=\"users.hasMore()\"\n *   (queryChange)=\"users.setQuery($event)\"\n *   (loadMore)=\"users.loadMore()\"\n *   filterMode=\"external\"\n * >\n *   <input etSelectSearch placeholder=\"Search users\" />\n *   @for (user of users.options(); track user.id) {\n *     <et-select-option [value]=\"user.id\">{{ user.name }}</et-select-option>\n *   }\n * </et-select>\n * ```\n *\n * Call it from a field initializer / constructor (injection context), the same place you'd create\n * a query or a query stack.\n */\nexport const selectOptionsFromQuery = <TCreator extends AnyQueryCreator, TOption>(\n  config: SelectOptionsFromQueryConfig<TCreator, TOption>,\n): SelectOptionsFromQuery<TOption> => {\n  type TArgs = QueryArgsOf<TCreator>;\n\n  const rawQuery = signal('');\n  const debouncedQuery = toSignal(toObservable(rawQuery).pipe(rxDebounceTime(config.debounceTime ?? 300)), {\n    initialValue: '',\n  });\n\n  const minQueryLength = config.minQueryLength ?? 0;\n  const skipped = computed(() => debouncedQuery().trim().length < minQueryLength);\n\n  const initialPage = config.initialPage ?? 1;\n  // Keyed off the debounced query - not the raw one - so the reset lands in the same tick the\n  // request re-runs, never firing a spurious page.\n  const page = linkedSignal<string, number>({\n    source: debouncedQuery,\n    computation: () => initialPage,\n  });\n\n  const query = config.queryCreator(\n    withArgs<TArgs>(() => {\n      if (skipped()) {\n        return null;\n      }\n\n      return config.args(debouncedQuery, page);\n    }),\n  );\n\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  // `query.response()` only holds the latest page, so this folds each new response into the slice\n  // for the page it was requested for (`page` read untracked: only a new response, never an\n  // in-flight page bump, appends).\n  const pageState = linkedSignal<ResponseType<TArgs> | null, PageState<TOption>>({\n    source: () => query.response(),\n    computation: (response, previous) => {\n      const index = untracked(page) - initialPage;\n      const slices = (previous?.value?.slices ?? []).slice(0, index);\n\n      if (response === null) {\n        return { slices, ended: index === 0 ? false : (previous?.value?.ended ?? false) };\n      }\n\n      const nextSlice = config.toOptions(response);\n      const ended = endsPagination(nextSlice, slices[index - 1]);\n\n      if (!ended) {\n        slices[index] = nextSlice;\n      }\n\n      return { slices, ended };\n    },\n  });\n\n  // A `linkedSignal` only folds while something observes it - so a page that settles while nothing\n  // renders `options` (e.g. the panel is closed) would be skipped, and a later page would fold over\n  // a stale `previous`. This keepalive makes the fold eager: it captures every settled page.\n  effect(() => void pageState());\n\n  const options = computed(() => (skipped() ? [] : pageState().slices.flat()));\n\n  const hasMore = computed(() => {\n    const toHasMore = config.toHasMore;\n\n    if (!toHasMore || skipped() || pageState().ended) {\n      return false;\n    }\n\n    const response = query.response();\n\n    return response === null ? false : toHasMore(response);\n  });\n\n  return {\n    options,\n    loading: computed(() => query.loading() !== null),\n    error: computed(() => {\n      const error = query.error();\n\n      return error === null || skipped() ? null : toErrorMessage(error);\n    }),\n    hasMore,\n    query: debouncedQuery,\n    setQuery: (value: string) => rawQuery.set(value),\n    loadMore: () => {\n      if (skipped() || query.loading() !== null || !hasMore()) {\n        return;\n      }\n\n      page.update((current) => current + 1);\n    },\n  };\n};\n","import { Signal, computed, effect, linkedSignal, signal, untracked } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport {\n  AnyLegacyQuery,\n  AnyLegacyQueryCreator,\n  AnyV2Query,\n  AnyV2QueryCreator,\n  QueryDataOf,\n  RequestError,\n  isQueryStateFailure,\n  isQueryStateLoading,\n  isQueryStateSuccess,\n  queryComputed,\n  queryStateSignal,\n} from '@ethlete/query';\nimport { debounceTime as rxDebounceTime } from 'rxjs';\nimport { PageState, endsPagination } from './select-options-paging';\nimport { SelectOptionsFromQuery } from './select-options-from-query';\n\n/** The args accepted by the creator's `prepare()` - includes `mock`/`config` extras. */\nexport type V2PrepareArgsOf<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator> = Parameters<\n  TCreator['prepare']\n>[0];\n\n/** Config for {@link selectOptionsFromV2Query}. */\nexport type SelectOptionsFromV2QueryConfig<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TOption> = {\n  /**\n   * The legacy query creator to run (from `V2QueryClient`'s `get`/`gqlQuery`, or a\n   * `createLegacyQueryCreator` interop wrapper). A fresh query is prepared and executed whenever\n   * the debounced search query changes; the previous one is released like in a query container.\n   */\n  queryCreator: TCreator;\n  /**\n   * Builds the `prepare()` args from the debounced search query and the current `page`. Return\n   * `null` to skip a request (e.g. for an empty query) - `options` is empty while skipped.\n   */\n  args: (query: Signal<string>, page: Signal<number>) => V2PrepareArgsOf<TCreator> | null;\n  /**\n   * Maps a successful response to the option slice for the **current page**. The factory appends\n   * each page's slice to the accumulated `options` (and resets when the query changes).\n   */\n  toOptions: (response: QueryDataOf<TCreator>) => TOption[];\n  /** Derives whether more pages exist from the latest page's response - drives `hasMoreItems` and gates `loadMore()`. */\n  toHasMore?: (response: QueryDataOf<TCreator>) => boolean;\n  /** Turns a query failure into the select's error text. Defaults to the first error message. */\n  toErrorMessage?: (error: RequestError) => string;\n  /** Minimum query length before requests run. @default 0 */\n  minQueryLength?: number;\n  /** Debounce applied to the query before it reaches `args`, in ms. @default 300 */\n  debounceTime?: number;\n  /** The page `args` receives on first load and after each query change. @default 1 */\n  initialPage?: number;\n};\n\nconst firstErrorMessage = (error: RequestError) => {\n  const detail = error.detail;\n\n  if (typeof detail === 'object' && detail !== null) {\n    if ('message' in detail && typeof detail.message === 'string') {\n      return detail.message;\n    }\n\n    if ('detail' in detail && typeof detail.detail === 'string') {\n      return detail.detail;\n    }\n  }\n\n  if (typeof detail === 'string') {\n    return detail;\n  }\n\n  return error.statusText || 'Something went wrong';\n};\n\n/**\n * Feeds a select's options from a **legacy v2** query as the user searches - the\n * `V2QueryClient` counterpart of {@link selectOptionsFromQuery}, so apps that haven't migrated\n * yet can still adopt the new async select. It returns the same signal bundle; wire it to the\n * select's async inputs and render `options` yourself with `filterMode=\"external\"`:\n *\n * ```ts\n * users = selectOptionsFromV2Query({\n *   queryCreator: searchUsers, // client.get({ route: '/users', types: { … } })\n *   args: (query, page) => (query() ? { queryParams: { q: query(), page: page() } } : null),\n *   toOptions: (res) => res.items,\n *   toHasMore: (res) => res.page < res.totalPages,\n * });\n * ```\n *\n * ```html\n * <et-select\n *   [formField]=\"form.assignee\"\n *   [loading]=\"users.loading()\"\n *   [error]=\"users.error()\"\n *   [hasMoreItems]=\"users.hasMore()\"\n *   (queryChange)=\"users.setQuery($event)\"\n *   (loadMore)=\"users.loadMore()\"\n *   filterMode=\"external\"\n * >\n *   <input etSelectSearch placeholder=\"Search users\" />\n *   @for (user of users.options(); track user.id) {\n *     <et-select-option [value]=\"user.id\">{{ user.name }}</et-select-option>\n *   }\n * </et-select>\n * ```\n *\n * Call it from a field initializer / constructor (injection context), the same place you'd use\n * `queryComputed` or a query container.\n */\nexport const selectOptionsFromV2Query = <TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TOption>(\n  config: SelectOptionsFromV2QueryConfig<TCreator, TOption>,\n): SelectOptionsFromQuery<TOption> => {\n  const rawQuery = signal('');\n  const debouncedQuery = toSignal(toObservable(rawQuery).pipe(rxDebounceTime(config.debounceTime ?? 300)), {\n    initialValue: '',\n  });\n\n  const minQueryLength = config.minQueryLength ?? 0;\n  const skipped = computed(() => debouncedQuery().trim().length < minQueryLength);\n\n  const initialPage = config.initialPage ?? 1;\n  // Keyed off the debounced query - not the raw one - so the reset lands in the same tick the\n  // query re-prepares, never firing a spurious page.\n  const page = linkedSignal<string, number>({\n    source: debouncedQuery,\n    computation: () => initialPage,\n  });\n\n  const query = queryComputed<AnyV2Query | AnyLegacyQuery | null>(() => {\n    if (skipped()) {\n      return null;\n    }\n\n    const args = config.args(debouncedQuery, page);\n\n    if (args === null) {\n      return null;\n    }\n\n    return config.queryCreator.prepare(args).execute() as AnyV2Query | AnyLegacyQuery;\n  });\n\n  const state = queryStateSignal(query);\n  const settledState = queryStateSignal(query, { cacheResponse: true });\n\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  // `settledState` only holds the latest settled response, so this folds each new success into the\n  // slice for the page it was requested for (`page` read untracked: only a new settled state, never\n  // an in-flight page bump, appends).\n  const pageState = linkedSignal<ReturnType<typeof settledState>, PageState<TOption>>({\n    source: settledState,\n    computation: (settled, previous) => {\n      const index = untracked(page) - initialPage;\n      const slices = (previous?.value?.slices ?? []).slice(0, index);\n\n      if (!isQueryStateSuccess(settled)) {\n        return { slices, ended: index === 0 ? false : (previous?.value?.ended ?? false) };\n      }\n\n      const nextSlice = config.toOptions(settled.response as QueryDataOf<TCreator>);\n      const ended = endsPagination(nextSlice, slices[index - 1]);\n\n      if (!ended) {\n        slices[index] = nextSlice;\n      }\n\n      return { slices, ended };\n    },\n  });\n\n  // A `linkedSignal` only folds while something observes it - so a page that settles while nothing\n  // renders `options` (e.g. the panel is closed) would be skipped, and a later page would fold over\n  // a stale `previous`. This keepalive makes the fold eager: it captures every settled page.\n  effect(() => void pageState());\n\n  const options = computed(() => (skipped() ? [] : pageState().slices.flat()));\n\n  const hasMore = computed(() => {\n    const toHasMore = config.toHasMore;\n    const settled = settledState();\n\n    if (!toHasMore || skipped() || pageState().ended || !isQueryStateSuccess(settled)) {\n      return false;\n    }\n\n    return toHasMore(settled.response as QueryDataOf<TCreator>);\n  });\n\n  return {\n    options,\n    loading: computed(() => isQueryStateLoading(state())),\n    error: computed(() => {\n      const current = state();\n\n      return isQueryStateFailure(current) && !skipped() ? toErrorMessage(current.error) : null;\n    }),\n    hasMore,\n    query: debouncedQuery,\n    setQuery: (value: string) => rawQuery.set(value),\n    loadMore: () => {\n      if (skipped() || isQueryStateLoading(state()) || !hasMore()) {\n        return;\n      }\n\n      page.update((current) => current + 1);\n    },\n  };\n};\n","import { Component, ElementRef, ViewEncapsulation, inject, viewChild } from '@angular/core';\nimport { AutoSurfaceDirective, ProvideColorDirective } from '@ethlete/core';\nimport { injectOverlaySurfaceContext } from '../form-field/headless';\nimport { SelectListboxDirective, SelectViewportDirective } from './headless';\n\n@Component({\n  selector: 'et-select-panel',\n  // the listbox is an inner element, not the panel host: a listbox may only contain options/groups,\n  // but the loading/empty/error rows and the load-more/add-new buttons must live in the panel too -\n  // they render in the extras slot, as siblings of the listbox, keeping the listbox ARIA-clean.\n  // the scroller is an inner element, not the panel host: the host paints the chrome\n  // (background/border/radius) and must not scroll itself - macOS rubber-band overscroll drags\n  // a scroller's own background along with the content, revealing the page behind the panel\n  template: `\n    <div class=\"et-select-panel-scroller\" etSelectViewport>\n      <div #panelBody class=\"et-select-panel-body\">\n        <div class=\"et-select-listbox\" etSelectListbox>\n          <ng-content />\n        </div>\n        <ng-content select=\"[etSelectPanelExtras]\" />\n      </div>\n    </div>\n  `,\n  styleUrl: './select-panel.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [SelectListboxDirective, SelectViewportDirective],\n  hostDirectives: [ProvideColorDirective, AutoSurfaceDirective],\n  host: {\n    class: 'et-select-panel',\n  },\n})\nexport class SelectPanelComponent {\n  // observed instead of the host: the host's used size is overridden by the resize animation\n  // itself, so observing it directly would feed the animation back into the observer\n  private panelBody = viewChild<ElementRef<HTMLElement>>('panelBody');\n\n  constructor() {\n    inject(AutoSurfaceDirective).matchOverlaySurface();\n\n    injectOverlaySurfaceContext({ panelBody: this.panelBody, resizingClass: 'et-select-panel--resizing' });\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { CHECK_ICON, IconDirective, provideIcons } from '../../icon';\nimport { SelectDirective, SelectOptionTemplateContext, SelectVirtualOptionDirective } from './headless';\n\n/**\n * One windowed row of a data-driven (`options` input) select. Looks and behaves exactly\n * like `et-select-option`, but renders a select-owned item instead of registering its own -\n * `et-select` creates these for `virtualizedItems()`.\n */\n@Component({\n  selector: 'et-select-virtual-option',\n  template: `\n    <span class=\"et-select-option-label\">\n      @if (select.registeredOptionTemplate(); as optionTemplate) {\n        <ng-template [ngTemplateOutlet]=\"optionTemplate.templateRef\" [ngTemplateOutletContext]=\"templateContext()\" />\n      } @else {\n        {{ virtualOption.item().label() }}\n      }\n    </span>\n\n    <span class=\"et-select-option-check\">\n      <i etIcon=\"et-check\"></i>\n    </span>\n  `,\n  // shares the option stylesheet on purpose: in pure data-driven mode no et-select-option\n  // instance may exist, and Angular only keeps a component's styles loaded while an\n  // instance of that component lives - the class alone would not bring the CSS with it\n  styleUrl: './select-option.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, NgTemplateOutlet],\n  providers: [provideIcons(CHECK_ICON)],\n  hostDirectives: [\n    {\n      directive: SelectVirtualOptionDirective,\n      inputs: ['etSelectVirtualOption: item'],\n    },\n  ],\n  host: {\n    class: 'et-select-option',\n  },\n})\nexport class SelectVirtualOptionComponent {\n  protected select = inject(SelectDirective);\n  protected virtualOption = inject(SelectVirtualOptionDirective);\n\n  protected templateContext = computed<SelectOptionTemplateContext>(() => {\n    const item = this.virtualOption.item();\n\n    return {\n      $implicit: item.data?.() ?? { value: item.value(), label: item.label() },\n      item,\n    };\n  });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { ColorInteractiveDirective, ProvideColorDirective, createComponentId, injectErrorTheme } from '@ethlete/core';\nimport { CHIP_REMOVE_TAB_STOP, ChipComponent } from '../../chip';\nimport { CHEVRON_ICON, IconDirective, PLUS_ICON, TIMES_ICON, provideIcons } from '../../icon';\nimport { SpinnerComponent } from '../../loader';\nimport { mountControlSuffixStyles } from '../form-field/form-field-control-suffix-styles.component';\nimport { ControlSuffixDirective } from '../form-field/partials';\nimport { SelectDirective, SelectSurfaceDirective, SelectTriggerDirective, SelectValueContext } from './headless';\nimport { SelectAllOptionComponent } from './select-all-option.component';\nimport { SelectOptionComponent } from './select-option.component';\nimport { SelectPanelComponent } from './select-panel.component';\nimport { SelectVirtualOptionComponent } from './select-virtual-option.component';\nimport { injectFormFieldLabels } from '../../forms/form-field/form-field-labels';\nimport { injectSelectLabels } from '../../forms/select/select-labels';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-select',\n  templateUrl: './select.component.html',\n  styleUrl: './select.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    SelectTriggerDirective,\n    SelectSurfaceDirective,\n    ControlSuffixDirective,\n    SelectPanelComponent,\n    SelectOptionComponent,\n    SelectAllOptionComponent,\n    SelectVirtualOptionComponent,\n    IconDirective,\n    NgTemplateOutlet,\n    ChipComponent,\n    SpinnerComponent,\n    ProvideColorDirective,\n  ],\n  providers: [provideIcons(CHEVRON_ICON, TIMES_ICON, PLUS_ICON), { provide: CHIP_REMOVE_TAB_STOP, useValue: false }],\n  hostDirectives: [\n    {\n      directive: SelectDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'open',\n        'multiple',\n        'placeholder',\n        'mixedLabel',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'options',\n        'compareWith',\n        'filterMode',\n        'allowCustomValues',\n        'customValueSeparators',\n        'normalizeCustomValue',\n        'commitCustomValueOnClose',\n        'maxSelection',\n        'allowAddNew',\n        'loading',\n        'error',\n        'hasMoreItems',\n        'pickOnly',\n        'selectAll',\n        'mirrorPanelWidth',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: [\n        'valueChange',\n        'mixedChange',\n        'touchedChange',\n        'openChange',\n        'queryChange',\n        'loadMore',\n        'addNew',\n        'pickOption',\n      ],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-select',\n  },\n})\nexport class SelectComponent {\n  protected selectLabels = injectSelectLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected select = inject(SelectDirective);\n  protected errorColorTheme = injectErrorTheme();\n\n  public loadMoreLabel = input<string | null>(null);\n  public addNewLabel = input<string | null>(null);\n  /** Leading text of the \"Create …\" row rendered for `customValueCandidate`. */\n  public createLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a value is selected. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n  /** Text of the `selectAll` row. Defaults to the shared `selectAll` label - see {@link provideFormFieldLabels}. */\n  public selectAllLabel = input<string | null>(null);\n\n  protected resolvedLoadMoreLabel = computed(() => this.loadMoreLabel() ?? this.selectLabels().loadMore);\n\n  protected resolvedAddNewLabel = computed(() => this.addNewLabel() ?? this.selectLabels().addNew);\n\n  protected resolvedCreateLabel = computed(() => this.createLabel() ?? this.selectLabels().create);\n\n  protected resolvedSelectAllLabel = computed(() => this.selectAllLabel() ?? this.formFieldLabels().selectAll);\n\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n  protected mixedLabelId = createComponentId('et-select-mixed-label');\n\n  protected showClear = computed(\n    () =>\n      this.clearable() &&\n      this.select.hasValue() &&\n      this.select.focused() &&\n      !this.select.disabled() &&\n      !this.select.readonly(),\n  );\n\n  public hasSearch = computed(() => !!this.select.registeredSearch());\n\n  protected showLoadingRow = computed(() => this.select.loading() && !this.select.visibleItems().length);\n\n  protected showLoadMoreLoading = computed(\n    () =>\n      this.select.hasMoreItems() &&\n      !this.showLoadingRow() &&\n      this.select.loadingMore() &&\n      this.select.showLoadingIndicator(),\n  );\n\n  protected showBusyBar = computed(\n    () => this.select.showLoadingIndicator() && this.select.visibleItems().length > 0 && !this.showLoadMoreLoading(),\n  );\n\n  protected showValueLabel = computed(() => {\n    const hasSearch = this.hasSearch();\n    const entryCount = this.select.selectedEntries().length;\n\n    if (this.select.mixed()) {\n      return !hasSearch || this.select.multiple();\n    }\n\n    if (this.select.registeredValueTemplate()) {\n      return !hasSearch && entryCount === 0;\n    }\n\n    if (this.select.multiple()) {\n      return !hasSearch && entryCount === 0;\n    }\n\n    return !hasSearch;\n  });\n\n  protected valueContext = computed<SelectValueContext>(() => ({\n    $implicit: this.select.selectedEntries(),\n    select: this.select,\n  }));\n\n  protected showCustomValue = computed(() => {\n    if (this.select.mixed() || !this.select.registeredValueTemplate() || !this.select.selectedEntries().length) {\n      return false;\n    }\n\n    if (this.select.multiple()) {\n      return true;\n    }\n\n    return !this.select.query() && !this.select.focused();\n  });\n\n  protected stackedValue = computed(\n    () => this.hasSearch() && !this.select.multiple() && !!this.select.registeredValueTemplate(),\n  );\n\n  constructor() {\n    mountControlSuffixStyles();\n    this.select.mixedLabelId.set(this.mixedLabelId);\n  }\n\n  protected handleClearClick(event: Event) {\n    event.stopPropagation();\n    this.select.clearValue();\n    this.select.activate();\n  }\n\n  protected handleArrowClick(event: Event) {\n    event.stopPropagation();\n    this.select.toggle();\n    this.select.activate();\n  }\n\n  public focus(options?: FocusOptions) {\n    this.select.focus(options);\n  }\n}\n","<!-- a div, not a <button>: chips carry remove buttons and buttons cannot nest.\n     The trigger directive manages tabindex/aria-disabled for non-button hosts. -->\n<div class=\"et-select-trigger\" etSelectTrigger>\n  <div [class.et-select-trigger-content--stacked]=\"stackedValue()\" class=\"et-select-trigger-content\">\n    @if (select.mixed()) {\n      @if (showValueLabel()) {\n        <span [id]=\"mixedLabelId\" class=\"et-select-value\">{{ select.displayValue() }}</span>\n      }\n    } @else if (select.registeredValueTemplate(); as valueTemplate) {\n      @if (showCustomValue()) {\n        <div class=\"et-select-value-custom\">\n          <ng-template [ngTemplateOutlet]=\"valueTemplate.templateRef\" [ngTemplateOutletContext]=\"valueContext()\" />\n        </div>\n      }\n    } @else if (select.multiple() && select.selectedEntries().length) {\n      <div class=\"et-select-chips\">\n        @for (entry of select.selectedEntries(); track entry.value) {\n          <et-chip\n            [disabled]=\"select.disabled()\"\n            [removable]=\"!select.readonly() && !select.disabled()\"\n            (remove)=\"select.deselectValue(entry.value)\"\n          >\n            {{ entry.label }}\n          </et-chip>\n        }\n      </div>\n    }\n\n    @if (!select.mixed() && showValueLabel()) {\n      <span [attr.data-placeholder]=\"!select.hasValue() || null\" class=\"et-select-value\">\n        {{ select.displayValue() ?? select.placeholder() }}\n      </span>\n    }\n\n    <ng-content select=\"input[etSelectSearch]\" />\n  </div>\n\n  @if (select.showLoadingIndicator() && !select.open()) {\n    <div class=\"et-select-trigger-busy\" animate.enter=\"et-select-trigger-busy--enter\">\n      <et-spinner diameter=\"16\" strokeWidth=\"2\" />\n    </div>\n  }\n</div>\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- pointer-only, out of the tab order — keyboard users clear via Backspace / erasing.\n         mousedown is prevented so the trigger keeps focus: `showClear` reads `focused()`, so a\n         blur would unmount this button before the click could land -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n\n  <button\n    [disabled]=\"select.disabled()\"\n    (click)=\"handleArrowClick($event)\"\n    (mousedown)=\"$event.preventDefault()\"\n    class=\"et-input-picker-trigger et-select-arrow\"\n    aria-hidden=\"true\"\n    tabindex=\"-1\"\n    type=\"button\"\n  >\n    <i etIcon=\"et-chevron\"></i>\n  </button>\n</ng-template>\n\n<ng-template #optionContent>\n  <ng-content />\n</ng-template>\n\n@if (!select.isMounted()) {\n  <!-- keeps the projected options rendered (and their bindings live) while the panel is\n       closed, so the trigger can resolve a preselected value's label and closed typeahead\n       works — the same template moves into the overlay while it is open -->\n  <div class=\"et-select-detached-options\" aria-hidden=\"true\" hidden>\n    <ng-template [ngTemplateOutlet]=\"optionContent\" />\n  </div>\n}\n\n<ng-template etSelectSurface>\n  <et-select-panel>\n    @if (select.showSelectAll()) {\n      <et-select-all-option>{{ resolvedSelectAllLabel() }}</et-select-all-option>\n    }\n\n    @if (select.options()) {\n      <div\n        [style.padding-block-start.px]=\"select.virtualWindow.paddingTop()\"\n        [style.padding-block-end.px]=\"select.virtualWindow.paddingBottom()\"\n        class=\"et-select-virtual-options\"\n        role=\"none\"\n      >\n        @for (item of select.virtualizedItems(); track item.id()) {\n          <et-select-virtual-option [item]=\"item\" />\n        }\n      </div>\n    }\n\n    <ng-template [ngTemplateOutlet]=\"optionContent\" />\n\n    @if (select.customValueCandidate(); as candidate) {\n      <et-select-option [value]=\"candidate\" [label]=\"candidate\" class=\"et-select-create-option\" customValueOption>\n        <i class=\"et-select-create-option-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n        {{ resolvedCreateLabel() }} “{{ candidate }}”\n      </et-select-option>\n    }\n\n    <div class=\"et-select-panel-extras\" etSelectPanelExtras>\n      @if (showBusyBar()) {\n        <div class=\"et-select-busy-bar\" role=\"presentation\" aria-hidden=\"true\"></div>\n      }\n\n      @if (showLoadingRow()) {\n        @if (select.registeredLoadingTemplate(); as loadingTemplate) {\n          @if (select.showLoadingIndicator()) {\n            <ng-template [ngTemplateOutlet]=\"loadingTemplate.templateRef\" />\n          }\n        } @else {\n          <div class=\"et-select-state et-select-state--loading\">\n            <span\n              [class.et-select-state-content--visible]=\"select.showLoadingIndicator()\"\n              [attr.aria-hidden]=\"!select.showLoadingIndicator() || null\"\n              class=\"et-select-state-content\"\n            >\n              <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n              {{ selectLabels().loading }}\n            </span>\n          </div>\n        }\n      } @else if (select.error(); as error) {\n        @if (select.registeredErrorTemplate(); as errorTemplate) {\n          <ng-template\n            [ngTemplateOutlet]=\"errorTemplate.templateRef\"\n            [ngTemplateOutletContext]=\"{ $implicit: error }\"\n          />\n        } @else {\n          <div [etProvideColor]=\"errorColorTheme\" class=\"et-select-state et-select-state--error\" role=\"alert\">\n            {{ error }}\n          </div>\n        }\n      } @else if (!select.visibleItems().length) {\n        @if (select.registeredEmptyTemplate(); as emptyTemplate) {\n          <ng-template [ngTemplateOutlet]=\"emptyTemplate.templateRef\" />\n        } @else {\n          <div class=\"et-select-state et-select-state--empty\">{{ selectLabels().empty }}</div>\n        }\n      }\n\n      @if (select.hasMoreItems() && !showLoadingRow()) {\n        @if (showLoadMoreLoading()) {\n          <div class=\"et-select-load-more et-select-load-more--loading\" aria-live=\"polite\">\n            <et-spinner class=\"et-select-state-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n            {{ selectLabels().loading }}\n          </div>\n        } @else {\n          <button\n            [disabled]=\"select.loading()\"\n            (click)=\"select.requestLoadMore()\"\n            class=\"et-select-load-more\"\n            tabindex=\"-1\"\n            type=\"button\"\n          >\n            <i class=\"et-select-load-more-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n            {{ resolvedLoadMoreLabel() }}\n          </button>\n        }\n      }\n\n      @if (select.allowAddNew() && !showLoadingRow()) {\n        <button (click)=\"select.requestAddNew()\" class=\"et-select-add-new\" tabindex=\"-1\" type=\"button\">\n          <i class=\"et-select-add-new-icon\" etIcon=\"et-plus\" aria-hidden=\"true\"></i>\n          {{ resolvedAddNewLabel() }}\n        </button>\n      }\n    </div>\n  </et-select-panel>\n</ng-template>\n","import {\n  SelectAllOptionDirective,\n  SelectDirective,\n  SelectEmptyDirective,\n  SelectErrorDirective,\n  SelectListboxDirective,\n  SelectLoadingDirective,\n  SelectOptionDirective,\n  SelectOptionGroupDirective,\n  SelectOptionTemplateDirective,\n  SelectOptionsDirective,\n  SelectSearchDirective,\n  SelectSurfaceDirective,\n  SelectTriggerDirective,\n  SelectValueDirective,\n  SelectViewportDirective,\n  SelectVirtualOptionDirective,\n} from './headless';\nimport { SelectAllOptionComponent } from './select-all-option.component';\nimport { SelectOptionGroupComponent } from './select-option-group.component';\nimport { SelectOptionComponent } from './select-option.component';\nimport { SelectPanelComponent } from './select-panel.component';\nimport { SelectVirtualOptionComponent } from './select-virtual-option.component';\nimport { SelectComponent } from './select.component';\n\nexport const SELECT_IMPORTS = [\n  SelectComponent,\n  SelectOptionComponent,\n  SelectOptionGroupComponent,\n  SelectPanelComponent,\n  SelectVirtualOptionComponent,\n  SelectAllOptionComponent,\n  SelectDirective,\n  SelectTriggerDirective,\n  SelectSurfaceDirective,\n  SelectListboxDirective,\n  SelectOptionDirective,\n  SelectOptionGroupDirective,\n  SelectOptionTemplateDirective,\n  SelectValueDirective,\n  SelectSearchDirective,\n  SelectOptionsDirective,\n  SelectViewportDirective,\n  SelectVirtualOptionDirective,\n  SelectAllOptionDirective,\n  SelectLoadingDirective,\n  SelectErrorDirective,\n  SelectEmptyDirective,\n] as const;\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { ColorInteractiveDirective, injectLocale } from '@ethlete/core';\nimport { IconDirective, TIMES_ICON, provideIcons } from '../../icon';\nimport {\n  SelectDirective,\n  SelectOptionComponent,\n  SelectPanelComponent,\n  SelectSearchDirective,\n  SelectSurfaceDirective,\n  SelectTriggerDirective,\n} from '../select';\nimport {\n  PHONE_COUNTRIES,\n  PhoneInputDirective,\n  PhoneInputFieldDirective,\n  PhoneInputFlagContext,\n  phoneCountryFlag,\n  phoneCountryName,\n} from './headless';\nimport { injectFormFieldLabels } from '../../forms/form-field/form-field-labels';\nimport { injectPhoneInputLabels } from '../../forms/phone-input/phone-input-labels';\nimport { ControlSuffixDirective, FormFieldBarrierDirective } from '../form-field/partials';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-phone-input',\n  templateUrl: './phone-input.component.html',\n  styleUrl: './phone-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ControlSuffixDirective,\n    FormFieldBarrierDirective,\n    SelectDirective,\n    SelectTriggerDirective,\n    SelectSurfaceDirective,\n    SelectPanelComponent,\n    SelectOptionComponent,\n    SelectSearchDirective,\n    PhoneInputFieldDirective,\n    NgTemplateOutlet,\n    IconDirective,\n  ],\n  providers: [provideIcons(TIMES_ICON)],\n  hostDirectives: [\n    {\n      directive: PhoneInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'placeholder',\n        'mixedLabel',\n        'defaultCountry',\n        'preferredCountries',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-phone-input',\n  },\n})\nexport class PhoneInputComponent {\n  protected phoneInputLabels = injectPhoneInputLabels();\n\n  private formFieldLabels = injectFormFieldLabels();\n\n  protected phone = inject(PhoneInputDirective);\n  private locale = injectLocale();\n\n  /** Accessible name of the country-picker trigger - its only visible content is the flag + dial code. */\n  public countryLabel = input<string | null>(null);\n  /** Shows a clear (×) control while a number is set and the field is in use. */\n  public clearable = input(true, { transform: booleanAttribute });\n  public clearLabel = input<string | null>(null);\n\n  /** The string in effect: this instance's `countryLabel`, else the domain's label set. */\n  protected resolvedCountryLabel = computed(() => this.countryLabel() ?? this.phoneInputLabels().selectCountry);\n\n  /** The string in effect: this instance's `clearLabel`, else `FORM_FIELD_LABELS`. */\n  protected resolvedClearLabel = computed(() => this.clearLabel() ?? this.formFieldLabels().clear);\n\n  // only while the field is in use - mirrors the select's clear affordance\n  protected showClear = computed(\n    () => this.clearable() && this.phone.hasValue() && this.phone.focused() && this.phone.interactive(),\n  );\n\n  protected countries = computed(() => {\n    const locale = this.locale.currentLocale();\n    const preferred = this.phone.preferredCountries();\n    const entries = PHONE_COUNTRIES.map((country) => ({\n      ...country,\n      name: phoneCountryName(country.iso2, locale),\n      flag: phoneCountryFlag(country.iso2),\n    }));\n    const preferredEntries = preferred\n      .map((iso2) => entries.find((entry) => entry.iso2 === iso2))\n      .filter((entry) => entry !== undefined);\n    const rest = entries\n      .filter((entry) => !preferred.includes(entry.iso2))\n      .sort((a, b) => a.name.localeCompare(b.name, locale));\n\n    return [...preferredEntries, ...rest];\n  });\n\n  protected activeFlag = computed(() => phoneCountryFlag(this.phone.country()));\n\n  protected activeFlagContext = computed<PhoneInputFlagContext>(() => {\n    const iso2 = this.phone.country();\n\n    return {\n      $implicit: { iso2, dialCode: this.phone.dialCode(), flag: phoneCountryFlag(iso2) },\n    };\n  });\n\n  protected handleClearClick(event: Event) {\n    // clearing must not bubble into the form field's frame-click handling\n    event.stopPropagation();\n    this.phone.clearValue();\n  }\n\n  protected handleCountryChange(value: unknown) {\n    if (typeof value === 'string') {\n      this.phone.selectCountry(value);\n      // a picked prefix hands focus to the number field (the natural next step is typing the\n      // number) - done before the picker closes, so its close refocus leaves it there\n      this.phone.activate();\n    }\n  }\n\n  public focus(options?: FocusOptions) {\n    this.phone.focus(options);\n  }\n}\n","<!-- headless select composition: compact flag trigger, searchable country panel -->\n<div\n  [aria-label]=\"resolvedCountryLabel()\"\n  [value]=\"phone.country()\"\n  [readonly]=\"phone.readonly()\"\n  (valueChange)=\"handleCountryChange($event)\"\n  class=\"et-phone-input-country\"\n  mirrorPanelWidth=\"false\"\n  etFormFieldBarrier\n  etSelect\n>\n  <button [disabled]=\"phone.disabled()\" class=\"et-phone-input-country-trigger\" etSelectTrigger type=\"button\">\n    <span class=\"et-phone-input-country-flag\" aria-hidden=\"true\">\n      @if (phone.registeredFlagTemplate(); as flagTemplate) {\n        <ng-template [ngTemplateOutlet]=\"flagTemplate.templateRef\" [ngTemplateOutletContext]=\"activeFlagContext()\" />\n      } @else {\n        {{ activeFlag() }}\n      }\n    </span>\n    <span class=\"et-phone-input-dial-code\">+{{ phone.dialCode() }}</span>\n  </button>\n\n  <ng-template etSelectSurface let-select>\n    <et-select-panel class=\"et-phone-input-country-panel\">\n      <div class=\"et-phone-input-country-search\">\n        <input [placeholder]=\"phoneInputLabels().searchCountries\" etSelectSearch />\n      </div>\n\n      <!-- the label carries the dial code too, so searching by \"+49\" / \"49\" works -->\n      @for (country of countries(); track country.iso2) {\n        <et-select-option [label]=\"country.name + ' +' + country.dialCode\" [value]=\"country.iso2\">\n          <span class=\"et-phone-input-option-flag\" aria-hidden=\"true\">\n            @if (phone.registeredFlagTemplate(); as flagTemplate) {\n              <ng-template\n                [ngTemplateOutlet]=\"flagTemplate.templateRef\"\n                [ngTemplateOutletContext]=\"{ $implicit: country }\"\n              />\n            } @else {\n              {{ country.flag }}\n            }\n          </span>\n          <span class=\"et-phone-input-option-name\">{{ country.name }}</span>\n          <span class=\"et-phone-input-option-dial\">+{{ country.dialCode }}</span>\n        </et-select-option>\n      }\n\n      @if (!select.visibleItems().length) {\n        <div class=\"et-select-state et-select-state--empty\">{{ phoneInputLabels().noCountries }}</div>\n      }\n    </et-select-panel>\n  </ng-template>\n</div>\n\n<input class=\"et-phone-input-field\" etPhoneInputField />\n\n<ng-template etControlSuffix>\n  @if (showClear()) {\n    <!-- pointer-only, out of the tab order — keyboard users clear by erasing the text.\n         mousedown is prevented so the field keeps focus (its blur would unmount this\n         button before the click could land) -->\n    <button\n      [attr.aria-label]=\"resolvedClearLabel()\"\n      (click)=\"handleClearClick($event)\"\n      (mousedown)=\"$event.preventDefault()\"\n      class=\"et-input-clear\"\n      animate.enter=\"et-input-clear--enter\"\n      animate.leave=\"et-input-clear--leave\"\n      tabindex=\"-1\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  }\n</ng-template>\n","import { PhoneInputDirective, PhoneInputFieldDirective, PhoneInputFlagDirective } from './headless';\nimport { PhoneInputComponent } from './phone-input.component';\n\nexport const PHONE_INPUT_IMPORTS = [\n  PhoneInputComponent,\n  PhoneInputDirective,\n  PhoneInputFieldDirective,\n  PhoneInputFlagDirective,\n] as const;\n","// codes 5000-5099\nexport const RATING_ERROR_CODES = {\n  DUPLICATE_ICON_TEMPLATE: 5000,\n} as const;\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\nimport { RatingIconDirective } from './rating-icon.directive';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\n\nexport type RatingIconState = 'full' | 'half' | 'empty';\n\n@Directive({\n  selector: '[etRating]',\n  exportAs: 'etRating',\n  host: {\n    role: 'slider',\n    'aria-orientation': 'horizontal',\n    '[attr.tabindex]': 'disabled() ? -1 : 0',\n    'aria-valuemin': '0',\n    '[attr.aria-valuemax]': 'effectiveMax()',\n    // a removed aria-valuenow is the ARIA-sanctioned \"indeterminate value\" - the valuetext\n    // then carries the mixed label so assistive tech announces the bulk-edit state\n    '[attr.aria-valuenow]': 'mixed() ? null : (value() ?? 0)',\n    '[attr.aria-valuetext]': 'valueText()',\n    '[attr.data-mixed]': 'mixed() || null',\n    '[attr.aria-readonly]': 'readonly() || null',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.aria-required]': 'required() || null',\n    '[attr.aria-invalid]': 'shouldDisplayError() || null',\n    '[attr.aria-label]': 'ariaLabel() || null',\n    '[attr.aria-labelledby]': 'labelId() || null',\n    '[attr.aria-describedby]': 'describedBy()',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n    '(keydown)': 'handleKeydown($event)',\n    '(focus)': 'focused.set(true)',\n    '(blur)': 'handleBlur()',\n    '(pointerleave)': 'clearHover()',\n  },\n})\nexport class RatingDirective\n  extends AccessibleNameControlDirective\n  implements FormValueControl<number | null>, FormFieldControl\n{\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public value = model<number | null>(null);\n  /** View state for a field whose source values disagree. The raw form value stays untouched. */\n  public mixed = model(false);\n  /** `aria-valuetext` announced while `mixed` is set. */\n  public mixedLabel = input<string | null>(null);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  /**\n   * Typed `number | undefined` because signal forms reserves `max` on value controls -\n   * a schema `max(...)` validator binds straight into this input.\n   */\n  public max = input<number | undefined>(5);\n  public allowHalf = input(false, { transform: booleanAttribute });\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public effectiveMax = computed(() => this.max() ?? 5);\n\n  public step = computed(() => (this.allowHalf() ? 0.5 : 1));\n\n  /** The value previewed under the pointer, set by the rendered icons. */\n  public hoverValue = signal<number | null>(null);\n\n  /**\n   * What the icons render: the hover preview wins over the committed value. While mixed,\n   * the hidden raw value contributes nothing - no icon fills until the user hovers or commits.\n   */\n  public displayValue = computed(() => this.hoverValue() ?? (this.mixed() ? 0 : (this.value() ?? 0)));\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public hasValue = computed(() => this.mixed() || this.value() !== null);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.RATING);\n  public focused = signal(false);\n\n  /** @internal */\n  public registeredIconTemplate = signal<RatingIconDirective | null>(null);\n\n  protected valueText = computed(() => {\n    if (this.mixed()) {\n      return this.resolvedMixedLabel();\n    }\n\n    const value = this.value();\n\n    return value === null ? 'No rating' : `${value} of ${this.effectiveMax()}`;\n  });\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public activate() {\n    this.focus({ preventScroll: true });\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.elementRef.nativeElement.focus(options);\n  }\n\n  /** The state icon `index` (1-based) renders for a given display value. */\n  public iconState(index: number): RatingIconState {\n    const display = this.displayValue();\n\n    if (display >= index) {\n      return 'full';\n    }\n\n    return display >= index - 0.5 ? 'half' : 'empty';\n  }\n\n  public setHoverValue(value: number) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    this.hoverValue.set(this.clamp(value));\n  }\n\n  public clearHover() {\n    this.hoverValue.set(null);\n  }\n\n  /** Commits from a pointer interaction - picking the current value again clears the rating. */\n  public commitPointer(value: number) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const clamped = this.clamp(value);\n\n    // while mixed there is no visible current value, so a pick always commits - the\n    // clear-by-repick shortcut must never fire against the hidden raw value\n    if (this.mixed()) {\n      this.commitUserValue(clamped);\n\n      return;\n    }\n\n    this.value.set(clamped === this.value() ? null : clamped);\n  }\n\n  protected handleBlur() {\n    this.focused.set(false);\n    this.touched.set(true);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (!this.interactive() || event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    const step = this.step();\n    // while mixed, nothing reads as filled - keyboard steps start from that visible zero\n    const current = this.mixed() ? 0 : (this.value() ?? 0);\n\n    switch (event.key) {\n      case 'ArrowRight':\n      case 'ArrowUp': {\n        event.preventDefault();\n        this.commitUserValue(Math.min(this.effectiveMax(), current + step));\n\n        return;\n      }\n      case 'ArrowLeft':\n      case 'ArrowDown': {\n        event.preventDefault();\n\n        const next = Math.max(0, current - step);\n\n        this.commitUserValue(next === 0 ? null : next);\n\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        this.commitUserValue(step);\n\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        this.commitUserValue(this.effectiveMax());\n\n        return;\n      }\n      // rating's clear affordance - a deliberate act on a focused single-value control,\n      // so unlike a multi-select mass-clear it also resolves mixed\n      case 'Backspace':\n      case 'Delete': {\n        event.preventDefault();\n        this.commitUserValue(null);\n\n        return;\n      }\n    }\n  }\n\n  /** Writes a user-chosen value with replace semantics - user commits resolve mixed. */\n  private commitUserValue(value: number | null) {\n    this.mixed.set(false);\n    this.value.set(value);\n  }\n\n  private clamp(value: number) {\n    const step = this.step();\n    const snapped = Math.round(value / step) * step;\n\n    return Math.min(this.effectiveMax(), Math.max(step, snapped));\n  }\n}\n","import { DestroyRef, Directive, TemplateRef, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { RATING_ERROR_CODES } from '../rating-errors';\nimport { RatingDirective, RatingIconState } from './rating.directive';\n\nexport type RatingIconContext = {\n  $implicit: RatingIconState;\n  index: number;\n};\n\n/** Replaces the default star with a custom icon template - rendered once per rating step. */\n@Directive({\n  selector: 'ng-template[etRatingIcon]',\n  exportAs: 'etRatingIcon',\n})\nexport class RatingIconDirective {\n  private rating = inject(RatingDirective, { optional: true });\n  public templateRef = inject<TemplateRef<RatingIconContext>>(TemplateRef);\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    if (ngDevMode && this.rating?.registeredIconTemplate()) {\n      throw new RuntimeError(\n        RATING_ERROR_CODES.DUPLICATE_ICON_TEMPLATE,\n        '[RatingIconDirective] An et-rating accepts only one ng-template[etRatingIcon]. Remove the extra template.',\n        { element: this.hostElement },\n      );\n    }\n\n    this.rating?.registeredIconTemplate.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      if (this.rating?.registeredIconTemplate() === this) {\n        this.rating.registeredIconTemplate.set(null);\n      }\n    });\n  }\n}\n","import { Component, DestroyRef, ElementRef, ViewEncapsulation, computed, inject, viewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DragGestureEvent, ProvideColorDirective, createCanAnimateSignal, dragGestureFrom } from '@ethlete/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tap } from 'rxjs';\nimport { STAR_ICON, IconDirective, provideIcons } from '../../icon';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\nimport { RatingDirective, RatingIconContext } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-rating',\n  templateUrl: './rating.component.html',\n  styleUrl: './rating.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent, IconDirective, NgTemplateOutlet],\n  providers: [provideFormSupport(), provideIcons(STAR_ICON)],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: RatingDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'max',\n        'allowHalf',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-rating',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n  },\n})\nexport class RatingComponent {\n  public support = injectFormSupport();\n  protected rating = inject(RatingDirective);\n  private destroyRef = inject(DestroyRef);\n\n  private baseIcons = viewChildren<ElementRef<HTMLElement>>('baseIcon');\n\n  public canAnimate = createCanAnimateSignal();\n\n  protected iconIndexes = computed(() => Array.from({ length: this.rating.effectiveMax() }, (_, index) => index + 1));\n\n  // drive the fill overlay's continuous clip width: displayValue in icon units plus the\n  // number of gaps the fill crosses (one per completed icon, none after the last)\n  protected fillIcons = computed(() => this.rating.displayValue());\n  protected fillGaps = computed(() => Math.max(0, Math.ceil(this.rating.displayValue()) - 1));\n\n  private dragging = false;\n  private pointerCommitted = false;\n\n  protected iconContext(index: number): RatingIconContext {\n    return { $implicit: this.rating.iconState(index), index };\n  }\n\n  protected handlePointerDown(event: PointerEvent) {\n    // a fresh press must never inherit a stale commit flag from a prior sequence that ended\n    // without its trailing click (drag off-target, cancelled synthetic click) - otherwise the\n    // next legitimate click is swallowed once\n    this.pointerCommitted = false;\n\n    if (!this.rating.interactive() || event.button !== 0 || this.dragging) {\n      return;\n    }\n\n    const surface = event.currentTarget as HTMLElement;\n    const pressX = event.clientX;\n    const touch = event.pointerType === 'touch';\n\n    this.dragging = true;\n    this.rating.setHoverValue(this.valueFromPosition(pressX));\n\n    // every pointer move counts: the preview tracks the finger from the first pixel, so there is\n    // no threshold below which the press is still just a click\n    dragGestureFrom(event, surface, { commitThreshold: 0 })\n      .pipe(\n        tap((gesture) => this.applyGesture(gesture, { pressX, touch })),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /** Hover preview only - a press draws from its own gesture, and a resting finger is not a hover. */\n  protected handlePointerMove(event: PointerEvent) {\n    if (this.dragging || event.pointerType === 'touch') {\n      return;\n    }\n\n    this.rating.setHoverValue(this.valueFromPosition(event.clientX));\n  }\n\n  /** Fallback for synthetic clicks (tests, assistive tech) - real pointer flows commit on pointerup. */\n  protected handleIconClick(index: number, event: MouseEvent) {\n    if (this.pointerCommitted) {\n      this.pointerCommitted = false;\n\n      return;\n    }\n\n    if (!this.rating.allowHalf()) {\n      this.rating.commitPointer(index);\n\n      return;\n    }\n\n    const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n\n    this.rating.commitPointer(event.clientX - rect.left < rect.width / 2 ? index - 0.5 : index);\n  }\n\n  public focus(options?: FocusOptions) {\n    this.rating.focus(options);\n  }\n\n  private applyGesture(gesture: DragGestureEvent, press: { pressX: number; touch: boolean }) {\n    switch (gesture.type) {\n      case 'start':\n        return;\n      case 'move':\n        this.rating.setHoverValue(this.valueFromPosition(gesture.data.clientX));\n\n        return;\n      case 'end':\n      case 'tapped':\n        this.dragging = false;\n        this.pointerCommitted = true;\n        this.rating.commitPointer(this.valueFromPosition(gesture.type === 'end' ? gesture.data.clientX : press.pressX));\n\n        if (press.touch) {\n          this.rating.clearHover();\n        }\n\n        return;\n      case 'cancelled':\n        // the browser took the gesture away - the user never picked a rating, so nothing commits\n        this.dragging = false;\n        this.pointerCommitted = false;\n        this.rating.clearHover();\n\n        return;\n    }\n  }\n\n  // gap-immune: resolve the value from the actual icon rects under the pointer\n  private valueFromPosition(clientX: number) {\n    const icons = this.baseIcons().map((ref) => ref.nativeElement);\n    let value = this.rating.step();\n\n    icons.forEach((icon, position) => {\n      const rect = icon.getBoundingClientRect();\n      const index = position + 1;\n\n      if (clientX >= rect.right) {\n        value = index;\n      } else if (clientX >= rect.left) {\n        value = this.rating.allowHalf() && clientX < rect.left + rect.width / 2 ? Math.max(0.5, index - 0.5) : index;\n      }\n    });\n\n    return value;\n  }\n}\n","<ng-content />\n\n<!-- pointer-only by design: keyboard interaction lives on the slider host (APG slider\n     pattern) and the icons are presentational for assistive tech -->\n<div\n  [style.--_et-rating-fill-icons]=\"fillIcons()\"\n  [style.--_et-rating-fill-gaps]=\"fillGaps()\"\n  (pointerdown)=\"handlePointerDown($event)\"\n  (pointermove)=\"handlePointerMove($event)\"\n  class=\"et-rating-icons\"\n>\n  @if (rating.registeredIconTemplate(); as iconTemplate) {\n    <!-- custom icons render per-step with their state — the continuous sweep only applies\n         to the default two-layer star rendering -->\n    <div class=\"et-rating-row\" aria-hidden=\"true\">\n      @for (index of iconIndexes(); track index) {\n        <span\n          #baseIcon\n          [attr.data-state]=\"rating.iconState(index)\"\n          (click)=\"handleIconClick(index, $event)\"\n          class=\"et-rating-icon\"\n        >\n          <ng-template [ngTemplateOutlet]=\"iconTemplate.templateRef\" [ngTemplateOutletContext]=\"iconContext(index)\" />\n        </span>\n      }\n    </div>\n  } @else {\n    <div class=\"et-rating-row\" aria-hidden=\"true\">\n      @for (index of iconIndexes(); track index) {\n        <span #baseIcon (click)=\"handleIconClick(index, $event)\" class=\"et-rating-icon\">\n          <i class=\"et-rating-icon-base\" etIcon=\"et-star\"></i>\n        </span>\n      }\n    </div>\n\n    <!-- overlay clipped to one continuous width — the fill animates as a single motion -->\n    <div class=\"et-rating-row et-rating-row--fill\" aria-hidden=\"true\">\n      @for (index of iconIndexes(); track index) {\n        <span class=\"et-rating-icon\">\n          <i class=\"et-rating-icon-fill\" etIcon=\"et-star\"></i>\n        </span>\n      }\n    </div>\n  }\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { RatingDirective, RatingIconDirective } from './headless';\nimport { RatingComponent } from './rating.component';\n\nexport const RATING_IMPORTS = [RatingComponent, RatingDirective, RatingIconDirective] as const;\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { injectFormFieldLabels } from '../../form-field/form-field-labels';\nimport { SelectionListControlDirective } from '../headless';\n\n/**\n * The \"select all\" row for an `et-checkbox-group`: one control that ticks every option, clears them\n * all, and shows the **mixed** state while only some are picked.\n *\n * Put it inside the group, above the options. The tri-state logic is\n * [`etSelectionListControl`](/components/choice-inputs#select-all)'s, which this composes - the\n * component exists so the row doesn't have to be hand-rolled with its own markup and CSS every time.\n *\n * @example\n * <et-checkbox-group [formField]=\"form.toppings\">\n *   <et-label>Toppings</et-label>\n *   <et-checkbox-group-select-all />\n *   @for (topping of TOPPINGS; track topping) {\n *     <et-checkbox-option [value]=\"topping\">{{ topping }}</et-checkbox-option>\n *   }\n * </et-checkbox-group>\n */\n@Component({\n  selector: 'et-checkbox-group-select-all',\n  template: `\n    <span class=\"et-checkbox-group-select-all-box\">\n      <svg class=\"et-checkbox-group-select-all-check\" viewBox=\"0 0 12 10\" fill=\"none\" aria-hidden=\"true\">\n        <path\n          d=\"M1 5L4.5 8.5L11 1.5\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n      <span class=\"et-checkbox-group-select-all-dash\" aria-hidden=\"true\"></span>\n    </span>\n    <span class=\"et-checkbox-group-select-all-label\">{{ resolvedLabel() }}</span>\n  `,\n  styleUrl: './checkbox-group-select-all.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [SelectionListControlDirective, ColorInteractiveDirective],\n  host: {\n    class: 'et-checkbox-group-select-all',\n  },\n})\nexport class CheckboxGroupSelectAllComponent {\n  private labels = injectFormFieldLabels();\n\n  /** The row's text. Defaults to the shared `selectAll` label - see {@link provideFormFieldLabels}. */\n  public label = input<string | null>(null);\n\n  protected resolvedLabel = computed(() => this.label() ?? this.labels().selectAll);\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { createCanAnimateSignal, ProvideColorDirective } from '@ethlete/core';\nimport { FormSupportComponent } from '../../form-field/partials/form-support.component';\nimport { FORM_FIELD_SIZES, FormFieldSize } from '../../form-field/form-field.variants';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../../form-field/headless';\nimport { SELECTION_LIST_MULTIPLE, SelectionListDirective } from '../headless';\nimport { SelectionListOrientation } from '../selection-list.types';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-checkbox-group',\n  templateUrl: './checkbox-group.component.html',\n  styleUrl: './checkbox-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent],\n  providers: [{ provide: SELECTION_LIST_MULTIPLE, useValue: true }, provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: SelectionListDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-checkbox-group',\n    '[attr.data-size]': 'size()',\n    '[attr.data-orientation]': 'orientation()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n  },\n})\nexport class CheckboxGroupComponent {\n  private list = inject(SelectionListDirective);\n  public support = injectFormSupport();\n  public size = input<FormFieldSize>(FORM_FIELD_SIZES.MD);\n\n  /**\n   * Lay the options out in a row instead of a column. Horizontal wraps, and the group's label and its\n   * error/hint block keep their own lines above and below - only the options flow.\n   */\n  public orientation = input<SelectionListOrientation>('vertical');\n\n  public canAnimate = createCanAnimateSignal();\n\n  public focus(options?: FocusOptions) {\n    this.list.focus(options);\n  }\n}\n","<ng-content />\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal, injectStyleManager } from '@ethlete/core';\nimport { SelectionCardStylesComponent } from '../../selection-card-styles.component';\nimport { SELECTION_CARD_CONTROL_POSITIONS, SelectionCardControlPosition } from '../../selection-card.types';\nimport { SelectionOptionDirective } from '../headless';\n\n/** How a checkbox option presents itself. See {@link CheckboxOptionComponent.variant}. */\nexport const CHECKBOX_OPTION_VARIANTS = {\n  PLAIN: 'plain',\n  CARD: 'card',\n} as const;\n\nexport type CheckboxOptionVariant = (typeof CHECKBOX_OPTION_VARIANTS)[keyof typeof CHECKBOX_OPTION_VARIANTS];\n\n@Component({\n  selector: 'et-checkbox-option',\n  templateUrl: './checkbox-option.component.html',\n  styleUrl: './checkbox-option.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: SelectionOptionDirective,\n      inputs: ['value', 'checked', 'disabled'],\n      outputs: ['checkedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-checkbox-option',\n    '[attr.data-variant]': 'variant()',\n    '[class.et-selection-card]': \"variant() === 'card'\",\n    '[attr.data-control-position]': \"variant() === 'card' ? controlPosition() : null\",\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class CheckboxOptionComponent {\n  public optionDirective = inject(SelectionOptionDirective);\n\n  private styleManager = injectStyleManager();\n\n  /**\n   * `'card'` turns the option into a full-width clickable panel with the label leading and the control trailing -\n   * for a small set of consequential choices where each deserves room for a description. `'plain'` is the ordinary\n   * control-then-label row. @default 'plain'\n   */\n  public variant = input<CheckboxOptionVariant>(CHECKBOX_OPTION_VARIANTS.PLAIN);\n\n  /**\n   * Which end of the card the control sits at. `'end'` keeps the label leading and the control trailing;\n   * `'start'` puts the control first, ahead of any `[etSelectionCardLeading]` media. Only `variant=\"card\"`\n   * reads it. @default 'end'\n   */\n  public controlPosition = input<SelectionCardControlPosition>(SELECTION_CARD_CONTROL_POSITIONS.END);\n\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    effect(() => {\n      if (this.variant() === CHECKBOX_OPTION_VARIANTS.CARD) {\n        this.styleManager.mount(SelectionCardStylesComponent);\n      }\n    });\n  }\n}\n","<div class=\"et-checkbox-option-box et-selection-card-control\">\n  <svg class=\"et-checkbox-option-check\" viewBox=\"0 0 12 10\" fill=\"none\">\n    <path\n      d=\"M1 5L4.5 8.5L11 1.5\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n    />\n  </svg>\n</div>\n<ng-content select=\"[etSelectionCardLeading]\" />\n<div class=\"et-checkbox-option-content et-selection-card-content\">\n  <span [attr.id]=\"optionDirective.labelId()\" class=\"et-checkbox-option-label et-selection-card-label\">\n    <ng-content />\n  </span>\n  <ng-content select=\"et-description\" />\n</div>\n<ng-content select=\"[etSelectionCardTrailing]\" />\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { createCanAnimateSignal, ProvideColorDirective } from '@ethlete/core';\nimport { FORM_FIELD_SIZES, FormFieldSize } from '../../form-field/form-field.variants';\nimport { FormSupportComponent } from '../../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../../form-field/headless';\nimport { SelectionListDirective } from '../../selection-list/headless';\nimport { SelectionListOrientation } from '../selection-list.types';\nimport { ACCESSIBLE_NAME_INPUTS } from '../../form-field/headless';\n\n@Component({\n  selector: 'et-radio-group',\n  templateUrl: './radio-group.component.html',\n  styleUrl: './radio-group.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: SelectionListDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-radio-group',\n    '[attr.data-size]': 'size()',\n    '[attr.data-orientation]': 'orientation()',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n  },\n})\nexport class RadioGroupComponent {\n  private list = inject(SelectionListDirective);\n  public support = injectFormSupport();\n  public size = input<FormFieldSize>(FORM_FIELD_SIZES.MD);\n\n  /**\n   * Lay the options out in a row instead of a column. Horizontal wraps, and the group's label and its\n   * error/hint block keep their own lines above and below - only the options flow.\n   */\n  public orientation = input<SelectionListOrientation>('vertical');\n\n  public canAnimate = createCanAnimateSignal();\n\n  public focus(options?: FocusOptions) {\n    this.list.focus(options);\n  }\n}\n","<ng-content />\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal, injectStyleManager } from '@ethlete/core';\nimport { SelectionCardStylesComponent } from '../../selection-card-styles.component';\nimport { SELECTION_CARD_CONTROL_POSITIONS, SelectionCardControlPosition } from '../../selection-card.types';\nimport { SelectionOptionDirective } from '../headless';\n\n/** How a radio presents itself. See {@link RadioComponent.variant}. */\nexport const RADIO_VARIANTS = {\n  PLAIN: 'plain',\n  CARD: 'card',\n} as const;\n\nexport type RadioVariant = (typeof RADIO_VARIANTS)[keyof typeof RADIO_VARIANTS];\n\n@Component({\n  selector: 'et-radio',\n  templateUrl: './radio.component.html',\n  styleUrl: './radio.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: SelectionOptionDirective,\n      inputs: ['value', 'checked', 'disabled'],\n      outputs: ['checkedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-radio',\n    '[attr.data-variant]': 'variant()',\n    '[class.et-selection-card]': \"variant() === 'card'\",\n    '[attr.data-control-position]': \"variant() === 'card' ? controlPosition() : null\",\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class RadioComponent {\n  public optionDirective = inject(SelectionOptionDirective);\n\n  private styleManager = injectStyleManager();\n\n  /**\n   * `'card'` turns the option into a full-width clickable panel with the label leading and the control trailing -\n   * for a small set of consequential choices (a plan, a shipping speed) where each deserves room for a\n   * description. `'plain'` is the ordinary control-then-label row. @default 'plain'\n   */\n  public variant = input<RadioVariant>(RADIO_VARIANTS.PLAIN);\n\n  /**\n   * Which end of the card the control sits at. `'end'` keeps the label leading and the control trailing;\n   * `'start'` puts the control first, ahead of any `[etSelectionCardLeading]` media. Only `variant=\"card\"`\n   * reads it. @default 'end'\n   */\n  public controlPosition = input<SelectionCardControlPosition>(SELECTION_CARD_CONTROL_POSITIONS.END);\n\n  public canAnimate = createCanAnimateSignal();\n\n  constructor() {\n    effect(() => {\n      if (this.variant() === RADIO_VARIANTS.CARD) {\n        this.styleManager.mount(SelectionCardStylesComponent);\n      }\n    });\n  }\n}\n","<div class=\"et-radio-circle et-selection-card-control\"></div>\n<ng-content select=\"[etSelectionCardLeading]\" />\n<div class=\"et-radio-content et-selection-card-content\">\n  <span [attr.id]=\"optionDirective.labelId()\" class=\"et-radio-label et-selection-card-label\">\n    <ng-content />\n  </span>\n  <ng-content select=\"et-description\" />\n</div>\n<ng-content select=\"[etSelectionCardTrailing]\" />\n","import { CheckboxGroupSelectAllComponent } from './checkbox-group/checkbox-group-select-all.component';\nimport { CheckboxGroupComponent } from './checkbox-group/checkbox-group.component';\nimport { CheckboxOptionComponent } from './checkbox-group/checkbox-option.component';\nimport { SelectionListControlDirective } from './headless/selection-list-control.directive';\nimport { SelectionListDirective } from './headless/selection-list.directive';\nimport { SelectionOptionDirective } from './headless/selection-option.directive';\nimport { RadioGroupComponent } from './radio-group/radio-group.component';\nimport { RadioComponent } from './radio-group/radio.component';\nimport { SegmentedButtonGroupComponent } from './segmented-button-group/segmented-button-group.component';\nimport { SegmentedButtonComponent } from './segmented-button-group/segmented-button.component';\n\n/**\n * The headless selection engine only (`etSelectionList`, `etSelectionOption`, `etSelectionListControl`) -\n * selection state, roving-tabindex keyboard navigation and the form-field wiring, with no visual opinion.\n * For a ready-made group use {@link CHECKBOX_GROUP_IMPORTS}, {@link RADIO_GROUP_IMPORTS} or\n * {@link SEGMENTED_BUTTON_IMPORTS} instead - they apply these directives themselves.\n */\nexport const SELECTION_LIST_IMPORTS = [\n  SelectionListDirective,\n  SelectionOptionDirective,\n  SelectionListControlDirective,\n] as const;\n\n/**\n * The multi-select group: `et-checkbox-group` with `et-checkbox-option` children, plus the\n * `et-checkbox-group-select-all` toggle for the mixed-state \"select all\" row.\n */\nexport const CHECKBOX_GROUP_IMPORTS = [\n  CheckboxGroupComponent,\n  CheckboxOptionComponent,\n  CheckboxGroupSelectAllComponent,\n] as const;\n\n/** The single-select radio group: `et-radio-group` with `et-radio` children. */\nexport const RADIO_GROUP_IMPORTS = [RadioGroupComponent, RadioComponent] as const;\n\n/**\n * The single-select connected button row: `et-segmented-button-group` with `et-segmented-button`\n * children (`variant=\"tabs\"` for the tabs look).\n */\nexport const SEGMENTED_BUTTON_IMPORTS = [SegmentedButtonGroupComponent, SegmentedButtonComponent] as const;\n","// codes 3100-3199\nexport const SLIDER_ERROR_CODES = {\n  THUMB_OUTSIDE_SLIDER: 3100,\n  TRACK_OUTSIDE_SLIDER: 3101,\n  THUMB_LABEL_OUTSIDE_SLIDER: 3102,\n  THUMB_COUNT_MISMATCH: 3103,\n  MARKS_TOO_DENSE: 3104,\n} as const;\n","import { RuntimeError } from '@ethlete/core';\nimport { SLIDER_ERROR_CODES } from '../../slider-errors';\nimport { SliderMark, SliderMarkStop, SliderMarks, SliderOrientation } from '../slider.tokens';\n\nexport type SliderBounds = {\n  min: number;\n  max: number;\n};\n\nexport type SliderSteppedBounds = SliderBounds & {\n  step: number;\n};\n\n/** Decimal places needed to represent `value` exactly - used to strip float noise after step math. */\nconst decimalPrecisionOf = (value: number) => {\n  const text = value.toString();\n\n  if (text.includes('e-')) {\n    return Number(text.split('e-')[1]);\n  }\n\n  const fraction = text.split('.')[1];\n\n  return fraction ? fraction.length : 0;\n};\n\nexport const clampValue = (value: number, bounds: SliderBounds) => Math.min(bounds.max, Math.max(bounds.min, value));\n\n/** Clamps into the bounds and snaps onto the step grid anchored at `min`, without float noise. */\nexport const snapValueToStep = (value: number, bounds: SliderSteppedBounds) => {\n  const { min, max, step } = bounds;\n\n  if (max <= min) {\n    return min;\n  }\n\n  const stepped = min + Math.round((clampValue(value, bounds) - min) / step) * step;\n  const precision = Math.max(decimalPrecisionOf(step), decimalPrecisionOf(min));\n  const rounded = Number(stepped.toFixed(precision));\n\n  return clampValue(rounded, bounds);\n};\n\n/** Position of `value` inside the bounds as a 0–100 percentage. */\nexport const valueToPercent = (value: number, bounds: SliderBounds) => {\n  const { min, max } = bounds;\n\n  if (max <= min) {\n    return 0;\n  }\n\n  return clampValue(((value - min) / (max - min)) * 100, { min: 0, max: 100 });\n};\n\nexport type PointerValueOptions = {\n  clientX: number;\n  clientY: number;\n  trackRect: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n  /** Mirrors a horizontal track. Vertical tracks are never mirrored (ARIA/W3C convention). */\n  rtl: boolean;\n  orientation: SliderOrientation;\n  bounds: SliderSteppedBounds;\n};\n\n/** Resolves the slider value under a pointer position, snapped to the step grid. */\nexport const valueFromPointerPosition = (options: PointerValueOptions) => {\n  const { clientX, clientY, trackRect, rtl, orientation, bounds } = options;\n  const vertical = orientation === 'vertical';\n  const extent = vertical ? trackRect.height : trackRect.width;\n\n  if (extent <= 0) {\n    return bounds.min;\n  }\n\n  // a vertical track runs bottom→up: its minimum sits at the bottom edge\n  const offset = vertical ? trackRect.top + trackRect.height - clientY : clientX - trackRect.left;\n  const fraction = clampValue(offset / extent, { min: 0, max: 1 });\n  const directedFraction = rtl && !vertical ? 1 - fraction : fraction;\n\n  return snapValueToStep(bounds.min + directedFraction * (bounds.max - bounds.min), bounds);\n};\n\n/**\n * The thumb a track interaction should move: the one closest to the target value.\n * Coincident thumbs tie-break by drag direction - a target above the shared value\n * picks the later thumb so the pair can spread apart.\n */\nexport const nearestThumbIndex = (target: number, values: readonly number[]) => {\n  let nearest = 0;\n  let nearestDistance = Number.POSITIVE_INFINITY;\n\n  values.forEach((value, index) => {\n    const distance = Math.abs(value - target);\n\n    if (distance < nearestDistance || (distance === nearestDistance && target > value)) {\n      nearest = index;\n      nearestDistance = distance;\n    }\n  });\n\n  return nearest;\n};\n\nexport type RangeThumbConstraint = {\n  /** Which end of the range the thumb controls. */\n  end: 'start' | 'end';\n  /** The other thumb's current value. */\n  otherValue: number;\n  /** Minimum gap kept between the two thumbs - should be a multiple of `step`. */\n  minDistance: number;\n};\n\n/** Keeps a range thumb from crossing (or getting closer than `minDistance` to) its sibling. */\nexport const constrainRangeThumb = (value: number, constraint: RangeThumbConstraint) => {\n  const { end, otherValue, minDistance } = constraint;\n\n  return end === 'start' ? Math.min(value, otherValue - minDistance) : Math.max(value, otherValue + minDistance);\n};\n\n/** Upper bound on how many ticks `marks: true` may generate before it becomes a DOM problem. */\nexport const MAX_GENERATED_MARKS = 200;\n\n// `ngDevMode` is undefined outside an Angular runtime (pure unit specs) - treat that as dev\nconst isDevMode = () => typeof ngDevMode === 'undefined' || !!ngDevMode;\n\n/**\n * The tick stops in effect: ascending, inside the bounds and de-duplicated.\n * `true` derives one tick per `step` (plus one at an off-grid `max`).\n */\nexport const resolveMarks = (marks: SliderMarks, bounds: SliderSteppedBounds): readonly SliderMark[] => {\n  const { min, max, step } = bounds;\n\n  if (!marks || max <= min || step <= 0) {\n    return [];\n  }\n\n  if (marks !== true) {\n    const seen = new Set<number>();\n\n    return marks\n      .filter((mark) => mark.value >= min && mark.value <= max)\n      .sort((a, b) => a.value - b.value)\n      .filter((mark) => {\n        if (seen.has(mark.value)) {\n          return false;\n        }\n\n        seen.add(mark.value);\n\n        return true;\n      });\n  }\n\n  const count = Math.floor((max - min) / step);\n\n  if (isDevMode() && count + 1 > MAX_GENERATED_MARKS) {\n    throw new RuntimeError(\n      SLIDER_ERROR_CODES.MARKS_TOO_DENSE,\n      `A slider with marks=\"true\" would render ${count + 1} ticks for step ${step} over ${min}–${max} (the limit is ${MAX_GENERATED_MARKS}). Raise the step or pass an explicit marks array.`,\n    );\n  }\n\n  const stops: SliderMark[] = [];\n\n  for (let index = 0; index <= count; index++) {\n    stops.push({ value: snapValueToStep(min + index * step, bounds) });\n  }\n\n  // a max that is off the step grid still gets a tick - the track visibly ends there\n  if (stops[stops.length - 1]?.value !== max) {\n    stops.push({ value: max });\n  }\n\n  return stops;\n};\n\nexport type MarkStopOptions = {\n  bounds: SliderBounds;\n  /** The filled part of the track - marks inside it are flagged active. `null` flags none. */\n  activeRange: readonly [number, number] | null;\n};\n\n/** Positions marks on the track and flags the ones inside the active range. */\nexport const toMarkStops = (marks: readonly SliderMark[], options: MarkStopOptions): readonly SliderMarkStop[] => {\n  const { bounds, activeRange } = options;\n\n  return marks.map((mark) => ({\n    ...mark,\n    percent: valueToPercent(mark.value, bounds),\n    active: activeRange !== null && mark.value >= activeRange[0] && mark.value <= activeRange[1],\n  }));\n};\n\n/** Which marks a snap may land on: the nearest one, or the nearest at/below (`down`) / at/above (`up`). */\nexport type MarkSnapDirection = 'nearest' | 'down' | 'up';\n\nexport type MarkSnapOptions = {\n  /** The mark grid, ascending. */\n  markValues: readonly number[];\n  /** Restricts the result to marks at or below / above the value. Defaults to the nearest mark. */\n  direction?: MarkSnapDirection;\n};\n\n/** Snaps onto the mark grid, or returns `value` unchanged when there are no marks. */\nexport const snapValueToMarks = (value: number, options: MarkSnapOptions) => {\n  const { markValues, direction = 'nearest' } = options;\n  const first = markValues[0];\n  const last = markValues[markValues.length - 1];\n\n  if (first === undefined || last === undefined) {\n    return value;\n  }\n\n  if (direction === 'down') {\n    for (let index = markValues.length - 1; index >= 0; index--) {\n      const mark = markValues[index];\n\n      if (mark !== undefined && mark <= value) {\n        return mark;\n      }\n    }\n\n    return first;\n  }\n\n  if (direction === 'up') {\n    return markValues.find((mark) => mark >= value) ?? last;\n  }\n\n  return markValues.reduce(\n    (nearest, mark) => (Math.abs(mark - value) < Math.abs(nearest - value) ? mark : nearest),\n    first,\n  );\n};\n\nexport type AdjacentMarkOptions = {\n  /** The mark grid, ascending. */\n  markValues: readonly number[];\n  /** How many marks to move - negative moves towards the minimum. */\n  steps: number;\n};\n\n/** The mark `steps` positions away from the one nearest `value`, clamped to the ends. */\nexport const adjacentMarkValue = (value: number, options: AdjacentMarkOptions) => {\n  const { markValues, steps } = options;\n\n  if (!markValues.length) {\n    return value;\n  }\n\n  const current = markValues.indexOf(snapValueToMarks(value, { markValues }));\n  const next = clampValue(current + steps, { min: 0, max: markValues.length - 1 });\n\n  return markValues[next] ?? value;\n};\n","import { InjectionToken, Signal, TemplateRef, WritableSignal } from '@angular/core';\n\n/** Axis a slider runs along. Vertical sliders run bottom→up and are never mirrored in RTL. */\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\n/** A tick stop on the track. The optional `label` is presentation-only. */\nexport type SliderMark = {\n  value: number;\n  label?: string;\n};\n\n/** `true` renders a tick at every `step`; an array renders explicit stops. */\nexport type SliderMarks = boolean | readonly SliderMark[];\n\n/** A tick stop resolved against the current bounds, ready to render. */\nexport type SliderMarkStop = SliderMark & {\n  /** Position on the track as a 0–100 percentage. */\n  percent: number;\n  /** Whether the tick sits inside the filled part of the track. */\n  active: boolean;\n};\n\n/**\n * Attribute a tick element carries so that a pointerdown on it commits that exact\n * value instead of the value under the pointer. The default components set it on\n * every rendered tick; custom markup can opt in the same way.\n */\nexport const SLIDER_MARK_VALUE_ATTRIBUTE = 'data-et-slider-mark-value';\n\nexport type SliderThumbLabelContext = {\n  /** The value the thumb currently represents. */\n  $implicit: number;\n  /** The thumb's index in registration order (`0` = start, `1` = end for ranges). */\n  index: number;\n};\n\nexport type SliderThumbLabelBase = {\n  templateRef: TemplateRef<SliderThumbLabelContext>;\n};\n\nexport type SliderThumbBase = {\n  focused: Signal<boolean>;\n  /** The thumb's own `aria-label`, if the consumer set one instead of a shared `<et-label>`. */\n  label: Signal<string>;\n  focus(options?: FocusOptions & { origin?: 'pointer' }): void;\n};\n\n/**\n * The contract both `[etSlider]` and `[etRangeSlider]` provide under `SLIDER_TOKEN`,\n * letting the thumb/track/label sub-directives compose with either parent.\n */\nexport type SliderHostBase = {\n  effectiveMin: Signal<number>;\n  effectiveMax: Signal<number>;\n  step: Signal<number>;\n  orientation: Signal<SliderOrientation>;\n  /** Whether commits snap onto the marks instead of the `step` grid. */\n  snapToMarks: Signal<boolean>;\n  /** Tick stops to render, in ascending value order. Empty while `marks` is off. */\n  markStops: Signal<readonly SliderMarkStop[]>;\n  /** Bulk-edit view state - while set, thumbs park at the track start and hide their value from ARIA. */\n  mixed: Signal<boolean>;\n  /** `aria-valuetext` the thumbs announce while `mixed` is set, after `SLIDER_LABELS` is applied. */\n  resolvedMixedLabel: Signal<string>;\n  disabled: Signal<boolean>;\n  readonly: Signal<boolean>;\n  interactive: Signal<boolean>;\n  shouldDisplayError: Signal<boolean>;\n  labelId: Signal<string | null>;\n  describedBy: Signal<string | null>;\n  /** The thumb currently being dragged via the track, or `null` - set by the track directive. */\n  draggingThumbIndex: WritableSignal<number | null>;\n  /** Current thumb values in thumb order - already clamped and snapped for display. */\n  thumbValues: Signal<readonly number[]>;\n  /** `thumbValues` as 0–100 track percentages, for positioning. */\n  thumbPercents: Signal<readonly number[]>;\n  /** Registered thumbs in registration order - a thumb's index is its position in this list. */\n  thumbs: Signal<readonly SliderThumbBase[]>;\n  registeredThumbLabelTemplate: WritableSignal<SliderThumbLabelBase | null>;\n  /** The ARIA value bounds of a thumb - in range mode each thumb is bounded by its sibling. */\n  thumbAriaBounds(index: number): { min: number; max: number };\n  /** `aria-valuetext` for the thumb at `index`, or `null` to announce the raw number. */\n  thumbValueText(index: number): string | null;\n  /** The value `steps` keyboard steps from `value` - mark-aware while snapping to marks. */\n  adjacentValue(value: number, steps: number): number;\n  /** Clamps + snaps `value` and commits it to the thumb at `index`. */\n  commitThumbValue(index: number, value: number): void;\n  markTouched(): void;\n  registerThumb(thumb: SliderThumbBase): void;\n  unregisterThumb(thumb: SliderThumbBase): void;\n};\n\nexport const SLIDER_TOKEN = new InjectionToken<SliderHostBase>('SLIDER_TOKEN');\n","import {\n  DestroyRef,\n  Directive,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { FORM_FIELD_CONTROL_TYPES, FORM_FIELD_TOKEN, FormFieldControl } from '../../form-field/headless';\nimport { SLIDER_ERROR_CODES } from '../slider-errors';\nimport {\n  adjacentMarkValue,\n  constrainRangeThumb,\n  resolveMarks,\n  snapValueToMarks,\n  snapValueToStep,\n  toMarkStops,\n  valueToPercent,\n} from './internals/slider-engine';\nimport {\n  SLIDER_TOKEN,\n  SliderHostBase,\n  SliderMarks,\n  SliderOrientation,\n  SliderThumbBase,\n  SliderThumbLabelBase,\n} from './slider.tokens';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\n\nexport type RangeSliderValue = [number, number];\n\n@Directive({\n  selector: '[etRangeSlider]',\n  exportAs: 'etRangeSlider',\n  providers: [{ provide: SLIDER_TOKEN, useExisting: RangeSliderDirective }],\n  host: {\n    '[attr.data-mixed]': 'mixed() || null',\n    '[attr.data-orientation]': 'orientation()',\n  },\n})\nexport class RangeSliderDirective implements FormValueControl<RangeSliderValue>, FormFieldControl, SliderHostBase {\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  public value = model<RangeSliderValue>([0, 100]);\n  /** View state for a field whose source values disagree. The raw form value stays untouched. */\n  public mixed = model(false);\n  /** `aria-valuetext` both thumbs announce while `mixed` is set. */\n  public mixedLabel = input<string | null>(null);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  // The signal-forms `FormValueControl` contract reserves `min`/`max` and types them as the\n  // value shape (here the tuple), so the numeric track bounds need their own names.\n  public minValue = input(0, { transform: numberAttribute });\n  public maxValue = input(100, { transform: numberAttribute });\n  public step = input(1, { transform: numberAttribute });\n\n  /** Minimum gap kept between the two thumbs - should be a multiple of `step`. */\n  public minDistance = input(0, { transform: numberAttribute });\n\n  /** Axis the slider runs along. A vertical slider runs bottom→up and is not mirrored in RTL. */\n  public orientation = input<SliderOrientation>('horizontal');\n\n  /** Tick stops: `true` for one per `step`, or an explicit list of (optionally labelled) values. */\n  public marks = input<SliderMarks>(false);\n\n  /** Snaps commits onto the marks instead of the `step` grid. No effect without `marks`. */\n  public snapToMarks = input(false, { transform: booleanAttribute });\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public effectiveMin = computed(() => this.minValue());\n  public effectiveMax = computed(() => this.maxValue());\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public hasValue = computed(() => true);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.RANGE_SLIDER);\n\n  public labelId = computed(() => this.formField?.registeredLabel()?.id() ?? null);\n\n  public draggingThumbIndex = signal<number | null>(null);\n\n  public thumbs = signal<readonly SliderThumbBase[]>([]);\n  public registeredThumbLabelTemplate = signal<SliderThumbLabelBase | null>(null);\n\n  public focused = computed(() => this.thumbs().some((thumb) => thumb.focused()));\n\n  public hasCustomAccessibleName = computed(() => this.thumbs().some((thumb) => !!thumb.label().trim()));\n\n  private bounds = computed(() => ({ min: this.effectiveMin(), max: this.effectiveMax(), step: this.step() }));\n\n  private resolvedMarks = computed(() => resolveMarks(this.marks(), this.bounds()));\n\n  private markValues = computed(() => this.resolvedMarks().map((mark) => mark.value));\n\n  /** The mark grid commits snap to, or empty when `snapToMarks` is off. */\n  private snapMarkValues = computed(() => (this.snapToMarks() ? this.markValues() : []));\n\n  // while mixed, both thumbs park at the track start so the DOM (positions, ARIA) exposes\n  // nothing of the hidden raw range - the keyboard model then also steps from the minimum\n  public thumbValues = computed<readonly number[]>(() => {\n    if (this.mixed()) {\n      const min = this.effectiveMin();\n\n      return [min, min];\n    }\n\n    const snapped = this.value().map((end) => this.snapValue(end));\n\n    return [Math.min(...snapped), Math.max(...snapped)];\n  });\n\n  public thumbPercents = computed<readonly number[]>(() =>\n    this.thumbValues().map((value) => valueToPercent(value, this.bounds())),\n  );\n\n  public markStops = computed(() => {\n    const [start, end] = this.thumbValues();\n\n    return toMarkStops(this.resolvedMarks(), {\n      bounds: this.bounds(),\n      // parked thumbs fill nothing - no tick may read as active while mixed\n      activeRange: this.mixed() || start === undefined || end === undefined ? null : [start, end],\n    });\n  });\n\n  constructor() {\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (this.thumbs().length !== 2) {\n          throw new RuntimeError(\n            SLIDER_ERROR_CODES.THUMB_COUNT_MISMATCH,\n            `[RangeSliderDirective] Expected exactly two [etSliderThumb] elements but found ${this.thumbs().length}. Place a start and an end thumb inside the range slider.`,\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.thumbs()[0]?.focus(options);\n  }\n\n  public thumbAriaBounds(index: number) {\n    // parked thumbs carry no sibling constraint - while mixed, both announce the full track\n    if (this.mixed()) {\n      return { min: this.effectiveMin(), max: this.effectiveMax() };\n    }\n\n    const [start, end] = this.thumbValues() as RangeSliderValue;\n\n    return index === 0\n      ? { min: this.effectiveMin(), max: end - this.minDistance() }\n      : { min: start + this.minDistance(), max: this.effectiveMax() };\n  }\n\n  public thumbValueText(index: number) {\n    if (this.mixed()) {\n      return this.resolvedMixedLabel();\n    }\n\n    const value = this.thumbValues()[index];\n\n    return this.resolvedMarks().find((mark) => mark.value === value)?.label ?? null;\n  }\n\n  public adjacentValue(value: number, steps: number) {\n    const markValues = this.snapMarkValues();\n\n    return markValues.length ? adjacentMarkValue(value, { markValues, steps }) : value + steps * this.step();\n  }\n\n  public commitThumbValue(index: number, value: number) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    // only user interactions route through here - the first committed thumb resolves mixed\n    // by writing a fresh range: the chosen value on its end, the default bound on the other\n    if (this.mixed()) {\n      const otherBound = index === 0 ? this.effectiveMax() : this.effectiveMin();\n      const snapped = this.constrainAndSnap(value, { index, otherValue: otherBound });\n\n      this.mixed.set(false);\n      this.value.set(index === 0 ? [snapped, otherBound] : [otherBound, snapped]);\n\n      return;\n    }\n\n    const current = this.thumbValues() as RangeSliderValue;\n    const snapped = this.constrainAndSnap(value, { index, otherValue: current[index === 0 ? 1 : 0] });\n\n    if (snapped === current[index]) {\n      return;\n    }\n\n    this.value.set(index === 0 ? [snapped, current[1]] : [current[0], snapped]);\n  }\n\n  public markTouched() {\n    this.touched.set(true);\n  }\n\n  /** @internal */\n  public registerThumb(thumb: SliderThumbBase) {\n    this.thumbs.update((thumbs) => [...thumbs, thumb]);\n  }\n\n  /** @internal */\n  public unregisterThumb(thumb: SliderThumbBase) {\n    this.thumbs.update((thumbs) => thumbs.filter((registered) => registered !== thumb));\n  }\n\n  private snapValue(value: number) {\n    const markValues = this.snapMarkValues();\n\n    if (markValues.length) {\n      return snapValueToMarks(value, { markValues });\n    }\n\n    // a rendered tick advertises its value as a stop, so a press on one must not be pulled onto the step grid\n    return this.markValues().includes(value) ? value : snapValueToStep(value, this.bounds());\n  }\n\n  /**\n   * Snaps `value` and keeps it clear of the sibling. A sibling limit that moved the value need not\n   * sit on the grid, so it is snapped once more - away from the sibling, never across it.\n   */\n  private constrainAndSnap(value: number, thumb: { index: number; otherValue: number }) {\n    const end = thumb.index === 0 ? 'start' : 'end';\n    const snapped = this.snapValue(value);\n    const constrained = constrainRangeThumb(snapped, {\n      end,\n      otherValue: thumb.otherValue,\n      minDistance: this.minDistance(),\n    });\n\n    if (constrained === snapped) {\n      return constrained;\n    }\n\n    const markValues = this.snapMarkValues();\n\n    return markValues.length\n      ? snapValueToMarks(constrained, { markValues, direction: end === 'start' ? 'down' : 'up' })\n      : snapValueToStep(constrained, this.bounds());\n  }\n}\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SLIDER_ERROR_CODES } from '../slider-errors';\nimport { SLIDER_TOKEN, SliderThumbLabelBase, SliderThumbLabelContext } from './slider.tokens';\n\n/** Opts the slider into value labels - rendered once per thumb with its current value. */\n@Directive({\n  selector: 'ng-template[etSliderThumbLabel]',\n  exportAs: 'etSliderThumbLabel',\n})\nexport class SliderThumbLabelDirective implements SliderThumbLabelBase {\n  private slider = inject(SLIDER_TOKEN, { optional: true });\n  public templateRef = inject<TemplateRef<SliderThumbLabelContext>>(TemplateRef);\n  private hostElement = injectHostElement<Comment>();\n\n  constructor() {\n    registerSingleton(this.slider?.registeredThumbLabelTemplate, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.slider) {\n          throw new RuntimeError(\n            SLIDER_ERROR_CODES.THUMB_LABEL_OUTSIDE_SLIDER,\n            'An ng-template[etSliderThumbLabel] must be placed inside an [etSlider] or [etRangeSlider].',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, inject, input, signal } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { SLIDER_ERROR_CODES } from '../slider-errors';\nimport { SLIDER_TOKEN, SliderThumbBase } from './slider.tokens';\n\nconst PAGE_STEP_MULTIPLIER = 10;\n\n/** `origin: 'pointer'` focuses the thumb without raising its focus ring - see `pointerFocused`. */\nexport type SliderThumbFocusOptions = FocusOptions & { origin?: 'pointer' };\n\n/**\n * A slider thumb: carries the ARIA slider semantics and the keyboard model.\n * Registration order determines its index - for ranges, place the start thumb first.\n */\n@Directive({\n  selector: '[etSliderThumb]',\n  exportAs: 'etSliderThumb',\n  host: {\n    role: 'slider',\n    // a vertical thumb pans the page horizontally instead - the drag axis is the blocked one\n    '[style.touch-action]': 'vertical() ? \"pan-x\" : \"pan-y\"',\n    '[attr.aria-orientation]': 'slider?.orientation() ?? \"horizontal\"',\n    '[attr.tabindex]': 'slider?.disabled() ? -1 : 0',\n    '[attr.aria-valuemin]': 'ariaMin()',\n    '[attr.aria-valuemax]': 'ariaMax()',\n    // a removed aria-valuenow is the ARIA-sanctioned \"indeterminate value\" - the valuetext\n    // then carries the mixed label so assistive tech announces the bulk-edit state\n    '[attr.aria-valuenow]': 'slider?.mixed() ? null : value()',\n    '[attr.aria-valuetext]': 'slider?.thumbValueText(index())',\n    '[attr.aria-label]': 'label() || null',\n    '[attr.aria-labelledby]': 'label() ? null : slider?.labelId()',\n    '[attr.aria-describedby]': 'slider?.describedBy()',\n    '[attr.aria-disabled]': 'slider?.disabled() || null',\n    '[attr.aria-readonly]': 'slider?.readonly() || null',\n    '[attr.aria-invalid]': 'slider?.shouldDisplayError() || null',\n    '[attr.data-disabled]': 'slider?.disabled() || null',\n    '[attr.data-readonly]': 'slider?.readonly() || null',\n    '[attr.data-dragging]': 'dragging() || null',\n    '[attr.data-pointer-focused]': 'pointerFocused() || null',\n    '(keydown)': 'handleKeydown($event)',\n    '(focus)': 'focused.set(true)',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class SliderThumbDirective implements SliderThumbBase {\n  protected slider = inject(SLIDER_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  /** Accessible name of the thumb - range thumbs need one each (e.g. \"Minimum\"). */\n  public label = input('');\n\n  public focused = signal(false);\n\n  /**\n   * Set while the current focus came from a pointer press. The track focuses the thumb\n   * programmatically after preventing the pointerdown default, and a programmatic `focus()` with no\n   * preceding native focus makes Chrome match `:focus-visible` - which left the ring stuck on after\n   * every click. The stylesheet gates the ring on this; the next key press clears it.\n   */\n  public pointerFocused = signal(false);\n\n  public index = computed(() => this.slider?.thumbs().indexOf(this) ?? -1);\n\n  public value = computed(() => this.slider?.thumbValues()[this.index()] ?? 0);\n\n  /** The thumb's position on the track as a 0–100 percentage. */\n  public percent = computed(() => this.slider?.thumbPercents()[this.index()] ?? 0);\n\n  public dragging = computed(() => this.slider !== null && this.slider.draggingThumbIndex() === this.index());\n\n  protected vertical = computed(() => this.slider?.orientation() === 'vertical');\n\n  protected ariaMin = computed(() => this.slider?.thumbAriaBounds(this.index()).min ?? 0);\n  protected ariaMax = computed(() => this.slider?.thumbAriaBounds(this.index()).max ?? 100);\n\n  constructor() {\n    this.slider?.registerThumb(this);\n    this.destroyRef.onDestroy(() => this.slider?.unregisterThumb(this));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.slider) {\n          throw new RuntimeError(\n            SLIDER_ERROR_CODES.THUMB_OUTSIDE_SLIDER,\n            'An [etSliderThumb] must be placed inside an [etSlider] or [etRangeSlider].',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  public focus(options?: SliderThumbFocusOptions) {\n    this.pointerFocused.set(options?.origin === 'pointer');\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  protected handleBlur() {\n    this.focused.set(false);\n    this.pointerFocused.set(false);\n    this.slider?.markTouched();\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    // any key press means the user moved to the keyboard - the ring belongs back on\n    this.pointerFocused.set(false);\n\n    const slider = this.slider;\n\n    if (!slider || !slider.interactive() || event.ctrlKey || event.metaKey || event.altKey) {\n      return;\n    }\n\n    const index = this.index();\n    const value = this.value();\n    // direction-aware horizontal keys: ArrowRight always moves the thumb visually right.\n    // A vertical track is never mirrored, so RTL leaves its arrow mapping alone.\n    const horizontalSign =\n      !this.vertical() && getComputedStyle(this.elementRef.nativeElement).direction === 'rtl' ? -1 : 1;\n\n    switch (event.key) {\n      case 'ArrowRight': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, horizontalSign));\n\n        return;\n      }\n      case 'ArrowLeft': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, -horizontalSign));\n\n        return;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, 1));\n\n        return;\n      }\n      case 'ArrowDown': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, -1));\n\n        return;\n      }\n      case 'PageUp': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, PAGE_STEP_MULTIPLIER));\n\n        return;\n      }\n      case 'PageDown': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.adjacentValue(value, -PAGE_STEP_MULTIPLIER));\n\n        return;\n      }\n      case 'Home': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.effectiveMin());\n\n        return;\n      }\n      case 'End': {\n        event.preventDefault();\n        slider.commitThumbValue(index, slider.effectiveMax());\n\n        return;\n      }\n    }\n  }\n}\n","import { DestroyRef, Directive, ElementRef, afterNextRender, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DragGestureEvent, RuntimeError, dragGestureFrom } from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { SLIDER_ERROR_CODES } from '../slider-errors';\nimport { nearestThumbIndex, valueFromPointerPosition } from './internals/slider-engine';\nimport { SLIDER_MARK_VALUE_ATTRIBUTE, SLIDER_TOKEN } from './slider.tokens';\n\n/** The exact stop a tick element under the pointer carries, or `null` for a plain track position. */\nconst markValueUnderPointer = (event: PointerEvent) => {\n  const target = event.target;\n\n  if (!(target instanceof Element)) {\n    return null;\n  }\n\n  // eslint-disable-next-line ethlete/no-dom-query -- pointer hit-testing: the pressed node may be any descendant of a tick (e.g. its label), and ticks are plain markup carrying no directive token\n  const mark = target.closest(`[${SLIDER_MARK_VALUE_ATTRIBUTE}]`);\n  const value = mark ? Number(mark.getAttribute(SLIDER_MARK_VALUE_ATTRIBUTE)) : NaN;\n\n  return Number.isFinite(value) ? value : null;\n};\n\n/**\n * The pointer surface of a slider: its rect maps pointer positions along the slider's\n * axis onto the value range. Place the thumbs inside it so their pointer events bubble here.\n */\n@Directive({\n  selector: '[etSliderTrack]',\n  exportAs: 'etSliderTrack',\n  host: {\n    // drags along the slider axis adjust it, page scrolling on the other axis stays native\n    '[style.touch-action]': 'vertical() ? \"pan-x\" : \"pan-y\"',\n    '(pointerdown)': 'handlePointerDown($event)',\n  },\n})\nexport class SliderTrackDirective {\n  private slider = inject(SLIDER_TOKEN, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n\n  protected vertical = computed(() => this.slider?.orientation() === 'vertical');\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.slider) {\n          throw new RuntimeError(\n            SLIDER_ERROR_CODES.TRACK_OUTSIDE_SLIDER,\n            'An [etSliderTrack] must be placed inside an [etSlider] or [etRangeSlider].',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handlePointerDown(event: PointerEvent) {\n    const slider = this.slider;\n\n    if (!slider || !slider.interactive() || event.button !== 0 || slider.draggingThumbIndex() !== null) {\n      return;\n    }\n\n    // a tap that starts on a tick commits that tick exactly, not the value under the pointer\n    const pressValue = markValueUnderPointer(event) ?? this.valueFromPosition(event.clientX, event.clientY);\n    const index = nearestThumbIndex(pressValue, slider.thumbValues());\n\n    slider.draggingThumbIndex.set(index);\n    slider.commitThumbValue(index, pressValue);\n    slider.thumbs()[index]?.focus({ origin: 'pointer' });\n\n    // keep the interaction from selecting text or starting a native drag\n    event.preventDefault();\n\n    // every pointer move counts: a slider follows the pointer from the first pixel, so there is\n    // no threshold below which the press is still just a click\n    dragGestureFrom(event, this.elementRef.nativeElement, { commitThreshold: 0 })\n      .pipe(\n        tap((gesture) => this.applyGesture(gesture, { index, pressValue })),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private applyGesture(gesture: DragGestureEvent, press: { index: number; pressValue: number }) {\n    const slider = this.slider;\n\n    if (!slider) {\n      return;\n    }\n\n    switch (gesture.type) {\n      case 'start':\n        return;\n      case 'move':\n        slider.commitThumbValue(press.index, this.valueFromPosition(gesture.data.clientX, gesture.data.clientY));\n\n        return;\n      case 'end':\n        slider.commitThumbValue(press.index, this.valueFromPosition(gesture.data.clientX, gesture.data.clientY));\n        slider.draggingThumbIndex.set(null);\n\n        return;\n      case 'cancelled':\n        // the browser took the gesture away - the last position the user chose is the one they pressed\n        slider.commitThumbValue(press.index, press.pressValue);\n        slider.draggingThumbIndex.set(null);\n\n        return;\n      case 'tapped':\n        slider.draggingThumbIndex.set(null);\n\n        return;\n    }\n  }\n\n  private valueFromPosition(clientX: number, clientY: number) {\n    const slider = this.slider;\n\n    if (!slider) {\n      return 0;\n    }\n\n    const element = this.elementRef.nativeElement;\n\n    return valueFromPointerPosition({\n      clientX,\n      clientY,\n      trackRect: element.getBoundingClientRect(),\n      rtl: getComputedStyle(element).direction === 'rtl',\n      orientation: slider.orientation(),\n      bounds: { min: slider.effectiveMin(), max: slider.effectiveMax(), step: slider.step() },\n    });\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { FORM_FIELD_CONTROL_TYPES, FORM_FIELD_TOKEN, FormFieldControl } from '../../form-field/headless';\nimport { SLIDER_ERROR_CODES } from '../slider-errors';\nimport {\n  adjacentMarkValue,\n  resolveMarks,\n  snapValueToMarks,\n  snapValueToStep,\n  toMarkStops,\n  valueToPercent,\n} from './internals/slider-engine';\nimport {\n  SLIDER_TOKEN,\n  SliderHostBase,\n  SliderMarks,\n  SliderOrientation,\n  SliderThumbBase,\n  SliderThumbLabelBase,\n} from './slider.tokens';\nimport { injectFormFieldLabels } from '../../../forms/form-field/form-field-labels';\n\n@Directive({\n  selector: '[etSlider]',\n  exportAs: 'etSlider',\n  providers: [{ provide: SLIDER_TOKEN, useExisting: SliderDirective }],\n  host: {\n    '[attr.data-mixed]': 'mixed() || null',\n    '[attr.data-orientation]': 'orientation()',\n  },\n})\nexport class SliderDirective implements FormValueControl<number>, FormFieldControl, SliderHostBase {\n  private formFieldLabels = injectFormFieldLabels();\n\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  public value = model(0);\n  /** View state for a field whose source values disagree. The raw form value stays untouched. */\n  public mixed = model(false);\n  /** `aria-valuetext` the thumb announces while `mixed` is set. */\n  public mixedLabel = input<string | null>(null);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  // `min`/`max` satisfy the signal-forms `FormValueControl` contract (`NonNullable<TValue> | undefined`),\n  // so schema `min(...)` / `max(...)` validators bind straight into these inputs.\n  public min = input<number | undefined>(undefined);\n  public max = input<number | undefined>(undefined);\n  public step = input(1, { transform: numberAttribute });\n\n  /** Axis the slider runs along. A vertical slider runs bottom→up and is not mirrored in RTL. */\n  public orientation = input<SliderOrientation>('horizontal');\n\n  /** Tick stops: `true` for one per `step`, or an explicit list of (optionally labelled) values. */\n  public marks = input<SliderMarks>(false);\n\n  /** Snaps commits onto the marks instead of the `step` grid. No effect without `marks`. */\n  public snapToMarks = input(false, { transform: booleanAttribute });\n\n  /** The string in effect: this instance's `mixedLabel`, else `FORM_FIELD_LABELS`. */\n  public resolvedMixedLabel = computed(() => this.mixedLabel() ?? this.formFieldLabels().mixed);\n\n  public effectiveMin = computed(() => this.min() ?? 0);\n  public effectiveMax = computed(() => this.max() ?? 100);\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n  public hasValue = computed(() => true);\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.SLIDER);\n\n  public labelId = computed(() => this.formField?.registeredLabel()?.id() ?? null);\n\n  public draggingThumbIndex = signal<number | null>(null);\n\n  public thumbs = signal<readonly SliderThumbBase[]>([]);\n  public registeredThumbLabelTemplate = signal<SliderThumbLabelBase | null>(null);\n\n  public hasCustomAccessibleName = computed(() => this.thumbs().some((thumb) => !!thumb.label().trim()));\n\n  public focused = computed(() => this.thumbs().some((thumb) => thumb.focused()));\n\n  private bounds = computed(() => ({ min: this.effectiveMin(), max: this.effectiveMax(), step: this.step() }));\n\n  private resolvedMarks = computed(() => resolveMarks(this.marks(), this.bounds()));\n\n  private markValues = computed(() => this.resolvedMarks().map((mark) => mark.value));\n\n  /** The mark grid commits snap to, or empty when `snapToMarks` is off. */\n  private snapMarkValues = computed(() => (this.snapToMarks() ? this.markValues() : []));\n\n  // while mixed, the thumb parks at the track start so the DOM (position, ARIA) exposes\n  // nothing of the hidden raw value - the keyboard model then also steps from the minimum\n  public thumbValues = computed<readonly number[]>(() =>\n    this.mixed() ? [this.effectiveMin()] : [this.snapValue(this.value())],\n  );\n\n  public thumbPercents = computed<readonly number[]>(() =>\n    this.thumbValues().map((value) => valueToPercent(value, this.bounds())),\n  );\n\n  public markStops = computed(() =>\n    toMarkStops(this.resolvedMarks(), {\n      bounds: this.bounds(),\n      // a parked thumb fills nothing - no tick may read as active while mixed\n      activeRange: this.mixed() ? null : [this.effectiveMin(), this.thumbValues()[0] ?? this.effectiveMin()],\n    }),\n  );\n\n  constructor() {\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (this.thumbs().length !== 1) {\n          throw new RuntimeError(\n            SLIDER_ERROR_CODES.THUMB_COUNT_MISMATCH,\n            `[SliderDirective] Expected exactly one [etSliderThumb] but found ${this.thumbs().length}. Place a single thumb element inside the slider (use [etRangeSlider] for two thumbs).`,\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public activate() {\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.thumbs()[0]?.focus(options);\n  }\n\n  public thumbAriaBounds() {\n    return { min: this.effectiveMin(), max: this.effectiveMax() };\n  }\n\n  public thumbValueText(index: number) {\n    void index;\n\n    if (this.mixed()) {\n      return this.resolvedMixedLabel();\n    }\n\n    const value = this.thumbValues()[0];\n\n    return this.resolvedMarks().find((mark) => mark.value === value)?.label ?? null;\n  }\n\n  public adjacentValue(value: number, steps: number) {\n    const markValues = this.snapMarkValues();\n\n    return markValues.length ? adjacentMarkValue(value, { markValues, steps }) : value + steps * this.step();\n  }\n\n  public commitThumbValue(index: number, value: number) {\n    // the single slider has one thumb - `index` only exists to satisfy the shared host contract\n    void index;\n\n    if (!this.interactive()) {\n      return;\n    }\n\n    const snapped = this.snapValue(value);\n\n    // only user interactions route through here - the first commit resolves mixed even\n    // when the chosen value happens to equal the hidden raw one (replace semantics)\n    this.mixed.set(false);\n\n    if (snapped !== this.value()) {\n      this.value.set(snapped);\n    }\n  }\n\n  public markTouched() {\n    this.touched.set(true);\n  }\n\n  /** @internal */\n  public registerThumb(thumb: SliderThumbBase) {\n    this.thumbs.update((thumbs) => [...thumbs, thumb]);\n  }\n\n  /** @internal */\n  public unregisterThumb(thumb: SliderThumbBase) {\n    this.thumbs.update((thumbs) => thumbs.filter((registered) => registered !== thumb));\n  }\n\n  private snapValue(value: number) {\n    const markValues = this.snapMarkValues();\n\n    if (markValues.length) {\n      return snapValueToMarks(value, { markValues });\n    }\n\n    // a rendered tick advertises its value as a stop, so a press on one must not be pulled onto the step grid\n    return this.markValues().includes(value) ? value : snapValueToStep(value, this.bounds());\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * The strings a slider announces. A range slider has two thumbs and no visible text, so naming them is\n * the only way a screen reader can tell them apart.\n */\nexport type SliderLabels = {\n  /** Accessible label for a range slider's lower thumb. */\n  minimum: string;\n  /** Accessible label for a range slider's upper thumb. */\n  maximum: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_SLIDER_LABELS: SliderLabels = {\n  minimum: 'Minimum',\n  maximum: 'Maximum',\n};\n\nconst SLIDER_LABELS_DEF = /* @__PURE__ */ defineLabels<SliderLabels>('SLIDER_LABELS', DEFAULT_SLIDER_LABELS);\n\n/**\n * Localize a slider's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_SLIDER_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideSliderLabels({ minimum: 'Minimum', maximum: 'Maximum' });\n */\nexport const provideSliderLabels = /* @__PURE__ */ toProvideFn(SLIDER_LABELS_DEF);\nexport const injectSliderLabels = /* @__PURE__ */ toInjectFn(SLIDER_LABELS_DEF);\nexport const SLIDER_LABELS = /* @__PURE__ */ toToken(SLIDER_LABELS_DEF);\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\nimport { RangeSliderDirective, SliderThumbDirective, SliderThumbLabelContext, SliderTrackDirective } from './headless';\nimport { injectSliderLabels } from '../../forms/slider/slider-labels';\n\n@Component({\n  selector: 'et-range-slider',\n  templateUrl: './range-slider.component.html',\n  styleUrl: './range-slider.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent, NgTemplateOutlet, SliderThumbDirective, SliderTrackDirective],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: RangeSliderDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'minValue',\n        'maxValue',\n        'step',\n        'minDistance',\n        'orientation',\n        'marks',\n        'snapToMarks',\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-range-slider',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n    '[attr.data-disabled]': 'slider.disabled() || null',\n    '[attr.data-readonly]': 'slider.readonly() || null',\n    '[attr.data-dragging]': 'slider.draggingThumbIndex() !== null || null',\n    '[attr.data-mark-labels]': 'hasMarkLabels() || null',\n  },\n})\nexport class RangeSliderComponent {\n  private sliderLabels = injectSliderLabels();\n\n  public support = injectFormSupport();\n  protected slider = inject(RangeSliderDirective);\n\n  /** Accessible name of the start thumb. */\n  public startLabel = input<string | null>(null);\n\n  /** Accessible name of the end thumb. */\n  public endLabel = input<string | null>(null);\n\n  /** The string in effect: this instance's `startLabel`, else the domain's label set. */\n  protected resolvedStartLabel = computed(() => this.startLabel() ?? this.sliderLabels().minimum);\n\n  /** The string in effect: this instance's `endLabel`, else the domain's label set. */\n  protected resolvedEndLabel = computed(() => this.endLabel() ?? this.sliderLabels().maximum);\n\n  /** Labelled ticks need room next to the track - the stylesheet reserves it off this flag. */\n  protected hasMarkLabels = computed(() => this.slider.markStops().some((mark) => !!mark.label));\n  public canAnimate = createCanAnimateSignal();\n\n  protected thumbLabelContext(index: number): SliderThumbLabelContext {\n    return { $implicit: this.slider.thumbValues()[index] ?? 0, index };\n  }\n\n  public focus(options?: FocusOptions) {\n    this.slider.focus(options);\n  }\n}\n","<ng-content />\n\n<div class=\"et-range-slider-interaction\" etSliderTrack>\n  <div class=\"et-range-slider-rail\" aria-hidden=\"true\"></div>\n  <div\n    [style.--_et-slider-fill-start]=\"slider.thumbPercents()[0] ?? 0\"\n    [style.--_et-slider-fill-end]=\"slider.thumbPercents()[1] ?? 0\"\n    class=\"et-range-slider-fill\"\n    aria-hidden=\"true\"\n  ></div>\n\n  @if (slider.markStops().length) {\n    <!-- the accessible values live on the thumbs — tick labels are decoration -->\n    <div class=\"et-range-slider-marks\" aria-hidden=\"true\">\n      @for (mark of slider.markStops(); track mark.value) {\n        <span\n          [attr.data-active]=\"mark.active || null\"\n          [attr.data-et-slider-mark-value]=\"mark.value\"\n          [style.--_et-slider-mark-position]=\"mark.percent\"\n          class=\"et-range-slider-mark\"\n        >\n          @if (mark.label) {\n            <span class=\"et-range-slider-mark-label\">{{ mark.label }}</span>\n          }\n        </span>\n      }\n    </div>\n  }\n\n  <div\n    #startThumb=\"etSliderThumb\"\n    [label]=\"resolvedStartLabel()\"\n    [style.--_et-slider-thumb-position]=\"startThumb.percent()\"\n    class=\"et-range-slider-thumb\"\n    etSliderThumb\n  >\n    @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n      <div class=\"et-range-slider-thumb-value\" aria-hidden=\"true\">\n        <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(0)\" />\n      </div>\n    }\n  </div>\n\n  <div\n    #endThumb=\"etSliderThumb\"\n    [label]=\"resolvedEndLabel()\"\n    [style.--_et-slider-thumb-position]=\"endThumb.percent()\"\n    class=\"et-range-slider-thumb\"\n    etSliderThumb\n  >\n    @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n      <div class=\"et-range-slider-thumb-value\" aria-hidden=\"true\">\n        <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(1)\" />\n      </div>\n    }\n  </div>\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { ProvideColorDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { FormSupportComponent } from '../form-field/partials/form-support.component';\nimport { FormFieldDirective, injectFormSupport, provideFormSupport } from '../form-field/headless';\nimport { SliderDirective, SliderThumbDirective, SliderThumbLabelContext, SliderTrackDirective } from './headless';\n\n@Component({\n  selector: 'et-slider',\n  templateUrl: './slider.component.html',\n  styleUrl: './slider.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormSupportComponent, NgTemplateOutlet, SliderThumbDirective, SliderTrackDirective],\n  providers: [provideFormSupport()],\n  hostDirectives: [\n    FormFieldDirective,\n    {\n      directive: SliderDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'mixedLabel',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'min',\n        'max',\n        'step',\n        'orientation',\n        'marks',\n        'snapToMarks',\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    { directive: ProvideColorDirective, inputs: ['etProvideColor:color'] },\n  ],\n  host: {\n    class: 'et-slider',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n    '[attr.data-error]': 'support.displaysError() || null',\n    '[attr.data-warning]': 'support.displaysWarning() || null',\n    '[attr.data-disabled]': 'slider.disabled() || null',\n    '[attr.data-readonly]': 'slider.readonly() || null',\n    '[attr.data-dragging]': 'slider.draggingThumbIndex() !== null || null',\n    '[attr.data-mark-labels]': 'hasMarkLabels() || null',\n  },\n})\nexport class SliderComponent {\n  public support = injectFormSupport();\n  protected slider = inject(SliderDirective);\n\n  /** Labelled ticks need room next to the track - the stylesheet reserves it off this flag. */\n  protected hasMarkLabels = computed(() => this.slider.markStops().some((mark) => !!mark.label));\n  public canAnimate = createCanAnimateSignal();\n\n  protected thumbLabelContext(index: number): SliderThumbLabelContext {\n    return { $implicit: this.slider.thumbValues()[index] ?? 0, index };\n  }\n\n  public focus(options?: FocusOptions) {\n    this.slider.focus(options);\n  }\n}\n","<ng-content />\n\n<div class=\"et-slider-interaction\" etSliderTrack>\n  <div class=\"et-slider-rail\" aria-hidden=\"true\"></div>\n  <div [style.--_et-slider-fill-end]=\"slider.thumbPercents()[0] ?? 0\" class=\"et-slider-fill\" aria-hidden=\"true\"></div>\n\n  @if (slider.markStops().length) {\n    <!-- the accessible value lives on the thumb — tick labels are decoration -->\n    <div class=\"et-slider-marks\" aria-hidden=\"true\">\n      @for (mark of slider.markStops(); track mark.value) {\n        <span\n          [attr.data-active]=\"mark.active || null\"\n          [attr.data-et-slider-mark-value]=\"mark.value\"\n          [style.--_et-slider-mark-position]=\"mark.percent\"\n          class=\"et-slider-mark\"\n        >\n          @if (mark.label) {\n            <span class=\"et-slider-mark-label\">{{ mark.label }}</span>\n          }\n        </span>\n      }\n    </div>\n  }\n\n  <div\n    #thumb=\"etSliderThumb\"\n    [style.--_et-slider-thumb-position]=\"thumb.percent()\"\n    class=\"et-slider-thumb\"\n    etSliderThumb\n  >\n    @if (slider.registeredThumbLabelTemplate(); as labelTemplate) {\n      <div class=\"et-slider-thumb-value\" aria-hidden=\"true\">\n        <ng-template [ngTemplateOutlet]=\"labelTemplate.templateRef\" [ngTemplateOutletContext]=\"thumbLabelContext(0)\" />\n      </div>\n    }\n  </div>\n</div>\n\n@if (support.shouldRenderSupport()) {\n  <et-form-support><ng-content select=\"et-hint\" /></et-form-support>\n}\n","import {\n  RangeSliderDirective,\n  SliderDirective,\n  SliderThumbDirective,\n  SliderThumbLabelDirective,\n  SliderTrackDirective,\n} from './headless';\nimport { RangeSliderComponent } from './range-slider.component';\nimport { SliderComponent } from './slider.component';\n\nexport const SLIDER_IMPORTS = [\n  SliderComponent,\n  RangeSliderComponent,\n  SliderDirective,\n  RangeSliderDirective,\n  SliderThumbDirective,\n  SliderThumbLabelDirective,\n  SliderTrackDirective,\n] as const;\n","import {\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n  model,\n  signal,\n} from '@angular/core';\nimport { ValidationError } from '@angular/forms/signals';\nimport {\n  AccessibleNameControlDirective,\n  FORM_FIELD_CONTROL_TYPES,\n  FORM_FIELD_TOKEN,\n  FormFieldControl,\n} from '../../form-field/headless';\n\n@Directive({\n  selector: '[etSwitch]',\n  host: {\n    role: 'switch',\n    '[attr.aria-checked]': 'checked()',\n    // role=switch does not support aria-checked=\"mixed\" (ARIA treats it as false), so the\n    // indeterminate/bulk-edit state is reflected for styling only - aria-checked stays boolean\n    '[attr.data-indeterminate]': 'indeterminate() || null',\n    '[attr.aria-invalid]': 'shouldDisplayError() || null',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.aria-readonly]': 'readonly() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n    '[attr.aria-required]': 'required() || null',\n    '[attr.aria-describedby]': 'describedBy() || null',\n    '[attr.aria-label]': 'ariaLabel() || null',\n    '[attr.aria-labelledby]': 'labelId() || null',\n    '[attr.tabindex]': 'disabled() ? -1 : 0',\n    '(click)': 'toggle()',\n    '(keydown.space)': 'toggle(); $event.preventDefault()',\n    '(blur)': 'touched.set(true)',\n  },\n})\nexport class SwitchDirective extends AccessibleNameControlDirective implements FormFieldControl {\n  private formField = inject(FORM_FIELD_TOKEN, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public checked = model(false);\n  /**\n   * Bulk-edit state for a switch whose source records disagree (some on, some off), mirroring\n   * checkbox's platform `indeterminate`. The committed `checked` value stays untouched while\n   * indeterminate; the first user toggle resolves the flag and turns the switch on.\n   */\n  public indeterminate = model(false);\n  public touched = model(false);\n  public disabled = input(false, { transform: booleanAttribute });\n  /** View-only: keeps the normal look and focusability but blocks toggling (unlike `disabled`). */\n  public readonly = input(false, { transform: booleanAttribute });\n  public invalid = input(false, { transform: booleanAttribute });\n  public errors = input<readonly ValidationError.WithOptionalFieldTree[]>([]);\n  public required = input(false, { transform: booleanAttribute });\n  public name = input('');\n\n  public shouldDisplayError = computed(() => this.touched() && this.invalid());\n\n  public describedBy = signal<string | null>(null);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.SWITCH);\n\n  constructor() {\n    super();\n\n    this.formField?.registerControl(this);\n    this.destroyRef.onDestroy(() => this.formField?.unregisterControl(this));\n  }\n\n  public toggle() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (this.indeterminate()) {\n      this.indeterminate.set(false);\n      this.checked.set(true);\n\n      return;\n    }\n\n    this.checked.update((value) => !value);\n  }\n\n  public activate() {\n    if (this.disabled()) return;\n\n    // readonly stays focusable (view-only), it just cannot toggle\n    this.toggle();\n    this.focus();\n  }\n\n  public focus(options?: FocusOptions) {\n    if (this.disabled()) return;\n\n    this.el.nativeElement.focus(options);\n  }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective, createCanAnimateSignal } from '@ethlete/core';\nimport { SwitchDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-switch',\n  templateUrl: './switch.component.html',\n  styleUrl: './switch.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: SwitchDirective,\n      inputs: [\n        'checked',\n        'indeterminate',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['checkedChange', 'indeterminateChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-switch',\n    '[attr.data-can-animate]': 'canAnimate.state() || null',\n  },\n})\nexport class SwitchComponent {\n  private switchDir = inject(SwitchDirective);\n  public canAnimate = createCanAnimateSignal();\n\n  public focus(options?: FocusOptions) {\n    this.switchDir.focus(options);\n  }\n}\n","<div class=\"et-switch-track\">\n  <div class=\"et-switch-thumb\"></div>\n</div>\n","import { SwitchDirective } from './headless';\nimport { SwitchComponent } from './switch.component';\n\nexport const SWITCH_IMPORTS = [SwitchComponent, SwitchDirective] as const;\n","// codes 2700-2799\nexport const TAG_INPUT_ERROR_CODES = {\n  FIELD_OUTSIDE_TAG_INPUT: 2700,\n} as const;\n","import { Directive, booleanAttribute, computed, input, model, signal } from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { FORM_FIELD_CONTROL_TYPES } from '../../form-field/headless';\nimport { TagInputFieldDirective } from './tag-input-field.directive';\nimport { TextShellControlDirective } from '../../form-field/headless/text-shell-control.directive';\n\nconst defaultNormalizeTag = (raw: string) => {\n  const trimmed = raw.trim();\n\n  return trimmed.length ? trimmed : null;\n};\n\n@Directive({\n  selector: '[etTagInput]',\n  exportAs: 'etTagInput',\n  host: {\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-readonly]': 'readonly() || null',\n  },\n})\nexport class TagInputDirective extends TextShellControlDirective implements FormValueControl<string[]> {\n  public value = model<string[]>([]);\n\n  /**\n   * The bound field's `maxLength()` limit - for an array value that is the maximum number of tags.\n   * Signal forms binds it automatically because this input exists, so `<et-counter />` picks the\n   * limit up from the schema. Display only: the tag input does not refuse tags past it, so the\n   * validator is still the thing that reports the violation.\n   */\n  public maxLength = input<number | undefined>(undefined);\n\n  /**\n   * True while an async validator is in flight for the bound field - bound automatically by signal\n   * forms because this input exists. The field shell surfaces it as its busy state.\n   */\n  public pending = input(false, { transform: booleanAttribute });\n\n  public placeholder = input('');\n\n  /**\n   * What commits the pending text as a tag: multi-character entries are key names\n   * (`'Enter'`), single characters commit as soon as they are typed (and split pastes).\n   */\n  public separators = input<string[]>(['Enter', ',']);\n  public allowDuplicates = input(false, { transform: booleanAttribute });\n  /** Maps raw text to the stored tag - return `null` to reject. Defaults to trimming. */\n  public normalizeTag = input<(raw: string) => string | null>(defaultNormalizeTag);\n  public maxTags = input<number | undefined>(undefined);\n\n  /** The raw value normalized to the tags the control currently shows. Mixed has no effective tags. */\n  public effectiveValues = computed<readonly string[]>(() => (this.mixed() ? [] : this.value()));\n\n  public hasValue = computed(() => this.mixed() || this.effectiveValues().length > 0);\n\n  /** The placeholder the text field currently shows - `mixedLabel` while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.TAG_INPUT);\n\n  /** @internal */\n  public registeredField = signal<TagInputFieldDirective | null>(null);\n\n  public interactive = computed(() => !this.disabled() && !this.readonly());\n\n  /** True once `maxTags` is reached - further adds are ignored. Mixed counts as no tags. */\n  public isFull = computed(() => {\n    const maxTags = this.maxTags();\n\n    return maxTags !== undefined && this.effectiveValues().length >= maxTags;\n  });\n\n  /** @internal Single-character separators - they split pastes and commit while typing. */\n  public characterSeparators = computed(() => this.separators().filter((separator) => separator.length === 1));\n  /** @internal Multi-character separators are key names (e.g. `'Enter'`). */\n  public keySeparators = computed(() => this.separators().filter((separator) => separator.length > 1));\n\n  public focusControl(options?: FocusOptions) {\n    this.registeredField()?.focus(options);\n  }\n\n  /**\n   * Normalizes and appends a tag. Returns whether it was added. While mixed, the first\n   * added tag REPLACES the hidden raw value (starting a fresh set) and resolves mixed.\n   */\n  public add(raw: string) {\n    if (!this.interactive() || this.isFull()) {\n      return false;\n    }\n\n    const tag = this.normalizeTag()(raw);\n\n    if (tag === null) {\n      return false;\n    }\n\n    // while mixed the effective set is empty - duplicates are checked against the fresh\n    // set the user is building, never against the hidden raw value\n    const current = this.effectiveValues();\n\n    if (!this.allowDuplicates() && current.includes(tag)) {\n      return false;\n    }\n\n    this.value.set([...current, tag]);\n    this.mixed.set(false);\n\n    return true;\n  }\n\n  /** Adds several raw values at once (a paste split by separators). */\n  public addAll(raws: string[]) {\n    for (const raw of raws) {\n      this.add(raw);\n    }\n  }\n\n  public remove(tag: string) {\n    if (!this.interactive()) {\n      return;\n    }\n\n    const index = this.effectiveValues().lastIndexOf(tag);\n\n    if (index !== -1) {\n      this.removeAt(index);\n    }\n  }\n\n  public removeAt(index: number) {\n    // while mixed there is no visible chip to delete - a removal (e.g. Backspace on the\n    // empty field) must not touch the hidden raw tags of every edited record\n    if (!this.interactive() || this.mixed()) {\n      return;\n    }\n\n    const current = this.value();\n\n    // a no-op removal must not write: `filter` always allocates, so the model would notify with\n    // an equal-but-new array and dirty the bound form field on a keystroke that changed nothing\n    if (index < 0 || index >= current.length) {\n      return;\n    }\n\n    this.value.set(current.filter((_, candidate) => candidate !== index));\n  }\n\n  public removeLast() {\n    this.removeAt(this.effectiveValues().length - 1);\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject, signal } from '@angular/core';\nimport { registerSingleton } from '../../form-field/headless';\nimport { RuntimeError } from '@ethlete/core';\nimport { TAG_INPUT_ERROR_CODES } from '../tag-input-errors';\nimport { TagInputDirective } from './tag-input.directive';\n\n/** The text field of a tag input - commits its text as a tag on separators and blur. */\n@Directive({\n  selector: 'input[etTagInputField]',\n  exportAs: 'etTagInputField',\n  host: {\n    autocomplete: 'off',\n    '[attr.placeholder]': 'tagInput?.effectivePlaceholder() || null',\n    '[attr.aria-required]': 'tagInput?.required() || null',\n    '[attr.aria-invalid]': 'tagInput?.shouldDisplayError() || null',\n    '[attr.aria-describedby]': 'tagInput?.describedBy() || null',\n    '[attr.aria-label]': 'tagInput?.ariaLabel() || null',\n    '[attr.aria-labelledby]': 'tagInput?.labelId() || null',\n    '[disabled]': 'tagInput?.disabled() || false',\n    '[readOnly]': 'isReadOnly()',\n    '(input)': 'handleInput()',\n    '(keydown)': 'handleKeydown($event)',\n    '(paste)': 'handlePaste($event)',\n    '(focus)': 'handleFocus()',\n    '(blur)': 'handleBlur()',\n  },\n})\nexport class TagInputFieldDirective {\n  protected tagInput = inject(TagInputDirective, { optional: true });\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  private pendingText = signal('');\n\n  private isFull = computed(() => this.tagInput?.isFull() ?? false);\n\n  /**\n   * A full field locks - but never while it still holds text, or text a full input rejected would\n   * have no keyboard way out: the chips' remove buttons are not tab stops.\n   */\n  protected isReadOnly = computed(() => this.tagInput?.readonly() || (this.isFull() && !this.pendingText()));\n\n  constructor() {\n    registerSingleton(this.tagInput?.registeredField, this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tagInput) {\n          throw new RuntimeError(\n            TAG_INPUT_ERROR_CODES.FIELD_OUTSIDE_TAG_INPUT,\n            '[TagInputFieldDirective] etTagInputField must be placed inside an [etTagInput] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public focus(options?: FocusOptions) {\n    this.elementRef.nativeElement.focus(options ?? { preventScroll: true });\n  }\n\n  /** Commits the pending text as a tag (if any) and clears the field. */\n  public commitPending() {\n    const element = this.elementRef.nativeElement;\n\n    if (!element.value) {\n      return;\n    }\n\n    if (this.tagInput?.add(element.value) ?? false) {\n      this.writeField('');\n    }\n  }\n\n  protected handleInput() {\n    const tagInput = this.tagInput;\n    const element = this.elementRef.nativeElement;\n\n    if (!tagInput) {\n      return;\n    }\n\n    this.pendingText.set(element.value);\n\n    // typing a single-character separator commits the text before it\n    const separators = tagInput.characterSeparators();\n    const value = element.value;\n    const lastChar = value.at(-1);\n\n    if (lastChar !== undefined && separators.includes(lastChar)) {\n      const pending = value.slice(0, -1);\n\n      this.writeField(pending);\n\n      if (pending && tagInput.add(pending)) {\n        this.writeField('');\n      }\n    }\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    const tagInput = this.tagInput;\n    const element = this.elementRef.nativeElement;\n\n    if (!tagInput) {\n      return;\n    }\n\n    if (tagInput.keySeparators().includes(event.key)) {\n      // only swallow the key when there is text to commit - an empty Enter should\n      // keep its default behavior (e.g. submitting the surrounding form)\n      if (element.value) {\n        event.preventDefault();\n        this.commitPending();\n      }\n\n      return;\n    }\n\n    if (event.key === 'Backspace' && !element.value) {\n      event.preventDefault();\n      tagInput.removeLast();\n    }\n  }\n\n  protected handlePaste(event: ClipboardEvent) {\n    const tagInput = this.tagInput;\n    const text = event.clipboardData?.getData('text/plain');\n\n    if (!tagInput || !text) {\n      return;\n    }\n\n    const separators = tagInput.characterSeparators();\n\n    if (!separators.length && !text.includes('\\n')) {\n      return;\n    }\n\n    const element = this.elementRef.nativeElement;\n    const selectionStart = element.selectionStart ?? element.value.length;\n    const selectionEnd = element.selectionEnd ?? selectionStart;\n    const merged = element.value.slice(0, selectionStart) + text + element.value.slice(selectionEnd);\n\n    const pattern = new RegExp(\n      `[\\\\n${separators.map((separator) => separator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('')}]`,\n    );\n    const parts = merged.split(pattern);\n\n    if (parts.length < 2) {\n      return;\n    }\n\n    event.preventDefault();\n    this.writeField('');\n    tagInput.addAll(parts);\n  }\n\n  protected handleFocus() {\n    this.tagInput?.focused.set(true);\n  }\n\n  protected handleBlur() {\n    // leaving the field keeps what was typed - as a tag\n    this.commitPending();\n    this.tagInput?.focused.set(false);\n    this.tagInput?.touched.set(true);\n  }\n\n  private writeField(value: string) {\n    this.elementRef.nativeElement.value = value;\n    this.pendingText.set(value);\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { CHIP_REMOVE_TAB_STOP, ChipComponent } from '../../chip';\nimport { TagInputDirective, TagInputFieldDirective } from './headless';\nimport { ACCESSIBLE_NAME_INPUTS } from '../form-field/headless';\n\n@Component({\n  selector: 'et-tag-input',\n  templateUrl: './tag-input.component.html',\n  styleUrl: './tag-input.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ChipComponent, TagInputFieldDirective],\n  providers: [{ provide: CHIP_REMOVE_TAB_STOP, useValue: false }],\n  hostDirectives: [\n    {\n      directive: TagInputDirective,\n      inputs: [\n        'value',\n        'mixed',\n        'touched',\n        'disabled',\n        'readonly',\n        'invalid',\n        'errors',\n        'required',\n        'name',\n        'maxLength',\n        'pending',\n        'placeholder',\n        'mixedLabel',\n        'separators',\n        'allowDuplicates',\n        'normalizeTag',\n        'maxTags',\n        ...ACCESSIBLE_NAME_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-tag-input',\n    // chip remove buttons stop propagation - any other click focuses the text field\n    '(click)': 'tagInput.activate()',\n  },\n})\nexport class TagInputComponent {\n  protected tagInput = inject(TagInputDirective);\n\n  public focus(options?: FocusOptions) {\n    this.tagInput.focus(options);\n  }\n}\n","<div class=\"et-tag-input-row\">\n  <!-- readonly is not disabled: the chips keep their normal look, they just lose the\n       remove affordance. While mixed there are no effective tags — the hidden raw value\n       must not render as chips -->\n  @for (tag of tagInput.effectiveValues(); track $index) {\n    <et-chip\n      [disabled]=\"tagInput.disabled()\"\n      [removable]=\"!tagInput.readonly() && !tagInput.disabled()\"\n      (remove)=\"tagInput.removeAt($index)\"\n    >\n      {{ tag }}\n    </et-chip>\n  }\n\n  <input class=\"et-tag-input-field\" etTagInputField type=\"text\" />\n</div>\n","import { TagInputDirective, TagInputFieldDirective } from './headless';\nimport { TagInputComponent } from './tag-input.component';\n\nexport const TAG_INPUT_IMPORTS = [TagInputComponent, TagInputDirective, TagInputFieldDirective] as const;\n","export type AutosizeStyleMetrics = {\n  /** Resolved line height in px. */\n  lineHeight: number;\n  /** Total block padding (top + bottom) in px. */\n  paddingBlock: number;\n  /** Total block border (top + bottom) in px. */\n  borderBlock: number;\n};\n\nexport type AutosizeMeasurements = AutosizeStyleMetrics & {\n  /** `scrollHeight` of the textarea while its block-size is collapsed (content + block padding). */\n  contentBlockSize: number;\n};\n\nexport type AutosizeBounds = {\n  minRows: number;\n  maxRows: number | null;\n};\n\n/**\n * Computes the target border-box block-size for an autosizing textarea.\n *\n * `contentBlockSize` (scrollHeight) already includes block padding, so row\n * bounds are converted to the same box before clamping; the border is added\n * last because `scrollHeight` never includes it.\n */\nexport const computeAutosizeBlockSize = (measurements: AutosizeMeasurements, bounds: AutosizeBounds) => {\n  const { contentBlockSize, lineHeight, paddingBlock, borderBlock } = measurements;\n  const { minRows, maxRows } = bounds;\n\n  const minBlockSize = minRows * lineHeight + paddingBlock;\n  const maxBlockSize = maxRows === null ? Infinity : maxRows * lineHeight + paddingBlock;\n\n  const clamped = Math.min(Math.max(contentBlockSize, minBlockSize), maxBlockSize);\n\n  return clamped + borderBlock;\n};\n\n/** Reads the style metrics needed by {@link computeAutosizeBlockSize} from a live textarea. */\nexport const readTextareaStyleMetrics = (textarea: HTMLTextAreaElement): AutosizeStyleMetrics => {\n  const style = getComputedStyle(textarea);\n\n  const fontSize = parseFloat(style.fontSize) || 16;\n  const parsedLineHeight = parseFloat(style.lineHeight);\n  const lineHeight = Number.isNaN(parsedLineHeight) ? fontSize * 1.2 : parsedLineHeight;\n\n  const paddingBlock = (parseFloat(style.paddingTop) || 0) + (parseFloat(style.paddingBottom) || 0);\n  const borderBlock = (parseFloat(style.borderTopWidth) || 0) + (parseFloat(style.borderBottomWidth) || 0);\n\n  return { lineHeight, paddingBlock, borderBlock };\n};\n\n/**\n * Whether the browser sizes a textarea from its own content, which makes\n * {@link computeAutosizeBlockSize} and its measurement pass unnecessary. The CSS side of that\n * path lives in `TextareaAutosizeStylesComponent` behind the same `@supports` condition.\n */\nexport const supportsNativeAutosize = () =>\n  typeof CSS !== 'undefined' && typeof CSS.supports === 'function' && CSS.supports('field-sizing', 'content');\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The form field's textarea frame overrides, as a styles-only component mounted by the textarea\n * (see `FormFieldTextShellStylesComponent` for the pattern).\n *\n * @internal\n */\n@Component({\n  selector: 'et-form-field-textarea-styles',\n  template: '',\n  styleUrl: './form-field-textarea-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class FormFieldTextareaStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * Native autosizing for the textarea, as a styles-only component mounted by\n * `TextareaDirective` (see `FormFieldTextareaStylesComponent` for the pattern).\n *\n * @internal\n */\n@Component({\n  selector: 'et-textarea-autosize-styles',\n  template: '',\n  styleUrl: './textarea-autosize-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TextareaAutosizeStylesComponent {}\n","import {\n  booleanAttribute,\n  computed,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  model,\n  numberAttribute,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { injectRenderer, injectStyleManager, signalElementDimensions } from '@ethlete/core';\nimport { FORM_FIELD_CONTROL_TYPES, TextFieldControlDirective } from '../../form-field/headless';\nimport {\n  AutosizeBounds,\n  computeAutosizeBlockSize,\n  readTextareaStyleMetrics,\n  supportsNativeAutosize,\n} from './internals/textarea-autosize';\nimport { FormFieldTextareaStylesComponent } from '../../form-field/form-field-textarea-styles.component';\nimport { TextareaAutosizeStylesComponent } from '../textarea-autosize-styles.component';\n\nexport const TEXTAREA_RESIZE_MODES = {\n  NONE: 'none',\n  VERTICAL: 'vertical',\n} as const;\n\nexport type TextareaResizeMode = (typeof TEXTAREA_RESIZE_MODES)[keyof typeof TEXTAREA_RESIZE_MODES];\n\n@Directive({\n  selector: '[etTextarea]',\n})\nexport class TextareaDirective extends TextFieldControlDirective implements FormValueControl<string> {\n  private renderer = injectRenderer();\n\n  public value = model('');\n\n  public placeholder = input('');\n  public autocomplete = input('');\n  public rows = input(3, { transform: numberAttribute });\n  public autosize = input(true, { transform: booleanAttribute });\n  public minRows = input<number | null>(null);\n  public maxRows = input<number | null>(null);\n  /** Only applied when `autosize` is off; an autosizing textarea is never manually resizable. */\n  public resize = input<TextareaResizeMode>(TEXTAREA_RESIZE_MODES.VERTICAL);\n\n  public hasValue = computed(() => this.mixed() || this.value().length > 0);\n  public controlType = signal(FORM_FIELD_CONTROL_TYPES.TEXTAREA);\n\n  /** The text the native textarea renders - empty while mixed so the raw value never reaches the DOM. */\n  public displayValue = computed(() => (this.mixed() ? '' : this.value()));\n\n  /** The placeholder the native textarea renders - `mixedLabel` overrides the consumer placeholder while mixed. */\n  public effectivePlaceholder = computed(() => (this.mixed() ? this.resolvedMixedLabel() : this.placeholder()));\n\n  public effectiveResize = computed(() => (this.autosize() ? TEXTAREA_RESIZE_MODES.NONE : this.resize()));\n\n  /**\n   * The native textarea element this directive controls. Set automatically when\n   * the directive is placed on a `<textarea>` element; otherwise the hosting\n   * component registers it.\n   */\n  public nativeControl = signal<HTMLTextAreaElement | null>(null);\n\n  private nativeAutosize = supportsNativeAutosize();\n\n  private autosizeMinRows = computed(() => this.minRows() ?? this.rows());\n\n  private autosizeMaxBlockSize = computed(() => {\n    const maxRows = this.maxRows();\n\n    return maxRows === null ? null : `calc(${maxRows} * 1lh)`;\n  });\n\n  // Passing `nativeControl` here instead would attach a ResizeObserver to every textarea that\n  // does not need one - only the measurement path below reads a width.\n  private measuredControl = computed(() => (this.nativeAutosize ? null : this.nativeControl()));\n\n  private nativeControlDimensions = signalElementDimensions(this.measuredControl);\n\n  constructor() {\n    super();\n    const styleManager = injectStyleManager();\n    styleManager.mount(FormFieldTextareaStylesComponent);\n    styleManager.mount(TextareaAutosizeStylesComponent);\n\n    const hostRef = inject<ElementRef<HTMLElement | null>>(ElementRef);\n    const hostElement = hostRef.nativeElement;\n\n    if (hostElement?.tagName === 'TEXTAREA') {\n      this.nativeControl.set(hostElement as HTMLTextAreaElement);\n      this.focusTarget.set(hostElement);\n    }\n\n    effect(() => {\n      const textarea = this.nativeControl();\n\n      if (!textarea) {\n        return;\n      }\n\n      const autosize = this.autosize();\n      const minRows = this.autosizeMinRows();\n      const maxBlockSize = this.autosizeMaxBlockSize();\n\n      untracked(() => {\n        this.renderer.setDataAttributes(textarea, { 'et-textarea-autosize': autosize ? '' : null });\n        this.renderer.setCssProperties(textarea, {\n          '--et-textarea-min-rows': autosize ? `${minRows}` : null,\n          '--et-textarea-max-block-size': autosize ? maxBlockSize : null,\n        });\n      });\n    });\n\n    effect(() => {\n      // Reading this first keeps the effect dependency-free where the browser autosizes, so it\n      // runs once and never measures again.\n      if (this.nativeAutosize) {\n        return;\n      }\n\n      const textarea = this.nativeControl();\n\n      if (!textarea) {\n        return;\n      }\n\n      if (!this.autosize()) {\n        untracked(() => this.renderer.removeStyle(textarea, 'blockSize'));\n\n        return;\n      }\n\n      // size against what is actually rendered - while mixed that is the empty masked display,\n      // never the hidden raw value (resizeToFit would otherwise write it into the DOM)\n      const value = this.displayValue();\n      const bounds: AutosizeBounds = { minRows: this.autosizeMinRows(), maxRows: this.maxRows() };\n      const inlineSize = this.nativeControlDimensions()?.client?.width ?? 0;\n\n      // A collapsed/unrendered textarea cannot be measured; the dimensions signal\n      // re-triggers once it becomes visible (and on every inline-size change).\n      if (inlineSize === 0) {\n        return;\n      }\n\n      untracked(() => this.resizeToFit(textarea, { bounds, value }));\n    });\n  }\n\n  /**\n   * @internal Routes a user edit from the native textarea into the model. Typing is the commit\n   * over a mixed state: the first edit that produces content replaces the raw value and\n   * resolves `mixed`; an edit that leaves the textarea empty keeps both untouched.\n   */\n  public syncFromNativeInput(textareaElement: HTMLTextAreaElement) {\n    if (this.mixed()) {\n      if (!textareaElement.value) {\n        return;\n      }\n\n      this.mixed.set(false);\n    }\n\n    this.value.set(textareaElement.value);\n  }\n\n  private resizeToFit(textarea: HTMLTextAreaElement, { bounds, value }: { bounds: AutosizeBounds; value: string }) {\n    // The value model can change before the template binding has flushed to the\n    // DOM - measure against the model, not a stale native value.\n    if (textarea.value !== value) {\n      this.renderer.setProperty(textarea, 'value', value);\n    }\n\n    const metrics = readTextareaStyleMetrics(textarea);\n\n    this.renderer.setStyle(textarea, { blockSize: '0' });\n    const contentBlockSize = textarea.scrollHeight;\n\n    const blockSize = computeAutosizeBlockSize({ ...metrics, contentBlockSize }, bounds);\n\n    this.renderer.setStyle(textarea, { blockSize: `${blockSize}px` });\n  }\n}\n","import { afterNextRender, Component, ElementRef, inject, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ColorInteractiveDirective } from '@ethlete/core';\nimport { TextareaDirective } from './headless';\nimport { TEXT_FIELD_CONTROL_INPUTS } from '../form-field/headless/text-field-control.directive';\n\n@Component({\n  selector: 'et-textarea',\n  templateUrl: './textarea.component.html',\n  styleUrl: './textarea.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: TextareaDirective,\n      inputs: [\n        'placeholder',\n        'autocomplete',\n        'rows',\n        'autosize',\n        'minRows',\n        'maxRows',\n        'resize',\n        'value',\n        ...TEXT_FIELD_CONTROL_INPUTS,\n      ],\n      outputs: ['valueChange', 'mixedChange', 'touchedChange'],\n    },\n    ColorInteractiveDirective,\n  ],\n  host: {\n    class: 'et-textarea',\n    '(click)': 'textareaDir.activate()',\n  },\n})\nexport class TextareaComponent {\n  protected textareaDir = inject(TextareaDirective);\n\n  private nativeTextarea = viewChild<ElementRef<HTMLTextAreaElement>>('nativeTextarea');\n\n  constructor() {\n    afterNextRender(() => {\n      const nativeTextarea = this.nativeTextarea()?.nativeElement ?? null;\n\n      this.textareaDir.focusTarget.set(nativeTextarea);\n      this.textareaDir.nativeControl.set(nativeTextarea);\n    });\n  }\n\n  public syncNativeValue(event: Event) {\n    this.textareaDir.syncFromNativeInput(event.target as HTMLTextAreaElement);\n  }\n\n  public focus(options?: FocusOptions) {\n    this.textareaDir.focus(options);\n  }\n}\n","<textarea\n  #nativeTextarea\n  [value]=\"textareaDir.displayValue()\"\n  [disabled]=\"textareaDir.disabled()\"\n  [readOnly]=\"textareaDir.readonly()\"\n  [required]=\"textareaDir.required()\"\n  [placeholder]=\"textareaDir.effectivePlaceholder()\"\n  [attr.autocomplete]=\"textareaDir.autocomplete() || null\"\n  [rows]=\"textareaDir.rows()\"\n  [attr.name]=\"textareaDir.name() || null\"\n  [attr.aria-invalid]=\"textareaDir.shouldDisplayError() || null\"\n  [attr.aria-describedby]=\"textareaDir.describedBy() || null\"\n  [attr.aria-label]=\"textareaDir.ariaLabel() || null\"\n  [attr.aria-labelledby]=\"textareaDir.labelId() || null\"\n  [attr.data-resize]=\"textareaDir.effectiveResize()\"\n  (input)=\"syncNativeValue($event)\"\n  (focus)=\"textareaDir.focused.set(true)\"\n  (blur)=\"textareaDir.focused.set(false); textareaDir.touched.set(true)\"\n  class=\"et-textarea-native\"\n></textarea>\n","import { TextareaDirective } from './headless';\nimport { TextareaComponent } from './textarea.component';\n\nexport const TEXTAREA_IMPORTS = [TextareaComponent, TextareaDirective] as const;\n","// codes 1900-1999\nexport const GRID_ERROR_CODES = {\n  MISSING_GRID: 1900,\n  MISSING_GRID_ITEM: 1901,\n  DUPLICATE_ITEM_ID: 1902,\n  INVALID_LAYOUT_STATE: 1903,\n  UNKNOWN_ITEM_TYPE: 1904,\n  DUPLICATE_ITEM_RENDER: 1905,\n} as const;\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { GridComponentRegistration, GridItemActionsComponent } from './grid.types';\n\nexport type GridConfig = {\n  registrations: GridComponentRegistration[];\n  actionsComponent?: GridItemActionsComponent | null;\n};\n\nexport const DEFAULT_GRID_CONFIG: GridConfig = {\n  registrations: [],\n};\n\nconst GRID_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider(DEFAULT_GRID_CONFIG, {\n  name: 'GridConfig',\n});\n\nexport const provideGridConfig = /* @__PURE__ */ toProvideFn(GRID_CONFIG_DEF);\nexport const injectGridConfig = /* @__PURE__ */ toInjectFn(GRID_CONFIG_DEF);\n","import { InjectionToken } from '@angular/core';\nimport { GridDirective } from './grid.directive';\n\nexport const GRID_TOKEN = new InjectionToken<GridDirective>('GRID_TOKEN');\n","export type AutoScrollPointer = { clientX: number; clientY: number };\n\nexport type AutoScroller = {\n  /** Begin the edge-proximity loop. No-op if already running. */\n  start: (pointer: AutoScrollPointer) => void;\n  update: (pointer: AutoScrollPointer) => void;\n  stop: () => void;\n};\n\nexport const findScrollableAncestor = (start: Element | null): HTMLElement | null => {\n  let current = start?.parentElement ?? null;\n\n  while (current) {\n    const style = getComputedStyle(current);\n    const scrollsY = /(auto|scroll|overlay)/.test(style.overflowY) && current.scrollHeight > current.clientHeight;\n    const scrollsX = /(auto|scroll|overlay)/.test(style.overflowX) && current.scrollWidth > current.clientWidth;\n\n    if (scrollsY || scrollsX) return current;\n\n    current = current.parentElement;\n  }\n\n  return null;\n};\n\nexport const createAutoScroller = (options: {\n  document: Document;\n  getScrollElement: () => HTMLElement | null;\n  threshold?: number;\n  maxSpeed?: number;\n}): AutoScroller => {\n  const doc = options.document;\n  const threshold = options.threshold ?? 48;\n  const maxSpeed = options.maxSpeed ?? 20;\n\n  let pointer: AutoScrollPointer | null = null;\n  let el: HTMLElement | null = null;\n  let frame: number | null = null;\n\n  const step = () => {\n    frame = null;\n    const win = doc.defaultView;\n\n    if (!pointer || !el || !win) return;\n\n    const isRoot = el === doc.scrollingElement || el === doc.documentElement || el === doc.body;\n    const rect = isRoot\n      ? { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight }\n      : el.getBoundingClientRect();\n\n    const speed = (distance: number) =>\n      Math.ceil(maxSpeed * Math.min(1, Math.max(0, threshold - distance) / threshold));\n\n    let dx = 0;\n    let dy = 0;\n\n    if (pointer.clientY - rect.top < threshold && el.scrollTop > 0) {\n      dy = -speed(pointer.clientY - rect.top);\n    } else if (rect.bottom - pointer.clientY < threshold && el.scrollTop + el.clientHeight < el.scrollHeight) {\n      dy = speed(rect.bottom - pointer.clientY);\n    }\n\n    if (pointer.clientX - rect.left < threshold && el.scrollLeft > 0) {\n      dx = -speed(pointer.clientX - rect.left);\n    } else if (rect.right - pointer.clientX < threshold && el.scrollLeft + el.clientWidth < el.scrollWidth) {\n      dx = speed(rect.right - pointer.clientX);\n    }\n\n    if (dx !== 0 || dy !== 0) {\n      el.scrollBy(dx, dy);\n    }\n\n    frame = win.requestAnimationFrame(step);\n  };\n\n  return {\n    start(p) {\n      pointer = p;\n\n      if (frame !== null) return;\n\n      const win = doc.defaultView;\n\n      if (!win) return;\n\n      el = options.getScrollElement();\n\n      if (!el) return;\n\n      frame = win.requestAnimationFrame(step);\n    },\n    update(p) {\n      pointer = p;\n    },\n    stop() {\n      pointer = null;\n      el = null;\n\n      if (frame !== null) {\n        doc.defaultView?.cancelAnimationFrame(frame);\n        frame = null;\n      }\n    },\n  };\n};\n","import { clamp, ResizeEdge } from '@ethlete/core';\nimport { GridItemConstraints, GridItemPosition } from '../grid.types';\n\n/** A rectangle in container-relative pixels (x/y measured from the container's padding box). */\nexport type PixelRect = {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n};\n\nexport type GridGeometry = {\n  /** Width available for columns (container client width minus horizontal padding). */\n  contentWidth: number;\n  columns: number;\n  gap: number;\n  rowHeight: number;\n  cellWidth: number;\n  /** Horizontal distance between the left edges of two adjacent columns. */\n  strideX: number;\n  /** Vertical distance between the top edges of two adjacent rows. */\n  strideY: number;\n  /** Container padding-left - the x of column 0. */\n  originX: number;\n  /** Container padding-top - the y of row 0. */\n  originY: number;\n};\n\n/**\n * Effective span bounds for a resize gesture. Grid bounds and item constraints are\n * unified in span units per edge, so the clamped pixel rect and the snapped span\n * are always derived from the same limits and can never disagree.\n */\nexport type ResizeSpanBounds = {\n  minColSpan: number;\n  maxColSpan: number;\n  minRowSpan: number;\n  maxRowSpan: number;\n};\n\nexport const computeGeometry = (options: {\n  contentWidth: number;\n  columns: number;\n  gap: number;\n  rowHeight: number;\n  originX?: number;\n  originY?: number;\n}): GridGeometry => {\n  const { contentWidth, columns, gap, rowHeight, originX = 0, originY = 0 } = options;\n  const cellWidth = columns > 0 ? Math.max(0, (contentWidth - gap * (columns - 1)) / columns) : 0;\n\n  return {\n    contentWidth,\n    columns,\n    gap,\n    rowHeight,\n    cellWidth,\n    strideX: cellWidth + gap,\n    strideY: rowHeight + gap,\n    originX,\n    originY,\n  };\n};\n\nexport const spanWidth = (span: number, geometry: GridGeometry) =>\n  span * geometry.cellWidth + (span - 1) * geometry.gap;\n\nexport const spanHeight = (span: number, geometry: GridGeometry) =>\n  span * geometry.rowHeight + (span - 1) * geometry.gap;\n\nexport const positionToPixelRect = (position: GridItemPosition, geometry: GridGeometry): PixelRect => ({\n  x: geometry.originX + position.col * geometry.strideX,\n  y: geometry.originY + position.row * geometry.strideY,\n  width: spanWidth(position.colSpan, geometry),\n  height: spanHeight(position.rowSpan, geometry),\n});\n\n/** Pixel height of the given number of rows (content only, no container padding). */\nexport const rowsToPixelHeight = (rows: number, geometry: GridGeometry) =>\n  rows <= 0 ? 0 : rows * geometry.rowHeight + (rows - 1) * geometry.gap;\n\nexport const pixelRectsEqual = (a: PixelRect | null, b: PixelRect | null) => {\n  if (a === null || b === null) return a === b;\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n};\n\nexport const positionsEqual = (a: GridItemPosition | null, b: GridItemPosition | null) => {\n  if (a === null || b === null) return a === b;\n  return a.col === b.col && a.row === b.row && a.colSpan === b.colSpan && a.rowSpan === b.rowSpan;\n};\n\nexport const SNAP_HYSTERESIS = 0.1;\n\n/**\n * Rounds a raw cell-unit value to the nearest integer with a hysteresis margin relative to the last\n * snapped value: the rounding boundary is shifted by SNAP_HYSTERESIS against the direction of travel,\n * so a pointer jittering exactly on a cell midpoint cannot flap the snap back and forth.\n */\nexport const hysteresisRound = (raw: number, last: number | null) => {\n  if (last === null) return Math.round(raw);\n  if (raw > last) return Math.max(last, Math.round(raw - SNAP_HYSTERESIS));\n  if (raw < last) return Math.min(last, Math.round(raw + SNAP_HYSTERESIS));\n  return last;\n};\n\nconst resizesEast = (edge: ResizeEdge) => edge === 'e' || edge === 'ne' || edge === 'se';\nconst resizesWest = (edge: ResizeEdge) => edge === 'w' || edge === 'nw' || edge === 'sw';\nconst resizesSouth = (edge: ResizeEdge) => edge === 's' || edge === 'se' || edge === 'sw';\nconst resizesNorth = (edge: ResizeEdge) => edge === 'n' || edge === 'ne' || edge === 'nw';\n\nexport const resizeSpanBounds = (options: {\n  edge: ResizeEdge;\n  start: GridItemPosition;\n  constraints: GridItemConstraints;\n  columns: number;\n}): ResizeSpanBounds => {\n  const { edge, start, constraints, columns } = options;\n\n  let maxColSpan = constraints.maxColSpan;\n  let maxRowSpan = constraints.maxRowSpan;\n\n  if (resizesEast(edge)) maxColSpan = Math.min(maxColSpan, columns - start.col);\n  if (resizesWest(edge)) maxColSpan = Math.min(maxColSpan, start.col + start.colSpan);\n  if (resizesNorth(edge)) maxRowSpan = Math.min(maxRowSpan, start.row + start.rowSpan);\n\n  maxColSpan = Math.max(1, maxColSpan);\n  maxRowSpan = Math.max(1, maxRowSpan);\n\n  return {\n    minColSpan: clamp(constraints.minColSpan, 1, maxColSpan),\n    maxColSpan,\n    minRowSpan: clamp(constraints.minRowSpan, 1, maxRowSpan),\n    maxRowSpan,\n  };\n};\n\nexport const clampResizeRect = (options: {\n  edge: ResizeEdge;\n  dx: number;\n  dy: number;\n  startRect: PixelRect;\n  bounds: ResizeSpanBounds;\n  geometry: GridGeometry;\n}): PixelRect => {\n  const { edge, dx, dy, startRect, bounds, geometry } = options;\n  const rect = { ...startRect };\n\n  if (resizesEast(edge)) {\n    rect.width = clamp(\n      startRect.width + dx,\n      spanWidth(bounds.minColSpan, geometry),\n      spanWidth(bounds.maxColSpan, geometry),\n    );\n  }\n  if (resizesWest(edge)) {\n    const rightEdge = startRect.x + startRect.width;\n    rect.width = clamp(\n      startRect.width - dx,\n      spanWidth(bounds.minColSpan, geometry),\n      spanWidth(bounds.maxColSpan, geometry),\n    );\n    rect.x = rightEdge - rect.width;\n  }\n  if (resizesSouth(edge)) {\n    rect.height = clamp(\n      startRect.height + dy,\n      spanHeight(bounds.minRowSpan, geometry),\n      spanHeight(bounds.maxRowSpan, geometry),\n    );\n  }\n  if (resizesNorth(edge)) {\n    const bottomEdge = startRect.y + startRect.height;\n    rect.height = clamp(\n      startRect.height - dy,\n      spanHeight(bounds.minRowSpan, geometry),\n      spanHeight(bounds.maxRowSpan, geometry),\n    );\n    rect.y = bottomEdge - rect.height;\n  }\n\n  return rect;\n};\n\nexport const snapResizeSpan = (options: {\n  edge: ResizeEdge;\n  rect: PixelRect;\n  start: GridItemPosition;\n  bounds: ResizeSpanBounds;\n  geometry: GridGeometry;\n  lastSnap: GridItemPosition | null;\n}): GridItemPosition => {\n  const { edge, rect, start, bounds, geometry, lastSnap } = options;\n\n  let { col, row, colSpan, rowSpan } = start;\n\n  if (resizesEast(edge) || resizesWest(edge)) {\n    const rawColSpan = (rect.width + geometry.gap) / geometry.strideX;\n    colSpan = clamp(hysteresisRound(rawColSpan, lastSnap?.colSpan ?? null), bounds.minColSpan, bounds.maxColSpan);\n    if (resizesWest(edge)) col = start.col + start.colSpan - colSpan;\n  }\n  if (resizesSouth(edge) || resizesNorth(edge)) {\n    const rawRowSpan = (rect.height + geometry.gap) / geometry.strideY;\n    rowSpan = clamp(hysteresisRound(rawRowSpan, lastSnap?.rowSpan ?? null), bounds.minRowSpan, bounds.maxRowSpan);\n    if (resizesNorth(edge)) row = start.row + start.rowSpan - rowSpan;\n  }\n\n  return { col, row, colSpan, rowSpan };\n};\n\nexport const projectDragCell = (options: {\n  float: { x: number; y: number };\n  colSpan: number;\n  geometry: GridGeometry;\n  lastTarget: { col: number; row: number } | null;\n}): { col: number; row: number } => {\n  const { float, colSpan, geometry, lastTarget } = options;\n\n  const rawCol = (float.x - geometry.originX) / geometry.strideX;\n  const rawRow = (float.y - geometry.originY) / geometry.strideY;\n\n  const col = clamp(hysteresisRound(rawCol, lastTarget?.col ?? null), 0, Math.max(0, geometry.columns - colSpan));\n  const row = Math.max(0, hysteresisRound(rawRow, lastTarget?.row ?? null));\n\n  return { col, row };\n};\n","import { GridItemConstraints, GridItemPosition, GridLayoutEntry } from '../grid.types';\n\nexport type FindCollisionOptions = {\n  entries: GridLayoutEntry[];\n  position: GridItemPosition;\n  excludeId?: string;\n};\n\nexport type AutoPlaceOptions = {\n  entries: GridLayoutEntry[];\n  colSpan: number;\n  rowSpan: number;\n  columns: number;\n};\n\nexport type ClampPositionOptions = {\n  position: GridItemPosition;\n  constraints: GridItemConstraints;\n  columns: number;\n};\n\nexport type ResolveCollisionsOptions = {\n  entries: GridLayoutEntry[];\n  movedId: string;\n  columns: number;\n  originPosition?: GridItemPosition;\n  rowFloors?: RowFloors;\n};\n\n/**\n * Per-item lower bound (in rows) for the upward compaction pass. An item with a floor is never pulled\n * above it; items without an entry compact all the way up (floor 0).\n */\nexport type RowFloors = ReadonlyMap<string, number>;\n\nexport type CompactLayoutOptions = {\n  entries: GridLayoutEntry[];\n  columns: number;\n  rowFloors?: RowFloors;\n};\n\nexport const itemsCollide = (a: GridItemPosition, b: GridItemPosition) => {\n  if (a.col + a.colSpan <= b.col) return false;\n  if (b.col + b.colSpan <= a.col) return false;\n  if (a.row + a.rowSpan <= b.row) return false;\n  if (b.row + b.rowSpan <= a.row) return false;\n  return true;\n};\n\nexport const findCollision = (options: FindCollisionOptions) =>\n  options.entries.find((entry) => entry.id !== options.excludeId && itemsCollide(entry.position, options.position));\n\nconst clampToColumns = (position: GridItemPosition, columns: number): GridItemPosition => {\n  const colSpan = Math.max(1, Math.min(position.colSpan, columns));\n  const col = Math.max(0, Math.min(position.col, columns - colSpan));\n\n  return { ...position, col, colSpan };\n};\n\n/**\n * Compacts the layout vertically (moves items up as far as possible without collision). The returned\n * layout is always in-bounds and overlap-free regardless of the input.\n */\nexport const compactLayout = (options: CompactLayoutOptions) => {\n  const { entries, columns, rowFloors } = options;\n  const sorted = [...entries]\n    .map((entry) => ({ ...entry, position: clampToColumns(entry.position, columns) }))\n    .sort((a, b) => a.position.row - b.position.row || a.position.col - b.position.col);\n  const compacted: GridLayoutEntry[] = [];\n\n  for (const entry of sorted) {\n    const candidate = { ...entry, position: { ...entry.position } };\n\n    // Push down past any already-placed item it overlaps. This resolves overlaps introduced\n    // by clamping out-of-bounds columns (which the upward pass below cannot fix on its own).\n    while (findCollision({ entries: compacted, position: candidate.position, excludeId: candidate.id })) {\n      candidate.position.row += 1;\n    }\n\n    const floor = rowFloors?.get(entry.id) ?? 0;\n\n    while (candidate.position.row > floor) {\n      const moved = { ...candidate, position: { ...candidate.position, row: candidate.position.row - 1 } };\n\n      if (findCollision({ entries: compacted, position: moved.position, excludeId: candidate.id })) {\n        break;\n      }\n\n      candidate.position.row = moved.position.row;\n    }\n\n    compacted.push(candidate);\n  }\n\n  return compacted;\n};\n\n/**\n * Finds the first available position for an item with the given span in a grid.\n * Uses top-left gravity: scans row by row, column by column.\n */\nexport const autoPlace = (options: AutoPlaceOptions) => {\n  const clampedColSpan = Math.min(options.colSpan, options.columns);\n\n  for (let row = 0; ; row++) {\n    for (let col = 0; col <= options.columns - clampedColSpan; col++) {\n      const candidate: GridItemPosition = { col, row, colSpan: clampedColSpan, rowSpan: options.rowSpan };\n\n      if (!findCollision({ entries: options.entries, position: candidate })) {\n        return candidate;\n      }\n    }\n  }\n};\n\n/**\n * Validates and clamps a position to respect grid boundaries and item constraints. The grid's own\n * width wins: a `minColSpan` larger than the breakpoint's column count yields a full-width item, not\n * one that overflows the grid.\n */\nexport const clampPosition = (options: ClampPositionOptions) => {\n  const { position, constraints, columns } = options;\n  const maxColSpan = Math.min(constraints.maxColSpan, columns);\n  const colSpan = Math.min(Math.max(position.colSpan, constraints.minColSpan), maxColSpan);\n  const rowSpan = Math.max(constraints.minRowSpan, Math.min(constraints.maxRowSpan, position.rowSpan));\n  const col = Math.max(0, Math.min(position.col, columns - colSpan));\n  const row = Math.max(0, position.row);\n\n  return { col, row, colSpan, rowSpan };\n};\n\n/**\n * Resolves collisions by pushing items down when a moved/resized item overlaps others.\n * If exactly one item of the same size collides, they swap positions instead.\n */\nexport const resolveCollisions = (options: ResolveCollisionsOptions) => {\n  const { entries, movedId, columns, originPosition, rowFloors } = options;\n  const moved = entries.find((e) => e.id === movedId);\n\n  if (!moved) return entries;\n\n  const result = entries.map((e) => ({ ...e, position: { ...e.position } }));\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const movedEntry = result.find((e) => e.id === movedId)!;\n\n  const colliding = result.filter((e) => e.id !== movedId && itemsCollide(movedEntry.position, e.position));\n  const swapTarget = colliding.length === 1 ? colliding[0] : undefined;\n\n  // Without the adjacency guard a far-away drag (e.g. 4 rows up) would teleport the collider\n  // back to the drag origin instead of simply pushing it out of the way.\n  if (\n    swapTarget &&\n    swapTarget.position.col === movedEntry.position.col &&\n    swapTarget.position.row === movedEntry.position.row &&\n    swapTarget.position.colSpan === movedEntry.position.colSpan &&\n    swapTarget.position.rowSpan === movedEntry.position.rowSpan &&\n    originPosition\n  ) {\n    const dragRowDir = Math.sign(originPosition.row - movedEntry.position.row);\n    const dragColDir = Math.sign(originPosition.col - movedEntry.position.col);\n\n    const adjacentToOrigin =\n      (dragRowDir > 0 && swapTarget.position.row + swapTarget.position.rowSpan === originPosition.row) ||\n      (dragRowDir < 0 && originPosition.row + originPosition.rowSpan === swapTarget.position.row) ||\n      (dragColDir > 0 && swapTarget.position.col + swapTarget.position.colSpan === originPosition.col) ||\n      (dragColDir < 0 && originPosition.col + originPosition.colSpan === swapTarget.position.col);\n\n    if (adjacentToOrigin) {\n      swapTarget.position = { ...originPosition };\n\n      return compactLayout({ entries: result, columns, rowFloors });\n    }\n  }\n\n  if (swapTarget && originPosition) {\n    const sameRowBand =\n      originPosition.row === movedEntry.position.row &&\n      swapTarget.position.row === movedEntry.position.row &&\n      swapTarget.position.rowSpan === movedEntry.position.rowSpan;\n\n    const movedDir = Math.sign(movedEntry.position.col - originPosition.col);\n\n    if (sameRowBand && movedDir !== 0) {\n      const proposedCol =\n        movedDir > 0 ? originPosition.col : originPosition.col + originPosition.colSpan - swapTarget.position.colSpan;\n\n      const proposedPos = { ...swapTarget.position, col: proposedCol };\n\n      const fits =\n        proposedCol >= 0 &&\n        proposedCol + swapTarget.position.colSpan <= columns &&\n        (movedEntry.position.col >= proposedCol + swapTarget.position.colSpan ||\n          proposedCol >= movedEntry.position.col + movedEntry.position.colSpan);\n\n      const noSideEffects =\n        fits &&\n        !result.some(\n          (other) => other.id !== swapTarget.id && other.id !== movedId && itemsCollide(proposedPos, other.position),\n        );\n\n      if (noSideEffects) {\n        swapTarget.position = proposedPos;\n\n        return compactLayout({ entries: result, columns, rowFloors });\n      }\n    }\n  }\n\n  // Without this escape-upward pass the closing compaction pulls the moved item straight back into\n  // its vacated origin, undoing the move until the drag has cleared the collider's full height.\n  if (originPosition && movedEntry.position.row > originPosition.row) {\n    for (const collider of colliding) {\n      const highestFit = movedEntry.position.row - collider.position.rowSpan;\n\n      for (let row = 0; row <= highestFit; row++) {\n        const candidate = { ...collider.position, row };\n\n        if (!result.some((other) => other.id !== collider.id && itemsCollide(candidate, other.position))) {\n          collider.position = candidate;\n          break;\n        }\n      }\n    }\n  }\n\n  const others = result.filter((e) => e.id !== movedId).sort((a, b) => a.position.row - b.position.row);\n\n  const toCheck = [movedEntry];\n\n  while (toCheck.length > 0) {\n    const current = toCheck.shift() as GridLayoutEntry;\n\n    for (const entry of others) {\n      if (entry === current) continue;\n\n      if (itemsCollide(current.position, entry.position)) {\n        const newRow = current.position.row + current.position.rowSpan;\n\n        if (newRow !== entry.position.row) {\n          entry.position.row = newRow;\n          toCheck.push(entry);\n        }\n      }\n    }\n  }\n\n  return compactLayout({ entries: result, columns, rowFloors });\n};\n\n/** The total number of rows the layout occupies. */\nexport const computeGridHeight = (entries: GridLayoutEntry[]) => {\n  if (entries.length === 0) return 0;\n\n  return Math.max(...entries.map((e) => e.position.row + e.position.rowSpan));\n};\n","import { GridBreakpointConfig, GridBreakpointName, GridItemPosition, GridLayoutEntry } from '../grid.types';\n\nexport type MapLayoutOptions = {\n  entries: GridLayoutEntry[];\n  fromColumns: number;\n  toColumns: number;\n};\n\n/**\n * Resolves the active breakpoint name based on the container width.\n * Breakpoints are sorted by minWidth descending - the first one whose minWidth is <= containerWidth wins.\n */\nexport const resolveBreakpoint = (breakpoints: GridBreakpointConfig[], containerWidth: number): GridBreakpointName => {\n  const sorted = [...breakpoints].sort((a, b) => b.minWidth - a.minWidth);\n\n  for (const bp of sorted) {\n    if (containerWidth >= bp.minWidth) {\n      return bp.name;\n    }\n  }\n\n  return sorted[sorted.length - 1]?.name ?? 'sm';\n};\n\n/**\n * Auto-generates a layout for a smaller breakpoint from a larger one.\n * Items are re-flowed into fewer columns, maintaining their relative order.\n */\nexport const mapLayoutToBreakpoint = (options: MapLayoutOptions) => {\n  const { entries, fromColumns, toColumns } = options;\n\n  if (toColumns >= fromColumns) {\n    return entries;\n  }\n\n  const sorted = [...entries].sort((a, b) => a.position.row - b.position.row || a.position.col - b.position.col);\n  const result: GridLayoutEntry[] = [];\n\n  for (const entry of sorted) {\n    const colSpan = Math.min(entry.position.colSpan, toColumns);\n    const placed = autoPlaceForMapping({\n      placed: result,\n      colSpan,\n      rowSpan: entry.position.rowSpan,\n      columns: toColumns,\n    });\n\n    result.push({\n      id: entry.id,\n      position: placed,\n    });\n  }\n\n  return result;\n};\n\ntype AutoPlaceForMappingOptions = {\n  placed: GridLayoutEntry[];\n  colSpan: number;\n  rowSpan: number;\n  columns: number;\n};\n\nconst autoPlaceForMapping = (options: AutoPlaceForMappingOptions): GridItemPosition => {\n  const { placed, colSpan, rowSpan, columns } = options;\n\n  for (let row = 0; ; row++) {\n    for (let col = 0; col <= columns - colSpan; col++) {\n      const candidate: GridItemPosition = { col, row, colSpan, rowSpan };\n      const hasCollision = placed.some(\n        (existing) =>\n          !(\n            candidate.col + candidate.colSpan <= existing.position.col ||\n            existing.position.col + existing.position.colSpan <= candidate.col ||\n            candidate.row + candidate.rowSpan <= existing.position.row ||\n            existing.position.row + existing.position.rowSpan <= candidate.row\n          ),\n      );\n\n      if (!hasCollision) {\n        return candidate;\n      }\n    }\n  }\n};\n\nexport const DEFAULT_BREAKPOINTS: GridBreakpointConfig[] = [\n  { name: 'lg', columns: 12, minWidth: 1200 },\n  { name: 'md', columns: 6, minWidth: 768 },\n  { name: 'sm', columns: 2, minWidth: 0 },\n] as const;\n","import { GridBreakpointConfig, GridItemConfig, GridSerializedState } from '../grid.types';\n\nexport type SerializeOptions<TData = unknown> = {\n  items: GridItemConfig<string, TData>[];\n  breakpoints: GridBreakpointConfig[];\n  rowHeight: number;\n};\n\n/**\n * Serializes the current grid state into a JSON-compatible object suitable for DB storage.\n */\nexport const serializeGridLayout = <TData>(options: SerializeOptions<TData>): GridSerializedState<TData> => {\n  const { items, breakpoints, rowHeight } = options;\n  const columns: Record<string, number> = {};\n\n  for (const bp of breakpoints) {\n    columns[bp.name] = bp.columns;\n  }\n\n  return {\n    columns,\n    rowHeight,\n    items: items.map((item) => ({\n      id: item.id,\n      type: item.type,\n      data: item.data,\n      layout: { ...item.layout },\n    })),\n  };\n};\n\n/**\n * Deserializes a stored grid state back into working configuration.\n */\nexport const deserializeGridLayout = <TData>(\n  state: GridSerializedState<TData>,\n  breakpointMinWidths: Record<string, number>,\n): { breakpoints: GridBreakpointConfig[]; items: GridItemConfig<string, TData>[]; rowHeight: number } => {\n  const breakpoints: GridBreakpointConfig[] = Object.entries(state.columns).map(([name, columns]) => ({\n    name,\n    columns,\n    minWidth: breakpointMinWidths[name] ?? 0,\n  }));\n\n  const items: GridItemConfig<string, TData>[] = state.items.map((item) => ({\n    id: item.id,\n    type: item.type,\n    data: item.data,\n    layout: { ...item.layout },\n  }));\n\n  return { breakpoints, items, rowHeight: state.rowHeight };\n};\n","import {\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  numberAttribute,\n  output,\n  Signal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { equal, injectPrefersReducedMotion, RuntimeError, signalHostElementDimensions, randomId } from '@ethlete/core';\nimport { filter, switchMap, tap, timer } from 'rxjs';\nimport { GRID_ERROR_CODES } from '../grid-errors';\nimport { injectGridConfig } from './grid-config';\nimport { GRID_TOKEN } from './grid.tokens';\nimport {\n  GridBreakpointConfig,\n  GridBreakpointName,\n  GridComponentRegistration,\n  GridItemConfig,\n  GridItemConstraints,\n  GridItemConstraintsConfig,\n  GridItemPosition,\n  GridLayoutEntry,\n  GridMutationOptions,\n  GridSerializedState,\n} from './grid.types';\nimport {\n  autoPlace,\n  clampPosition,\n  compactLayout,\n  computeGeometry,\n  computeGridHeight,\n  DEFAULT_BREAKPOINTS,\n  positionsEqual,\n  resolveBreakpoint,\n  resolveCollisions,\n  rowsToPixelHeight,\n  serializeGridLayout,\n} from './internals';\n\nexport type ResizeItemOptions = {\n  id: string;\n  newColSpan: number;\n  newRowSpan: number;\n  newCol?: number;\n  newRow?: number;\n};\n\nexport type GridDragState = {\n  itemId: string;\n  originPosition: GridItemPosition;\n  targetPosition: GridItemPosition;\n};\n\nexport const GRID_DEBUG_STORAGE_KEY = 'et-grid-debug';\n\nlet cachedGridDebug: boolean | null = null;\n\nexport const isGridDebugEnabled = () => {\n  if (cachedGridDebug === null) {\n    try {\n      cachedGridDebug = globalThis.localStorage?.getItem(GRID_DEBUG_STORAGE_KEY) === 'true';\n    } catch {\n      cachedGridDebug = false;\n    }\n  }\n\n  return cachedGridDebug;\n};\n\nexport const gridDebug = (...args: unknown[]) => {\n  if (!isGridDebugEnabled()) return;\n\n  const timestamp = (globalThis.performance?.now() ?? 0).toFixed(1);\n  console.log(`\\x1B[36m[et-grid ${timestamp}ms]\\x1B[m`, ...args);\n};\n\nconst layoutsEqual = (a: Record<string, GridItemPosition>, b: Record<string, GridItemPosition>) => {\n  const aKeys = Object.keys(a);\n  if (aKeys.length !== Object.keys(b).length) return false;\n\n  return aKeys.every((k) => {\n    const ap = a[k];\n    const bp = b[k];\n    return ap !== undefined && bp !== undefined && positionsEqual(ap, bp);\n  });\n};\n\nconst DEFAULT_CONSTRAINTS: GridItemConstraints = {\n  minColSpan: 1,\n  maxColSpan: 12,\n  minRowSpan: 1,\n  maxRowSpan: 24,\n};\n\nconst fitConstraintsToColumns = (constraints: GridItemConstraints, columns: number): GridItemConstraints => {\n  const maxColSpan = Math.min(constraints.maxColSpan, columns);\n\n  return { ...constraints, minColSpan: Math.min(constraints.minColSpan, maxColSpan), maxColSpan };\n};\n\nconst flattenConstraintsConfig = (\n  config: GridItemConstraintsConfig | undefined,\n  breakpoint: GridBreakpointName,\n): Partial<GridItemConstraints> => {\n  if (!config) return {};\n\n  const { perBreakpoint, ...base } = config;\n\n  return { ...base, ...perBreakpoint?.[breakpoint] };\n};\n\nconst resolveItemConstraints = (\n  id: string,\n  context: {\n    itemConfigs: GridItemConfig[];\n    registrations: GridComponentRegistration[];\n    constraintsRegistry: ReadonlyMap<string, GridItemConstraintsConfig>;\n    breakpoint: GridBreakpointName;\n    columns: number;\n  },\n): GridItemConstraints => {\n  const item = context.itemConfigs.find((i) => i.id === id);\n  const registration = item ? context.registrations.find((r) => r.type === item.type) : undefined;\n\n  return fitConstraintsToColumns(\n    {\n      ...DEFAULT_CONSTRAINTS,\n      ...flattenConstraintsConfig(registration?.constraints, context.breakpoint),\n      ...flattenConstraintsConfig(context.constraintsRegistry.get(id), context.breakpoint),\n    },\n    context.columns,\n  );\n};\n\nconst LEAVE_ANIMATION_MS = 200;\nconst CONTAINER_RESIZE_SETTLE_MS = 150;\n\n@Directive({\n  selector: '[etGrid]',\n  exportAs: 'etGrid',\n  providers: [{ provide: GRID_TOKEN, useExisting: GridDirective }],\n  host: {\n    class: 'et-grid',\n    '[class.et-grid--readonly]': 'readOnly()',\n    '[style.height.px]': 'hostHeight()',\n    '[style.transition]': 'containerTransition()',\n    '[style.--et-grid-gap.px]': 'gap()',\n    '[style.--et-grid-anim-duration]': 'isResizeActive() ? \"160ms\" : null',\n  },\n})\nexport class GridDirective<TData = unknown> {\n  private injector = inject(Injector);\n  private destroyRef = inject(DestroyRef);\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private gridConfig = injectGridConfig();\n  private reducedMotion = injectPrefersReducedMotion();\n\n  public breakpoints = input<GridBreakpointConfig[]>(DEFAULT_BREAKPOINTS);\n  public rowHeight = input(100, { transform: numberAttribute });\n  public gap = input(16, { transform: numberAttribute });\n  /**\n   * The items to render. Every change is reconciled against what the grid holds - added ids are\n   * placed, missing ids are removed, an empty array clears the grid, and the same ids with different\n   * positions restore those positions.\n   */\n  public items = input<GridItemConfig<string, TData>[]>([]);\n  public readOnly = input(false, { transform: booleanAttribute });\n\n  /**\n   * Emitted after the layout changed on this side: a drag, a resize, a keyboard move, `addItem()` or\n   * `removeItem()`. Reconciling `items` does not emit - what the host passed in cannot be news\n   * to it - so this output can be read as \"the user has unsaved changes\".\n   */\n  public layoutChange = output<GridSerializedState<TData>>();\n\n  /** @internal */\n  public hostItems = signal<Signal<GridItemConfig<string, TData>[]> | null>(null);\n\n  private incomingItems = computed(() => this.hostItems()?.() ?? this.items());\n\n  public registrations = computed(() => this.gridConfig.registrations);\n\n  private dimensions = signalHostElementDimensions();\n  private itemConfigs = signal<GridItemConfig<string, TData>[]>([]);\n  private layoutOverrides = signal<Record<GridBreakpointName, GridLayoutEntry[]>>({});\n  public dragState = signal<GridDragState | null>(null);\n\n  // A signal, not a plain Map: an item registers its constraints after the first layout pass, and\n  // everything derived from them - the live drag layout, the resize edges - has to see that arrive.\n  private constraintsRegistry = signal<ReadonlyMap<string, GridItemConstraintsConfig>>(new Map());\n\n  private resizeBaseLayout = signal<GridLayoutEntry[] | null>(null);\n  private pendingResize: { id: string; position: GridItemPosition } | null = null;\n  private lastResizeTarget: GridItemPosition | null = null;\n\n  public leavingIds = signal<ReadonlySet<string>>(new Set<string>());\n\n  public isResizeActive = signal(false);\n  private animationsReady = signal(false);\n  private isContainerResizing = signal(false);\n\n  public containerWidth = computed(() => this.dimensions().client?.width ?? 0);\n\n  public isReady = computed(() => this.containerWidth() > 0);\n\n  public animationsEnabled = computed(\n    () => this.animationsReady() && !this.isContainerResizing() && !this.reducedMotion(),\n  );\n\n  public activeBreakpoint = computed(() => {\n    const width = this.containerWidth();\n    return resolveBreakpoint(this.breakpoints(), width);\n  });\n\n  public activeColumns = computed(() => this.columnsForBreakpoint(this.activeBreakpoint()));\n\n  private paddings = computed(() => {\n    this.dimensions();\n\n    if (typeof getComputedStyle === 'undefined') {\n      return { left: 0, top: 0, right: 0, bottom: 0 };\n    }\n\n    const style = getComputedStyle(this.elementRef.nativeElement);\n\n    return {\n      left: parseFloat(style.paddingLeft) || 0,\n      top: parseFloat(style.paddingTop) || 0,\n      right: parseFloat(style.paddingRight) || 0,\n      bottom: parseFloat(style.paddingBottom) || 0,\n    };\n  });\n\n  public geometry = computed(() => {\n    const padding = this.paddings();\n\n    return computeGeometry({\n      contentWidth: Math.max(0, this.containerWidth() - padding.left - padding.right),\n      columns: this.activeColumns(),\n      gap: this.gap(),\n      rowHeight: this.rowHeight(),\n      originX: padding.left,\n      originY: padding.top,\n    });\n  });\n\n  /**\n   * The items the grid currently holds - the `items` input reconciled with everything that happened\n   * since: drags, resizes, `addItem()` and `removeItem()`.\n   */\n  public currentItems = computed(() => this.itemConfigs());\n\n  public baseLayout = computed((): GridLayoutEntry[] => {\n    const breakpoint = this.activeBreakpoint();\n    const overrides = this.layoutOverrides();\n    const items = this.itemConfigs();\n\n    if (overrides[breakpoint]) {\n      return overrides[breakpoint];\n    }\n\n    return items.map((item) => ({\n      id: item.id,\n      position: item.layout[breakpoint] ?? { col: 0, row: 0, colSpan: 1, rowSpan: 1 },\n    }));\n  });\n\n  public layout = computed((): GridLayoutEntry[] => {\n    const base = this.baseLayout();\n    const drag = this.dragState();\n\n    if (!drag) return base;\n\n    const columns = this.activeColumns();\n    const clamped = clampPosition({\n      position: drag.targetPosition,\n      constraints: resolveItemConstraints(drag.itemId, {\n        itemConfigs: this.itemConfigs(),\n        registrations: this.gridConfig.registrations,\n        constraintsRegistry: this.constraintsRegistry(),\n        breakpoint: this.activeBreakpoint(),\n        columns,\n      }),\n      columns,\n    });\n\n    const withTarget = base.map((e) => (e.id === drag.itemId ? { ...e, position: clamped } : e));\n\n    return resolveCollisions({\n      entries: withTarget,\n      movedId: drag.itemId,\n      columns,\n      originPosition: drag.originPosition,\n    });\n  });\n\n  public containerHeightPx = computed(() => {\n    const padding = this.paddings();\n    return rowsToPixelHeight(computeGridHeight(this.layout()), this.geometry()) + padding.top + padding.bottom;\n  });\n\n  protected hostHeight = computed(() => (this.isReady() ? this.containerHeightPx() : null));\n\n  protected containerTransition = computed(() =>\n    this.animationsEnabled() ? 'height var(--et-grid-anim-duration, 250ms) cubic-bezier(0.2, 0, 0, 1)' : 'none',\n  );\n\n  public ghostPosition = computed((): GridItemPosition | null => {\n    const drag = this.dragState();\n\n    if (!drag) return null;\n\n    const layout = this.layout();\n    const entry = layout.find((e) => e.id === drag.itemId);\n    return entry?.position ?? null;\n  });\n\n  constructor() {\n    // Enable animations one frame after the first measurement so initial placement\n    // is never animated, then suppress them while the container width is in flux.\n    effect(() => {\n      if (!this.isReady()) return;\n\n      untracked(() => {\n        if (this.animationsReady()) return;\n\n        afterNextRender(() => this.animationsReady.set(true), { injector: this.injector });\n      });\n    });\n\n    toObservable(this.containerWidth)\n      .pipe(\n        filter(() => this.animationsReady()),\n        tap(() => this.isContainerResizing.set(true)),\n        switchMap(() => timer(CONTAINER_RESIZE_SETTLE_MS)),\n        tap(() => this.isContainerResizing.set(false)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    effect(() => {\n      const initial = this.incomingItems();\n      untracked(() => {\n        if (initial.length === 0 && this.itemConfigs().length === 0) return;\n\n        if (ngDevMode) {\n          this.assertValidItemConfigs(initial);\n        }\n\n        const current = this.itemConfigs();\n\n        if (current.length === 0) {\n          this.itemConfigs.set(initial);\n\n          return;\n        }\n\n        const currentById = new Map(current.map((c) => [c.id, c]));\n        const initialIds = new Set(initial.map((i) => i.id));\n\n        const newItems = initial.filter((item) => !currentById.has(item.id));\n        const removedIds = current.filter((c) => !initialIds.has(c.id)).map((c) => c.id);\n\n        if (newItems.length === 0 && removedIds.length === 0) {\n          const anyLayoutChanged = initial.some((incoming) => {\n            const existing = currentById.get(incoming.id);\n            return existing && !layoutsEqual(existing.layout, incoming.layout);\n          });\n\n          if (anyLayoutChanged) {\n            this.itemConfigs.set(initial);\n\n            const visitedBps = Object.keys(this.layoutOverrides());\n            if (visitedBps.length > 0) {\n              const columnsByBp = new Map(this.breakpoints().map((bp) => [bp.name, bp.columns]));\n              const restored: Record<string, GridLayoutEntry[]> = {};\n\n              for (const bp of visitedBps) {\n                restored[bp] = this.entriesForBreakpoint({\n                  items: initial,\n                  breakpoint: bp,\n                  columns: columnsByBp.get(bp) ?? this.activeColumns(),\n                });\n              }\n\n              this.layoutOverrides.set(restored);\n            }\n\n            return;\n          }\n\n          // Copy `data` alone: an existing config's `layout` holds what `moveItem` last wrote, which is\n          // ahead of the host's snapshot, so setting `initial` wholesale here would revert the moves.\n          const changedData = initial.filter((incoming) => currentById.get(incoming.id)?.data !== incoming.data);\n\n          if (changedData.length > 0) {\n            const dataById = new Map(changedData.map((item) => [item.id, item.data]));\n\n            this.itemConfigs.update((items) =>\n              items.map((item) => {\n                const incoming = dataById.get(item.id);\n\n                return dataById.has(item.id) ? { ...item, data: incoming as TData } : item;\n              }),\n            );\n          }\n\n          return;\n        }\n\n        // Silent: the host is the source of these items, so echoing them back as a `layoutChange`\n        // would read as a user edit to anything treating that output as a dirty flag.\n        for (const item of newItems) {\n          this.placeItem(item, { silent: true });\n        }\n\n        for (const id of removedIds) {\n          this.removeItem(id, { silent: true });\n        }\n      });\n    });\n\n    effect(() => {\n      const breakpoint = this.activeBreakpoint();\n      const items = this.itemConfigs();\n\n      if (items.length === 0) return;\n\n      untracked(() => {\n        const overrides = this.layoutOverrides();\n        const existing = overrides[breakpoint];\n        const columns = this.activeColumns();\n\n        if (!existing || existing.length !== items.length) {\n          const entries = this.entriesForBreakpoint({\n            items,\n            breakpoint,\n            columns,\n            existing: existing ? new Map(existing.map((e) => [e.id, e])) : null,\n          });\n\n          const compacted = compactLayout({ entries, columns });\n\n          this.layoutOverrides.update((prev) => ({ ...prev, [breakpoint]: compacted }));\n        } else {\n          const clamped = existing.map((entry) => ({\n            ...entry,\n            position: this.fitPositionToBreakpoint({ id: entry.id, position: entry.position, breakpoint, columns }),\n          }));\n\n          const hasChanged = clamped.some((e, i) => {\n            const orig = existing[i];\n\n            return (\n              orig &&\n              (e.position.col !== orig.position.col ||\n                e.position.colSpan !== orig.position.colSpan ||\n                e.position.rowSpan !== orig.position.rowSpan)\n            );\n          });\n\n          if (hasChanged) {\n            const compacted = compactLayout({ entries: clamped, columns });\n            this.layoutOverrides.update((prev) => ({ ...prev, [breakpoint]: compacted }));\n          }\n        }\n      });\n    });\n  }\n\n  public getContainerOrigin(): { left: number; top: number } {\n    const el = this.elementRef.nativeElement;\n    const rect = el.getBoundingClientRect();\n    return { left: rect.left + el.clientLeft, top: rect.top + el.clientTop };\n  }\n\n  public registerConstraints(id: string, constraints: GridItemConstraintsConfig) {\n    // Every signal read here is wrapped in untracked() to prevent this method from inadvertently\n    // becoming a dependency of the caller's reactive context (e.g. GridItemDirective's registration\n    // effect), which would cause the writes below to re-trigger that effect in a loop.\n    untracked(() => {\n      const registry = this.constraintsRegistry();\n      const isFirstRegistration = !registry.has(id);\n\n      // By value, not by identity: `perBreakpointConstraints` is an object, and a caller that rebuilds\n      // it per change detection run would otherwise re-enter the effect that calls this.\n      if (!isFirstRegistration && equal(registry.get(id), constraints)) return;\n\n      this.constraintsRegistry.update((prev) => new Map(prev).set(id, constraints));\n\n      if (!isFirstRegistration) return;\n\n      // On first registration the item may have been auto-placed with 1×1 defaults, because addItem\n      // runs before the GridItemDirective initialises.\n      const breakpoint = this.activeBreakpoint();\n      const existing = this.layoutOverrides()[breakpoint];\n      if (!existing) return;\n\n      const entry = existing.find((e) => e.id === id);\n      if (!entry) return;\n\n      const cols = this.activeColumns();\n      const effective = this.getConstraints(id);\n      const pos = entry.position;\n      if (pos.colSpan >= effective.minColSpan && pos.rowSpan >= effective.minRowSpan) return;\n\n      const others = existing.filter((e) => e.id !== id);\n      const newPosition = autoPlace({\n        entries: others,\n        colSpan: Math.max(pos.colSpan, effective.minColSpan),\n        rowSpan: Math.max(pos.rowSpan, effective.minRowSpan),\n        columns: cols,\n      });\n\n      const updated = existing.map((e) => (e.id === id ? { ...e, position: newPosition } : e));\n      const compacted = compactLayout({ entries: updated, columns: cols });\n      this.layoutOverrides.update((prev) => ({ ...prev, [breakpoint]: compacted }));\n    });\n  }\n\n  public unregisterConstraints(id: string) {\n    untracked(() => {\n      if (!this.constraintsRegistry().has(id)) return;\n\n      this.constraintsRegistry.update((prev) => {\n        const next = new Map(prev);\n        next.delete(id);\n\n        return next;\n      });\n    });\n  }\n\n  /** The item's constraints as they apply at the active breakpoint - column spans already capped to it. */\n  public getConstraints(id: string): GridItemConstraints {\n    return this.getConstraintsForBreakpoint(id, this.activeBreakpoint());\n  }\n\n  /** The same, for a breakpoint other than the active one (placement writes every breakpoint at once). */\n  public getConstraintsForBreakpoint(id: string, breakpoint: GridBreakpointName): GridItemConstraints {\n    return resolveItemConstraints(id, {\n      itemConfigs: this.itemConfigs(),\n      registrations: this.gridConfig.registrations,\n      constraintsRegistry: this.constraintsRegistry(),\n      breakpoint,\n      columns: this.columnsForBreakpoint(breakpoint),\n    });\n  }\n\n  public beginDrag(itemId: string): GridItemPosition | null {\n    const entry = this.baseLayout().find((e) => e.id === itemId);\n\n    if (!entry) return null;\n\n    this.dragState.set({\n      itemId,\n      originPosition: entry.position,\n      targetPosition: entry.position,\n    });\n\n    return entry.position;\n  }\n\n  public updateDragTarget(cell: { col: number; row: number }) {\n    const drag = this.dragState();\n\n    if (!drag) return;\n\n    const targetPosition: GridItemPosition = { ...drag.originPosition, col: cell.col, row: cell.row };\n\n    if (positionsEqual(drag.targetPosition, targetPosition)) return;\n\n    this.dragState.set({ ...drag, targetPosition });\n  }\n\n  public commitDrag(): GridItemPosition | null {\n    const drag = this.dragState();\n\n    if (!drag) return null;\n\n    const resolvedLayout = this.layout();\n    this.updateLayoutForCurrentBreakpoint(resolvedLayout);\n\n    const breakpoint = this.activeBreakpoint();\n\n    this.itemConfigs.update((items) =>\n      items.map((item) => {\n        const entry = resolvedLayout.find((e) => e.id === item.id);\n\n        if (!entry) return item;\n\n        return { ...item, layout: { ...item.layout, [breakpoint]: entry.position } };\n      }),\n    );\n\n    this.dragState.set(null);\n    this.emitLayoutChange();\n\n    return resolvedLayout.find((e) => e.id === drag.itemId)?.position ?? null;\n  }\n\n  public cancelDrag() {\n    this.dragState.set(null);\n  }\n\n  public beginResize(itemId: string): GridItemPosition | null {\n    const base = this.baseLayout();\n    const entry = base.find((e) => e.id === itemId);\n\n    if (!entry) return null;\n\n    this.resizeBaseLayout.set(base);\n    this.pendingResize = null;\n    this.lastResizeTarget = null;\n    this.isResizeActive.set(true);\n\n    return entry.position;\n  }\n\n  public updateResize(itemId: string, target: GridItemPosition) {\n    const base = this.resizeBaseLayout();\n\n    if (!base) return;\n\n    if (this.lastResizeTarget && positionsEqual(this.lastResizeTarget, target)) return;\n    this.lastResizeTarget = target;\n\n    const entry = base.find((e) => e.id === itemId);\n\n    if (!entry) return;\n\n    const columns = this.activeColumns();\n    const clamped = clampPosition({ position: target, constraints: this.getConstraints(itemId), columns });\n\n    const currentLayout = base.map((e) => (e.id === itemId ? { ...e, position: clamped } : e));\n\n    const withShrunk = this.shrinkNeighbors({\n      layout: currentLayout,\n      resizedId: itemId,\n      resizedPos: clamped,\n      originalPos: entry.position,\n      columns,\n    });\n\n    const rowFloors = new Map(base.map((e) => [e.id, e.position.row]));\n    rowFloors.set(itemId, clamped.row);\n\n    const resolved = resolveCollisions({ entries: withShrunk, movedId: itemId, columns, rowFloors });\n\n    this.updateLayoutForCurrentBreakpoint(resolved);\n\n    const resolvedEntry = resolved.find((e) => e.id === itemId);\n    this.pendingResize = { id: itemId, position: resolvedEntry?.position ?? clamped };\n  }\n\n  public commitResize(): GridItemPosition | null {\n    const pending = this.pendingResize;\n\n    this.resizeBaseLayout.set(null);\n    this.pendingResize = null;\n    this.lastResizeTarget = null;\n    this.isResizeActive.set(false);\n\n    if (!pending) return null;\n\n    // Run the upward compaction that was held back during the gesture, so freed-up\n    // space is reclaimed only once the pointer is released.\n    const compacted = compactLayout({ entries: this.baseLayout(), columns: this.activeColumns() });\n    this.updateLayoutForCurrentBreakpoint(compacted);\n\n    const finalPosition = compacted.find((e) => e.id === pending.id)?.position ?? pending.position;\n\n    this.updateItemLayout(pending.id, finalPosition);\n    this.emitLayoutChange();\n\n    return finalPosition;\n  }\n\n  public cancelResize() {\n    const base = this.resizeBaseLayout();\n\n    this.resizeBaseLayout.set(null);\n    this.pendingResize = null;\n    this.lastResizeTarget = null;\n    this.isResizeActive.set(false);\n\n    if (base) {\n      this.updateLayoutForCurrentBreakpoint(base);\n    }\n  }\n\n  /** One-shot resize (keyboard / programmatic): begin + update + commit in a single call. */\n  public resizeItem(options: ResizeItemOptions) {\n    const start = this.beginResize(options.id);\n\n    if (!start) return;\n\n    this.updateResize(options.id, {\n      col: options.newCol ?? start.col,\n      row: options.newRow ?? start.row,\n      colSpan: options.newColSpan,\n      rowSpan: options.newRowSpan,\n    });\n    this.commitResize();\n  }\n\n  public addItem(type: string, data: TData) {\n    const id = randomId();\n\n    const config: GridItemConfig<string, TData> = {\n      id,\n      type,\n      data,\n      layout: {},\n    };\n\n    this.placeItem(config);\n  }\n\n  public removeItem(id: string, options?: GridMutationOptions) {\n    if (this.leavingIds().has(id)) return;\n    if (!this.itemConfigs().some((i) => i.id === id)) return;\n\n    if (!this.animationsEnabled()) {\n      this.finalizeRemove(id, options);\n\n      return;\n    }\n\n    // Mark the item as leaving - its directive plays the scale/opacity-out transition - then actually\n    // remove it once the animation has finished.\n    this.leavingIds.update((ids) => new Set(ids).add(id));\n\n    timer(LEAVE_ANIMATION_MS)\n      .pipe(\n        tap(() => {\n          this.leavingIds.update((ids) => {\n            const next = new Set(ids);\n            next.delete(id);\n            return next;\n          });\n          this.finalizeRemove(id, options);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  public moveItem(id: string, newPosition: GridItemPosition) {\n    const columns = this.activeColumns();\n    const item = this.itemConfigs().find((i) => i.id === id);\n\n    if (!item) return;\n\n    const clamped = clampPosition({ position: newPosition, constraints: this.getConstraints(id), columns });\n    const originPosition = this.baseLayout().find((e) => e.id === id)?.position;\n    const currentLayout = this.baseLayout().map((e) => (e.id === id ? { ...e, position: clamped } : e));\n\n    // originPosition enables the swap/escape-upward heuristics - keyboard moves (Ctrl+Arrow)\n    // should displace neighbours exactly like the equivalent drag.\n    const resolved = resolveCollisions({ entries: currentLayout, movedId: id, columns, originPosition });\n    this.updateLayoutForCurrentBreakpoint(resolved);\n    this.updateItemLayout(id, clamped);\n    this.emitLayoutChange();\n  }\n\n  public getSerializedState(): GridSerializedState<TData> {\n    const overrides = this.layoutOverrides();\n\n    // layoutOverrides is the authoritative source for any breakpoint that has been visited.\n    // itemConfigs.layout[bp] lags behind for breakpoints that haven't been written back yet.\n    const items = this.itemConfigs().map((item) => {\n      const layout: Record<string, GridItemPosition> = { ...item.layout };\n\n      for (const [bp, entries] of Object.entries(overrides)) {\n        const entry = entries.find((e) => e.id === item.id);\n        if (entry) layout[bp] = entry.position;\n      }\n\n      return { ...item, layout };\n    });\n\n    return serializeGridLayout({\n      items,\n      breakpoints: this.breakpoints(),\n      rowHeight: this.rowHeight(),\n    });\n  }\n\n  public restoreState(state: GridSerializedState<TData>) {\n    if (ngDevMode) {\n      this.assertValidItemConfigs(state.items);\n\n      const known = this.breakpoints().map((b) => b.name);\n      const unknown = Object.keys(state.columns).filter((bp) => !known.includes(bp));\n\n      if (unknown.length > 0) {\n        throw new RuntimeError(\n          GRID_ERROR_CODES.INVALID_LAYOUT_STATE,\n          `[GridDirective] restoreState received a state with unknown breakpoint(s) ${unknown\n            .map((name) => `\"${name}\"`)\n            .join(', ')}. Configured breakpoints are ${known.map((name) => `\"${name}\"`).join(', ')}.`,\n          state,\n        );\n      }\n    }\n\n    const items: GridItemConfig<string, TData>[] = state.items.map((item) => ({\n      id: item.id,\n      type: item.type,\n      data: item.data,\n      layout: { ...item.layout },\n    }));\n\n    this.itemConfigs.set(items);\n\n    const overrides: Record<GridBreakpointName, GridLayoutEntry[]> = {};\n\n    for (const [bpName, columns] of Object.entries(state.columns)) {\n      overrides[bpName] = this.entriesForBreakpoint({ items, breakpoint: bpName, columns });\n    }\n\n    this.layoutOverrides.set(overrides);\n  }\n\n  private columnsForBreakpoint(breakpoint: GridBreakpointName) {\n    return this.breakpoints().find((b) => b.name === breakpoint)?.columns ?? 12;\n  }\n\n  private assertValidItemConfigs(items: GridItemConfig[]) {\n    const seen = new Set<string>();\n\n    for (const item of items) {\n      if (seen.has(item.id)) {\n        throw new RuntimeError(\n          GRID_ERROR_CODES.DUPLICATE_ITEM_ID,\n          `[GridDirective] Multiple grid item configs share the id \"${item.id}\". Item ids must be unique.`,\n          items.filter((i) => i.id === item.id),\n        );\n      }\n\n      seen.add(item.id);\n    }\n\n    this.warnAboutUncoveredBreakpoints(items);\n  }\n\n  private warnAboutUncoveredBreakpoints(items: GridItemConfig[]) {\n    const configured = this.breakpoints().map((b) => b.name);\n    const quote = (names: string[]) => names.map((name) => `\"${name}\"`).join(', ');\n\n    for (const item of items) {\n      const provided = Object.keys(item.layout);\n      const missing = provided.length > 0 ? configured.filter((name) => !provided.includes(name)) : [];\n      const unknown = provided.filter((name) => !configured.includes(name));\n\n      const problems = [\n        missing.length > 0 ? `has no position for ${quote(missing)}` : null,\n        unknown.length > 0 ? `has positions for unknown breakpoint(s) ${quote(unknown)}` : null,\n      ].filter((problem) => problem !== null);\n\n      if (problems.length === 0) continue;\n\n      console.warn(\n        `[GridDirective] The layout of grid item \"${item.id}\" ${problems.join(' and ')}. Configured breakpoints are ${quote(configured)}; an omitted one is auto-placed in item order instead of following the positions the layout does carry.`,\n        item,\n      );\n    }\n  }\n\n  private finalizeRemove(id: string, options?: GridMutationOptions) {\n    this.itemConfigs.update((items) => items.filter((i) => i.id !== id));\n\n    const columns = this.activeColumns();\n    const currentLayout = this.baseLayout().filter((e) => e.id !== id);\n    const compacted = compactLayout({ entries: currentLayout, columns });\n\n    this.updateLayoutForCurrentBreakpoint(compacted);\n    this.compactOtherBreakpoints(id);\n\n    if (!options?.silent) this.emitLayoutChange();\n  }\n\n  /**\n   * A minimum only grows an item whose `GridItemDirective` has registered: an item added mid-session\n   * sits in the layout at 1×1 until it does, and growing it here would fight `registerConstraints()`\n   * and overlap its neighbours. Callers pass the result through `compactLayout()`, which resolves the\n   * overlaps growing can still introduce.\n   */\n  private fitPositionToBreakpoint(options: {\n    id: string;\n    position: GridItemPosition;\n    breakpoint: GridBreakpointName;\n    columns: number;\n  }): GridItemPosition {\n    const { id, position, breakpoint, columns } = options;\n    const constraints = this.getConstraintsForBreakpoint(id, breakpoint);\n    const grow = this.constraintsRegistry().has(id);\n\n    const cappedColSpan = Math.min(position.colSpan, constraints.maxColSpan, columns);\n    const colSpan = grow ? Math.max(cappedColSpan, constraints.minColSpan) : cappedColSpan;\n    const cappedRowSpan = Math.min(position.rowSpan, constraints.maxRowSpan);\n    const rowSpan = grow ? Math.max(cappedRowSpan, constraints.minRowSpan) : cappedRowSpan;\n\n    return { col: Math.max(0, Math.min(position.col, columns - colSpan)), row: position.row, colSpan, rowSpan };\n  }\n\n  private entriesForBreakpoint(options: {\n    items: readonly GridItemConfig<string, TData>[];\n    breakpoint: string;\n    columns: number;\n    existing?: Map<string, GridLayoutEntry> | null;\n  }): GridLayoutEntry[] {\n    const { items, breakpoint, columns, existing } = options;\n    const entries: GridLayoutEntry[] = [];\n\n    for (const item of items) {\n      const existingEntry = existing?.get(item.id);\n\n      if (existingEntry) {\n        entries.push(existingEntry);\n        continue;\n      }\n\n      const stored = item.layout[breakpoint];\n      const constraints = this.getConstraintsForBreakpoint(item.id, breakpoint);\n      const position = stored\n        ? this.fitPositionToBreakpoint({ id: item.id, position: stored, breakpoint, columns })\n        : autoPlace({\n            entries,\n            colSpan: constraints.minColSpan,\n            rowSpan: constraints.minRowSpan,\n            columns,\n          });\n\n      entries.push({ id: item.id, position });\n    }\n\n    return entries;\n  }\n\n  private placeItem(config: GridItemConfig<string, TData>, options?: GridMutationOptions) {\n    const activeBp = this.activeBreakpoint();\n    const columns = this.activeColumns();\n    const currentLayout = this.baseLayout();\n    const constraints = this.getConstraints(config.id);\n    const allBreakpoints = this.breakpoints();\n    const overrides = this.layoutOverrides();\n    const existingItems = this.itemConfigs();\n\n    const layout: Record<string, GridItemPosition> = { ...config.layout };\n\n    // Place on the active breakpoint first so other breakpoints can use it as a reference.\n    const position =\n      layout[activeBp] ??\n      autoPlace({\n        entries: currentLayout,\n        colSpan: constraints.minColSpan,\n        rowSpan: constraints.minRowSpan,\n        columns,\n      });\n    layout[activeBp] = position;\n\n    // The emitted layoutChange always carries all breakpoints so the host's gridItems signal never\n    // loses sm/md positions for new items.\n    for (const bp of allBreakpoints) {\n      if (bp.name === activeBp || layout[bp.name]) continue;\n\n      const bpEntries: GridLayoutEntry[] =\n        overrides[bp.name] ??\n        this.entriesForBreakpoint({ items: existingItems, breakpoint: bp.name, columns: bp.columns });\n\n      layout[bp.name] = autoPlace({\n        entries: bpEntries,\n        colSpan: this.getConstraintsForBreakpoint(config.id, bp.name).minColSpan,\n        rowSpan: constraints.minRowSpan,\n        columns: bp.columns,\n      });\n    }\n\n    const itemWithLayout: GridItemConfig<string, TData> = { ...config, layout };\n\n    this.itemConfigs.update((items) => [...items, itemWithLayout]);\n    this.updateLayoutForCurrentBreakpoint([...currentLayout, { id: config.id, position }]);\n\n    if (!options?.silent) this.emitLayoutChange();\n  }\n\n  private shrinkNeighbors(options: {\n    layout: GridLayoutEntry[];\n    resizedId: string;\n    resizedPos: GridItemPosition;\n    originalPos: GridItemPosition;\n    columns: number;\n  }): GridLayoutEntry[] {\n    const { layout, resizedId, resizedPos, originalPos, columns } = options;\n\n    const candidates = layout.map((entry) => {\n      if (entry.id === resizedId) return entry;\n\n      const pos = entry.position;\n\n      // Use original row range so items that only entered the overlap zone due to a south/north\n      // resize are not treated as horizontal neighbors and incorrectly shrunk.\n      const rowOverlap = pos.row < originalPos.row + originalPos.rowSpan && pos.row + pos.rowSpan > originalPos.row;\n      const colOverlap = pos.col < resizedPos.col + resizedPos.colSpan && pos.col + pos.colSpan > resizedPos.col;\n\n      if (!rowOverlap || !colOverlap) return entry;\n\n      const minColSpan = this.getConstraints(entry.id).minColSpan;\n\n      const neighborIsRight = pos.col >= resizedPos.col;\n      const shrunkPos = { ...pos };\n\n      if (neighborIsRight) {\n        const newCol = resizedPos.col + resizedPos.colSpan;\n        if (newCol + pos.colSpan <= columns) {\n          shrunkPos.col = newCol;\n        } else {\n          // Compute reduction from the max-slide position, not from the base col.\n          // Using the base col would count the already-slid distance as part of the\n          // shrink, causing a double-step on the first frame where slide is impossible.\n          const maxSlideCol = columns - pos.colSpan;\n          const excessCols = newCol - maxSlideCol;\n          const newColSpan = Math.max(minColSpan, pos.colSpan - excessCols);\n          const clampedCol = Math.min(newCol, columns - newColSpan);\n          shrunkPos.col = clampedCol;\n          shrunkPos.colSpan = newColSpan;\n        }\n      } else {\n        const maxRight = resizedPos.col;\n        if (maxRight - pos.colSpan >= 0) {\n          shrunkPos.col = maxRight - pos.colSpan;\n        } else {\n          const newColSpan = Math.max(minColSpan, maxRight);\n          shrunkPos.col = 0;\n          shrunkPos.colSpan = newColSpan;\n        }\n      }\n\n      return { ...entry, position: shrunkPos };\n    });\n\n    return candidates.map((entry, idx) => {\n      if (entry.id === resizedId) return entry;\n\n      const original = layout[idx] as GridLayoutEntry;\n\n      if (entry.position.col === original.position.col && entry.position.colSpan === original.position.colSpan)\n        return entry;\n\n      const resizedEntry = candidates.find((c) => c.id === resizedId);\n      if (\n        resizedEntry &&\n        resizedEntry.position.row < entry.position.row + entry.position.rowSpan &&\n        resizedEntry.position.row + resizedEntry.position.rowSpan > entry.position.row &&\n        resizedEntry.position.col < entry.position.col + entry.position.colSpan &&\n        resizedEntry.position.col + resizedEntry.position.colSpan > entry.position.col\n      ) {\n        return original;\n      }\n\n      const collides = candidates.some(\n        (other) =>\n          other.id !== entry.id &&\n          other.id !== resizedId &&\n          other.position.row < entry.position.row + entry.position.rowSpan &&\n          other.position.row + other.position.rowSpan > entry.position.row &&\n          other.position.col < entry.position.col + entry.position.colSpan &&\n          other.position.col + other.position.colSpan > entry.position.col,\n      );\n\n      return collides ? original : entry;\n    });\n  }\n\n  private compactOtherBreakpoints(removedId: string) {\n    const activeBp = this.activeBreakpoint();\n    const bpColumns = new Map(this.breakpoints().map((b) => [b.name, b.columns]));\n\n    for (const [bp, entries] of Object.entries(this.layoutOverrides())) {\n      if (bp === activeBp) continue;\n      const withoutItem = entries.filter((e) => e.id !== removedId);\n      const cols = bpColumns.get(bp) ?? 1;\n      const compacted = compactLayout({ entries: withoutItem, columns: cols });\n      this.layoutOverrides.update((prev) => ({ ...prev, [bp]: compacted }));\n    }\n  }\n\n  private updateLayoutForCurrentBreakpoint(entries: GridLayoutEntry[]) {\n    const breakpoint = this.activeBreakpoint();\n    this.layoutOverrides.update((prev) => ({ ...prev, [breakpoint]: entries }));\n  }\n\n  private updateItemLayout(id: string, position: GridItemPosition) {\n    const breakpoint = this.activeBreakpoint();\n\n    this.itemConfigs.update((items) =>\n      items.map((item) => (item.id === id ? { ...item, layout: { ...item.layout, [breakpoint]: position } } : item)),\n    );\n  }\n\n  private emitLayoutChange() {\n    this.layoutChange.emit(this.getSerializedState());\n  }\n}\n","import {\n  afterNextRender,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  numberAttribute,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { filter, fromEvent, merge, Subscription, take, tap, timer } from 'rxjs';\nimport { GRID_ERROR_CODES } from '../grid-errors';\nimport { GRID_TOKEN } from './grid.tokens';\nimport { GridItemConstraintsConfig } from './grid.types';\nimport { PixelRect, pixelRectsEqual, positionsEqual, positionToPixelRect } from './internals';\n\nconst SETTLE_FALLBACK_MS = 350;\n\nconst optionalNumberAttribute = (value: unknown) =>\n  value === undefined || value === null || value === '' ? undefined : numberAttribute(value);\n\n@Directive({\n  selector: '[etGridItem]',\n  exportAs: 'etGridItem',\n  host: {\n    class: 'et-grid-item',\n    '[style.translate]': 'translateStyle()',\n    '[style.width.px]': 'renderedRect()?.width',\n    '[style.height.px]': 'renderedRect()?.height',\n    '[style.transition]': 'transitionStyle()',\n    '[class.et-grid-item--direct]': 'renderMode() === \"direct\"',\n    '[class.et-grid-item--settling]': 'isSettling()',\n    '[class.et-grid-item--entering]': 'entering()',\n    '[class.et-grid-item--leaving]': 'leaving()',\n  },\n})\nexport class GridItemDirective {\n  private grid = inject(GRID_TOKEN, { optional: true });\n  private injector = inject(Injector);\n  private destroyRef = inject(DestroyRef);\n  public hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public itemId = input.required<string>();\n  // Unset rather than defaulted, so an item that only narrows one bound of a registered type keeps\n  // the registration's other three - see `resolveItemConstraints`.\n  public minColSpan = input(undefined, { transform: optionalNumberAttribute });\n  public maxColSpan = input(undefined, { transform: optionalNumberAttribute });\n  public minRowSpan = input(undefined, { transform: optionalNumberAttribute });\n  public maxRowSpan = input(undefined, { transform: optionalNumberAttribute });\n  /**\n   * Span bounds that replace the four inputs above at one breakpoint:\n   * `[perBreakpointConstraints]=\"{ sm: { maxColSpan: 1 } }\"`. Merged per key, so a bound the\n   * breakpoint does not name keeps whatever the item or its registration set.\n   */\n  public perBreakpointConstraints = input<GridItemConstraintsConfig['perBreakpoint']>();\n\n  public isBeingDragged = computed(() => this.grid?.dragState()?.itemId === this.itemId());\n\n  public currentPosition = computed(\n    () => {\n      const layout = this.grid?.layout() ?? [];\n      const entry = layout.find((e) => e.id === this.itemId());\n      return entry?.position ?? null;\n    },\n    { equal: positionsEqual },\n  );\n\n  /** The layout-derived target rect in container-relative pixels. */\n  public slotRect = computed(\n    () => {\n      const pos = this.currentPosition();\n      return pos && this.grid ? positionToPixelRect(pos, this.grid.geometry()) : null;\n    },\n    { equal: pixelRectsEqual },\n  );\n\n  private renderModeSignal = signal<'layout' | 'direct'>('layout');\n  private liveRect = signal<PixelRect | null>(null);\n  private isSettlingSignal = signal(false);\n  private enteringSignal = signal(false);\n\n  public renderMode = this.renderModeSignal.asReadonly();\n  public isSettling = this.isSettlingSignal.asReadonly();\n\n  protected entering = this.enteringSignal.asReadonly();\n  protected leaving = computed(() => this.grid?.leavingIds().has(this.itemId()) ?? false);\n\n  /** The rect currently bound to the host: pointer-driven while direct-controlled, the slot otherwise. */\n  public renderedRect = computed(() => (this.renderModeSignal() === 'direct' ? this.liveRect() : this.slotRect()), {\n    equal: pixelRectsEqual,\n  });\n\n  protected translateStyle = computed(() => {\n    const rect = this.renderedRect();\n    return rect ? `${rect.x}px ${rect.y}px` : null;\n  });\n\n  protected transitionStyle = computed(() => {\n    if (!this.grid?.animationsEnabled() || this.renderModeSignal() === 'direct') return 'none';\n\n    const move = 'var(--et-grid-anim-duration, 250ms) cubic-bezier(0.2, 0, 0, 1)';\n    const fade = '200ms cubic-bezier(0.2, 0, 0, 1)';\n\n    return `translate ${move}, width ${move}, height ${move}, scale ${fade}, opacity ${fade}`;\n  });\n\n  private settleListener: Subscription | null = null;\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.grid) {\n          throw new RuntimeError(\n            GRID_ERROR_CODES.MISSING_GRID,\n            '[GridItemDirective] etGridItem must be placed inside an [etGrid] element (e.g. et-grid).',\n            { element: this.hostElement.nativeElement },\n          );\n        }\n      });\n    }\n\n    effect((onCleanup) => {\n      const id = this.itemId();\n      this.grid?.registerConstraints(id, {\n        ...(this.minColSpan() === undefined ? {} : { minColSpan: this.minColSpan() }),\n        ...(this.maxColSpan() === undefined ? {} : { maxColSpan: this.maxColSpan() }),\n        ...(this.minRowSpan() === undefined ? {} : { minRowSpan: this.minRowSpan() }),\n        ...(this.maxRowSpan() === undefined ? {} : { maxRowSpan: this.maxRowSpan() }),\n        perBreakpoint: this.perBreakpointConstraints(),\n      });\n      onCleanup(() => this.grid?.unregisterConstraints(id));\n    });\n\n    // Items mounted mid-session (addItem) mount with the entering styles already applied - CSS\n    // transitions never run on insertion - and the class is cleared one frame later.\n    if (untracked(() => this.grid?.animationsEnabled())) {\n      this.enteringSignal.set(true);\n      afterNextRender(() => this.enteringSignal.set(false), { injector: this.injector });\n    }\n\n    this.destroyRef.onDestroy(() => this.settleListener?.unsubscribe());\n  }\n\n  public startDirectControl() {\n    this.settleListener?.unsubscribe();\n    this.isSettlingSignal.set(false);\n    this.liveRect.set(this.slotRect());\n    this.renderModeSignal.set('direct');\n  }\n\n  public updateDirectRect(rect: PixelRect) {\n    if (this.renderModeSignal() !== 'direct') return;\n\n    this.liveRect.set(rect);\n  }\n\n  public stopDirectControl() {\n    if (this.renderModeSignal() !== 'direct') return;\n\n    this.renderModeSignal.set('layout');\n    this.liveRect.set(null);\n\n    if (!untracked(() => this.grid?.animationsEnabled())) return;\n\n    this.isSettlingSignal.set(true);\n\n    const el = this.hostElement.nativeElement;\n\n    const settled$ = merge(\n      fromEvent<TransitionEvent>(el, 'transitionend'),\n      fromEvent<TransitionEvent>(el, 'transitioncancel'),\n    ).pipe(\n      filter(\n        (event) =>\n          event.target === el &&\n          (event.propertyName === 'translate' || event.propertyName === 'width' || event.propertyName === 'height'),\n      ),\n    );\n\n    this.settleListener?.unsubscribe();\n\n    // The timer is the fallback for drops that land exactly in the current slot - no\n    // transition fires then.\n    this.settleListener = merge(settled$, timer(SETTLE_FALLBACK_MS))\n      .pipe(\n        take(1),\n        tap(() => this.isSettlingSignal.set(false)),\n      )\n      .subscribe();\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { afterNextRender, DestroyRef, Directive, effect, ElementRef, inject, untracked } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DragHandleDirective, DragMoveEvent, DragStartEvent, RuntimeError } from '@ethlete/core';\nimport { filter, fromEvent, merge, Subscription, tap } from 'rxjs';\nimport { GRID_ERROR_CODES } from '../grid-errors';\nimport { GridItemDirective } from './grid-item.directive';\nimport { GRID_TOKEN } from './grid.tokens';\nimport { GridItemPosition } from './grid.types';\nimport {\n  computeGridHeight,\n  createAutoScroller,\n  findScrollableAncestor,\n  positionToPixelRect,\n  projectDragCell,\n  rowsToPixelHeight,\n} from './internals';\n\n@Directive({\n  selector: '[etGridDrag]',\n  hostDirectives: [\n    {\n      directive: DragHandleDirective,\n      outputs: ['dragStarted', 'dragMoved', 'dragEnded'],\n    },\n  ],\n  host: {\n    class: 'et-grid-drag',\n    '[class.et-grid-drag--active]': '!grid?.readOnly() && dragHandle.isDragging()',\n    '[attr.aria-grabbed]': '!grid?.readOnly() && dragHandle.isDragging()',\n    // Must bind a concrete value in both states - this binding outranks the host directive's, and a\n    // null here clears the property instead of delegating.\n    '[style.touch-action]': \"grid?.readOnly() ? 'auto' : 'none'\",\n  },\n})\nexport class GridDragDirective {\n  protected grid = inject(GRID_TOKEN, { optional: true });\n  private gridItem = inject(GridItemDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  public dragHandle = inject(DragHandleDirective);\n\n  private origin: GridItemPosition | null = null;\n  private startBreakpoint: string | null = null;\n  private grabOffset: { x: number; y: number } | null = null;\n  private containerOrigin: { left: number; top: number } | null = null;\n  private lastPointer: { clientX: number; clientY: number } | null = null;\n  private lastTarget: { col: number; row: number } | null = null;\n  private gestureListeners: Subscription | null = null;\n\n  private autoScroller = createAutoScroller({\n    document: this.document,\n    getScrollElement: () =>\n      (this.grid ? findScrollableAncestor(this.grid.elementRef.nativeElement) : null) ??\n      (this.document.scrollingElement as HTMLElement | null),\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.gridItem) {\n          throw new RuntimeError(\n            GRID_ERROR_CODES.MISSING_GRID_ITEM,\n            '[GridDragDirective] etGridDrag must be placed on or inside an [etGridItem] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n\n    outputToObservable(this.dragHandle.dragStarted)\n      .pipe(\n        tap((event) => this.startDrag(event)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    outputToObservable(this.dragHandle.dragMoved)\n      .pipe(\n        tap((event) => this.trackDragMove(event)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    outputToObservable(this.dragHandle.dragEnded)\n      .pipe(\n        tap(() => this.settleDrag()),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    outputToObservable(this.dragHandle.dragCancelled)\n      .pipe(\n        tap(() => this.cancelDrag()),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    // Cancel when the gesture's frame of reference breaks mid-drag: readOnly flips on,\n    // or a breakpoint switch invalidates the origin position and column count.\n    effect(() => {\n      const readOnly = this.grid?.readOnly() ?? false;\n      const breakpoint = this.grid?.activeBreakpoint() ?? null;\n\n      untracked(() => {\n        if (!this.origin) return;\n\n        if (readOnly || breakpoint !== this.startBreakpoint) {\n          this.cancelDrag();\n        }\n      });\n    });\n\n    effect(() => {\n      this.grid?.containerWidth();\n\n      untracked(() => {\n        if (!this.origin) return;\n\n        this.containerOrigin = this.grid?.getContainerOrigin() ?? null;\n        this.applyPointer();\n      });\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.autoScroller.stop();\n      this.detachGestureListeners();\n    });\n  }\n\n  private startDrag(event: DragStartEvent) {\n    const grid = this.grid;\n    const gridItem = this.gridItem;\n\n    if (!grid || !gridItem) return;\n    if (grid.readOnly() || !grid.isReady()) return;\n\n    const origin = grid.beginDrag(gridItem.itemId());\n\n    if (!origin) return;\n\n    // Measure the VISUAL rect (translate included) - correct even when the item is grabbed\n    // mid-settle.\n    const itemRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n    this.grabOffset = {\n      x: Math.min(Math.max(event.clientX - itemRect.left, 0), itemRect.width),\n      y: Math.min(Math.max(event.clientY - itemRect.top, 0), itemRect.height),\n    };\n    this.containerOrigin = grid.getContainerOrigin();\n    this.lastPointer = { clientX: event.clientX, clientY: event.clientY };\n    this.origin = origin;\n    this.startBreakpoint = grid.activeBreakpoint();\n    this.lastTarget = { col: origin.col, row: origin.row };\n\n    gridItem.startDirectControl();\n    this.attachGestureListeners();\n    this.autoScroller.start(this.lastPointer);\n  }\n\n  private trackDragMove(event: DragMoveEvent) {\n    if (!this.origin) return;\n\n    this.lastPointer = { clientX: event.clientX, clientY: event.clientY };\n    this.autoScroller.update(this.lastPointer);\n    this.applyPointer();\n  }\n\n  private applyPointer() {\n    const grid = this.grid;\n    const origin = this.origin;\n    const grabOffset = this.grabOffset;\n    const containerOrigin = this.containerOrigin;\n    const pointer = this.lastPointer;\n\n    if (!grid || !origin || !grabOffset || !containerOrigin || !pointer) return;\n\n    const geometry = grid.geometry();\n    const size = positionToPixelRect(origin, geometry);\n\n    const pointerInContainer = {\n      x: pointer.clientX - containerOrigin.left,\n      y: pointer.clientY - containerOrigin.top,\n    };\n\n    // Horizontally the item can never leave the container; vertically its top can reach the current\n    // content bottom (so it can still be dropped onto a new last row). Without this the floating item\n    // creates page overflow, which feeds the auto-scroller ever more room to scroll into.\n    const contentHeight = rowsToPixelHeight(computeGridHeight(grid.layout()), geometry);\n    const maxX = geometry.originX + Math.max(0, geometry.contentWidth - size.width);\n    const maxY = geometry.originY + contentHeight;\n\n    const float = {\n      x: Math.min(Math.max(pointerInContainer.x - grabOffset.x, geometry.originX), maxX),\n      y: Math.min(Math.max(pointerInContainer.y - grabOffset.y, geometry.originY), maxY),\n    };\n\n    // Re-anchor the grab offset whenever the clamp engaged: the anchor slides along the\n    // item so pointer overshoot beyond the grid never accumulates - the moment the\n    // pointer reverses, the item moves with it instead of waiting for the overshoot\n    // distance to be travelled back.\n    this.grabOffset = {\n      x: Math.min(Math.max(pointerInContainer.x - float.x, 0), size.width),\n      y: Math.min(Math.max(pointerInContainer.y - float.y, 0), size.height),\n    };\n\n    this.gridItem?.updateDirectRect({ x: float.x, y: float.y, width: size.width, height: size.height });\n\n    const cell = projectDragCell({ float, colSpan: origin.colSpan, geometry, lastTarget: this.lastTarget });\n    this.lastTarget = cell;\n    grid.updateDragTarget(cell);\n  }\n\n  private settleDrag() {\n    if (!this.origin) return;\n\n    // Commit first (layout now holds the final slot), then hand rendering back -\n    // the item transitions from its current pointer rect straight to that slot.\n    this.grid?.commitDrag();\n    this.finishGesture();\n  }\n\n  private cancelDrag() {\n    if (!this.origin) return;\n\n    this.grid?.cancelDrag();\n    this.finishGesture();\n  }\n\n  private finishGesture() {\n    this.gridItem?.stopDirectControl();\n    this.origin = null;\n    this.startBreakpoint = null;\n    this.grabOffset = null;\n    this.containerOrigin = null;\n    this.lastPointer = null;\n    this.lastTarget = null;\n    this.autoScroller.stop();\n    this.detachGestureListeners();\n  }\n\n  private attachGestureListeners() {\n    // eslint-disable-next-line ethlete/prefer-scroll-state\n    const scroll$ = fromEvent(this.document, 'scroll', { capture: true, passive: true }).pipe(\n      tap(() => {\n        if (!this.origin) return;\n\n        this.containerOrigin = this.grid?.getContainerOrigin() ?? null;\n        this.applyPointer();\n      }),\n    );\n\n    const escape$ = fromEvent<KeyboardEvent>(this.document, 'keydown').pipe(\n      filter((event) => event.key === 'Escape'),\n      tap(() => this.cancelDrag()),\n    );\n\n    this.gestureListeners?.unsubscribe();\n    this.gestureListeners = merge(scroll$, escape$).subscribe();\n  }\n\n  private detachGestureListeners() {\n    this.gestureListeners?.unsubscribe();\n    this.gestureListeners = null;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { afterNextRender, computed, DestroyRef, Directive, effect, inject, signal, untracked } from '@angular/core';\nimport { injectHostElement, ResizeEdge, ResizeMoveEvent, RuntimeError } from '@ethlete/core';\nimport { filter, fromEvent, merge, Subscription, tap } from 'rxjs';\nimport { GRID_ERROR_CODES } from '../grid-errors';\nimport { GridItemDirective } from './grid-item.directive';\nimport { GRID_TOKEN } from './grid.tokens';\nimport { GridItemPosition } from './grid.types';\nimport {\n  clampResizeRect,\n  createAutoScroller,\n  findScrollableAncestor,\n  positionToPixelRect,\n  resizeSpanBounds,\n  snapResizeSpan,\n} from './internals';\n\nconst ALL_RESIZE_EDGES: readonly ResizeEdge[] = ['n', 'e', 's', 'w', 'ne', 'nw', 'se', 'sw'];\n\n@Directive({\n  selector: '[etGridResize]',\n  host: {\n    class: 'et-grid-resize',\n    '[class.et-grid-resize--active]': 'isResizing()',\n  },\n})\nexport class GridResizeDirective {\n  private grid = inject(GRID_TOKEN, { optional: true });\n  private gridItem = inject(GridItemDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private hostElement = injectHostElement();\n\n  public isResizing = signal(false);\n\n  /**\n   * Only the edges that can actually change a span at the active breakpoint. A pinned strip would\n   * still swallow the `pointerdown` that started on it, so dropping it is what hands that part of the\n   * item's perimeter back to dragging.\n   */\n  public resizeEdges = computed((): ResizeEdge[] => {\n    const itemId = this.gridItem?.itemId();\n\n    if (!this.grid || !itemId) return [...ALL_RESIZE_EDGES];\n\n    const constraints = this.grid.getConstraints(itemId);\n    const horizontal = constraints.maxColSpan > constraints.minColSpan;\n    const vertical = constraints.maxRowSpan > constraints.minRowSpan;\n\n    if (horizontal && vertical) return [...ALL_RESIZE_EDGES];\n    if (horizontal) return ['e', 'w'];\n    if (vertical) return ['n', 's'];\n\n    return [];\n  });\n\n  private start: GridItemPosition | null = null;\n  private startBreakpoint: string | null = null;\n  private lastSnap: GridItemPosition | null = null;\n  private lastEvent: ResizeMoveEvent | null = null;\n  private startContainerOrigin: { left: number; top: number } | null = null;\n  private containerOrigin: { left: number; top: number } | null = null;\n  private gestureListeners: Subscription | null = null;\n\n  private autoScroller = createAutoScroller({\n    document: this.document,\n    getScrollElement: () =>\n      (this.grid ? findScrollableAncestor(this.grid.elementRef.nativeElement) : null) ??\n      (this.document.scrollingElement as HTMLElement | null),\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.gridItem) {\n          throw new RuntimeError(\n            GRID_ERROR_CODES.MISSING_GRID_ITEM,\n            '[GridResizeDirective] etGridResize must be placed on or inside an [etGridItem] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n\n    effect(() => {\n      const readOnly = this.grid?.readOnly() ?? false;\n      const breakpoint = this.grid?.activeBreakpoint() ?? null;\n\n      untracked(() => {\n        if (!this.start) return;\n\n        if (readOnly || breakpoint !== this.startBreakpoint) {\n          this.cancelResize();\n        }\n      });\n    });\n\n    effect(() => {\n      this.grid?.containerWidth();\n\n      untracked(() => {\n        if (!this.start) return;\n\n        this.containerOrigin = this.grid?.getContainerOrigin() ?? null;\n        this.applyResize();\n      });\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.autoScroller.stop();\n      this.detachGestureListeners();\n    });\n  }\n\n  public beginResize() {\n    const grid = this.grid;\n    const gridItem = this.gridItem;\n\n    if (!grid || !gridItem) return;\n    if (grid.readOnly() || !grid.isReady()) return;\n\n    const start = grid.beginResize(gridItem.itemId());\n\n    if (!start) return;\n\n    this.start = start;\n    this.startBreakpoint = grid.activeBreakpoint();\n    this.lastSnap = start;\n    this.lastEvent = null;\n    this.startContainerOrigin = grid.getContainerOrigin();\n    this.containerOrigin = this.startContainerOrigin;\n    this.isResizing.set(true);\n\n    gridItem.startDirectControl();\n    this.attachGestureListeners();\n  }\n\n  public updateResize(event: ResizeMoveEvent) {\n    if (!this.start) return;\n\n    this.lastEvent = event;\n    this.autoScroller.start({ clientX: event.clientX, clientY: event.clientY });\n    this.autoScroller.update({ clientX: event.clientX, clientY: event.clientY });\n    this.applyResize();\n  }\n\n  public finishResize() {\n    if (!this.start) return;\n\n    // Commit first (layout holds the final slot), then hand rendering back - the box\n    // transitions from its live pixel rect to the slot, animating real width/height.\n    this.grid?.commitResize();\n    this.finishGesture();\n  }\n\n  public cancelResize() {\n    if (!this.start) return;\n\n    this.grid?.cancelResize();\n    this.finishGesture();\n  }\n\n  private applyResize() {\n    const grid = this.grid;\n    const gridItem = this.gridItem;\n    const start = this.start;\n    const event = this.lastEvent;\n    const startOrigin = this.startContainerOrigin;\n    const currentOrigin = this.containerOrigin;\n\n    if (!grid || !gridItem || !start || !event || !startOrigin || !currentOrigin) return;\n\n    const geometry = grid.geometry();\n    const startRect = positionToPixelRect(start, geometry);\n    const bounds = resizeSpanBounds({\n      edge: event.edge,\n      start,\n      constraints: grid.getConstraints(gridItem.itemId()),\n      columns: geometry.columns,\n    });\n\n    // dx/dy are client-space; shift them into container space so scrolling\n    // mid-gesture (including auto-scroll) keeps the box under the pointer.\n    const dx = event.dx + (startOrigin.left - currentOrigin.left);\n    const dy = event.dy + (startOrigin.top - currentOrigin.top);\n\n    const live = clampResizeRect({ edge: event.edge, dx, dy, startRect, bounds, geometry });\n    gridItem.updateDirectRect(live);\n\n    const snap = snapResizeSpan({ edge: event.edge, rect: live, start, bounds, geometry, lastSnap: this.lastSnap });\n    this.lastSnap = snap;\n    grid.updateResize(gridItem.itemId(), snap);\n  }\n\n  private finishGesture() {\n    this.gridItem?.stopDirectControl();\n    this.isResizing.set(false);\n    this.start = null;\n    this.startBreakpoint = null;\n    this.lastSnap = null;\n    this.lastEvent = null;\n    this.startContainerOrigin = null;\n    this.containerOrigin = null;\n    this.autoScroller.stop();\n    this.detachGestureListeners();\n  }\n\n  private attachGestureListeners() {\n    // Document-wide gesture tracking, not a component scroll container, so\n    // signalElementScrollState / signalHostElementScrollState don't apply.\n    // eslint-disable-next-line ethlete/prefer-scroll-state\n    const scroll$ = fromEvent(this.document, 'scroll', { capture: true, passive: true }).pipe(\n      tap(() => {\n        if (!this.start) return;\n\n        this.containerOrigin = this.grid?.getContainerOrigin() ?? null;\n        this.applyResize();\n      }),\n    );\n\n    const escape$ = fromEvent<KeyboardEvent>(this.document, 'keydown').pipe(\n      filter((event) => event.key === 'Escape'),\n      tap(() => this.cancelResize()),\n    );\n\n    this.gestureListeners?.unsubscribe();\n    this.gestureListeners = merge(scroll$, escape$).subscribe();\n  }\n\n  private detachGestureListeners() {\n    this.gestureListeners?.unsubscribe();\n    this.gestureListeners = null;\n  }\n}\n","import { Signal, Type } from '@angular/core';\n\nexport type GridBreakpointName = string;\n\nexport type GridItemPosition = {\n  col: number;\n  row: number;\n  colSpan: number;\n  rowSpan: number;\n};\n\nexport type GridItemConstraints = {\n  minColSpan: number;\n  maxColSpan: number;\n  minRowSpan: number;\n  maxRowSpan: number;\n};\n\n/**\n * Span bounds for a grid item: a base that applies everywhere, plus optional overrides per\n * breakpoint. The two merge key by key, so `{ minColSpan: 2, perBreakpoint: { sm: { minColSpan: 1 } } }`\n * keeps the other three bounds at `sm`.\n */\nexport type GridItemConstraintsConfig = Partial<GridItemConstraints> & {\n  perBreakpoint?: Partial<Record<GridBreakpointName, Partial<GridItemConstraints>>>;\n};\n\nexport type GridItemConfig<\n  TType extends string = string,\n  TData = unknown,\n  TBp extends GridBreakpointName = GridBreakpointName,\n> = {\n  id: string;\n  type: TType;\n  data: TData;\n  layout: Record<TBp, GridItemPosition>;\n};\n\nexport type GridBreakpointConfig<TBp extends GridBreakpointName = GridBreakpointName> = {\n  name: TBp;\n  columns: number;\n  minWidth: number;\n};\n\nexport type GridSerializedState<TData = unknown> = {\n  columns: Record<GridBreakpointName, number>;\n  rowHeight: number;\n  items: GridItemConfig<string, TData>[];\n};\n\nexport type GridLayoutEntry = {\n  id: string;\n  position: GridItemPosition;\n};\n\nexport type GridMutationOptions = {\n  /** Skip the `layoutChange` emit for this mutation. */\n  silent?: boolean;\n};\n\n/**\n * Contract for a grid item's `actionsComponent`: a component that receives the item's `itemId` and\n * `data` as inputs.\n *\n * Declare both with `input.required<T>()` - the grid binds them as inputs. The read-only `Signal`\n * type here does not enforce that.\n */\nexport type GridItemActionsComponent<TData = unknown> = Type<{\n  itemId: Signal<string>;\n  data: Signal<TData>;\n}>;\n\n/**\n * One entry of `provideGridConfig({ registrations })`: the component rendered for grid items of\n * `type`, plus optional span constraints and a config component for edit mode.\n *\n * The component's `data` must be declared with `input<T>()` - the grid binds it as an input. The\n * read-only `Signal` type here does not enforce that.\n */\nexport type GridComponentRegistration<TData = unknown> = {\n  component: Type<{ data: Signal<TData> }>;\n  type: string;\n  constraints?: GridItemConstraintsConfig;\n  configComponent?: Type<unknown>;\n};\n\n/**\n * Injectable reference provided to configComponent instances: the item's current data, and the\n * ability to save or cancel.\n */\nexport abstract class GridItemRef<TData = unknown> {\n  abstract readonly data: Signal<TData | undefined>;\n  abstract save(data: TData): void;\n  abstract close(): void;\n}\n","import { GridBreakpointConfig, GridBreakpointName, GridItemConfig, GridItemPosition } from './grid.types';\n\nexport type GridAdapter<TExternal, TData = unknown, TBp extends GridBreakpointName = GridBreakpointName> = {\n  /** The breakpoints the adapter was declared with, ready to bind into the grid's `breakpoints` input. */\n  breakpoints: GridBreakpointConfig<TBp>[];\n  fromExternal(items: TExternal[]): GridItemConfig<string, TData, TBp>[];\n  toExternal(items: GridItemConfig<string, TData>[]): TExternal[];\n};\n\n/** The grid's breakpoints, keyed by name: `{ lg: { columns: 12, minWidth: 1200 }, … }`. */\nexport type GridAdapterBreakpoints<TBp extends GridBreakpointName = GridBreakpointName> = Record<\n  TBp,\n  Omit<GridBreakpointConfig, 'name'>\n>;\n\nexport type CreateGridAdapterOptions<TExternal, TData, TBp extends GridBreakpointName> = {\n  /**\n   * The grid's breakpoints. Their names type both mappers' `layout`, so a position is required for\n   * every one of them and an unknown key is a compile error.\n   */\n  breakpoints: GridAdapterBreakpoints<TBp>;\n  fromExternal: (item: TExternal) => GridItemConfig<string, TData, NoInfer<TBp>>;\n  toExternal: (item: GridItemConfig<string, TData, NoInfer<TBp>>) => TExternal;\n};\n\n/**\n * Bridges a backend's item shape to the grid's `GridItemConfig` and back - one mapper per direction,\n * each mapping a single item. `breakpoints` is the single source of truth for the layout keys; bind\n * `adapter.breakpoints` into the grid's `breakpoints` input so the two cannot drift.\n */\nexport const createGridAdapter = <TExternal, TData, TBp extends GridBreakpointName>(\n  options: CreateGridAdapterOptions<TExternal, TData, TBp>,\n): GridAdapter<TExternal, TData, TBp> => {\n  const breakpoints = (Object.entries(options.breakpoints) as [TBp, Omit<GridBreakpointConfig, 'name'>][]).map(\n    ([name, geometry]) => ({ name, ...geometry }),\n  );\n\n  return {\n    breakpoints,\n    fromExternal: (items) => items.map(options.fromExternal),\n    // The grid places every item on every configured breakpoint, so what it emits is total over the\n    // adapter's names - which the emitted type cannot say. An item the grid has not placed yet\n    // (`layout: {}`) is the exception, which is why `mapGridLayout` maps keys instead of reading them.\n    toExternal: (items) => items.map((item) => options.toExternal(item as GridItemConfig<string, TData, TBp>)),\n  };\n};\n\n/**\n * Maps every breakpoint of a layout record through one function, keeping the keys. Use it in either\n * adapter direction to avoid repeating the position mapping per breakpoint.\n */\nexport const mapGridLayout = <TBp extends GridBreakpointName, TIn, TOut>(\n  layout: Record<TBp, TIn>,\n  map: (value: TIn, breakpoint: TBp) => TOut,\n): Record<TBp, TOut> => {\n  const mapped = {} as Record<TBp, TOut>;\n\n  for (const breakpoint of Object.keys(layout) as TBp[]) {\n    mapped[breakpoint] = map(layout[breakpoint], breakpoint);\n  }\n\n  return mapped;\n};\n\n/** Map a backend position shaped as `{x, y, cols, rows}` to a `GridItemPosition`. */\nexport const toGridPosition = (pos: { x: number; y: number; cols: number; rows: number }): GridItemPosition => ({\n  col: pos.x,\n  row: pos.y,\n  colSpan: pos.cols,\n  rowSpan: pos.rows,\n});\n\n/** Map a `GridItemPosition` to a backend position shaped as `{x, y, cols, rows}`. */\nexport const fromGridPosition = (pos: GridItemPosition): { x: number; y: number; cols: number; rows: number } => ({\n  x: pos.col,\n  y: pos.row,\n  cols: pos.colSpan,\n  rows: pos.rowSpan,\n});\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the grid announces. It renders no text of its own - the items are yours - so these are\n * all accessible labels.\n */\nexport type GridLabels = {\n  /** Accessible label for a grid whose items can be moved and resized. */\n  interactiveGrid: string;\n  /** Accessible label for a read-only grid. */\n  readonlyGrid: string;\n  /** Accessible label for an item's remove action. */\n  removeItem: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_GRID_LABELS: GridLabels = {\n  interactiveGrid: 'Interactive grid layout',\n  readonlyGrid: 'Grid layout',\n  removeItem: 'Remove item',\n};\n\nconst GRID_LABELS_DEF = /* @__PURE__ */ defineLabels<GridLabels>('GRID_LABELS', DEFAULT_GRID_LABELS);\n\n/**\n * Localize the grid's accessible labels for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_GRID_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideGridLabels({ readonlyGrid: 'Raster', removeItem: 'Element entfernen' });\n */\nexport const provideGridLabels = /* @__PURE__ */ toProvideFn(GRID_LABELS_DEF);\nexport const injectGridLabels = /* @__PURE__ */ toInjectFn(GRID_LABELS_DEF);\nexport const GRID_LABELS = /* @__PURE__ */ toToken(GRID_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-grid-item-toolbar, [et-grid-item-toolbar]',\n  template: `<ng-content />`,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-grid-item-toolbar',\n    '(pointerdown)': '$event.stopPropagation()',\n  },\n  styles: `\n    .et-grid-item-toolbar {\n      display: inline-flex;\n      align-items: center;\n      gap: var(--et-grid-item-toolbar-gap, 4px);\n      padding: var(--et-grid-item-toolbar-padding, 4px);\n      border-radius: var(--et-grid-item-toolbar-radius, 8px);\n      background: var(--et-grid-item-toolbar-background, transparent);\n    }\n  `,\n})\nexport class GridItemToolbarComponent {}\n","import { Component, ViewEncapsulation, computed, effect, inject, input, output } from '@angular/core';\nimport {\n  ProvideSurfaceDirective,\n  ResizeHandlesComponent,\n  injectParentSurface,\n  injectSurfaceThemes,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { isFormInputTarget } from '../internals/form-input-target';\nimport { GridDragDirective } from './headless/grid-drag.directive';\nimport { GridItemDirective } from './headless/grid-item.directive';\nimport { GridResizeDirective } from './headless/grid-resize.directive';\nimport { GRID_TOKEN } from './headless/grid.tokens';\n\n@Component({\n  selector: 'et-grid-item, [et-grid-item]',\n  template: `\n    <div (pointerdown)=\"blockPointerDownWhenReadOnly($event)\" class=\"et-grid-item__content\">\n      <ng-content />\n    </div>\n\n    <et-resize-handles\n      [edges]=\"gridResize.resizeEdges()\"\n      [disabled]=\"gridResize.isResizing() || isReadOnly()\"\n      (resizeStarted)=\"gridResize.beginResize()\"\n      (resizeMoved)=\"gridResize.updateResize($event)\"\n      (resizeEnded)=\"gridResize.finishResize()\"\n      (resizeCancelled)=\"gridResize.cancelResize()\"\n      (pointerdown)=\"$event.stopPropagation()\"\n    />\n\n    <div (pointerdown)=\"$event.stopPropagation()\" class=\"et-grid-item__actions\">\n      <ng-content select=\"[etGridItemAction]\" />\n    </div>\n  `,\n  styleUrl: './grid-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ResizeHandlesComponent],\n  hostDirectives: [\n    {\n      directive: GridItemDirective,\n      inputs: ['itemId', 'minColSpan', 'maxColSpan', 'minRowSpan', 'maxRowSpan', 'perBreakpointConstraints'],\n    },\n    GridDragDirective,\n    GridResizeDirective,\n    ProvideSurfaceDirective,\n  ],\n  host: {\n    class: 'et-grid-item',\n    '[class.et-grid-item--dragging]': '!isReadOnly() && gridDrag.dragHandle.isDragging()',\n    '[class.et-grid-item--resizing]': 'gridResize.isResizing()',\n    '[attr.role]': '\"group\"',\n    '[attr.aria-label]': 'ariaLabel()',\n    '[attr.tabindex]': '\"0\"',\n    '(keydown)': 'applyKeyboardShortcut($event)',\n  },\n})\nexport class GridItemComponent {\n  private grid = inject(GRID_TOKEN, { optional: true });\n  private gridItem = inject(GridItemDirective);\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private parentSurface = injectParentSurface();\n  public gridDrag = inject(GridDragDirective);\n  public gridResize = inject(GridResizeDirective);\n\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n\n  public ariaLabel = input<string>('Grid item');\n\n  public remove = output<void>();\n\n  protected isReadOnly = computed(() => this.grid?.readOnly() ?? false);\n  private resolvedSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const parent = this.parentSurface();\n    if (!themes || !parent) return null;\n    return resolveSurfaceByElevation(themes, parent.type, parent.elevation + 1);\n  });\n\n  constructor() {\n    effect(() => {\n      const surface = this.resolvedSurface();\n      if (surface) {\n        this.provideSurface.forceSurface(surface.name);\n      } else {\n        this.provideSurface.clearForcedSurface();\n      }\n    });\n  }\n\n  /** Remove this item from the grid and emit `remove` - the path the keyboard shortcut and the default actions take. */\n  public removeItem() {\n    this.grid?.removeItem(this.gridItem.itemId());\n    this.remove.emit();\n  }\n\n  protected blockPointerDownWhenReadOnly(event: PointerEvent) {\n    if (this.isReadOnly()) {\n      event.stopPropagation();\n    }\n  }\n\n  public applyKeyboardShortcut(event: KeyboardEvent) {\n    const grid = this.grid;\n\n    if (!grid || this.isReadOnly() || isFormInputTarget(event.target)) return;\n    const pos = this.gridItem.currentPosition();\n\n    if (!pos) return;\n\n    const columns = grid.activeColumns();\n\n    if (event.ctrlKey || event.metaKey) {\n      let handled = true;\n\n      switch (event.key) {\n        case 'ArrowLeft':\n          grid.moveItem(this.gridItem.itemId(), { ...pos, col: Math.max(0, pos.col - 1) });\n          break;\n        case 'ArrowRight':\n          grid.moveItem(this.gridItem.itemId(), { ...pos, col: Math.min(columns - pos.colSpan, pos.col + 1) });\n          break;\n        case 'ArrowUp':\n          grid.moveItem(this.gridItem.itemId(), { ...pos, row: Math.max(0, pos.row - 1) });\n          break;\n        case 'ArrowDown':\n          grid.moveItem(this.gridItem.itemId(), { ...pos, row: pos.row + 1 });\n          break;\n        default:\n          handled = false;\n      }\n\n      if (handled) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    } else if (event.shiftKey) {\n      let handled = true;\n\n      switch (event.key) {\n        case 'ArrowRight':\n          grid.resizeItem({ id: this.gridItem.itemId(), newColSpan: pos.colSpan + 1, newRowSpan: pos.rowSpan });\n          break;\n        case 'ArrowLeft':\n          grid.resizeItem({ id: this.gridItem.itemId(), newColSpan: pos.colSpan - 1, newRowSpan: pos.rowSpan });\n          break;\n        case 'ArrowDown':\n          grid.resizeItem({ id: this.gridItem.itemId(), newColSpan: pos.colSpan, newRowSpan: pos.rowSpan + 1 });\n          break;\n        case 'ArrowUp':\n          grid.resizeItem({ id: this.gridItem.itemId(), newColSpan: pos.colSpan, newRowSpan: pos.rowSpan - 1 });\n          break;\n        default:\n          handled = false;\n      }\n\n      if (handled) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    }\n\n    if (event.key === 'Delete' || event.key === 'Backspace') {\n      if (event.ctrlKey || event.metaKey) {\n        this.removeItem();\n        event.preventDefault();\n      }\n    }\n  }\n}\n","import { Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { injectGridLabels } from './grid-labels';\nimport { IconButtonComponent } from '../button/icon-button.component';\nimport { ICON_IMPORTS, TIMES_ICON, provideIcons } from '../icon';\nimport { GridItemToolbarComponent } from './grid-item-toolbar.component';\nimport { GridItemComponent } from './grid-item.component';\nimport { GRID_TOKEN } from './headless/grid.tokens';\n\n@Component({\n  selector: 'et-grid-item-default-actions',\n  template: `\n    <et-grid-item-toolbar>\n      <button\n        [attr.aria-label]=\"removeAriaLabel()\"\n        (click)=\"remove()\"\n        class=\"et-grid-item-default-actions__remove\"\n        et-icon-button\n        size=\"xs\"\n        type=\"button\"\n      >\n        <i etIcon=\"et-times\"></i>\n      </button>\n    </et-grid-item-toolbar>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [GridItemToolbarComponent, IconButtonComponent, ...ICON_IMPORTS],\n  providers: [provideIcons(TIMES_ICON)],\n  styles: `\n    et-grid-item-default-actions .et-grid-item-default-actions__remove {\n      color: rgb(var(--et-surface-color-muted));\n\n      @media (hover: hover) {\n        &:hover {\n          color: rgb(var(--et-surface-color));\n        }\n      }\n    }\n  `,\n})\nexport class GridItemDefaultActionsComponent {\n  private grid = inject(GRID_TOKEN);\n  private item = inject(GridItemComponent, { optional: true });\n  private labels = injectGridLabels();\n\n  public itemId = input.required<string>();\n  public data = input<unknown>();\n\n  protected removeAriaLabel = computed(() => this.labels().removeItem);\n\n  protected remove() {\n    if (this.item) {\n      this.item.removeItem();\n    } else {\n      this.grid.removeItem(this.itemId());\n    }\n  }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n  afterRenderEffect,\n  Component,\n  computed,\n  contentChildren,\n  inject,\n  input,\n  output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap } from 'rxjs';\nimport { RuntimeError } from '@ethlete/core';\nimport { injectGridLabels } from './grid-labels';\nimport { GRID_ERROR_CODES } from './grid-errors';\nimport { GridItemDefaultActionsComponent } from './grid-item-default-actions.component';\nimport { GridItemComponent } from './grid-item.component';\nimport { injectGridConfig } from './headless/grid-config';\nimport { GridItemDirective } from './headless/grid-item.directive';\nimport { GridDirective } from './headless/grid.directive';\nimport { GridItemConfig, GridSerializedState } from './headless/grid.types';\nimport { positionToPixelRect } from './headless/internals';\n\n@Component({\n  selector: 'et-grid, [et-grid]',\n  template: `\n    @if (grid.isReady()) {\n      @for (entry of registeredItems(); track entry.item.id) {\n        <!-- The registration's constraints reach the item through the grid's own resolver, so\n             nothing is forwarded here - and an et-grid-item a consumer writes themselves can\n             refine one bound without resetting the rest. -->\n        <et-grid-item [itemId]=\"entry.item.id\">\n          <ng-container\n            [ngComponentOutlet]=\"entry.reg.component\"\n            [ngComponentOutletInputs]=\"{ data: entry.item.data }\"\n          />\n          @if (actionsComponent()) {\n            <div etGridItemAction>\n              <ng-container\n                [ngComponentOutlet]=\"actionsComponent()!\"\n                [ngComponentOutletInputs]=\"{ data: entry.item.data, itemId: entry.item.id }\"\n              />\n            </div>\n          }\n        </et-grid-item>\n      }\n      @if (ghostRect(); as ghost) {\n        <div\n          [style.translate]=\"ghost.x + 'px ' + ghost.y + 'px'\"\n          [style.width.px]=\"ghost.width\"\n          [style.height.px]=\"ghost.height\"\n          [style.transition]=\"ghostTransition()\"\n          class=\"et-grid-ghost\"\n        ></div>\n      }\n    }\n    <ng-content />\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [GridItemComponent, NgComponentOutlet],\n  hostDirectives: [\n    {\n      directive: GridDirective,\n      inputs: ['breakpoints', 'rowHeight', 'gap', 'readOnly'],\n    },\n  ],\n  host: {\n    class: 'et-grid',\n    role: 'region',\n    '[class.et-grid--readonly]': 'grid.readOnly()',\n    '[attr.aria-label]': 'ariaLabel()',\n  },\n  styles: `\n    @property --et-grid-padding {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 0px;\n    }\n\n    .et-grid {\n      display: block;\n      box-sizing: border-box;\n      padding: var(--et-grid-padding);\n      position: relative;\n      min-height: 0;\n\n      &:has(.et-grid-item--dragging, .et-grid-item--resizing) {\n        user-select: none;\n        cursor: grabbing;\n      }\n\n      &:has(.et-grid-item--resizing) {\n        cursor: nwse-resize;\n      }\n    }\n\n    .et-grid-ghost {\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 0;\n      border-radius: 8px;\n      background: rgb(var(--et-surface-color, 23 23 23) / 0.08);\n      border: 2px dashed rgb(var(--et-surface-color, 23 23 23) / 0.2);\n      box-sizing: border-box;\n      pointer-events: none;\n    }\n\n    .et-grid--readonly {\n      .et-grid-item__actions {\n        display: none;\n      }\n\n      .et-grid-item:hover {\n        .et-resize-handle--e::after,\n        .et-resize-handle--s::after,\n        .et-resize-handle--w::after,\n        .et-resize-handle--n::after,\n        .et-resize-handle--se::after,\n        .et-resize-handle--sw::after,\n        .et-resize-handle--ne::after,\n        .et-resize-handle--nw::after {\n          content: unset;\n        }\n      }\n    }\n  `,\n})\nexport class GridComponent<TData = unknown> {\n  private gridConfig = injectGridConfig();\n  private labels = injectGridLabels();\n\n  /**\n   * The items to render - a live input reconciled on every change, see `GridDirective.items`. Typed\n   * in the item payload, so `layoutChange` hands the same `TData` back instead of `unknown`.\n   */\n  public items = input<GridItemConfig<string, TData>[]>([]);\n\n  /** Emitted after the layout changed on this side - see `GridDirective.layoutChange`. */\n  public layoutChange = output<GridSerializedState<TData>>();\n\n  // Only the items a consumer writes themselves: the ones stamped from a registration live in this\n  // component's own view, which a content query never reaches. The two dev checks below depend on\n  // that split.\n  private projectedItems = contentChildren(GridItemDirective, { descendants: true });\n\n  // A host directive cannot be parameterized by its component's generic, so the component owns the\n  // typed input/output pair above and hands them to the directive, which is the same instance - only\n  // with `TData` spelled out.\n  public grid = inject(GridDirective) as GridDirective<TData>;\n\n  protected actionsComponent = computed(() => {\n    const configured = this.gridConfig.actionsComponent;\n    return configured === undefined ? GridItemDefaultActionsComponent : configured;\n  });\n\n  protected registeredItems = computed(() => {\n    const registrations = this.gridConfig.registrations;\n    return this.grid.currentItems().flatMap((item) => {\n      const reg = registrations.find((r) => r.type === item.type);\n      return reg ? [{ item, reg }] : [];\n    });\n  });\n\n  protected ariaLabel = computed(() => {\n    const labels = this.labels();\n\n    return this.grid.readOnly() ? labels.readonlyGrid : labels.interactiveGrid;\n  });\n\n  protected ghostRect = computed(() => {\n    const position = this.grid.ghostPosition();\n    return position ? positionToPixelRect(position, this.grid.geometry()) : null;\n  });\n\n  protected ghostTransition = computed(() =>\n    this.grid.animationsEnabled()\n      ? 'translate 200ms cubic-bezier(0.2, 0, 0, 1), width 200ms cubic-bezier(0.2, 0, 0, 1), height 200ms cubic-bezier(0.2, 0, 0, 1)'\n      : 'none',\n  );\n\n  constructor() {\n    this.grid.hostItems.set(this.items);\n\n    outputToObservable(this.grid.layoutChange)\n      .pipe(\n        tap((state) => this.layoutChange.emit(state)),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    if (ngDevMode) {\n      // After render, not during: a projected item's required itemId is only readable once the\n      // consumer's bindings have run.\n      afterRenderEffect(() => {\n        const items = this.grid.currentItems();\n\n        if (items.length === 0) return;\n\n        const registrations = this.gridConfig.registrations;\n        const projectedIds = new Set(this.projectedItems().map((item) => item.itemId()));\n        const doubledIds = this.registeredItems()\n          .map((entry) => entry.item.id)\n          .filter((id) => projectedIds.has(id));\n\n        if (doubledIds.length > 0) {\n          throw new RuntimeError(\n            GRID_ERROR_CODES.DUPLICATE_ITEM_RENDER,\n            `[GridComponent] Grid item(s) ${doubledIds\n              .map((id) => `\"${id}\"`)\n              .join(\n                ', ',\n              )} are rendered twice: their type has a provideGridConfig() registration and a projected <et-grid-item> also covers them. Each item must be rendered by exactly one of the two - project only the items whose type is unregistered.`,\n            doubledIds,\n          );\n        }\n\n        const unrenderedItems = items.filter(\n          (item) => !projectedIds.has(item.id) && !registrations.some((r) => r.type === item.type),\n        );\n\n        if (unrenderedItems.length > 0) {\n          const unknownTypes = [...new Set(unrenderedItems.map((item) => item.type))];\n          const registered = registrations.length ? registrations.map((r) => `\"${r.type}\"`).join(', ') : 'none';\n\n          throw new RuntimeError(\n            GRID_ERROR_CODES.UNKNOWN_ITEM_TYPE,\n            `[GridComponent] Nothing renders grid item type(s) ${unknownTypes\n              .map((type) => `\"${type}\"`)\n              .join(\n                ', ',\n              )}. Registered types: ${registered}. Register the type via provideGridConfig(), or project an <et-grid-item [itemId]> for each of those items.`,\n            unknownTypes,\n          );\n        }\n      });\n    }\n  }\n}\n","import { Component, DestroyRef, ViewEncapsulation, computed, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { copyToClipboard } from '@ethlete/core';\nimport { timer } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { GridComponent } from './grid.component';\nimport { GridItemConfig, GridItemPosition } from './headless/grid.types';\n\nconst posEq = (a: GridItemPosition | undefined, b: GridItemPosition | undefined) => {\n  if (!a && !b) return true;\n  if (!a || !b) return false;\n  return a.col === b.col && a.row === b.row && a.colSpan === b.colSpan && a.rowSpan === b.rowSpan;\n};\n\n/**\n * Development-only debug overlay for an `et-grid` instance.\n *\n * ```html\n * <et-grid #myGrid [items]=\"items()\" ...></et-grid>\n * <et-grid-debug [grid]=\"myGrid\" [externalItems]=\"items()\" />\n * ```\n *\n * Pass `externalItems` to detect divergence between the host signal and the grid's internal\n * itemConfigs.\n */\n@Component({\n  selector: 'et-grid-debug',\n  template: `\n    <details class=\"et-grid-debug-panel\">\n      <summary class=\"et-grid-debug-summary\">\n        <span class=\"et-grid-debug-title\">et-grid-debug</span>\n\n        <span class=\"et-grid-debug-muted\">\n          bp: <strong class=\"et-grid-debug-strong\">{{ activeBreakpoint() }}</strong> &nbsp;·&nbsp;\n          {{ containerWidth() }}px &nbsp;·&nbsp; {{ items().length }} items\n          @if (hasDrag()) {\n            &nbsp;·&nbsp; <span class=\"et-grid-debug-warning\">⠿ dragging</span>\n          }\n        </span>\n\n        @if (issueCount() > 0) {\n          <span class=\"et-grid-debug-issues\">⚠ {{ issueCount() }} issue{{ issueCount() === 1 ? '' : 's' }}</span>\n        }\n\n        <button (click)=\"copyJson($event)\" class=\"et-grid-debug-copy\">Copy JSON</button>\n\n        @if (copied()) {\n          <span class=\"et-grid-debug-copied\">✓ copied</span>\n        }\n      </summary>\n\n      <div class=\"et-grid-debug-body\">\n        <!-- Breakpoint legend -->\n        <div class=\"et-grid-debug-legend\">\n          @for (bp of breakpoints(); track bp.name) {\n            <span\n              [style.fontWeight]=\"bp.name === activeBreakpoint() ? '700' : '400'\"\n              [style.color]=\"bp.name === activeBreakpoint() ? '#1d4ed8' : '#9ca3af'\"\n              class=\"et-grid-debug-breakpoint\"\n              >{{ bp.name }}&nbsp;{{ bp.columns }}col&nbsp;≥{{ bp.minWidth }}px</span\n            >\n          }\n        </div>\n\n        <!-- Layout table -->\n        <table class=\"et-grid-debug-table\">\n          <thead>\n            <tr class=\"et-grid-debug-head-row\">\n              <th class=\"et-grid-debug-cell et-grid-debug-cell-start\">id</th>\n              <th class=\"et-grid-debug-cell et-grid-debug-cell-start\">type</th>\n              @for (bp of breakpoints(); track bp.name) {\n                <th\n                  [style.background]=\"bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'\"\n                  class=\"et-grid-debug-cell\"\n                >\n                  {{ bp.name }}{{ hasExternal() ? ' int' : '' }}\n                </th>\n                @if (hasExternal()) {\n                  <th\n                    [style.background]=\"bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'\"\n                    class=\"et-grid-debug-cell et-grid-debug-cell-ext\"\n                  >\n                    {{ bp.name }} ext\n                  </th>\n                }\n              }\n            </tr>\n          </thead>\n          <tbody>\n            @for (row of rows(); track row.id) {\n              <tr>\n                <td class=\"et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-id\">{{ row.id }}</td>\n                <td class=\"et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-type\">{{ row.type }}</td>\n                @for (cell of row.cells; track cell.bp) {\n                  <td\n                    [style.color]=\"cell.intMissing ? '#dc2626' : '#111'\"\n                    [title]=\"cell.intMissing ? 'MISSING - layout.' + cell.bp + ' undefined in internal state' : ''\"\n                    class=\"et-grid-debug-cell\"\n                  >\n                    {{ fmtPos(cell.int) }}\n                  </td>\n                  @if (hasExternal()) {\n                    <td\n                      [style.color]=\"cell.extMissing ? '#dc2626' : cell.mismatch ? '#d97706' : '#9ca3af'\"\n                      [title]=\"cell.mismatch ? 'MISMATCH - ext=' + fmtPos(cell.ext) + ' int=' + fmtPos(cell.int) : ''\"\n                      class=\"et-grid-debug-cell\"\n                    >\n                      {{ fmtPos(cell.ext) }}\n                    </td>\n                  }\n                }\n              </tr>\n            }\n          </tbody>\n        </table>\n\n        @if (hasExternal()) {\n          <p class=\"et-grid-debug-note\">\n            int = grid.currentItems() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;\n            <span class=\"et-grid-debug-error\">red = undefined</span> &nbsp;·&nbsp;\n            <span class=\"et-grid-debug-warning\">orange = mismatch</span>\n          </p>\n        }\n      </div>\n    </details>\n  `,\n  styleUrl: './grid-debug.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class GridDebugComponent<TData = unknown> {\n  private destroyRef = inject(DestroyRef);\n\n  public grid = input.required<GridComponent<TData>>();\n  public externalItems = input<GridItemConfig<string, TData>[] | null>(null);\n\n  public activeBreakpoint = computed(() => this.grid().grid.activeBreakpoint());\n  public containerWidth = computed(() => this.grid().grid.containerWidth());\n  public breakpoints = computed(() => this.grid().grid.breakpoints());\n  public items = computed(() => this.grid().grid.currentItems());\n  public layout = computed(() => this.grid().grid.layout());\n  public hasDrag = computed(() => this.grid().grid.dragState() !== null);\n  public hasExternal = computed(() => this.externalItems() !== null);\n  public copied = signal(false);\n\n  public rows = computed(() => {\n    const bps = this.breakpoints().map((b) => b.name);\n    const internalItems = this.items();\n    const external = this.externalItems();\n    const extById = external ? new Map(external.map((i) => [i.id, i])) : null;\n\n    return internalItems.map((item) => ({\n      id: item.id,\n      type: item.type,\n      cells: bps.map((bp) => {\n        const int = item.layout[bp] as GridItemPosition | undefined;\n        const ext = extById?.get(item.id)?.layout[bp] as GridItemPosition | undefined;\n        return {\n          bp,\n          int,\n          ext,\n          intMissing: !int,\n          extMissing: extById !== null && !ext,\n          mismatch: extById !== null && !posEq(int, ext),\n        };\n      }),\n    }));\n  });\n\n  public issueCount = computed(() =>\n    this.rows().reduce((n, row) => n + row.cells.filter((c) => c.intMissing || c.mismatch).length, 0),\n  );\n\n  public fmtPos(pos: GridItemPosition | undefined) {\n    return pos ? `(${pos.col},${pos.row}) ${pos.colSpan}×${pos.rowSpan}` : '-';\n  }\n\n  public copyJson($event: Event) {\n    $event.stopPropagation();\n\n    const issues: { type: string; itemId: string; breakpoint: string }[] = [];\n    for (const row of this.rows()) {\n      for (const cell of row.cells) {\n        if (cell.intMissing) issues.push({ type: 'missing-internal-layout', itemId: row.id, breakpoint: cell.bp });\n        if (cell.mismatch) issues.push({ type: 'external-internal-mismatch', itemId: row.id, breakpoint: cell.bp });\n      }\n    }\n\n    const external = this.externalItems();\n\n    const snapshot = {\n      timestamp: new Date().toISOString(),\n      activeBreakpoint: this.activeBreakpoint(),\n      containerWidth: this.containerWidth(),\n      breakpoints: this.breakpoints(),\n      internalItems: this.items().map((i) => ({ id: i.id, type: i.type, layout: i.layout })),\n      activeLayout: this.layout(),\n      ...(external ? { externalItems: external.map((i) => ({ id: i.id, type: i.type, layout: i.layout })) } : {}),\n      issues,\n    };\n\n    copyToClipboard(JSON.stringify(snapshot, null, 2))\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe();\n\n    this.copied.set(true);\n    timer(2000)\n      .pipe(\n        tap(() => this.copied.set(false)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import { GridDebugComponent } from './grid-debug.component';\nimport { GridItemDefaultActionsComponent } from './grid-item-default-actions.component';\nimport { GridItemToolbarComponent } from './grid-item-toolbar.component';\nimport { GridItemComponent } from './grid-item.component';\nimport { GridComponent } from './grid.component';\n\n/** The grid, its items, the item toolbar and the default item actions. */\nexport const GRID_IMPORTS = [\n  GridComponent,\n  GridItemComponent,\n  GridItemToolbarComponent,\n  GridItemDefaultActionsComponent,\n] as const;\n\n/** The development-only debug overlay (`<et-grid-debug [grid]=\"…\" />`). */\nexport const GRID_DEBUG_IMPORTS = [GridDebugComponent] as const;\n","export const MASONRY_ERROR_CODES = {\n  PART_OUTSIDE_MASONRY: 3900,\n  MISSING_ITEMS: 3901,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { MasonryDirective } from './masonry.directive';\n\nexport const MASONRY_TOKEN = new InjectionToken<MasonryDirective>('MASONRY_TOKEN');\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  computed,\n  effect,\n  inject,\n  linkedSignal,\n  signal,\n} from '@angular/core';\nimport { ElementRect, RuntimeError, nextFrame, signalHostElementDimensions } from '@ethlete/core';\nimport { MASONRY_ERROR_CODES } from '../masonry-errors';\nimport { MASONRY_TOKEN } from './masonry.tokens';\n\n/**\n * One item in a masonry. It measures itself - continuously, via its own `ResizeObserver` - and takes the\n * width and position the masonry works out from those measurements.\n *\n * Continuous measurement is what makes late content behave: an image that arrives after layout, a card that\n * reflows when a translation swaps in, a description that expands on click. cdk measured each item once and\n * kept the number, so any of those left the item overlapping its neighbour until the next resize.\n *\n * The element is yours, which is what lets a masonry be a real list - `<ul etMasonry>` with `<li\n * etMasonryItem>` children needs no ARIA roles at all.\n *\n * @example\n * <li etMasonryItem>…</li>\n */\n@Directive({\n  selector: '[etMasonryItem]',\n  exportAs: 'etMasonryItem',\n  host: {\n    class: 'et-masonry-item',\n    role: 'listitem',\n    '[style.width.px]': 'columnInlineSize()',\n    // Physical offsets from a logical origin: the stylesheet anchors the item with `inset-inline-start`, so\n    // these two numbers place it correctly in both writing directions (it flips the inline sign for RTL).\n    '[style.--_et-masonry-item-inline-offset.px]': 'placement()?.inlineOffset',\n    '[style.--_et-masonry-item-block-offset.px]': 'placement()?.blockOffset',\n    '[attr.data-column]': 'placement()?.column',\n    '[attr.data-positioned]': 'isPositioned() ? \"\" : null',\n    '[attr.data-can-move]': 'canMove() ? \"\" : null',\n  },\n})\nexport class MasonryItemDirective {\n  /** @internal The masonry sorts its items by document position, which needs their elements. */\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  private masonry = inject(MASONRY_TOKEN, { optional: true });\n  private dimensions = signalHostElementDimensions();\n\n  /**\n   * The item's measured border box.\n   *\n   * `rect()` rather than the integer `offset` sizes: a column width is rarely a whole number of pixels (the\n   * remainder is shared out between the columns), and rounding every item's height would drift the columns\n   * apart by a pixel per item stacked.\n   */\n  private measured = computed(() => this.dimensions().rect?.() ?? null);\n\n  /** How tall the item is right now - what the masonry packs with. */\n  public blockSize = computed(() => this.measured()?.height ?? 0);\n\n  /**\n   * How wide the item is right now. The masonry compares this against the column width to know whether the\n   * item has re-measured since the columns changed - a stale width means a stale height too, and both arrive\n   * together when the observer fires.\n   */\n  public inlineSize = computed(() => this.measured()?.width ?? 0);\n\n  /** The width the masonry has assigned, or `null` before its container has been measured. */\n  public columnInlineSize = computed(() => {\n    const { count, inlineSize } = this.masonry?.columns() ?? { count: 0, inlineSize: 0 };\n\n    return count === 0 ? null : inlineSize;\n  });\n\n  /**\n   * Whether a measurement has arrived since the masonry last changed the width it assigns. Resetting on the\n   * width and latching on the next report is the actual question `isMeasured` asks; the width comparison\n   * there is a shortcut that answers it a delivery earlier, but only for an item whose border box can equal\n   * the width it was given. One that cannot - a card with padding or a border under `content-box`, which is\n   * every card in an app that ships no global border-box reset - reports a wider box forever, and would\n   * never count as measured at all.\n   */\n  private hasReportedSinceWidthChange = linkedSignal<\n    { columnInlineSize: number | null; measured: ElementRect | null },\n    boolean\n  >({\n    source: () => ({ columnInlineSize: this.columnInlineSize(), measured: this.measured() }),\n    computation: ({ columnInlineSize, measured }, previous) => {\n      if (!previous || previous.source.columnInlineSize !== columnInlineSize) return false;\n\n      // `measured` is a fresh object per delivery, so an identity change *is* a new report.\n      return previous.value || previous.source.measured !== measured;\n    },\n  });\n\n  /**\n   * Whether the item has reported its size *at the width the masonry gave it*. Until it has, its height is\n   * the height it had at some other width, so the placement derived from it would be wrong. The observer\n   * delivers both sizes together, which is what makes the width a usable proxy for \"this height is current\".\n   */\n  public isMeasured = computed(() => {\n    const columnInlineSize = this.columnInlineSize();\n\n    if (columnInlineSize === null) return false;\n\n    // Sub-pixel column widths are normal - the remainder is shared out between the columns.\n    return Math.abs(this.inlineSize() - columnInlineSize) < 1 || this.hasReportedSinceWidthChange();\n  });\n\n  /** Where the masonry has put this item, or `null` before it has. */\n  public placement = computed(() => this.masonry?.placementOf(this) ?? null);\n\n  /** Whether the item's placement is current, i.e. derived from a height measured at its present width. */\n  public isPlaced = computed(() => this.isMeasured() && this.placement() !== null);\n\n  /**\n   * Whether the item has a place on screen - **sticky**: it fades in on its first placement and then stays\n   * visible. That the reveal latches is the point. Every column width change un-measures every item for a\n   * frame (its recorded width is the old one until the observer reports), and a reveal tied to the live\n   * measurement would therefore fade the whole masonry out and back in on every frame of a window drag.\n   *\n   * Before the first placement there is nothing to show but a pile of items in the container's start corner,\n   * which is what the initial transparency is for.\n   */\n  private hasBeenPlaced = linkedSignal({\n    source: () => this.isPlaced(),\n    computation: (isPlaced, previous) => isPlaced || previous?.value === true,\n  });\n\n  public isPositioned = computed(() => this.hasBeenPlaced());\n\n  private isMoveArmed = signal(false);\n\n  /**\n   * Whether this item may animate a move. It must not animate the first one: before it has a placement its\n   * offsets are zero, so an armed transition would slide it in from the container's start corner - and an item\n   * appended to a feed would slide in from there too. So the transition is armed a frame *after* the item is\n   * placed, by which point the browser has painted it where it belongs and there is nothing to animate from.\n   */\n  public canMove = computed(() => this.isMoveArmed());\n\n  constructor() {\n    const masonry = this.masonry;\n\n    if (masonry) {\n      masonry.registerItem(this);\n\n      inject(DestroyRef).onDestroy(() => masonry.unregisterItem(this));\n    }\n\n    // `nextFrame` is two frames, which is what makes this safe: the placement has been through a style\n    // recalculation of its own before the transition exists, so it cannot be the thing that transitions.\n    let hasArmed = false;\n\n    effect(() => {\n      if (hasArmed || !this.isPositioned()) return;\n\n      hasArmed = true;\n      nextFrame(() => this.isMoveArmed.set(true));\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!masonry) {\n          throw new RuntimeError(\n            MASONRY_ERROR_CODES.PART_OUTSIDE_MASONRY,\n            '[MasonryItemDirective] etMasonryItem must be placed inside an [etMasonry] element, which is what ' +\n              'measures and positions it.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The masonry's structural CSS, as a styles-only component mounted by `MasonryDirective` (see\n * `ButtonStylesDirective` for the pattern).\n *\n * It is mounted rather than carried by a default component because this domain has no default component to\n * carry it: masonry is pure layout mechanism - absolute positioning, the transitions between placements, the\n * fade on first placement - with no visual opinion of its own to wrap in one. Mounting means a hand-built\n * `<ul etMasonry>` gets the mechanism too, which a Tier 3 stylesheet could not give it. The style manager\n * de-duplicates per component type, so any number of masonries on a page inject one `<style>`.\n *\n * This is therefore also where the domain's public design tokens are declared, since there is no default\n * component to own them.\n *\n * @internal\n */\n@Component({\n  selector: 'et-masonry-styles',\n  template: '',\n  styleUrl: './masonry-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MasonryStylesComponent {}\n","/**\n * The masonry geometry, as two pure functions. Everything reactive lives in the directives; this file only\n * does arithmetic, which is what makes the packing worth unit-testing rather than driving through a DOM.\n */\n\nimport { MasonryColumns, MasonryPacking, MasonryPlacement } from '../../masonry.types';\n\n/**\n * How many columns fit, and how wide they end up.\n *\n * `minColumnInlineSize` is a *minimum*, not a target: the count is the most columns that fit at that width\n * with the gaps included, and the remainder is then shared out so the columns fill the container. This is\n * `repeat(auto-fill, minmax(X, 1fr))` in arithmetic - which is the behaviour a reader expects from a value\n * named like a width, and what cdk got wrong by dividing without accounting for the gaps (a 1000px container\n * at `columWidth: 250` and `gap: 16` gave four 238px columns there, below the width that was asked for).\n */\nexport const resolveMasonryColumns = ({\n  containerInlineSize,\n  minColumnInlineSize,\n  gap,\n}: {\n  containerInlineSize: number;\n  minColumnInlineSize: number;\n  gap: number;\n}): MasonryColumns => {\n  if (containerInlineSize <= 0) return { count: 0, inlineSize: 0 };\n\n  // A zero or negative minimum would divide by zero and ask for infinite columns.\n  const minInlineSize = Math.max(1, minColumnInlineSize);\n  const safeGap = Math.max(0, gap);\n\n  // Every column but the first brings a gap with it, hence the `+ gap` on both sides. Always at least one\n  // column, so a container narrower than a single column still lays out (the item just overflows it).\n  const count = Math.max(1, Math.floor((containerInlineSize + safeGap) / (minInlineSize + safeGap)));\n  const inlineSize = (containerInlineSize - (count - 1) * safeGap) / count;\n\n  return { count, inlineSize: Math.max(0, inlineSize) };\n};\n\n/** The shortest column, ties going to the one nearest the start - which is what makes a fresh masonry's\n * first row read left to right rather than scatter. */\nconst shortestColumn = (columnBlockSizes: readonly number[]) => {\n  let shortest = 0;\n\n  for (let candidate = 1; candidate < columnBlockSizes.length; candidate++) {\n    if ((columnBlockSizes[candidate] ?? 0) < (columnBlockSizes[shortest] ?? 0)) {\n      shortest = candidate;\n    }\n  }\n\n  return shortest;\n};\n\n/**\n * Greedy shortest-column packing: each item goes to whichever column is currently shortest. That is the\n * classic masonry algorithm, and it has a property this port leans on heavily - **it is prefix-stable**.\n * Where items `0…k` land depends only on items `0…k`, never on what comes after, so appending items to an\n * infinite-scrolling feed re-derives the existing placements unchanged. cdk needed a partial-invalidation\n * mode to get that; here it falls out of the algorithm, and Angular's binding dedupe is what keeps the\n * unchanged items from being written to the DOM again.\n *\n * `itemColumns` pins items to a column they have already been given, which is what keeps a card *growing*\n * from reshuffling the grid: greedy assignment is stable against items being added, but not against an\n * existing item changing height - a taller card changes which column is shortest for every item after it,\n * so items would hop columns because a paragraph two columns over expanded. Pinned items only re-stack.\n */\nexport const packMasonryItems = ({\n  itemBlockSizes,\n  itemColumns,\n  columnCount,\n  columnInlineSize,\n  gap,\n}: {\n  itemBlockSizes: readonly number[];\n  /** Per item, the column to keep it in, or `null`/absent to place it greedily. Index-aligned. */\n  itemColumns?: readonly (number | null)[];\n  columnCount: number;\n  columnInlineSize: number;\n  gap: number;\n}): MasonryPacking => {\n  if (columnCount <= 0) return { placements: [], columnBlockSizes: [], blockSize: 0 };\n\n  const safeGap = Math.max(0, gap);\n  const columnBlockSizes = Array.from({ length: columnCount }, () => 0);\n  const placements: MasonryPlacement[] = [];\n\n  for (const [index, itemBlockSize] of itemBlockSizes.entries()) {\n    const pinned = itemColumns?.[index];\n    const column =\n      pinned !== null && pinned !== undefined && pinned >= 0 && pinned < columnCount\n        ? pinned\n        : shortestColumn(columnBlockSizes);\n\n    const blockOffset = columnBlockSizes[column] ?? 0;\n\n    placements.push({\n      column,\n      inlineOffset: column * (columnInlineSize + safeGap),\n      blockOffset,\n    });\n\n    columnBlockSizes[column] = blockOffset + Math.max(0, itemBlockSize) + safeGap;\n  }\n\n  // Each column carries a trailing gap it doesn't need; the tallest one decides the container's height.\n  const blockSize = Math.max(0, Math.max(...columnBlockSizes, 0) - safeGap);\n\n  return { placements, columnBlockSizes, blockSize };\n};\n","import { Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, filter, tap } from 'rxjs';\n\n/**\n * How long after the last width change the container counts as settled. Matched to the default move duration:\n * shorter and a slow drag would animate between frames anyway, longer and the first move after a resize is\n * needlessly stiff.\n */\nconst RESIZE_SETTLE_MS = 150;\n\n/**\n * Whether the container is in the middle of changing width.\n *\n * A window drag re-columns the masonry on every frame, and a move transition retargeted every frame is one\n * the items never finish - they trail behind the layout they belong to for as long as the drag lasts. So moves\n * snap while this is true and animate again once the width holds still.\n *\n * Debounced rather than framed: what matters is when the resizing *stops*, which nothing reports.\n *\n * @internal\n */\nexport const useMasonryResizeSettled = (containerInlineSize: Signal<number>) => {\n  const isResizing = signal(false);\n\n  toObservable(containerInlineSize)\n    .pipe(\n      // Zero is \"not measured yet\" - the first real width is not a resize.\n      filter((inlineSize) => inlineSize > 0),\n      tap(() => isResizing.set(true)),\n      debounceTime(RESIZE_SETTLE_MS),\n      tap(() => isResizing.set(false)),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  return isResizing.asReadonly();\n};\n","import { Directive, ElementRef, computed, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n  RuntimeError,\n  injectStyleManager,\n  numberBreakpointTransform,\n  provideBreakpointInstance,\n  signalElementChildren,\n  signalElementMutations,\n  signalHostElementDimensions,\n  mountEasingTokens,\n} from '@ethlete/core';\nimport { sortByDomOrder } from '../../internals/dom-order';\nimport { MASONRY_ERROR_CODES } from '../masonry-errors';\nimport { MasonryStylesComponent } from '../masonry-styles.component';\nimport { MasonryPlacement } from '../masonry.types';\nimport { packMasonryItems, resolveMasonryColumns } from './internals/masonry-layout';\nimport { useMasonryResizeSettled } from './internals/masonry-resize-settled';\n\nconst isSameAssignment = (a: ReadonlyMap<MasonryItemDirective, number>, b: ReadonlyMap<MasonryItemDirective, number>) =>\n  a.size === b.size && [...a].every(([item, column]) => b.get(item) === column);\n\nconst isSameOrder = (a: readonly MasonryItemDirective[], b: readonly MasonryItemDirective[]) =>\n  a.length === b.length && a.every((item, index) => b[index] === item);\n\nconst isFrozenReadingOrder = (\n  items: readonly MasonryItemDirective[],\n  frozen: { order: readonly MasonryItemDirective[]; byItem: ReadonlyMap<MasonryItemDirective, number> },\n) => {\n  const current = new Set(items);\n\n  // Only the items that were around when the columns were frozen and still are: an appended one has no\n  // frozen column yet, and a removed one cannot say anything about the order of the rest.\n  return isSameOrder(\n    items.filter((item) => frozen.byItem.has(item)),\n    frozen.order.filter((item) => current.has(item)),\n  );\n};\nimport { MasonryItemDirective } from './masonry-item.directive';\nimport { MASONRY_TOKEN } from './masonry.tokens';\n\n/**\n * Packs variable-height items into columns, each item going to whichever column is currently shortest - the\n * layout a photo feed wants, where cropping every card to a common height would be the alternative.\n *\n * It measures and positions, because CSS still can't: native masonry (`display: grid-lanes`, CSS Grid Level\n * 3) is not Baseline as of this writing, and CSS `columns` fills column by column, so the reading order of a\n * feed would no longer be its visual order. Items are therefore absolutely positioned from their measured\n * sizes, which keeps DOM order and reading order the same and means a reflow never relayouts the page\n * around it.\n *\n * The measuring is per item and continuous (a `ResizeObserver` each), so a card whose image loads late, or\n * whose text reflows, moves the ones below it - the one thing cdk's one-shot `getBoundingClientRect()`\n * snapshots could not do.\n *\n * @example\n * <ul etMasonry [columnWidth]=\"240\" [gap]=\"16\">\n *   @for (photo of photos(); track photo.id) {\n *     <li etMasonryItem><img [src]=\"photo.url\" alt=\"\" /></li>\n *   }\n * </ul>\n */\n@Directive({\n  selector: '[etMasonry]',\n  exportAs: 'etMasonry',\n  providers: [{ provide: MASONRY_TOKEN, useExisting: MasonryDirective }, provideBreakpointInstance(MasonryDirective)],\n  host: {\n    class: 'et-masonry',\n    role: 'list',\n    // The items are out of flow, so nothing else can give the container a height.\n    '[style.height.px]': 'blockSize()',\n    '[attr.data-settled]': 'isSettled() ? \"\" : null',\n    '[attr.data-resizing]': 'isResizing() ? \"\" : null',\n  },\n})\nexport class MasonryDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private styleManager = injectStyleManager();\n\n  /**\n   * The narrowest a column may be, in px - a minimum rather than a target. As many columns as fit at that\n   * width are used (gaps included), and the leftover space is shared out between them, so the columns always\n   * fill the container. That is `repeat(auto-fill, minmax(X, 1fr))`, expressed as a number because the\n   * packing needs it as one.\n   *\n   * Accepts a per-breakpoint map (`{ xs: 150, md: 240 }`) for a layout that wants coarser columns on a phone\n   * than the container width alone would give. @default 250\n   */\n  public columnWidth = input(250, { transform: numberBreakpointTransform(250) });\n\n  /**\n   * The space between columns and between stacked items, in px. Also accepts a per-breakpoint map. It is a\n   * number rather than CSS `gap` because the items are positioned, not laid out - CSS never sees the\n   * columns. @default 16\n   */\n  public gap = input(16, { transform: numberBreakpointTransform(16) });\n  private dimensions = signalHostElementDimensions();\n\n  private registeredItems = signal<MasonryItemDirective[]>([]);\n\n  /**\n   * A `@for` with a `track` re-orders DOM nodes without creating or destroying a single directive, so nothing\n   * about the registrations changes and only the DOM itself can say that the reading order did. Read by\n   * `items` purely to invalidate its sort - which is also why that sort needs an order equality: this fires\n   * for every insertion anywhere in a card, and only one that changes the order may re-lay-out.\n   */\n  private childMutations = signalElementMutations(this.elementRef, { childList: true, subtree: true });\n\n  /**\n   * @internal The items in DOM order, which for masonry *is* the placement order: registration order follows\n   * creation order, and a `@for` that re-orders its items would otherwise pack them by the order they were\n   * born in rather than the order they are read in.\n   */\n  public items = computed(\n    () => {\n      this.childMutations();\n\n      return sortByDomOrder(this.registeredItems(), (item) => item.elementRef.nativeElement);\n    },\n    { equal: isSameOrder },\n  );\n\n  /**\n   * How wide the container is. Only the inline size is taken from the observed dimensions, deliberately: this\n   * directive *sets* the container's height, so a signal carrying both would see its own write and lay out\n   * again. Reading one number out of it means the recompute stops at an unchanged value instead.\n   */\n  public containerInlineSize = computed(() => this.dimensions().client?.width ?? 0);\n\n  /** The column grid in effect: how many, and how wide. `count: 0` until the container has been measured. */\n  public columns = computed(() =>\n    resolveMasonryColumns({\n      containerInlineSize: this.containerInlineSize(),\n      minColumnInlineSize: this.columnWidth(),\n      gap: this.gap(),\n    }),\n  );\n\n  /**\n   * The columns items have already been given, the column count they were given for, and the reading order\n   * they were given in. Rebalancing is a *geometry* decision, not a content one: see `repack()`.\n   */\n  private columnAssignments = signal<{\n    columnCount: number;\n    order: readonly MasonryItemDirective[];\n    byItem: ReadonlyMap<MasonryItemDirective, number>;\n  } | null>(null);\n\n  /**\n   * Every item's position, derived rather than assigned. The whole layout is one `computed` over the item\n   * sizes, the column grid and the gap - so there is no invalidation to get right, no imperative pass over\n   * the DOM, and appending to a feed re-derives the existing placements *identically* because the packing is\n   * prefix-stable. What cdk did with a partial-invalidation mode, Angular's binding dedupe does here: an\n   * item whose placement is unchanged is not written to again.\n   */\n  private layout = computed(() => {\n    const items = this.items();\n    const { count, inlineSize } = this.columns();\n    const assignments = this.columnAssignments();\n\n    // Assignments made for a different number of columns say nothing about this one, so a resize that changes\n    // the count rebalances from scratch - and so does a re-sorted feed, because keeping every card in the\n    // column it happens to be in would put the item that is now read first wherever that column is.\n    const pinned =\n      assignments && assignments.columnCount === count && isFrozenReadingOrder(items, assignments)\n        ? assignments.byItem\n        : null;\n\n    const packing = packMasonryItems({\n      itemBlockSizes: items.map((item) => item.blockSize()),\n      itemColumns: pinned ? items.map((item) => pinned.get(item) ?? null) : undefined,\n      columnCount: count,\n      columnInlineSize: inlineSize,\n      gap: this.gap(),\n    });\n\n    return {\n      blockSize: packing.blockSize,\n      placements: new Map(items.map((item, index) => [item, packing.placements[index] ?? null])),\n    };\n  });\n\n  /** How tall the container is, i.e. the tallest column. */\n  public blockSize = computed(() => this.layout().blockSize);\n\n  /**\n   * Whether the layout matches what is on screen: the container has been measured, and every item has\n   * reported its size at the current column width.\n   *\n   * This is the signal to gate an infinite scroll on - fetching the next page while the current one is still\n   * settling appends items against sizes that are about to change, which is what cdk needed its\n   * `injectInfinityQueryResponseDelay` handshake for. That provider only ever existed for the legacy query\n   * client, so this is the generic replacement: `disabled: !masonry.isSettled()` on the trigger, whatever the\n   * client.\n   */\n  public isSettled = computed(() => {\n    if (this.columns().count === 0) return false;\n\n    return this.items().every((item) => item.isMeasured());\n  });\n\n  /**\n   * Whether the container itself has changed width in the last moment - a window drag, a panel opening, a\n   * sidebar collapsing. Items snap to their new columns while it is true instead of animating: the columns\n   * change every frame of a drag, so a move transition would be restarted every frame and the items would\n   * trail behind the layout they belong to.\n   */\n  public isResizing = useMasonryResizeSettled(this.containerInlineSize);\n\n  constructor() {\n    mountEasingTokens();\n    // Structural CSS is mounted rather than shipped on a component, so the directive works standalone -\n    // absolute positioning is this layout's mechanism, not its decoration, and a headless composition has to\n    // get it too. The style manager de-duplicates, so many masonries inject one <style>.\n    this.styleManager.mount(MasonryStylesComponent);\n\n    // Freezing the assignments is what makes a card growing a local event. It happens on settling, never\n    // before: an item that has not been measured has no height yet, so a batch of appended items would all\n    // look like they belong in whichever column was shortest and pile into it - permanently, once frozen.\n    effect(() => {\n      if (!this.isSettled()) return;\n\n      const columnCount = this.columns().count;\n      const order = this.items();\n      const byItem = new Map<MasonryItemDirective, number>();\n\n      for (const [item, placement] of this.layout().placements) {\n        if (placement) byItem.set(item, placement.column);\n      }\n\n      untracked(() => {\n        // Only when something actually changed: the write feeds back into the layout this was derived from,\n        // and re-freezing an identical mapping every time would never come to rest. The order counts as part\n        // of it - a re-sort that happens to land on the same columns must still be recorded, or the layout\n        // would keep reading the stale order as a reason to drop the pins.\n        const current = this.columnAssignments();\n\n        if (\n          current &&\n          current.columnCount === columnCount &&\n          isSameAssignment(current.byItem, byItem) &&\n          isSameOrder(current.order, order)\n        ) {\n          return;\n        }\n\n        this.columnAssignments.set({ columnCount, order, byItem });\n      });\n    });\n\n    if (ngDevMode) {\n      const children = signalElementChildren(this.elementRef);\n      let hasCheckedItems = false;\n\n      // An empty masonry is a legitimate state (an unfetched feed), so this checks the first time there *are*\n      // children - children without the item directive are positioned by nothing and stay invisible, which\n      // is a silent failure worth a loud error.\n      effect(() => {\n        const childCount = children().length;\n        const itemCount = this.registeredItems().length;\n\n        if (hasCheckedItems || childCount === 0) return;\n\n        hasCheckedItems = true;\n\n        if (itemCount === 0) {\n          throw new RuntimeError(\n            MASONRY_ERROR_CODES.MISSING_ITEMS,\n            '[MasonryDirective] This masonry has children but none of them is a masonry item, so none of them ' +\n              'can be measured or positioned. Add the etMasonryItem directive to each child.',\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal Where an item sits, or `null` before the first measurement. */\n  public placementOf(item: MasonryItemDirective): MasonryPlacement | null {\n    return this.layout().placements.get(item) ?? null;\n  }\n\n  /**\n   * Re-balance the columns from scratch, as if the items had just arrived.\n   *\n   * Items keep the column they were first given for as long as the column count holds, because the\n   * alternative is a grid that reshuffles itself whenever any one card changes height - expanding a\n   * description would move cards two columns away. The cost is that heights which change a lot *after* the\n   * first layout leave the columns less even than a fresh pack would, so this is the escape hatch: call it\n   * after replacing the content wholesale, and the packing balances again. A resize that changes the column\n   * count rebalances on its own.\n   */\n  public repack() {\n    this.columnAssignments.set(null);\n  }\n\n  /** @internal Called by an item while it exists. */\n  public registerItem(item: MasonryItemDirective) {\n    this.registeredItems.update((items) => [...items, item]);\n  }\n\n  /** @internal */\n  public unregisterItem(item: MasonryItemDirective) {\n    this.registeredItems.update((items) => items.filter((registered) => registered !== item));\n  }\n}\n","import { MasonryItemDirective } from './headless/masonry-item.directive';\nimport { MasonryDirective } from './headless/masonry.directive';\n\nexport const MASONRY_IMPORTS = [MasonryDirective, MasonryItemDirective] as const;\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\n\nexport const NOTIFICATION_STATUS = {\n  LOADING: 'loading',\n  SUCCESS: 'success',\n  ERROR: 'error',\n  INFO: 'info',\n} as const;\n\nexport type NotificationStatus = (typeof NOTIFICATION_STATUS)[keyof typeof NOTIFICATION_STATUS];\n\nexport const NOTIFICATION_ACTION_SLOTS = {\n  PRIMARY: 'primary',\n  SECONDARY: 'secondary',\n} as const;\n\n/** Which of a notification's two actions an action element stands for. */\nexport type NotificationActionSlot = (typeof NOTIFICATION_ACTION_SLOTS)[keyof typeof NOTIFICATION_ACTION_SLOTS];\n\nexport type NotificationAction = {\n  label: string;\n  handler: () => void;\n  /**\n   * Whether clicking the action dismisses the notification.\n   * @default true\n   */\n  dismiss?: boolean;\n};\n\nexport type NotificationConfig = {\n  status: NotificationStatus;\n  title: string;\n  message?: string;\n  action?: NotificationAction;\n  /** A second, quieter action rendered next to {@link NotificationConfig.action} (e.g. a cancel next to a confirm). */\n  secondaryAction?: NotificationAction;\n  /**\n   * Auto-dismiss duration in milliseconds. Omit it to use the manager's `defaultDuration`\n   * for the current status; any value set here overrides that default, and `0` means the\n   * notification never auto-dismisses.\n   */\n  duration?: number;\n  /** Optional progress value (0–100). When set, a progress bar is shown below the notification body. */\n  progress?: number;\n  /**\n   * Identity of the notification. Opening a notification whose id matches one that is still on\n   * screen replaces that one in place instead of stacking a duplicate - the way to keep repeated\n   * clicks, retries or a per-entity notification down to a single toast.\n   *\n   * Defaults to a generated id, which is never equal to another notification's.\n   */\n  id?: string;\n  /**\n   * Icon name rendered in front of the title, overriding the default for the notification's status.\n   * `null` renders no icon at all. Names must be registered with the icon registry - the built-in\n   * `et-*` set is, and `provideIconOverrides()` takes both replacements and brand-new names.\n   *\n   * A `loading` notification shows its spinner unless this names an icon.\n   */\n  icon?: string | null;\n};\n\n/**\n * The content half of a {@link NotificationConfig} - everything except the `status`, which is\n * decided by whatever opens the notification (see `NotificationManager.promise`).\n */\nexport type NotificationContentInit = Omit<NotificationConfig, 'status'>;\n\n/** A {@link NotificationContentInit}, or just a string to use as the title. */\nexport type NotificationContentInput = NotificationContentInit | string;\n\n/** Normalizes the string shorthand of a {@link NotificationContentInput}. */\nexport const toNotificationContent = (content: NotificationContentInput): NotificationContentInit =>\n  typeof content === 'string' ? { title: content } : content;\n\nexport type NotificationManagerConfig = {\n  /** Position of the notification stack on screen. @default 'bottom-end' */\n  position: 'bottom-center' | 'bottom-start' | 'bottom-end' | 'top-center' | 'top-start' | 'top-end';\n  /** Maximum number of simultaneously visible notifications, floored at `1`. @default 3 */\n  maxVisible: number;\n  /**\n   * Default auto-dismiss duration (ms) per status.\n   * `0` means no auto-dismiss.\n   * @default `{ success: 4000, info: 4000, loading: 0, error: 0 }`\n   */\n  defaultDuration: Partial<Record<NotificationStatus, number>>;\n  /**\n   * Maps each notification status to a color key used by `ProvideColorDirective`.\n   * When set, the notification host element receives the corresponding color class\n   * so that `et-button` and other colored components render correctly inside the notification.\n   */\n  statusColorMapping?: Partial<Record<NotificationStatus, string>>;\n  /**\n   * Color key applied to control elements (e.g. the dismiss button).\n   * Uses the notification's status color when not set.\n   */\n  controlsColor?: string;\n  /**\n   * Icon rendered per status, overridable per notification via {@link NotificationConfig.icon}.\n   * `null` opts a status out of icons entirely. `loading` has none by default - it renders a spinner.\n   * @default `{ success: 'et-circle-check', error: 'et-triangle-exclamation', info: 'et-circle-info', loading: null }`\n   */\n  statusIcons?: Partial<Record<NotificationStatus, string | null>>;\n  /**\n   * Whether a notification can be swiped away with a pointer or finger.\n   * @default true\n   */\n  swipeToDismiss?: boolean;\n};\n\nexport const DEFAULT_NOTIFICATION_STATUS_ICONS: Record<NotificationStatus, string | null> = {\n  success: 'et-circle-check',\n  error: 'et-triangle-exclamation',\n  info: 'et-circle-info',\n  loading: null,\n};\n\n/**\n * The icon a status renders when the notification itself doesn't name one. A partial `statusIcons`\n * map only speaks for the statuses it lists - the rest keep their {@link DEFAULT_NOTIFICATION_STATUS_ICONS}\n * icon, and a listed `null` opts that status out.\n */\nexport const resolveNotificationStatusIcon = (config: NotificationManagerConfig, status: NotificationStatus) => {\n  const icons = config.statusIcons;\n\n  return icons && status in icons ? (icons[status] ?? null) : DEFAULT_NOTIFICATION_STATUS_ICONS[status];\n};\n\nexport const DEFAULT_NOTIFICATION_MANAGER_CONFIG: NotificationManagerConfig = {\n  position: 'bottom-end',\n  maxVisible: 3,\n  defaultDuration: {\n    success: 4000,\n    info: 4000,\n    loading: 0,\n    error: 0,\n  },\n  statusColorMapping: undefined,\n  controlsColor: undefined,\n  statusIcons: DEFAULT_NOTIFICATION_STATUS_ICONS,\n  swipeToDismiss: true,\n};\n\nconst NOTIFICATION_MANAGER_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider(DEFAULT_NOTIFICATION_MANAGER_CONFIG, {\n  name: 'NotificationManagerConfig',\n});\n\nexport const provideNotificationManagerConfig = /* @__PURE__ */ toProvideFn(NOTIFICATION_MANAGER_CONFIG_DEF);\nexport const injectNotificationManagerConfig = /* @__PURE__ */ toInjectFn(NOTIFICATION_MANAGER_CONFIG_DEF);\n","// codes 1700-1799\nexport const NOTIFICATION_ERROR_CODES = {\n  ACTION_OUTSIDE_NOTIFICATION: 1700,\n  DISMISS_OUTSIDE_NOTIFICATION: 1701,\n  SWIPE_OUTSIDE_NOTIFICATION: 1702,\n} as const;\n","import { Directive, computed, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { ANIMATED_LIFECYCLE_TOKEN } from '@ethlete/core';\nimport { filter, of, switchMap, take, tap } from 'rxjs';\nimport { NotificationRef } from '../notification-ref';\nimport { NotificationActionDirective } from './notification-action.directive';\nimport { NotificationDismissDirective } from './notification-dismiss.directive';\n\n@Directive({\n  selector: '[etNotification]',\n  exportAs: 'etNotification',\n  host: {\n    '[attr.data-status]': 'status()',\n    '[attr.data-dismissing]': 'entry().isDismissing || null',\n    '[attr.role]': 'ariaRole()',\n  },\n})\nexport class NotificationDirective {\n  private animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN, { optional: true });\n  public ref = input.required<NotificationRef>();\n\n  public entry = computed(() => this.ref().entry());\n  public status = computed(() => this.entry().config.status);\n  public isLoading = computed(() => this.status() === 'loading');\n  public isSuccess = computed(() => this.status() === 'success');\n  public isError = computed(() => this.status() === 'error');\n  public isInfo = computed(() => this.status() === 'info');\n  public title = computed(() => this.entry().config.title);\n  public message = computed(() => this.entry().config.message);\n  public action = computed(() => this.entry().config.action);\n  public secondaryAction = computed(() => this.entry().config.secondaryAction);\n  public progress = computed(() => this.entry().config.progress);\n\n  /** The notification's own icon override - `undefined` leaves the icon to its status, `null` means none. */\n  public icon = computed(() => this.entry().config.icon);\n\n  public ariaRole = computed(() => (this.status() === 'error' ? 'alert' : 'status'));\n\n  /** @internal Every action element inside this notification - one per slot at most, in registration order. */\n  public registeredActions = signal<NotificationActionDirective[]>([]);\n  /** @internal */\n  public registeredDismiss = signal<NotificationDismissDirective | null>(null);\n\n  constructor() {\n    toObservable(computed(() => this.entry().isDismissing))\n      .pipe(\n        filter(Boolean),\n        take(1),\n        switchMap(() => {\n          const lifecycle = this.animatedLifecycle;\n          if (!lifecycle) {\n            return of(null);\n          }\n          lifecycle.leave();\n          return lifecycle.state$.pipe(\n            filter((s) => s === 'left'),\n            take(1),\n          );\n        }),\n        tap(() => this.ref().markDismissed()),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n}\n","import { Directive, afterNextRender, computed, inject, input } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { NOTIFICATION_ACTION_SLOTS, NotificationActionSlot } from '../notification-config';\nimport { NOTIFICATION_ERROR_CODES } from '../notification-errors';\nimport { NotificationDirective } from './notification.directive';\n\n/** Reads the attribute value, which is `''` when the directive is used as a bare attribute. */\nconst toActionSlot = (value: NotificationActionSlot | ''): NotificationActionSlot =>\n  value === NOTIFICATION_ACTION_SLOTS.SECONDARY\n    ? NOTIFICATION_ACTION_SLOTS.SECONDARY\n    : NOTIFICATION_ACTION_SLOTS.PRIMARY;\n\n@Directive({\n  selector: '[etNotificationAction]',\n  exportAs: 'etNotificationAction',\n  host: {\n    '(click)': 'runAction()',\n  },\n})\nexport class NotificationActionDirective {\n  private notification = inject(NotificationDirective, { optional: true });\n  private hostElement = injectHostElement();\n\n  /** Which action this element runs - `etNotificationAction=\"secondary\"` for the quieter one. */\n  public actionSlot = input(NOTIFICATION_ACTION_SLOTS.PRIMARY, {\n    alias: 'etNotificationAction',\n    transform: toActionSlot,\n  });\n\n  public action = computed(() =>\n    this.actionSlot() === NOTIFICATION_ACTION_SLOTS.SECONDARY\n      ? this.notification?.secondaryAction()\n      : this.notification?.action(),\n  );\n\n  constructor() {\n    this.notification?.registeredActions.update((actions) => [...actions, this]);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.notification) {\n          throw new RuntimeError(\n            NOTIFICATION_ERROR_CODES.ACTION_OUTSIDE_NOTIFICATION,\n            '[EtNotificationActionDirective] etNotificationAction must be placed inside an [etNotification] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public runAction() {\n    const action = this.action();\n\n    action?.handler();\n\n    // Dismissing is the default for an action: acting on a notification is done with it. Only an\n    // action that says otherwise leaves it up (e.g. one that starts a retry it wants to report on).\n    if (action?.dismiss !== false) {\n      this.notification?.ref().dismiss();\n    }\n  }\n}\n","import { Directive, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { NOTIFICATION_ERROR_CODES } from '../notification-errors';\nimport { NotificationDirective } from './notification.directive';\n\n@Directive({\n  selector: '[etNotificationDismiss]',\n  exportAs: 'etNotificationDismiss',\n  host: {\n    '(click)': 'dismiss()',\n  },\n})\nexport class NotificationDismissDirective {\n  private notification = inject(NotificationDirective, { optional: true });\n  private hostElement = injectHostElement();\n\n  constructor() {\n    this.notification?.registeredDismiss.set(this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.notification) {\n          throw new RuntimeError(\n            NOTIFICATION_ERROR_CODES.DISMISS_OUTSIDE_NOTIFICATION,\n            '[EtNotificationDismissDirective] etNotificationDismiss must be placed inside an [etNotification] element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  public dismiss() {\n    this.notification?.ref().dismiss();\n  }\n}\n","import { InjectionToken, Signal } from '@angular/core';\nimport { NotificationManagerConfig } from './notification-config';\nimport { NotificationRef } from './notification-ref';\n\nexport type NotificationStackContext = {\n  visibleNotifications: Signal<NotificationRef[]>;\n  position: NotificationManagerConfig['position'];\n  /** @internal Set by the stack component. Called by the manager before any mutation. */\n  captureBeforeState: (() => void) | null;\n};\n\nexport const NOTIFICATION_STACK_CONTEXT_TOKEN = new InjectionToken<NotificationStackContext>(\n  'NOTIFICATION_STACK_CONTEXT_TOKEN',\n);\n","import { DestroyRef, Directive, Injector, afterNextRender, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DEFAULT_OVERLAY_LAYER, injectRenderer } from '@ethlete/core';\nimport { animationFrameScheduler, take, tap, timer } from 'rxjs';\nimport { NOTIFICATION_STACK_CONTEXT_TOKEN } from '../notification-stack-context.token';\n\n/**\n * The stacking level the notification stack paints at: one above the level app overlays mount at, so\n * a toast stays visible over a dialog, a sheet and their backdrops. Declared as the stack's\n * `data-et-overlay-layer` too, so a press on a toast does not read as a press outside an overlay\n * below it, and an overlay opened from a toast action mounts above the stack.\n */\nexport const NOTIFICATION_STACK_OVERLAY_LAYER = DEFAULT_OVERLAY_LAYER + 1;\n\ntype PendingAnimation = {\n  el: HTMLElement;\n  innerEl?: HTMLElement;\n  borderRadius?: string;\n  dy?: number;\n  oldHeight?: number;\n  newHeight?: number;\n  oldWidth?: number;\n  newWidth?: number;\n};\n\ntype RegisteredNotificationItem = { id: string; el: HTMLElement };\n\n@Directive({\n  selector: '[etNotificationStack]',\n  exportAs: 'etNotificationStack',\n  host: {\n    '[attr.data-position]': 'context.position',\n    '[attr.data-et-overlay-layer]': 'OVERLAY_LAYER',\n    '[style.--_et-notification-stack-layer]': 'OVERLAY_LAYER',\n  },\n})\nexport class NotificationStackDirective {\n  protected context = inject(NOTIFICATION_STACK_CONTEXT_TOKEN);\n  private destroyRef = inject(DestroyRef);\n  private injector = inject(Injector);\n  private renderer = injectRenderer();\n\n  protected readonly OVERLAY_LAYER = NOTIFICATION_STACK_OVERLAY_LAYER;\n\n  /** @internal */\n  public registeredItems = signal<RegisteredNotificationItem[]>([]);\n\n  public displayRefs = computed(() => {\n    const refs = this.context.visibleNotifications();\n    return this.context.position.startsWith('top') ? [...refs].reverse() : refs;\n  });\n\n  constructor() {\n    const capturedRects = new Map<string, DOMRect>();\n\n    this.destroyRef.onDestroy(() => {\n      this.context.captureBeforeState = null;\n    });\n\n    const captureCurrentRects = () => {\n      capturedRects.clear();\n      for (const item of this.registeredItems()) {\n        capturedRects.set(item.id, item.el.getBoundingClientRect());\n      }\n    };\n\n    this.context.captureBeforeState = () => {\n      captureCurrentRects();\n\n      afterNextRender(\n        {\n          earlyRead: () => {\n            const pending = new Map<string, PendingAnimation>();\n\n            for (const { id, el } of this.registeredItems()) {\n              const rect = el.getBoundingClientRect();\n              const prev = capturedRects.get(id);\n              if (!prev) continue;\n\n              const dy = prev.top - rect.top;\n              const dHeight = prev.height - rect.height;\n              const dWidth = prev.width - rect.width;\n              const hasResize = Math.abs(dHeight) > 0.5 || Math.abs(dWidth) > 0.5;\n              const hasDy = !hasResize && Math.abs(dy) > 0.5;\n\n              if (hasDy || hasResize) {\n                const hasWidthChange = Math.abs(dWidth) > 0.5;\n                const hasHeightChange = Math.abs(dHeight) > 0.5;\n                const innerEl = hasResize ? ((el.firstElementChild as HTMLElement | null) ?? undefined) : undefined;\n                const borderRadius = innerEl ? getComputedStyle(innerEl).borderTopLeftRadius : '0px';\n                pending.set(id, {\n                  el,\n                  ...(innerEl ? { innerEl, borderRadius } : {}),\n                  ...(hasDy ? { dy } : {}),\n                  ...(hasHeightChange ? { oldHeight: prev.height, newHeight: rect.height } : {}),\n                  ...(hasWidthChange ? { oldWidth: prev.width, newWidth: rect.width } : {}),\n                });\n              }\n            }\n\n            return pending;\n          },\n          write: (pending) => {\n            if (!pending.size) return;\n\n            const animations = Array.from(pending.values());\n\n            for (const anim of animations) {\n              const styles: Partial<Record<keyof CSSStyleDeclaration, string | null>> = { transition: 'none' };\n              if (anim.dy !== undefined) styles.transform = `translateY(${anim.dy}px)`;\n              if (anim.oldHeight !== undefined || anim.oldWidth !== undefined) {\n                if (anim.oldHeight !== undefined) styles.height = `${anim.oldHeight}px`;\n                if (anim.oldWidth !== undefined) styles.width = `${anim.oldWidth}px`;\n                styles.clipPath = `inset(0 round ${anim.borderRadius ?? '0px'})`;\n              }\n              this.renderer.setStyle(anim.el, styles);\n              if (anim.innerEl !== undefined && anim.newWidth !== undefined) {\n                this.renderer.setStyle(anim.innerEl, { width: `${anim.newWidth}px` });\n              }\n            }\n\n            timer(0, animationFrameScheduler)\n              .pipe(\n                take(1),\n                tap(() => {\n                  for (const anim of animations) {\n                    const transitions: string[] = [];\n                    const styles: Partial<Record<keyof CSSStyleDeclaration, string | null>> = {};\n\n                    if (anim.dy !== undefined) {\n                      transitions.push('transform 200ms ease');\n                      styles.transform = null;\n                    }\n                    if (anim.newHeight !== undefined) {\n                      transitions.push('height 200ms ease');\n                      styles.height = `${anim.newHeight}px`;\n                    }\n                    if (anim.newWidth !== undefined) {\n                      transitions.push('width 200ms ease');\n                      styles.width = `${anim.newWidth}px`;\n                    }\n\n                    styles.transition = transitions.join(', ');\n                    this.renderer.setStyle(anim.el, styles);\n                  }\n                }),\n                takeUntilDestroyed(this.destroyRef),\n              )\n              .subscribe();\n\n            const resized = animations.filter((a) => a.newHeight !== undefined || a.newWidth !== undefined);\n            if (resized.length) {\n              timer(210)\n                .pipe(\n                  take(1),\n                  tap(() => {\n                    for (const anim of resized) {\n                      this.renderer.setStyle(anim.el, { height: null, width: null, clipPath: null, transition: null });\n                      if (anim.innerEl !== undefined) {\n                        this.renderer.setStyle(anim.innerEl, { width: null });\n                      }\n                    }\n                  }),\n                  takeUntilDestroyed(this.destroyRef),\n                )\n                .subscribe();\n            }\n          },\n        },\n        { injector: this.injector },\n      );\n    };\n  }\n\n  /** @internal */\n  public registerItem(id: string, el: HTMLElement) {\n    this.registeredItems.update((items) => [...items, { id, el }]);\n  }\n\n  /** @internal */\n  public unregisterItem(id: string) {\n    this.registeredItems.update((items) => items.filter((item) => item.id !== id));\n  }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\nimport { NotificationRef } from '../notification-ref';\nimport { NotificationStackDirective } from './notification-stack.directive';\n\n@Directive({\n  selector: '[etNotificationItem]',\n  host: {\n    '[attr.data-notification-id]': 'ref().id',\n  },\n})\nexport class NotificationItemDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private stack = inject(NotificationStackDirective, { optional: true });\n  public ref = input.required<NotificationRef>({ alias: 'etNotificationItem' });\n\n  constructor() {\n    const el = this.elementRef.nativeElement;\n\n    effect((onCleanup) => {\n      const id = this.ref().id;\n\n      this.stack?.registerItem(id, el);\n\n      onCleanup(() => this.stack?.unregisterItem(id));\n    });\n  }\n}\n","import { DOCUMENT, DestroyRef, Directive, ElementRef, afterNextRender, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RuntimeError, SwipeTracker, createSwipeTracker, injectRenderer, matchesReducedMotion } from '@ethlete/core';\nimport { filter, fromEvent, tap } from 'rxjs';\nimport { claimsPointerAxis, isInteractivePointerTarget } from '../../internals/pointer-gesture-target';\nimport { injectNotificationManagerConfig } from '../notification-config';\nimport { NOTIFICATION_ERROR_CODES } from '../notification-errors';\nimport { NOTIFICATION_STACK_CONTEXT_TOKEN } from '../notification-stack-context.token';\nimport { NotificationDirective } from './notification.directive';\n\n/** Distance the pointer must travel along the swipe axis before the notification starts following it. */\nconst COMMIT_THRESHOLD_PX = 8;\n\n/** Fraction of the notification's width a slow drag must cover to count as a dismissal. */\nconst DISMISS_DISTANCE_RATIO = 0.3;\n\n/** Floor for that distance, so a narrow notification still needs a deliberate drag. */\nconst MIN_DISMISS_DISTANCE_PX = 64;\n\n/** Release speed (px/s) at which a flick dismisses regardless of how far it got. */\nconst MIN_DISMISS_VELOCITY = 150;\n\n/** Bounds for the momentum-driven exit, matching the overlay drag gesture's settle animation. */\nconst MIN_EXIT_DURATION_MS = 100;\nconst MAX_EXIT_DURATION_MS = 350;\n\n/** Below this release speed the gesture reads as parking the notification, not throwing it. */\nconst MIN_EXIT_SPEED = 50;\n\n/** How long a released-but-not-dismissed notification takes to slide back into the stack. */\nconst SETTLE_DURATION_MS = 150;\n\n/** How far past its own edge the notification travels on the way out. */\nconst EXIT_OVERSHOOT_PX = 16;\n\n/** Opacity the notification reaches once it has been dragged its full width. */\nconst MIN_SWIPE_OPACITY = 0.3;\n\n/**\n * Swipe-to-dismiss for a notification: drag it toward the edge its stack is docked to and let go.\n * A flick or a drag past a third of its width sends it away carrying the speed of the release; a\n * shorter one slides back. Dismissing this way is a manual dismissal - it does not touch the\n * auto-dismiss semantics of whatever is left on screen.\n *\n * Applied by `et-notification` unless the manager's `swipeToDismiss` is off. Add it to a custom\n * notification element to get the same gesture.\n */\n@Directive({\n  selector: '[etNotificationSwipeToDismiss]',\n  exportAs: 'etNotificationSwipeToDismiss',\n  host: {\n    // The gesture owns the inline axis, the page keeps the block one. Unlike a sheet, a notification\n    // never scrolls on its own dismiss axis, so declaring it is enough - no touchmove handling.\n    '[style.touch-action]': \"isEnabled ? 'pan-y' : null\",\n  },\n})\nexport class NotificationSwipeToDismissDirective {\n  private document = inject(DOCUMENT);\n  private renderer = injectRenderer();\n  private destroyRef = inject(DestroyRef);\n  private managerConfig = injectNotificationManagerConfig();\n  private stackContext = inject(NOTIFICATION_STACK_CONTEXT_TOKEN, { optional: true });\n  private notification = inject(NotificationDirective, { optional: true });\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** The manager config is static, so this is settled once, at construction. */\n  protected isEnabled = this.managerConfig.swipeToDismiss !== false;\n\n  private tracker: SwipeTracker | null = null;\n  private activePointerId: number | null = null;\n  private isCommitted = false;\n\n  /** The direction this gesture committed to, once it has one. */\n  private sign: 1 | -1 = 1;\n\n  /** How far the notification has been dragged toward dismissal, in px. Never negative. */\n  private offset = 0;\n\n  /** The notification's own width plus the overshoot - the distance a full dismissal covers. */\n  private extent = 0;\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.notification) {\n          throw new RuntimeError(\n            NOTIFICATION_ERROR_CODES.SWIPE_OUTSIDE_NOTIFICATION,\n            '[EtNotificationSwipeToDismissDirective] etNotificationSwipeToDismiss must be placed inside an [etNotification] element.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n\n    this.listen();\n  }\n\n  /**\n   * Which way the notification may be thrown, as a physical sign, or `null` for either - resolved\n   * per gesture because it depends on the writing direction, which can change under the stack.\n   */\n  private get allowedSign(): 1 | -1 | null {\n    const position = this.stackContext?.position ?? 'bottom-end';\n\n    if (position.endsWith('center')) return null;\n\n    const isRtl = getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n    const docksToInlineEnd = position.endsWith('end');\n\n    return docksToInlineEnd === isRtl ? -1 : 1;\n  }\n\n  private listen() {\n    fromEvent<PointerEvent>(this.elementRef.nativeElement, 'pointerdown')\n      .pipe(\n        tap((event) => this.startGesture(event)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    // The document covers the moves before `setPointerCapture` retargets anything to the element.\n    fromEvent<PointerEvent>(this.document, 'pointermove')\n      .pipe(\n        filter((event) => event.pointerId === this.activePointerId),\n        tap((event) => this.trackGesture(event)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    fromEvent<PointerEvent>(this.document, 'pointerup')\n      .pipe(\n        filter((event) => event.pointerId === this.activePointerId),\n        tap(() => this.endGesture()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    // The browser took the gesture over (a scroll won the disambiguation, the pointer left the\n    // window). Put the notification back rather than act on an input the user never completed.\n    fromEvent<PointerEvent>(this.document, 'pointercancel')\n      .pipe(\n        filter((event) => event.pointerId === this.activePointerId),\n        tap(() => this.cancelGesture()),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private startGesture(event: PointerEvent) {\n    if (!this.isEnabled || this.activePointerId !== null) return;\n    if (!event.isPrimary || (event.pointerType === 'mouse' && event.button !== 0)) return;\n    if (isInteractivePointerTarget(event.target as HTMLElement)) return;\n    if (claimsPointerAxis(event.target as HTMLElement, { boundary: this.elementRef.nativeElement, axis: 'x' })) return;\n\n    this.tracker = createSwipeTracker(event);\n    this.activePointerId = event.pointerId;\n    this.isCommitted = false;\n    this.offset = 0;\n    this.extent = this.elementRef.nativeElement.offsetWidth + EXIT_OVERSHOOT_PX;\n\n    // A touch never hovers, so this is the only thing that keeps a notification from timing out\n    // under the finger holding it.\n    this.notification?.ref().pauseTimer('gesture');\n  }\n\n  private trackGesture(event: PointerEvent) {\n    if (!this.tracker) return;\n\n    const el = this.elementRef.nativeElement;\n    const { movementX, isScrolling } = this.tracker.update(event);\n\n    if (!this.isCommitted) {\n      // The pointer is panning the page, not swiping the notification.\n      if (isScrolling) {\n        this.forgetGesture();\n        this.notification?.ref().resumeTimer('gesture');\n\n        return;\n      }\n\n      const sign = this.allowedSign ?? (movementX >= 0 ? 1 : -1);\n\n      if (movementX * sign < COMMIT_THRESHOLD_PX) return;\n\n      this.sign = sign;\n      this.isCommitted = true;\n      el.setPointerCapture(event.pointerId);\n\n      // Dragging text around would otherwise start selecting it.\n      this.renderer.setStyle(el, { userSelect: 'none' });\n    }\n\n    this.offset = Math.min(Math.max(0, movementX * this.sign), this.extent);\n    this.paint(this.offset);\n  }\n\n  private endGesture() {\n    const tracker = this.tracker;\n    const wasCommitted = this.isCommitted;\n\n    this.forgetGesture();\n\n    if (tracker && wasCommitted) {\n      const velocity = tracker.end().pixelPerSecondX * this.sign;\n      const width = this.elementRef.nativeElement.offsetWidth;\n      const dismissDistance = Math.max(MIN_DISMISS_DISTANCE_PX, width * DISMISS_DISTANCE_RATIO);\n\n      if (this.offset >= dismissDistance || velocity >= MIN_DISMISS_VELOCITY) {\n        // On its way out - the timer it was paused on is moot.\n        this.dismissWithMomentum(Math.abs(velocity));\n\n        return;\n      }\n\n      this.settleBack();\n    }\n\n    this.notification?.ref().resumeTimer('gesture');\n  }\n\n  private cancelGesture() {\n    const wasCommitted = this.isCommitted;\n\n    this.forgetGesture();\n\n    if (wasCommitted) this.settleBack();\n\n    this.notification?.ref().resumeTimer('gesture');\n  }\n\n  private forgetGesture() {\n    this.tracker = null;\n    this.activePointerId = null;\n    this.isCommitted = false;\n    this.renderer.setStyle(this.elementRef.nativeElement, { userSelect: null });\n  }\n\n  /** Puts the notification where the gesture has dragged it to, fading it as it goes. */\n  private paint(offset: number) {\n    const el = this.elementRef.nativeElement;\n    const progress = this.extent ? Math.min(1, offset / this.extent) : 0;\n\n    this.renderer.setStyle(el, { transform: `translateX(${offset * this.sign}px)`, transition: null });\n    this.renderer.setCssProperty(el, '--_et-notification-swipe-opacity', `${1 - progress * (1 - MIN_SWIPE_OPACITY)}`);\n  }\n\n  private settleBack() {\n    const el = this.elementRef.nativeElement;\n\n    this.offset = 0;\n    this.renderer.setStyle(el, {\n      transition: `transform ${SETTLE_DURATION_MS}ms ease, opacity ${SETTLE_DURATION_MS}ms ease`,\n      transform: 'translateX(0px)',\n    });\n    this.renderer.setCssProperty(el, '--_et-notification-swipe-opacity', '1');\n  }\n\n  /**\n   * Hands the swipe's momentum to the leave animation instead of the stylesheet's fixed duration -\n   * the notification carries on in the direction it was thrown. Position stays continuous because\n   * the leave transition starts from the drag's own inline transform (see the `data-swiped-away`\n   * rules in `notification.component.css`, which need `!important` to override it).\n   */\n  private dismissWithMomentum(speed: number) {\n    const el = this.elementRef.nativeElement;\n    const remainingDistance = Math.max(0, this.extent - this.offset);\n    const ideal = speed >= MIN_EXIT_SPEED ? (remainingDistance / speed) * 1000 : MAX_EXIT_DURATION_MS;\n    const duration = Math.round(Math.min(MAX_EXIT_DURATION_MS, Math.max(MIN_EXIT_DURATION_MS, ideal)));\n\n    this.renderer.setCssProperty(el, '--_et-notification-swipe-exit-x', `${this.extent * this.sign}px`);\n    this.renderer.setAttribute(el, 'data-swiped-away', '');\n\n    if (!matchesReducedMotion(el)) {\n      this.renderer.setStyle(el, { transitionDuration: `${duration}ms` });\n    }\n\n    this.notification?.ref().dismiss();\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The strings a notification renders itself. Its message and actions are yours; dismissal is its own. */\nexport type NotificationLabels = {\n  /** Accessible label for a notification's dismiss button. */\n  dismiss: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_NOTIFICATION_LABELS: NotificationLabels = {\n  dismiss: 'Dismiss',\n};\n\nconst NOTIFICATION_LABELS_DEF = /* @__PURE__ */ defineLabels<NotificationLabels>(\n  'NOTIFICATION_LABELS',\n  DEFAULT_NOTIFICATION_LABELS,\n);\n\n/**\n * Localize a notification's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps its {@link DEFAULT_NOTIFICATION_LABELS} value. See {@link defineLabels}\n * for the shape, which every domain in this library shares.\n *\n * @example\n * provideNotificationLabels({ dismiss: 'Schließen' });\n */\nexport const provideNotificationLabels = /* @__PURE__ */ toProvideFn(NOTIFICATION_LABELS_DEF);\nexport const injectNotificationLabels = /* @__PURE__ */ toInjectFn(NOTIFICATION_LABELS_DEF);\nexport const NOTIFICATION_LABELS = /* @__PURE__ */ toToken(NOTIFICATION_LABELS_DEF);\n","import { EffectRef, Injector, effect, untracked } from '@angular/core';\nimport { QueryArgs, QueryErrorResponse, ReadonlyQuery, ResponseType } from '@ethlete/query';\nimport { EMPTY, EmptyError, Observable, catchError, isObservable, tap } from 'rxjs';\nimport {\n  NotificationConfig,\n  NotificationContentInput,\n  NotificationStatus,\n  toNotificationContent,\n} from './notification-config';\nimport { NotificationRef } from './notification-ref';\n\n/** What a notification says while work runs, and once it settles. */\nexport type NotificationPromiseContent<TValue, TError> = {\n  loading: NotificationContentInput;\n\n  /** Content for the resolved value. Give a function to read the value, or fixed content to ignore it. */\n  success: NotificationContentInput | ((value: TValue) => NotificationContentInput);\n\n  /** Content for the failure. Give a function to read the error, or fixed content to ignore it. */\n  error: NotificationContentInput | ((error: TError) => NotificationContentInput);\n};\n\n/**\n * Work a notification can follow. An observable settles on completion, carrying its last value -\n * completing without ever emitting counts as a failure, the way `lastValueFrom` treats it.\n */\nexport type NotificationPromiseWork<TValue> = PromiseLike<TValue> | Observable<TValue>;\n\n/**\n * Opens a `loading` notification and turns it into the success or error one when the work settles -\n * the same notification, updated in place, not a second toast.\n *\n * Takes a promise, an observable, or an `@ethlete/query` query. A query is *followed*, never\n * executed: trigger it yourself (or let a GET auto-execute) and the notification mirrors its\n * execution state, settling on the first success or failure it sees. If the query already carries a\n * response by then, the notification skips straight to success.\n *\n * Dismissing the notification detaches it - the work keeps running (dismissing a toast must not\n * cancel a request), it just no longer has anything to say.\n *\n * @example\n * manager.promise(this.api.save(body), {\n *   loading: 'Saving…',\n *   success: (saved) => ({ title: 'Saved', message: saved.name }),\n *   error: () => 'Could not save',\n * });\n *\n * @example\n * this.saveQuery.execute({ args: { body } });\n * manager.promise(this.saveQuery, {\n *   loading: { title: 'Saving…', progress: 0 }, // `progress` follows the request's upload progress\n *   success: 'Saved',\n *   error: (e) => ({ title: 'Could not save', message: e.detail }),\n * });\n */\nexport type NotificationPromiseFn = {\n  <TValue>(\n    work: NotificationPromiseWork<TValue>,\n    content: NotificationPromiseContent<TValue, unknown>,\n  ): NotificationRef;\n  <TArgs extends QueryArgs>(\n    query: ReadonlyQuery<TArgs>,\n    content: NotificationPromiseContent<ResponseType<TArgs>, QueryErrorResponse>,\n  ): NotificationRef;\n};\n\n/** Anything the promise API accepts, before it has been told apart. */\ntype AnyNotificationPromiseWork = NotificationPromiseWork<unknown> | ReadonlyQuery<QueryArgs>;\n\ntype RunNotificationPromiseOptions = {\n  work: AnyNotificationPromiseWork;\n  content: NotificationPromiseContent<never, never>;\n  open: (config: NotificationConfig) => NotificationRef;\n\n  /** Injector the query-following effect runs in - `promise()` is called from event handlers, not DI. */\n  injector: Injector;\n};\n\nconst isQuery = (work: AnyNotificationPromiseWork): work is ReadonlyQuery<QueryArgs> =>\n  typeof work === 'object' && work !== null && 'executionState' in work;\n\nconst runNotificationPromise = ({ work, content, open, injector }: RunNotificationPromiseOptions): NotificationRef => {\n  const loading = toNotificationContent(content.loading);\n  const ref = open({ ...loading, status: 'loading' });\n\n  const settle = (status: Extract<NotificationStatus, 'success' | 'error'>, result: unknown) => {\n    const source = status === 'success' ? content.success : content.error;\n    const resolved =\n      typeof source === 'function' ? (source as (value: unknown) => NotificationContentInput)(result) : source;\n\n    ref.replaceConfig({ ...toNotificationContent(resolved), status });\n  };\n\n  if (isQuery(work)) {\n    followQuery({ query: work, ref, settle, followProgress: loading.progress !== undefined, injector });\n  } else if (isObservable(work)) {\n    let lastValue: unknown;\n    let hasValue = false;\n\n    work\n      .pipe(\n        tap({\n          next: (value) => {\n            lastValue = value;\n            hasValue = true;\n          },\n          complete: () => (hasValue ? settle('success', lastValue) : settle('error', new EmptyError())),\n        }),\n        // The failure belongs to the notification now. Letting it through would surface as an\n        // unhandled RxJS error on top of the toast that already reports it.\n        catchError((error: unknown) => {\n          settle('error', error);\n\n          return EMPTY;\n        }),\n      )\n      .subscribe();\n  } else {\n    Promise.resolve(work).then(\n      (value) => settle('success', value),\n      (error: unknown) => settle('error', error),\n    );\n  }\n\n  return ref;\n};\n\n/**\n * Builds the manager's `promise` method. Both public signatures share this one implementation, hence\n * the cast - the overloads exist to type the settle callbacks (a query hands them a\n * `QueryErrorResponse`, everything else an `unknown`), not to pick different code paths.\n */\nexport const createNotificationPromiseFn = (deps: Omit<RunNotificationPromiseOptions, 'work' | 'content'>) =>\n  ((work: AnyNotificationPromiseWork, content: NotificationPromiseContent<never, never>) =>\n    runNotificationPromise({ ...deps, work, content })) as NotificationPromiseFn;\n\nconst followQuery = ({\n  query,\n  ref,\n  settle,\n  followProgress,\n  injector,\n}: {\n  query: ReadonlyQuery<QueryArgs>;\n  ref: NotificationRef;\n  settle: (status: 'success' | 'error', result: unknown) => void;\n  followProgress: boolean;\n  injector: Injector;\n}) => {\n  let effectRef: EffectRef | null = null;\n  let hasSettled = false;\n\n  const stopFollowing = () => {\n    effectRef?.destroy();\n    effectRef = null;\n  };\n\n  effectRef = effect(\n    () => {\n      const state = query.executionState();\n\n      if (!state || hasSettled) return;\n\n      if (state.type === 'loading') {\n        const percentage = state.loading.progress?.percentage;\n\n        if (followProgress && percentage !== undefined) {\n          untracked(() => ref.update({ progress: percentage }));\n        }\n\n        return;\n      }\n\n      hasSettled = true;\n\n      untracked(() => {\n        if (state.type === 'success') {\n          settle('success', state.response);\n        } else {\n          settle('error', state.error);\n        }\n\n        stopFollowing();\n      });\n    },\n    { injector },\n  );\n\n  // Nothing left to say once the notification is gone. The query itself keeps running.\n  ref.afterDismissed().subscribe(stopFollowing);\n};\n","import { signal } from '@angular/core';\nimport { Subject, Subscription, tap, timer } from 'rxjs';\nimport { NotificationConfig, NotificationManagerConfig, NotificationStatus } from './notification-config';\n\nexport type NotificationEntry = {\n  id: string;\n  config: NotificationConfig;\n  isDismissing: boolean;\n  isDismissed: boolean;\n};\n\n/**\n * Why a notification's auto-dismiss timer is held. The built-in ones are the pointer over the toast\n * (`'hover'`), focus inside it (`'focus'`), a swipe in progress (`'gesture'`) and a bare\n * `pauseTimer()` call (`'api'`); a consumer may use any other string as its own key.\n */\nexport type NotificationPauseReason = 'hover' | 'focus' | 'gesture' | 'api' | (string & {});\n\nconst ID_PREFIX = 'et-notification-';\nlet uniqueId = 0;\n\nexport const createNotificationRef = (\n  config: NotificationConfig,\n  { managerConfig, beforeChange }: { managerConfig: NotificationManagerConfig; beforeChange?: () => void },\n) => {\n  const id = config.id ?? `${ID_PREFIX}${uniqueId++}`;\n\n  const entryState = signal<NotificationEntry>({\n    id,\n    config,\n    isDismissing: false,\n    isDismissed: false,\n  });\n\n  const afterDismissedSubject$ = new Subject<void>();\n  const pauseReasons = new Set<NotificationPauseReason>();\n  let timerSubscription: Subscription | null = null;\n  let timerStartedAt = 0;\n  let remainingDuration = 0;\n\n  const getEffectiveDuration = (cfg: NotificationConfig) => {\n    if (cfg.duration !== undefined) return cfg.duration;\n    return managerConfig.defaultDuration[cfg.status as NotificationStatus] ?? 0;\n  };\n\n  const startTimer = (cfg: NotificationConfig) => {\n    timerSubscription?.unsubscribe();\n    timerSubscription = null;\n\n    const duration = getEffectiveDuration(cfg);\n    if (!duration) return;\n\n    remainingDuration = duration;\n    timerStartedAt = Date.now();\n\n    // A config change while the toast is held (a progress update under the pointer) re-arms the\n    // countdown but must not un-hold it - the reasons for the hold have not gone anywhere.\n    if (pauseReasons.size > 0) return;\n\n    timerSubscription = timer(duration)\n      .pipe(tap(() => dismiss()))\n      .subscribe();\n  };\n\n  /**\n   * Holds the auto-dismiss countdown until every reason that asked for it has released it, so a\n   * toast the pointer left but the keyboard is still in does not dismiss itself. Pass the same\n   * `reason` to {@link resumeTimer}.\n   */\n  const pauseTimer = (reason: NotificationPauseReason = 'api') => {\n    pauseReasons.add(reason);\n\n    if (!timerSubscription || remainingDuration <= 0) return;\n\n    const elapsed = Date.now() - timerStartedAt;\n    remainingDuration = Math.max(0, remainingDuration - elapsed);\n\n    timerSubscription.unsubscribe();\n    timerSubscription = null;\n  };\n\n  /** Releases one {@link pauseTimer} reason. The countdown resumes once the last one is gone. */\n  const resumeTimer = (reason: NotificationPauseReason = 'api') => {\n    pauseReasons.delete(reason);\n\n    if (pauseReasons.size > 0 || timerSubscription || remainingDuration <= 0) return;\n\n    timerStartedAt = Date.now();\n\n    timerSubscription = timer(remainingDuration)\n      .pipe(tap(() => dismiss()))\n      .subscribe();\n  };\n\n  /** Whether swapping `current` for `next` can change the notification's box, and thus needs a FLIP capture. */\n  const mightResize = (next: NotificationConfig, current: NotificationConfig) =>\n    next.status !== current.status ||\n    next.title !== current.title ||\n    next.message !== current.message ||\n    next.action !== current.action ||\n    next.secondaryAction !== current.secondaryAction ||\n    (next.progress === undefined) !== (current.progress === undefined);\n\n  const applyConfig = (next: NotificationConfig) => {\n    const current = entryState().config;\n\n    if (mightResize(next, current)) beforeChange?.();\n\n    entryState.update((e) => ({ ...e, config: next }));\n    startTimer(next);\n  };\n\n  const update = (partial: Partial<NotificationConfig>) => {\n    const current = entryState().config;\n\n    const needsDurationReset =\n      partial.status !== undefined && partial.status !== current.status && !('duration' in partial);\n\n    const base: NotificationConfig = needsDurationReset ? { ...current, duration: undefined } : current;\n\n    applyConfig({ ...base, ...partial });\n  };\n\n  /**\n   * @internal Swaps the whole config, so keys the new one leaves out go back to unset - what an\n   * `open()` that lands on a live id means, as opposed to {@link update}'s merge. Ignored once the\n   * notification is on its way out: a dismissed notification stays dismissed.\n   */\n  const replaceConfig = (next: NotificationConfig) => {\n    const entry = entryState();\n    if (entry.isDismissing || entry.isDismissed) return;\n\n    // Identity is the one thing a replacement cannot change - it is what found this notification.\n    applyConfig({ ...next, id: entry.config.id });\n  };\n\n  const dismiss = () => {\n    const entry = entryState();\n    if (entry.isDismissing || entry.isDismissed) return;\n\n    beforeChange?.();\n    timerSubscription?.unsubscribe();\n    timerSubscription = null;\n    entryState.update((e) => ({ ...e, isDismissing: true }));\n  };\n\n  const afterDismissed = () => afterDismissedSubject$.asObservable();\n\n  /** @internal Called by EtNotificationDirective after the leave animation completes. */\n  const markDismissed = () => {\n    beforeChange?.();\n    entryState.update((e) => ({ ...e, isDismissed: true, isDismissing: false }));\n    afterDismissedSubject$.next();\n    afterDismissedSubject$.complete();\n  };\n\n  startTimer(config);\n\n  return {\n    id,\n    entry: entryState.asReadonly(),\n    update,\n    replaceConfig,\n    dismiss,\n    pauseTimer,\n    resumeTimer,\n    afterDismissed,\n    markDismissed,\n  };\n};\n\nexport type NotificationRef = ReturnType<typeof createNotificationRef>;\n","import { Component, ViewEncapsulation, afterNextRender, computed, effect, inject, untracked } from '@angular/core';\nimport {\n  ANIMATED_LIFECYCLE_TOKEN,\n  AnimatedLifecycleDirective,\n  ProvideColorDirective,\n  ProvideSurfaceDirective,\n  injectSurfaceThemes,\n  injectSurfaceType,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { IconButtonComponent } from '../button/icon-button.component';\nimport { TextButtonComponent } from '../button/text-button.component';\nimport {\n  CIRCLE_CHECK_ICON,\n  CIRCLE_INFO_ICON,\n  ICON_IMPORTS,\n  TIMES_ICON,\n  TRIANGLE_EXCLAMATION_ICON,\n  provideIcons,\n} from '../icon';\nimport { ProgressBarComponent } from '../loader/progress-bar/progress-bar.component';\nimport { SpinnerComponent } from '../loader/spinner/spinner.component';\nimport { NotificationActionDirective } from './headless/notification-action.directive';\nimport { NotificationDismissDirective } from './headless/notification-dismiss.directive';\nimport { NotificationSwipeToDismissDirective } from './headless/notification-swipe-to-dismiss.directive';\nimport { NotificationDirective } from './headless/notification.directive';\nimport { injectNotificationManagerConfig, resolveNotificationStatusIcon } from './notification-config';\nimport { injectNotificationLabels } from './notification-labels';\n\n@Component({\n  selector: 'et-notification',\n  templateUrl: './notification.component.html',\n  styleUrl: './notification.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    NotificationActionDirective,\n    NotificationDismissDirective,\n    SpinnerComponent,\n    ProgressBarComponent,\n    IconButtonComponent,\n    TextButtonComponent,\n    ...ICON_IMPORTS,\n  ],\n  providers: [provideIcons(TIMES_ICON, CIRCLE_CHECK_ICON, CIRCLE_INFO_ICON, TRIANGLE_EXCLAMATION_ICON)],\n  hostDirectives: [\n    { directive: NotificationDirective, inputs: ['ref'] },\n    NotificationSwipeToDismissDirective,\n    AnimatedLifecycleDirective,\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n    {\n      directive: ProvideSurfaceDirective,\n      inputs: ['etProvideSurface:surface'],\n    },\n  ],\n  host: {\n    class: 'et-notification',\n    '(keydown.escape)': 'notification.ref().dismiss()',\n    '(mouseenter)': 'notification.ref().pauseTimer(\"hover\")',\n    '(mouseleave)': 'notification.ref().resumeTimer(\"hover\")',\n    '(focusin)': 'notification.ref().pauseTimer(\"focus\")',\n    '(focusout)': 'notification.ref().resumeTimer(\"focus\")',\n  },\n})\nexport class NotificationComponent {\n  protected notification = inject(NotificationDirective);\n\n  private animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);\n  private provideTheme = inject(ProvideColorDirective);\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private managerConfig = injectNotificationManagerConfig();\n  private labels = injectNotificationLabels();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  private surfaceType = injectSurfaceType();\n\n  private resolvedColor = computed(() => {\n    const mapping = this.managerConfig.statusColorMapping;\n    if (!mapping) return null;\n\n    const status = this.notification.status();\n    return mapping[status] ?? null;\n  });\n\n  private resolvedSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const type = this.surfaceType();\n    if (!themes || !type) return null;\n\n    // The stack is appended to <body> and paints above every overlay, so a toast is a layer on the\n    // page - elevation 1, the same level a dialog resolves to. It must not follow what is open\n    // underneath it: that re-shaded every visible toast whenever an overlay came or went.\n    return resolveSurfaceByElevation(themes, type, 1);\n  });\n\n  protected controlsColor = computed(() => {\n    return this.managerConfig.controlsColor ?? this.resolvedColor();\n  });\n\n  protected dismissLabel = computed(() => this.labels().dismiss);\n\n  /**\n   * The glyph in front of the title: the notification's own `icon` if it names one (or opts out with\n   * `null`), otherwise the one its status carries. `loading` has none by default and renders its\n   * spinner instead.\n   */\n  protected statusIcon = computed(() => {\n    const own = this.notification.icon();\n\n    if (own !== undefined) return own;\n\n    return resolveNotificationStatusIcon(this.managerConfig, this.notification.status());\n  });\n\n  constructor() {\n    effect(() => {\n      const theme = this.resolvedColor();\n\n      untracked(() => {\n        if (theme) {\n          this.provideTheme.forceColor(theme);\n\n          return;\n        }\n\n        this.provideTheme.clearForcedColor();\n      });\n    });\n\n    effect(() => {\n      const surface = this.resolvedSurface();\n\n      untracked(() => {\n        if (surface) {\n          this.provideSurface.forceSurface(surface.name);\n\n          return;\n        }\n\n        this.provideSurface.clearForcedSurface();\n      });\n    });\n\n    afterNextRender(() => {\n      this.animatedLifecycle.enter();\n    });\n  }\n}\n","<div class=\"et-notification-content\">\n  <div class=\"et-notification-header\">\n    @if (statusIcon(); as icon) {\n      <i [etIcon]=\"icon\" class=\"et-notification-icon\"></i>\n    } @else if (notification.isLoading()) {\n      <et-spinner class=\"et-notification-spinner\" diameter=\"16\" strokeWidth=\"2\" />\n    }\n\n    <span class=\"et-notification-title\">{{ notification.title() }}</span>\n\n    <button\n      [color]=\"controlsColor()\"\n      [attr.aria-label]=\"dismissLabel()\"\n      class=\"et-notification-dismiss-btn\"\n      et-icon-button\n      etNotificationDismiss\n      size=\"xs\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  </div>\n\n  @if (notification.message()) {\n    <p class=\"et-notification-message\">{{ notification.message() }}</p>\n  }\n\n  @if (notification.progress() !== undefined) {\n    <et-progress-bar [value]=\"notification.progress()!\" class=\"et-notification-progress-bar\" />\n  }\n\n  @if (notification.action() || notification.secondaryAction()) {\n    <div class=\"et-notification-footer\">\n      @if (notification.action(); as action) {\n        <button et-text-button etNotificationAction size=\"xs\" type=\"button\">{{ action.label }}</button>\n      }\n\n      @if (notification.secondaryAction(); as secondaryAction) {\n        <button\n          class=\"et-notification-secondary-action\"\n          et-text-button\n          etNotificationAction=\"secondary\"\n          size=\"xs\"\n          type=\"button\"\n        >\n          {{ secondaryAction.label }}\n        </button>\n      }\n    </div>\n  }\n</div>\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { NotificationItemDirective } from './headless/notification-item.directive';\nimport { NotificationStackDirective } from './headless/notification-stack.directive';\nimport { NotificationComponent } from './notification.component';\n\n@Component({\n  selector: 'et-notification-stack',\n  templateUrl: './notification-stack.component.html',\n  styleUrl: './notification-stack.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NotificationComponent, NotificationItemDirective],\n  hostDirectives: [NotificationStackDirective],\n  host: {\n    class: 'et-notification-stack',\n    role: 'log',\n    'aria-live': 'polite',\n    'aria-relevant': 'additions',\n  },\n})\nexport class NotificationStackComponent {\n  protected stackDirective = inject(NotificationStackDirective);\n}\n","@for (ref of stackDirective.displayRefs(); track ref.id) {\n  <div [etNotificationItem]=\"ref\">\n    <et-notification [ref]=\"ref\" />\n  </div>\n}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  DOCUMENT,\n  DestroyRef,\n  EnvironmentInjector,\n  Signal,\n  computed,\n  createComponent,\n  createEnvironmentInjector,\n  effect,\n  inject,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { defineRootProvider, injectRenderer, toInjectFn, toProvideFn } from '@ethlete/core';\nimport {\n  NotificationConfig,\n  NotificationManagerConfig,\n  injectNotificationManagerConfig,\n  provideNotificationManagerConfig,\n} from './notification-config';\nimport { NotificationPromiseFn, createNotificationPromiseFn } from './notification-promise';\nimport { NotificationRef, createNotificationRef } from './notification-ref';\nimport { NOTIFICATION_STACK_CONTEXT_TOKEN } from './notification-stack-context.token';\nimport { NotificationStackComponent } from './notification-stack.component';\n\nexport type NotificationManager = {\n  /**\n   * Opens a notification and returns its ref. A {@link NotificationConfig.id} that is already on\n   * screen replaces that notification in place instead of stacking a duplicate.\n   */\n  open: (config: NotificationConfig) => NotificationRef;\n\n  /** Opens a `loading` notification that follows a promise, observable or query - see {@link NotificationPromiseFn}. */\n  promise: NotificationPromiseFn;\n\n  dismissAll: () => void;\n  notifications: Signal<NotificationRef[]>;\n  visibleNotifications: Signal<NotificationRef[]>;\n};\n\nconst NOTIFICATION_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n  (): NotificationManager => {\n    const managerConfig = injectNotificationManagerConfig();\n    const appRef = inject(ApplicationRef);\n    const envInjector = inject(EnvironmentInjector);\n    const destroyRef = inject(DestroyRef);\n    const document = inject(DOCUMENT);\n    const renderer = injectRenderer();\n\n    const notifications = signal<NotificationRef[]>([]);\n\n    const maxVisible = Math.max(1, Math.floor(managerConfig.maxVisible));\n\n    const visibleNotifications = computed(() => {\n      const active = notifications().filter((r) => !r.entry().isDismissing && !r.entry().isDismissed);\n      const cappedActiveIds = new Set(active.slice(-maxVisible).map((r) => r.id));\n      // Keep insertion order stable: dismissing items stay in their original position\n      return notifications().filter((r) => r.entry().isDismissing || cappedActiveIds.has(r.id));\n    });\n\n    let stackRef: ComponentRef<NotificationStackComponent> | null = null;\n\n    const stackContext = {\n      visibleNotifications,\n      position: managerConfig.position,\n      captureBeforeState: null as (() => void) | null,\n    };\n\n    const beforeChange = () => stackContext.captureBeforeState?.();\n\n    const destroyStack = () => {\n      if (!stackRef) return;\n      appRef.detachView(stackRef.hostView);\n      stackRef.destroy();\n      stackRef = null;\n    };\n\n    const createStack = () => {\n      const childInjector = createEnvironmentInjector(\n        [\n          {\n            provide: NOTIFICATION_STACK_CONTEXT_TOKEN,\n            useValue: stackContext,\n          },\n          ...provideNotificationManagerConfig(managerConfig),\n        ],\n        envInjector,\n      );\n\n      stackRef = createComponent(NotificationStackComponent, { environmentInjector: childInjector });\n      appRef.attachView(stackRef.hostView);\n      renderer.appendChild(document.body, stackRef.location.nativeElement);\n    };\n\n    effect(() => {\n      const visible = visibleNotifications();\n\n      if (visible.length > 0 && !stackRef) {\n        untracked(createStack);\n      } else if (visible.length === 0 && stackRef) {\n        untracked(() => {\n          destroyStack();\n          notifications.set([]);\n        });\n      }\n    });\n\n    destroyRef.onDestroy(destroyStack);\n\n    const open = (config: NotificationConfig): NotificationRef => {\n      const sameId = config.id ? notifications().find((r) => r.id === config.id) : undefined;\n\n      if (sameId) {\n        const entry = sameId.entry();\n\n        if (!entry.isDismissing && !entry.isDismissed) {\n          sameId.replaceConfig(config);\n\n          return sameId;\n        }\n\n        // That id is already leaving. Drop it now rather than let it animate out beside its\n        // replacement - the stack tracks items by id, so two of them may not coexist.\n        sameId.markDismissed();\n        notifications.update((n) => n.filter((r) => r !== sameId));\n      }\n\n      const currentActive = notifications().filter((r) => !r.entry().isDismissing && !r.entry().isDismissed);\n      if (currentActive.length >= maxVisible) {\n        currentActive[0]?.dismiss();\n      }\n\n      beforeChange();\n      const ref = createNotificationRef(config, { managerConfig, beforeChange });\n      notifications.update((n) => [...n, ref]);\n\n      return ref;\n    };\n\n    const promise = createNotificationPromiseFn({ open, injector: envInjector });\n\n    const dismissAll = () => {\n      notifications().forEach((r) => r.dismiss());\n    };\n\n    return {\n      open,\n      promise,\n      dismissAll,\n      notifications: notifications.asReadonly(),\n      visibleNotifications,\n    };\n  },\n  { name: 'NotificationManager' },\n);\n\nexport const provideNotificationManagerInstance = /* @__PURE__ */ toProvideFn(NOTIFICATION_MANAGER_DEF);\nexport const injectNotificationManager = /* @__PURE__ */ toInjectFn(NOTIFICATION_MANAGER_DEF);\n\nexport const provideNotificationManager = (config?: Partial<NotificationManagerConfig>) => [\n  ...provideNotificationManagerConfig(config),\n  ...provideNotificationManagerInstance(),\n];\n","import { NotificationActionDirective } from './headless/notification-action.directive';\nimport { NotificationDismissDirective } from './headless/notification-dismiss.directive';\nimport { NotificationSwipeToDismissDirective } from './headless/notification-swipe-to-dismiss.directive';\nimport { NotificationDirective } from './headless/notification.directive';\nimport { NotificationComponent } from './notification.component';\n\nexport const NOTIFICATION_IMPORTS = [\n  NotificationComponent,\n  NotificationDirective,\n  NotificationActionDirective,\n  NotificationDismissDirective,\n  NotificationSwipeToDismissDirective,\n] as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/** The item range a readout label describes - `start`/`end` are 1-based and inclusive. */\nexport type PaginationRangeContext = {\n  /** First item shown on the current page (`0` when there are no items). */\n  start: number;\n  /** Last item shown on the current page. */\n  end: number;\n  /** Total items across all pages. */\n  totalItems: number;\n};\n\n/**\n * Every string the paginator renders or announces itself. Defaults are English\n * ({@link DEFAULT_PAGINATION_LABELS}); override them app-wide with\n * {@link providePaginationLabels} or per instance via `et-pagination`'s `labels` input.\n *\n * The first four plus `ellipsis`/`page` are the controls' `aria-label`s (the visible text is a\n * chevron or the page number); the rest are visible readouts.\n */\nexport type PaginationLabels = {\n  /** Accessible label for the navigation landmark. */\n  navigation: string;\n  /** Accessible label for the \"jump to first page\" control. */\n  first: string;\n  /** Accessible label for the \"previous page\" control. */\n  previous: string;\n  /** Accessible label for the \"next page\" control. */\n  next: string;\n  /** Accessible label for the \"jump to last page\" control. */\n  last: string;\n  /** Accessible label for an ellipsis gap (inert, `aria-hidden` - kept for custom renderings). */\n  ellipsis: string;\n  /** Accessible label for a page item, e.g. `'Page 3'`. */\n  page: (page: number, totalPages: number) => string;\n  /** The \"Showing X–Y of Z\" readout shown when `totalItems`/`pageSize` are set. */\n  range: (range: PaginationRangeContext) => string;\n  /** The compact pager's readout when `totalItems`/`pageSize` are set, e.g. `'1–10 of 40'`. */\n  compactRange: (range: PaginationRangeContext) => string;\n  /** The compact pager's readout when the item range is unknown, e.g. `'1 / 5'`. */\n  compactPage: (page: number, totalPages: number) => string;\n  /** Label for the jump-to-page field (`showJumpTo`). */\n  jumpTo: string;\n  /** Visible label for the page-size select (`<et-page-size-select>`). */\n  pageSize: string;\n  /** How one page-size choice reads, e.g. `'25'` - override for `'All'` or `'25 per page'`. */\n  pageSizeOption: (size: number) => string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_PAGINATION_LABELS: PaginationLabels = {\n  navigation: 'Pagination',\n  first: 'First page',\n  previous: 'Previous page',\n  next: 'Next page',\n  last: 'Last page',\n  ellipsis: 'More pages',\n  page: (page) => `Page ${page}`,\n  range: ({ start, end, totalItems }) => `Showing ${start}–${end} of ${totalItems}`,\n  compactRange: ({ start, end, totalItems }) => `${start}–${end} of ${totalItems}`,\n  compactPage: (page, totalPages) => `${page} / ${totalPages}`,\n  jumpTo: 'Go to page',\n  pageSize: 'Items per page',\n  pageSizeOption: (size) => `${size}`,\n};\n\nconst PAGINATION_LABELS_DEF = /* @__PURE__ */ defineLabels<PaginationLabels>(\n  'PAGINATION_LABELS',\n  DEFAULT_PAGINATION_LABELS,\n);\n\n/**\n * Localize the paginator's strings for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_PAGINATION_LABELS}\n * value. See {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * providePaginationLabels({\n *   navigation: 'Seitennavigation',\n *   previous: 'Vorherige Seite',\n *   page: (page) => `Seite ${page}`,\n *   range: ({ start, end, totalItems }) => `Zeige ${start}–${end} von ${totalItems}`,\n * });\n */\nexport const providePaginationLabels = /* @__PURE__ */ toProvideFn(PAGINATION_LABELS_DEF);\nexport const injectPaginationLabels = /* @__PURE__ */ toInjectFn(PAGINATION_LABELS_DEF);\nexport const PAGINATION_LABELS = /* @__PURE__ */ toToken(PAGINATION_LABELS_DEF);\n","import { clamp } from '@ethlete/core';\nimport { DEFAULT_PAGINATION_LABELS } from './pagination-labels';\nimport { PaginateOptions, PaginationItem } from './pagination.types';\n\nconst range = (start: number, end: number): number[] =>\n  Array.from({ length: Math.max(end - start + 1, 0) }, (_, index) => start + index);\n\n/**\n * Build the ordered {@link PaginationItem} list for a paginator: optional first/previous controls,\n * a windowed set of page numbers with `ellipsis` gaps for large page counts (the\n * `1 … 45 46 47 … 200` shape), then optional next/last controls. Pure and global-free - the caller\n * turns page numbers into hrefs (or handles clicks) itself.\n *\n * The page-window algorithm mirrors the well-worn boundary/sibling approach: `boundaryCount` pages\n * are always shown at each edge and `siblingCount` on each side of the current page, with ellipses\n * only where they replace more than one page.\n *\n * Item `label`s come from the default English labels unless `options.labels` overrides them.\n */\nexport const paginate = (options: PaginateOptions): PaginationItem[] => {\n  const { totalPages, siblingCount = 1, boundaryCount = 1, hideFirstLast = false, hidePreviousNext = false } = options;\n  const labels = { ...DEFAULT_PAGINATION_LABELS, ...options.labels };\n\n  if (totalPages <= 0) return [];\n\n  const current = clamp(options.currentPage, 1, totalPages);\n\n  const startPages = range(1, Math.min(boundaryCount, totalPages));\n  const endPages = range(Math.max(totalPages - boundaryCount + 1, boundaryCount + 1), totalPages);\n\n  const siblingsStart = Math.max(\n    Math.min(current - siblingCount, totalPages - boundaryCount - siblingCount * 2 - 1),\n    boundaryCount + 2,\n  );\n  const siblingsEnd = Math.min(\n    Math.max(current + siblingCount, boundaryCount + siblingCount * 2 + 2),\n    endPages.length > 0 ? (endPages[0] as number) - 2 : totalPages - 1,\n  );\n\n  const middle: (number | 'ellipsis')[] = [\n    ...startPages,\n    ...(siblingsStart > boundaryCount + 2\n      ? ['ellipsis' as const]\n      : boundaryCount + 1 < totalPages - boundaryCount\n        ? [boundaryCount + 1]\n        : []),\n    ...range(siblingsStart, siblingsEnd),\n    ...(siblingsEnd < totalPages - boundaryCount - 1\n      ? ['ellipsis' as const]\n      : totalPages - boundaryCount > boundaryCount\n        ? [totalPages - boundaryCount]\n        : []),\n    ...endPages,\n  ];\n\n  const items: PaginationItem[] = [];\n\n  if (!hideFirstLast) {\n    items.push({ type: 'first', page: 1, current: false, disabled: current === 1, label: labels.first });\n  }\n\n  if (!hidePreviousNext) {\n    items.push({\n      type: 'previous',\n      page: current - 1,\n      current: false,\n      disabled: current === 1,\n      label: labels.previous,\n    });\n  }\n\n  for (const entry of middle) {\n    if (entry === 'ellipsis') {\n      items.push({ type: 'ellipsis', page: null, current: false, disabled: true, label: labels.ellipsis });\n    } else {\n      items.push({\n        type: 'page',\n        page: entry,\n        current: entry === current,\n        disabled: false,\n        label: labels.page(entry, totalPages),\n      });\n    }\n  }\n\n  if (!hidePreviousNext) {\n    items.push({\n      type: 'next',\n      page: current + 1,\n      current: false,\n      disabled: current === totalPages,\n      label: labels.next,\n    });\n  }\n\n  if (!hideFirstLast) {\n    items.push({\n      type: 'last',\n      page: totalPages,\n      current: false,\n      disabled: current === totalPages,\n      label: labels.last,\n    });\n  }\n\n  return items;\n};\n","import { booleanAttribute, computed, Directive, input, model, numberAttribute } from '@angular/core';\nimport { clamp } from '@ethlete/core';\nimport { paginate } from '../paginate';\nimport { injectPaginationLabels, PaginationLabels } from '../pagination-labels';\nimport { PaginationItem } from '../pagination.types';\n\n/**\n * Headless paginator: owns the current `page` (two-way) and derives the rendered\n * {@link PaginationItem} list from `totalPages` and the window config. No visual opinion - apply it\n * yourself, or use the default `et-pagination` component. Bind `page` to a query form's page field\n * or {@link tableRowsFromQuery}'s `page`/`setPage`.\n */\n@Directive({\n  selector: '[etPagination]',\n  exportAs: 'etPagination',\n  host: {\n    role: 'navigation',\n    '[attr.aria-label]': 'ariaLabel() ?? resolvedLabels().navigation',\n  },\n})\nexport class PaginationDirective {\n  private injectedLabels = injectPaginationLabels();\n\n  /** The active page (1-based). Two-way bindable. */\n  public page = model(1);\n\n  /** Total number of pages. */\n  public totalPages = input(1, { transform: numberAttribute });\n\n  /** Pages shown on each side of the current page. @default 1 */\n  public siblingCount = input(1, { transform: numberAttribute });\n\n  /** Pages shown at each edge before an ellipsis. @default 1 */\n  public boundaryCount = input(1, { transform: numberAttribute });\n\n  /** Omit the first/last jump controls. @default false */\n  public hideFirstLast = input(false, { transform: booleanAttribute });\n\n  /** Omit the previous/next controls. @default false */\n  public hidePreviousNext = input(false, { transform: booleanAttribute });\n\n  /**\n   * Accessible label for the navigation landmark. `null` (the default) uses the resolved\n   * {@link PaginationLabels}' `navigation` label - set this only to distinguish one paginator from\n   * another on the same page (\"Search results pages\"), not to translate it.\n   */\n  public ariaLabel = input<string | null>(null);\n\n  /**\n   * Per-instance overrides for the paginator's strings, merged over the injected\n   * `PAGINATION_LABELS`. Prefer `providePaginationLabels` for app-wide localization; use this\n   * for a one-off wording. Partial - omitted keys keep the provided/default value.\n   */\n  public labels = input<Partial<PaginationLabels> | null>(null);\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<PaginationLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** The ordered items to render (page numbers, jump controls, ellipsis gaps). */\n  public items = computed<PaginationItem[]>(() =>\n    paginate({\n      currentPage: this.page(),\n      totalPages: this.totalPages(),\n      siblingCount: this.siblingCount(),\n      boundaryCount: this.boundaryCount(),\n      hideFirstLast: this.hideFirstLast(),\n      hidePreviousNext: this.hidePreviousNext(),\n      labels: this.resolvedLabels(),\n    }),\n  );\n\n  /** Go to a specific page (clamped into `[1, totalPages]`). */\n  public goTo(page: number) {\n    const total = this.totalPages();\n\n    if (total <= 0) return;\n\n    this.page.set(clamp(page, 1, total));\n  }\n\n  /** Go to the first page. */\n  public first() {\n    this.goTo(1);\n  }\n\n  /** Go to the previous page. */\n  public previous() {\n    this.goTo(this.page() - 1);\n  }\n\n  /** Go to the next page. */\n  public next() {\n    this.goTo(this.page() + 1);\n  }\n\n  /** Go to the last page. */\n  public last() {\n    this.goTo(this.totalPages());\n  }\n}\n","import { Component, computed, input, model, ViewEncapsulation } from '@angular/core';\nimport { injectPaginationLabels, PaginationLabels } from './pagination-labels';\n\n/** The default choices, the sizes a list view is normally offered. */\nconst DEFAULT_PAGE_SIZES = [10, 25, 50, 100] as const;\n\n/**\n * The \"Items per page\" control that sits beside a paginator, completing the Material-style controls\n * row (`<et-pagination compact>` + a range readout + this).\n *\n * A **native `<select>`**, deliberately: it is a handful of numbers, and pulling\n * [`et-select`](/components/select) in would drag the overlay runtime and its panel into every footer\n * that shows one. Native also gets the platform picker on mobile for free, which is the better control\n * for this at that size.\n *\n * Standalone rather than part of the paginator, because the paginator is `page`, not `pageSize` - a\n * table's footer, an infinite list and a gallery all pair them differently, and plenty of paginators\n * want no size control at all.\n *\n * **Changing the size does not reset the page.** Which page 1-based position 47 belongs to depends on\n * what you are paging, so that decision stays yours - the usual answer is to go back to page 1, which\n * `linkedSignal` expresses in a line (see the example).\n *\n * @example\n * protected pageSize = signal(25);\n * // back to page one whenever the size changes; the paginator drives it otherwise\n * protected page = linkedSignal<number, number>({ source: this.pageSize, computation: () => 1 });\n *\n * <div class=\"controls-row\">\n *   <et-page-size-select [(pageSize)]=\"pageSize\" />\n *   <et-pagination [(page)]=\"page\" [totalPages]=\"totalPages()\" [totalItems]=\"total()\" [pageSize]=\"pageSize()\" />\n * </div>\n */\n@Component({\n  selector: 'et-page-size-select',\n  template: `\n    <!-- The visible label wraps the control, so it is the accessible name with no id to generate and\n         nothing to keep in sync. -->\n    <label class=\"et-page-size-select-label\">\n      <span class=\"et-page-size-select-text\">{{ resolvedLabels().pageSize }}</span>\n      <span class=\"et-page-size-select-field\">\n        <select [value]=\"pageSize()\" (change)=\"pick($event)\" class=\"et-page-size-select-control\">\n          @for (option of options(); track option.value) {\n            <option [value]=\"option.value\" [selected]=\"option.value === pageSize()\">{{ option.label }}</option>\n          }\n        </select>\n        <!-- The native arrow goes with \\`appearance: none\\`, so the control draws its own - inline, like\n             the paginator's chevrons, rather than through the icon system the paginator also avoids.\n             Pointer-events off so the whole field still opens the picker. -->\n        <svg class=\"et-page-size-select-chevron\" viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" aria-hidden=\"true\">\n          <path d=\"m4 6 4 4 4-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n        </svg>\n      </span>\n    </label>\n  `,\n  styleUrl: './page-size-select.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-page-size-select-host',\n    '[attr.data-size]': 'size()',\n  },\n})\nexport class PageSizeSelectComponent {\n  private injectedLabels = injectPaginationLabels();\n\n  /** The choices offered. @default [10, 25, 50, 100] */\n  public sizes = input<readonly number[]>(DEFAULT_PAGE_SIZES);\n\n  /** The current page size. Two-way: picking a choice writes it back. */\n  public pageSize = model.required<number>();\n\n  /** Control density, to match the paginator it sits next to. @default 'md' */\n  public size = input<'sm' | 'md'>('md');\n\n  /** Override this instance's strings - see {@link providePaginationLabels} for the app-wide version. */\n  public labels = input<Partial<PaginationLabels> | null>(null);\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<PaginationLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  protected options = computed(() => {\n    const label = this.resolvedLabels().pageSizeOption;\n\n    return this.sizes().map((value) => ({ value, label: label(value) }));\n  });\n\n  protected pick(event: Event) {\n    const value = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n\n    if (!Number.isNaN(value)) this.pageSize.set(value);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  computed,\n  ElementRef,\n  inject,\n  input,\n  untracked,\n  viewChild,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { clamp, createComponentId, signalHostElementDimensions } from '@ethlete/core';\nimport { BUTTON_IMPORTS } from '../button';\nimport { PaginationDirective } from './headless/pagination.directive';\nimport { PaginationRangeContext } from './pagination-labels';\nimport { paginate } from './paginate';\nimport { PaginateOptions, PaginationItem } from './pagination.types';\n\n/** How the paginator renders its page items. */\nexport type PaginationRenderAs = 'buttons' | 'links';\n\n/**\n * Below this measured width (px) the paginator collapses to previous/next + a \"page X of Y\" readout,\n * so it stays on one line with roomy touch targets instead of a cramped row of number buttons.\n */\nconst COMPACT_MAX_WIDTH = 480;\n\n/**\n * The default paginator. Renders themed page-number controls (via the shared `[et-button]`) with\n * first/previous/next/last jumps and ellipsis gaps for large page counts, driven by the headless\n * {@link PaginationDirective}.\n *\n * By default items are `<button>`s (pure client state). Set `renderAs=\"links\"` with a `urlForPage`\n * to render crawlable `<a href>`s instead - normal clicks are intercepted (no reload) so the `page`\n * model still drives everything; modified clicks (⌘/Ctrl/middle) open the URL as usual. Opt into a\n * \"Showing X–Y of Z\" readout with `totalItems`/`pageSize`, and a jump-to-page field with `showJumpTo`.\n *\n * Every string it renders (control `aria-label`s, the readouts, the jump-to label) comes from the\n * resolved `PaginationLabels` - localize them app-wide with `providePaginationLabels` or per\n * instance with the `labels` input.\n *\n * @example\n * <et-pagination [(page)]=\"page\" [totalPages]=\"totalPages()\" />\n */\n@Component({\n  selector: 'et-pagination',\n  templateUrl: './pagination.component.html',\n  styleUrl: './pagination.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [BUTTON_IMPORTS, NgTemplateOutlet],\n  hostDirectives: [\n    {\n      directive: PaginationDirective,\n      inputs: [\n        'page',\n        'totalPages',\n        'siblingCount',\n        'boundaryCount',\n        'hideFirstLast',\n        'hidePreviousNext',\n        'ariaLabel',\n        'labels',\n      ],\n      outputs: ['pageChange'],\n    },\n  ],\n  host: {\n    class: 'et-pagination-host',\n    '[attr.data-size]': 'size()',\n    '[attr.data-compact]': 'isCompact() ? \"\" : null',\n  },\n})\nexport class PaginationComponent {\n  protected pagination = inject(PaginationDirective);\n\n  /** Render page items as `<button>`s (client state) or crawlable `<a href>` links. @default 'buttons' */\n  public renderAs = input<PaginationRenderAs>('buttons');\n\n  /**\n   * Control density. `'sm'` shrinks the page items below the comfortable touch size - use it in tight\n   * spots like a table footer on mobile, where the default targets read larger than the rows. @default 'md'\n   */\n  public size = input<'sm' | 'md'>('md');\n\n  /**\n   * Adapt to the paginator's own width (measured, not a viewport media query). It trims the page window\n   * to whatever fits on one row - dropping siblings, then the first/last jumps - and, once the width is\n   * too tight for a useful number row, collapses to previous/next around a \"page X of Y\" readout with\n   * roomy touch targets. Turn off to always honor `siblingCount`/`boundaryCount` verbatim.\n   * @default true\n   */\n  public responsive = input(true, { transform: booleanAttribute });\n\n  /**\n   * Force the compact previous/next pager on (`true`) or off (`false`), instead of the width-based\n   * decision. Use `true` for a Material-style controls row where the paginator sits inline with a\n   * page-size select and a range readout. `null` (default) keeps the automatic behavior.\n   */\n  public compact = input<boolean | null>(null);\n\n  /** Maps a page number to its URL, used when `renderAs` is `'links'`. */\n  public urlForPage = input<((page: number) => string) | null>(null);\n\n  /** Total number of items across all pages. Enables the \"Showing X–Y of Z\" readout when set with `pageSize`. */\n  public totalItems = input<number | null>(null);\n\n  /** Items per page, used to compute the readout range. */\n  public pageSize = input<number | null>(null);\n\n  /** Show a jump-to-page number field (useful for very large page counts). @default false */\n  public showJumpTo = input(false, { transform: booleanAttribute });\n\n  // The rendered list + its items, measured (untracked) to decide how many fit - see `slotsThatFit`.\n  private listEl = viewChild<ElementRef<HTMLUListElement>>('paginationList');\n  private itemEls = viewChildren<ElementRef<HTMLElement>>('paginationItem');\n\n  protected jumpInputId = createComponentId('et-pagination-jump-input');\n\n  // Re-fit the page window whenever the paginator's own width changes (viewport resize, footer layout).\n  private hostDimensions = signalHostElementDimensions();\n\n  /** The `[start, end]` (1-based, inclusive) item range shown on the current page, or `null` if unknown. */\n  public range = computed<[number, number] | null>(() => {\n    const size = this.pageSize();\n    const total = this.totalItems();\n\n    if (size === null || total === null || size <= 0 || total < 0) return null;\n\n    const page = clamp(this.pagination.page(), 1, Math.max(1, Math.ceil(total / size)));\n    const start = total === 0 ? 0 : (page - 1) * size + 1;\n    const end = Math.min(page * size, total);\n\n    return [start, end];\n  });\n\n  /**\n   * Whether to render the compact previous/next pager instead of the number row. Honors the `compact`\n   * input override; otherwise (when `responsive`) collapses once the measured width drops below\n   * {@link COMPACT_MAX_WIDTH}.\n   */\n  protected isCompact = computed(() => {\n    const forced = this.compact();\n\n    if (forced !== null) return forced;\n    if (!this.responsive()) return false;\n\n    const width = this.hostDimensions()?.client?.width ?? 0;\n\n    return width > 0 && width < COMPACT_MAX_WIDTH;\n  });\n\n  /** The \"Showing X–Y of Z\" readout, or `null` when `totalItems`/`pageSize` aren't set. */\n  public rangeStatus = computed(() => {\n    const range = this.range();\n\n    if (!range) return null;\n\n    return this.pagination.resolvedLabels().range(this.rangeContext(range));\n  });\n\n  /** The compact readout: the item range (\"1–10 of 40\") when known, else the page position. */\n  protected compactStatus = computed(() => {\n    const range = this.range();\n    const labels = this.pagination.resolvedLabels();\n\n    if (range) return labels.compactRange(this.rangeContext(range));\n\n    return labels.compactPage(this.pagination.page(), this.pagination.totalPages());\n  });\n\n  /**\n   * The widest readout this paginator can ever show, rendered invisibly underneath the live one so the\n   * readout's box never changes size. Without it, stepping 9 → 10 widens the text by a digit and shoves\n   * everything laid out beside the paginator sideways - very visible when the paginator is right-aligned\n   * next to a page-size select.\n   *\n   * Every slot gets the largest number in play, which with the tabular figures below is an upper bound\n   * on the real string. A custom label that beats it only loses the guarantee, never gets clipped: the\n   * two are stacked in one grid cell, which takes whichever is wider.\n   */\n  protected widestRangeStatus = computed(() => this.widestStatus('range'));\n  protected widestCompactStatus = computed(() => this.widestStatus('compact'));\n\n  /** The previous/next controls for the compact pager (correct disabled state at the ends). */\n  protected compactControls = computed(() => {\n    const items = paginate({\n      currentPage: this.pagination.page(),\n      totalPages: this.pagination.totalPages(),\n      hideFirstLast: true,\n      hidePreviousNext: this.pagination.hidePreviousNext(),\n      labels: this.pagination.resolvedLabels(),\n    });\n\n    return {\n      previous: items.find((item) => item.type === 'previous') ?? null,\n      next: items.find((item) => item.type === 'next') ?? null,\n    };\n  });\n\n  /**\n   * The rendered page items. With `responsive` on (the default) the window is trimmed to the richest\n   * configuration that fits the current width; otherwise it's the headless directive's full window.\n   */\n  protected items = computed<PaginationItem[]>(() => {\n    const base: PaginateOptions = {\n      currentPage: this.pagination.page(),\n      totalPages: this.pagination.totalPages(),\n      siblingCount: this.pagination.siblingCount(),\n      boundaryCount: this.pagination.boundaryCount(),\n      hideFirstLast: this.pagination.hideFirstLast(),\n      hidePreviousNext: this.pagination.hidePreviousNext(),\n      labels: this.pagination.resolvedLabels(),\n    };\n\n    if (!this.responsive()) return paginate(base);\n\n    const width = this.hostDimensions()?.client?.width ?? 0;\n\n    if (width <= 0) return paginate(base);\n\n    const maxSlots = this.slotsThatFit(width);\n\n    // Walk configs from richest to sparsest and take the first that fits on one row; if none fit,\n    // fall through to the sparsest (the loop's last assignment).\n    let items = paginate(base);\n\n    for (const attempt of this.fitAttempts(base)) {\n      items = paginate({ ...base, ...attempt });\n\n      if (items.length <= maxSlots) break;\n    }\n\n    return items;\n  });\n\n  /** The href for a link item, or `null` (renders a button) when not in links mode or the item is disabled. */\n  protected hrefFor(item: PaginationItem): string | null {\n    const url = this.urlForPage();\n\n    if (this.renderAs() !== 'links' || url === null || item.page === null || item.disabled) return null;\n\n    return url(item.page);\n  }\n\n  protected select(item: PaginationItem) {\n    if (item.page !== null && !item.disabled) this.pagination.goTo(item.page);\n  }\n\n  /** Intercept a plain left-click on a link item; let modified clicks fall through to the browser. */\n  protected selectLink(event: MouseEvent, item: PaginationItem) {\n    if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0) return;\n\n    event.preventDefault();\n    this.select(item);\n  }\n\n  protected jump(value: string) {\n    const page = Number.parseInt(value, 10);\n\n    if (!Number.isNaN(page)) this.pagination.goTo(page);\n  }\n\n  /** The `[start, end]` tuple as the context the readout labels take. */\n  private rangeContext([start, end]: [number, number]): PaginationRangeContext {\n    return { start, end, totalItems: this.totalItems() ?? 0 };\n  }\n\n  /** The widest string a readout can produce - see {@link widestRangeStatus}. */\n  private widestStatus(variant: 'range' | 'compact') {\n    const labels = this.pagination.resolvedLabels();\n    const total = this.totalItems();\n\n    if (total === null || this.pageSize() === null) {\n      const pages = this.pagination.totalPages();\n\n      return variant === 'compact' ? labels.compactPage(pages, pages) : null;\n    }\n\n    const context: PaginationRangeContext = { start: total, end: total, totalItems: total };\n\n    return variant === 'compact' ? labels.compactRange(context) : labels.range(context);\n  }\n\n  /**\n   * How many item cells fit across `width`. Measures the currently-rendered items rather than the CSS\n   * size tokens: item width is content-/token-driven but independent of how many items there are, so\n   * this can't feed back into a layout loop. Falls back to a rough estimate before the first render.\n   */\n  private slotsThatFit(width: number) {\n    // Read the rendered items untracked: they're the output of this very computation, so subscribing\n    // to them would loop. Item width is count-independent, so a stale-by-one-render read is still right.\n    return untracked(() => {\n      const items = this.itemEls();\n      const itemWidth = items.length ? Math.max(...items.map((ref) => ref.nativeElement.offsetWidth)) : 40;\n      const list = this.listEl()?.nativeElement;\n      const gap = list ? Number.parseFloat(getComputedStyle(list).columnGap) || 0 : 0;\n      const slot = itemWidth + gap;\n\n      if (slot <= 0) return Number.MAX_SAFE_INTEGER;\n\n      return Math.max(1, Math.floor((width + gap) / slot));\n    });\n  }\n\n  /**\n   * Candidate window configs, richest → sparsest: shed siblings, then the extra boundary pages, then\n   * the first/last jumps - never dropping what the consumer already hid. Previous/next always survive;\n   * once even this doesn't fit, {@link compact} takes over with a chevrons-only pager.\n   */\n  private fitAttempts(base: PaginateOptions): Partial<PaginateOptions>[] {\n    const attempts: Partial<PaginateOptions>[] = [];\n    const firstLastVariants = base.hideFirstLast ? [true] : [false, true];\n\n    for (const hideFirstLast of firstLastVariants) {\n      for (let boundaryCount = base.boundaryCount ?? 1; boundaryCount >= 1; boundaryCount--) {\n        for (let siblingCount = base.siblingCount ?? 1; siblingCount >= 0; siblingCount--) {\n          attempts.push({ boundaryCount, siblingCount, hideFirstLast });\n        }\n      }\n    }\n\n    return attempts;\n  }\n}\n","@if (!isCompact() && rangeStatus(); as status) {\n  <p class=\"et-pagination-range\" aria-live=\"polite\">\n    <!-- Invisible width floor; see widestRangeStatus. Stacked with the live text in one grid cell. -->\n    <span class=\"et-pagination-readout-sizer\" aria-hidden=\"true\">{{ widestRangeStatus() }}</span>\n    <span class=\"et-pagination-readout-text\">{{ status }}</span>\n  </p>\n}\n\n<ul #paginationList class=\"et-pagination-list\">\n  @if (isCompact()) {\n    <!-- Compact pager: the readout, then previous/next — readout first so a changing digit count grows\n         leftward and the chevrons hold their place across page changes. -->\n    <li class=\"et-pagination-status\" aria-live=\"polite\">\n      <span class=\"et-pagination-readout-sizer\" aria-hidden=\"true\">{{ widestCompactStatus() }}</span>\n      <span class=\"et-pagination-readout-text\">{{ compactStatus() }}</span>\n    </li>\n    @if (compactControls().previous; as item) {\n      <li [attr.data-type]=\"item.type\" class=\"et-pagination-item\">\n        <ng-container *ngTemplateOutlet=\"control; context: { $implicit: item }\" />\n      </li>\n    }\n    @if (compactControls().next; as item) {\n      <li [attr.data-type]=\"item.type\" class=\"et-pagination-item\">\n        <ng-container *ngTemplateOutlet=\"control; context: { $implicit: item }\" />\n      </li>\n    }\n  } @else {\n    @for (item of items(); track $index) {\n      <li #paginationItem [attr.data-type]=\"item.type\" class=\"et-pagination-item\">\n        @if (item.type === 'ellipsis') {\n          <span class=\"et-pagination-ellipsis\" aria-hidden=\"true\">…</span>\n        } @else {\n          <ng-container *ngTemplateOutlet=\"control; context: { $implicit: item }\" />\n        }\n      </li>\n    }\n  }\n</ul>\n\n<ng-template #control let-item>\n  @if (hrefFor(item); as href) {\n    <a\n      [attr.href]=\"href\"\n      [attr.aria-label]=\"item.label\"\n      [attr.aria-current]=\"item.current ? 'page' : null\"\n      [attr.data-type]=\"item.type\"\n      [variant]=\"item.current ? 'filled' : 'transparent'\"\n      [color]=\"item.current ? 'inherit' : 'surface'\"\n      [class.et-pagination-button--control]=\"item.type !== 'page'\"\n      (click)=\"selectLink($event, item)\"\n      class=\"et-pagination-button\"\n      et-button\n      size=\"sm\"\n    >\n      <ng-container *ngTemplateOutlet=\"inner; context: { $implicit: item }\" />\n    </a>\n  } @else {\n    <button\n      [attr.aria-label]=\"item.label\"\n      [attr.aria-current]=\"item.current ? 'page' : null\"\n      [attr.data-type]=\"item.type\"\n      [variant]=\"item.current ? 'filled' : 'transparent'\"\n      [color]=\"item.current ? 'inherit' : 'surface'\"\n      [disabled]=\"item.disabled\"\n      [class.et-pagination-button--control]=\"item.type !== 'page'\"\n      (click)=\"select(item)\"\n      class=\"et-pagination-button\"\n      et-button\n      size=\"sm\"\n    >\n      <ng-container *ngTemplateOutlet=\"inner; context: { $implicit: item }\" />\n    </button>\n  }\n</ng-template>\n\n@if (showJumpTo()) {\n  <div class=\"et-pagination-jump\">\n    <label [attr.for]=\"jumpInputId\" class=\"et-pagination-jump-label\">\n      {{ pagination.resolvedLabels().jumpTo }}\n    </label>\n    <input\n      #jumpInput\n      [min]=\"1\"\n      [max]=\"pagination.totalPages()\"\n      [id]=\"jumpInputId\"\n      (keydown.enter)=\"jump(jumpInput.value); jumpInput.value = ''\"\n      class=\"et-pagination-jump-input\"\n      inputmode=\"numeric\"\n      type=\"number\"\n    />\n  </div>\n}\n\n<ng-template #inner let-item>\n  @switch (item.type) {\n    @case ('first') {\n      <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" aria-hidden=\"true\">\n        <path\n          d=\"M11 3 6 8l5 5M5 3v10\"\n          stroke=\"currentColor\"\n          stroke-width=\"1.6\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    }\n    @case ('previous') {\n      <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" aria-hidden=\"true\">\n        <path\n          d=\"M10 3 5 8l5 5\"\n          stroke=\"currentColor\"\n          stroke-width=\"1.6\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    }\n    @case ('next') {\n      <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" aria-hidden=\"true\">\n        <path\n          d=\"M6 3l5 5-5 5\"\n          stroke=\"currentColor\"\n          stroke-width=\"1.6\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    }\n    @case ('last') {\n      <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" fill=\"none\" aria-hidden=\"true\">\n        <path\n          d=\"M5 3l5 5-5 5M11 3v10\"\n          stroke=\"currentColor\"\n          stroke-width=\"1.6\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    }\n    @default {\n      {{ item.page }}\n    }\n  }\n</ng-template>\n","import { PaginationDirective } from './headless';\nimport { PageSizeSelectComponent } from './page-size-select.component';\nimport { PaginationComponent } from './pagination.component';\n\nexport const PAGINATION_IMPORTS = [PaginationComponent, PaginationDirective] as const;\n\n/**\n * The \"Items per page\" select that pairs with the paginator (`<et-page-size-select>`). Separate\n * because plenty of paginators want no size control - and because page size is the consumer's state,\n * not the paginator's. A native `<select>`, so it pulls in nothing.\n */\nexport const PAGE_SIZE_SELECT_IMPORTS = [PageSizeSelectComponent] as const;\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { applyHeadTitleBinding, applyLinkBinding } from '@ethlete/core';\nimport { PaginationDirective } from '../headless/pagination.directive';\n\n/**\n * Opt-in paged-SEO for a paginator. Add it next to `etPagination` (or `et-pagination`) and give it a\n * `urlForPage` mapping - it keeps `<link rel=\"canonical\">` pointing at the current page and emits\n * `rel=\"prev\"`/`rel=\"next\"` links so crawlers understand the page series, all via the non-deprecated\n * core head-binding utils (SSR-safe; each binding cleans itself up on destroy).\n *\n * This lives in its own directive on purpose: the base `et-pagination` never imports it, so apps that\n * don't need head management don't pull the title/link stores into their bundle.\n *\n * The bindings go through `applyLinkBinding`/`applyHeadTitleBinding` directly (not\n * `applyCanonicalBinding` etc.), because the `create*PropertyBinding` helpers read their input\n * `untracked` and so would freeze the URL at the first page - we need it to track `page`.\n *\n * @example\n * <et-pagination\n *   [(page)]=\"page\"\n *   [totalPages]=\"totalPages()\"\n *   renderAs=\"links\"\n *   [urlForPage]=\"urlForPage\"\n *   [etPaginationSeo]=\"urlForPage\"\n *   [pageTitle]=\"pageTitle\"\n * />\n */\n@Directive({\n  selector: '[etPaginationSeo]',\n})\nexport class PaginationSeoDirective {\n  private pagination = inject(PaginationDirective);\n\n  /** Maps a page number to its absolute URL - used for the canonical link and prev/next rels. */\n  public urlForPage = input<((page: number) => string) | null>(null, { alias: 'etPaginationSeo' });\n\n  /** Optional: maps a page number to a head `<title>` part (return `null` to leave the title untouched, e.g. on page 1). */\n  public pageTitle = input<((page: number) => string | null) | null>(null);\n\n  constructor() {\n    applyLinkBinding(\n      computed(() => {\n        const url = this.urlForPage();\n\n        return url ? { rel: 'canonical', href: url(this.pagination.page()) } : null;\n      }),\n    );\n\n    applyLinkBinding(\n      computed(() => {\n        const url = this.urlForPage();\n        const page = this.pagination.page();\n\n        return url && page > 1 ? { rel: 'prev', href: url(page - 1) } : null;\n      }),\n    );\n\n    applyLinkBinding(\n      computed(() => {\n        const url = this.urlForPage();\n        const page = this.pagination.page();\n\n        return url && page < this.pagination.totalPages() ? { rel: 'next', href: url(page + 1) } : null;\n      }),\n    );\n\n    applyHeadTitleBinding(\n      computed(() => {\n        const toTitle = this.pageTitle();\n\n        return toTitle ? toTitle(this.pagination.page()) : null;\n      }),\n    );\n  }\n}\n","import {\n  Component,\n  Injector,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  runInInjectionContext,\n} from '@angular/core';\nimport { ProvideColorDirective, injectErrorTheme, injectSuccessTheme, injectWarningTheme } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport {\n  CHECK_ICON,\n  IconDirective,\n  RegisteredIconName,\n  TIMES_ICON,\n  TRIANGLE_EXCLAMATION_ICON,\n  provideIcons,\n} from '../icon';\n\nexport const PROGRESS_STEP_STATES = {\n  COMPLETE: 'complete',\n  CURRENT: 'current',\n  UPCOMING: 'upcoming',\n  SUCCESS: 'success',\n  WARNING: 'warning',\n  ERROR: 'error',\n} as const;\n\nexport type ProgressStepState = (typeof PROGRESS_STEP_STATES)[keyof typeof PROGRESS_STEP_STATES];\n\nconst STATE_ICONS: Partial<Record<ProgressStepState, RegisteredIconName>> = {\n  [PROGRESS_STEP_STATES.COMPLETE]: 'et-check',\n  [PROGRESS_STEP_STATES.SUCCESS]: 'et-check',\n  [PROGRESS_STEP_STATES.WARNING]: 'et-triangle-exclamation',\n  [PROGRESS_STEP_STATES.ERROR]: 'et-times',\n};\n\n/**\n * One step in an `et-progress-steps` row: a numbered marker that becomes an icon once resolved, plus\n * a label. `state` is yours to set per step - nothing is derived from position, so a skipped or\n * out-of-order step is exactly as easy to render as a strictly linear one.\n *\n * `complete` marks a step as done in the surrounding color theme; `success`, `warning` and `error`\n * mark it as done with an outcome and recolor the step in the app's matching semantic theme, each\n * with its own icon so the outcome does not rest on color alone.\n *\n * Project `[etProgressStepDescription]` for a second, muted line under the label - what the step\n * covers, what it produced, why it failed:\n *\n * @example\n * <et-progress-step state=\"current\">\n *   Payment\n *   <span etProgressStepDescription>Card ending 4242</span>\n * </et-progress-step>\n *\n * Write the step as a link or a button to make it interactive - the attribute selector puts the step\n * on the consumer's own element, so `routerLink`, `href` and click handlers all stay where they\n * belong, and the whole step becomes the target:\n *\n * @example\n * <a [routerLink]=\"['/checkout/account']\" state=\"complete\" et-progress-step>Account</a>\n */\n@Component({\n  selector: 'et-progress-step, [et-progress-step]',\n  templateUrl: './progress-step.component.html',\n  styleUrl: './progress-step.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  viewProviders: [provideIcons(CHECK_ICON, TIMES_ICON, TRIANGLE_EXCLAMATION_ICON)],\n  hostDirectives: [ProvideColorDirective, FocusRingDirective],\n  host: {\n    class: 'et-progress-step',\n    '[attr.data-state]': 'state()',\n  },\n})\nexport class ProgressStepComponent {\n  private provideColor = inject(ProvideColorDirective);\n  private injector = inject(Injector);\n\n  public state = input<ProgressStepState>(PROGRESS_STEP_STATES.UPCOMING);\n\n  protected markerIcon = computed(() => STATE_ICONS[this.state()] ?? null);\n\n  constructor() {\n    // Only the theme actually in use is injected, and only once a step renders in that state: a row\n    // that never fails shouldn't force the app to register a `type: 'error'` theme.\n    effect(() => {\n      const state = this.state();\n\n      const theme = runInInjectionContext(this.injector, () => {\n        if (state === PROGRESS_STEP_STATES.SUCCESS) return injectSuccessTheme();\n        if (state === PROGRESS_STEP_STATES.WARNING) return injectWarningTheme();\n        if (state === PROGRESS_STEP_STATES.ERROR) return injectErrorTheme();\n        return null;\n      });\n\n      if (!theme) {\n        this.provideColor.clearForcedColor();\n\n        return;\n      }\n\n      this.provideColor.forceColor(theme);\n    });\n  }\n}\n","<span class=\"et-progress-step-marker\">\n  @if (markerIcon(); as icon) {\n    <i [etIcon]=\"icon\"></i>\n  } @else {\n    <span class=\"et-progress-step-marker-number\"></span>\n  }\n</span>\n\n<span class=\"et-progress-step-text\">\n  <span class=\"et-progress-step-label\"><ng-content /></span>\n\n  <ng-content select=\"[etProgressStepDescription]\" />\n</span>\n","import { Component, input, ViewEncapsulation } from '@angular/core';\n\nexport const PROGRESS_STEPS_ORIENTATIONS = {\n  HORIZONTAL: 'horizontal',\n  VERTICAL: 'vertical',\n} as const;\n\nexport type ProgressStepsOrientation = (typeof PROGRESS_STEPS_ORIENTATIONS)[keyof typeof PROGRESS_STEPS_ORIENTATIONS];\n\n/**\n * Lays out a row - or, with `orientation=\"vertical\"`, a column - of `et-progress-step`s with automatic\n * step numbering and a connecting line between them. Project the steps in order, each with its own\n * `state`.\n *\n * @example\n * <et-progress-steps>\n *   <et-progress-step state=\"complete\">Account</et-progress-step>\n *   <et-progress-step state=\"current\">Shipping</et-progress-step>\n *   <et-progress-step state=\"upcoming\">Payment</et-progress-step>\n * </et-progress-steps>\n */\n@Component({\n  selector: 'et-progress-steps',\n  template: `<ng-content />`,\n  styleUrl: './progress-steps.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-progress-steps',\n    '[attr.data-orientation]': 'orientation()',\n  },\n})\nexport class ProgressStepsComponent {\n  /** Whether the steps run across the row or down a column. The connector follows. */\n  public orientation = input<ProgressStepsOrientation>(PROGRESS_STEPS_ORIENTATIONS.HORIZONTAL);\n}\n","import { ProgressStepComponent } from './progress-step.component';\nimport { ProgressStepsComponent } from './progress-steps.component';\n\nexport const PROGRESS_STEPS_IMPORTS = [ProgressStepsComponent, ProgressStepComponent] as const;\n","export const QUERY_ERROR_ERROR_CODES = {\n  PART_OUTSIDE_QUERY_ERROR: 4000,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { QueryErrorDirective } from './query-error.directive';\n\nexport const QUERY_ERROR_TOKEN = new InjectionToken<QueryErrorDirective>('QUERY_ERROR_TOKEN');\n","import { Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { QUERY_ERROR_ERROR_CODES } from '../query-error-errors';\nimport { QueryErrorView } from '../query-error.types';\nimport { QUERY_ERROR_TOKEN } from './query-error.tokens';\n\n/** What a slot template is handed: the error, already worked out. */\nexport type QueryErrorSlotContext = {\n  $implicit: QueryErrorView;\n  error: QueryErrorView;\n};\n\n/** Dev-mode guard: a slot outside a query error is registered with nothing and silently never renders. */\nconst assertInsideQueryError = (queryError: unknown, directiveName: string) => {\n  if (!ngDevMode) return;\n\n  const element = injectHostElement();\n\n  afterNextRender(() => {\n    if (!queryError) {\n      throw new RuntimeError(\n        QUERY_ERROR_ERROR_CODES.PART_OUTSIDE_QUERY_ERROR,\n        `[${directiveName}] This template must be placed inside an [etQueryError] element ` +\n          '(e.g. <et-query-error>), which is what renders it.',\n        { element },\n      );\n    }\n  });\n};\n\n/**\n * Replaces the title. The error is in scope, so a title can key off the status - \"You are signed out\" reads\n * better for a 401 than the generic table entry does.\n *\n * @example\n * <ng-template etQueryErrorTitle let-error>\n *   {{ error.status === 401 ? 'You are signed out' : error.title }}\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[etQueryErrorTitle]' })\nexport class QueryErrorTitleDirective {\n  public templateRef = inject<TemplateRef<QueryErrorSlotContext>>(TemplateRef);\n\n  constructor() {\n    const queryError = inject(QUERY_ERROR_TOKEN, { optional: true });\n\n    queryError?.titleSlot.set(this.templateRef);\n    assertInsideQueryError(queryError, 'QueryErrorTitleDirective');\n  }\n}\n\n/**\n * Replaces the actions row, retry button included. For adding a \"contact support\" link, or for a recovery that\n * isn't a retry - the retry itself stays available as `queryError.retry()`.\n *\n * @example\n * <ng-template etQueryErrorActions>\n *   <button (click)=\"queryError.retry()\" et-button>Try again</button>\n *   <a routerLink=\"/support\">Contact support</a>\n * </ng-template>\n */\n@Directive({ selector: 'ng-template[etQueryErrorActions]' })\nexport class QueryErrorActionsDirective {\n  public templateRef = inject<TemplateRef<QueryErrorSlotContext>>(TemplateRef);\n\n  constructor() {\n    const queryError = inject(QUERY_ERROR_TOKEN, { optional: true });\n\n    queryError?.actionsSlot.set(this.templateRef);\n    assertInsideQueryError(queryError, 'QueryErrorActionsDirective');\n  }\n}\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\nimport {\n  parseHttpErrorCodeToMessageDe,\n  parseHttpErrorCodeToMessageEn,\n  parseHttpErrorCodeToTitleDe,\n  parseHttpErrorCodeToTitleEn,\n} from '@ethlete/query';\n\n/**\n * Every string a query error renders. Two of them are functions of the HTTP status, because that is the only\n * thing there is to go on when a response carries no message of its own.\n *\n * Defaults come from `@ethlete/query`'s English status tables. A German app opts into the shipped German\n * tables with `provideQueryErrorLabels(queryErrorLabelsForLocale)` (locale-driven via\n * [`injectLocale()`](/core/providers)) or `provideQueryErrorLabels(GERMAN_QUERY_ERROR_LABELS)`; any other\n * language overrides app-wide with {@link provideQueryErrorLabels}, or per instance via the `labels` input.\n */\nexport type QueryErrorLabels = {\n  /** The heading for a status code, e.g. `'Not found'`. */\n  title: (status: number) => string;\n  /**\n   * The message for a status code. Used when the response carried none of its own, and as the replacement when\n   * the response's only message merely repeats the title.\n   */\n  message: (status: number) => string;\n  /** The retry button's label. */\n  retry: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_QUERY_ERROR_LABELS: QueryErrorLabels = {\n  title: (status) => parseHttpErrorCodeToTitleEn(status),\n  message: (status) => parseHttpErrorCodeToMessageEn(status),\n  retry: 'Retry',\n};\n\n/** The built-in German labels. Opt in via `provideQueryErrorLabels(GERMAN_QUERY_ERROR_LABELS)`. */\nexport const GERMAN_QUERY_ERROR_LABELS: QueryErrorLabels = {\n  title: (status) => parseHttpErrorCodeToTitleDe(status),\n  message: (status) => parseHttpErrorCodeToMessageDe(status),\n  retry: 'Erneut versuchen',\n};\n\n/**\n * The label set for a locale. Only English and German ship with the SDK, since those are the only status\n * tables `@ethlete/query` carries; any other locale needs {@link provideQueryErrorLabels}.\n *\n * Not the default: referencing it bundles both languages' status tables, so a German (or bilingual) app\n * opts in with `provideQueryErrorLabels(queryErrorLabelsForLocale)`.\n */\nexport const queryErrorLabelsForLocale = (locale: string): QueryErrorLabels =>\n  locale.toLowerCase().startsWith('de') ? GERMAN_QUERY_ERROR_LABELS : DEFAULT_QUERY_ERROR_LABELS;\n\nconst QUERY_ERROR_LABELS_DEF = /* @__PURE__ */ defineLabels<QueryErrorLabels>(\n  'QUERY_ERROR_LABELS',\n  DEFAULT_QUERY_ERROR_LABELS,\n);\n\n/**\n * Localize a query error's strings for everything below this injector, and read the set in effect here as a\n * signal. Partial - whatever you leave out keeps the English default, so this is also how you localize into\n * another language while keeping English as the base. See {@link defineLabels} for the shape, which every\n * domain in this library shares.\n *\n * @example\n * // German, locale-driven (both shipped languages):\n * provideQueryErrorLabels(queryErrorLabelsForLocale);\n * // a third language:\n * provideQueryErrorLabels({ retry: 'Réessayer', title: () => 'Une erreur est survenue' });\n */\nexport const provideQueryErrorLabels = /* @__PURE__ */ toProvideFn(QUERY_ERROR_LABELS_DEF);\nexport const injectQueryErrorLabels = /* @__PURE__ */ toInjectFn(QUERY_ERROR_LABELS_DEF);\nexport const QUERY_ERROR_LABELS = /* @__PURE__ */ toToken(QUERY_ERROR_LABELS_DEF);\n","import { Directive, TemplateRef, booleanAttribute, computed, input, output, signal } from '@angular/core';\nimport { QueryErrorResponse, queryErrorMessages } from '@ethlete/query';\nimport { QueryErrorLabels, injectQueryErrorLabels } from '../query-error-labels';\nimport { QueryErrorRetryTarget, QueryErrorView } from '../query-error.types';\nimport { QueryErrorSlotContext } from './query-error-slots.directive';\nimport { QUERY_ERROR_TOKEN } from './query-error.tokens';\n\n/** Loosely comparable text, for spotting a message that merely repeats its own title. */\nconst comparable = (text: string) => text.toLowerCase().replace(/\\s/g, '').replace(/[.,]/g, '');\n\n/**\n * Turns a failed query into something renderable: a title, the messages, and whether retrying is worth\n * offering. All state, no markup - `<et-query-error>` is this with the chrome on top.\n *\n * The classification work is not here, deliberately. `@ethlete/query` already normalizes every error shape it\n * knows (class-validator arrays, Symfony violation lists, a bare `{ message }`, a plain string) into\n * `QueryErrorResponse` before it reaches `query.error()`, and it attaches the retry policy's verdict as\n * `retryState`. cdk re-did all of that by hand against the legacy client; this reads what the client already\n * worked out, which is why it is client-agnostic.\n *\n * @example\n * @if (usersQuery.error(); as error) {\n *   <div etQueryError [error]=\"error\" [query]=\"usersQuery\">…</div>\n * }\n */\n@Directive({\n  selector: '[etQueryError]',\n  exportAs: 'etQueryError',\n  providers: [{ provide: QUERY_ERROR_TOKEN, useExisting: QueryErrorDirective }],\n  host: {\n    class: 'et-query-error',\n    // An error that appears after the fact has to announce itself; a reader who has moved on from the button\n    // they pressed would otherwise never learn it failed. `alert` is the assertive one, which is right here -\n    // the request they asked for did not happen.\n    role: 'alert',\n    '[attr.data-status]': 'view()?.status',\n    '[attr.data-list]': 'view()?.isList ? \"\" : null',\n  },\n})\nexport class QueryErrorDirective {\n  private injectedLabels = injectQueryErrorLabels();\n\n  /**\n   * The failed query's error, i.e. `query.error()`. `null` renders nothing, so this can be bound\n   * unconditionally.\n   */\n  public error = input.required<QueryErrorResponse | null>();\n\n  /**\n   * The query to re-run when the reader retries. Optional: without it the retry button still renders (when the\n   * error is retryable) and only emits `retry`, which is the hook for a legacy query or any other recovery.\n   */\n  public query = input<QueryErrorRetryTarget | null>(null);\n\n  /**\n   * Show the retry button even for an error the retry policy considers final - a 404 will not fix itself, and\n   * offering to try again invites the reader to waste their time. Turn it on for a query whose failure really\n   * can be transient in a way the policy can't see. @default false\n   */\n  public alwaysAllowRetry = input(false, { transform: booleanAttribute });\n\n  /** Per-instance label overrides, merged over the locale's set and any `provideQueryErrorLabels`. */\n  public labels = input<Partial<QueryErrorLabels> | null>(null);\n\n  /**\n   * The reader asked to retry. Fires whether or not `query` is set, and after the query has been re-executed\n   * when it is - so it doubles as \"retried\" for analytics.\n   */\n  public retryRequest = output<void>();\n\n  /** @internal Set by `etQueryErrorTitle`; replaces the default heading. */\n  public titleSlot = signal<TemplateRef<QueryErrorSlotContext> | null>(null);\n\n  /** @internal Set by `etQueryErrorActions`; replaces the whole actions row. */\n  public actionsSlot = signal<TemplateRef<QueryErrorSlotContext> | null>(null);\n\n  /** The strings in effect: the locale's set, with the injected and per-instance overrides applied. */\n  public resolvedLabels = computed<QueryErrorLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** The error as something to render, or `null` when there is no error. */\n  public view = computed<QueryErrorView | null>(() => {\n    const error = this.error();\n\n    if (!error) return null;\n\n    const labels = this.resolvedLabels();\n    const status = error.code;\n    const title = labels.title(status);\n    const statusMessage = `${labels.message(status)} (Code: ${status})`;\n    const messages = queryErrorMessages(error);\n    const [single] = messages;\n\n    // Two cases where the response's own message is worse than the status table's sentence:\n    //\n    //  - It repeats the title. Plenty of APIs answer 404 with \"Not found\", and rendering that under the\n    //    heading \"Not found\" tells the reader nothing twice.\n    //  - It *is* Angular's `HttpErrorResponse.message`, which is what the query client falls back to when the\n    //    body carried no message at all - \"Http failure response for /api/users: 500 Internal Server Error\" is\n    //    developer text and must never reach a reader.\n    const isUseless =\n      messages.length === 1 && !!single && (comparable(single) === comparable(title) || single === error.raw.message);\n\n    const resolved = isUseless || messages.length === 0 ? [statusMessage] : messages;\n\n    return {\n      title,\n      messages: resolved,\n      isList: resolved.length > 1,\n      canRetry: this.alwaysAllowRetry() || error.retryState.retry,\n      retryDelay: error.retryState.retry ? error.retryState.delay : 0,\n      status,\n    };\n  });\n\n  /** Whether to offer a retry - false when there is no error at all. */\n  public canRetry = computed(() => this.view()?.canRetry ?? false);\n\n  /**\n   * Re-run the query and tell the world. Bypasses the cache: a retry exists because the last answer was\n   * unusable, so serving it again from memory would make the button do nothing.\n   */\n  public retry() {\n    this.query()?.execute({ options: { allowCache: false } });\n    this.retryRequest.emit();\n  }\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n  AnyLegacyQuery,\n  AnyQueryCollection,\n  AnyV2Query,\n  QueryErrorResponse,\n  RequestError,\n  createQueryErrorResponse,\n  extractQuery,\n} from '@ethlete/query';\nimport { QueryErrorRetryTarget } from './query-error.types';\n\n/**\n * A legacy `RequestError` as the current client's `QueryErrorResponse`.\n *\n * Nearly free, because a legacy error carries the raw `HttpErrorResponse` it came from - so the current\n * client's own normalizer does the classifying, and a legacy error is described by exactly the same code, and\n * judged by the same retry policy, as a current one. That is the point of the adapter: no second\n * classification path to keep in step.\n */\nexport const queryErrorResponseFromLegacyError = (error: RequestError): QueryErrorResponse =>\n  createQueryErrorResponse(error.httpErrorResponse);\n\nexport type LegacyQueryErrorSource = {\n  /** Bind to `<et-query-error [error]=\"…\">`. */\n  error: Signal<QueryErrorResponse | null>;\n  /** Re-runs the legacy query, bypassing its cache. */\n  retry: () => void;\n  /** Bind to `<et-query-error [query]=\"…\">` to have the retry button call `retry` for you. */\n  retryTarget: QueryErrorRetryTarget;\n};\n\n/**\n * Bridges a legacy query into `<et-query-error>`, so an app still on the V2 client gets the components-lib\n * error UI without the component ever naming a legacy type.\n *\n * A separate adapter rather than a union-typed input - the same split as the select and table query adapters -\n * so the component's API describes one client, and this file is the only thing to delete when the last legacy\n * query is gone.\n *\n * The error is passed in rather than read off the query because legacy query state is an `Observable`, not a\n * signal: how you get from `state$` to a signal is the app's choice (`toSignal`, a store, an `async` pipe\n * feeding an input), and this adapter should not make it for you.\n *\n * @example\n * private legacyUsers = legacyQueryErrorSource({\n *   error: toSignal(this.usersQuery.state$.pipe(map((s) => (isQueryStateFailure(s) ? s.error : null)))),\n *   query: () => this.usersQuery,\n * });\n *\n * // template:\n * @if (legacyUsers.error(); as error) {\n *   <et-query-error [error]=\"error\" [query]=\"legacyUsers.retryTarget\" />\n * }\n */\nexport const legacyQueryErrorSource = (config: {\n  error: () => RequestError | null | undefined;\n  query?: () => AnyV2Query | AnyLegacyQuery | AnyQueryCollection | null | undefined;\n}): LegacyQueryErrorSource => {\n  const error = computed(() => {\n    const requestError = config.error();\n\n    return requestError ? queryErrorResponseFromLegacyError(requestError) : null;\n  });\n\n  const retry = () => {\n    // The legacy client spells cache bypassing `skipCache`; the current one spells it `allowCache: false`.\n    extractQuery(config.query?.() ?? null)?.execute({ skipCache: true });\n  };\n\n  return { error, retry, retryTarget: { execute: retry } };\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, inject, input } from '@angular/core';\nimport { ColorTheme, RegisteredColorThemeName } from '@ethlete/core';\nimport { BannerComponent } from '../banner';\nimport { ButtonComponent } from '../button';\nimport { IconDirective, TRIANGLE_EXCLAMATION_ICON, provideIcons } from '../icon';\nimport { QUERY_ERROR_TOKEN, QueryErrorDirective } from './headless';\n\n/**\n * The default rendering of a failed query: a heading from the status, the message (or the violation list), and a\n * retry button when the failure is one worth repeating. It is an `et-banner` of `type=\"error\"` with the query's\n * error in it, so it looks like every other error surface in the app.\n *\n * Render it conditionally on the error, which is also what makes the `role=\"alert\"` announce:\n *\n * @example\n * @if (usersQuery.error(); as error) {\n *   <et-query-error [error]=\"error\" [query]=\"usersQuery\" />\n * }\n *\n * Both the title and the whole actions row are replaceable via `etQueryErrorTitle` / `etQueryErrorActions`, so\n * an app can key the wording off the status or add a support link without forking the component.\n */\n@Component({\n  selector: 'et-query-error',\n  templateUrl: './query-error.component.html',\n  styleUrl: './query-error.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [BannerComponent, ButtonComponent, IconDirective, NgTemplateOutlet],\n  providers: [provideIcons(TRIANGLE_EXCLAMATION_ICON)],\n  hostDirectives: [\n    {\n      directive: QueryErrorDirective,\n      inputs: ['error', 'query', 'alwaysAllowRetry', 'labels'],\n      outputs: ['retryRequest'],\n    },\n  ],\n  host: {\n    class: 'et-query-error-host',\n  },\n})\nexport class QueryErrorComponent {\n  /** @internal Read from the template; also the handle for a consumer reaching in with `viewChild`. */\n  public queryError = inject(QUERY_ERROR_TOKEN);\n\n  /**\n   * The colour theme for the panel and its retry button. Defaults to the app's `type: 'error'` theme, which is\n   * what makes an error look like one - override for a failure that shouldn't read as alarming (a cancelled\n   * request, an empty search).\n   */\n  public color = input<RegisteredColorThemeName | ColorTheme | null>(null);\n}\n","@if (queryError.view(); as error) {\n  <!-- [liveRegion]=\"null\": the host already carries `role=\"alert\"`, and a live region inside one announces twice. -->\n  <et-banner [color]=\"color()\" [liveRegion]=\"null\" type=\"error\">\n    <span etIcon=\"et-triangle-exclamation\"></span>\n\n    <h3 class=\"et-query-error-title\" etBannerHeading>\n      @if (queryError.titleSlot(); as titleSlot) {\n        <ng-container [ngTemplateOutlet]=\"titleSlot\" [ngTemplateOutletContext]=\"{ $implicit: error, error }\" />\n      } @else {\n        {{ error.title }}\n      }\n    </h3>\n\n    @if (error.isList) {\n      <ul class=\"et-query-error-list\" etBannerBody>\n        @for (message of error.messages; track message) {\n          <li class=\"et-query-error-list-item\">{{ message }}</li>\n        }\n      </ul>\n    } @else {\n      <p class=\"et-query-error-message\" etBannerBody>{{ error.messages[0] }}</p>\n    }\n\n    @if (queryError.actionsSlot(); as actionsSlot) {\n      <div class=\"et-query-error-actions\" etBannerAction>\n        <ng-container [ngTemplateOutlet]=\"actionsSlot\" [ngTemplateOutletContext]=\"{ $implicit: error, error }\" />\n      </div>\n    } @else if (error.canRetry) {\n      <div class=\"et-query-error-actions\" etBannerAction>\n        <!-- No [color]: the banner provides the error colour scope, which the button inherits. -->\n        <button (click)=\"queryError.retry()\" et-button type=\"button\">\n          {{ queryError.resolvedLabels().retry }}\n        </button>\n      </div>\n    }\n  </et-banner>\n}\n","import { QueryErrorActionsDirective, QueryErrorTitleDirective } from './headless/query-error-slots.directive';\nimport { QueryErrorDirective } from './headless/query-error.directive';\nimport { QueryErrorComponent } from './query-error.component';\n\nexport const QUERY_ERROR_IMPORTS = [\n  QueryErrorComponent,\n  QueryErrorDirective,\n  QueryErrorTitleDirective,\n  QueryErrorActionsDirective,\n] as const;\n","export const SCHEDULER_ERROR_CODES = {\n  /** An opt-in scheduler feature (e.g. a badge adornment) was used outside an `<et-scheduler>`. */\n  FEATURE_OUTSIDE_SCHEDULER: 4500,\n  /** A view layout directive (e.g. `[etSchedulerMonth]`) was placed outside an `[etScheduler]`. */\n  VIEW_OUTSIDE_SCHEDULER: 4501,\n  /** An edit-surface feature (e.g. an edit field or appointment action) was used outside an `<et-scheduler-edit-surface>`. */\n  EDIT_SURFACE_FEATURE_OUTSIDE_SURFACE: 4502,\n  /** `[etSchedulerSwipeNavigation]` was placed on an element that is not an `[etScheduler]`. */\n  SWIPE_NAVIGATION_OUTSIDE_SCHEDULER: 4503,\n  /** `[etSchedulerAppointmentDrag]` was placed on an element that is not an `[etScheduler]`. */\n  APPOINTMENT_DRAG_OUTSIDE_SCHEDULER: 4504,\n  /** An interaction requires the default edit surface, but it was not registered. */\n  EDIT_SURFACE_NOT_REGISTERED: 4505,\n  /** A `businessHours` entry has a time that is not `HH:mm`, or ends before it starts. */\n  INVALID_BUSINESS_HOURS: 4506,\n} as const;\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the scheduler renders or announces itself. Defaults are English\n * ({@link DEFAULT_SCHEDULER_LABELS}); override them app-wide with {@link provideSchedulerLabels}.\n */\nexport type SchedulerLabels = {\n  /** Accessible label for the control that steps back a period (a month, week or day). */\n  previous: string;\n  /** Accessible label for the control that steps forward a period. */\n  next: string;\n  /** Accessible label for the control that jumps back to today. */\n  today: string;\n  /** Appended to a date to name a time-grid all-day cell, e.g. \"Wednesday, July 15th, 2026, All day\". */\n  allDay: string;\n  /** The \"+N more\" overflow affordance in a day cell with more appointments than it can show. */\n  moreAppointments: (count: number) => string;\n  /** Accessible label for the view-switch control (month/week/day). */\n  switchView: string;\n  /** The month view's name, as shown in the view switch. */\n  month: string;\n  /** The week view's name, as shown in the view switch. */\n  week: string;\n  /** The day view's name, as shown in the view switch. */\n  day: string;\n  /** The agenda view's name, as shown in the view switch. */\n  agenda: string;\n  /** Built-in \"Add appointment\" toolbar action label. */\n  addAppointment: string;\n  /** Fallback heading for the edit surface while the open appointment has no title yet. */\n  untitledAppointment: string;\n  /** Accessible label for the edit surface's ancestor breadcrumb. */\n  ancestors: string;\n  /** Heading above the current appointment's children list in the edit surface. */\n  subAppointments: string;\n  /** Accessible label for the edit surface's action menu trigger. */\n  moreActions: string;\n  /** The edit surface's save button. */\n  save: string;\n  /** The edit surface's cancel button. */\n  cancel: string;\n  /** Built-in \"Add sub-appointment\" action label. */\n  addSubAppointment: string;\n  /** Built-in \"Delete (with descendants)\" action label. */\n  deleteWithDescendants: string;\n  /** Label for the built-in title edit field. */\n  titleField: string;\n  /** Label for the built-in start/end edit field. */\n  timeRangeField: string;\n  /** Accessible name of the start half of the built-in start/end edit field. */\n  startField: string;\n  /** Accessible name of the end half of the built-in start/end edit field. */\n  endField: string;\n  /** Label for the built-in location edit field. */\n  locationField: string;\n  /** Label for the built-in description edit field. */\n  descriptionField: string;\n  /** Label for the built-in color edit field. */\n  colorField: string;\n  /** Label for the color field's \"leave it unset\" choice, shown when a `provideColorPalette` palette exists. */\n  colorFieldNone: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_SCHEDULER_LABELS: SchedulerLabels = {\n  previous: 'Previous',\n  next: 'Next',\n  today: 'Today',\n  allDay: 'All day',\n  moreAppointments: (count) => `+${count} more`,\n  switchView: 'Switch view',\n  month: 'Month',\n  week: 'Week',\n  day: 'Day',\n  agenda: 'Agenda',\n  addAppointment: 'Add appointment',\n  untitledAppointment: 'Untitled appointment',\n  ancestors: 'Ancestor chain',\n  subAppointments: 'Sub-appointments',\n  moreActions: 'More actions',\n  save: 'Save',\n  cancel: 'Cancel',\n  addSubAppointment: 'Add sub-appointment',\n  deleteWithDescendants: 'Delete (with descendants)',\n  titleField: 'Title',\n  timeRangeField: 'When',\n  startField: 'Starts',\n  endField: 'Ends',\n  locationField: 'Location',\n  descriptionField: 'Description',\n  colorField: 'Color',\n  colorFieldNone: 'No color',\n};\n\nconst SCHEDULER_LABELS_DEF = /* @__PURE__ */ defineLabels<SchedulerLabels>(\n  'SCHEDULER_LABELS',\n  DEFAULT_SCHEDULER_LABELS,\n);\n\nexport const provideSchedulerLabels = /* @__PURE__ */ toProvideFn(SCHEDULER_LABELS_DEF);\nexport const injectSchedulerLabels = /* @__PURE__ */ toInjectFn(SCHEDULER_LABELS_DEF);\nexport const SCHEDULER_LABELS = /* @__PURE__ */ toToken(SCHEDULER_LABELS_DEF);\n","import { Appointment, AppointmentId } from '../../scheduler.types';\n\nexport type AppointmentTreeNode<TExtra = unknown> = {\n  appointment: Appointment<TExtra>;\n  depth: number;\n  children: AppointmentTreeNode<TExtra>[];\n};\n\nexport const buildAppointmentTree = <TExtra>(\n  appointments: readonly Appointment<TExtra>[],\n): AppointmentTreeNode<TExtra>[] => {\n  const knownIds = new Set(appointments.map((appointment) => appointment.id));\n  const childrenByParent = new Map<AppointmentId | null, Appointment<TExtra>[]>();\n\n  for (const appointment of appointments) {\n    const parentId = appointment.parentId !== null && knownIds.has(appointment.parentId) ? appointment.parentId : null;\n    const siblings = childrenByParent.get(parentId);\n\n    if (siblings) {\n      siblings.push(appointment);\n    } else {\n      childrenByParent.set(parentId, [appointment]);\n    }\n  }\n\n  const buildLevel = (parentId: AppointmentId | null, depth: number): AppointmentTreeNode<TExtra>[] =>\n    (childrenByParent.get(parentId) ?? []).map((appointment) => ({\n      appointment,\n      depth,\n      children: buildLevel(appointment.id, depth + 1),\n    }));\n\n  return buildLevel(null, 0);\n};\n\nexport const flattenAppointmentTree = <TExtra>(\n  nodes: readonly AppointmentTreeNode<TExtra>[],\n): AppointmentTreeNode<TExtra>[] => nodes.flatMap((node) => [node, ...flattenAppointmentTree(node.children)]);\n\nexport const countDescendants = (node: Pick<AppointmentTreeNode, 'children'>): number =>\n  node.children.reduce((count, child) => count + 1 + countDescendants(child), 0);\n\nexport const findAppointmentNode = <TExtra>(\n  nodes: readonly AppointmentTreeNode<TExtra>[],\n  id: AppointmentId,\n): AppointmentTreeNode<TExtra> | null => {\n  for (const node of nodes) {\n    if (node.appointment.id === id) {\n      return node;\n    }\n\n    const found = findAppointmentNode(node.children, id);\n\n    if (found) {\n      return found;\n    }\n  }\n\n  return null;\n};\n\nexport const collectDescendantIds = (node: Pick<AppointmentTreeNode, 'children'>): AppointmentId[] =>\n  node.children.flatMap((child) => [child.appointment.id, ...collectDescendantIds(child)]);\n","import { Directive, booleanAttribute, computed, input, model, output, signal } from '@angular/core';\nimport {\n  Locale,\n  addDays,\n  addMonths,\n  endOfDay,\n  endOfMonth,\n  endOfWeek,\n  format,\n  startOfDay,\n  startOfMonth,\n  startOfWeek,\n} from 'date-fns';\nimport { injectDateLocale } from '../../forms/date-time/date-time-formats';\nimport {\n  Appointment,\n  AppointmentId,\n  SchedulerAppointmentDrag,\n  SchedulerAppointmentDragMode,\n  SchedulerAppointmentReschedule,\n  SchedulerBusinessHours,\n  SchedulerDraftRange,\n  SchedulerView,\n  SchedulerVisibleRange,\n} from '../scheduler.types';\nimport { buildAppointmentTree, countDescendants } from './internals/scheduler-tree';\n\nexport type { AppointmentTreeNode } from './internals/scheduler-tree';\nexport { countDescendants };\n\n/** 0 = Sunday … 6 = Saturday. */\nexport type SchedulerWeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n/** A localized weekday name, in both its short (`Mon`) and long (`Monday`) form. */\nexport type SchedulerWeekday = {\n  short: string;\n  long: string;\n};\n\n/**\n * Headless scheduler state: the active view, the focused date, the visible date range each view\n * derives from it, and the appointment set arranged into sub-appointment chains. Operates on\n * `Date` objects and plain data only - rendering, badges and the edit surface are separate\n * features layered on top (see `SCHEDULER_FEATURE_HOST`).\n */\n@Directive({\n  selector: '[etScheduler]',\n  exportAs: 'etScheduler',\n})\nexport class SchedulerDirective<TExtra = unknown> {\n  private defaultLocale = injectDateLocale();\n\n  /** Every appointment the scheduler knows about - not pre-filtered to the visible range. */\n  public appointments = input<readonly Appointment<TExtra>[]>([]);\n\n  /** Which view is on screen. */\n  public view = model<SchedulerView>('month');\n\n  /** The date every view's visible range is derived from. */\n  public focusedDate = model<Date>(new Date());\n\n  /** The currently selected appointment, or `null`. */\n  public selectedAppointmentId = model<AppointmentId | null>(null);\n\n  public locale = input<Locale | null>(null);\n  /** Defaults to the locale's week start, else Monday. */\n  public firstDayOfWeek = input<SchedulerWeekStartsOn | undefined>(undefined);\n\n  /**\n   * How many days the agenda view lists, counted from {@link focusedDate}'s own day rather than\n   * from its week - the lever an open-ended \"load more as you scroll\" agenda grows. `null` keeps\n   * the agenda on the week view's window, so switching between the two keeps the same days.\n   */\n  public agendaDays = input<number | null>(null);\n\n  /**\n   * The open hours per weekday. The time grid de-emphasizes every stretch outside them, and a weekday\n   * no entry lists is closed all day. `null` draws no business hours at all.\n   */\n  public businessHours = input<readonly SchedulerBusinessHours[] | null>(null);\n\n  /** Whether the time grid marks the current time on today's column. */\n  public nowIndicator = input(true, { transform: booleanAttribute });\n\n  /**\n   * Emits when a move or resize lands the appointment somewhere else - see\n   * {@link commitAppointmentDrag}. `appointments` is yours, so nothing has changed until you apply\n   * it; the preview drops on release, so persisting asynchronously wants an optimistic write.\n   */\n  public appointmentReschedule = output<SchedulerAppointmentReschedule<TExtra>>();\n\n  public effectiveLocale = computed(() => this.locale() ?? this.defaultLocale);\n\n  public effectiveFirstDayOfWeek = computed<SchedulerWeekStartsOn>(\n    () =>\n      this.firstDayOfWeek() ??\n      (this.effectiveLocale()?.options?.weekStartsOn as SchedulerWeekStartsOn | undefined) ??\n      1,\n  );\n\n  private effectiveAgendaDays = computed(() => {\n    const dayCount = this.agendaDays();\n\n    return dayCount === null ? null : Math.max(1, Math.floor(dayCount));\n  });\n\n  /**\n   * The date span the active view is showing. Month pads out to full weeks, covering the grid's\n   * leading/trailing days from adjacent months; week and agenda share one 7-day window, since\n   * agenda is a flat render of the same days the week view lays out on a grid - unless\n   * {@link agendaDays} opts the agenda out of that window.\n   */\n  public visibleRange = computed<SchedulerVisibleRange>(() => {\n    const date = this.focusedDate();\n    const weekStartsOn = this.effectiveFirstDayOfWeek();\n\n    switch (this.view()) {\n      case 'day':\n        return { start: startOfDay(date), end: endOfDay(date) };\n      case 'agenda': {\n        const dayCount = this.effectiveAgendaDays();\n\n        if (dayCount === null) {\n          return { start: startOfWeek(date, { weekStartsOn }), end: endOfWeek(date, { weekStartsOn }) };\n        }\n\n        return { start: startOfDay(date), end: endOfDay(addDays(date, dayCount - 1)) };\n      }\n      case 'week':\n        return { start: startOfWeek(date, { weekStartsOn }), end: endOfWeek(date, { weekStartsOn }) };\n      case 'month':\n      default:\n        return {\n          start: startOfWeek(startOfMonth(date), { weekStartsOn }),\n          end: endOfWeek(endOfMonth(date), { weekStartsOn }),\n        };\n    }\n  });\n\n  /**\n   * The appointment being moved or resized by a drag, or `null` - see {@link beginAppointmentDrag}.\n   * Set only while the pointer is down.\n   */\n  public appointmentDrag = signal<SchedulerAppointmentDrag<TExtra> | null>(null);\n\n  /**\n   * {@link appointments} with an in-flight {@link appointmentDrag} applied to the one being dragged.\n   * Every layout derives from this, so a drag previews itself in whichever view is on screen.\n   */\n  public effectiveAppointments = computed(() => {\n    const drag = this.appointmentDrag();\n    const appointments = this.appointments();\n\n    if (!drag) return appointments;\n\n    return appointments.map((appointment) =>\n      appointment.id === drag.appointment.id ? { ...appointment, start: drag.start, end: drag.end } : appointment,\n    );\n  });\n\n  /** {@link effectiveAppointments}, arranged into sub-appointment chains - see `buildAppointmentTree`. */\n  public appointmentTree = computed(() => buildAppointmentTree(this.effectiveAppointments()));\n\n  /** The seven weekday names, starting from {@link effectiveFirstDayOfWeek} - for grid/agenda headers. */\n  public weekdays = computed<SchedulerWeekday[]>(() => {\n    const locale = this.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n    const weekStart = startOfWeek(new Date(), { weekStartsOn: this.effectiveFirstDayOfWeek() });\n\n    return Array.from({ length: 7 }, (_, dayIndex) => {\n      const day = addDays(weekStart, dayIndex);\n\n      return { short: format(day, 'EEEEEE', options), long: format(day, 'EEEE', options) };\n    });\n  });\n\n  /** {@link effectiveAppointments} that overlap {@link visibleRange} at all - not yet bucketed per view. */\n  public visibleAppointments = computed(() => {\n    const { start, end } = this.visibleRange();\n\n    return this.effectiveAppointments().filter((appointment) => appointment.start <= end && appointment.end >= start);\n  });\n\n  /** The selected appointment itself, or `null` - resolved from {@link selectedAppointmentId}. */\n  public selectedAppointment = computed(\n    () => this.appointments().find((appointment) => appointment.id === this.selectedAppointmentId()) ?? null,\n  );\n\n  /**\n   * The range being dragged out on a view to create an appointment, or `null`. A view writes it\n   * through {@link beginDraftRange} / {@link extendDraftRange} / {@link commitDraftRange}; the host\n   * clears it with {@link clearDraftRange} once it is done with it.\n   */\n  public draftRange = signal<SchedulerDraftRange | null>(null);\n\n  /**\n   * The element a host should anchor its edit surface to - the appointment that was clicked, or the\n   * range that was just dragged out. `null` whenever the interaction had no element behind it, such\n   * as a selection made by writing {@link selectedAppointmentId} directly.\n   */\n  public surfaceAnchor = signal<HTMLElement | null>(null);\n\n  private draftAnchor: Date | null = null;\n\n  /**\n   * Steps {@link focusedDate} forward by the active view's unit - a day, a week, a month, or the\n   * agenda's own {@link agendaDays} span when it has one.\n   */\n  public next() {\n    this.stepBy(1);\n  }\n\n  /** Steps {@link focusedDate} backward by the active view's unit. */\n  public previous() {\n    this.stepBy(-1);\n  }\n\n  /** Focuses today. */\n  public goToToday() {\n    this.focusedDate.set(startOfDay(new Date()));\n  }\n\n  /**\n   * Draws a drag-to-create range outright, for a view whose units are not minutes on an axis - the\n   * month grid works in whole days and computes both ends itself.\n   */\n  public setDraftRange(range: Omit<SchedulerDraftRange, 'phase'>) {\n    this.draftRange.set({ ...range, phase: 'dragging' });\n  }\n\n  /** Starts a drag-to-create range at `at`. The range covers `at` until {@link extendDraftRange}. */\n  public beginDraftRange(at: Date, minimumDuration: number) {\n    this.draftAnchor = at;\n    this.draftRange.set({ start: at, end: new Date(at.getTime() + minimumDuration), phase: 'dragging' });\n  }\n\n  /** Grows the active drag-to-create range to `to`, flipping it when dragged above its anchor. */\n  public extendDraftRange(to: Date, minimumDuration: number) {\n    const anchor = this.draftAnchor;\n\n    if (!anchor) return;\n\n    const forward = to.getTime() >= anchor.getTime() + minimumDuration;\n    const start = forward ? anchor : new Date(Math.min(to.getTime(), anchor.getTime() - minimumDuration));\n    const end = forward ? to : anchor;\n\n    this.draftRange.set({ start, end, phase: 'dragging' });\n  }\n\n  /**\n   * Releases the drag, leaving the range in place for the host to open its create surface over.\n   * Only a range still being dragged commits: a pointer released on an already committed range -\n   * a click on the drawn selection while its surface is open - must not re-commit it and reopen\n   * that surface.\n   */\n  public commitDraftRange() {\n    this.draftAnchor = null;\n    this.draftRange.update((range) => (range?.phase === 'dragging' ? { ...range, phase: 'committed' } : range));\n  }\n\n  /** Drops the drag-to-create range - a cancelled gesture, or a create surface that closed. */\n  public clearDraftRange() {\n    this.draftAnchor = null;\n    this.draftRange.set(null);\n  }\n\n  /**\n   * Starts moving or resizing an appointment already on the calendar, previewed at its current time\n   * until the first {@link updateAppointmentDrag}. A view calls this once its gesture has committed,\n   * so a press that stays a click never begins one.\n   */\n  public beginAppointmentDrag(appointment: Appointment<TExtra>, mode: SchedulerAppointmentDragMode) {\n    this.appointmentDrag.set({ appointment, mode, start: appointment.start, end: appointment.end });\n  }\n\n  /**\n   * Previews the dragged appointment at `start`-`end`. Both ends come from the view: only it knows\n   * what a pointer position means on its own geometry, and what its snapping and minimum are.\n   */\n  public updateAppointmentDrag(start: Date, end: Date) {\n    this.appointmentDrag.update((drag) => (drag ? { ...drag, start, end } : null));\n  }\n\n  /**\n   * Releases the drag, emitting {@link appointmentReschedule} when it landed on a different range.\n   * The preview goes with it - the appointment renders from {@link appointments} again.\n   */\n  public commitAppointmentDrag() {\n    const drag = this.appointmentDrag();\n\n    this.appointmentDrag.set(null);\n\n    if (!drag) return;\n\n    const { appointment, start, end } = drag;\n\n    if (start.getTime() === appointment.start.getTime() && end.getTime() === appointment.end.getTime()) return;\n\n    this.appointmentReschedule.emit({ appointment: { ...appointment, start, end }, previous: appointment });\n  }\n\n  /** Drops the drag without emitting - a gesture the browser took away, so no range was chosen. */\n  public clearAppointmentDrag() {\n    this.appointmentDrag.set(null);\n  }\n\n  private stepBy(step: 1 | -1) {\n    switch (this.view()) {\n      case 'day':\n        return this.focusedDate.set(addDays(this.focusedDate(), step));\n      case 'agenda':\n        return this.focusedDate.set(addDays(this.focusedDate(), step * (this.effectiveAgendaDays() ?? 7)));\n      case 'week':\n        return this.focusedDate.set(addDays(this.focusedDate(), step * 7));\n      case 'month':\n      default:\n        return this.focusedDate.set(addMonths(this.focusedDate(), step));\n    }\n  }\n}\n","import { endOfDay, isSameDay, startOfDay } from 'date-fns';\nimport { Appointment } from '../../scheduler.types';\nimport { AppointmentTreeNode, flattenAppointmentTree } from './scheduler-tree';\n\n/** One day of an agenda list: the appointments (in chain order, depth-first) that touch it. */\nexport type SchedulerAgendaDay<TExtra = unknown> = {\n  date: Date;\n  today: boolean;\n  nodes: AppointmentTreeNode<TExtra>[];\n};\n\nexport type SchedulerAgendaOptions<TExtra> = {\n  days: readonly Date[];\n  tree: readonly AppointmentTreeNode<TExtra>[];\n  today: Date;\n};\n\nconst appointmentCoversDay = (appointment: Appointment, day: { start: Date; end: Date }) =>\n  appointment.start <= day.end && appointment.end >= day.start;\n\nexport type SchedulerAgendaGuide = 'trunk' | 'gap' | 'branch' | 'last-branch';\n\nexport const buildSchedulerAgendaGuides = <TExtra>(\n  nodes: readonly AppointmentTreeNode<TExtra>[],\n): SchedulerAgendaGuide[][] =>\n  nodes.map((node, index) => {\n    const continuesAt = (depth: number) => {\n      for (const later of nodes.slice(index + 1)) {\n        if (later.depth < depth) return false;\n        if (later.depth === depth) return true;\n      }\n\n      return false;\n    };\n\n    return Array.from({ length: node.depth }, (_, level): SchedulerAgendaGuide => {\n      const isOwnLevel = level === node.depth - 1;\n\n      if (!isOwnLevel) return continuesAt(level + 1) ? 'trunk' : 'gap';\n\n      return continuesAt(node.depth) ? 'branch' : 'last-branch';\n    });\n  });\n\nexport const buildSchedulerAgenda = <TExtra>(options: SchedulerAgendaOptions<TExtra>): SchedulerAgendaDay<TExtra>[] => {\n  const { days, tree, today } = options;\n  const flattened = flattenAppointmentTree(tree);\n\n  return days.map((date) => {\n    const day = { start: startOfDay(date), end: endOfDay(date) };\n\n    return {\n      date,\n      today: isSameDay(date, today),\n      nodes: flattened.filter((node) => appointmentCoversDay(node.appointment, day)),\n    };\n  });\n};\n","import { Directive, afterNextRender, computed, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { eachDayOfInterval } from 'date-fns';\nimport { SCHEDULER_ERROR_CODES } from '../scheduler-errors';\nimport { buildSchedulerAgenda } from './internals/scheduler-agenda';\nimport { SchedulerDirective } from './scheduler.directive';\n\nexport type { SchedulerAgendaDay } from './internals/scheduler-agenda';\n\n/**\n * Groups the host `[etScheduler]`'s appointments into an agenda list: one entry per day of the\n * visible range, each holding the appointments that touch it in chain order. Pure layout - no\n * template structure, see `SchedulerAgendaViewComponent` for the default rendering.\n */\n@Directive({\n  selector: '[etSchedulerAgenda]',\n  exportAs: 'etSchedulerAgenda',\n})\nexport class SchedulerAgendaDirective {\n  private hostElement = injectHostElement();\n\n  private scheduler = inject(SchedulerDirective, { optional: true });\n\n  /** One entry per day of the visible range, laid out by `buildSchedulerAgenda`. */\n  public days = computed(() => {\n    const scheduler = this.scheduler;\n\n    if (!scheduler) {\n      return [];\n    }\n\n    return buildSchedulerAgenda({\n      days: eachDayOfInterval(scheduler.visibleRange()),\n      tree: scheduler.appointmentTree(),\n      today: new Date(),\n    });\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.scheduler) {\n          throw new RuntimeError(\n            SCHEDULER_ERROR_CODES.VIEW_OUTSIDE_SCHEDULER,\n            '[etSchedulerAgenda] must be placed inside an [etScheduler].',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { computed, Directive, input, linkedSignal, output, signal, untracked } from '@angular/core';\nimport { randomId } from '@ethlete/core';\nimport { Appointment, AppointmentId } from '../scheduler.types';\nimport { buildAppointmentTree, collectDescendantIds, findAppointmentNode } from './internals/scheduler-tree';\n\n/**\n * Headless edit-surface state: which appointment is open, the live draft every field reads and\n * writes, and navigation across the sub-appointment chain (ancestors, children, \"add\n * sub-appointment\") - all without any template structure. `<et-scheduler-edit-surface>` applies\n * this via `hostDirectives` and renders the registered fields/actions on top (see\n * `SCHEDULER_EDIT_SURFACE_HOST`).\n */\n@Directive({\n  selector: '[etSchedulerEditSurface]',\n  exportAs: 'etSchedulerEditSurface',\n})\nexport class SchedulerEditSurfaceDirective<TExtra = unknown> {\n  /** The appointment to open the surface for - a freshly-synthesized blank one (with `id` already assigned) for \"add\". */\n  public appointment = input.required<Appointment<TExtra>>();\n\n  /** Every appointment the scheduler knows about - for the ancestor breadcrumb, the children list, and chain-aware actions. */\n  public appointments = input<readonly Appointment<TExtra>[]>([]);\n\n  /** Emits the draft when the surface commits an edit or a new sub-appointment. */\n  public save = output<Appointment<TExtra>>();\n\n  /** Emits every id to remove - the current appointment plus, for \"delete with descendants\", its whole chain. */\n  public deleteAppointments = output<readonly AppointmentId[]>();\n\n  public appointmentTree = computed(() => buildAppointmentTree(this.appointments()));\n\n  private pendingAppointment = signal<Appointment<TExtra> | null>(null);\n\n  /**\n   * Which appointment id the surface is currently showing. Starts at `appointment()`'s id;\n   * breadcrumb/children navigation and \"add sub-appointment\" move it without opening a new dialog.\n   */\n  public currentAppointmentId = linkedSignal(() => this.appointment().id);\n\n  /** The pre-edit snapshot of whichever appointment is currently shown. */\n  public currentAppointment = computed(\n    () =>\n      this.pendingAppointment() ??\n      this.appointments().find((candidate) => candidate.id === this.currentAppointmentId()) ??\n      this.appointment(),\n  );\n\n  /**\n   * The live draft every edit field reads and writes. Resets to `currentAppointment()` whenever\n   * the surface navigates - unsaved edits are discarded on navigation, the same \"edit a copy\"\n   * tradeoff the filter overlay makes. Keyed on which appointment is shown, never on\n   * `appointments()` itself, so a background refetch replacing the array leaves the draft alone.\n   */\n  public draft = linkedSignal<AppointmentId, Appointment<TExtra>>({\n    source: () => this.currentAppointmentId(),\n    computation: () => untracked(() => this.currentAppointment()),\n  });\n\n  /** `currentAppointment()`'s ancestor chain, root first - what the breadcrumb renders. */\n  public ancestors = computed(() => {\n    const byId = new Map(this.appointments().map((candidate) => [candidate.id, candidate]));\n    const chain: Appointment<TExtra>[] = [];\n    const seen = new Set<AppointmentId>();\n\n    let parentId = this.currentAppointment().parentId;\n\n    while (parentId !== null && !seen.has(parentId)) {\n      seen.add(parentId);\n      const parent = byId.get(parentId);\n\n      if (!parent) {\n        break;\n      }\n\n      chain.unshift(parent);\n      parentId = parent.parentId;\n    }\n\n    return chain;\n  });\n\n  private currentNode = computed(() => findAppointmentNode(this.appointmentTree(), this.currentAppointmentId()));\n\n  /** `currentAppointment()`'s direct children - what the children list renders, each navigable via `navigateTo`. */\n  public children = computed(() => this.currentNode()?.children ?? []);\n\n  /**\n   * Navigates to a different appointment already in `appointments()` - a breadcrumb ancestor or a\n   * child in the list. Discards any unsaved draft edits for the appointment navigated away from.\n   */\n  public navigateTo(id: AppointmentId) {\n    this.pendingAppointment.set(null);\n    this.currentAppointmentId.set(id);\n  }\n\n  /** Starts \"add sub-appointment\": synthesizes a blank child of `currentAppointment()` and navigates to it. */\n  public startAddSubAppointment() {\n    const parent = this.currentAppointment();\n\n    const blank: Appointment<TExtra> = {\n      id: randomId(),\n      parentId: parent.id,\n      title: '',\n      start: parent.start,\n      end: parent.end,\n    };\n\n    this.pendingAppointment.set(blank);\n    this.currentAppointmentId.set(blank.id);\n  }\n\n  /** Commits the current draft via `save` - the component closes the dialog on this. */\n  public commit() {\n    this.save.emit(this.draft());\n  }\n\n  /** Emits `deleteAppointments` for the current appointment and every descendant - the component closes the dialog on this. */\n  public requestDelete() {\n    const node = this.currentNode();\n    const ids = node ? [node.appointment.id, ...collectDescendantIds(node)] : [this.currentAppointment().id];\n\n    this.deleteAppointments.emit(ids);\n  }\n}\n","import { inject, InjectionToken, Injector, InputSignal, Signal, Type, WritableSignal } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { SCHEDULER_ERROR_CODES } from '../scheduler-errors';\nimport { Appointment } from '../scheduler.types';\nimport { AppointmentTreeNode } from './internals/scheduler-tree';\n\n/**\n * A feature's contribution to every appointment badge/block - e.g. the title, a time range, the\n * location icon. The scheduler stamps `component` into every rendered badge (month cell, time-grid\n * block, agenda row), so the feature itself never needs a view of its own beyond this one piece.\n */\nexport type SchedulerBadgeAdornment = {\n  /** The component to stamp. It must declare a `node` input to receive the tree node it renders for. */\n  component: Type<{ node: InputSignal<AppointmentTreeNode> }>;\n  /**\n   * The injector the stamped component resolves from - pass the feature's own (`inject(Injector)`)\n   * so the component can inject the feature that registered it. Defaults to the scheduler's own.\n   */\n  injector?: Injector;\n  /**\n   * Render order within the badge - lower renders first. The built-ins take `-10` (color dot),\n   * `0` (title), `10` (time range), `20` (location), `30` (chain count); pick a number relative to\n   * those to place your own adornment among them.\n   *\n   * @default 0\n   */\n  order?: number;\n  /**\n   * Whether this contribution is live. A feature registers once, in its constructor, and gates\n   * itself with this rather than re-registering - so `[etSchedulerBadgeLocation]=\"{ enabled: … }\"`\n   * can be toggled at runtime. Omitted means always on.\n   */\n  enabled?: Signal<boolean>;\n};\n\n/** One entry in the scheduler's own toolbar - e.g. \"Add appointment\". */\nexport type SchedulerToolbarAction = {\n  /** A signal so the built-ins stay correct if the app's labels/locale change at runtime. */\n  label: Signal<string>;\n  /** A registered icon name (see `IconDirective`), shown before the label. */\n  icon?: string;\n  /** Runs the action - called with the scheduler's own feature host still in scope. */\n  run: () => void;\n  /**\n   * Render order - lower renders first. The built-in \"Add appointment\" takes `0`; pick a number\n   * relative to that to place your own action among the built-ins.\n   *\n   * @default 0\n   */\n  order?: number;\n  /** Whether this action is live. Omitted means always on - see {@link SchedulerBadgeAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * What an opt-in scheduler feature can reach on its host `<et-scheduler>`. Features **register**\n * themselves here (the scheduler never queries for them) - modeled on the table's\n * `TableFeatureHost`. This is the read-only surface every feature needs regardless of which one\n * it is; registration points (badge adornments, edit-surface fields, appointment actions, grid\n * overlays) are added here incrementally as the features that need them land.\n */\nexport type SchedulerFeatureHost = {\n  /** The appointments currently in view - already filtered to the visible range. */\n  appointments(): readonly Appointment[];\n  /** {@link appointments}, arranged into sub-appointment chains - see `buildAppointmentTree`. */\n  appointmentTree(): AppointmentTreeNode[];\n  /** The currently selected appointment, or `null`. */\n  selectedAppointment(): Appointment | null;\n  /** The scheduler's host element - a feature is a directive on it, so this is also what it can listen on or measure. */\n  readonly element: HTMLElement;\n  /** Add a piece of content to every appointment badge/block. Call once, from the feature's constructor. */\n  registerBadgeAdornment(adornment: SchedulerBadgeAdornment): void;\n  /** The registered badge adornments, enabled ones only, in render order - what every view renders per badge. */\n  badgeAdornments(): readonly SchedulerBadgeAdornment[];\n  /** Add an entry to the scheduler's own toolbar. Call once, from the feature's constructor. */\n  registerToolbarAction(action: SchedulerToolbarAction): void;\n  /** The registered toolbar actions, enabled ones only, in render order. */\n  toolbarActions(): readonly SchedulerToolbarAction[];\n  /**\n   * Synthesizes a brand-new, blank top-level appointment and opens the default edit surface for\n   * it - only meaningful with that default surface, the same caveat the scheduler's own\n   * click-to-edit behavior already has. Exposed on the host (rather than a feature injecting\n   * `SchedulerComponent` directly) so a built-in toolbar action can call it without a static\n   * import cycle back to the component that bundles it.\n   */\n  addAppointment(): void;\n};\n\nexport const SCHEDULER_FEATURE_HOST = new InjectionToken<SchedulerFeatureHost>('SCHEDULER_FEATURE_HOST');\n\n/** Options every badge adornment feature accepts on top of its own. */\nexport type SchedulerFeatureConfig = {\n  /**\n   * Turn the feature off without removing it - a directive can't be applied conditionally, so this\n   * is how `[etSchedulerBadgeLocation]=\"{ enabled: canShow() }\"` toggles at runtime. @default true\n   */\n  enabled?: boolean;\n};\n\n/**\n * Read a feature's config input. A feature directive is usually written bare\n * (`etSchedulerBadgeLocation`), which Angular binds as the empty string - normalize that to \"no\n * options given\".\n */\nexport const schedulerFeatureConfig = <TConfig extends SchedulerFeatureConfig>(value: TConfig | '') =>\n  value === '' ? ({} as TConfig) : value;\n\n/**\n * Inject the host scheduler from inside a feature. Throws a labelled error when the feature was\n * placed outside an `<et-scheduler>`, where it could only ever silently do nothing.\n */\nexport const injectSchedulerFeatureHost = (feature: string): SchedulerFeatureHost => {\n  const host = inject(SCHEDULER_FEATURE_HOST, { optional: true });\n\n  if (!host) {\n    throw new RuntimeError(\n      SCHEDULER_ERROR_CODES.FEATURE_OUTSIDE_SCHEDULER,\n      `[${feature}] must be used inside an <et-scheduler>.`,\n    );\n  }\n\n  return host;\n};\n\n/**\n * One field the edit surface renders for the appointment it's editing - e.g. the title, the time\n * range, the location. Deliberately not part of {@link SchedulerFeatureHost}: a badge adornment\n * describes one appointment among many visible ones, while an edit field describes the single\n * appointment `<et-scheduler-edit-surface>` has open, so the two hosts expose different data.\n */\nexport type SchedulerEditField = {\n  /**\n   * The component to stamp. Must declare `draft` as a required input typed\n   * `WritableSignal<Appointment>` - the appointment being edited, shared by every field. Call\n   * `draft()` for the writable signal, then read it (`draft()()`) or write it\n   * (`draft().update(a => ({ ...a, title: value }))`).\n   */\n  component: Type<{ draft: InputSignal<WritableSignal<Appointment>> }>;\n  /**\n   * The injector the stamped component resolves from - pass the feature's own (`inject(Injector)`)\n   * so the component can inject the feature that registered it. Defaults to the surface's own.\n   */\n  injector?: Injector;\n  /**\n   * Render order within the surface - lower renders first. The built-ins take `0` (title), `10`\n   * (time range), `20` (location), `30` (description), `40` (color); pick a number relative to\n   * those to place your own field among them.\n   *\n   * @default 0\n   */\n  order?: number;\n  /** Whether this field is live. Omitted means always on - see {@link SchedulerBadgeAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n  /** Whether the field's current draft value is valid - gates the surface's save button. Omitted means always valid. */\n  valid?: Signal<boolean>;\n};\n\n/** One entry in the edit surface's action menu - e.g. \"Add sub-appointment\", \"Delete (with descendants)\". */\nexport type SchedulerAppointmentAction = {\n  /** A signal so the built-ins stay correct if the app's labels/locale change at runtime. */\n  label: Signal<string>;\n  /** A registered icon name (see `IconDirective`), shown before the label. */\n  icon?: string;\n  /** Runs the action - called with the surface's feature host still in scope, so it can read `appointment()`/`appointmentTree()`. */\n  run: () => void;\n  /**\n   * Render order - lower renders first. The built-ins take `0` (\"Add sub-appointment\") and `100`\n   * (\"Delete (with descendants)\").\n   *\n   * @default 0\n   */\n  order?: number;\n  enabled?: Signal<boolean>;\n  /** Renders the action with the app's error color (`et-menu-item`'s `destructive` variant). @default false */\n  destructive?: boolean;\n};\n\n/**\n * What an opt-in edit-surface feature can reach on its host `<et-scheduler-edit-surface>` -\n * modeled on {@link SchedulerFeatureHost}, but scoped to the single appointment the surface has\n * open rather than every visible one.\n */\nexport type SchedulerEditSurfaceHost = {\n  /** The pre-edit snapshot of the appointment currently open - stable identity for actions (e.g. \"add sub-appointment\" reading its id as `parentId`). Live edits are read from the field's own `draft`. */\n  appointment(): Appointment;\n  /** Every appointment the scheduler knows about, arranged into chains - for the ancestor breadcrumb, the children list, and descendant-collecting actions. */\n  appointmentTree(): AppointmentTreeNode[];\n  /** The surface's own host element. */\n  readonly element: HTMLElement;\n  /** Add a field to the surface. Call once, from the feature's constructor. */\n  registerEditField(field: SchedulerEditField): void;\n  /** The registered edit fields, enabled ones only, in render order. */\n  editFields(): readonly SchedulerEditField[];\n  /** Add an entry to the surface's action menu. Call once, from the feature's constructor. */\n  registerAppointmentAction(action: SchedulerAppointmentAction): void;\n  /** The registered appointment actions, enabled ones only, in render order. */\n  appointmentActions(): readonly SchedulerAppointmentAction[];\n};\n\nexport const SCHEDULER_EDIT_SURFACE_HOST = new InjectionToken<SchedulerEditSurfaceHost>('SCHEDULER_EDIT_SURFACE_HOST');\n\n/**\n * Inject the host edit surface from inside a feature. Throws a labelled error when the feature was\n * placed outside an `<et-scheduler-edit-surface>`, where it could only ever silently do nothing.\n */\nexport const injectSchedulerEditSurfaceHost = (feature: string): SchedulerEditSurfaceHost => {\n  const host = inject(SCHEDULER_EDIT_SURFACE_HOST, { optional: true });\n\n  if (!host) {\n    throw new RuntimeError(\n      SCHEDULER_ERROR_CODES.EDIT_SURFACE_FEATURE_OUTSIDE_SURFACE,\n      `[${feature}] must be used inside an <et-scheduler-edit-surface>.`,\n    );\n  }\n\n  return host;\n};\n","import { addDays, endOfDay, endOfMonth, endOfWeek, isSameDay, startOfMonth, startOfWeek } from 'date-fns';\nimport { Appointment } from '../../scheduler.types';\nimport { SchedulerWeekStartsOn } from '../scheduler.directive';\nimport { AppointmentTreeNode, flattenAppointmentTree } from './scheduler-tree';\n\n/** One day cell of a month grid: the appointments it shows, capped, and the rest it hides. */\nexport type SchedulerMonthDayCell<TExtra = unknown> = {\n  date: Date;\n  outsideMonth: boolean;\n  today: boolean;\n  visible: AppointmentTreeNode<TExtra>[];\n  overflow: AppointmentTreeNode<TExtra>[];\n};\n\nexport type SchedulerMonthGridOptions<TExtra> = {\n  focusedDate: Date;\n  weekStartsOn: SchedulerWeekStartsOn;\n  tree: readonly AppointmentTreeNode<TExtra>[];\n  maxVisiblePerCell: number;\n  today: Date;\n};\n\nconst appointmentCoversDay = (appointment: Appointment, day: { start: Date; end: Date }) =>\n  appointment.start <= day.end && appointment.end >= day.start;\n\nexport const buildSchedulerMonthGrid = <TExtra>(\n  options: SchedulerMonthGridOptions<TExtra>,\n): SchedulerMonthDayCell<TExtra>[][] => {\n  const { focusedDate, weekStartsOn, tree, maxVisiblePerCell, today } = options;\n  const month = startOfMonth(focusedDate);\n  const monthEnd = endOfMonth(focusedDate);\n  const flattened = flattenAppointmentTree(tree);\n  const weeks: SchedulerMonthDayCell<TExtra>[][] = [];\n\n  let cursor = startOfWeek(month, { weekStartsOn });\n  const gridEnd = endOfWeek(monthEnd, { weekStartsOn });\n\n  while (cursor <= gridEnd) {\n    const week: SchedulerMonthDayCell<TExtra>[] = [];\n\n    for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\n      const day = { start: cursor, end: endOfDay(cursor) };\n      const matching = flattened.filter((node) => appointmentCoversDay(node.appointment, day));\n\n      week.push({\n        date: cursor,\n        outsideMonth: cursor < month || cursor > monthEnd,\n        today: isSameDay(cursor, today),\n        visible: matching.slice(0, maxVisiblePerCell),\n        overflow: matching.slice(maxVisiblePerCell),\n      });\n\n      cursor = addDays(cursor, 1);\n    }\n\n    weeks.push(week);\n  }\n\n  return weeks;\n};\n","import { Directive, afterNextRender, computed, inject, input, numberAttribute } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { SCHEDULER_ERROR_CODES } from '../scheduler-errors';\nimport { buildSchedulerMonthGrid } from './internals/scheduler-month';\nimport { SchedulerDirective } from './scheduler.directive';\n\nexport type { SchedulerMonthDayCell } from './internals/scheduler-month';\n\n/**\n * Buckets the host `[etScheduler]`'s appointments into a month grid: one day cell per day of the\n * padded month, each capped to {@link maxVisiblePerCell} appointments so the view can render a\n * \"+N more\" affordance for the rest. Pure layout - no template structure, see\n * `SchedulerMonthViewComponent` for the default rendering.\n */\n@Directive({\n  selector: '[etSchedulerMonth]',\n  exportAs: 'etSchedulerMonth',\n})\nexport class SchedulerMonthDirective {\n  private hostElement = injectHostElement();\n\n  private scheduler = inject(SchedulerDirective, { optional: true });\n\n  /** How many appointments a day cell shows before the rest collapse into an overflow count. */\n  public maxVisiblePerCell = input(3, { transform: numberAttribute });\n\n  /** Full weeks covering the focused month, padded with the adjacent months' leading/trailing days. */\n  public weeks = computed(() => {\n    const scheduler = this.scheduler;\n\n    if (!scheduler) {\n      return [];\n    }\n\n    return buildSchedulerMonthGrid({\n      focusedDate: scheduler.focusedDate(),\n      weekStartsOn: scheduler.effectiveFirstDayOfWeek(),\n      tree: scheduler.appointmentTree(),\n      maxVisiblePerCell: this.maxVisiblePerCell(),\n      today: new Date(),\n    });\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.scheduler) {\n          throw new RuntimeError(\n            SCHEDULER_ERROR_CODES.VIEW_OUTSIDE_SCHEDULER,\n            '[etSchedulerMonth] must be placed inside an [etScheduler].',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { RuntimeError } from '@ethlete/core';\nimport { SCHEDULER_ERROR_CODES } from '../../scheduler-errors';\nimport { SchedulerBusinessHours, SchedulerDayOfWeek } from '../../scheduler.types';\n\nconst MINUTES_PER_DAY = 24 * 60;\nconst TIME_PATTERN = /^(\\d{1,2}):([0-5]\\d)$/;\n\n/** A stretch of a time-grid day column, in the same percent units a block uses. */\nexport type SchedulerTimeGridSegment = {\n  /** Percent (0-100) of the day the segment starts at. */\n  offset: number;\n  /** Percent (0-100] of the day the segment covers. */\n  span: number;\n};\n\ntype BusinessRange = { daysOfWeek: readonly SchedulerDayOfWeek[]; start: number; end: number };\n\nconst toMinutes = (time: string) => {\n  const match = TIME_PATTERN.exec(time);\n\n  if (!match) return null;\n\n  const minutes = Number(match[1]) * 60 + Number(match[2]);\n\n  return minutes <= MINUTES_PER_DAY ? minutes : null;\n};\n\nconst toBusinessRange = (entry: SchedulerBusinessHours): BusinessRange | null => {\n  const start = toMinutes(entry.start);\n  const end = toMinutes(entry.end);\n\n  if (start !== null && end !== null && end > start) return { daysOfWeek: entry.daysOfWeek, start, end };\n\n  if (ngDevMode) {\n    throw new RuntimeError(\n      SCHEDULER_ERROR_CODES.INVALID_BUSINESS_HOURS,\n      `businessHours entry \"${entry.start}\"-\"${entry.end}\" is invalid: both ends must be HH:mm between 00:00 and 24:00, and end must be later than start.`,\n    );\n  }\n\n  return null;\n};\n\nconst toSegment = (start: number, end: number): SchedulerTimeGridSegment => ({\n  offset: (start / MINUTES_PER_DAY) * 100,\n  span: ((end - start) / MINUTES_PER_DAY) * 100,\n});\n\n/** The time outside `businessHours` on each of `days`, one list of segments per day. */\nexport const buildSchedulerNonBusinessTime = (\n  days: readonly Date[],\n  businessHours: readonly SchedulerBusinessHours[],\n): SchedulerTimeGridSegment[][] => {\n  const ranges = businessHours.flatMap((entry) => toBusinessRange(entry) ?? []);\n\n  return days.map((day) => {\n    const weekday = day.getDay() as SchedulerDayOfWeek;\n    const open = ranges.filter((range) => range.daysOfWeek.includes(weekday)).sort((a, b) => a.start - b.start);\n    const closed: SchedulerTimeGridSegment[] = [];\n\n    let cursor = 0;\n\n    for (const range of open) {\n      if (range.start > cursor) closed.push(toSegment(cursor, range.start));\n\n      cursor = Math.max(cursor, range.end);\n    }\n\n    if (cursor < MINUTES_PER_DAY) closed.push(toSegment(cursor, MINUTES_PER_DAY));\n\n    return closed;\n  });\n};\n","import { isPlatformBrowser } from '@angular/common';\nimport { PLATFORM_ID, Signal, computed, inject } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { EMPTY, defer, map, startWith, switchMap, timer } from 'rxjs';\n\nconst MINUTE_MS = 60 * 1000;\n\nconst minuteBoundaries = () => defer(() => timer(MINUTE_MS - (Date.now() % MINUTE_MS), MINUTE_MS).pipe(startWith(0)));\n\n/**\n * The current time, re-read on every minute boundary while `enabled` is true. The first tick waits\n * out the remainder of the current minute rather than a whole one, so the signal changes when the\n * clock does. Runs no timer on the server or while disabled.\n *\n * @internal\n */\nexport const injectSchedulerClock = (enabled: () => boolean): Signal<Date> => {\n  const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n  const ticking = computed(() => isBrowser && enabled());\n\n  return toSignal(\n    toObservable(ticking).pipe(\n      switchMap((isTicking) => (isTicking ? minuteBoundaries() : EMPTY)),\n      map(() => new Date()),\n    ),\n    { initialValue: new Date() },\n  );\n};\n","import { endOfDay, isSameDay, startOfDay } from 'date-fns';\nimport { Appointment, AppointmentId } from '../../scheduler.types';\nimport { AppointmentTreeNode, flattenAppointmentTree } from './scheduler-tree';\n\n/** One timed appointment positioned on a time-grid day column. */\nexport type SchedulerTimeGridBlock<TExtra = unknown> = {\n  node: AppointmentTreeNode<TExtra>;\n  /** Percent (0-100) of the day the block starts at - its `inset-block-start` within the day column. */\n  offset: number;\n  /** Percent (0-100] of the day the block spans - its `block-size` within the day column. */\n  span: number;\n  /** 0-based column index within this block's overlap group. */\n  column: number;\n  /** How many columns this block's overlap group needs. A block may span several of them - see `inlineSize`. */\n  columnCount: number;\n  /** Percent (0-100) of the day column's inline size the block starts at - `inset-inline-start`. */\n  inlineOffset: number;\n  /** Percent (0-100] of the day column's inline size the block occupies - `inline-size`. */\n  inlineSize: number;\n};\n\n/** One day column of a time grid: its positioned timed blocks. All-day appointments live in {@link SchedulerTimeGrid.allDay} instead, spanning the days they cover. */\nexport type SchedulerTimeGridDay<TExtra = unknown> = {\n  date: Date;\n  today: boolean;\n  blocks: SchedulerTimeGridBlock<TExtra>[];\n};\n\n/** One all-day appointment positioned across the time grid's day columns. */\nexport type SchedulerTimeGridAllDayEntry<TExtra = unknown> = {\n  node: AppointmentTreeNode<TExtra>;\n  /** Percent (0-100) of the visible range's width the entry starts at - `inset-inline-start`. */\n  inlineOffset: number;\n  /** Percent (0-100] of the visible range's width the entry spans - `inline-size`. */\n  inlineSize: number;\n  /** 0-based stacking row among all-day entries whose day spans overlap. */\n  row: number;\n};\n\nexport type SchedulerTimeGrid<TExtra = unknown> = {\n  days: SchedulerTimeGridDay<TExtra>[];\n  allDay: SchedulerTimeGridAllDayEntry<TExtra>[];\n  allDayRowCount: number;\n};\n\nexport type SchedulerTimeGridOptions<TExtra> = {\n  days: readonly Date[];\n  tree: readonly AppointmentTreeNode<TExtra>[];\n  today: Date;\n};\n\nconst coversDay = (appointment: Appointment, day: { start: Date; end: Date }) =>\n  appointment.start <= day.end && appointment.end >= day.start;\n\ntype ClippedEntry<TExtra> = { node: AppointmentTreeNode<TExtra>; start: number; end: number };\n\nconst packColumns = <TExtra>(\n  entries: readonly ClippedEntry<TExtra>[],\n  day: { startMs: number; ms: number },\n): SchedulerTimeGridBlock<TExtra>[] => {\n  const sorted = [...entries].sort((a, b) => a.start - b.start || a.end - b.end);\n  const blocks: SchedulerTimeGridBlock<TExtra>[] = [];\n\n  let cluster: ClippedEntry<TExtra>[] = [];\n  let clusterEnd = -Infinity;\n\n  const flush = () => {\n    if (cluster.length === 0) return;\n\n    const columnEnds: number[] = [];\n    const columnsByEntry = cluster.map((entry) => {\n      const existingColumn = columnEnds.findIndex((end) => end <= entry.start);\n      const column = existingColumn === -1 ? columnEnds.length : existingColumn;\n\n      columnEnds[column] = entry.end;\n\n      return column;\n    });\n\n    const columnCount = columnEnds.length;\n    const columnSize = 100 / columnCount;\n\n    cluster.forEach((entry, index) => {\n      const column = columnsByEntry[index] ?? 0;\n      const taken = new Set(\n        columnsByEntry.filter((_, other) => {\n          const against = cluster[other];\n\n          return other !== index && !!against && against.start < entry.end && against.end > entry.start;\n        }),\n      );\n\n      let columns = 1;\n\n      while (column + columns < columnCount && !taken.has(column + columns)) columns += 1;\n\n      blocks.push({\n        node: entry.node,\n        offset: ((entry.start - day.startMs) / day.ms) * 100,\n        span: ((entry.end - entry.start) / day.ms) * 100,\n        column,\n        columnCount,\n        inlineOffset: column * columnSize,\n        inlineSize: columns * columnSize,\n      });\n    });\n\n    cluster = [];\n    clusterEnd = -Infinity;\n  };\n\n  for (const entry of sorted) {\n    if (cluster.length > 0 && entry.start >= clusterEnd) {\n      flush();\n    }\n\n    cluster.push(entry);\n    clusterEnd = Math.max(clusterEnd, entry.end);\n  }\n\n  flush();\n\n  return blocks;\n};\n\ntype DaySpan<TExtra> = { node: AppointmentTreeNode<TExtra>; startIndex: number; endIndex: number };\n\nconst packAllDayRows = <TExtra>(\n  spans: readonly DaySpan<TExtra>[],\n): { rowByAppointmentId: Map<AppointmentId, number>; rowCount: number } => {\n  const sorted = [...spans].sort((a, b) => a.startIndex - b.startIndex || a.endIndex - b.endIndex);\n  const rowEnds: number[] = [];\n  const rowByAppointmentId = new Map<AppointmentId, number>();\n\n  for (const span of sorted) {\n    const existingRow = rowEnds.findIndex((end) => end < span.startIndex);\n    const row = existingRow === -1 ? rowEnds.length : existingRow;\n\n    rowEnds[row] = span.endIndex;\n    rowByAppointmentId.set(span.node.appointment.id, row);\n  }\n\n  return { rowByAppointmentId, rowCount: rowEnds.length };\n};\n\nexport const buildSchedulerTimeGrid = <TExtra>(\n  options: SchedulerTimeGridOptions<TExtra>,\n): SchedulerTimeGrid<TExtra> => {\n  const { days, tree, today } = options;\n  const flattened = flattenAppointmentTree(tree);\n\n  const allDaySpans: DaySpan<TExtra>[] = [];\n\n  const dayColumns = days.map((date, index) => {\n    const dayStart = startOfDay(date);\n    const dayEnd = endOfDay(date);\n    const dayStartMs = dayStart.getTime();\n    const dayMs = dayEnd.getTime() - dayStartMs;\n\n    const timed: ClippedEntry<TExtra>[] = [];\n\n    for (const node of flattened) {\n      const { appointment } = node;\n\n      if (!coversDay(appointment, { start: dayStart, end: dayEnd })) {\n        continue;\n      }\n\n      if (appointment.allDay) {\n        const span = allDaySpans.find((entry) => entry.node.appointment.id === appointment.id);\n\n        if (span) {\n          span.endIndex = index;\n        } else {\n          allDaySpans.push({ node, startIndex: index, endIndex: index });\n        }\n\n        continue;\n      }\n\n      timed.push({\n        node,\n        start: Math.max(appointment.start.getTime(), dayStartMs),\n        end: Math.min(appointment.end.getTime(), dayEnd.getTime()),\n      });\n    }\n\n    return {\n      date,\n      today: isSameDay(date, today),\n      blocks: packColumns(timed, { startMs: dayStartMs, ms: dayMs }),\n    };\n  });\n\n  const { rowByAppointmentId, rowCount } = packAllDayRows(allDaySpans);\n  const inlineSize = days.length === 0 ? 0 : 100 / days.length;\n\n  const allDay = allDaySpans.map((span) => ({\n    node: span.node,\n    inlineOffset: span.startIndex * inlineSize,\n    inlineSize: (span.endIndex - span.startIndex + 1) * inlineSize,\n    row: rowByAppointmentId.get(span.node.appointment.id) ?? 0,\n  }));\n\n  return { days: dayColumns, allDay, allDayRowCount: rowCount };\n};\n\nexport const computeInitialScrollHour = <TExtra>(grid: SchedulerTimeGrid<TExtra>, now: Date) => {\n  if (grid.days.some((day) => day.today)) {\n    return Math.max(0, now.getHours() - 1);\n  }\n\n  const offsets = grid.days.flatMap((day) => day.blocks.map((block) => block.offset));\n\n  if (offsets.length === 0) {\n    return 8;\n  }\n\n  return Math.max(0, Math.floor((Math.min(...offsets) / 100) * 24) - 1);\n};\n","import { Directive, afterNextRender, computed, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { eachDayOfInterval, isSameDay, startOfDay } from 'date-fns';\nimport { SCHEDULER_ERROR_CODES } from '../scheduler-errors';\nimport { buildSchedulerNonBusinessTime } from './internals/scheduler-business-hours';\nimport { injectSchedulerClock } from './internals/scheduler-clock';\nimport { buildSchedulerTimeGrid, computeInitialScrollHour } from './internals/scheduler-time-grid';\nimport { SchedulerDirective } from './scheduler.directive';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\n\nexport type { SchedulerTimeGridSegment } from './internals/scheduler-business-hours';\nexport type {\n  SchedulerTimeGridAllDayEntry,\n  SchedulerTimeGridBlock,\n  SchedulerTimeGridDay,\n} from './internals/scheduler-time-grid';\n\n/**\n * Lays the host `[etScheduler]`'s appointments onto an hour-axis time grid: one day column per day\n * of the visible range - a single day for the day view, seven for the week view, same directive,\n * only the range differs. Each column splits into an all-day strip and overlap-packed timed\n * blocks. Pure layout - no template structure, see `SchedulerTimeGridViewComponent` for the\n * default rendering.\n */\n@Directive({\n  selector: '[etSchedulerTimeGrid]',\n  exportAs: 'etSchedulerTimeGrid',\n})\nexport class SchedulerTimeGridDirective {\n  private hostElement = injectHostElement();\n\n  private scheduler = inject(SchedulerDirective, { optional: true });\n\n  private clock = injectSchedulerClock(() => this.scheduler?.nowIndicator() ?? false);\n\n  private grid = computed(() => {\n    const scheduler = this.scheduler;\n\n    if (!scheduler) {\n      return { days: [], allDay: [], allDayRowCount: 0 };\n    }\n\n    return buildSchedulerTimeGrid({\n      days: eachDayOfInterval(scheduler.visibleRange()),\n      tree: scheduler.appointmentTree(),\n      today: new Date(),\n    });\n  });\n\n  /** One day column per day of the visible range. */\n  public days = computed(() => this.grid().days);\n\n  /** All-day appointments, each spanning the visible days it covers and stacked to avoid overlap. */\n  public allDay = computed(() => this.grid().allDay);\n\n  /** How many stacking rows {@link allDay} needs - sizes the all-day lane's reserved space. */\n  public allDayRowCount = computed(() => this.grid().allDayRowCount);\n\n  /**\n   * The time outside the scheduler's `businessHours`, one list of segments per entry of {@link days},\n   * in the same percent units a block uses. Empty lists while no business hours are set.\n   */\n  public nonBusinessTime = computed(() => {\n    const businessHours = this.scheduler?.businessHours();\n    const days = this.days();\n\n    if (!businessHours) return days.map(() => []);\n\n    return buildSchedulerNonBusinessTime(\n      days.map((day) => day.date),\n      businessHours,\n    );\n  });\n\n  /**\n   * Which hour the body's scrollable region should open scrolled to - the current hour when today\n   * is visible, else the earliest appointment's hour, else a business-hours default. See\n   * `SchedulerTimeGridViewComponent`, which reads this once on mount rather than reactively, so\n   * navigating days/weeks afterwards never yanks the user's own scroll position back.\n   */\n  public initialScrollHour = computed(() => computeInitialScrollHour(this.grid(), new Date()));\n\n  /**\n   * Where the clock stands on this grid: the day column the current time falls in, and its `offset`\n   * as a percentage of that column - the same unit {@link days}' blocks use. `null` when today is\n   * not one of the visible days or the scheduler's `nowIndicator` is off. Re-reads the clock every\n   * minute, so whatever renders it moves.\n   */\n  public currentTime = computed(() => {\n    if (!this.scheduler?.nowIndicator()) return null;\n\n    const now = this.clock();\n    const dayIndex = this.days().findIndex((day) => isSameDay(day.date, now));\n\n    if (dayIndex === -1) return null;\n\n    const dayStart = startOfDay(now).getTime();\n\n    return { dayIndex, at: now, offset: ((now.getTime() - dayStart) / DAY_MS) * 100 };\n  });\n\n  /**\n   * The scheduler's drag-to-create range placed on this grid: which day column it belongs to, and\n   * its `offset`/`span` as percentages of that column, the same units {@link days}' blocks use.\n   * `null` when nothing is being dragged or the range sits outside the visible days.\n   */\n  public draftBlock = computed(() => {\n    const draft = this.scheduler?.draftRange();\n\n    if (!draft) return null;\n\n    const dayIndex = this.days().findIndex((day) => isSameDay(day.date, draft.start));\n\n    if (dayIndex === -1) return null;\n\n    const dayStart = startOfDay(draft.start).getTime();\n    const end = Math.min(draft.end.getTime(), dayStart + DAY_MS);\n\n    return {\n      dayIndex,\n      offset: ((draft.start.getTime() - dayStart) / DAY_MS) * 100,\n      span: ((end - draft.start.getTime()) / DAY_MS) * 100,\n      phase: draft.phase,\n    };\n  });\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.scheduler) {\n          throw new RuntimeError(\n            SCHEDULER_ERROR_CODES.VIEW_OUTSIDE_SCHEDULER,\n            '[etSchedulerTimeGrid] must be placed inside an [etScheduler].',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { computed, Directive, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { injectSchedulerLabels } from './scheduler-labels';\n\n/** Options for {@link SchedulerActionAddAppointmentDirective}. */\nexport type SchedulerActionAddAppointmentConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in toolbar action: opens the default edit surface for a brand-new, blank top-level\n * appointment - see `SchedulerFeatureHost.addAppointment`. One of the default pieces\n * `<et-scheduler>` bundles - see `registerToolbarAction`. Depends on the default edit surface\n * (it's what the dialog it opens is), so unlike `etSchedulerActionAddSubAppointment` it has no\n * bare-`[etScheduler]` equivalent - a headless-only composition needs its own \"new appointment\"\n * affordance.\n *\n * @example\n * <et-scheduler [etSchedulerActionAddAppointment]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerActionAddAppointment]',\n  exportAs: 'etSchedulerActionAddAppointment',\n})\nexport class SchedulerActionAddAppointmentDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerActionAddAppointment');\n  private labels = injectSchedulerLabels();\n\n  public config = input({} as SchedulerActionAddAppointmentConfig, {\n    alias: 'etSchedulerActionAddAppointment',\n    transform: schedulerFeatureConfig<SchedulerActionAddAppointmentConfig>,\n  });\n\n  constructor() {\n    this.host.registerToolbarAction({\n      label: computed(() => this.labels().addAppointment),\n      icon: 'et-plus',\n      order: 0,\n      enabled: computed(() => this.config().enabled ?? true),\n      run: () => this.host.addAppointment(),\n    });\n  }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport {\n  injectSchedulerEditSurfaceHost,\n  SchedulerEditSurfaceDirective,\n  SchedulerFeatureConfig,\n  schedulerFeatureConfig,\n} from './headless';\nimport { injectSchedulerLabels } from './scheduler-labels';\n\n/** Options for {@link SchedulerActionAddSubAppointmentDirective}. */\nexport type SchedulerActionAddSubAppointmentConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in appointment action: starts adding a sub-appointment of the surface's current\n * appointment - see `SchedulerEditSurfaceDirective.startAddSubAppointment`. One of the default\n * pieces `<et-scheduler-edit-surface>` bundles - see `registerAppointmentAction`.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerActionAddSubAppointment]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerActionAddSubAppointment]',\n  exportAs: 'etSchedulerActionAddSubAppointment',\n})\nexport class SchedulerActionAddSubAppointmentDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerActionAddSubAppointment');\n  private surface = inject(SchedulerEditSurfaceDirective);\n  private labels = injectSchedulerLabels();\n\n  public config = input({} as SchedulerActionAddSubAppointmentConfig, {\n    alias: 'etSchedulerActionAddSubAppointment',\n    transform: schedulerFeatureConfig<SchedulerActionAddSubAppointmentConfig>,\n  });\n\n  constructor() {\n    this.host.registerAppointmentAction({\n      label: computed(() => this.labels().addSubAppointment),\n      icon: 'et-plus',\n      order: 0,\n      enabled: computed(() => this.config().enabled ?? true),\n      run: () => this.surface.startAddSubAppointment(),\n    });\n  }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport {\n  injectSchedulerEditSurfaceHost,\n  SchedulerEditSurfaceDirective,\n  SchedulerFeatureConfig,\n  schedulerFeatureConfig,\n} from './headless';\nimport { injectSchedulerLabels } from './scheduler-labels';\n\n/** Options for {@link SchedulerActionDeleteDirective}. */\nexport type SchedulerActionDeleteConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in appointment action: deletes the surface's current appointment together with every\n * descendant - see `SchedulerEditSurfaceDirective.requestDelete`. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerAppointmentAction`.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerActionDelete]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerActionDelete]',\n  exportAs: 'etSchedulerActionDelete',\n})\nexport class SchedulerActionDeleteDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerActionDelete');\n  private surface = inject(SchedulerEditSurfaceDirective);\n  private labels = injectSchedulerLabels();\n\n  public config = input({} as SchedulerActionDeleteConfig, {\n    alias: 'etSchedulerActionDelete',\n    transform: schedulerFeatureConfig<SchedulerActionDeleteConfig>,\n  });\n\n  constructor() {\n    this.host.registerAppointmentAction({\n      label: computed(() => this.labels().deleteWithDescendants),\n      icon: 'et-trash',\n      order: 100,\n      destructive: true,\n      enabled: computed(() => this.config().enabled ?? true),\n      run: () => this.surface.requestDelete(),\n    });\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-scheduler-appointment-styles',\n  template: '',\n  styleUrl: './scheduler-appointment-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SchedulerAppointmentStylesComponent {}\n","import { NgComponentOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { ProvideColorDirective, injectStyleManager } from '@ethlete/core';\nimport { format, isSameMonth } from 'date-fns';\nimport { SCHEDULER_FEATURE_HOST, SchedulerAgendaDirective, SchedulerDirective } from './headless';\nimport { buildSchedulerAgendaGuides } from './headless/internals/scheduler-agenda';\nimport { SchedulerAppointmentStylesComponent } from './scheduler-appointment-styles.component';\nimport { Appointment } from './scheduler.types';\n\n/** The default agenda list: one section per visible day, appointments as full-width badges indented by chain depth. */\n@Component({\n  selector: 'et-scheduler-agenda-view',\n  templateUrl: './scheduler-agenda-view.component.html',\n  styleUrl: './scheduler-agenda-view.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ProvideColorDirective, NgComponentOutlet],\n  hostDirectives: [SchedulerAgendaDirective],\n  host: {\n    class: 'et-scheduler-agenda-view',\n  },\n})\nexport class SchedulerAgendaViewComponent {\n  private scheduler = inject(SchedulerDirective, { optional: true });\n  private agenda = inject(SchedulerAgendaDirective);\n\n  private featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });\n\n  protected days = computed(() => {\n    const withAppointments = this.agenda.days().filter((day) => day.nodes.length > 0);\n\n    return withAppointments.map((day, dayIndex) => {\n      const guides = buildSchedulerAgendaGuides(day.nodes);\n      const previous = withAppointments[dayIndex - 1];\n\n      return {\n        ...day,\n        month: previous && !isSameMonth(previous.date, day.date) ? this.monthLabel(day.date) : null,\n        rows: day.nodes.map((node, index) => ({ node, guides: (guides[index] ?? []).slice(-4) })),\n      };\n    });\n  });\n\n  constructor() {\n    injectStyleManager().mount(SchedulerAppointmentStylesComponent);\n  }\n\n  protected badgeAdornments() {\n    return this.featureHost?.badgeAdornments() ?? [];\n  }\n\n  protected weekdayLabel(date: Date) {\n    const locale = this.scheduler?.effectiveLocale();\n\n    return format(date, 'EEE', locale ? { locale } : undefined);\n  }\n\n  protected isSelected(appointment: Appointment) {\n    return this.scheduler?.selectedAppointmentId() === appointment.id;\n  }\n\n  protected select(appointment: Appointment, element: HTMLElement) {\n    this.scheduler?.surfaceAnchor.set(element);\n    this.scheduler?.selectedAppointmentId.set(appointment.id);\n  }\n\n  private monthLabel(date: Date) {\n    const locale = this.scheduler?.effectiveLocale();\n\n    return format(date, 'LLLL yyyy', locale ? { locale } : undefined);\n  }\n}\n","@for (day of days(); track day.date.getTime()) {\n  @if (day.month; as month) {\n    <h3 class=\"et-scheduler-agenda-view-month\">{{ month }}</h3>\n  }\n\n  <div class=\"et-scheduler-agenda-view-day\">\n    <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-agenda-view-day-header\">\n      <span class=\"et-scheduler-agenda-view-day-weekday\">{{ weekdayLabel(day.date) }}</span>\n      <span class=\"et-scheduler-agenda-view-day-date\">{{ day.date.getDate() }}</span>\n    </div>\n\n    <div class=\"et-scheduler-agenda-view-day-appointments\">\n      @for (row of day.rows; track row.node.appointment.id) {\n        <div class=\"et-scheduler-agenda-view-appointment\">\n          @for (guide of row.guides; track $index) {\n            <span [attr.data-guide]=\"guide\" class=\"et-scheduler-agenda-view-guide\" aria-hidden=\"true\"></span>\n          }\n\n          <button\n            #appointmentButton\n            [attr.data-selected]=\"isSelected(row.node.appointment) ? '' : null\"\n            [attr.data-nested]=\"row.node.depth > 0 ? '' : null\"\n            [etProvideColor]=\"row.node.appointment.colorToken ?? null\"\n            (click)=\"select(row.node.appointment, appointmentButton)\"\n            class=\"et-scheduler-appointment\"\n            type=\"button\"\n          >\n            @for (adornment of badgeAdornments(); track $index) {\n              <ng-container\n                *ngComponentOutlet=\"adornment.component; inputs: { node: row.node }; injector: adornment.injector\"\n              />\n            }\n          </button>\n        </div>\n      }\n    </div>\n  </div>\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-scheduler-appointment-drag-styles',\n  template: '',\n  styleUrl: './scheduler-appointment-drag-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SchedulerAppointmentDragStylesComponent {}\n","import { computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { injectStyleManager, RuntimeError } from '@ethlete/core';\nimport { SchedulerDirective, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerAppointmentDragStylesComponent } from './scheduler-appointment-drag-styles.component';\nimport { SCHEDULER_ERROR_CODES } from './scheduler-errors';\n\n/** Options for {@link SchedulerAppointmentDragDirective}. */\nexport type SchedulerAppointmentDragConfig = SchedulerFeatureConfig;\n\n/**\n * Lets appointments already on the calendar be dragged to another time: moved on the month, week and\n * day views, and resized by their edges on the week and day views. A completed drag emits\n * `appointmentReschedule` rather than writing anything - `appointments` stays yours.\n *\n * One of the default pieces `<et-scheduler>` bundles; add it to a bare `[etScheduler]` composition\n * to give its views the same gesture.\n *\n * @example\n * <et-scheduler [etSchedulerAppointmentDrag]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerAppointmentDrag]',\n  exportAs: 'etSchedulerAppointmentDrag',\n})\nexport class SchedulerAppointmentDragDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private scheduler = inject(SchedulerDirective, { optional: true });\n  private styleManager = injectStyleManager();\n\n  public config = input({} as SchedulerAppointmentDragConfig, {\n    alias: 'etSchedulerAppointmentDrag',\n    transform: schedulerFeatureConfig<SchedulerAppointmentDragConfig>,\n  });\n\n  /** Whether the views should start a drag at all - what each of them checks on `pointerdown`. */\n  public isEnabled = computed(() => this.config().enabled ?? true);\n\n  constructor() {\n    effect(() => {\n      if (this.isEnabled()) {\n        this.styleManager.mount(SchedulerAppointmentDragStylesComponent);\n      }\n    });\n\n    if (!this.scheduler) {\n      throw new RuntimeError(\n        SCHEDULER_ERROR_CODES.APPOINTMENT_DRAG_OUTSIDE_SCHEDULER,\n        '[etSchedulerAppointmentDrag] must be used on an <et-scheduler> or an [etScheduler] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n  }\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { CHEVRON_ICON, IconDirective, provideIcons } from '../icon';\nimport { AppointmentTreeNode, countDescendants } from './headless';\n\n/**\n * The sub-appointment chain piece of an appointment badge, stamped by `etSchedulerBadgeChainCount`.\n * Renders a chevron and the total descendant count (every depth, not just direct children); hidden\n * for an appointment with no children.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-badge-chain-count',\n  template: `\n    @if (count(); as count) {\n      <span class=\"et-scheduler-appointment-chain-count\">\n        <i class=\"et-scheduler-appointment-chain-count-icon\" aria-hidden=\"true\" etIcon=\"et-chevron\"></i>\n        {{ count }}\n      </span>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(CHEVRON_ICON)],\n})\nexport class SchedulerBadgeChainCountComponent {\n  public node = input.required<AppointmentTreeNode>();\n\n  protected count = computed(() => {\n    const count = countDescendants(this.node());\n\n    return count > 0 ? count : null;\n  });\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerBadgeChainCountComponent } from './scheduler-badge-chain-count.component';\n\n/** Options for {@link SchedulerBadgeChainCountDirective}. */\nexport type SchedulerBadgeChainCountConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in badge adornment: a chevron and the appointment's total descendant count (every depth) -\n * hidden for an appointment with no sub-appointments. One of the default pieces `<et-scheduler>`\n * bundles - see `registerBadgeAdornment`.\n *\n * @example\n * <et-scheduler [etSchedulerBadgeChainCount]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerBadgeChainCount]',\n  exportAs: 'etSchedulerBadgeChainCount',\n})\nexport class SchedulerBadgeChainCountDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerBadgeChainCount');\n\n  public config = input({} as SchedulerBadgeChainCountConfig, {\n    alias: 'etSchedulerBadgeChainCount',\n    transform: schedulerFeatureConfig<SchedulerBadgeChainCountConfig>,\n  });\n\n  constructor() {\n    this.host.registerBadgeAdornment({\n      component: SchedulerBadgeChainCountComponent,\n      injector: inject(Injector),\n      order: 30,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AppointmentTreeNode } from './headless';\n\n/**\n * The color-dot piece of an appointment badge, stamped by `etSchedulerBadgeColorDot`. Its color\n * comes from the ambient `[etProvideColor]` the badge button already carries, so this component\n * renders no color of its own - see the shared appointment badge styles.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-badge-color-dot',\n  template: `<span class=\"et-scheduler-appointment-dot\" aria-hidden=\"true\"></span>`,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SchedulerBadgeColorDotComponent {\n  public node = input.required<AppointmentTreeNode>();\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerBadgeColorDotComponent } from './scheduler-badge-color-dot.component';\n\n/** Options for {@link SchedulerBadgeColorDotDirective}. */\nexport type SchedulerBadgeColorDotConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in badge adornment: the small dot in the appointment's own color, ahead of its title. One\n * of the default pieces `<et-scheduler>` bundles - see `registerBadgeAdornment`.\n *\n * @example\n * <et-scheduler [etSchedulerBadgeColorDot]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerBadgeColorDot]',\n  exportAs: 'etSchedulerBadgeColorDot',\n})\nexport class SchedulerBadgeColorDotDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerBadgeColorDot');\n\n  public config = input({} as SchedulerBadgeColorDotConfig, {\n    alias: 'etSchedulerBadgeColorDot',\n    transform: schedulerFeatureConfig<SchedulerBadgeColorDotConfig>,\n  });\n\n  constructor() {\n    this.host.registerBadgeAdornment({\n      component: SchedulerBadgeColorDotComponent,\n      injector: inject(Injector),\n      order: -10,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { IconDirective, LOCATION_ICON, provideIcons } from '../icon';\nimport { AppointmentTreeNode } from './headless';\n\n/**\n * The location piece of an appointment badge, stamped by `etSchedulerBadgeLocation`. Renders\n * nothing when the appointment has no `location`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-badge-location',\n  template: `\n    @if (node().appointment.location; as location) {\n      <span class=\"et-scheduler-appointment-location\">\n        <i class=\"et-scheduler-appointment-location-icon\" aria-hidden=\"true\" etIcon=\"et-location\"></i>\n        <span class=\"et-scheduler-appointment-location-text\">{{ location }}</span>\n      </span>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(LOCATION_ICON)],\n})\nexport class SchedulerBadgeLocationComponent {\n  public node = input.required<AppointmentTreeNode>();\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerBadgeLocationComponent } from './scheduler-badge-location.component';\n\n/** Options for {@link SchedulerBadgeLocationDirective}. */\nexport type SchedulerBadgeLocationConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in badge adornment: the appointment's `location`, with a pin icon - hidden when unset.\n * One of the default pieces `<et-scheduler>` bundles - see `registerBadgeAdornment`.\n *\n * @example\n * <et-scheduler [etSchedulerBadgeLocation]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerBadgeLocation]',\n  exportAs: 'etSchedulerBadgeLocation',\n})\nexport class SchedulerBadgeLocationDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerBadgeLocation');\n\n  public config = input({} as SchedulerBadgeLocationConfig, {\n    alias: 'etSchedulerBadgeLocation',\n    transform: schedulerFeatureConfig<SchedulerBadgeLocationConfig>,\n  });\n\n  constructor() {\n    this.host.registerBadgeAdornment({\n      component: SchedulerBadgeLocationComponent,\n      injector: inject(Injector),\n      order: 20,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { format } from 'date-fns';\nimport { AppointmentTreeNode, SchedulerDirective } from './headless';\n\n/**\n * The time-range piece of an appointment badge, stamped by `etSchedulerBadgeTimeRange`. Renders\n * nothing for an all-day appointment, which has no meaningful start/end time to show.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-badge-time-range',\n  template: `\n    @if (range(); as range) {\n      <span class=\"et-scheduler-appointment-time-range\">{{ range }}</span>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SchedulerBadgeTimeRangeComponent {\n  private scheduler = inject(SchedulerDirective, { optional: true });\n  public node = input.required<AppointmentTreeNode>();\n\n  protected range = computed(() => {\n    const appointment = this.node().appointment;\n\n    if (appointment.allDay) {\n      return null;\n    }\n\n    const locale = this.scheduler?.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n\n    return `${format(appointment.start, 'HH:mm', options)}–${format(appointment.end, 'HH:mm', options)}`;\n  });\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerBadgeTimeRangeComponent } from './scheduler-badge-time-range.component';\n\n/** Options for {@link SchedulerBadgeTimeRangeDirective}. */\nexport type SchedulerBadgeTimeRangeConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in badge adornment: the appointment's `start`–`end` time, hidden for an all-day\n * appointment. One of the default pieces `<et-scheduler>` bundles - see `registerBadgeAdornment`.\n *\n * @example\n * <et-scheduler [etSchedulerBadgeTimeRange]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerBadgeTimeRange]',\n  exportAs: 'etSchedulerBadgeTimeRange',\n})\nexport class SchedulerBadgeTimeRangeDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerBadgeTimeRange');\n\n  public config = input({} as SchedulerBadgeTimeRangeConfig, {\n    alias: 'etSchedulerBadgeTimeRange',\n    transform: schedulerFeatureConfig<SchedulerBadgeTimeRangeConfig>,\n  });\n\n  constructor() {\n    this.host.registerBadgeAdornment({\n      component: SchedulerBadgeTimeRangeComponent,\n      injector: inject(Injector),\n      order: 10,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AppointmentTreeNode } from './headless';\n\n/**\n * The title piece of an appointment badge, stamped by `etSchedulerBadgeTitle`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-badge-title',\n  template: `<span class=\"et-scheduler-appointment-title\">{{ node().appointment.title }}</span>`,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SchedulerBadgeTitleComponent {\n  public node = input.required<AppointmentTreeNode>();\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerFeatureHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerBadgeTitleComponent } from './scheduler-badge-title.component';\n\n/** Options for {@link SchedulerBadgeTitleDirective}. */\nexport type SchedulerBadgeTitleConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in badge adornment: the appointment's title. One of the default pieces `<et-scheduler>`\n * bundles - see `registerBadgeAdornment`.\n *\n * @example\n * <et-scheduler [etSchedulerBadgeTitle]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerBadgeTitle]',\n  exportAs: 'etSchedulerBadgeTitle',\n})\nexport class SchedulerBadgeTitleDirective {\n  private host = injectSchedulerFeatureHost('etSchedulerBadgeTitle');\n\n  public config = input({} as SchedulerBadgeTitleConfig, {\n    alias: 'etSchedulerBadgeTitle',\n    transform: schedulerFeatureConfig<SchedulerBadgeTitleConfig>,\n  });\n\n  constructor() {\n    this.host.registerBadgeAdornment({\n      component: SchedulerBadgeTitleComponent,\n      injector: inject(Injector),\n      order: 0,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, input, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { injectColorPalette, ProvideColorDirective } from '@ethlete/core';\nimport { FORM_FIELD_IMPORTS } from '../forms/form-field';\nimport { INPUT_IMPORTS } from '../forms/input';\nimport { RADIO_GROUP_IMPORTS } from '../forms/selection-list';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/**\n * The color piece of the edit surface, stamped by `etSchedulerEditColor`. A swatch picker over the\n * app's `provideColorPalette` palette, or - with no palette in scope - a plain text field for\n * `colorToken`, since theme names are app-registered (see `theming`) and the SDK has no set of its\n * own to offer as choices.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-edit-color',\n  template: `\n    @if (palette; as entries) {\n      <et-radio-group [value]=\"selectedToken()\" (valueChange)=\"selectColorToken($event)\" orientation=\"horizontal\">\n        <et-label>{{ label() }}</et-label>\n\n        <et-radio [value]=\"null\">\n          <span class=\"et-scheduler-edit-color-swatch\" aria-hidden=\"true\" data-empty></span>\n          {{ noneLabel() }}\n        </et-radio>\n\n        @for (entry of entries; track entry.token) {\n          <et-radio [value]=\"entry.token\" [etProvideColor]=\"entry.token\">\n            <span class=\"et-scheduler-edit-color-swatch\" aria-hidden=\"true\"></span>\n            {{ entry.label }}\n          </et-radio>\n        }\n      </et-radio-group>\n    } @else {\n      <et-form-field>\n        <et-label>{{ label() }}</et-label>\n        <et-input [value]=\"textValue()\" (valueChange)=\"updateColorToken($event)\" />\n      </et-form-field>\n    }\n  `,\n  styleUrl: './scheduler-edit-color.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS, ...RADIO_GROUP_IMPORTS, ProvideColorDirective],\n})\nexport class SchedulerEditColorComponent {\n  private labels = injectSchedulerLabels();\n\n  protected palette = injectColorPalette({ optional: true });\n\n  public draft = input.required<WritableSignal<Appointment>>();\n\n  public label = computed(() => this.labels().colorField);\n\n  protected noneLabel = computed(() => this.labels().colorFieldNone);\n\n  protected textValue = computed(() => this.draft()().colorToken ?? '');\n\n  protected selectedToken = computed(() => this.draft()().colorToken ?? null);\n\n  protected selectColorToken(value: unknown) {\n    this.updateColorToken(typeof value === 'string' ? value : '');\n  }\n\n  protected updateColorToken(value: string) {\n    this.draft().update((appointment) => ({ ...appointment, colorToken: value || undefined }));\n  }\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerEditSurfaceHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerEditColorComponent } from './scheduler-edit-color.component';\n\n/** Options for {@link SchedulerEditColorDirective}. */\nexport type SchedulerEditColorConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in edit-surface field: the appointment's `colorToken`. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerEditField`.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerEditColor]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerEditColor]',\n  exportAs: 'etSchedulerEditColor',\n})\nexport class SchedulerEditColorDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerEditColor');\n\n  public config = input({} as SchedulerEditColorConfig, {\n    alias: 'etSchedulerEditColor',\n    transform: schedulerFeatureConfig<SchedulerEditColorConfig>,\n  });\n\n  constructor() {\n    this.host.registerEditField({\n      component: SchedulerEditColorComponent,\n      injector: inject(Injector),\n      order: 40,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, input, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { FORM_FIELD_IMPORTS } from '../forms/form-field';\nimport { TEXTAREA_IMPORTS } from '../forms/textarea';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/**\n * The description piece of the edit surface, stamped by `etSchedulerEditDescription`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-edit-description',\n  template: `\n    <et-form-field>\n      <et-label>{{ label() }}</et-label>\n      <et-textarea [value]=\"value()\" (valueChange)=\"updateDescription($event)\" />\n    </et-form-field>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [...FORM_FIELD_IMPORTS, ...TEXTAREA_IMPORTS],\n})\nexport class SchedulerEditDescriptionComponent {\n  private labels = injectSchedulerLabels();\n\n  public draft = input.required<WritableSignal<Appointment>>();\n\n  public label = computed(() => this.labels().descriptionField);\n\n  protected value = computed(() => this.draft()().description ?? '');\n\n  protected updateDescription(value: string) {\n    this.draft().update((appointment) => ({ ...appointment, description: value || undefined }));\n  }\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerEditSurfaceHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerEditDescriptionComponent } from './scheduler-edit-description.component';\n\n/** Options for {@link SchedulerEditDescriptionDirective}. */\nexport type SchedulerEditDescriptionConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in edit-surface field: the appointment's `description`. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerEditField`.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerEditDescription]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerEditDescription]',\n  exportAs: 'etSchedulerEditDescription',\n})\nexport class SchedulerEditDescriptionDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerEditDescription');\n\n  public config = input({} as SchedulerEditDescriptionConfig, {\n    alias: 'etSchedulerEditDescription',\n    transform: schedulerFeatureConfig<SchedulerEditDescriptionConfig>,\n  });\n\n  constructor() {\n    this.host.registerEditField({\n      component: SchedulerEditDescriptionComponent,\n      injector: inject(Injector),\n      order: 30,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, input, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { FORM_FIELD_IMPORTS } from '../forms/form-field';\nimport { INPUT_IMPORTS } from '../forms/input';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/**\n * The location piece of the edit surface, stamped by `etSchedulerEditLocation`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-edit-location',\n  template: `\n    <et-form-field>\n      <et-label>{{ label() }}</et-label>\n      <et-input [value]=\"value()\" (valueChange)=\"updateLocation($event)\" />\n    </et-form-field>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS],\n})\nexport class SchedulerEditLocationComponent {\n  private labels = injectSchedulerLabels();\n\n  public draft = input.required<WritableSignal<Appointment>>();\n\n  public label = computed(() => this.labels().locationField);\n\n  protected value = computed(() => this.draft()().location ?? '');\n\n  protected updateLocation(value: string) {\n    this.draft().update((appointment) => ({ ...appointment, location: value || undefined }));\n  }\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { injectSchedulerEditSurfaceHost, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SchedulerEditLocationComponent } from './scheduler-edit-location.component';\n\n/** Options for {@link SchedulerEditLocationDirective}. */\nexport type SchedulerEditLocationConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in edit-surface field: the appointment's `location`. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerEditField`.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerEditLocation]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerEditLocation]',\n  exportAs: 'etSchedulerEditLocation',\n})\nexport class SchedulerEditLocationDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerEditLocation');\n\n  public config = input({} as SchedulerEditLocationConfig, {\n    alias: 'etSchedulerEditLocation',\n    transform: schedulerFeatureConfig<SchedulerEditLocationConfig>,\n  });\n\n  constructor() {\n    this.host.registerEditField({\n      component: SchedulerEditLocationComponent,\n      injector: inject(Injector),\n      order: 20,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, input, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { format, parse } from 'date-fns';\nimport { injectDateFormat } from '../forms/date-time/date-time-formats';\nimport { DATE_TIME_RANGE_INPUT_IMPORTS } from '../forms/date-time/date-time-range-input/date-time-range-input.imports';\nimport { DateTimeRangeValue } from '../forms/date-time/date-time-range-input/headless';\nimport { FORM_FIELD_IMPORTS } from '../forms/form-field';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/**\n * The start/end piece of the edit surface, stamped by `etSchedulerEditTimeRange`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-edit-time-range',\n  template: `\n    <et-form-field class=\"et-scheduler-edit-time-range-field\">\n      <et-label>{{ label() }}</et-label>\n      <et-date-time-range-input\n        [value]=\"rangeValue()\"\n        [startAriaLabel]=\"startLabel()\"\n        [endAriaLabel]=\"endLabel()\"\n        (valueChange)=\"updateRange($event)\"\n      />\n    </et-form-field>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [...FORM_FIELD_IMPORTS, ...DATE_TIME_RANGE_INPUT_IMPORTS],\n  host: {\n    class: 'et-scheduler-edit-time-range',\n  },\n})\nexport class SchedulerEditTimeRangeComponent {\n  private labels = injectSchedulerLabels();\n  private dateFormat = injectDateFormat();\n\n  public draft = input.required<WritableSignal<Appointment>>();\n\n  public label = computed(() => this.labels().timeRangeField);\n  public startLabel = computed(() => this.labels().startField);\n  public endLabel = computed(() => this.labels().endField);\n\n  protected rangeValue = computed<DateTimeRangeValue>(() => ({\n    start: format(this.draft()().start, this.dateFormat),\n    end: format(this.draft()().end, this.dateFormat),\n  }));\n\n  protected updateRange(value: DateTimeRangeValue) {\n    this.draft().update((appointment) => ({\n      ...appointment,\n      start: value.start === null ? appointment.start : parse(value.start, this.dateFormat, appointment.start),\n      end: value.end === null ? appointment.end : parse(value.end, this.dateFormat, appointment.end),\n    }));\n  }\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport {\n  injectSchedulerEditSurfaceHost,\n  SchedulerEditSurfaceDirective,\n  SchedulerFeatureConfig,\n  schedulerFeatureConfig,\n} from './headless';\nimport { SchedulerEditTimeRangeComponent } from './scheduler-edit-time-range.component';\n\n/** Options for {@link SchedulerEditTimeRangeDirective}. */\nexport type SchedulerEditTimeRangeConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in edit-surface field: the appointment's `start`/`end`. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerEditField`. Invalid while `end` is before\n * `start`, which gates the surface's save button.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerEditTimeRange]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerEditTimeRange]',\n  exportAs: 'etSchedulerEditTimeRange',\n})\nexport class SchedulerEditTimeRangeDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerEditTimeRange');\n  private surface = inject(SchedulerEditSurfaceDirective);\n\n  public config = input({} as SchedulerEditTimeRangeConfig, {\n    alias: 'etSchedulerEditTimeRange',\n    transform: schedulerFeatureConfig<SchedulerEditTimeRangeConfig>,\n  });\n\n  constructor() {\n    this.host.registerEditField({\n      component: SchedulerEditTimeRangeComponent,\n      injector: inject(Injector),\n      order: 10,\n      enabled: computed(() => this.config().enabled ?? true),\n      valid: computed(() => this.surface.draft().end >= this.surface.draft().start),\n    });\n  }\n}\n","import { Component, computed, input, ViewEncapsulation, WritableSignal } from '@angular/core';\nimport { FORM_FIELD_IMPORTS } from '../forms/form-field';\nimport { INPUT_IMPORTS } from '../forms/input';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/**\n * The title piece of the edit surface, stamped by `etSchedulerEditTitle`.\n *\n * @internal\n */\n@Component({\n  selector: 'et-scheduler-edit-title',\n  template: `\n    <et-form-field>\n      <et-label>{{ label() }}</et-label>\n      <et-input [value]=\"value()\" (valueChange)=\"updateTitle($event)\" />\n    </et-form-field>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [...FORM_FIELD_IMPORTS, ...INPUT_IMPORTS],\n})\nexport class SchedulerEditTitleComponent {\n  private labels = injectSchedulerLabels();\n\n  public draft = input.required<WritableSignal<Appointment>>();\n\n  public label = computed(() => this.labels().titleField);\n\n  protected value = computed(() => this.draft()().title);\n\n  protected updateTitle(value: string) {\n    this.draft().update((appointment) => ({ ...appointment, title: value }));\n  }\n}\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport {\n  injectSchedulerEditSurfaceHost,\n  SchedulerEditSurfaceDirective,\n  SchedulerFeatureConfig,\n  schedulerFeatureConfig,\n} from './headless';\nimport { SchedulerEditTitleComponent } from './scheduler-edit-title.component';\n\n/** Options for {@link SchedulerEditTitleDirective}. */\nexport type SchedulerEditTitleConfig = SchedulerFeatureConfig;\n\n/**\n * Built-in edit-surface field: the appointment's title. One of the default pieces\n * `<et-scheduler-edit-surface>` bundles - see `registerEditField`. Required - the field is\n * invalid while the draft's title is blank, which gates the surface's save button.\n *\n * @example\n * <et-scheduler-edit-surface [etSchedulerEditTitle]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerEditTitle]',\n  exportAs: 'etSchedulerEditTitle',\n})\nexport class SchedulerEditTitleDirective {\n  private host = injectSchedulerEditSurfaceHost('etSchedulerEditTitle');\n  private surface = inject(SchedulerEditSurfaceDirective);\n\n  public config = input({} as SchedulerEditTitleConfig, {\n    alias: 'etSchedulerEditTitle',\n    transform: schedulerFeatureConfig<SchedulerEditTitleConfig>,\n  });\n\n  constructor() {\n    this.host.registerEditField({\n      component: SchedulerEditTitleComponent,\n      injector: inject(Injector),\n      order: 0,\n      enabled: computed(() => this.config().enabled ?? true),\n      valid: computed(() => this.surface.draft().title.trim().length > 0),\n    });\n  }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport { Component, computed, ElementRef, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectStyleManager } from '@ethlete/core';\nimport { format } from 'date-fns';\nimport { tap } from 'rxjs';\nimport { BUTTON_IMPORTS } from '../button';\nimport { ELLIPSIS_VERTICAL_ICON, IconDirective, PLUS_ICON, provideIcons, TRASH_ICON } from '../icon';\nimport { MENU_IMPORTS } from '../menu';\nimport {\n  buildAnchoredRuntimePositionStrategy,\n  defineOverlay,\n  injectAnchoredDialogStrategy,\n  injectDialogStrategy,\n  injectFullscreenDialogStrategy,\n  OVERLAY_REF,\n  OverlayBodyComponent,\n  OverlayCloseDirective,\n  OverlayFooterDirective,\n  OverlayHeaderDirective,\n  OverlayMainDirective,\n  OverlayRef,\n  OverlayTitleDirective,\n} from '../overlay';\nimport { SchedulerActionAddSubAppointmentDirective } from './scheduler-action-add-sub-appointment.directive';\nimport { SchedulerActionDeleteDirective } from './scheduler-action-delete.directive';\nimport { SchedulerEditColorDirective } from './scheduler-edit-color.directive';\nimport { SchedulerEditDescriptionDirective } from './scheduler-edit-description.directive';\nimport {\n  AppointmentTreeNode,\n  SCHEDULER_EDIT_SURFACE_HOST,\n  SchedulerAppointmentAction,\n  SchedulerDirective,\n  SchedulerEditField,\n  SchedulerEditSurfaceDirective,\n  SchedulerEditSurfaceHost,\n} from './headless';\nimport { SchedulerAppointmentStylesComponent } from './scheduler-appointment-styles.component';\nimport { SchedulerBadgeChainCountComponent } from './scheduler-badge-chain-count.component';\nimport { SchedulerEditLocationDirective } from './scheduler-edit-location.directive';\nimport { SchedulerEditTimeRangeDirective } from './scheduler-edit-time-range.directive';\nimport { SchedulerEditTitleDirective } from './scheduler-edit-title.directive';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { SchedulerEditSurfaceResult } from './scheduler-edit-surface.token';\n\nexport type { SchedulerEditSurfaceResult } from './scheduler-edit-surface.token';\n\n/**\n * The default edit surface: a dialog for one appointment, its fields, its ancestor breadcrumb and\n * children list, and an action menu - built on the overlay system. Orchestrates the active fields\n * + actions via `hostDirectives: [SchedulerEditSurfaceDirective]`, bakes the built-in fields and\n * actions in by default (each forwarding its own config input, same pattern as `<et-scheduler>`'s\n * badge adornments), and applies `SCHEDULER_EDIT_SURFACE_HOST` so they can register.\n */\n@Component({\n  selector: 'et-scheduler-edit-surface',\n  templateUrl: './scheduler-edit-surface.component.html',\n  styleUrl: './scheduler-edit-surface.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ...BUTTON_IMPORTS,\n    ...MENU_IMPORTS,\n    IconDirective,\n    NgComponentOutlet,\n    SchedulerBadgeChainCountComponent,\n    OverlayBodyComponent,\n    OverlayCloseDirective,\n    OverlayFooterDirective,\n    OverlayHeaderDirective,\n    OverlayTitleDirective,\n  ],\n  providers: [\n    provideIcons(PLUS_ICON, TRASH_ICON, ELLIPSIS_VERTICAL_ICON),\n    { provide: SCHEDULER_EDIT_SURFACE_HOST, useExisting: SchedulerEditSurfaceComponent },\n  ],\n  hostDirectives: [\n    OverlayMainDirective,\n    { directive: SchedulerEditSurfaceDirective, inputs: ['appointment', 'appointments'] },\n    { directive: SchedulerEditTitleDirective, inputs: ['etSchedulerEditTitle'] },\n    { directive: SchedulerEditTimeRangeDirective, inputs: ['etSchedulerEditTimeRange'] },\n    { directive: SchedulerEditLocationDirective, inputs: ['etSchedulerEditLocation'] },\n    { directive: SchedulerEditDescriptionDirective, inputs: ['etSchedulerEditDescription'] },\n    { directive: SchedulerEditColorDirective, inputs: ['etSchedulerEditColor'] },\n    { directive: SchedulerActionAddSubAppointmentDirective, inputs: ['etSchedulerActionAddSubAppointment'] },\n    { directive: SchedulerActionDeleteDirective, inputs: ['etSchedulerActionDelete'] },\n  ],\n  host: {\n    class: 'et-scheduler-edit-surface',\n  },\n})\nexport class SchedulerEditSurfaceComponent implements SchedulerEditSurfaceHost {\n  private labels = injectSchedulerLabels();\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private overlayRef = inject<OverlayRef<object, SchedulerEditSurfaceResult>>(OVERLAY_REF, { optional: true });\n  private scheduler = inject(SchedulerDirective, { optional: true });\n\n  /** The headless directive behind this surface - field/action registration, draft state and navigation. */\n  public surface = inject(SchedulerEditSurfaceDirective);\n\n  public cancelLabel = computed(() => this.labels().cancel);\n  public saveLabel = computed(() => this.labels().save);\n  public moreActionsLabel = computed(() => this.labels().moreActions);\n  public ancestorsLabel = computed(() => this.labels().ancestors);\n  public subAppointmentsLabel = computed(() => this.labels().subAppointments);\n  public untitledLabel = computed(() => this.labels().untitledAppointment);\n\n  public headerLabel = computed(() => this.surface.currentAppointment().title || this.untitledLabel());\n\n  private editFieldList = signal<SchedulerEditField[]>([]);\n  private appointmentActionList = signal<SchedulerAppointmentAction[]>([]);\n\n  public editFields = computed(() =>\n    this.editFieldList()\n      .filter((field) => field.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  public appointmentActions = computed(() =>\n    this.appointmentActionList()\n      .filter((action) => action.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  public canSave = computed(() => this.editFields().every((field) => field.valid?.() ?? true));\n\n  protected childEntries = computed(() => {\n    const locale = this.scheduler?.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n\n    return this.surface.children().map((node: AppointmentTreeNode) => ({\n      node,\n      startTime: node.appointment.allDay ? null : format(node.appointment.start, 'HH:mm', options),\n    }));\n  });\n\n  constructor() {\n    // the children list borrows the appointment badge's chain-count chip, and a surface can be\n    // opened without any scheduler view having mounted that sheet\n    injectStyleManager().mount(SchedulerAppointmentStylesComponent);\n\n    outputToObservable(this.surface.save)\n      .pipe(\n        tap((appointment) => this.overlayRef?.close({ kind: 'save', appointment })),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    outputToObservable(this.surface.deleteAppointments)\n      .pipe(\n        tap((ids) => this.overlayRef?.close({ kind: 'delete', ids })),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  public get element(): HTMLElement {\n    return this.elementRef.nativeElement;\n  }\n\n  public get appointment() {\n    return this.surface.currentAppointment;\n  }\n\n  public get appointmentTree() {\n    return this.surface.appointmentTree;\n  }\n\n  public registerEditField(field: SchedulerEditField) {\n    this.editFieldList.update((list) => [...list, field]);\n  }\n\n  public registerAppointmentAction(action: SchedulerAppointmentAction) {\n    this.appointmentActionList.update((list) => [...list, action]);\n  }\n\n  protected save() {\n    this.surface.commit();\n  }\n}\n\n/**\n * Opens `<et-scheduler-edit-surface>` anchored to the appointment it edits - what `<et-scheduler>`\n * uses to auto-open on selection. Below `md` it is a full-screen dialog instead, where the form\n * needs the whole viewport. Pass the appointment's element as the open call's `origin`; without one\n * the anchored strategy falls back to a centered dialog.\n */\nexport const SCHEDULER_EDIT_SURFACE_OVERLAY = /* @__PURE__ */ defineOverlay<\n  SchedulerEditSurfaceComponent,\n  SchedulerEditSurfaceResult\n>({\n  component: SchedulerEditSurfaceComponent,\n  strategies: () => {\n    const fullscreenDialogStrategy = injectFullscreenDialogStrategy();\n    const anchoredDialogStrategy = injectAnchoredDialogStrategy();\n\n    return [\n      { strategy: fullscreenDialogStrategy.build() },\n      {\n        breakpoint: 'md',\n        strategy: anchoredDialogStrategy.build({\n          maxWidth: '520px',\n          // `minWidth` is also what decides the placement below: a side too narrow for it overflows,\n          // so the pane drops under the appointment rather than being squeezed in beside it.\n          minWidth: '440px',\n          positionStrategy: buildAnchoredRuntimePositionStrategy({\n            placement: 'right-start',\n            fallbackPlacements: ['left-start', 'bottom', 'top', 'right', 'left'],\n            offset: 10,\n            arrowPadding: 16,\n            shift: true,\n            autoResize: true,\n          }),\n        }),\n      },\n    ];\n  },\n  panelClass: 'et-scheduler-edit-surface-panel',\n});\n\n/**\n * Opens `<et-scheduler-edit-surface>` as a plain centered dialog above `md`, full-screen below it.\n * Used for an appointment added from the toolbar, which has no appointment on the calendar to\n * anchor to. An add that starts on the calendar itself uses {@link SCHEDULER_EDIT_SURFACE_OVERLAY}.\n */\nexport const SCHEDULER_ADD_SURFACE_OVERLAY = /* @__PURE__ */ defineOverlay<\n  SchedulerEditSurfaceComponent,\n  SchedulerEditSurfaceResult\n>({\n  component: SchedulerEditSurfaceComponent,\n  strategies: () => {\n    const fullscreenDialogStrategy = injectFullscreenDialogStrategy();\n    const dialogStrategy = injectDialogStrategy();\n\n    return [\n      { strategy: fullscreenDialogStrategy.build() },\n      { breakpoint: 'md', strategy: dialogStrategy.build({ maxWidth: '520px' }) },\n    ];\n  },\n  panelClass: 'et-scheduler-edit-surface-panel',\n});\n","<div class=\"et-scheduler-edit-surface-header\" etOverlayHeader>\n  <h2 class=\"et-scheduler-edit-surface-title\" etOverlayTitle>{{ headerLabel() }}</h2>\n\n  @if (appointmentActions().length > 0) {\n    <div class=\"et-scheduler-edit-surface-actions\" etMenu>\n      <button [attr.aria-label]=\"moreActionsLabel()\" et-icon-button etMenuTrigger size=\"sm\" type=\"button\">\n        <i etIcon=\"et-ellipsis-vertical\"></i>\n      </button>\n\n      <ng-template etMenuSurface>\n        <et-menu>\n          @for (action of appointmentActions(); track $index) {\n            <button\n              [variant]=\"action.destructive ? 'destructive' : 'default'\"\n              (click)=\"action.run()\"\n              et-menu-item\n              type=\"button\"\n            >\n              @if (action.icon) {\n                <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n              }\n              {{ action.label() }}\n            </button>\n          }\n        </et-menu>\n      </ng-template>\n    </div>\n  }\n</div>\n\n<et-overlay-body>\n  @if (surface.ancestors().length > 0) {\n    <nav [attr.aria-label]=\"ancestorsLabel()\" class=\"et-scheduler-edit-surface-breadcrumb\">\n      @for (ancestor of surface.ancestors(); track ancestor.id) {\n        <button\n          (click)=\"surface.navigateTo(ancestor.id)\"\n          class=\"et-scheduler-edit-surface-breadcrumb-item\"\n          type=\"button\"\n        >\n          {{ ancestor.title || untitledLabel() }}\n        </button>\n        <span class=\"et-scheduler-edit-surface-breadcrumb-separator\" aria-hidden=\"true\">/</span>\n      }\n      <span class=\"et-scheduler-edit-surface-breadcrumb-current\" aria-current=\"page\">{{ headerLabel() }}</span>\n    </nav>\n  }\n\n  <div class=\"et-scheduler-edit-surface-fields\">\n    @for (field of editFields(); track $index) {\n      <ng-container *ngComponentOutlet=\"field.component; inputs: { draft: surface.draft }; injector: field.injector\" />\n    }\n  </div>\n\n  @if (surface.children().length > 0) {\n    <div class=\"et-scheduler-edit-surface-children\">\n      <h3 class=\"et-scheduler-edit-surface-children-heading\">{{ subAppointmentsLabel() }}</h3>\n\n      <ul class=\"et-scheduler-edit-surface-children-list\">\n        @for (child of childEntries(); track child.node.appointment.id) {\n          <li>\n            <button\n              (click)=\"surface.navigateTo(child.node.appointment.id)\"\n              class=\"et-scheduler-edit-surface-children-item\"\n              type=\"button\"\n            >\n              @if (child.startTime) {\n                <span class=\"et-scheduler-edit-surface-children-item-time\">{{ child.startTime }}</span>\n              }\n\n              <span class=\"et-scheduler-edit-surface-children-item-title\">\n                {{ child.node.appointment.title || untitledLabel() }}\n              </span>\n\n              <et-scheduler-badge-chain-count [node]=\"child.node\" />\n            </button>\n          </li>\n        }\n      </ul>\n    </div>\n  }\n</et-overlay-body>\n\n<div class=\"et-scheduler-edit-surface-footer\" etOverlayFooter>\n  <button et-button etOverlayClose type=\"button\" variant=\"outline\">{{ cancelLabel() }}</button>\n  <button [disabled]=\"!canSave()\" (click)=\"save()\" et-button type=\"button\">{{ saveLabel() }}</button>\n</div>\n","import { computed, DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\nimport { createSwipeTracker, injectRenderer, RuntimeError, SwipeTracker } from '@ethlete/core';\nimport { SchedulerDirective, SchedulerFeatureConfig, schedulerFeatureConfig } from './headless';\nimport { SCHEDULER_ERROR_CODES } from './scheduler-errors';\n\nconst COMMIT_THRESHOLD_PX = 16;\n\nconst MIN_SWIPE_DISTANCE_PX = 56;\n\nconst MIN_FLICK_DISTANCE_PX = 32;\nconst MIN_FLICK_VELOCITY = 300;\n\n/** Options for {@link SchedulerSwipeNavigationDirective}. */\nexport type SchedulerSwipeNavigationConfig = SchedulerFeatureConfig;\n\n/**\n * Swipe left for the next period, right for the previous one - the same steps the toolbar's\n * prev/next buttons take. Touch only: a horizontal mouse drag on a view draws a range instead.\n *\n * One of the default pieces `<et-scheduler>` bundles; add it to a bare `[etScheduler]` composition\n * to get the same gesture.\n *\n * @example\n * <et-scheduler [etSchedulerSwipeNavigation]=\"{ enabled: false }\" … />\n */\n@Directive({\n  selector: '[etSchedulerSwipeNavigation]',\n  exportAs: 'etSchedulerSwipeNavigation',\n})\nexport class SchedulerSwipeNavigationDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private renderer = injectRenderer();\n  private destroyRef = inject(DestroyRef);\n  private scheduler = inject(SchedulerDirective, { optional: true });\n\n  public config = input({} as SchedulerSwipeNavigationConfig, {\n    alias: 'etSchedulerSwipeNavigation',\n    transform: schedulerFeatureConfig<SchedulerSwipeNavigationConfig>,\n  });\n\n  private isEnabled = computed(() => this.config().enabled ?? true);\n\n  private tracker: SwipeTracker | null = null;\n  private isCommitted = false;\n\n  constructor() {\n    if (!this.scheduler) {\n      throw new RuntimeError(\n        SCHEDULER_ERROR_CODES.SWIPE_NAVIGATION_OUTSIDE_SCHEDULER,\n        '[etSchedulerSwipeNavigation] must be used on an <et-scheduler> or an [etScheduler] element.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n\n    this.listen();\n  }\n\n  private listen() {\n    const element = this.elementRef.nativeElement;\n\n    const unlisten = [\n      this.renderer.listen(element, 'touchstart', (event: Event) => this.startGesture(event as TouchEvent)),\n      this.renderer.listen(element, 'touchmove', (event: Event) => this.trackGesture(event as TouchEvent)),\n      this.renderer.listen(element, 'touchend', (event: Event) => this.endGesture(event as TouchEvent)),\n      this.renderer.listen(element, 'touchcancel', () => this.forgetGesture()),\n    ];\n\n    this.destroyRef.onDestroy(() => unlisten.forEach((stop) => stop()));\n  }\n\n  private startGesture(event: TouchEvent) {\n    if (!this.isEnabled() || this.tracker) return;\n\n    if (event.touches.length !== 1) return;\n\n    this.tracker = createSwipeTracker(event);\n    this.isCommitted = false;\n  }\n\n  private trackGesture(event: TouchEvent) {\n    const tracker = this.tracker;\n\n    if (!tracker) return;\n\n    // A long press has armed a view's own gesture, so this finger is drawing a range or dragging an\n    // appointment - either way it is not a period step.\n    if (this.scheduler?.draftRange() || this.scheduler?.appointmentDrag()) return this.forgetGesture();\n\n    const { positiveMovementX, isScrolling } = tracker.update(event);\n\n    if (isScrolling) return this.forgetGesture();\n\n    if (!this.isCommitted) {\n      if (positiveMovementX < COMMIT_THRESHOLD_PX) return;\n\n      this.isCommitted = true;\n    }\n\n    // Preventing the move both stops the page panning under the gesture and stops the tap the\n    // browser would otherwise synthesize on release - which, over an appointment, opens it.\n    if (event.cancelable) event.preventDefault();\n  }\n\n  private endGesture(event: TouchEvent) {\n    const tracker = this.tracker;\n    const wasCommitted = this.isCommitted;\n\n    this.forgetGesture();\n\n    if (!tracker || !wasCommitted) return;\n    if (event.cancelable) event.preventDefault();\n\n    const { movementX, positiveMovementX, positivePixelPerSecondX } = tracker.end();\n    const isSwipe =\n      positiveMovementX >= MIN_SWIPE_DISTANCE_PX ||\n      (positiveMovementX >= MIN_FLICK_DISTANCE_PX && positivePixelPerSecondX >= MIN_FLICK_VELOCITY);\n\n    if (!isSwipe) return;\n\n    const isRtl = getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n    const isForwards = isRtl ? movementX > 0 : movementX < 0;\n\n    if (isForwards) {\n      this.scheduler?.next();\n    } else {\n      this.scheduler?.previous();\n    }\n  }\n\n  private forgetGesture() {\n    this.tracker = null;\n    this.isCommitted = false;\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { OverlayDefinition } from '../overlay';\nimport { Appointment, AppointmentId } from './scheduler.types';\n\nexport type SchedulerEditSurfaceResult =\n  { kind: 'save'; appointment: Appointment } | { kind: 'delete'; ids: readonly AppointmentId[] };\n\nexport type SchedulerEditSurfaceRegistration = {\n  editOverlay: OverlayDefinition<object, SchedulerEditSurfaceResult>;\n  addOverlay: OverlayDefinition<object, SchedulerEditSurfaceResult>;\n};\n\nexport const SCHEDULER_EDIT_SURFACE = new InjectionToken<SchedulerEditSurfaceRegistration>('SchedulerEditSurface');\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AngularRenderer, DragGestureEvent, dragGestureFrom } from '@ethlete/core';\nimport { finalize, tap, timer } from 'rxjs';\n\nconst TOUCH_ARM_DELAY = 400;\n\nexport type SchedulerDragGestureOptions = {\n  event: PointerEvent;\n  element: HTMLElement;\n  renderer: AngularRenderer;\n  destroyRef: DestroyRef;\n  track: (clientX: number, clientY: number) => void;\n  settle: () => void;\n  cancel: () => void;\n};\n\nexport const startSchedulerDragGesture = (options: SchedulerDragGestureOptions) => {\n  const { event, element, renderer, destroyRef, track, settle, cancel } = options;\n\n  const touch = event.pointerType === 'touch';\n  let armed = !touch;\n\n  const blockScroll = (touchEvent: Event) => {\n    if (armed && touchEvent.cancelable) touchEvent.preventDefault();\n  };\n\n  // a touch keeps targeting the node it started on, and once a re-render moves the dragged\n  // appointment into another cell that node is detached - its touchmove no longer bubbles to `element`\n  const pressed = event.target instanceof HTMLElement && event.target !== element ? event.target : null;\n  const scrollBlockers = touch\n    ? [element, ...(pressed ? [pressed] : [])].map((node) => renderer.listen(node, 'touchmove', blockScroll))\n    : [];\n  const stopBlockingScroll = () => scrollBlockers.forEach((stop) => stop());\n\n  const arm = () => {\n    armed = true;\n    track(event.clientX, event.clientY);\n  };\n\n  const arming = touch ? timer(TOUCH_ARM_DELAY).pipe(tap(arm), takeUntilDestroyed(destroyRef)).subscribe() : null;\n\n  const apply = (gesture: DragGestureEvent) => {\n    switch (gesture.type) {\n      case 'start':\n        return armed ? track(gesture.data.clientX, gesture.data.clientY) : undefined;\n      case 'move':\n        // a finger that moves before the press arms is scrolling the view, not dragging on it\n        if (!armed) return arming?.unsubscribe();\n\n        return track(gesture.data.clientX, gesture.data.clientY);\n      // a long press released without moving still tracked once, so it settles like a drag\n      case 'end':\n      case 'tapped':\n        return settle();\n      case 'cancelled':\n        return cancel();\n    }\n  };\n\n  const dispose = () => {\n    arming?.unsubscribe();\n    stopBlockingScroll();\n  };\n\n  dragGestureFrom(event, element).pipe(tap(apply), finalize(dispose), takeUntilDestroyed(destroyRef)).subscribe();\n};\n","import { addDays } from 'date-fns';\nimport { resolveCalendarKeyboardDate } from '../../../calendar/headless/internals/calendar-keyboard';\nimport { SchedulerWeekStartsOn } from '../scheduler.directive';\n\n/** The all-day strip's row in the time grid's keyboard model; hour `h` is row `h + 1`. */\nexport const SCHEDULER_TIME_GRID_ALL_DAY_ROW = 0;\n\nexport const SCHEDULER_TIME_GRID_LAST_ROW = 24;\n\nexport type SchedulerTimeGridKeyboardCell = {\n  day: Date;\n  row: number;\n};\n\nexport type ResolveSchedulerTimeGridKeyboardCellOptions = {\n  focused: SchedulerTimeGridKeyboardCell;\n  weekStartsOn: SchedulerWeekStartsOn;\n  view: 'week' | 'day';\n  hasAllDayRow: boolean;\n};\n\nexport const resolveSchedulerMonthKeyboardDate = (\n  key: string,\n  options: { focusedDate: Date; weekStartsOn: SchedulerWeekStartsOn },\n): Date | null => resolveCalendarKeyboardDate(key, { ...options, shiftKey: false });\n\nexport const resolveSchedulerTimeGridKeyboardCell = (\n  key: string,\n  options: ResolveSchedulerTimeGridKeyboardCellOptions,\n): SchedulerTimeGridKeyboardCell | null => {\n  const { focused, weekStartsOn, view, hasAllDayRow } = options;\n  const firstRow = hasAllDayRow ? SCHEDULER_TIME_GRID_ALL_DAY_ROW : SCHEDULER_TIME_GRID_ALL_DAY_ROW + 1;\n  const period = view === 'day' ? 1 : 7;\n\n  switch (key) {\n    case 'ArrowUp':\n      return { day: focused.day, row: Math.max(focused.row - 1, firstRow) };\n    case 'ArrowDown':\n      return { day: focused.day, row: Math.min(focused.row + 1, SCHEDULER_TIME_GRID_LAST_ROW) };\n    case 'PageUp':\n      return { day: addDays(focused.day, -period), row: focused.row };\n    case 'PageDown':\n      return { day: addDays(focused.day, period), row: focused.row };\n    case 'ArrowLeft':\n    case 'ArrowRight':\n    case 'Home':\n    case 'End': {\n      const day = resolveCalendarKeyboardDate(key, { shiftKey: false, focusedDate: focused.day, weekStartsOn });\n\n      return day === null ? null : { day, row: focused.row };\n    }\n    default:\n      return null;\n  }\n};\n\nconst resolveSchedulerCellItemIndex = (\n  key: string,\n  { index, count }: { index: number; count: number },\n): number | null => {\n  switch (key) {\n    case 'ArrowUp':\n    case 'ArrowLeft':\n      return Math.max(index - 1, 0);\n    case 'ArrowDown':\n    case 'ArrowRight':\n      return Math.min(index + 1, count - 1);\n    default:\n      return null;\n  }\n};\n\nexport const schedulerCellItemOffset = (itemCounts: readonly number[], cell: number) =>\n  itemCounts.slice(0, cell).reduce((sum, count) => sum + count, 0);\n\nexport type SchedulerCellItemFocusTarget = { kind: 'cell' | 'item'; index: number };\n\n/** `flatIndex` counts items across every cell in render order; `itemCounts` must follow that same order. */\nexport const resolveSchedulerCellItemFocus = (\n  key: string,\n  { itemCounts, flatIndex }: { itemCounts: readonly number[]; flatIndex: number },\n): SchedulerCellItemFocusTarget | null => {\n  let offset = 0;\n\n  for (const [cell, count] of itemCounts.entries()) {\n    if (flatIndex < offset + count) {\n      if (key === 'Escape') return { kind: 'cell', index: cell };\n\n      const next = resolveSchedulerCellItemIndex(key, { index: flatIndex - offset, count });\n\n      return next === null ? null : { kind: 'item', index: offset + next };\n    }\n\n    offset += count;\n  }\n\n  return null;\n};\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n  Component,\n  DestroyRef,\n  ElementRef,\n  Injector,\n  ViewEncapsulation,\n  afterNextRender,\n  computed,\n  inject,\n  linkedSignal,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport { ProvideColorDirective, injectRenderer, injectStyleManager } from '@ethlete/core';\nimport { addDays, differenceInCalendarDays, endOfDay, format, isSameDay, startOfDay } from 'date-fns';\nimport { MENU_IMPORTS } from '../menu';\nimport { SCHEDULER_FEATURE_HOST, SchedulerDirective, SchedulerMonthDayCell, SchedulerMonthDirective } from './headless';\nimport { startSchedulerDragGesture } from './headless/internals/scheduler-drag-gesture';\nimport {\n  resolveSchedulerCellItemFocus,\n  resolveSchedulerMonthKeyboardDate,\n  schedulerCellItemOffset,\n} from './headless/internals/scheduler-keyboard';\nimport { SchedulerAppointmentDragDirective } from './scheduler-appointment-drag.directive';\nimport { SchedulerAppointmentStylesComponent } from './scheduler-appointment-styles.component';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment } from './scheduler.types';\n\n/** The default month grid: one day cell per day, appointments as one-line badges with a \"+N more\" overflow. */\n@Component({\n  selector: 'et-scheduler-month-view',\n  templateUrl: './scheduler-month-view.component.html',\n  styleUrl: './scheduler-month-view.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [...MENU_IMPORTS, ProvideColorDirective, NgComponentOutlet],\n  hostDirectives: [SchedulerMonthDirective],\n  host: {\n    class: 'et-scheduler-month-view',\n    role: 'grid',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class SchedulerMonthViewComponent {\n  private scheduler = inject(SchedulerDirective, { optional: true });\n  protected month = inject(SchedulerMonthDirective);\n  protected labels = injectSchedulerLabels();\n\n  private featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });\n  private appointmentDrag = inject(SchedulerAppointmentDragDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  protected injector = inject(Injector);\n  private renderer = injectRenderer();\n  private weeksElement = viewChild.required<ElementRef<HTMLElement>>('weeks');\n  private weekRows = viewChildren<ElementRef<HTMLElement>>('weekRow');\n  private cells = viewChildren<ElementRef<HTMLElement>>('cell');\n  private cellItems = viewChildren<ElementRef<HTMLElement>>('cellItem');\n  public draftAnchor = viewChild<ElementRef<HTMLElement>>('draftAnchor');\n\n  protected canDragAppointments = computed(() => this.appointmentDrag?.isEnabled() ?? false);\n\n  protected focusedDate = linkedSignal(() => startOfDay(this.scheduler?.focusedDate() ?? new Date()));\n\n  private flatCells = computed(() => this.month.weeks().flat());\n  private cellItemCounts = computed(() => this.flatCells().map((cell) => this.itemCount(cell)));\n\n  private hasDragged = false;\n\n  constructor() {\n    injectStyleManager().mount(SchedulerAppointmentStylesComponent);\n  }\n\n  protected badgeAdornments() {\n    return this.featureHost?.badgeAdornments() ?? [];\n  }\n\n  protected weekdays() {\n    return this.scheduler?.weekdays() ?? [];\n  }\n\n  protected dayLabel(date: Date) {\n    const locale = this.scheduler?.effectiveLocale();\n\n    return format(date, 'PPPP', locale ? { locale } : undefined);\n  }\n\n  protected isFocused(date: Date) {\n    return isSameDay(date, this.focusedDate());\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) return;\n\n    const cellIndex = this.cells().findIndex((cell) => cell.nativeElement === event.target);\n\n    if (cellIndex !== -1) return this.handleCellKeydown(event, cellIndex);\n\n    const itemIndex = this.cellItems().findIndex((item) => item.nativeElement === event.target);\n\n    if (itemIndex !== -1) this.handleItemKeydown(event, itemIndex);\n  }\n\n  protected isSelected(appointment: Appointment) {\n    return this.scheduler?.selectedAppointmentId() === appointment.id;\n  }\n\n  protected select(appointment: Appointment, element: HTMLElement | null = null) {\n    // only a `pointerdown` sets this, and one always precedes the click it belongs to - which is why\n    // the flag can live here and cannot go stale\n    if (this.hasDragged) return;\n\n    this.scheduler?.surfaceAnchor.set(element);\n    this.scheduler?.selectedAppointmentId.set(appointment.id);\n  }\n\n  protected isDrafted(date: Date) {\n    const draft = this.scheduler?.draftRange();\n\n    return !!draft && date >= startOfDay(draft.start) && date <= draft.end;\n  }\n\n  protected isDragging(appointment: Appointment) {\n    return this.scheduler?.appointmentDrag()?.appointment.id === appointment.id;\n  }\n\n  protected isDropTarget(date: Date) {\n    const drag = this.scheduler?.appointmentDrag();\n\n    return !!drag && date >= startOfDay(drag.start) && date <= drag.end;\n  }\n\n  protected startAppointmentDrag(event: PointerEvent, target: { appointment: Appointment; weeks: HTMLElement }) {\n    // a press on a badge must not also draw a fresh range across the cells underneath it\n    event.stopPropagation();\n\n    const scheduler = this.scheduler;\n\n    if (!scheduler || !this.canDragAppointments() || event.button !== 0) return;\n\n    const { appointment, weeks } = target;\n    const grab = this.dateAt(weeks, event);\n\n    if (!grab) return;\n\n    this.hasDragged = false;\n\n    startSchedulerDragGesture({\n      event,\n      element: weeks,\n      renderer: this.renderer,\n      destroyRef: this.destroyRef,\n      track: (clientX, clientY) => {\n        this.hasDragged = true;\n\n        if (!scheduler.appointmentDrag()) scheduler.beginAppointmentDrag(appointment, 'move');\n\n        const to = this.dateAt(weeks, { clientX, clientY });\n\n        if (!to) return;\n\n        const days = differenceInCalendarDays(to, grab);\n\n        scheduler.updateAppointmentDrag(addDays(appointment.start, days), addDays(appointment.end, days));\n      },\n      settle: () => scheduler.commitAppointmentDrag(),\n      cancel: () => scheduler.clearAppointmentDrag(),\n    });\n  }\n\n  protected startDraftRange(event: PointerEvent, weeks: HTMLElement) {\n    const scheduler = this.scheduler;\n\n    if (!scheduler || event.button !== 0) return;\n\n    const anchor = this.dateAt(weeks, event);\n\n    if (!anchor) return;\n\n    startSchedulerDragGesture({\n      event,\n      element: weeks,\n      renderer: this.renderer,\n      destroyRef: this.destroyRef,\n      track: (clientX, clientY) => {\n        const to = this.dateAt(weeks, { clientX, clientY }) ?? anchor;\n        const [from, until] = to < anchor ? [to, anchor] : [anchor, to];\n\n        scheduler.setDraftRange({ start: startOfDay(from), end: endOfDay(until), allDay: true });\n      },\n      settle: () => {\n        const draft = scheduler.draftRange();\n\n        if (!draft && !scheduler.selectedAppointmentId()) {\n          scheduler.setDraftRange({ start: startOfDay(anchor), end: endOfDay(anchor), allDay: true });\n        } else if (draft?.phase !== 'dragging') {\n          return;\n        }\n\n        this.openDraftSurface(scheduler, weeks);\n      },\n      cancel: () => scheduler.clearDraftRange(),\n    });\n  }\n\n  private handleCellKeydown(event: KeyboardEvent, cellIndex: number) {\n    const cell = this.flatCells()[cellIndex];\n\n    if (!cell) return;\n\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n\n      const hasItems = (this.cellItemCounts()[cellIndex] ?? 0) > 0;\n\n      if (event.key === 'Enter' && hasItems) {\n        this.cellItems()[schedulerCellItemOffset(this.cellItemCounts(), cellIndex)]?.nativeElement.focus();\n      } else {\n        this.createAppointmentOn(cell.date);\n      }\n\n      return;\n    }\n\n    const scheduler = this.scheduler;\n\n    if (!scheduler) return;\n\n    const target = resolveSchedulerMonthKeyboardDate(event.key, {\n      focusedDate: cell.date,\n      weekStartsOn: scheduler.effectiveFirstDayOfWeek(),\n    });\n\n    if (!target) return;\n\n    event.preventDefault();\n    this.focusedDate.set(target);\n\n    const { start, end } = scheduler.visibleRange();\n\n    if (target < start || target > end) scheduler.focusedDate.set(target);\n\n    afterNextRender(() => this.focusRovingCell(), { injector: this.injector });\n  }\n\n  private handleItemKeydown(event: KeyboardEvent, itemIndex: number) {\n    const target = resolveSchedulerCellItemFocus(event.key, {\n      itemCounts: this.cellItemCounts(),\n      flatIndex: itemIndex,\n    });\n\n    if (!target) return;\n\n    event.preventDefault();\n\n    const refs = target.kind === 'cell' ? this.cells() : this.cellItems();\n\n    refs[target.index]?.nativeElement.focus();\n  }\n\n  private focusRovingCell() {\n    const index = this.flatCells().findIndex((cell) => this.isFocused(cell.date));\n\n    this.cells()[index]?.nativeElement.focus();\n  }\n\n  private createAppointmentOn(date: Date) {\n    const scheduler = this.scheduler;\n\n    if (!scheduler || scheduler.draftRange() || scheduler.selectedAppointmentId()) return;\n\n    scheduler.setDraftRange({ start: startOfDay(date), end: endOfDay(date), allDay: true });\n    this.openDraftSurface(scheduler, this.weeksElement().nativeElement);\n  }\n\n  private openDraftSurface(scheduler: SchedulerDirective, weeks: HTMLElement) {\n    scheduler.surfaceAnchor.set(this.coverDraftRange(weeks));\n    scheduler.commitDraftRange();\n  }\n\n  private itemCount(cell: SchedulerMonthDayCell) {\n    return cell.visible.length + (cell.overflow.length > 0 ? 1 : 0);\n  }\n\n  private coverDraftRange(weeks: HTMLElement): HTMLElement | null {\n    const anchor = this.draftAnchor()?.nativeElement;\n    const rows = this.month.weeks();\n    const rowIndex = rows.findIndex((week) => week.some((cell) => this.isDrafted(cell.date)));\n    const row = rows[rowIndex];\n\n    if (!anchor || !row) return null;\n\n    const offset = rows.slice(0, rowIndex).reduce((count, week) => count + week.length, 0);\n    const drafted = row\n      .map((cell, index) => (this.isDrafted(cell.date) ? this.cells()[offset + index]?.nativeElement : null))\n      .filter((element) => !!element)\n      .map((element) => element.getBoundingClientRect());\n\n    if (!drafted.length) return null;\n\n    const host = weeks.getBoundingClientRect();\n    const left = Math.min(...drafted.map((rect) => rect.left));\n    const top = Math.min(...drafted.map((rect) => rect.top));\n\n    this.renderer.setStyle(anchor, {\n      left: `${left - host.left}px`,\n      top: `${top - host.top}px`,\n      width: `${Math.max(...drafted.map((rect) => rect.right)) - left}px`,\n      height: `${Math.max(...drafted.map((rect) => rect.bottom)) - top}px`,\n    });\n\n    return anchor;\n  }\n\n  private dateAt(weeks: HTMLElement, at: { clientX: number; clientY: number }): Date | null {\n    const rows = this.weekRows();\n    const weekIndex = rows.findIndex((row) => {\n      const { top, bottom } = row.nativeElement.getBoundingClientRect();\n\n      return at.clientY >= top && at.clientY <= bottom;\n    });\n\n    const week = this.month.weeks()[weekIndex];\n\n    if (!week) return null;\n\n    const { left, width } = weeks.getBoundingClientRect();\n    const column = Math.min(Math.max(Math.floor(((at.clientX - left) / width) * 7), 0), 6);\n\n    return week[column]?.date ?? null;\n  }\n}\n","<div class=\"et-scheduler-month-view-weekdays\" role=\"row\">\n  @for (weekday of weekdays(); track weekday.long) {\n    <span [attr.aria-label]=\"weekday.long\" class=\"et-scheduler-month-view-weekday\" role=\"columnheader\">{{\n      weekday.short\n    }}</span>\n  }\n</div>\n\n<div #weeks (pointerdown)=\"startDraftRange($event, weeks)\" class=\"et-scheduler-month-view-weeks\" role=\"rowgroup\">\n  <div #draftAnchor class=\"et-scheduler-month-view-draft-anchor\" aria-hidden=\"true\"></div>\n\n  @for (week of month.weeks(); track $index) {\n    <div #weekRow class=\"et-scheduler-month-view-week\" role=\"row\">\n      @for (cell of week; track cell.date.getTime()) {\n        <div\n          #cell\n          [attr.data-outside-month]=\"cell.outsideMonth ? '' : null\"\n          [attr.data-today]=\"cell.today ? '' : null\"\n          [attr.aria-current]=\"cell.today ? 'date' : null\"\n          [attr.data-draft]=\"isDrafted(cell.date) ? '' : null\"\n          [attr.data-drop-target]=\"isDropTarget(cell.date) ? '' : null\"\n          [attr.tabindex]=\"isFocused(cell.date) ? 0 : -1\"\n          (focus)=\"focusedDate.set(cell.date)\"\n          class=\"et-scheduler-month-view-cell\"\n          role=\"gridcell\"\n        >\n          <span class=\"et-scheduler-month-view-cell-date\" aria-hidden=\"true\">{{ cell.date.getDate() }}</span>\n          <span class=\"et-scheduler-month-view-cell-label\">{{ dayLabel(cell.date) }}</span>\n\n          <!-- pointerdown is stopped on everything interactive below so a press that starts on an\n               appointment or the overflow trigger does not also draw a range across the grid -->\n          <div class=\"et-scheduler-month-view-cell-appointments\">\n            @for (node of cell.visible; track node.appointment.id) {\n              <button\n                #appointmentButton\n                #cellItem\n                [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n                [attr.data-draggable]=\"canDragAppointments() ? '' : null\"\n                [attr.data-dragging]=\"isDragging(node.appointment) ? '' : null\"\n                [attr.title]=\"node.appointment.title\"\n                [etProvideColor]=\"node.appointment.colorToken ?? null\"\n                (click)=\"select(node.appointment, appointmentButton)\"\n                (pointerdown)=\"startAppointmentDrag($event, { appointment: node.appointment, weeks })\"\n                class=\"et-scheduler-appointment\"\n                type=\"button\"\n                tabindex=\"-1\"\n              >\n                @for (adornment of badgeAdornments(); track $index) {\n                  <ng-container\n                    *ngComponentOutlet=\"adornment.component; inputs: { node }; injector: adornment.injector\"\n                  />\n                }\n              </button>\n            }\n\n            @if (cell.overflow.length > 0) {\n              <div class=\"et-scheduler-month-view-overflow\" etMenu>\n                <button\n                  #cellItem\n                  (pointerdown)=\"$event.stopPropagation()\"\n                  class=\"et-scheduler-month-view-overflow-trigger\"\n                  etMenuTrigger\n                  type=\"button\"\n                  tabindex=\"-1\"\n                >\n                  {{ labels().moreAppointments(cell.overflow.length) }}\n                </button>\n\n                <ng-template etMenuSurface>\n                  <et-menu>\n                    @for (node of cell.overflow; track node.appointment.id) {\n                      <button\n                        [attr.data-selected]=\"isSelected(node.appointment) ? '' : null\"\n                        [etProvideColor]=\"node.appointment.colorToken ?? null\"\n                        (click)=\"select(node.appointment)\"\n                        et-menu-item\n                        type=\"button\"\n                      >\n                        {{ node.appointment.title }}\n                      </button>\n                    }\n                  </et-menu>\n                </ng-template>\n              </div>\n            }\n          </div>\n        </div>\n      }\n    </div>\n  }\n</div>\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n  afterNextRender,\n  Component,\n  DestroyRef,\n  ElementRef,\n  Injector,\n  ViewEncapsulation,\n  computed,\n  inject,\n  linkedSignal,\n  untracked,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport { ProvideColorDirective, injectRenderer, injectStyleManager } from '@ethlete/core';\nimport {\n  addDays,\n  addMinutes,\n  differenceInCalendarDays,\n  differenceInMinutes,\n  format,\n  isSameDay,\n  setHours,\n  startOfDay,\n} from 'date-fns';\nimport {\n  SCHEDULER_FEATURE_HOST,\n  SchedulerDirective,\n  SchedulerTimeGridBlock,\n  SchedulerTimeGridDirective,\n} from './headless';\nimport { startSchedulerDragGesture } from './headless/internals/scheduler-drag-gesture';\nimport {\n  SCHEDULER_TIME_GRID_ALL_DAY_ROW,\n  SchedulerTimeGridKeyboardCell,\n  resolveSchedulerCellItemFocus,\n  resolveSchedulerTimeGridKeyboardCell,\n  schedulerCellItemOffset,\n} from './headless/internals/scheduler-keyboard';\nimport { SchedulerAppointmentDragDirective } from './scheduler-appointment-drag.directive';\nimport { SchedulerAppointmentStylesComponent } from './scheduler-appointment-styles.component';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { Appointment, SchedulerAppointmentDragMode } from './scheduler.types';\n\nconst HOURS = /* @__PURE__ */ Array.from({ length: 24 }, (_, hour) => hour);\n\nconst MINUTES_PER_DAY = 24 * 60;\nconst SLOT_MINUTES = 15;\nconst MINIMUM_DURATION = SLOT_MINUTES * 60 * 1000;\nconst DEFAULT_DRAFT_MINUTES = 60;\nconst DEFAULT_DRAFT_DURATION = DEFAULT_DRAFT_MINUTES * 60 * 1000;\n\ntype SchedulerTimeGridColumn = { element: HTMLElement; day: Date };\n\ntype SchedulerTimeGridDragTarget = {\n  appointment: Appointment;\n  mode: SchedulerAppointmentDragMode;\n  column: SchedulerTimeGridColumn;\n};\n\ntype SchedulerTimeGridDrag = SchedulerTimeGridDragTarget & {\n  grabMinutes: number;\n};\n\ntype SchedulerTimeGridAllDayDragTarget = {\n  appointment: Appointment;\n  mode: SchedulerAppointmentDragMode;\n  lane: HTMLElement;\n};\n\ntype SchedulerTimeGridAllDayDrag = Omit<SchedulerTimeGridAllDayDragTarget, 'lane'> & {\n  grabDay: Date;\n};\n\ntype SchedulerTimeGridCellGroup = {\n  cells: readonly ElementRef<HTMLElement>[];\n  items: readonly ElementRef<HTMLElement>[];\n  itemCounts: readonly number[];\n};\n\ntype SchedulerTimeGridRovingCell = { dayIndex: number; row: number };\n\nconst blockStartHour = (block: SchedulerTimeGridBlock) =>\n  Math.min(Math.floor((block.offset / 100) * HOURS.length + 1e-6), HOURS.length - 1);\n\n/**\n * The default time grid: an hour axis, an all-day strip, and appointments packed into\n * overlap-free columns. Backs both the week and day views - the day view is this same component\n * with a one-day visible range, not a separate implementation.\n */\n@Component({\n  selector: 'et-scheduler-time-grid-view',\n  templateUrl: './scheduler-time-grid-view.component.html',\n  styleUrl: './scheduler-time-grid-view.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [ProvideColorDirective, NgComponentOutlet],\n  hostDirectives: [SchedulerTimeGridDirective],\n  host: {\n    class: 'et-scheduler-time-grid-view',\n    role: 'grid',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class SchedulerTimeGridViewComponent {\n  private scheduler = inject(SchedulerDirective, { optional: true });\n  protected grid = inject(SchedulerTimeGridDirective);\n  private labels = injectSchedulerLabels();\n\n  private featureHost = inject(SCHEDULER_FEATURE_HOST, { optional: true });\n  private appointmentDrag = inject(SchedulerAppointmentDragDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostInjector = inject(Injector);\n  private renderer = injectRenderer();\n  public timeGridBody = viewChild<ElementRef<HTMLElement>>('timeGridBody');\n  private firstHourRow = viewChild<ElementRef<HTMLElement>>('hourRow');\n  private dayColumns = viewChildren<ElementRef<HTMLElement>>('dayColumn');\n  public draftBlock = viewChild<ElementRef<HTMLElement>>('draftBlock');\n  private slotCells = viewChildren<ElementRef<HTMLElement>>('slotCell');\n  private slotItems = viewChildren<ElementRef<HTMLElement>>('slotItem');\n  private allDayCellElements = viewChildren<ElementRef<HTMLElement>>('allDayCell');\n  private allDayItems = viewChildren<ElementRef<HTMLElement>>('allDayItem');\n\n  protected canDragAppointments = computed(() => this.appointmentDrag?.isEnabled() ?? false);\n\n  private hasDragged = false;\n\n  protected hours = computed(() => {\n    const locale = this.scheduler?.effectiveLocale();\n    const reference = startOfDay(new Date());\n\n    return HOURS.map((hour) => ({\n      hour,\n      label: format(setHours(reference, hour), 'HH:mm', locale ? { locale } : undefined),\n    }));\n  });\n\n  protected columns = computed(() => {\n    const hours = this.hours();\n\n    return this.grid.days().map((day) => {\n      const dayLabel = this.dayLabel(day.date);\n\n      return {\n        day,\n        slots: hours.map(({ hour, label }) => ({\n          hour,\n          label: `${dayLabel}, ${label}`,\n          blocks: day.blocks.filter((block) => blockStartHour(block) === hour),\n        })),\n      };\n    });\n  });\n\n  protected allDayCells = computed(() => {\n    const days = this.grid.days();\n    const entries = this.grid.allDay();\n    const allDay = this.labels().allDay;\n\n    return days.map((day, dayIndex) => ({\n      date: day.date,\n      label: `${this.dayLabel(day.date)}, ${allDay}`,\n      entries: entries.filter((entry) => Math.round((entry.inlineOffset / 100) * days.length) === dayIndex),\n    }));\n  });\n\n  protected focusedSlot = linkedSignal<Date, SchedulerTimeGridKeyboardCell>({\n    source: () => startOfDay(this.scheduler?.focusedDate() ?? new Date()),\n    computation: (day, previous) => ({\n      day,\n      row: previous?.value.row ?? untracked(() => this.grid.initialScrollHour()) + 1,\n    }),\n  });\n\n  private rovingCell = computed<SchedulerTimeGridRovingCell>(() => {\n    const { day, row } = this.focusedSlot();\n    const hasAllDayRow = this.grid.allDayRowCount() > 0;\n\n    return {\n      dayIndex: this.grid.days().findIndex((column) => isSameDay(column.date, day)),\n      row: row === SCHEDULER_TIME_GRID_ALL_DAY_ROW && !hasAllDayRow ? row + 1 : row,\n    };\n  });\n\n  private slotGroup = computed<SchedulerTimeGridCellGroup>(() => ({\n    cells: this.slotCells(),\n    items: this.slotItems(),\n    itemCounts: this.columns().flatMap((column) => column.slots.map((slot) => slot.blocks.length)),\n  }));\n\n  private allDayGroup = computed<SchedulerTimeGridCellGroup>(() => ({\n    cells: this.allDayCellElements(),\n    items: this.allDayItems(),\n    itemCounts: this.allDayCells().map((cell) => cell.entries.length),\n  }));\n\n  constructor() {\n    injectStyleManager().mount(SchedulerAppointmentStylesComponent);\n\n    // Once per mount, not reactively - re-scrolling on every `focusedDate` change would yank a\n    // user's own scroll position back every time they step to the next day/week.\n    afterNextRender(() => {\n      const body = this.timeGridBody()?.nativeElement;\n      const hourRow = this.firstHourRow()?.nativeElement;\n\n      if (!body || !hourRow) {\n        return;\n      }\n\n      body.scrollTop = this.grid.initialScrollHour() * hourRow.offsetHeight;\n    });\n  }\n\n  protected badgeAdornments() {\n    return this.featureHost?.badgeAdornments() ?? [];\n  }\n\n  protected weekdayLabel(date: Date) {\n    const locale = this.scheduler?.effectiveLocale();\n\n    return format(date, 'EEE', locale ? { locale } : undefined);\n  }\n\n  protected cellTabIndex(dayIndex: number, row: number) {\n    const roving = this.rovingCell();\n\n    return roving.dayIndex === dayIndex && roving.row === row ? 0 : -1;\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) return;\n\n    const slotIndex = this.slotCells().findIndex((cell) => cell.nativeElement === event.target);\n\n    if (slotIndex !== -1) {\n      return this.handleCellKeydown(event, {\n        dayIndex: Math.floor(slotIndex / HOURS.length),\n        row: (slotIndex % HOURS.length) + 1,\n      });\n    }\n\n    const allDayIndex = this.allDayCellElements().findIndex((cell) => cell.nativeElement === event.target);\n\n    if (allDayIndex !== -1) {\n      return this.handleCellKeydown(event, { dayIndex: allDayIndex, row: SCHEDULER_TIME_GRID_ALL_DAY_ROW });\n    }\n\n    for (const group of [this.slotGroup(), this.allDayGroup()]) {\n      const itemIndex = group.items.findIndex((item) => item.nativeElement === event.target);\n\n      if (itemIndex !== -1) return this.handleItemKeydown(event, { ...group, itemIndex });\n    }\n  }\n\n  protected isSelected(appointment: Appointment) {\n    return this.scheduler?.selectedAppointmentId() === appointment.id;\n  }\n\n  protected isDragging(appointment: Appointment) {\n    return this.scheduler?.appointmentDrag()?.appointment.id === appointment.id;\n  }\n\n  protected select(appointment: Appointment, element: HTMLElement) {\n    // only a `pointerdown` sets this, and one always precedes the click it belongs to - which is why\n    // the flag can live here and cannot go stale\n    if (this.hasDragged) return;\n\n    this.scheduler?.surfaceAnchor.set(element);\n    this.scheduler?.selectedAppointmentId.set(appointment.id);\n  }\n\n  protected startAppointmentDrag(event: PointerEvent, target: SchedulerTimeGridDragTarget) {\n    // a press on a block must not also draw a fresh range down the column underneath it\n    event.stopPropagation();\n\n    const scheduler = this.scheduler;\n\n    if (!scheduler || !this.canDragAppointments() || event.button !== 0) return;\n\n    const { appointment, mode, column } = target;\n    const drag = { ...target, grabMinutes: this.minutesAt(column.element, event.clientY) };\n\n    this.hasDragged = false;\n\n    startSchedulerDragGesture({\n      event,\n      element: column.element,\n      renderer: this.renderer,\n      destroyRef: this.destroyRef,\n      track: (clientX, clientY) => {\n        this.hasDragged = true;\n\n        if (!scheduler.appointmentDrag()) scheduler.beginAppointmentDrag(appointment, mode);\n\n        const { start, end } =\n          drag.mode === 'move' ? this.movedRange(drag, { clientX, clientY }) : this.resizedRange(drag, clientY);\n\n        scheduler.updateAppointmentDrag(start, end);\n      },\n      settle: () => scheduler.commitAppointmentDrag(),\n      cancel: () => scheduler.clearAppointmentDrag(),\n    });\n  }\n\n  protected startAllDayDrag(event: PointerEvent, target: SchedulerTimeGridAllDayDragTarget) {\n    // a press on an edge handle must not also start the entry moving\n    event.stopPropagation();\n\n    const scheduler = this.scheduler;\n\n    if (!scheduler || !this.canDragAppointments() || event.button !== 0) return;\n\n    const { appointment, mode, lane } = target;\n    const grabDay = this.columnAt(event.clientX)?.day;\n\n    if (!grabDay) return;\n\n    const drag = { appointment, mode, grabDay };\n\n    this.hasDragged = false;\n\n    startSchedulerDragGesture({\n      event,\n      element: lane,\n      renderer: this.renderer,\n      destroyRef: this.destroyRef,\n      track: (clientX) => {\n        this.hasDragged = true;\n\n        if (!scheduler.appointmentDrag()) scheduler.beginAppointmentDrag(appointment, mode);\n\n        const to = this.columnAt(clientX)?.day;\n\n        if (!to) return;\n\n        const { start, end } = this.allDayRange(drag, to);\n\n        scheduler.updateAppointmentDrag(start, end);\n      },\n      settle: () => scheduler.commitAppointmentDrag(),\n      cancel: () => scheduler.clearAppointmentDrag(),\n    });\n  }\n\n  protected startDraftRange(event: PointerEvent, column: SchedulerTimeGridColumn) {\n    const scheduler = this.scheduler;\n\n    if (!scheduler || event.button !== 0) return;\n\n    startSchedulerDragGesture({\n      event,\n      element: column.element,\n      renderer: this.renderer,\n      destroyRef: this.destroyRef,\n      track: (_, clientY) => {\n        const at = this.draftTimeAt(column, clientY);\n\n        // the first unit is the full default: a long press released without moving has to land on\n        // the same hour a click does, and the first drag move recomputes from the anchor anyway\n        return scheduler.draftRange()\n          ? scheduler.extendDraftRange(at, MINIMUM_DURATION)\n          : scheduler.beginDraftRange(at, DEFAULT_DRAFT_DURATION);\n      },\n      settle: () => {\n        const draft = scheduler.draftRange();\n\n        if (!draft) return this.draftHourFrom(this.draftTimeAt(column, event.clientY));\n        if (draft.phase !== 'dragging') return;\n\n        // the preview is what the create surface anchors to, so hand it over before committing\n        scheduler.surfaceAnchor.set(this.draftBlock()?.nativeElement ?? null);\n        scheduler.commitDraftRange();\n      },\n      cancel: () => scheduler.clearDraftRange(),\n    });\n  }\n\n  private movedRange(drag: SchedulerTimeGridDrag, at: { clientX: number; clientY: number }) {\n    const { appointment, column, grabMinutes } = drag;\n    const target = this.columnAt(at.clientX) ?? column;\n    const days = differenceInCalendarDays(target.day, column.day);\n    const minutes = this.minutesAt(target.element, at.clientY) - grabMinutes;\n    const start = this.snapToSlot(addMinutes(addDays(appointment.start, days), minutes));\n\n    return { start, end: new Date(start.getTime() + (appointment.end.getTime() - appointment.start.getTime())) };\n  }\n\n  private resizedRange(drag: SchedulerTimeGridDrag, clientY: number) {\n    const { appointment, column } = drag;\n    const at = this.snapToSlot(addMinutes(startOfDay(column.day), this.minutesAt(column.element, clientY)));\n\n    if (drag.mode === 'resize-start') {\n      const latest = new Date(appointment.end.getTime() - MINIMUM_DURATION);\n\n      return { start: at > latest ? latest : at, end: appointment.end };\n    }\n\n    const earliest = new Date(appointment.start.getTime() + MINIMUM_DURATION);\n\n    return { start: appointment.start, end: at < earliest ? earliest : at };\n  }\n\n  private allDayRange(drag: SchedulerTimeGridAllDayDrag, to: Date) {\n    const { appointment, mode, grabDay } = drag;\n    const span = differenceInCalendarDays(appointment.end, appointment.start);\n\n    switch (mode) {\n      case 'resize-start': {\n        const days = Math.min(differenceInCalendarDays(to, appointment.start), span);\n\n        return { start: addDays(appointment.start, days), end: appointment.end };\n      }\n      case 'resize-end': {\n        const days = Math.max(differenceInCalendarDays(to, appointment.end), -span);\n\n        return { start: appointment.start, end: addDays(appointment.end, days) };\n      }\n      default: {\n        const days = differenceInCalendarDays(to, grabDay);\n\n        return { start: addDays(appointment.start, days), end: addDays(appointment.end, days) };\n      }\n    }\n  }\n\n  private columnAt(clientX: number): SchedulerTimeGridColumn | null {\n    const columns = this.dayColumns();\n    const index = columns.findIndex((column) => {\n      const { left, right } = column.nativeElement.getBoundingClientRect();\n\n      return clientX >= left && clientX <= right;\n    });\n\n    const element = columns[index]?.nativeElement;\n    const day = this.grid.days()[index];\n\n    return element && day ? { element, day: day.date } : null;\n  }\n\n  private handleCellKeydown(event: KeyboardEvent, cell: SchedulerTimeGridRovingCell) {\n    const scheduler = this.scheduler;\n    const day = this.grid.days()[cell.dayIndex];\n\n    if (!scheduler || !day) return;\n\n    const isAllDay = cell.row === SCHEDULER_TIME_GRID_ALL_DAY_ROW;\n\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n\n      const group = isAllDay ? this.allDayGroup() : this.slotGroup();\n      const flatIndex = isAllDay ? cell.dayIndex : cell.dayIndex * HOURS.length + cell.row - 1;\n\n      if (event.key === 'Enter' && (group.itemCounts[flatIndex] ?? 0) > 0) {\n        group.items[schedulerCellItemOffset(group.itemCounts, flatIndex)]?.nativeElement.focus();\n      } else if (!isAllDay && !scheduler.draftRange()) {\n        this.draftHourFrom(setHours(startOfDay(day.date), cell.row - 1));\n      }\n\n      return;\n    }\n\n    const target = resolveSchedulerTimeGridKeyboardCell(event.key, {\n      focused: { day: day.date, row: cell.row },\n      weekStartsOn: scheduler.effectiveFirstDayOfWeek(),\n      view: scheduler.view() === 'day' ? 'day' : 'week',\n      hasAllDayRow: this.grid.allDayRowCount() > 0,\n    });\n\n    if (!target) return;\n\n    event.preventDefault();\n    this.focusedSlot.set(target);\n\n    const { start, end } = scheduler.visibleRange();\n\n    if (target.day < start || target.day > end) scheduler.focusedDate.set(target.day);\n\n    afterNextRender(() => this.focusRovingCell(), { injector: this.hostInjector });\n  }\n\n  private handleItemKeydown(event: KeyboardEvent, group: SchedulerTimeGridCellGroup & { itemIndex: number }) {\n    const target = resolveSchedulerCellItemFocus(event.key, {\n      itemCounts: group.itemCounts,\n      flatIndex: group.itemIndex,\n    });\n\n    if (!target) return;\n\n    event.preventDefault();\n\n    const refs = target.kind === 'cell' ? group.cells : group.items;\n\n    refs[target.index]?.nativeElement.focus();\n  }\n\n  private focusRovingCell() {\n    const { dayIndex, row } = this.rovingCell();\n    const cell =\n      row === SCHEDULER_TIME_GRID_ALL_DAY_ROW\n        ? this.allDayCellElements()[dayIndex]\n        : this.slotCells()[dayIndex * HOURS.length + row - 1];\n\n    cell?.nativeElement.focus();\n  }\n\n  private dayLabel(date: Date) {\n    const locale = this.scheduler?.effectiveLocale();\n\n    return format(date, 'PPPP', locale ? { locale } : undefined);\n  }\n\n  private draftHourFrom(at: Date) {\n    const scheduler = this.scheduler;\n\n    if (!scheduler || scheduler.selectedAppointmentId()) return;\n\n    scheduler.beginDraftRange(at, DEFAULT_DRAFT_DURATION);\n\n    afterNextRender(\n      () => {\n        scheduler.surfaceAnchor.set(this.draftBlock()?.nativeElement ?? null);\n        scheduler.commitDraftRange();\n      },\n      { injector: this.hostInjector },\n    );\n  }\n\n  private draftTimeAt(column: SchedulerTimeGridColumn, clientY: number) {\n    return this.snapToSlot(addMinutes(startOfDay(column.day), this.minutesAt(column.element, clientY)));\n  }\n\n  private minutesAt(element: HTMLElement, clientY: number) {\n    const { top, height } = element.getBoundingClientRect();\n\n    return Math.min(Math.max((clientY - top) / height, 0), 1) * MINUTES_PER_DAY;\n  }\n\n  private snapToSlot(at: Date) {\n    const dayStart = startOfDay(at);\n    const minutes = differenceInMinutes(at, dayStart);\n\n    return addMinutes(dayStart, Math.round(minutes / SLOT_MINUTES) * SLOT_MINUTES);\n  }\n}\n","<div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-header\" role=\"row\">\n  <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\"></div>\n\n  <div class=\"et-scheduler-time-grid-days\" role=\"presentation\">\n    @for (day of grid.days(); track day.date.getTime()) {\n      <div [attr.data-today]=\"day.today ? '' : null\" class=\"et-scheduler-time-grid-header-day\" role=\"columnheader\">\n        <span class=\"et-scheduler-time-grid-header-weekday\">{{ weekdayLabel(day.date) }}</span>\n        <span class=\"et-scheduler-time-grid-header-date\">{{ day.date.getDate() }}</span>\n      </div>\n    }\n  </div>\n</div>\n\n@if (grid.allDayRowCount() > 0) {\n  <div class=\"et-scheduler-time-grid-row et-scheduler-time-grid-all-day\" role=\"row\">\n    <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\"></div>\n\n    <div\n      #allDayLane\n      [style.--_et-scheduler-time-grid-all-day-row-count]=\"grid.allDayRowCount()\"\n      class=\"et-scheduler-time-grid-all-day-lane\"\n      role=\"presentation\"\n    >\n      @for (cell of allDayCells(); track cell.date.getTime(); let dayIndex = $index) {\n        <div\n          #allDayCell\n          [attr.aria-label]=\"cell.label\"\n          [attr.tabindex]=\"cellTabIndex(dayIndex, 0)\"\n          (focus)=\"focusedSlot.set({ day: cell.date, row: 0 })\"\n          class=\"et-scheduler-time-grid-all-day-cell\"\n          role=\"gridcell\"\n        >\n          @for (entry of cell.entries; track entry.node.appointment.id) {\n            <button\n              #appointmentButton\n              #allDayItem\n              [style.--_et-scheduler-time-grid-all-day-offset]=\"entry.inlineOffset\"\n              [style.--_et-scheduler-time-grid-all-day-size]=\"entry.inlineSize\"\n              [style.--_et-scheduler-time-grid-all-day-row]=\"entry.row\"\n              [attr.data-selected]=\"isSelected(entry.node.appointment) ? '' : null\"\n              [attr.data-draggable]=\"canDragAppointments() ? '' : null\"\n              [attr.data-dragging]=\"isDragging(entry.node.appointment) ? '' : null\"\n              [attr.title]=\"entry.node.appointment.title\"\n              [etProvideColor]=\"entry.node.appointment.colorToken ?? null\"\n              (click)=\"select(entry.node.appointment, appointmentButton)\"\n              (pointerdown)=\"\n                startAllDayDrag($event, { appointment: entry.node.appointment, mode: 'move', lane: allDayLane })\n              \"\n              class=\"et-scheduler-appointment et-scheduler-time-grid-all-day-entry\"\n              type=\"button\"\n              tabindex=\"-1\"\n            >\n              @for (adornment of badgeAdornments(); track $index) {\n                <ng-container\n                  *ngComponentOutlet=\"adornment.component; inputs: { node: entry.node }; injector: adornment.injector\"\n                />\n              }\n\n              @if (canDragAppointments()) {\n                <span\n                  (pointerdown)=\"\n                    startAllDayDrag($event, {\n                      appointment: entry.node.appointment,\n                      mode: 'resize-start',\n                      lane: allDayLane,\n                    })\n                  \"\n                  class=\"et-scheduler-time-grid-all-day-resize\"\n                  data-edge=\"start\"\n                  aria-hidden=\"true\"\n                ></span>\n\n                <span\n                  (pointerdown)=\"\n                    startAllDayDrag($event, {\n                      appointment: entry.node.appointment,\n                      mode: 'resize-end',\n                      lane: allDayLane,\n                    })\n                  \"\n                  class=\"et-scheduler-time-grid-all-day-resize\"\n                  data-edge=\"end\"\n                  aria-hidden=\"true\"\n                ></span>\n              }\n            </button>\n          }\n        </div>\n      }\n    </div>\n  </div>\n}\n\n<div #timeGridBody class=\"et-scheduler-time-grid-row et-scheduler-time-grid-body\" role=\"row\">\n  <div class=\"et-scheduler-time-grid-gutter\" role=\"presentation\">\n    @for (hour of hours(); track hour.hour) {\n      <div #hourRow class=\"et-scheduler-time-grid-hour-row\">\n        <span class=\"et-scheduler-time-grid-hour-label\">{{ hour.label }}</span>\n      </div>\n    }\n  </div>\n\n  <div class=\"et-scheduler-time-grid-days\" role=\"presentation\">\n    @for (column of columns(); track column.day.date.getTime(); let dayIndex = $index) {\n      @let day = column.day;\n      <div\n        #dayColumn\n        [attr.data-today]=\"day.today ? '' : null\"\n        (pointerdown)=\"startDraftRange($event, { element: dayColumn, day: day.date })\"\n        class=\"et-scheduler-time-grid-day\"\n        role=\"presentation\"\n      >\n        @for (segment of grid.nonBusinessTime()[dayIndex]; track segment.offset) {\n          <div\n            [style.--_et-scheduler-time-grid-block-offset]=\"segment.offset\"\n            [style.--_et-scheduler-time-grid-block-span]=\"segment.span\"\n            class=\"et-scheduler-time-grid-non-business\"\n            role=\"presentation\"\n          ></div>\n        }\n\n        @if (grid.currentTime(); as currentTime) {\n          @if (currentTime.dayIndex === dayIndex) {\n            <div\n              [style.--_et-scheduler-time-grid-now-offset]=\"currentTime.offset\"\n              class=\"et-scheduler-time-grid-now\"\n              role=\"presentation\"\n            ></div>\n          }\n        }\n\n        @if (grid.draftBlock(); as draft) {\n          @if (draft.dayIndex === dayIndex) {\n            <div\n              #draftBlock\n              [style.--_et-scheduler-time-grid-block-offset]=\"draft.offset\"\n              [style.--_et-scheduler-time-grid-block-span]=\"draft.span\"\n              [attr.data-committed]=\"draft.phase === 'committed' ? '' : null\"\n              class=\"et-scheduler-time-grid-draft\"\n              role=\"presentation\"\n            ></div>\n          }\n        }\n\n        @for (slot of column.slots; track slot.hour) {\n          <div\n            #slotCell\n            [attr.aria-label]=\"slot.label\"\n            [attr.tabindex]=\"cellTabIndex(dayIndex, slot.hour + 1)\"\n            (focus)=\"focusedSlot.set({ day: day.date, row: slot.hour + 1 })\"\n            class=\"et-scheduler-time-grid-hour-row et-scheduler-time-grid-slot\"\n            role=\"gridcell\"\n          >\n            <!-- a block's own pointerdown moves it and stops there, so a press that starts on an\n                 appointment never reaches the column's drag-to-create underneath it -->\n            @for (block of slot.blocks; track block.node.appointment.id) {\n              <button\n                #appointmentButton\n                #slotItem\n                [style.--_et-scheduler-time-grid-block-offset]=\"block.offset\"\n                [style.--_et-scheduler-time-grid-block-span]=\"block.span\"\n                [style.--_et-scheduler-time-grid-block-inline-offset]=\"block.inlineOffset\"\n                [style.--_et-scheduler-time-grid-block-inline-size]=\"block.inlineSize\"\n                [style.--_et-scheduler-time-grid-block-depth]=\"block.node.depth\"\n                [attr.data-selected]=\"isSelected(block.node.appointment) ? '' : null\"\n                [attr.data-nested]=\"block.node.depth > 0 ? '' : null\"\n                [attr.data-draggable]=\"canDragAppointments() ? '' : null\"\n                [attr.data-dragging]=\"isDragging(block.node.appointment) ? '' : null\"\n                [attr.title]=\"block.node.appointment.title\"\n                [etProvideColor]=\"block.node.appointment.colorToken ?? null\"\n                (click)=\"select(block.node.appointment, appointmentButton)\"\n                (pointerdown)=\"\n                  startAppointmentDrag($event, {\n                    appointment: block.node.appointment,\n                    mode: 'move',\n                    column: { element: dayColumn, day: day.date },\n                  })\n                \"\n                class=\"et-scheduler-time-grid-block\"\n                type=\"button\"\n                tabindex=\"-1\"\n              >\n                @for (adornment of badgeAdornments(); track $index) {\n                  <ng-container\n                    *ngComponentOutlet=\"adornment.component; inputs: { node: block.node }; injector: adornment.injector\"\n                  />\n                }\n\n                @if (canDragAppointments()) {\n                  <span\n                    (pointerdown)=\"\n                      startAppointmentDrag($event, {\n                        appointment: block.node.appointment,\n                        mode: 'resize-start',\n                        column: { element: dayColumn, day: day.date },\n                      })\n                    \"\n                    class=\"et-scheduler-time-grid-block-resize\"\n                    data-edge=\"start\"\n                    aria-hidden=\"true\"\n                  ></span>\n\n                  <span\n                    (pointerdown)=\"\n                      startAppointmentDrag($event, {\n                        appointment: block.node.appointment,\n                        mode: 'resize-end',\n                        column: { element: dayColumn, day: day.date },\n                      })\n                    \"\n                    class=\"et-scheduler-time-grid-block-resize\"\n                    data-edge=\"end\"\n                    aria-hidden=\"true\"\n                  ></span>\n                }\n              </button>\n            }\n          </div>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import {\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  inputBinding,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError, randomId, signalHostElementDimensions } from '@ethlete/core';\nimport { addHours, format, isSameDay, isSameMonth, isSameYear, setHours, setMinutes, startOfDay } from 'date-fns';\nimport { BUTTON_IMPORTS } from '../button';\nimport { FLOATING_ACTION_IMPORTS } from '../floating-action';\nimport { LabelDirective, SEGMENTED_BUTTON_IMPORTS } from '../forms';\nimport { CALENDAR_ICON, CHEVRON_ICON, IconDirective, PLUS_ICON, provideIcons } from '../icon';\nimport { OverlayRef, createOverlayOpener } from '../overlay';\nimport {\n  SCHEDULER_FEATURE_HOST,\n  SchedulerBadgeAdornment,\n  SchedulerDirective,\n  SchedulerFeatureHost,\n  SchedulerToolbarAction,\n} from './headless';\nimport { SchedulerActionAddAppointmentDirective } from './scheduler-action-add-appointment.directive';\nimport { SchedulerAgendaViewComponent } from './scheduler-agenda-view.component';\nimport { SchedulerAppointmentDragDirective } from './scheduler-appointment-drag.directive';\nimport { SchedulerBadgeChainCountDirective } from './scheduler-badge-chain-count.directive';\nimport { SchedulerBadgeColorDotDirective } from './scheduler-badge-color-dot.directive';\nimport { SchedulerBadgeLocationDirective } from './scheduler-badge-location.directive';\nimport { SchedulerBadgeTimeRangeDirective } from './scheduler-badge-time-range.directive';\nimport { SchedulerBadgeTitleDirective } from './scheduler-badge-title.directive';\nimport { SCHEDULER_EDIT_SURFACE, SchedulerEditSurfaceResult } from './scheduler-edit-surface.token';\nimport { SCHEDULER_ERROR_CODES } from './scheduler-errors';\nimport { injectSchedulerLabels } from './scheduler-labels';\nimport { SchedulerMonthViewComponent } from './scheduler-month-view.component';\nimport { SchedulerSwipeNavigationDirective } from './scheduler-swipe-navigation.directive';\nimport { SchedulerTimeGridViewComponent } from './scheduler-time-grid-view.component';\nimport { Appointment, AppointmentId, SchedulerDraftRange, SchedulerView } from './scheduler.types';\n\nconst NARROW_CONTAINER_WIDTH = 480;\n\n@Component({\n  selector: 'et-scheduler',\n  templateUrl: './scheduler.component.html',\n  styleUrl: './scheduler.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ...BUTTON_IMPORTS,\n    ...FLOATING_ACTION_IMPORTS,\n    ...SEGMENTED_BUTTON_IMPORTS,\n    LabelDirective,\n    IconDirective,\n    SchedulerAgendaViewComponent,\n    SchedulerMonthViewComponent,\n    SchedulerTimeGridViewComponent,\n  ],\n  providers: [\n    provideIcons(CALENDAR_ICON, CHEVRON_ICON, PLUS_ICON),\n    { provide: SCHEDULER_FEATURE_HOST, useExisting: SchedulerComponent },\n  ],\n  hostDirectives: [\n    {\n      directive: SchedulerDirective,\n      inputs: [\n        'appointments',\n        'view',\n        'focusedDate',\n        'selectedAppointmentId',\n        'locale',\n        'firstDayOfWeek',\n        'agendaDays',\n        'businessHours',\n        'nowIndicator',\n      ],\n      outputs: ['viewChange', 'focusedDateChange', 'selectedAppointmentIdChange', 'appointmentReschedule'],\n    },\n    { directive: SchedulerBadgeColorDotDirective, inputs: ['etSchedulerBadgeColorDot'] },\n    { directive: SchedulerBadgeTitleDirective, inputs: ['etSchedulerBadgeTitle'] },\n    { directive: SchedulerBadgeTimeRangeDirective, inputs: ['etSchedulerBadgeTimeRange'] },\n    { directive: SchedulerBadgeLocationDirective, inputs: ['etSchedulerBadgeLocation'] },\n    { directive: SchedulerBadgeChainCountDirective, inputs: ['etSchedulerBadgeChainCount'] },\n    { directive: SchedulerActionAddAppointmentDirective, inputs: ['etSchedulerActionAddAppointment'] },\n    { directive: SchedulerSwipeNavigationDirective, inputs: ['etSchedulerSwipeNavigation'] },\n    { directive: SchedulerAppointmentDragDirective, inputs: ['etSchedulerAppointmentDrag'] },\n  ],\n  host: {\n    class: 'et-scheduler',\n  },\n})\nexport class SchedulerComponent implements SchedulerFeatureHost {\n  private labels = injectSchedulerLabels();\n  private editSurface = inject(SCHEDULER_EDIT_SURFACE, { optional: true });\n\n  /**\n   * The headless directive behind this scheduler - everything `[etScheduler]` exposes, for chrome\n   * of your own around or instead of the default toolbar (`<et-scheduler #s>` then `s.headless`).\n   */\n  public headless = inject(SchedulerDirective);\n\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** Emits the edited or newly-added appointment once the default edit surface saves. */\n  public appointmentSave = output<Appointment>();\n\n  /** Emits every id to remove once the default edit surface deletes a chain. */\n  public appointmentsDelete = output<readonly AppointmentId[]>();\n\n  private dimensions = signalHostElementDimensions();\n\n  protected isNarrow = computed(() => (this.dimensions().client?.width ?? Infinity) < NARROW_CONTAINER_WIDTH);\n\n  public previousLabel = computed(() => this.labels().previous);\n  public nextLabel = computed(() => this.labels().next);\n  public todayLabel = computed(() => this.labels().today);\n  public switchViewLabel = computed(() => this.labels().switchView);\n  public monthViewLabel = computed(() => this.labels().month);\n  public weekViewLabel = computed(() => this.labels().week);\n  public dayViewLabel = computed(() => this.labels().day);\n  public agendaViewLabel = computed(() => this.labels().agenda);\n\n  public headerLabel = computed(() => {\n    const locale = this.headless.effectiveLocale();\n    const options = locale ? { locale } : undefined;\n    const view = this.headless.view();\n\n    if (view === 'day') {\n      return format(this.headless.focusedDate(), 'EEEE, d MMMM yyyy', options);\n    }\n\n    if (view === 'week' || view === 'agenda') {\n      const { start, end } = this.headless.visibleRange();\n\n      if (isSameMonth(start, end)) {\n        return `${format(start, 'd', options)} – ${format(end, 'd MMMM yyyy', options)}`;\n      }\n\n      if (isSameYear(start, end)) {\n        return `${format(start, 'd MMMM', options)} – ${format(end, 'd MMMM yyyy', options)}`;\n      }\n\n      return `${format(start, 'd MMMM yyyy', options)} – ${format(end, 'd MMMM yyyy', options)}`;\n    }\n\n    return format(this.headless.focusedDate(), 'LLLL yyyy', options);\n  });\n\n  private badgeAdornmentList = signal<SchedulerBadgeAdornment[]>([]);\n\n  public badgeAdornments = computed(() =>\n    this.badgeAdornmentList()\n      .filter((adornment) => adornment.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  private toolbarActionList = signal<SchedulerToolbarAction[]>([]);\n\n  public toolbarActions = computed(() =>\n    this.toolbarActionList()\n      .filter((action) => action.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  private editSurfaceRef: OverlayRef<object, SchedulerEditSurfaceResult> | null = null;\n\n  private editSurfaceOpener = this.editSurface\n    ? createOverlayOpener(this.editSurface.editOverlay, {\n        afterClosed: (result) => {\n          this.editSurfaceRef = null;\n          this.handleEditSurfaceResult(result);\n        },\n      })\n    : null;\n\n  // Which selection the edit surface has already acted on. Compared by id, not by appointment\n  // identity: an immutable `appointments` replacement gives the selected appointment a new object\n  // every time, and re-opening on that stacks a second surface over the open one.\n  private handledSelectionId: AppointmentId | null = null;\n\n  private addSurfaceOpener = this.editSurface\n    ? createOverlayOpener(this.editSurface.addOverlay, {\n        afterClosed: (result) => this.handleEditSurfaceResult(result),\n      })\n    : null;\n\n  private openedDraftRange: SchedulerDraftRange | null = null;\n\n  private draftSurfaceOpener = this.editSurface\n    ? createOverlayOpener(this.editSurface.editOverlay, {\n        afterClosed: (result) => {\n          // the close is animated, so a range drawn while it plays out is already the next surface's\n          if (this.headless.draftRange() === this.openedDraftRange) {\n            this.headless.clearDraftRange();\n          }\n\n          this.handleEditSurfaceResult(result);\n        },\n      })\n    : null;\n\n  constructor() {\n    effect(() => {\n      const appointment = this.headless.selectedAppointment();\n\n      if (!appointment || appointment.id === this.handledSelectionId) {\n        return;\n      }\n\n      untracked(() => this.openEditSurface(appointment.id));\n    });\n\n    effect(() => {\n      const draft = this.headless.draftRange();\n\n      if (draft?.phase !== 'committed') {\n        return;\n      }\n\n      untracked(() => this.openDraftSurface(draft));\n    });\n  }\n\n  public setView(value: unknown) {\n    this.headless.view.set(value as SchedulerView);\n  }\n\n  /**\n   * Synthesizes a brand-new, blank top-level appointment - anchored to `focusedDate` so it lands\n   * in whatever period is currently in view, defaulting to the next hour if that's today, else a\n   * business-hours 9am - and opens the edit surface for it. Run by the built-in\n   * `etSchedulerActionAddAppointment` toolbar action; call directly to trigger the same flow from\n   * your own UI (`<et-scheduler #s>` then `s.addAppointment()`).\n   */\n  public addAppointment() {\n    const day = startOfDay(this.headless.focusedDate());\n    const hour = isSameDay(day, new Date()) ? Math.min(23, new Date().getHours() + 1) : 9;\n    const start = setMinutes(setHours(day, hour), 0);\n\n    this.openAddSurface({ id: randomId(), parentId: null, title: '', start, end: addHours(start, 1) });\n  }\n\n  public get element(): HTMLElement {\n    return this.elementRef.nativeElement;\n  }\n\n  public get appointmentTree() {\n    return this.headless.appointmentTree;\n  }\n\n  public get selectedAppointment() {\n    return this.headless.selectedAppointment;\n  }\n\n  public appointments(): readonly Appointment[] {\n    return this.headless.visibleAppointments();\n  }\n\n  public registerBadgeAdornment(adornment: SchedulerBadgeAdornment) {\n    this.badgeAdornmentList.update((list) => [...list, adornment]);\n  }\n\n  public registerToolbarAction(action: SchedulerToolbarAction) {\n    this.toolbarActionList.update((list) => [...list, action]);\n  }\n\n  /**\n   * Selects an appointment and opens the default edit surface for it, anchored to whatever the\n   * view registered for the interaction. Runs for you whenever `selectedAppointmentId` changes to\n   * an appointment the surface is not already open for; call it to re-open the surface for the\n   * appointment that is already selected, or to open one from your own UI.\n   */\n  public openEditSurface(id: AppointmentId) {\n    const appointment = untracked(this.headless.appointments).find((candidate) => candidate.id === id);\n\n    if (!appointment) {\n      return;\n    }\n\n    if (!this.editSurfaceOpener) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          SCHEDULER_ERROR_CODES.EDIT_SURFACE_NOT_REGISTERED,\n          '[Scheduler] An appointment was selected without the default edit surface. Add provideSchedulerEditSurface() to a parent injector.',\n        );\n      }\n\n      return;\n    }\n\n    this.handledSelectionId = id;\n    this.headless.selectedAppointmentId.set(id);\n\n    this.editSurfaceRef = this.editSurfaceOpener.open({\n      origin: this.takeSurfaceAnchor(),\n      bindings: this.editSurfaceBindings(appointment),\n    });\n  }\n\n  /** Closes the default edit surface without saving, clearing `selectedAppointmentId` back to `null`. */\n  public closeEditSurface() {\n    this.editSurfaceRef?.close();\n  }\n\n  /**\n   * Selects an appointment without opening the edit surface - for highlighting one from a sidebar\n   * or a list of your own. Writing `selectedAppointmentId` directly always opens the surface.\n   */\n  public selectAppointment(id: AppointmentId | null) {\n    this.handledSelectionId = id;\n    this.headless.selectedAppointmentId.set(id);\n  }\n\n  private openAddSurface(appointment: Appointment) {\n    if (!this.addSurfaceOpener) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          SCHEDULER_ERROR_CODES.EDIT_SURFACE_NOT_REGISTERED,\n          '[Scheduler] An appointment was added without the default edit surface. Add provideSchedulerEditSurface() to a parent injector.',\n        );\n      }\n\n      return;\n    }\n\n    this.addSurfaceOpener.open({ bindings: this.editSurfaceBindings(appointment) });\n  }\n\n  private openDraftSurface(draft: SchedulerDraftRange) {\n    if (!this.editSurfaceOpener) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          SCHEDULER_ERROR_CODES.EDIT_SURFACE_NOT_REGISTERED,\n          '[Scheduler] A draft range was committed without the default edit surface. Add provideSchedulerEditSurface() to a parent injector.',\n        );\n      }\n\n      return;\n    }\n\n    const appointment: Appointment = {\n      id: randomId(),\n      parentId: null,\n      title: '',\n      start: draft.start,\n      end: draft.end,\n      allDay: draft.allDay,\n    };\n\n    this.openedDraftRange = draft;\n\n    this.draftSurfaceOpener?.open({\n      origin: this.takeSurfaceAnchor(),\n      bindings: this.editSurfaceBindings(appointment),\n    });\n  }\n\n  private takeSurfaceAnchor(): HTMLElement | undefined {\n    const anchor = this.headless.surfaceAnchor();\n\n    this.headless.surfaceAnchor.set(null);\n\n    return anchor ?? undefined;\n  }\n\n  private editSurfaceBindings(appointment: Appointment) {\n    return [\n      inputBinding('appointment', () => appointment),\n      inputBinding('appointments', () => this.headless.appointments()),\n    ];\n  }\n\n  private handleEditSurfaceResult(result: SchedulerEditSurfaceResult | null | undefined) {\n    if (result?.kind === 'save') {\n      this.appointmentSave.emit(result.appointment);\n    } else if (result?.kind === 'delete') {\n      this.appointmentsDelete.emit(result.ids);\n    }\n\n    this.handledSelectionId = null;\n    this.headless.selectedAppointmentId.set(null);\n  }\n}\n","<div class=\"et-scheduler-header\">\n  <button\n    [attr.aria-label]=\"todayLabel()\"\n    (click)=\"headless.goToToday()\"\n    class=\"et-scheduler-today-button\"\n    et-button\n    size=\"sm\"\n    variant=\"outline\"\n    type=\"button\"\n  >\n    <i etIcon=\"et-calendar\" aria-hidden=\"true\"></i>\n    <span class=\"et-scheduler-today-button-label\">{{ todayLabel() }}</span>\n  </button>\n\n  @if (isNarrow()) {\n    <div class=\"et-scheduler-toolbar-fabs\" etFloatingAction>\n      <div etFloatingActionAnchor>\n        <div class=\"et-scheduler-toolbar-fab-stack\" etFloatingActionTrigger>\n          @for (action of toolbarActions(); track $index) {\n            @if (action.icon; as icon) {\n              <button\n                [attr.aria-label]=\"action.label()\"\n                (click)=\"action.run()\"\n                class=\"et-scheduler-toolbar-action\"\n                et-fab\n                type=\"button\"\n              >\n                <i [etIcon]=\"icon\" aria-hidden=\"true\"></i>\n              </button>\n            } @else {\n              <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-fab expanded type=\"button\">\n                {{ action.label() }}\n              </button>\n            }\n          }\n        </div>\n      </div>\n    </div>\n  } @else {\n    @for (action of toolbarActions(); track $index) {\n      <button (click)=\"action.run()\" class=\"et-scheduler-toolbar-action\" et-button size=\"sm\" type=\"button\">\n        @if (action.icon) {\n          <i [etIcon]=\"action.icon\" aria-hidden=\"true\"></i>\n        }\n        {{ action.label() }}\n      </button>\n    }\n  }\n\n  <div class=\"et-scheduler-nav-buttons\">\n    <button\n      [attr.aria-label]=\"previousLabel()\"\n      (click)=\"headless.previous()\"\n      class=\"et-scheduler-nav-button et-scheduler-nav-button--previous\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n\n    <button\n      [attr.aria-label]=\"nextLabel()\"\n      (click)=\"headless.next()\"\n      class=\"et-scheduler-nav-button et-scheduler-nav-button--next\"\n      et-icon-button\n      size=\"sm\"\n      type=\"button\"\n    >\n      <i etIcon=\"et-chevron\"></i>\n    </button>\n  </div>\n\n  <span class=\"et-scheduler-header-label\">{{ headerLabel() }}</span>\n\n  <div class=\"et-scheduler-header-spacer\"></div>\n\n  <et-segmented-button-group\n    [value]=\"headless.view()\"\n    (valueChange)=\"setView($event)\"\n    class=\"et-scheduler-view-switch\"\n    size=\"sm\"\n    variant=\"tabs\"\n  >\n    <et-label class=\"et-scheduler-view-switch-label\">{{ switchViewLabel() }}</et-label>\n\n    <et-segmented-button value=\"month\">{{ monthViewLabel() }}</et-segmented-button>\n    <et-segmented-button value=\"week\">{{ weekViewLabel() }}</et-segmented-button>\n    <et-segmented-button value=\"day\">{{ dayViewLabel() }}</et-segmented-button>\n    <et-segmented-button value=\"agenda\">{{ agendaViewLabel() }}</et-segmented-button>\n  </et-segmented-button-group>\n</div>\n\n<div class=\"et-scheduler-body\">\n  @switch (headless.view()) {\n    @case ('week') {\n      <et-scheduler-time-grid-view [attr.aria-label]=\"headerLabel()\" />\n    }\n    @case ('day') {\n      <et-scheduler-time-grid-view [attr.aria-label]=\"headerLabel()\" />\n    }\n    @case ('agenda') {\n      <et-scheduler-agenda-view />\n    }\n    @default {\n      <et-scheduler-month-view [attr.aria-label]=\"headerLabel()\" />\n    }\n  }\n</div>\n","import {\n  SchedulerAgendaDirective,\n  SchedulerDirective,\n  SchedulerEditSurfaceDirective,\n  SchedulerMonthDirective,\n  SchedulerTimeGridDirective,\n} from './headless';\nimport { SchedulerActionAddAppointmentDirective } from './scheduler-action-add-appointment.directive';\nimport { SchedulerActionAddSubAppointmentDirective } from './scheduler-action-add-sub-appointment.directive';\nimport { SchedulerActionDeleteDirective } from './scheduler-action-delete.directive';\nimport { SchedulerAgendaViewComponent } from './scheduler-agenda-view.component';\nimport { SchedulerAppointmentDragDirective } from './scheduler-appointment-drag.directive';\nimport { SchedulerBadgeChainCountDirective } from './scheduler-badge-chain-count.directive';\nimport { SchedulerBadgeColorDotDirective } from './scheduler-badge-color-dot.directive';\nimport { SchedulerBadgeLocationDirective } from './scheduler-badge-location.directive';\nimport { SchedulerBadgeTimeRangeDirective } from './scheduler-badge-time-range.directive';\nimport { SchedulerBadgeTitleDirective } from './scheduler-badge-title.directive';\nimport { SchedulerEditColorDirective } from './scheduler-edit-color.directive';\nimport { SchedulerEditDescriptionDirective } from './scheduler-edit-description.directive';\nimport { SchedulerEditLocationDirective } from './scheduler-edit-location.directive';\nimport { SchedulerEditSurfaceComponent } from './scheduler-edit-surface.component';\nimport { SchedulerEditTimeRangeDirective } from './scheduler-edit-time-range.directive';\nimport { SchedulerEditTitleDirective } from './scheduler-edit-title.directive';\nimport { SchedulerSwipeNavigationDirective } from './scheduler-swipe-navigation.directive';\nimport { SchedulerComponent } from './scheduler.component';\nimport { SchedulerMonthViewComponent } from './scheduler-month-view.component';\nimport { SchedulerTimeGridViewComponent } from './scheduler-time-grid-view.component';\n\nexport const SCHEDULER_IMPORTS = [\n  SchedulerDirective,\n  SchedulerAgendaDirective,\n  SchedulerMonthDirective,\n  SchedulerTimeGridDirective,\n  SchedulerComponent,\n  SchedulerAgendaViewComponent,\n  SchedulerMonthViewComponent,\n  SchedulerTimeGridViewComponent,\n  SchedulerBadgeColorDotDirective,\n  SchedulerBadgeTitleDirective,\n  SchedulerBadgeTimeRangeDirective,\n  SchedulerBadgeLocationDirective,\n  SchedulerBadgeChainCountDirective,\n  SchedulerActionAddAppointmentDirective,\n  SchedulerSwipeNavigationDirective,\n  SchedulerAppointmentDragDirective,\n] as const;\n\nexport const SCHEDULER_EDIT_IMPORTS = [\n  SchedulerEditSurfaceDirective,\n  SchedulerEditSurfaceComponent,\n  SchedulerEditTitleDirective,\n  SchedulerEditTimeRangeDirective,\n  SchedulerEditLocationDirective,\n  SchedulerEditDescriptionDirective,\n  SchedulerEditColorDirective,\n  SchedulerActionAddSubAppointmentDirective,\n  SchedulerActionDeleteDirective,\n] as const;\n","import { Provider } from '@angular/core';\nimport { SCHEDULER_ADD_SURFACE_OVERLAY, SCHEDULER_EDIT_SURFACE_OVERLAY } from './scheduler-edit-surface.component';\nimport { SCHEDULER_EDIT_SURFACE } from './scheduler-edit-surface.token';\n\n/** Registers the default Scheduler edit surface for schedulers in this injector's subtree. */\nexport const provideSchedulerEditSurface = (): Provider => ({\n  provide: SCHEDULER_EDIT_SURFACE,\n  useValue: {\n    editOverlay: SCHEDULER_EDIT_SURFACE_OVERLAY,\n    addOverlay: SCHEDULER_ADD_SURFACE_OVERLAY,\n  },\n});\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\nimport { StandingsFormResult } from './standings.types';\n\n/**\n * Every string `et-standings` renders or announces. Column headers are abbreviated on screen and spelled\n * out for assistive tech, which is the whole reason there are two of each.\n */\nexport type StandingsLabels = {\n  /** The table's caption - what this table is a table of. */\n  caption: string;\n  /** The position column, abbreviated. */\n  position: string;\n  /** The position column, spelled out. */\n  positionFull: string;\n  /** The participant column header. */\n  participant: string;\n  played: string;\n  playedFull: string;\n  wins: string;\n  winsFull: string;\n  ties: string;\n  tiesFull: string;\n  losses: string;\n  lossesFull: string;\n  difference: string;\n  differenceFull: string;\n  points: string;\n  pointsFull: string;\n  form: string;\n  formFull: string;\n  /** One entry of the form column, e.g. `'Win'`. */\n  formResult: (result: StandingsFormResult) => string;\n  /** Names the zone legend for assistive tech. */\n  legend: string;\n  /** Announced on the highlighted row, so it is findable without seeing the highlight. */\n  highlightedRow: string;\n  /** Names the pick list - what the order being arranged is an order of. */\n  pickCaption: string;\n  /** The cut between the last advancing position and the first one below it. */\n  pickCut: string;\n  /** Announced on every row above the cut, so the line isn't the only thing that says it. */\n  pickAdvancingRow: string;\n  /** Names a row's reorder control. Both ways to sort belong in it, so both are named. */\n  pickMoveRow: (participant: string) => string;\n  /** Announced on a list whose order can no longer be changed. */\n  pickLocked: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_STANDINGS_LABELS: StandingsLabels = {\n  caption: 'Standings',\n  position: '#',\n  positionFull: 'Position',\n  participant: 'Team',\n  played: 'P',\n  playedFull: 'Played',\n  wins: 'W',\n  winsFull: 'Wins',\n  ties: 'D',\n  tiesFull: 'Draws',\n  losses: 'L',\n  lossesFull: 'Losses',\n  difference: 'Diff',\n  differenceFull: 'Difference',\n  points: 'Pts',\n  pointsFull: 'Points',\n  form: 'Form',\n  formFull: 'Recent form, oldest first',\n  formResult: (result) => (result === 'win' ? 'Win' : result === 'loss' ? 'Loss' : 'Draw'),\n  legend: 'What the highlighted positions mean',\n  highlightedRow: 'Your team',\n  pickCaption: 'Your predicted order',\n  pickCut: 'Advancing',\n  pickAdvancingRow: 'Advancing',\n  pickMoveRow: (participant) => `Move ${participant}. Drag it, or use the arrow keys.`,\n  pickLocked: 'This order can no longer be changed',\n};\n\nconst STANDINGS_LABELS_DEF = /* @__PURE__ */ defineLabels<StandingsLabels>(\n  'STANDINGS_LABELS',\n  DEFAULT_STANDINGS_LABELS,\n);\n\n/**\n * Localize the standings table for everything below this injector. Partial - whatever you leave out keeps\n * its {@link DEFAULT_STANDINGS_LABELS} value.\n *\n * @example\n * provideStandingsLabels({ caption: 'Tabelle', participant: 'Verein', points: 'Pkt', pointsFull: 'Punkte' });\n */\nexport const provideStandingsLabels = /* @__PURE__ */ toProvideFn(STANDINGS_LABELS_DEF);\nexport const injectStandingsLabels = /* @__PURE__ */ toInjectFn(STANDINGS_LABELS_DEF);\nexport const STANDINGS_LABELS = /* @__PURE__ */ toToken(STANDINGS_LABELS_DEF);\n","// codes 4400-4499\nexport const STANDINGS_ERROR_CODES = {\n  /** Two zones cover the same position, so a row would be in both. */\n  OVERLAPPING_ZONES: 4400,\n  /** More than one mark template was given to one pick list. */\n  DUPLICATE_MARK_TEMPLATE: 4401,\n} as const;\n","import { booleanAttribute, computed, Directive, effect, input } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { injectStandingsLabels, StandingsLabels } from '../standings-labels';\nimport { STANDINGS_ERROR_CODES } from '../standings-errors';\nimport { NormalizedStandingRow, StandingsZone } from '../standings.types';\n\n/** A row paired with whatever the config says about the position it sits in. */\nexport type StandingsRenderRow = {\n  row: NormalizedStandingRow;\n  /** The zone this position falls in, or `null` when it falls in none. */\n  zone: StandingsZone | null;\n  /** Whether this is the row the consumer asked to highlight. */\n  isHighlighted: boolean;\n};\n\n/**\n * Headless standings: takes rows and zone bands and works out what each row means - which band it sits in,\n * whether it is the one to highlight - plus the strings the table announces.\n *\n * It imposes no markup. The default `et-standings` puts a real `<table>` around this; a consumer who wants\n * cards instead of rows can read the same state.\n */\n@Directive({\n  selector: '[etStandings]',\n  exportAs: 'etStandings',\n  host: {\n    '[attr.data-has-zones]': 'zones().length ? \"\" : null',\n  },\n})\nexport class StandingsDirective {\n  private hostElement = injectHostElement();\n\n  private injectedLabels = injectStandingsLabels();\n\n  /** The rows, in the order they should appear - this never re-sorts them. */\n  public rows = input.required<readonly NormalizedStandingRow[]>();\n\n  /**\n   * Position bands that mean something (promotion, relegation, advancing). The same config draws the row\n   * banding and the legend. @default []\n   */\n  public zones = input<readonly StandingsZone[]>([]);\n\n  /** The `id` of the row to single out - \"your team\" in a table of twenty. */\n  public highlightedRowId = input<string | null>(null);\n\n  /** Draw the legend under the table. Off with no zones either way. @default true */\n  public showLegend = input(true, { transform: booleanAttribute });\n\n  /** Override this instance's strings - see {@link provideStandingsLabels} for the app-wide version. */\n  public labels = input<Partial<StandingsLabels> | null>(null);\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<StandingsLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** Every row with its zone and highlight state resolved - what a template iterates. */\n  public renderRows = computed<StandingsRenderRow[]>(() => {\n    const zones = this.zones();\n    const highlightedRowId = this.highlightedRowId();\n\n    return this.rows().map((row) => ({\n      row,\n      zone: zones.find((zone) => row.position >= zone.from && row.position <= zone.to) ?? null,\n      isHighlighted: !!highlightedRowId && row.id === highlightedRowId,\n    }));\n  });\n\n  /** The zones the legend lists - none of them when the legend is off. */\n  public legendZones = computed(() => (this.showLegend() ? this.zones() : []));\n\n  /** Whether any row reports form, since an empty column is worse than no column. */\n  public hasForm = computed(() => this.rows().some((row) => !!row.form?.length));\n\n  /** Whether any row reports a difference. */\n  public hasDifference = computed(() => this.rows().some((row) => row.difference !== null));\n\n  constructor() {\n    if (ngDevMode) {\n      effect(() => this.assertZonesDoNotOverlap(this.zones()));\n    }\n  }\n\n  private assertZonesDoNotOverlap(zones: readonly StandingsZone[]) {\n    for (const [index, zone] of zones.entries()) {\n      const overlapping = zones.find(\n        (other, otherIndex) => otherIndex !== index && other.from <= zone.to && other.to >= zone.from,\n      );\n\n      if (!overlapping) continue;\n\n      throw new RuntimeError(\n        STANDINGS_ERROR_CODES.OVERLAPPING_ZONES,\n        `[StandingsDirective] The zones \"${zone.label}\" (${zone.from}-${zone.to}) and \"${overlapping.label}\" ` +\n          `(${overlapping.from}-${overlapping.to}) both cover a position, so a row would be in both. ` +\n          'Give every zone its own range.',\n        { element: this.hostElement },\n      );\n    }\n  }\n}\n","import { booleanAttribute, computed, Directive, input, model, numberAttribute, signal } from '@angular/core';\nimport { StandingPick, standingPickStartOrder } from '@ethlete/bracket';\nimport { NormalizedMatchParticipant } from '../../match';\nimport { injectStandingsLabels, StandingsLabels } from '../standings-labels';\nimport { StandingsPickMarkDirective } from './standings-pick-mark.directive';\n\n/** One row of a pick list: who sits on a position, and what that position means. */\nexport type StandingsPickRow = {\n  participant: NormalizedMatchParticipant;\n  /** Where they sit in the current order, 1-based. */\n  position: number;\n  /** Whether the position is on the advancing side of the cut. */\n  isAdvancing: boolean;\n  /** Whether the cut belongs under this row - the last advancing position, with rows still to come. */\n  isLastAdvancing: boolean;\n};\n\n/** A move of one row, by 0-based index. */\nexport type StandingsPickMove = {\n  from: number;\n  to: number;\n};\n\n/**\n * Headless group picks: owns the order a viewer arranges a group table into, where it starts from, and\n * where the advancing cut falls.\n *\n * It imposes no markup and knows nothing about pointers or keys - a caller turns a drag, an arrow key or a\n * \"reset\" button into the same {@link StandingsPickDirective.move} call. The default `et-standings-pick`\n * draws it; a consumer who wants their own layout reads the same state.\n *\n * @example\n * <ul [participants]=\"teams()\" [advancingCount]=\"2\" etStandingsPick #pick=\"etStandingsPick\">\n *   @for (row of pick.rows(); track row.participant.id) { … }\n * </ul>\n */\n@Directive({\n  selector: '[etStandingsPick]',\n  exportAs: 'etStandingsPick',\n  host: {\n    '[attr.data-locked]': 'locked() ? \"\" : null',\n  },\n})\nexport class StandingsPickDirective {\n  private injectedLabels = injectStandingsLabels();\n\n  /** The participants of the group, in the order the backend listed them. */\n  public participants = input.required<readonly NormalizedMatchParticipant[]>();\n\n  /** Picks already stored, by position - what the order starts as before anyone moves a row. @default [] */\n  public storedPicks = input<readonly StandingPick[]>([]);\n\n  /** How many positions advance. The cut sits after the last of them; `0` draws none. @default 0 */\n  public advancingCount = input(0, { transform: numberAttribute });\n\n  /** Refuse every move, keeping the order readable. @default false */\n  public locked = input(false, { transform: booleanAttribute });\n\n  /**\n   * The order on screen, as participant ids. Bind it two-way to own the order - a draft to submit, a reset\n   * button, an order restored from elsewhere. Left `null` it follows `participants` and `storedPicks`.\n   */\n  public order = model<readonly string[] | null>(null);\n\n  /** Override this instance's strings - see {@link provideStandingsLabels} for the app-wide version. */\n  public labels = input<Partial<StandingsLabels> | null>(null);\n\n  /** The strings in effect here: the injected label set with this instance's `labels` applied. */\n  public resolvedLabels = computed<StandingsLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /** The order a list with no `order` bound opens in: the stored picks on their positions, the rest behind. */\n  public startOrder = computed(() =>\n    standingPickStartOrder({\n      participantIds: this.participants().map((participant) => participant.id),\n      picks: this.storedPicks(),\n    }),\n  );\n\n  /** The order actually drawn - `order` when one is bound, {@link startOrder} otherwise. */\n  public resolvedOrder = computed<readonly string[]>(() => this.order() ?? this.startOrder());\n\n  /** The template a row's mark slot is filled with, registered by `ng-template[etStandingsPickMark]`. */\n  public registeredMarkTemplate = signal<StandingsPickMarkDirective | null>(null);\n\n  /** Every row in the order it is drawn - what a template iterates. */\n  public rows = computed<StandingsPickRow[]>(() => {\n    const byId = new Map(this.participants().map((participant) => [participant.id, participant]));\n    const advancingCount = this.advancingCount();\n    const order = this.resolvedOrder();\n\n    return order.flatMap((id, index) => {\n      const participant = byId.get(id);\n\n      if (!participant) return [];\n\n      const position = index + 1;\n\n      return [\n        {\n          participant,\n          position,\n          isAdvancing: position <= advancingCount,\n          isLastAdvancing: position === advancingCount && position < order.length,\n        },\n      ];\n    });\n  });\n\n  /**\n   * Move the row at `from` to `to`, both 0-based.\n   *\n   * Does nothing while the list is locked, and nothing when either index is outside it - an index is never\n   * clamped, so an arrow key on the first or the last row leaves the order as it is instead of moving the\n   * row somewhere the user did not ask for.\n   */\n  public move(move: StandingsPickMove) {\n    const { from, to } = move;\n\n    if (this.locked() || from === to) return;\n\n    const order = [...this.resolvedOrder()];\n\n    if (from < 0 || from >= order.length || to < 0 || to >= order.length) return;\n\n    const [moved] = order.splice(from, 1);\n\n    if (moved === undefined) return;\n\n    order.splice(to, 0, moved);\n    this.order.set(order);\n  }\n}\n","import { DestroyRef, Directive, inject, TemplateRef } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { STANDINGS_ERROR_CODES } from '../standings-errors';\nimport { StandingsPickDirective, StandingsPickRow } from './standings-pick.directive';\n\nexport type StandingsPickMarkContext = {\n  $implicit: StandingsPickRow;\n  index: number;\n};\n\n/**\n * Fills the slot at the end of every pick row with the app's own mark - what the pick scored, a check, a\n * cross, the position it turned out to be. Whether a pick was right is the app's data, so the list draws\n * nothing there by itself.\n *\n * @example\n * <et-standings-pick [participants]=\"teams()\" [advancingCount]=\"2\">\n *   <ng-template let-row etStandingsPickMark>\n *     <span>{{ pointsOf(row.participant.id) }}</span>\n *   </ng-template>\n * </et-standings-pick>\n */\n@Directive({\n  selector: 'ng-template[etStandingsPickMark]',\n  exportAs: 'etStandingsPickMark',\n})\nexport class StandingsPickMarkDirective {\n  private pick = inject(StandingsPickDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement<Comment>();\n\n  public templateRef = inject<TemplateRef<StandingsPickMarkContext>>(TemplateRef);\n\n  constructor() {\n    if (ngDevMode && this.pick?.registeredMarkTemplate()) {\n      throw new RuntimeError(\n        STANDINGS_ERROR_CODES.DUPLICATE_MARK_TEMPLATE,\n        '[StandingsPickMarkDirective] An et-standings-pick accepts only one ng-template[etStandingsPickMark]. ' +\n          'Remove the extra template.',\n        { element: this.hostElement },\n      );\n    }\n\n    this.pick?.registeredMarkTemplate.set(this);\n\n    this.destroyRef.onDestroy(() => {\n      if (this.pick?.registeredMarkTemplate() === this) {\n        this.pick.registeredMarkTemplate.set(null);\n      }\n    });\n  }\n}\n","import { EthleteParticipantInput, normalizeEthleteParticipant } from '../../match';\nimport { NormalizedStandingRow, StandingsZone } from '../standings.types';\n\n/** The placement fields {@link normalizeEthletePlacement} reads. Pass your API variant's own placement model; extra fields are ignored. */\nexport type EthletePlacementInput = {\n  participant: EthleteParticipantInput | null;\n  position: number;\n  score: number;\n  wins: number;\n  ties: number;\n  losses: number;\n  ownPoints: number;\n  enemyPoints: number;\n  gameAmount: number;\n};\n\n/** The group ranking fields {@link normalizeEthleteGroupRanking} reads. */\nexport type EthleteGroupRankingInput = {\n  groupName: string;\n  qualifiedPlayers: number | null;\n  placements: readonly EthletePlacementInput[];\n};\n\n/**\n * `EthletePlacementInput` → {@link NormalizedStandingRow}. A plain function, like every adapter in this library:\n * call it wherever the data arrives, and another API writes its own `(data) => NormalizedStandingRow`.\n *\n * `score` is what the API ranks by, so it becomes `points`; the difference is derived from the game points\n * either side has taken off the other, which is the only difference a placement can express.\n *\n * The list views carry no form history - fill `form` in afterwards if you have it elsewhere.\n *\n * @example\n * protected rows = computed(() => this.query.response()?.placements.map(normalizeEthletePlacement) ?? []);\n */\nexport const normalizeEthletePlacement = (placement: EthletePlacementInput): NormalizedStandingRow => ({\n  id: placement.participant?.id ?? `position-${placement.position}`,\n  position: placement.position,\n  participant: normalizeEthleteParticipant(placement.participant),\n  played: placement.gameAmount,\n  wins: placement.wins,\n  ties: placement.ties,\n  losses: placement.losses,\n  points: placement.score,\n  difference: placement.ownPoints - placement.enemyPoints,\n  form: null,\n});\n\n/**\n * `EthleteGroupRankingInput` → its rows plus the zone its `qualifiedPlayers` implies, which is the one piece of\n * banding the API knows about: the top N advance. The label is yours to pass, since \"advance to the\n * playoffs\" and \"qualify for the finals\" are the same field and different words.\n *\n * @example\n * protected standings = computed(() =>\n *   normalizeEthleteGroupRanking({ group: group(), advancingColor: 'success', advancingLabel: 'Advances' }),\n * );\n */\nexport const normalizeEthleteGroupRanking = (options: {\n  group: EthleteGroupRankingInput;\n  /** A registered color theme name for the advancing band. Omit to get no zone at all. */\n  advancingColor?: string;\n  advancingLabel?: string;\n}) => {\n  const { group, advancingColor, advancingLabel } = options;\n  const qualified = group.qualifiedPlayers ?? 0;\n\n  const zones: StandingsZone[] =\n    advancingColor && qualified > 0\n      ? [{ from: 1, to: qualified, color: advancingColor, label: advancingLabel ?? 'Advances' }]\n      : [];\n\n  return {\n    caption: group.groupName,\n    rows: group.placements.map(normalizeEthletePlacement),\n    zones,\n  };\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, ElementRef, inject, signal, ViewEncapsulation, viewChildren } from '@angular/core';\nimport { DragHandleDirective, DragMoveEvent } from '@ethlete/core';\nimport { FocusRingDirective } from '../focus-ring';\nimport { injectMatchLabels, MATCH_PARTICIPANT_IMPORTS, matchParticipantDisplayName } from '../match';\nimport { StandingsPickDirective, StandingsPickMarkContext, StandingsPickMove } from './headless';\n\n/** A row's resting slot, measured from the layout the preview transforms never touch. */\ntype PickSlot = {\n  top: number;\n  mid: number;\n};\n\nconst slotAt = (slots: readonly PickSlot[], clientY: number) =>\n  Math.min(slots.filter((slot) => clientY > slot.mid).length, Math.max(slots.length - 1, 0));\n\n/**\n * How far each row has to shift to sit where the move would leave it.\n *\n * Every row is mapped onto a **measured** slot rather than onto a sum of row heights, so the cut line\n * between two of them is accounted for and any permutation lands exactly on a real slot.\n */\nconst previewOffsets = (slots: readonly PickSlot[], move: { from: number; to: number }) => {\n  const landing = slots.map((_, index) => index);\n  const [moved] = landing.splice(move.from, 1);\n\n  if (moved !== undefined) landing.splice(move.to, 0, moved);\n\n  const offsets = slots.map(() => 0);\n\n  landing.forEach((restingIndex, slot) => {\n    offsets[restingIndex] = (slots[slot]?.top ?? 0) - (slots[restingIndex]?.top ?? 0);\n  });\n\n  return offsets;\n};\n\n/**\n * A group table a viewer predicts the order of: the participants as a list of cards, reorderable by drag\n * and by keyboard, with the advancing cut drawn where the qualifying places end. Driven by the headless\n * {@link StandingsPickDirective}.\n *\n * Every row carries **one** control, and it does both: it is the drag grip and the target for ArrowUp /\n * ArrowDown, so the order can be arranged without a pointer. Focus stays on the row it was on while the\n * row moves under it.\n *\n * The row's trailing slot is the app's - fill it with `ng-template[etStandingsPickMark]` to show what a\n * pick scored. Whether a pick was right is the app's data, so this component models no points.\n *\n * @example\n * <et-standings-pick [(order)]=\"order\" [participants]=\"teams()\" [advancingCount]=\"2\" />\n *\n * @example\n * <!-- once the group is over -->\n * <et-standings-pick [participants]=\"teams()\" [storedPicks]=\"picks()\" [advancingCount]=\"2\" locked>\n *   <ng-template let-row etStandingsPickMark>{{ pointsOf(row.participant.id) }}</ng-template>\n * </et-standings-pick>\n */\n@Component({\n  selector: 'et-standings-pick',\n  templateUrl: './standings-pick.component.html',\n  styleUrl: './standings-pick.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MATCH_PARTICIPANT_IMPORTS, NgTemplateOutlet, DragHandleDirective, FocusRingDirective],\n  hostDirectives: [\n    {\n      directive: StandingsPickDirective,\n      inputs: ['participants', 'storedPicks', 'advancingCount', 'locked', 'order', 'labels'],\n      outputs: ['orderChange'],\n    },\n  ],\n  host: {\n    class: 'et-standings-pick',\n  },\n})\nexport class StandingsPickComponent {\n  protected pick = inject(StandingsPickDirective);\n\n  private matchLabels = injectMatchLabels();\n\n  private rowElements = viewChildren<ElementRef<HTMLElement>>('rowElement');\n\n  private dragState = signal<{ from: number; to: number; liftY: number; offsets: readonly number[] } | null>(null);\n\n  protected labels = computed(() => this.pick.resolvedLabels());\n\n  protected isDragging = computed(() => !!this.dragState());\n\n  protected draggingIndex = computed(() => this.dragState()?.from ?? -1);\n\n  protected renderRows = computed(() => {\n    const labels = this.labels();\n    const matchLabels = this.matchLabels();\n\n    return this.pick.rows().map((row, index) => ({\n      row,\n      markContext: { $implicit: row, index } satisfies StandingsPickMarkContext,\n      moveLabel: labels.pickMoveRow(matchParticipantDisplayName({ participant: row.participant, labels: matchLabels })),\n    }));\n  });\n\n  protected translates = computed<(string | null)[]>(() => {\n    const state = this.dragState();\n\n    if (!state) return [];\n\n    return this.pick.rows().map((_, index) => {\n      if (index === state.from) return `0 ${state.liftY}px`;\n\n      const offset = state.offsets[index] ?? 0;\n\n      return offset ? `0 ${offset}px` : null;\n    });\n  });\n\n  protected startDrag(index: number) {\n    if (this.pick.locked()) return;\n\n    this.dragState.set({ from: index, to: index, liftY: 0, offsets: [] });\n  }\n\n  protected previewDrop(event: DragMoveEvent) {\n    const state = this.dragState();\n\n    if (!state) return;\n\n    const slots = this.slots();\n    const to = slotAt(slots, event.clientY);\n\n    this.dragState.set({\n      from: state.from,\n      to,\n      liftY: event.totalDy,\n      offsets: previewOffsets(slots, { from: state.from, to }),\n    });\n  }\n\n  /**\n   * Commit and drop the preview in one change, so the reordered list renders straight into the positions\n   * the preview already put the cards in - clearing them a tick later flashes the old order.\n   */\n  protected commitDrop() {\n    const state = this.dragState();\n\n    this.dragState.set(null);\n\n    if (state) this.pick.move({ from: state.from, to: state.to });\n  }\n\n  /** The browser took the gesture away, so there is no position the user chose - slide back. */\n  protected abandonDrag() {\n    this.dragState.set(null);\n  }\n\n  protected moveByKey(event: Event, move: StandingsPickMove) {\n    event.preventDefault();\n    this.pick.move(move);\n  }\n\n  /**\n   * The rows' resting slots. Read live off the row wrappers, which the preview never transforms - only the\n   * cards inside them move - so each pointer position maps to one slot however far the preview has slid.\n   */\n  private slots(): PickSlot[] {\n    return this.rowElements().map((ref) => {\n      const rect = ref.nativeElement.getBoundingClientRect();\n\n      return { top: rect.top, mid: rect.top + rect.height / 2 };\n    });\n  }\n}\n","<ol\n  [attr.aria-label]=\"labels().pickCaption\"\n  [attr.data-dragging]=\"isDragging() ? '' : null\"\n  class=\"et-standings-pick-list\"\n>\n  @for (renderRow of renderRows(); track renderRow.row.participant.id; let index = $index) {\n    <li [attr.data-advancing]=\"renderRow.row.isAdvancing ? '' : null\" class=\"et-standings-pick-item\">\n      <!-- Never transformed - the preview moves the card inside it, so this wrapper stays a resting slot the\n           drag can measure, and the position number and the cut line below stay put while cards slide past. -->\n      <div #rowElement class=\"et-standings-pick-row\">\n        <span class=\"et-standings-pick-position\">{{ renderRow.row.position }}</span>\n\n        <div\n          [style.translate]=\"translates()[index] ?? null\"\n          [attr.data-dragging]=\"draggingIndex() === index ? '' : null\"\n          class=\"et-standings-pick-card\"\n        >\n          <et-match-participant [participant]=\"renderRow.row.participant\" class=\"et-standings-pick-participant\" />\n\n          @if (renderRow.row.isAdvancing) {\n            <!-- The cut is drawn, so it needs saying too: a row-by-row reader never reaches the line. -->\n            <span class=\"et-standings-pick-note\">{{ labels().pickAdvancingRow }}</span>\n          }\n\n          @if (pick.registeredMarkTemplate(); as mark) {\n            <span class=\"et-standings-pick-mark\">\n              <ng-template [ngTemplateOutlet]=\"mark.templateRef\" [ngTemplateOutletContext]=\"renderRow.markContext\" />\n            </span>\n          }\n\n          @if (!pick.locked()) {\n            <button\n              [attr.aria-label]=\"renderRow.moveLabel\"\n              (dragStarted)=\"startDrag(index)\"\n              (dragMoved)=\"previewDrop($event)\"\n              (dragEnded)=\"commitDrop()\"\n              (dragCancelled)=\"abandonDrag()\"\n              (keydown.arrowUp)=\"moveByKey($event, { from: index, to: index - 1 })\"\n              (keydown.arrowDown)=\"moveByKey($event, { from: index, to: index + 1 })\"\n              class=\"et-standings-pick-handle\"\n              type=\"button\"\n              etDragHandle\n              etFocusRing\n            >\n              <span class=\"et-standings-pick-grip\" aria-hidden=\"true\"></span>\n            </button>\n          }\n        </div>\n      </div>\n\n      @if (renderRow.row.isLastAdvancing) {\n        <p class=\"et-standings-pick-cut\" aria-hidden=\"true\">\n          <span class=\"et-standings-pick-cut-line\"></span>\n          <span class=\"et-standings-pick-cut-label\">{{ labels().pickCut }}</span>\n          <span class=\"et-standings-pick-cut-line\"></span>\n        </p>\n      }\n    </li>\n  }\n</ol>\n\n@if (pick.locked()) {\n  <p class=\"et-standings-pick-note\">{{ labels().pickLocked }}</p>\n}\n","import { Component, computed, inject, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\nimport { MATCH_PARTICIPANT_IMPORTS } from '../match';\nimport { StandingsDirective } from './headless';\n\n/**\n * A league or group table: positions, the participants, played/won/drawn/lost, the points they rank by, and\n * recent form where the competition reports it. Driven by the headless {@link StandingsDirective}.\n *\n * It is a **real `<table>`** with a caption, column headers and a row header per position, because that is\n * what lets someone navigate it cell by cell and hear which column they are in. Zone bands (promotion,\n * relegation, advancing) come from a config that also draws the legend, so the two cannot drift apart.\n *\n * **Two densities, like the match card**: under 560px it keeps position, participant and points and drops\n * the rest - a table nobody can read sideways is worse than a table with fewer columns.\n *\n * @example\n * <et-standings [rows]=\"rows()\" [zones]=\"zones\" [highlightedRowId]=\"myTeamId()\" />\n */\n@Component({\n  selector: 'et-standings',\n  templateUrl: './standings.component.html',\n  styleUrl: './standings.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [MATCH_PARTICIPANT_IMPORTS, ProvideColorDirective],\n  hostDirectives: [\n    {\n      directive: StandingsDirective,\n      inputs: ['rows', 'zones', 'highlightedRowId', 'showLegend', 'labels'],\n    },\n  ],\n  host: {\n    class: 'et-standings',\n  },\n})\nexport class StandingsComponent {\n  protected standings = inject(StandingsDirective);\n\n  protected labels = computed(() => this.standings.resolvedLabels());\n\n  /** Signed, because a difference of `-4` and one of `4` are the two things this column exists to tell apart. */\n  protected differenceText(difference: number | null) {\n    if (difference === null) return '';\n\n    return difference > 0 ? `+${difference}` : `${difference}`;\n  }\n}\n","<!-- Everything density-dependent lives on this element rather than the host: a container query can only\n     style descendants of its container, and the host is the container. -->\n<div class=\"et-standings-content\">\n  <table class=\"et-standings-table\">\n    <caption class=\"et-standings-caption\">\n      {{\n        standings.resolvedLabels().caption\n      }}\n    </caption>\n\n    <thead>\n      <tr class=\"et-standings-head-row\">\n        <th [attr.abbr]=\"labels().positionFull\" class=\"et-standings-cell\" data-column=\"position\" scope=\"col\">\n          {{ labels().position }}\n        </th>\n        <th class=\"et-standings-cell\" data-column=\"participant\" scope=\"col\">{{ labels().participant }}</th>\n        <th [attr.abbr]=\"labels().playedFull\" class=\"et-standings-cell\" data-column=\"detail\" scope=\"col\">\n          {{ labels().played }}\n        </th>\n        <th [attr.abbr]=\"labels().winsFull\" class=\"et-standings-cell\" data-column=\"detail\" scope=\"col\">\n          {{ labels().wins }}\n        </th>\n        <th [attr.abbr]=\"labels().tiesFull\" class=\"et-standings-cell\" data-column=\"detail\" scope=\"col\">\n          {{ labels().ties }}\n        </th>\n        <th [attr.abbr]=\"labels().lossesFull\" class=\"et-standings-cell\" data-column=\"detail\" scope=\"col\">\n          {{ labels().losses }}\n        </th>\n        @if (standings.hasDifference()) {\n          <th [attr.abbr]=\"labels().differenceFull\" class=\"et-standings-cell\" data-column=\"detail\" scope=\"col\">\n            {{ labels().difference }}\n          </th>\n        }\n        <th [attr.abbr]=\"labels().pointsFull\" class=\"et-standings-cell\" data-column=\"points\" scope=\"col\">\n          {{ labels().points }}\n        </th>\n        @if (standings.hasForm()) {\n          <th [attr.abbr]=\"labels().formFull\" class=\"et-standings-cell\" data-column=\"form\" scope=\"col\">\n            {{ labels().form }}\n          </th>\n        }\n      </tr>\n    </thead>\n\n    <tbody>\n      @for (renderRow of standings.renderRows(); track renderRow.row.id) {\n        <tr\n          [etProvideColor]=\"renderRow.zone?.color ?? null\"\n          [attr.data-zone]=\"renderRow.zone ? '' : null\"\n          [attr.data-highlighted]=\"renderRow.isHighlighted ? '' : null\"\n          [attr.aria-current]=\"renderRow.isHighlighted ? 'true' : null\"\n          class=\"et-standings-row\"\n        >\n          <!-- A row header, not a cell: the position is what identifies the row to a screen reader. -->\n          <th class=\"et-standings-cell\" data-column=\"position\" scope=\"row\">\n            {{ renderRow.row.position }}\n            @if (renderRow.zone; as zone) {\n              <!-- The band's meaning in text, so the banding isn't colour-only. -->\n              <span class=\"et-standings-zone-note\">{{ zone.label }}</span>\n            }\n            @if (renderRow.isHighlighted) {\n              <span class=\"et-standings-zone-note\">{{ labels().highlightedRow }}</span>\n            }\n          </th>\n\n          <td class=\"et-standings-cell\" data-column=\"participant\">\n            <et-match-participant [participant]=\"renderRow.row.participant\" class=\"et-standings-participant\" />\n          </td>\n\n          <td class=\"et-standings-cell\" data-column=\"detail\">{{ renderRow.row.played }}</td>\n          <td class=\"et-standings-cell\" data-column=\"detail\">{{ renderRow.row.wins }}</td>\n          <td class=\"et-standings-cell\" data-column=\"detail\">{{ renderRow.row.ties }}</td>\n          <td class=\"et-standings-cell\" data-column=\"detail\">{{ renderRow.row.losses }}</td>\n\n          @if (standings.hasDifference()) {\n            <td class=\"et-standings-cell\" data-column=\"detail\">{{ differenceText(renderRow.row.difference) }}</td>\n          }\n\n          <td class=\"et-standings-cell\" data-column=\"points\">{{ renderRow.row.points }}</td>\n\n          @if (standings.hasForm()) {\n            <td class=\"et-standings-cell\" data-column=\"form\">\n              @if (renderRow.row.form; as form) {\n                <span class=\"et-standings-form\">\n                  @for (result of form; track $index) {\n                    <span\n                      [attr.aria-label]=\"labels().formResult(result)\"\n                      [attr.data-result]=\"result\"\n                      class=\"et-standings-form-result\"\n                    ></span>\n                  }\n                </span>\n              }\n            </td>\n          }\n        </tr>\n      }\n    </tbody>\n  </table>\n\n  @if (standings.legendZones(); as zones) {\n    @if (zones.length) {\n      <ul [attr.aria-label]=\"labels().legend\" class=\"et-standings-legend\">\n        @for (zone of zones; track zone.label) {\n          <li class=\"et-standings-legend-item\">\n            <span [etProvideColor]=\"zone.color\" class=\"et-standings-legend-swatch\" aria-hidden=\"true\"></span>\n            {{ zone.label }}\n          </li>\n        }\n      </ul>\n    }\n  }\n</div>\n","import { StandingsDirective, StandingsPickDirective, StandingsPickMarkDirective } from './headless';\nimport { StandingsPickComponent } from './standings-pick.component';\nimport { StandingsComponent } from './standings.component';\n\n/**\n * The standings table (`<et-standings>`) and the headless directive to build a table of your own. Pulls in\n * the match domain's participant primitive for the name column.\n */\nexport const STANDINGS_IMPORTS = [StandingsComponent, StandingsDirective] as const;\n\n/**\n * The predicted-order list (`<et-standings-pick>`), its headless directive, and the per-row mark template\n * a scored list fills.\n */\nexport const STANDINGS_PICK_IMPORTS = [\n  StandingsPickComponent,\n  StandingsPickDirective,\n  StandingsPickMarkDirective,\n] as const;\n","import { Directive, InjectionToken, computed, inject, signal } from '@angular/core';\nimport { ConsentHandler } from '@ethlete/core';\n\nexport const STREAM_CONSENT_TOKEN = new InjectionToken<StreamConsentDirective>('STREAM_CONSENT_TOKEN');\n\nexport const STREAM_USER_CONSENT_PROVIDER_TOKEN = new InjectionToken<ConsentHandler | null>(\n  'STREAM_USER_CONSENT_PROVIDER_TOKEN',\n);\n\nexport const injectStreamUserConsentProvider = () => inject(STREAM_USER_CONSENT_PROVIDER_TOKEN, { optional: true });\n\n@Directive({\n  selector: '[etStreamConsent]',\n  providers: [{ provide: STREAM_CONSENT_TOKEN, useExisting: StreamConsentDirective }],\n})\nexport class StreamConsentDirective {\n  private handler = injectStreamUserConsentProvider();\n  private localGranted = signal(false);\n\n  public isGranted = this.handler ? computed(() => (this.handler as ConsentHandler).isGranted()) : this.localGranted;\n\n  public grant() {\n    if (this.handler) {\n      this.handler.grant();\n    } else {\n      this.localGranted.set(true);\n    }\n  }\n\n  public revoke() {\n    if (this.handler) {\n      this.handler.revoke?.();\n    } else {\n      this.localGranted.set(false);\n    }\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { STREAM_CONSENT_TOKEN } from './stream-consent.directive';\n\n@Directive({\n  selector: '[etStreamConsentAccept]',\n  host: {\n    '(click)': 'consent.grant()',\n  },\n})\nexport class StreamConsentAcceptDirective {\n  protected consent = inject(STREAM_CONSENT_TOKEN);\n}\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\n\nexport type StreamConsentConfig = {\n  /**\n   * The color theme name to apply on the accept button.\n   * When set, applies `[etProvideColor]` on the button element.\n   */\n  acceptButtonColor: string | null;\n};\n\nconst DEFAULT_STREAM_CONSENT_CONFIG: StreamConsentConfig = {\n  acceptButtonColor: null,\n};\n\nconst STREAM_CONSENT_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<StreamConsentConfig>(\n  DEFAULT_STREAM_CONSENT_CONFIG,\n  { name: 'StreamConsentConfig' },\n);\n\nexport const provideStreamConsentConfig = /* @__PURE__ */ toProvideFn(STREAM_CONSENT_CONFIG_DEF);\nexport const injectStreamConsentConfig = /* @__PURE__ */ toInjectFn(STREAM_CONSENT_CONFIG_DEF);\n","import { defineLabels, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the stream player's own chrome renders: the consent gate, the failure overlay, the\n * picture-in-picture placeholder and the PiP window's controls.\n *\n * These used to live on the `StreamConsentConfig` / `StreamPlayerErrorConfig` /\n * `PipSlotPlaceholderConfig` objects next to a `transformer(text, locale)` hook, which asked an app to\n * translate *by matching the English string*. They are labels, so they live where every other label in\n * this library lives; those configs keep only what is genuinely configuration (the button colors).\n */\nexport type StreamLabels = {\n  /** Announced by the loading overlay while a player is starting up. */\n  loading: string;\n  /**\n   * `title` for an embedded player's iframe, given the platform's own name - announced in place of the\n   * frame's contents. The brand name is not translated; the wording around it is.\n   */\n  playerFrame: (platform: string) => string;\n\n  /** The consent gate's heading. */\n  consentHeading: string;\n  /** The consent gate's explanation. */\n  consentDescription: string;\n  /** The consent gate's accept button. */\n  consentAccept: string;\n\n  /** The failure overlay's heading. */\n  errorHeading: string;\n  /** The failure overlay's explanation. */\n  errorDescription: string;\n  /** The failure overlay's retry button. */\n  errorRetry: string;\n\n  /** The placeholder shown where a player would be while it plays in picture-in-picture. */\n  pipPlaceholderMessage: string;\n  /** The placeholder's button that pulls the stream back into the page. */\n  pipPlaceholderBack: string;\n  /** Accessible label for the PiP window's close button. */\n  pipClose: string;\n  /** Accessible label for the PiP window's control that focuses the stream's page. */\n  pipFocus: string;\n  /** Accessible label for the PiP window's title bar, which the arrow keys move and Shift+arrow keys resize. */\n  pipMove: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_STREAM_LABELS: StreamLabels = {\n  loading: 'Loading',\n  playerFrame: (platform) => `${platform} player`,\n\n  consentHeading: 'Content blocked',\n  consentDescription: 'Playback requires your consent. Third-party cookies and data may be used.',\n  consentAccept: 'Allow and play',\n\n  errorHeading: 'Playback failed',\n  errorDescription: 'The player could not be loaded. Please check your connection or try again.',\n  errorRetry: 'Retry',\n\n  pipPlaceholderMessage: 'Playing in picture-in-picture',\n  pipPlaceholderBack: 'Back to player',\n  pipClose: 'Close',\n  pipFocus: 'Focus',\n  pipMove: 'Picture-in-picture window, move it with the arrow keys and resize it with Shift and the arrow keys',\n};\n\nconst STREAM_LABELS_DEF = /* @__PURE__ */ defineLabels<StreamLabels>('STREAM_LABELS', DEFAULT_STREAM_LABELS);\n\n/**\n * Localize the stream chrome's strings for everything below this injector, and read the set in effect\n * here as a signal. Partial - whatever you leave out keeps its {@link DEFAULT_STREAM_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * provideStreamLabels({\n *   consentHeading: 'Inhalt blockiert',\n *   consentAccept: 'Erlauben und abspielen',\n * });\n */\nexport const provideStreamLabels = /* @__PURE__ */ toProvideFn(STREAM_LABELS_DEF);\nexport const injectStreamLabels = /* @__PURE__ */ toInjectFn(STREAM_LABELS_DEF);\nexport const STREAM_LABELS = /* @__PURE__ */ toToken(STREAM_LABELS_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The card layout, icon, heading and description rules shared by the stream domain's full-bleed\n * overlay states - consent gate, playback error, PiP placeholder - as a styles-only component.\n * Each consumer keeps its own `@property` tokens and public custom-property family and forwards\n * them onto the generic `--et-stream-overlay-card-*` tokens this sheet reads, so the families\n * stay independently overridable.\n *\n * @internal\n */\n@Component({\n  selector: 'et-stream-overlay-card-styles',\n  template: '',\n  styleUrl: './stream-overlay-card-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class StreamOverlayCardStylesComponent {}\n\n/** @internal */\nexport const mountStreamOverlayCardStyles = () => injectStyleManager().mount(StreamOverlayCardStylesComponent);\n","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport {\n  ProvideSurfaceDirective,\n  injectSurfaceType,\n  SURFACE_PROVIDER,\n  injectSurfaceThemes,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { injectStreamLabels } from '../stream-labels';\nimport { mountStreamOverlayCardStyles } from '../stream-overlay-card-styles.component';\nimport { ButtonComponent } from '../../button';\nimport { IconDirective, LOCK_ICON, provideIcons } from '../../icon';\nimport { StreamConsentAcceptDirective } from './headless/stream-consent-accept.directive';\nimport { StreamConsentDirective } from './headless/stream-consent.directive';\nimport { injectStreamConsentConfig } from './stream-consent-config';\n\nlet nextHeadingId = 0;\n\n@Component({\n  selector: 'et-stream-consent',\n  template: `\n    <div [etProvideSurface]=\"cardSurface()\" class=\"et-stream-consent-card\" etSurfaced>\n      <span class=\"et-stream-consent-icon\" etIcon=\"et-lock\"></span>\n      <h3 [id]=\"HEADING_ID\" class=\"et-stream-consent-heading\">{{ heading() }}</h3>\n      <p class=\"et-stream-consent-description\">{{ description() }}</p>\n      <button [color]=\"acceptButtonColor()\" et-button etStreamConsentAccept>\n        {{ acceptLabel() }}\n      </button>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [StreamConsentAcceptDirective, ButtonComponent, IconDirective, ProvideSurfaceDirective],\n  providers: [provideIcons(LOCK_ICON)],\n  hostDirectives: [StreamConsentDirective],\n  host: {\n    class: 'et-stream-consent',\n    role: 'group',\n    '[attr.aria-labelledby]': 'HEADING_ID',\n  },\n  styles: `\n    @property --et-stream-consent-padding {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 32px;\n    }\n\n    @property --et-stream-consent-gap {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 12px;\n    }\n\n    @property --et-stream-consent-icon-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 36px;\n    }\n\n    @property --et-stream-consent-border-radius {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 16px;\n    }\n\n    @property --et-stream-consent-heading-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 16px;\n    }\n\n    @property --et-stream-consent-heading-weight {\n      syntax: '<number>';\n      inherits: false;\n      initial-value: 600;\n    }\n\n    @property --et-stream-consent-heading-line-height {\n      syntax: '<percentage>';\n      inherits: false;\n      initial-value: 122%;\n    }\n\n    @property --et-stream-consent-heading-letter-spacing {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 0.2px;\n    }\n\n    @property --et-stream-consent-description-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 14px;\n    }\n\n    @property --et-stream-consent-description-weight {\n      syntax: '<number>';\n      inherits: false;\n      initial-value: 400;\n    }\n\n    @property --et-stream-consent-description-line-height {\n      syntax: '<percentage>';\n      inherits: false;\n      initial-value: 150%;\n    }\n\n    .et-stream-consent {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: 100%;\n      height: 100%;\n      background: var(--et-surface-background-solid, inherit);\n      color: var(--et-surface-color-solid, inherit);\n    }\n\n    .et-stream-consent-card {\n      --et-stream-overlay-card-padding: var(--et-stream-consent-padding);\n      --et-stream-overlay-card-gap: var(--et-stream-consent-gap);\n      --et-stream-overlay-card-icon-size: var(--et-stream-consent-icon-size);\n      --et-stream-overlay-card-border-radius: var(--et-stream-consent-border-radius);\n      --et-stream-overlay-card-heading-size: var(--et-stream-consent-heading-size);\n      --et-stream-overlay-card-heading-weight: var(--et-stream-consent-heading-weight);\n      --et-stream-overlay-card-heading-line-height: var(--et-stream-consent-heading-line-height);\n      --et-stream-overlay-card-heading-letter-spacing: var(--et-stream-consent-heading-letter-spacing);\n      --et-stream-overlay-card-description-size: var(--et-stream-consent-description-size);\n      --et-stream-overlay-card-description-weight: var(--et-stream-consent-description-weight);\n      --et-stream-overlay-card-description-line-height: var(--et-stream-consent-description-line-height);\n    }\n\n    .et-stream-consent-icon {\n      margin-block-end: 0.4rem;\n    }\n\n    .et-stream-consent-description {\n      margin-block-end: 0.8rem;\n    }\n  `,\n})\nexport class StreamConsentComponent {\n  private parentSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n  private surfaceType = injectSurfaceType();\n  private config = injectStreamConsentConfig();\n  private labels = injectStreamLabels();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  protected readonly HEADING_ID = `et-stream-consent-heading-${nextHeadingId++}`;\n\n  public cardSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const type = this.surfaceType();\n    if (!themes || !type) return null;\n\n    const elevation = (this.parentSurfaceProvider?.elevation() ?? 0) + 1;\n\n    return resolveSurfaceByElevation(themes, type, elevation)?.name ?? null;\n  });\n\n  public heading = computed(() => this.labels().consentHeading);\n  public description = computed(() => this.labels().consentDescription);\n  public acceptLabel = computed(() => this.labels().consentAccept);\n  public acceptButtonColor = computed(() => this.config.acceptButtonColor);\n\n  constructor() {\n    mountStreamOverlayCardStyles();\n  }\n}\n","import { Directive, InjectionToken, Signal, inject } from '@angular/core';\n\nexport type StreamPlayerErrorContext = {\n  readonly error: Signal<unknown>;\n  retry(): void;\n};\n\nexport const STREAM_PLAYER_ERROR_CONTEXT_TOKEN = new InjectionToken<StreamPlayerErrorContext>(\n  'STREAM_PLAYER_ERROR_CONTEXT_TOKEN',\n);\n\nexport const STREAM_PLAYER_ERROR_TOKEN = new InjectionToken<StreamPlayerErrorDirective>('STREAM_PLAYER_ERROR_TOKEN');\n\n@Directive({\n  selector: '[etStreamPlayerError]',\n  providers: [{ provide: STREAM_PLAYER_ERROR_TOKEN, useExisting: StreamPlayerErrorDirective }],\n})\nexport class StreamPlayerErrorDirective {\n  public context = inject(STREAM_PLAYER_ERROR_CONTEXT_TOKEN);\n}\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\n\nexport type StreamPlayerErrorConfig = {\n  /**\n   * The color theme name to apply on the retry button.\n   * When set, applies `[color]` on the button element.\n   */\n  retryButtonColor: string | null;\n};\n\nconst DEFAULT_STREAM_PLAYER_ERROR_CONFIG: StreamPlayerErrorConfig = {\n  retryButtonColor: null,\n};\n\nconst STREAM_PLAYER_ERROR_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<StreamPlayerErrorConfig>(\n  DEFAULT_STREAM_PLAYER_ERROR_CONFIG,\n  {\n    name: 'StreamPlayerErrorConfig',\n  },\n);\n\nexport const provideStreamPlayerErrorConfig = /* @__PURE__ */ toProvideFn(STREAM_PLAYER_ERROR_CONFIG_DEF);\nexport const injectStreamPlayerErrorConfig = /* @__PURE__ */ toInjectFn(STREAM_PLAYER_ERROR_CONFIG_DEF);\n","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport {\n  ProvideSurfaceDirective,\n  injectSurfaceType,\n  SURFACE_PROVIDER,\n  injectSurfaceThemes,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { injectStreamLabels } from '../stream-labels';\nimport { mountStreamOverlayCardStyles } from '../stream-overlay-card-styles.component';\nimport { ButtonComponent } from '../../button';\nimport { IconDirective, TRIANGLE_EXCLAMATION_ICON, provideIcons } from '../../icon';\nimport { STREAM_PLAYER_ERROR_TOKEN, StreamPlayerErrorDirective } from './headless/stream-player-error.directive';\nimport { injectStreamPlayerErrorConfig } from './stream-player-error-config';\n\n@Component({\n  selector: 'et-stream-player-error',\n  template: `\n    <div [etProvideSurface]=\"cardSurface()\" class=\"et-stream-player-error-card\" etSurfaced>\n      <span class=\"et-stream-player-error-icon\" etIcon=\"et-triangle-exclamation\"></span>\n      <h3 class=\"et-stream-player-error-heading\">{{ heading() }}</h3>\n      <p class=\"et-stream-player-error-description\">{{ description() }}</p>\n      <button [color]=\"retryButtonColor()\" (click)=\"retry()\" et-button type=\"button\">\n        {{ retryLabel() }}\n      </button>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [ButtonComponent, IconDirective, ProvideSurfaceDirective],\n  providers: [provideIcons(TRIANGLE_EXCLAMATION_ICON)],\n  hostDirectives: [StreamPlayerErrorDirective],\n  host: {\n    class: 'et-stream-player-error',\n    role: 'alert',\n  },\n  styles: `\n    @property --et-stream-player-error-gap {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 12px;\n    }\n\n    @property --et-stream-player-error-padding {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 32px;\n    }\n\n    @property --et-stream-player-error-icon-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 36px;\n    }\n\n    @property --et-stream-player-error-border-radius {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 16px;\n    }\n\n    @property --et-stream-player-error-heading-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 16px;\n    }\n\n    @property --et-stream-player-error-heading-weight {\n      syntax: '<number>';\n      inherits: false;\n      initial-value: 600;\n    }\n\n    @property --et-stream-player-error-heading-line-height {\n      syntax: '<percentage>';\n      inherits: false;\n      initial-value: 122%;\n    }\n\n    @property --et-stream-player-error-heading-letter-spacing {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 0.2px;\n    }\n\n    @property --et-stream-player-error-description-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 14px;\n    }\n\n    @property --et-stream-player-error-description-weight {\n      syntax: '<number>';\n      inherits: false;\n      initial-value: 400;\n    }\n\n    @property --et-stream-player-error-description-line-height {\n      syntax: '<percentage>';\n      inherits: false;\n      initial-value: 150%;\n    }\n\n    .et-stream-player-error {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: var(--et-surface-background-solid, inherit);\n      color: var(--et-surface-color-solid, inherit);\n      z-index: 1;\n    }\n\n    .et-stream-player-error-card {\n      --et-stream-overlay-card-padding: var(--et-stream-player-error-padding);\n      --et-stream-overlay-card-gap: var(--et-stream-player-error-gap);\n      --et-stream-overlay-card-icon-size: var(--et-stream-player-error-icon-size);\n      --et-stream-overlay-card-border-radius: var(--et-stream-player-error-border-radius);\n      --et-stream-overlay-card-heading-size: var(--et-stream-player-error-heading-size);\n      --et-stream-overlay-card-heading-weight: var(--et-stream-player-error-heading-weight);\n      --et-stream-overlay-card-heading-line-height: var(--et-stream-player-error-heading-line-height);\n      --et-stream-overlay-card-heading-letter-spacing: var(--et-stream-player-error-heading-letter-spacing);\n      --et-stream-overlay-card-description-size: var(--et-stream-player-error-description-size);\n      --et-stream-overlay-card-description-weight: var(--et-stream-player-error-description-weight);\n      --et-stream-overlay-card-description-line-height: var(--et-stream-player-error-description-line-height);\n    }\n\n    .et-stream-player-error-icon {\n      margin-block-end: 0.4rem;\n    }\n\n    .et-stream-player-error-description {\n      margin-block-end: 0.8rem;\n    }\n  `,\n})\nexport class StreamPlayerErrorComponent {\n  private errorDirective = inject(STREAM_PLAYER_ERROR_TOKEN);\n  private parentSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n  private surfaceType = injectSurfaceType();\n  private config = injectStreamPlayerErrorConfig();\n  private labels = injectStreamLabels();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n\n  public cardSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const type = this.surfaceType();\n    if (!themes || !type) return null;\n\n    const elevation = (this.parentSurfaceProvider?.elevation() ?? 0) + 1;\n\n    return resolveSurfaceByElevation(themes, type, elevation)?.name ?? null;\n  });\n\n  public heading = computed(() => this.labels().errorHeading);\n  public description = computed(() => this.labels().errorDescription);\n  public retryLabel = computed(() => this.labels().errorRetry);\n  public retryButtonColor = computed(() => this.config.retryButtonColor);\n\n  constructor() {\n    mountStreamOverlayCardStyles();\n  }\n\n  public retry() {\n    this.errorDirective.context.retry();\n  }\n}\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\n\nexport type StreamPlayerLoadingConfig = {\n  /** Diameter of the loading spinner in px. */\n  spinnerDiameter: number;\n\n  /** Stroke width of the loading spinner in px. */\n  spinnerStrokeWidth: number;\n};\n\nconst DEFAULT_STREAM_PLAYER_LOADING_CONFIG: StreamPlayerLoadingConfig = {\n  spinnerDiameter: 35,\n  spinnerStrokeWidth: 2,\n};\n\nconst STREAM_PLAYER_LOADING_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<StreamPlayerLoadingConfig>(\n  DEFAULT_STREAM_PLAYER_LOADING_CONFIG,\n  {\n    name: 'StreamPlayerLoadingConfig',\n  },\n);\n\nexport const provideStreamPlayerLoadingConfig = /* @__PURE__ */ toProvideFn(STREAM_PLAYER_LOADING_CONFIG_DEF);\nexport const injectStreamPlayerLoadingConfig = /* @__PURE__ */ toInjectFn(STREAM_PLAYER_LOADING_CONFIG_DEF);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { SpinnerComponent } from '../../loader';\nimport { injectStreamLabels } from '../stream-labels';\nimport { injectStreamPlayerLoadingConfig } from './stream-player-loading-config';\n\n@Component({\n  selector: 'et-stream-player-loading',\n  template: ` <et-spinner [diameter]=\"config.spinnerDiameter\" [strokeWidth]=\"config.spinnerStrokeWidth\" track /> `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [SpinnerComponent],\n  host: {\n    class: 'et-stream-player-loading',\n    role: 'status',\n    '[attr.aria-label]': 'labels().loading',\n  },\n  styles: `\n    .et-stream-player-loading {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: var(--et-surface-background-solid, inherit);\n      color: var(--et-surface-color-solid, inherit);\n      z-index: 1;\n\n      .et-spinner {\n        --et-spinner-color: var(--et-surface-color-muted-solid, currentColor);\n        --et-spinner-track-color: var(--et-surface-color-subtle-solid, currentColor);\n      }\n    }\n  `,\n})\nexport class StreamPlayerLoadingComponent {\n  protected labels = injectStreamLabels();\n\n  protected config = injectStreamPlayerLoadingConfig();\n}\n","import { AngularRenderer, matchesReducedMotion } from '@ethlete/core';\nimport { take, tap, timer } from 'rxjs';\n\n/**\n * Collapses a duration to an instant jump when the user prefers reduced motion.\n *\n * Every animation here does bookkeeping in `onfinish` - reparenting the player, restoring inline\n * styles, chaining the next phase - so skipping the `animate()` call outright would strand the\n * element mid-transition. Zeroing the duration keeps the lifecycle and drops only the motion.\n */\nconst motionDuration = (duration: number, el: Element) => (matchesReducedMotion(el) ? 0 : duration);\n\nexport const animateWithFixedWrapper = (config: {\n  playerEl: HTMLElement;\n  fromRect: DOMRect;\n  toRect: DOMRect;\n  document: Document;\n  renderer: AngularRenderer;\n  onFinish: () => void;\n  duration?: number;\n  easing?: string;\n}) => {\n  const {\n    playerEl,\n    fromRect,\n    toRect,\n    document,\n    renderer,\n    onFinish,\n    duration = 250,\n    easing = 'cubic-bezier(0.4, 0, 0.2, 1)',\n  } = config;\n\n  const dx = toRect.left - fromRect.left;\n  const dy = toRect.top - fromRect.top;\n  const sx = fromRect.width > 0 ? toRect.width / fromRect.width : 1;\n  const sy = fromRect.height > 0 ? toRect.height / fromRect.height : 1;\n  const finalTransform = `translate(${dx}px, ${dy}px) scale(${sx}, ${sy})`;\n\n  const wrapper = renderer.createElement('div');\n  renderer.setStyle(wrapper, {\n    position: 'fixed',\n    left: `${fromRect.left}px`,\n    top: `${fromRect.top}px`,\n    width: `${fromRect.width}px`,\n    height: `${fromRect.height}px`,\n    overflow: 'hidden',\n    pointerEvents: 'none',\n    zIndex: '2147483647',\n  });\n  renderer.appendChild(document.body, wrapper);\n  renderer.moveBefore({ newParent: wrapper, child: playerEl, before: null });\n\n  const anim = wrapper.animate(\n    [\n      { transformOrigin: 'top left', transform: 'none' },\n      { transformOrigin: 'top left', transform: finalTransform },\n    ],\n    { duration: motionDuration(duration, wrapper), easing },\n  );\n\n  let done = false;\n  const cleanup = () => {\n    if (done) return;\n    done = true;\n    renderer.setStyle(wrapper, { transform: finalTransform, transformOrigin: 'top left', visibility: 'hidden' });\n    anim.cancel();\n    onFinish();\n    renderer.removeChild(document.body, wrapper);\n  };\n\n  anim.onfinish = cleanup;\n  anim.oncancel = cleanup;\n};\n\nexport const animateElementTo = (config: {\n  el: HTMLElement;\n  fromRect: DOMRect;\n  toRect: DOMRect;\n  duration?: number;\n  easing?: string;\n}) => {\n  const { el, fromRect, toRect, duration = 250, easing = 'cubic-bezier(0.4, 0, 0.2, 1)' } = config;\n  const parent = el.parentElement;\n  if (!parent) return;\n  const pRect = parent.getBoundingClientRect();\n  if (!pRect.width || !pRect.height) return;\n\n  const mk = (r: DOMRect) =>\n    `translate(${r.left - pRect.left}px,${r.top - pRect.top}px) scale(${r.width / pRect.width},${r.height / pRect.height})`;\n\n  el.animate(\n    [\n      { transform: mk(fromRect), transformOrigin: 'top left', composite: 'replace' },\n      { transform: mk(toRect), transformOrigin: 'top left', composite: 'replace' },\n    ],\n    { duration: motionDuration(duration, el), easing },\n  );\n};\n\nexport const animatePulse = (el: HTMLElement) => {\n  el.animate(\n    [\n      { transform: 'scale(1)', offset: 0 },\n      { transform: 'scale(1)', offset: 0.15 },\n      { transform: 'scale(1.22)', offset: 0.4 },\n      { transform: 'scale(0.92)', offset: 0.65 },\n      { transform: 'scale(1.06)', offset: 0.82 },\n      { transform: 'scale(1)', offset: 1 },\n    ],\n    { duration: motionDuration(600, el), easing: 'ease-out', fill: 'none' },\n  );\n};\n\nexport const animateScaleFadeIn = (el: HTMLElement) => {\n  el.animate(\n    [\n      { transform: 'scale(0.85)', opacity: '0' },\n      { transform: 'scale(1)', opacity: '1' },\n    ],\n    { duration: motionDuration(200, el), easing: 'ease-out' },\n  );\n};\n\nexport const animateScaleFadeOut = (el: HTMLElement, config: { onFinish: () => void }) => {\n  const anim = el.animate(\n    [\n      { transform: 'scale(1)', opacity: '1' },\n      { transform: 'scale(0.85)', opacity: '0' },\n    ],\n    { duration: motionDuration(160, el), easing: 'ease-in', fill: 'forwards' },\n  );\n  anim.onfinish = () => config.onFinish();\n};\n\nexport type NewPipAnimationConfig = {\n  cell: HTMLElement;\n  stageEl: HTMLElement;\n  stageRect: DOMRect;\n  /** Natural aspect ratio of the video being animated (width/height). */\n  aspectRatio: number;\n  gridBtnEl: HTMLElement | undefined;\n  renderer: AngularRenderer;\n  showForcedTitleBar: () => void;\n  hideForcedTitleBar: () => void;\n};\n\nexport const animateNewPipInSingleMode = (config: NewPipAnimationConfig) => {\n  const {\n    cell,\n    stageEl,\n    stageRect,\n    aspectRatio,\n    gridBtnEl: gridBtn,\n    renderer,\n    showForcedTitleBar,\n    hideForcedTitleBar,\n  } = config;\n\n  if (!stageRect.width || !stageRect.height) return;\n\n  const videoW = Math.min(stageRect.width, stageRect.height * aspectRatio);\n  const videoH = Math.min(stageRect.height, stageRect.width / aspectRatio);\n  const videoX = (stageRect.width - videoW) / 2;\n  const videoY = (stageRect.height - videoH) / 2;\n\n  renderer.setStyle(cell, { width: `${videoW}px`, height: `${videoH}px`, left: `${videoX}px`, top: `${videoY}px` });\n\n  const holdDuration = 550;\n  const flyDuration = 350;\n  const fadeInFrac = 0.15;\n\n  const thumbW = videoW * 0.22;\n  const thumbH = videoH * 0.22;\n  const thumbSx = thumbW / videoW;\n  const thumbSy = thumbH / videoH;\n\n  const btnRectNow = gridBtn?.getBoundingClientRect();\n\n  const showDxMax = stageRect.width - videoX - thumbW - 4;\n  let showDx = showDxMax;\n  if (btnRectNow && btnRectNow.width > 0) {\n    const cx = btnRectNow.left + btnRectNow.width / 2 - (stageRect.left + videoX);\n    showDx = Math.min(Math.max(-videoX, cx - thumbW / 2), showDxMax);\n  }\n  const showDy = 4 - videoY;\n\n  showForcedTitleBar();\n  renderer.setStyle(stageEl, { overflow: 'visible' });\n  const phase1 = cell.animate(\n    [\n      {\n        transform: `translate(${showDx}px,${showDy}px) scale(${thumbSx},${thumbSy})`,\n        transformOrigin: 'top left',\n        opacity: '0',\n      },\n      {\n        transform: `translate(${showDx}px,${showDy}px) scale(${thumbSx},${thumbSy})`,\n        transformOrigin: 'top left',\n        opacity: '1',\n        offset: fadeInFrac,\n      },\n      {\n        transform: `translate(${showDx}px,${showDy}px) scale(${thumbSx},${thumbSy})`,\n        transformOrigin: 'top left',\n        opacity: '1',\n      },\n    ],\n    { duration: motionDuration(holdDuration, cell), fill: 'forwards' },\n  );\n\n  phase1.onfinish = () => {\n    const freshStageRect = stageEl.getBoundingClientRect();\n    const freshBtnRect = gridBtn?.getBoundingClientRect();\n    const freshVideoX = (freshStageRect.width - videoW) / 2;\n    const freshVideoY = (freshStageRect.height - videoH) / 2;\n\n    const freshShowDx = showDx + (stageRect.left + videoX) - (freshStageRect.left + freshVideoX);\n    const freshShowDy = showDy + (stageRect.top + videoY) - (freshStageRect.top + freshVideoY);\n\n    const exitScaleW = thumbW * 0.15;\n    const exitScaleH = thumbH * 0.15;\n    const exitSx = thumbSx * 0.15;\n    const exitSy = thumbSy * 0.15;\n\n    let exitDx: number;\n    let exitDy: number;\n    if (freshBtnRect && freshBtnRect.width > 0) {\n      exitDx = freshBtnRect.left + freshBtnRect.width / 2 - (freshStageRect.left + freshVideoX) - exitScaleW / 2;\n      exitDy = freshBtnRect.top + freshBtnRect.height / 2 - (freshStageRect.top + freshVideoY) - exitScaleH / 2;\n    } else {\n      exitDx = freshShowDx + thumbW * 0.4;\n      exitDy = freshShowDy - thumbH;\n    }\n\n    gridBtn?.animate(\n      [\n        { transform: 'scale(1)', offset: 0 },\n        { transform: 'scale(1.5)', offset: 0.4 },\n        { transform: 'scale(1)', offset: 1 },\n      ],\n      { duration: motionDuration(400, gridBtn), easing: 'cubic-bezier(0.4,0,0.2,1)', fill: 'none' },\n    );\n\n    const phase2 = cell.animate(\n      [\n        {\n          transform: `translate(${freshShowDx}px,${freshShowDy}px) scale(${thumbSx},${thumbSy})`,\n          transformOrigin: 'top left',\n          opacity: '1',\n        },\n        {\n          transform: `translate(${exitDx}px,${exitDy}px) scale(${exitSx},${exitSy})`,\n          transformOrigin: 'top left',\n          opacity: '0',\n        },\n      ],\n      { duration: motionDuration(flyDuration, cell), easing: 'ease-in', fill: 'none' },\n    );\n\n    phase2.onfinish = () => {\n      renderer.setStyle(cell, { width: null, height: null, left: null, top: null });\n      phase1.cancel();\n      renderer.removeStyle(stageEl, 'overflow');\n      timer(100)\n        .pipe(\n          take(1),\n          tap(() => hideForcedTitleBar()),\n        )\n        .subscribe();\n    };\n  };\n};\n","export type StreamPipChromeConfig = {\n  /**\n   * Optional color key applied to built-in PiP titlebar controls.\n   * Uses the button's neutral fallback styling when omitted.\n   */\n  controlsColor?: string;\n};\n\nexport const DEFAULT_PIP_CHROME_CONFIG: StreamPipChromeConfig = {\n  controlsColor: undefined,\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-stream-manager-styles',\n  template: '',\n  styleUrl: './stream-manager-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class StreamManagerStylesComponent {}\n","import { DOCUMENT, inject } from '@angular/core';\nimport {\n  createFlipAnimation,\n  defineRootProvider,\n  injectRenderer,\n  injectStyleManager,\n  injectViewportSize,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { StreamManagerStylesComponent } from './stream-manager-styles.component';\nimport { StreamManager, StreamPlayerEntry, StreamPlayerId, StreamSlotEntry } from './stream-manager.types';\n\ntype InternalPlayerEntry = StreamPlayerEntry & {\n  /** True while this player is in PIP mode - prevents slot reassignment. */\n  isInPip: boolean;\n  /**\n   * True while the exit (pip→slot) animation is in flight.\n   * `reassignPlayer()` skips this player so the animation wrapper keeps ownership.\n   */\n  isAnimatingOut: boolean;\n};\n\nconst STREAM_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n  (): StreamManager => {\n    const document = inject(DOCUMENT);\n    const renderer = injectRenderer();\n\n    injectStyleManager().mount(StreamManagerStylesComponent);\n\n    const container = renderer.createElement('div');\n    renderer.addClass(container, 'et-stream-manager');\n    renderer.appendChild(document.body, container);\n\n    const viewportSize = injectViewportSize();\n\n    const players = new Map<StreamPlayerId, InternalPlayerEntry>();\n    const slots = new Map<HTMLElement, StreamSlotEntry>();\n\n    const resolveBestSlot = (playerId: StreamPlayerId): StreamSlotEntry | null => {\n      let best: StreamSlotEntry | null = null;\n\n      for (const slot of slots.values()) {\n        if (slot.playerId !== playerId) continue;\n        if (!best) {\n          best = slot;\n          continue;\n        }\n        if (!best.priority) {\n          best = slot;\n          continue;\n        }\n        if (slot.priority) {\n          best = slot;\n        }\n      }\n\n      return best;\n    };\n\n    const isInViewport = (r: DOMRect) =>\n      r.width > 0 &&\n      r.height > 0 &&\n      r.right > 0 &&\n      r.bottom > 0 &&\n      r.left < viewportSize().width &&\n      r.top < viewportSize().height;\n\n    const moveWithFlip = (element: HTMLElement, targetParent: HTMLElement) => {\n      const initialRect = element.getBoundingClientRect();\n      if (!isInViewport(initialRect)) {\n        renderer.moveBefore({ newParent: targetParent, child: element });\n\n        return;\n      }\n      const flip = createFlipAnimation({ element });\n      flip.updateInit();\n      renderer.moveBefore({ newParent: targetParent, child: element });\n      flip.play();\n    };\n\n    const hasSlotFor = (playerId: StreamPlayerId) => {\n      for (const slot of slots.values()) {\n        if (slot.playerId === playerId) return true;\n      }\n      return false;\n    };\n\n    const reassignPlayer = (playerId: StreamPlayerId) => {\n      const player = players.get(playerId);\n      if (!player || player.isInPip || player.isAnimatingOut) return;\n\n      const bestSlot = resolveBestSlot(playerId);\n      const targetParent = bestSlot?.element ?? container;\n\n      if (player.element.parentElement !== targetParent) {\n        moveWithFlip(player.element, targetParent);\n      }\n    };\n\n    const registerPlayer = (entry: StreamPlayerEntry) => {\n      const internal: InternalPlayerEntry = {\n        ...entry,\n        isInPip: false,\n        isAnimatingOut: false,\n      };\n      players.set(entry.id, internal);\n      renderer.appendChild(container, entry.element);\n      reassignPlayer(entry.id);\n    };\n\n    const unregisterPlayer = (playerId: StreamPlayerId) => {\n      const entry = players.get(playerId);\n      if (!entry) return;\n      entry.element.remove();\n      players.delete(playerId);\n      entry.onDestroy?.();\n    };\n\n    const registerSlot = (entry: StreamSlotEntry) => {\n      slots.set(entry.element, entry);\n      reassignPlayer(entry.playerId);\n    };\n\n    const unregisterSlot = (element: HTMLElement) => {\n      const slot = slots.get(element);\n      if (!slot) return;\n      slots.delete(element);\n\n      const player = players.get(slot.playerId);\n      if (!player) return;\n\n      if (player.isInPip) return;\n\n      if (player.element.parentElement === element) {\n        if (hasSlotFor(slot.playerId)) {\n          reassignPlayer(slot.playerId);\n        } else {\n          unregisterPlayer(slot.playerId);\n        }\n      }\n    };\n\n    const transferPlayer = (oldId: StreamPlayerId, newId: StreamPlayerId) => {\n      const entry = players.get(oldId);\n      if (!entry || oldId === newId) return;\n      players.delete(oldId);\n      players.set(newId, { ...entry, id: newId });\n    };\n\n    const getPlayerElement = (playerId: StreamPlayerId): HTMLElement | null => players.get(playerId)?.element ?? null;\n\n    const getPlayerEntry = (playerId: StreamPlayerId): StreamPlayerEntry | null => {\n      const entry = players.get(playerId);\n      if (!entry) return null;\n      return { id: entry.id, element: entry.element, onDestroy: entry.onDestroy, thumbnail: entry.thumbnail };\n    };\n\n    const getSlot = (element: HTMLElement): StreamSlotEntry | null => slots.get(element) ?? null;\n\n    const movePlayerToContainer = (playerId: StreamPlayerId) => {\n      const player = players.get(playerId);\n      if (!player) return;\n      if (player.element.parentElement === container) return;\n      renderer.moveBefore({ newParent: container, child: player.element });\n    };\n\n    const setPlayerInPip = (playerId: StreamPlayerId, inPip: boolean) => {\n      const player = players.get(playerId);\n      if (player) player.isInPip = inPip;\n    };\n\n    const isPlayerInPip = (playerId: StreamPlayerId) => players.get(playerId)?.isInPip ?? false;\n\n    const setPlayerAnimatingOut = (playerId: StreamPlayerId, animating: boolean) => {\n      const player = players.get(playerId);\n      if (player) player.isAnimatingOut = animating;\n    };\n\n    return {\n      hasSlotFor,\n      registerPlayer,\n      unregisterPlayer,\n      registerSlot,\n      unregisterSlot,\n      transferPlayer,\n      getPlayerElement,\n      getPlayerEntry,\n      getSlot,\n      resolveBestSlot,\n      movePlayerToContainer,\n      setPlayerInPip,\n      isPlayerInPip,\n      setPlayerAnimatingOut,\n    };\n  },\n  { name: 'Stream Manager' },\n);\n\nexport const provideStreamManager = /* @__PURE__ */ toProvideFn(STREAM_MANAGER_DEF);\nexport const injectStreamManager = /* @__PURE__ */ toInjectFn(STREAM_MANAGER_DEF);\n","import { DOCUMENT, computed, inject, signal } from '@angular/core';\nimport {\n  defineRootProvider,\n  injectRenderer,\n  injectViewportSize,\n  matchesReducedMotion,\n  toInjectFn,\n  toProvideFn,\n} from '@ethlete/core';\nimport { animateWithFixedWrapper } from './pip/headless/internals/pip-animation';\nimport { DEFAULT_PIP_CHROME_CONFIG } from './pip/pip-chrome.config';\nimport { injectStreamManager } from './stream-manager';\nimport { PipManager, StreamPipEntry, StreamPlayerId } from './stream-manager.types';\n\nconst PIP_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n  (): PipManager => {\n    const document = inject(DOCUMENT);\n    const renderer = injectRenderer();\n    const streamManager = injectStreamManager();\n\n    const viewportSize = injectViewportSize();\n\n    const pips = signal<StreamPipEntry[]>([]);\n    const featuredPipId = signal<StreamPlayerId | null>(null);\n    const pipInitialRects = new Map<StreamPlayerId, DOMRect>();\n    const pendingBackPulses = new Set<StreamPlayerId>();\n    const backPulseCounter = signal(0);\n    const latestPip = computed(() => {\n      const currentPips = pips();\n\n      return currentPips[currentPips.length - 1] ?? null;\n    });\n    const pipChromeComponent = computed(() => latestPip()?.pipChromeComponent ?? null);\n    const pipChromeConfig = computed(() => latestPip()?.pipChromeConfig ?? DEFAULT_PIP_CHROME_CONFIG);\n\n    const setFeaturedPip = (playerId: StreamPlayerId | null) => {\n      featuredPipId.set(playerId);\n    };\n\n    const notifyBackPressed = (playerId: StreamPlayerId) => {\n      pendingBackPulses.add(playerId);\n      backPulseCounter.update((n) => n + 1);\n    };\n\n    const consumeBackPulse = (playerId: StreamPlayerId) => {\n      if (pendingBackPulses.has(playerId)) {\n        pendingBackPulses.delete(playerId);\n\n        return true;\n      }\n      return false;\n    };\n\n    const isInViewport = (r: DOMRect) =>\n      r.width > 0 &&\n      r.height > 0 &&\n      r.right > 0 &&\n      r.bottom > 0 &&\n      r.left < viewportSize().width &&\n      r.top < viewportSize().height;\n\n    const isInPip = (playerId: StreamPlayerId) => pips().some((p) => p.playerId === playerId);\n\n    const pipActivate = (\n      element: HTMLElement,\n      options?: {\n        onBack?: () => void;\n        aspectRatio?: number;\n        pipChromeComponent?: StreamPipEntry['pipChromeComponent'];\n        pipChromeConfig?: StreamPipEntry['pipChromeConfig'];\n      },\n    ) => {\n      const slot = streamManager.getSlot(element);\n      if (!slot) return;\n\n      const playerEntry = streamManager.getPlayerEntry(slot.playerId);\n      if (!playerEntry || isInPip(slot.playerId)) return;\n\n      const initialRect = playerEntry.element.getBoundingClientRect();\n      if (isInViewport(initialRect)) {\n        pipInitialRects.set(slot.playerId, initialRect);\n      }\n\n      streamManager.setPlayerInPip(slot.playerId, true);\n      streamManager.movePlayerToContainer(slot.playerId);\n      pips.update((current) => [\n        ...current,\n        {\n          playerId: slot.playerId,\n          onBack: options?.onBack ?? slot.onPipBack,\n          thumbnail: playerEntry.thumbnail,\n          pipChromeComponent: options?.pipChromeComponent,\n          pipChromeConfig: options?.pipChromeConfig ?? DEFAULT_PIP_CHROME_CONFIG,\n          aspectRatio: options?.aspectRatio ?? 16 / 9,\n        },\n      ]);\n    };\n\n    const endPip = (playerId: StreamPlayerId) => {\n      pips.update((current) => current.filter((p) => p.playerId !== playerId));\n      streamManager.setPlayerInPip(playerId, false);\n    };\n\n    const beginExitAnimation = (playerId: StreamPlayerId) => {\n      streamManager.setPlayerAnimatingOut(playerId, true);\n\n      return () => streamManager.setPlayerAnimatingOut(playerId, false);\n    };\n\n    const pipDeactivate = (\n      playerId: StreamPlayerId,\n      options?: { skipAnimation?: boolean; animation?: 'flip' | 'scaleFadeIn' },\n    ) => {\n      if (!isInPip(playerId)) return;\n\n      pipInitialRects.delete(playerId);\n\n      const playerEl = streamManager.getPlayerElement(playerId);\n      if (!playerEl) {\n        endPip(playerId);\n\n        return;\n      }\n\n      const bestSlot = streamManager.resolveBestSlot(playerId);\n\n      if (!bestSlot) {\n        endPip(playerId);\n        streamManager.unregisterPlayer(playerId);\n\n        return;\n      }\n\n      const targetParent = bestSlot.element;\n\n      if (!options?.skipAnimation) {\n        const requestedAnim = options?.animation ?? 'flip';\n        const fromRect = playerEl.getBoundingClientRect();\n\n        const featuredId = featuredPipId();\n        const animMode =\n          requestedAnim === 'flip' && featuredId !== null && playerId !== featuredId ? 'scaleFadeIn' : requestedAnim;\n\n        if (animMode === 'scaleFadeIn') {\n          const endExitAnimation = beginExitAnimation(playerId);\n          renderer.moveBefore({ newParent: targetParent, child: playerEl });\n          const anim = playerEl.animate(\n            [\n              { transform: 'scale(0.85)', opacity: '0' },\n              { transform: 'scale(1)', opacity: '1' },\n            ],\n            // Zeroed rather than skipped under reduced motion so `onfinish` still runs and clears\n            // the animating-out latch.\n            { duration: matchesReducedMotion(playerEl) ? 0 : 200, easing: 'ease-out' },\n          );\n          anim.onfinish = endExitAnimation;\n          endPip(playerId);\n\n          return;\n        }\n\n        const toRect = targetParent.getBoundingClientRect();\n\n        if (fromRect.width > 0 && fromRect.height > 0 && toRect.width > 0 && toRect.height > 0) {\n          const endExitAnimation = beginExitAnimation(playerId);\n          animateWithFixedWrapper({\n            playerEl,\n            fromRect,\n            toRect,\n            document,\n            renderer,\n            onFinish: () => {\n              endExitAnimation();\n              renderer.moveBefore({ newParent: targetParent, child: playerEl });\n            },\n          });\n          endPip(playerId);\n\n          return;\n        }\n      }\n\n      renderer.moveBefore({ newParent: targetParent, child: playerEl });\n      endPip(playerId);\n    };\n\n    const getInitialRect = (playerId: StreamPlayerId): DOMRect | null => {\n      const rect = pipInitialRects.get(playerId) ?? null;\n      pipInitialRects.delete(playerId);\n      return rect;\n    };\n\n    const parkPlayerElement = (playerId: StreamPlayerId) => {\n      if (!streamManager.isPlayerInPip(playerId)) return;\n      streamManager.movePlayerToContainer(playerId);\n    };\n\n    return {\n      pips: pips.asReadonly(),\n      pipChromeComponent,\n      pipChromeConfig,\n      featuredPipId: featuredPipId.asReadonly(),\n      setFeaturedPip,\n      backPulseCounter: backPulseCounter.asReadonly(),\n      notifyBackPressed,\n      consumeBackPulse,\n      pipActivate,\n      pipDeactivate,\n      getInitialRect,\n      parkPlayerElement,\n    };\n  },\n  { name: 'Pip Manager' },\n);\n\nexport const providePipManager = /* @__PURE__ */ toProvideFn(PIP_MANAGER_DEF);\nexport const injectPipManager = /* @__PURE__ */ toInjectFn(PIP_MANAGER_DEF);\n","import { InjectionToken } from '@angular/core';\nimport { PipChromeAnimations } from './pip-chrome-animations';\nimport { PipChromeState } from './pip-chrome-state';\n\nexport type PipChromeRef = {\n  state: PipChromeState;\n  animations: PipChromeAnimations;\n};\n\nexport const PIP_CHROME_REF_TOKEN = new InjectionToken<PipChromeRef>('PIP_CHROME_REF_TOKEN');\n","import { InjectionToken, Signal } from '@angular/core';\nimport { StreamPipEntry } from '../../stream-manager.types';\n\nexport const PIP_ENTRY_TOKEN = new InjectionToken<Signal<StreamPipEntry>>('PIP_ENTRY_TOKEN');\n","import { Directive, inject, input } from '@angular/core';\nimport { injectPipManager } from '../../pip-manager';\nimport { injectStreamLabels } from '../../stream-labels';\nimport { StreamPipEntry } from '../../stream-manager.types';\nimport { PIP_CHROME_REF_TOKEN } from './pip-chrome-ref.token';\nimport { PIP_ENTRY_TOKEN } from './pip-entry.token';\n\n@Directive({\n  selector: '[etPipBack]',\n  host: {\n    class: 'et-stream-pip-chrome__back',\n    type: 'button',\n    '[attr.aria-label]': 'labels().pipFocus',\n    '(click)': 'back($event)',\n  },\n})\nexport class PipBackDirective {\n  private chrome = inject(PIP_CHROME_REF_TOKEN, { optional: true });\n  private tokenEntry = inject(PIP_ENTRY_TOKEN, { optional: true });\n  private pipManager = injectPipManager();\n  protected labels = injectStreamLabels();\n\n  public entry = input<StreamPipEntry>();\n\n  public back(event: Event) {\n    event.stopPropagation();\n    const entry = this.resolveEntry();\n    if (!entry) return;\n    this.pipManager.notifyBackPressed(entry.playerId);\n    entry.onBack?.();\n  }\n\n  private resolveEntry() {\n    return this.entry() ?? this.tokenEntry?.() ?? this.chrome?.state.featuredPip() ?? null;\n  }\n}\n","import { InjectionToken, Signal, Type } from '@angular/core';\nimport { StreamPipChromeConfig } from './pip/pip-chrome.config';\n\n/**\n * Unique id for a stream player entry.\n * Convention: `'{platform}-{resourceId}'`, e.g. `'youtube-dQw4w9WgXcQ'`.\n */\nexport type StreamPlayerId = string;\n\n/**\n * Token provided by player-slot directives/components (e.g. `YoutubePlayerSlotDirective`).\n * Yields a reactive signal of the current player id the slot is bound to, or `null` when\n * the slot has not yet initialised. Consumed by `PipSlotPlaceholderComponent` to\n * auto-detect whether its hosting slot currently has its player in PIP mode.\n */\nexport const STREAM_SLOT_PLAYER_ID_TOKEN = new InjectionToken<Signal<StreamPlayerId | null>>(\n  'STREAM_SLOT_PLAYER_ID_TOKEN',\n);\n\nexport type StreamSlotEntry = {\n  /**\n   * The player id this slot wants to display (e.g. `'youtube-dQw4w9WgXcQ'`).\n   * Multiple slots may share the same id - priority resolves which one is shown.\n   */\n  playerId: StreamPlayerId;\n\n  /**\n   * Whether this slot is considered high priority.\n   * Among all slots registered for the same player id, `priority = true`\n   * wins. If multiple high-priority slots exist, the last-registered wins.\n   */\n  priority: boolean;\n\n  /**\n   * The host element of the slot - used as the unique key in the manager.\n   * The player element will be moved into this element when the slot is active.\n   */\n  element: HTMLElement;\n\n  /**\n   * Optional callback invoked when the user presses the \"back\" action inside the\n   * PIP chrome while this slot's player is in PIP mode.\n   */\n  onPipBack?: () => void;\n};\n\nexport type StreamPlayerEntry = {\n  /** The stream player id (e.g. `'youtube-dQw4w9WgXcQ'`). */\n  id: StreamPlayerId;\n\n  /** The live DOM element of the player (lives in the body container by default). */\n  element: HTMLElement;\n\n  /**\n   * Called by the manager when the player is no longer needed (no slot claims it\n   * and it is not in PIP mode). Use this to destroy the underlying component ref.\n   */\n  onDestroy?: () => void;\n\n  /** Reactive thumbnail URL from the player, forwarded to PIP entries. */\n  thumbnail?: Signal<string | null>;\n};\n\nexport type StreamPipEntry = {\n  /** The player that is currently in PIP mode. */\n  playerId: StreamPlayerId;\n\n  /**\n   * Optional callback invoked when the user presses the \"back\" action inside\n   * the PIP chrome for this PIP entry.\n   */\n  onBack?: () => void;\n\n  /** Reactive thumbnail URL for the player, used to render preview tiles. */\n  thumbnail?: Signal<string | null>;\n\n  /** The chrome component to use while this entry is active in PIP. */\n  pipChromeComponent?: Type<unknown>;\n\n  /** Appearance config for the active PIP chrome. */\n  pipChromeConfig?: StreamPipChromeConfig;\n\n  /**\n   * The player's natural aspect ratio (width / height).\n   * Used by the PIP chrome to resize the floating window and letterbox grid cells.\n   * Defaults to `16 / 9` if not provided.\n   */\n  aspectRatio: number;\n};\n\nexport type StreamManager = {\n  /** Returns true if at least one registered slot exists for the given player id. */\n  hasSlotFor(playerId: StreamPlayerId): boolean;\n\n  /**\n   * Registers a stream player element with the manager. The element is appended\n   * to the body-level manager container. If a slot is already waiting for this\n   * player id, the player is immediately moved into it (FLIP-animated).\n   */\n  registerPlayer(entry: StreamPlayerEntry): void;\n\n  /**\n   * Unregisters a player and removes its element from the DOM.\n   * Only call this when the player is not in PIP mode - PipManager handles\n   * clean-up for orphaned players when PIP is closed.\n   */\n  unregisterPlayer(playerId: StreamPlayerId): void;\n\n  /**\n   * Registers a slot. If a player with a matching id already exists, it is\n   * immediately moved into the best available slot (FLIP-animated).\n   */\n  registerSlot(entry: StreamSlotEntry): void;\n\n  /**\n   * Unregisters the slot identified by `element`. If the player was in this\n   * slot and is not currently in PIP mode, it is moved to the next best slot\n   * or fully unregistered when no slots remain. If the player IS in PIP mode,\n   * it stays in PIP until deactivated.\n   */\n  unregisterSlot(element: HTMLElement): void;\n\n  /**\n   * Re-keys a player entry from `oldId` to `newId` without touching the DOM.\n   * Use this when the video id changes on an existing slot (e.g. playlist navigation)\n   * so the manager's internal tracking stays consistent.\n   */\n  transferPlayer(oldId: StreamPlayerId, newId: StreamPlayerId): void;\n\n  /**\n   * Returns the live DOM element for `playerId`, or `null` if the player is not\n   * registered.\n   */\n  getPlayerElement(playerId: StreamPlayerId): HTMLElement | null;\n\n  /**\n   * Returns the full `StreamPlayerEntry` for `playerId`, or `null` if not\n   * registered. Useful for reading `thumbnail` and other metadata.\n   */\n  getPlayerEntry(playerId: StreamPlayerId): StreamPlayerEntry | null;\n\n  /**\n   * Returns the `StreamSlotEntry` associated with `element`, or `null` if not\n   * registered.\n   */\n  getSlot(element: HTMLElement): StreamSlotEntry | null;\n\n  /**\n   * Returns the highest-priority slot registered for `playerId`, or `null` if\n   * none exists.\n   */\n  resolveBestSlot(playerId: StreamPlayerId): StreamSlotEntry | null;\n\n  /**\n   * Moves the player element into the manager's body container.\n   * Used by PipManager for `pipActivate` and `parkPlayerElement`.\n   */\n  movePlayerToContainer(playerId: StreamPlayerId): void;\n\n  /**\n   * Marks the player as being in (or leaving) PIP mode. PipManager calls this\n   * to keep the stream manager's internal routing decisions (e.g. `reassignPlayer`,\n   * `unregisterSlot`) consistent with PIP state.\n   */\n  setPlayerInPip(playerId: StreamPlayerId, inPip: boolean): void;\n\n  /** Returns `true` if the player is currently in PIP mode. */\n  isPlayerInPip(playerId: StreamPlayerId): boolean;\n\n  /**\n   * Marks the player as currently running a PIP-exit animation so that\n   * `reassignPlayer` does not interfere while the animation is in flight.\n   */\n  setPlayerAnimatingOut(playerId: StreamPlayerId, animating: boolean): void;\n};\n\nexport type PipManager = {\n  /** Currently active PIP entries (one per player in PIP mode). */\n  readonly pips: Signal<StreamPipEntry[]>;\n\n  /** The chrome component to use for the currently active PIP chrome. */\n  readonly pipChromeComponent: Signal<Type<unknown> | null>;\n\n  /** Appearance config for the currently active PIP chrome. */\n  readonly pipChromeConfig: Signal<StreamPipChromeConfig>;\n\n  /**\n   * The player id of the currently featured (visible) pip in single mode.\n   * `null` when in grid mode or when no chrome is active.\n   * Set by the chrome so that `pipDeactivate` can automatically choose\n   * `scaleFadeIn` for non-featured pips instead of FLIP.\n   */\n  readonly featuredPipId: Signal<StreamPlayerId | null>;\n\n  /**\n   * Called by the chrome to keep `featuredPipId` in sync.\n   * Pass `null` when switching to grid mode or when no pip is active.\n   */\n  setFeaturedPip(playerId: StreamPlayerId | null): void;\n\n  /**\n   * Increments each time `notifyBackPressed` is called. Useful for reactive\n   * consumers (e.g. `viewChild` effects in slot placeholders) that need to\n   * re-check `consumeBackPulse` without polling.\n   */\n  readonly backPulseCounter: Signal<number>;\n\n  /**\n   * Records that the user pressed the \"back\" button in the PIP chrome for this\n   * player. The matching `etPipBringBack` button will consume this on its first\n   * render and play an attention-pulse + scroll-into-view.\n   */\n  notifyBackPressed(playerId: StreamPlayerId): void;\n\n  /**\n   * Returns true (and clears the flag) if `notifyBackPressed` was called for this\n   * player since the last consume. Used by `etPipBringBack` on init.\n   */\n  consumeBackPulse(playerId: StreamPlayerId): boolean;\n\n  /**\n   * Moves the player currently in the slot identified by `element` into the\n   * body PIP container, activating PIP mode.\n   */\n  pipActivate(\n    element: HTMLElement,\n    options?: {\n      onBack?: () => void;\n      aspectRatio?: number;\n      pipChromeComponent?: Type<unknown>;\n      pipChromeConfig?: StreamPipChromeConfig;\n    },\n  ): void;\n\n  /**\n   * Deactivates PIP for `playerId` and moves the player back to the best\n   * available slot (highest priority / last registered). If no slot exists, the\n   * player is fully unregistered.\n   *\n   * Pass `{ skipAnimation: true }` to skip the exit animation.\n   */\n  pipDeactivate(\n    playerId: StreamPlayerId,\n    options?: { skipAnimation?: boolean; animation?: 'flip' | 'scaleFadeIn' },\n  ): void;\n\n  /**\n   * Consumes and returns the rect captured just before `pipActivate` moved the player\n   * to the body container. Returns `null` if no rect was stored.\n   * Deleted on first read so the enter animation only fires once.\n   */\n  getInitialRect(playerId: StreamPlayerId): DOMRect | null;\n\n  /**\n   * Moves the player element back to the manager's body container without\n   * changing PIP state. Call this before a pip-player component is destroyed so\n   * the iframe remains connected to the document and `moveBefore` can preserve\n   * its state when another pip-player picks it up immediately after.\n   *\n   * No-op once the player has left PIP, so a teardown that runs after\n   * `pipDeactivate` cannot pull the player back out of its slot.\n   */\n  parkPlayerElement(playerId: StreamPlayerId): void;\n};\n","import { Directive, ElementRef, afterRenderEffect, inject, signal } from '@angular/core';\nimport { signalHostElementIntersection } from '@ethlete/core';\nimport { injectPipManager } from '../../pip-manager';\nimport { STREAM_SLOT_PLAYER_ID_TOKEN } from '../../stream-manager.types';\nimport { animatePulse } from './internals/pip-animation';\n\n@Directive({\n  selector: '[etPipBringBack]',\n  host: {\n    '(click)': 'bringBack($event)',\n  },\n})\nexport class PipBringBackDirective {\n  private slotPlayerId = inject(STREAM_SLOT_PLAYER_ID_TOKEN, { optional: true });\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n  private pipManager = injectPipManager();\n  private intersection = signalHostElementIntersection();\n  private pendingPulse = signal(false);\n\n  constructor() {\n    afterRenderEffect(() => {\n      if (!this.pendingPulse()) return;\n      if (!this.intersection().some((e) => e.isVisible)) return;\n      this.pendingPulse.set(false);\n      animatePulse(this.el.nativeElement);\n    });\n  }\n\n  public pulse() {\n    this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n    this.pendingPulse.set(true);\n  }\n\n  public bringBack(event: Event) {\n    event.stopPropagation();\n    const playerId = this.slotPlayerId?.();\n    if (playerId) this.pipManager.pipDeactivate(playerId);\n  }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\nimport { PIP_CHROME_REF_TOKEN } from './pip-chrome-ref.token';\nimport { PipCellData } from './pip-chrome-state';\n\n@Directive({\n  selector: '[etPipCell]',\n  host: {\n    class: 'et-stream-pip-chrome__cell',\n    '[style.--et-cell-col]': 'cell().col',\n    '[style.--et-cell-row]': 'cell().row',\n    '[style.--et-cell-exit-h]': 'cell().exitH',\n    '[style.--et-cell-exit-v]': 'cell().exitV',\n    '[attr.data-cell-player-id]': 'cell().playerId',\n    '[class.et-stream-pip-chrome__cell--featured]': 'cell().isFeatured',\n    '[attr.inert]': 'cell().inertAttr',\n    '[attr.role]': 'cell().gridRole',\n    '[attr.tabindex]': 'cell().gridTabIndex',\n    '(click)': 'selectCell()',\n    '(keydown.enter)': 'selectCell()',\n    '(keydown.space)': 'selectCell()',\n  },\n})\nexport class PipCellDirective {\n  private chrome = inject(PIP_CHROME_REF_TOKEN);\n\n  public cell = input.required<PipCellData>({ alias: 'etPipCell' });\n\n  constructor() {\n    const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    const el = elementRef.nativeElement;\n\n    effect((onCleanup) => {\n      const playerId = this.cell().playerId;\n\n      this.chrome.state.registerCell(playerId, el);\n\n      onCleanup(() => this.chrome.state.unregisterCell(playerId));\n    });\n  }\n\n  public selectCell() {\n    this.chrome.animations.selectCell(this.cell().playerId);\n  }\n}\n","import { ElementRef, Signal, afterRenderEffect, effect, untracked } from '@angular/core';\nimport { injectRenderer } from '@ethlete/core';\nimport { StreamPlayerId } from '../../stream-manager.types';\nimport { PipWindowComponent } from '../pip-window.component';\nimport { animateElementTo, animateNewPipInSingleMode } from './internals/pip-animation';\nimport { PipChromeState } from './pip-chrome-state';\n\ntype FlipItem = { el: HTMLElement; fromRect: DOMRect };\n\ntype PipChromeAnimationRefs = {\n  stageRef: Signal<ElementRef<HTMLElement> | undefined>;\n  gridBtnRef: Signal<ElementRef<HTMLElement> | undefined>;\n  pipWindowRef: Signal<PipWindowComponent | undefined>;\n};\n\nexport type PipChromeAnimations = {\n  enterMultiView(): void;\n  exitMultiView(): void;\n  toggleMultiView(): void;\n  selectCell(playerId: StreamPlayerId): void;\n};\n\nexport const createPipChromeAnimations = (state: PipChromeState, refs: PipChromeAnimationRefs): PipChromeAnimations => {\n  const renderer = injectRenderer();\n\n  let pendingFlips: FlipItem[] = [];\n  let prevPipCount = 0;\n  let prevPipIds = new Set<StreamPlayerId>();\n  let pendingNewInSingleMode = new Set<StreamPlayerId>();\n\n  const captureAllCellRects = (): FlipItem[] =>\n    Array.from(state.cellElements.values()).map((el) => ({ el, fromRect: el.getBoundingClientRect() }));\n\n  const enterMultiView = () => {\n    if (state.multiView()) return;\n    pendingFlips = captureAllCellRects();\n    state.multiView.set(true);\n  };\n\n  const exitMultiView = () => {\n    if (!state.multiView()) return;\n    pendingFlips = captureAllCellRects();\n    state.multiView.set(false);\n  };\n\n  const toggleMultiView = () => {\n    if (state.multiView()) exitMultiView();\n    else enterMultiView();\n  };\n\n  const selectCell = (playerId: StreamPlayerId) => {\n    if (!state.multiView()) return;\n    const newPip = state.allPips().find((p) => p.playerId === playerId);\n    const newRatio = newPip?.aspectRatio ?? 16 / 9;\n    const currentRatio = untracked(() => state.windowAspectRatio());\n    if (newRatio !== currentRatio) {\n      refs.pipWindowRef()?.posState.startModeTransition(260);\n    }\n    pendingFlips = captureAllCellRects();\n    state.featuredId.set(playerId);\n    state.multiView.set(false);\n  };\n\n  effect(() => {\n    const pipCount = state.allPips().length;\n    if (pipCount <= 1 && untracked(() => state.multiView())) {\n      untracked(() => {\n        pendingFlips = captureAllCellRects();\n        state.multiView.set(false);\n      });\n    }\n  });\n\n  effect(() => {\n    const newPips = state.allPips();\n    const isGrid = state.multiView();\n    const newCount = newPips.length;\n    const oldCount = prevPipCount;\n    prevPipCount = newCount;\n\n    if (oldCount > 0 && newCount !== oldCount) {\n      if (isGrid) {\n        pendingFlips = captureAllCellRects();\n      } else if (newCount > oldCount) {\n        for (const pip of newPips) {\n          if (!prevPipIds.has(pip.playerId)) {\n            pendingNewInSingleMode.add(pip.playerId);\n          }\n        }\n      }\n    }\n\n    prevPipIds = new Set(newPips.map((p) => p.playerId));\n  });\n\n  afterRenderEffect(() => {\n    state.multiView();\n    state.featuredPip();\n    state.allPips();\n\n    const newInSingle = pendingNewInSingleMode;\n    if (newInSingle.size > 0) {\n      pendingNewInSingleMode = new Set();\n      const stageEl = refs.stageRef()?.nativeElement;\n      if (stageEl) {\n        const stageRect = stageEl.getBoundingClientRect();\n        for (const playerId of newInSingle) {\n          const cell = state.cellElements.get(playerId) ?? null;\n          if (cell) {\n            const pip = state.allPips().find((p) => p.playerId === playerId);\n            animateNewPipInSingleMode({\n              cell,\n              stageEl,\n              stageRect,\n              aspectRatio: pip?.aspectRatio ?? 16 / 9,\n              gridBtnEl: refs.gridBtnRef()?.nativeElement,\n              renderer,\n              showForcedTitleBar: () => refs.pipWindowRef()?.forcedTitleBar.set(true),\n              hideForcedTitleBar: () => refs.pipWindowRef()?.forcedTitleBar.set(false),\n            });\n          }\n        }\n      }\n    }\n\n    const pending = pendingFlips;\n    if (!pending.length) return;\n    pendingFlips = [];\n\n    for (const item of pending) {\n      const toRect = item.el.getBoundingClientRect();\n      if (toRect.width > 0 && toRect.height > 0) {\n        animateElementTo({ el: item.el, fromRect: item.fromRect, toRect });\n      }\n    }\n  });\n\n  return { enterMultiView, exitMultiView, toggleMultiView, selectCell };\n};\n","import { Signal, WritableSignal, computed, effect, linkedSignal, signal, untracked } from '@angular/core';\nimport { injectPipManager } from '../../pip-manager';\nimport { StreamPipEntry, StreamPlayerId } from '../../stream-manager.types';\nimport { PipWindowComponent } from '../pip-window.component';\n\nexport type PipCellData = {\n  /** The underlying pip entry. */\n  pip: StreamPipEntry;\n  /** Shortcut to `pip.playerId`. */\n  playerId: StreamPlayerId;\n  /** CSS grid column (1-based). */\n  col: number;\n  /** CSS grid row (1-based). */\n  row: number;\n  /** Horizontal exit direction offset (used for CSS `--et-cell-exit-h`). */\n  exitH: number;\n  /** Vertical exit direction offset (used for CSS `--et-cell-exit-v`). */\n  exitV: number;\n  /** Whether this is the currently featured pip. */\n  isFeatured: boolean;\n  /** `''` when this cell should be inert (single mode, non-featured), `null` otherwise. */\n  inertAttr: '' | null;\n  /** `''` when the player inside this cell should be inert, `null` otherwise. */\n  playerInertAttr: '' | null;\n  /** `'button'` in grid mode (cells are interactive), `null` in single mode. */\n  gridRole: 'button' | null;\n  /** `0` in grid mode, `null` in single mode. */\n  gridTabIndex: 0 | null;\n};\n\nexport type PipChromeState = {\n  featuredId: WritableSignal<StreamPlayerId | null>;\n  multiView: WritableSignal<boolean>;\n  isExiting: WritableSignal<boolean>;\n\n  allPips: Signal<StreamPipEntry[]>;\n  /** The currently featured pip, or `undefined` when none is active. */\n  featuredPip: Signal<StreamPipEntry | undefined>;\n  gridCols: Signal<number>;\n  gridRows: Signal<number>;\n  /** Per-cell layout data - iterate over this in `@for` instead of calling methods. */\n  cells: Signal<PipCellData[]>;\n  /** True when more than one pip is active (shows the grid-toggle button). */\n  hasMultiplePips: Signal<boolean>;\n  /** True when the back button should be visible. */\n  showBackButton: Signal<boolean>;\n  /** Accessible label for the grid toggle button. */\n  gridToggleLabel: Signal<string>;\n  /** The natural aspect ratio of the currently featured pip. */\n  featuredAspectRatio: Signal<number>;\n  /**\n   * The aspect ratio to apply to the pip window.\n   * In single mode: tracks the featured pip's ratio.\n   * In grid mode: locked to the ratio at the time grid was entered; unlocks when a pip is removed.\n   */\n  windowAspectRatio: Signal<number>;\n\n  setFeatured(playerId: StreamPlayerId): void;\n  /** Closes all pip entries, optionally animating via the pip window. */\n  close(event: Event, pipWindow: PipWindowComponent | undefined): void;\n\n  /** @internal Map from playerId to the host HTMLElement. Populated by PipCellDirective. */\n  cellElements: Map<StreamPlayerId, HTMLElement>;\n  /** @internal */\n  registerCell(playerId: StreamPlayerId, el: HTMLElement): void;\n  /** @internal */\n  unregisterCell(playerId: StreamPlayerId): void;\n};\n\nexport const createPipChromeState = (): PipChromeState => {\n  const pipManager = injectPipManager();\n\n  const featuredId = signal<StreamPlayerId | null>(null);\n  const multiView = signal(false);\n  const isExiting = signal(false);\n\n  const allPips = computed(() => pipManager.pips());\n\n  const featuredPip = computed((): StreamPipEntry | undefined => {\n    const pips = pipManager.pips();\n    if (!pips.length) return undefined;\n    const id = featuredId();\n    if (id) {\n      const match = pips.find((p) => p.playerId === id);\n      if (match) return match;\n    }\n    return pips[0];\n  });\n\n  const gridCols = computed(() => Math.max(1, Math.ceil(Math.sqrt(allPips().length))));\n  const gridRows = computed(() => Math.max(1, Math.ceil(allPips().length / gridCols())));\n\n  const cells = computed((): PipCellData[] => {\n    const pips = allPips();\n    const cols = gridCols();\n    const featured = featuredPip();\n    const isGrid = multiView();\n\n    const fIdx = featured\n      ? Math.max(\n          0,\n          pips.findIndex((p) => p.playerId === featured.playerId),\n        )\n      : 0;\n    const fCol = (fIdx % cols) + 1;\n    const fRow = Math.floor(fIdx / cols) + 1;\n\n    return pips.map((pip, i) => {\n      const col = (i % cols) + 1;\n      const row = Math.floor(i / cols) + 1;\n      const isFeatured = pip.playerId === featured?.playerId;\n      const isInert = !isGrid && !isFeatured;\n\n      return {\n        pip,\n        playerId: pip.playerId,\n        col,\n        row,\n        exitH: isGrid ? 0 : col !== fCol ? col - fCol : 0,\n        exitV: isGrid ? 0 : row !== fRow ? row - fRow : 0,\n        isFeatured,\n        inertAttr: isInert ? '' : null,\n        playerInertAttr: isGrid || !isFeatured ? '' : null,\n        gridRole: isGrid ? 'button' : null,\n        gridTabIndex: isGrid ? 0 : null,\n      };\n    });\n  });\n\n  const hasMultiplePips = computed(() => allPips().length > 1);\n  const showBackButton = computed(() => !!featuredPip()?.onBack && !multiView());\n  const gridToggleLabel = computed(() => (multiView() ? 'Single view' : 'Grid view'));\n\n  const featuredAspectRatio = computed(() => featuredPip()?.aspectRatio ?? 16 / 9);\n\n  let prevMultiPipCount = allPips().length;\n  const windowAspectRatio = linkedSignal<{ multi: boolean; exiting: boolean; ar: number; pipCount: number }, number>({\n    source: () => ({ multi: multiView(), exiting: isExiting(), ar: featuredAspectRatio(), pipCount: allPips().length }),\n    computation: ({ multi, exiting, ar, pipCount }, prev) => {\n      const pipCountChanged = pipCount !== prevMultiPipCount;\n      prevMultiPipCount = pipCount;\n      return !multi || exiting || pipCountChanged ? ar : (prev?.value ?? ar);\n    },\n  });\n\n  effect(() => {\n    const pips = pipManager.pips();\n    const id = featuredId();\n    if (id && !pips.find((p) => p.playerId === id)) {\n      untracked(() => featuredId.set(null));\n    }\n  });\n\n  effect(() => {\n    const featured = featuredPip();\n    pipManager.setFeaturedPip(multiView() ? null : (featured?.playerId ?? null));\n  });\n\n  const setFeatured = (playerId: StreamPlayerId) => {\n    featuredId.set(playerId);\n  };\n\n  const cellElements = new Map<StreamPlayerId, HTMLElement>();\n\n  const registerCell = (playerId: StreamPlayerId, el: HTMLElement) => {\n    cellElements.set(playerId, el);\n  };\n\n  const unregisterCell = (playerId: StreamPlayerId) => {\n    cellElements.delete(playerId);\n  };\n\n  const close = (event: Event, pipWindow: PipWindowComponent | undefined) => {\n    event.stopPropagation();\n    const pips = untracked(() => allPips());\n\n    if (!pipWindow) {\n      for (const pip of pips) pipManager.pipDeactivate(pip.playerId);\n\n      return;\n    }\n\n    isExiting.set(true);\n    pipWindow.posState.animateExit(() => {\n      for (const pip of pips) pipManager.pipDeactivate(pip.playerId, { animation: 'scaleFadeIn' });\n      isExiting.set(false);\n    });\n  };\n\n  return {\n    featuredId,\n    multiView,\n    isExiting,\n    allPips,\n    featuredPip,\n    gridCols,\n    gridRows,\n    cells,\n    hasMultiplePips,\n    showBackButton,\n    gridToggleLabel,\n    featuredAspectRatio,\n    windowAspectRatio,\n    setFeatured,\n    close,\n    cellElements,\n    registerCell,\n    unregisterCell,\n  };\n};\n","import { Directive, input } from '@angular/core';\nimport { DragHandleDirective } from '@ethlete/core';\n\n@Directive({\n  selector: '[etPipCollapseOverlay]',\n  host: {\n    class: 'et-pip-window__collapse-overlay',\n    '(pointerdown)': 'dragHandle().startGesture($event)',\n  },\n})\nexport class PipCollapseOverlayDirective {\n  public dragHandle = input.required<DragHandleDirective>();\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n  selector: 'ng-template[etPipTitleBar]',\n})\nexport class PipTitleBarTemplateDirective {\n  public template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { DragHandleDirective, signalHostElementDimensions } from '@ethlete/core';\n\n@Directive({\n  selector: '[etPipTitleBar]',\n  hostDirectives: [\n    {\n      directive: DragHandleDirective,\n      inputs: ['disabled: dragDisabled'],\n      outputs: ['dragTapped', 'dragStarted', 'dragMoved', 'dragEnded'],\n    },\n  ],\n  host: {\n    class: 'et-pip-window__title-bar',\n  },\n})\nexport class PipTitleBarDirective {\n  public dragHandle = inject(DragHandleDirective);\n  private dims = signalHostElementDimensions();\n\n  public titleBarH = computed(() => this.dims().client?.height ?? 32);\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { PipManager } from './stream-manager.types';\n\nexport type StreamPipOptions = {\n  pipChromeComponent: Type<unknown> | null;\n  pipChrome: {\n    controlsColor?: string;\n  };\n  pipWindow: {\n    minWidth: number;\n    maxWidth: number;\n    minHeight: number;\n    maxHeight: number;\n    desiredSize: number;\n    collapsePeek: number;\n    viewportPadding: number;\n  };\n};\n\nexport type StreamPipRegistration = {\n  manager: PipManager;\n  options: StreamPipOptions;\n};\n\nexport const STREAM_PIP_TOKEN = new InjectionToken<StreamPipRegistration>('StreamPip');\n","import { InjectionToken, Signal } from '@angular/core';\n\nexport const PIP_WINDOW_ASPECT_RATIO_TOKEN = new InjectionToken<Signal<number>>('PIP_WINDOW_ASPECT_RATIO_TOKEN');\n","import { Directive, inject, signal } from '@angular/core';\nimport { STREAM_PIP_TOKEN } from '../../stream-pip.token';\nimport { PIP_WINDOW_ASPECT_RATIO_TOKEN } from './pip-window-aspect-ratio.token';\n\n@Directive({})\nexport class PipWindowParamsDirective {\n  public aspectRatio = inject(PIP_WINDOW_ASPECT_RATIO_TOKEN);\n  private streamPip = inject(STREAM_PIP_TOKEN);\n\n  public minWidth = signal(this.streamPip.options.pipWindow.minWidth);\n  public maxWidth = signal(this.streamPip.options.pipWindow.maxWidth);\n  public minHeight = signal(this.streamPip.options.pipWindow.minHeight);\n  public maxHeight = signal(this.streamPip.options.pipWindow.maxHeight);\n  public desiredSize = signal(this.streamPip.options.pipWindow.desiredSize);\n  public collapsePeek = signal(this.streamPip.options.pipWindow.collapsePeek);\n  public viewportPadding = signal(this.streamPip.options.pipWindow.viewportPadding);\n}\n","import {\n  DOCUMENT,\n  DestroyRef,\n  ElementRef,\n  Signal,\n  WritableSignal,\n  afterRenderEffect,\n  computed,\n  effect,\n  inject,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  DragHandleDirective,\n  DragMoveEvent,\n  ResizeHandlesComponent,\n  ResizeMoveEvent,\n  injectRenderer,\n  injectViewportSize,\n} from '@ethlete/core';\nimport { exhaustMap, finalize, merge, switchMap, take, takeUntil, tap, timer } from 'rxjs';\nimport { PipWindowParamsDirective } from '../pip-window-params.directive';\nimport { animateScaleFadeOut } from './pip-animation';\nimport { PipWindowSize } from './pip-window-size';\n\nconst SNAP_DURATION_MS = 150;\nconst SNAP_EASE = 'cubic-bezier(0.4,0,0.2,1)';\n\nexport type PipWindowPositionOptions = {\n  params: PipWindowParamsDirective;\n  titleBarH: Signal<number>;\n  size: PipWindowSize;\n  resizeHandles: Signal<ResizeHandlesComponent>;\n  dragHandle: Signal<DragHandleDirective>;\n  forcedTitleBar: WritableSignal<boolean>;\n};\n\nexport type PipWindowPosition = {\n  position: Signal<string>;\n  positionInitialized: WritableSignal<boolean>;\n  isCollapsed: WritableSignal<boolean>;\n  isDragging: Signal<boolean>;\n  isResizing: Signal<boolean>;\n  initPosition(): void;\n  nudge(delta: { dx: number; dy: number }): void;\n  resizeBy(delta: { dw: number; dh: number }): void;\n  expand(): void;\n  checkAndCollapse(): void;\n  snapToViewport(): void;\n  animateExit(callback: () => void): void;\n  startModeTransition(duration?: number): void;\n};\n\nexport const createPipWindowPosition = (options: PipWindowPositionOptions): PipWindowPosition => {\n  const { params, titleBarH, size, resizeHandles, dragHandle, forcedTitleBar } = options;\n\n  const el = inject<ElementRef<HTMLElement>>(ElementRef);\n  const renderer = injectRenderer();\n  const document = inject(DOCUMENT);\n  const destroyRef = inject(DestroyRef);\n  const viewportSize = injectViewportSize();\n\n  const isDragging = computed(() => dragHandle().isDragging());\n  const isResizing = computed(() => resizeHandles().isResizing());\n\n  const pos = signal({ x: 0, y: 0 });\n  const positionInitialized = signal(false);\n  const isCollapsed = signal(false);\n\n  let resizeBaseW = 0;\n  let resizeBaseH = 0;\n  let resizeBaseX = 0;\n  let resizeBaseY = 0;\n\n  const snapToPosition = (newX: number, newY: number) => {\n    renderer.setStyle(el.nativeElement, { transition: `translate ${SNAP_DURATION_MS}ms ${SNAP_EASE}` });\n    pos.set({ x: newX, y: newY });\n    timer(SNAP_DURATION_MS + 10)\n      .pipe(\n        take(1),\n        tap(() => renderer.removeStyle(el.nativeElement, 'transition')),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  const snapTo = ({ x, y, collapsed = false }: { x: number; y: number; collapsed?: boolean }) => {\n    renderer.setStyle(el.nativeElement, { transition: `translate ${SNAP_DURATION_MS}ms ${SNAP_EASE}` });\n    pos.set({ x, y });\n    if (collapsed) isCollapsed.set(true);\n    timer(SNAP_DURATION_MS + 10)\n      .pipe(\n        take(1),\n        tap(() => renderer.removeStyle(el.nativeElement, 'transition')),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  const snapToViewport = () => {\n    const elem = el.nativeElement;\n    const rect = elem.getBoundingClientRect();\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const pad = params.viewportPadding();\n    const { x: lx, y: ly } = pos();\n    let newX = lx;\n    let newY = ly;\n\n    if (rect.left < pad) newX += pad - rect.left;\n    else if (rect.right > vw - pad) newX -= rect.right - (vw - pad);\n\n    if (rect.top < pad) newY += pad - rect.top;\n    else if (rect.bottom > vh - pad) newY -= rect.bottom - (vh - pad);\n\n    isCollapsed.set(false);\n    snapTo({ x: newX, y: newY });\n  };\n\n  const checkAndCollapse = () => {\n    const elem = el.nativeElement;\n    const rect = elem.getBoundingClientRect();\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const peek = params.collapsePeek();\n\n    const offLeft = Math.max(0, peek - rect.right);\n    const offRight = Math.max(0, rect.left - (vw - peek));\n    const offTop = Math.max(0, peek - rect.bottom);\n    const offBottom = Math.max(0, rect.top - (vh - peek));\n\n    const rawOffLeft = Math.max(0, -rect.left);\n    const rawOffRight = Math.max(0, rect.right - vw);\n    const rawOffTop = Math.max(0, -rect.top);\n    const rawOffBottom = Math.max(0, rect.bottom - vh);\n\n    const rawOffX = Math.max(rawOffLeft, rawOffRight);\n    const rawOffY = Math.max(rawOffTop, rawOffBottom);\n\n    if (rawOffX > rect.width * 0.5 || rawOffY > rect.height * 0.5) {\n      const collapseOnX = rawOffX / rect.width >= rawOffY / rect.height;\n      const { x: lx, y: ly } = pos();\n      let newX = lx;\n      let newY = ly;\n\n      if (collapseOnX) {\n        newX = rawOffLeft > rawOffRight ? lx + (peek - rect.right) : lx + (vw - peek - rect.left);\n      } else {\n        newY = rawOffTop > rawOffBottom ? ly + (peek - rect.bottom) : ly + (vh - peek - rect.top);\n      }\n\n      snapTo({ x: newX, y: newY, collapsed: true });\n    } else if (offLeft > 0 || offRight > 0 || offTop > 0 || offBottom > 0) {\n      const { x: lx, y: ly } = pos();\n      const pad = params.viewportPadding();\n      let newX = lx;\n      let newY = ly;\n      if (offLeft > 0) newX += offLeft;\n      else if (offRight > 0) newX -= offRight;\n      if (offTop > 0) newY += offTop;\n      else if (offBottom > 0) newY -= offBottom;\n      newX = Math.max(pad, Math.min(vw - pad - rect.width, newX));\n      newY = Math.max(pad, Math.min(vh - pad - rect.height, newY));\n      snapToPosition(newX, newY);\n    } else {\n      snapToViewport();\n    }\n  };\n\n  let positionUpdateBlocked = false;\n  let pendingPositionApply: (() => void) | null = null;\n\n  let stickyLeft = false;\n  let stickyRight = false;\n  let stickyTop = false;\n  let stickyBottom = false;\n\n  let lastKnownW: number | null = null;\n\n  const deriveStickyEdges = () => {\n    const { x: lx, y: ly } = pos();\n    const { w, h } = size.get();\n    if (w === null || h === null) return;\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const pad = params.viewportPadding();\n    stickyLeft = lx <= pad;\n    stickyRight = lx + w >= vw - pad;\n    stickyTop = ly <= pad;\n    stickyBottom = ly + h >= vh - pad;\n  };\n\n  const handlePositionAfterResize = () => {\n    const { w: newW, h: newH } = size.get();\n    if (newW === null || newH === null) return;\n\n    if (isDragging() || isResizing()) return;\n\n    if (isCollapsed()) {\n      if (positionInitialized()) checkAndCollapse();\n\n      return;\n    }\n\n    if (!positionInitialized()) return;\n\n    const { x: lx, y: ly } = pos();\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const pad = params.viewportPadding();\n\n    let newX: number;\n    let newY: number;\n\n    if (stickyRight) {\n      newX = vw - pad - newW;\n    } else if (stickyLeft) {\n      newX = pad;\n    } else if (lastKnownW !== null && newW < lastKnownW && lx + lastKnownW / 2 >= vw / 2) {\n      newX = Math.max(pad, Math.min(vw - pad - newW, lx + lastKnownW - newW));\n    } else {\n      newX = Math.max(pad, Math.min(vw - pad - newW, lx));\n    }\n\n    if (stickyBottom) {\n      newY = vh - pad - newH;\n    } else if (stickyTop) {\n      newY = pad;\n    } else {\n      newY = Math.max(pad, Math.min(vh - pad - newH, ly));\n    }\n\n    if (newX === lx && newY === ly) return;\n\n    if (positionUpdateBlocked) {\n      pendingPositionApply = () => {\n        snapToPosition(newX, newY);\n        deriveStickyEdges();\n      };\n    } else {\n      pos.set({ x: newX, y: newY });\n      deriveStickyEdges();\n    }\n  };\n\n  const startInteraction = () => {\n    renderer.setStyle(document.body, { userSelect: 'none' });\n    renderer.addClass(document.body, 'et-pip-interacting');\n  };\n\n  const endInteraction = () => {\n    renderer.setStyle(document.body, { userSelect: null });\n    renderer.removeClass(document.body, 'et-pip-interacting');\n  };\n\n  const applyInitialSize = () => {\n    if (size.get().w !== null) return;\n    const ratio = params.aspectRatio();\n    const vw = document.documentElement.clientWidth;\n    const vh = document.documentElement.clientHeight;\n    const tbH = titleBarH();\n    const desired = params.desiredSize();\n    const pad = params.viewportPadding();\n    const availW = Math.max(0, vw - pad * 2);\n    const availH = Math.max(0, vh - pad * 2);\n    let initW: number;\n    if (ratio !== null && ratio > 0) {\n      if (ratio < 1) {\n        const targetH = Math.min(desired, availH);\n        const maxContentH = Math.max(0, targetH - tbH);\n        initW = Math.max(params.minWidth(), maxContentH * ratio);\n      } else {\n        const maxContentH = Math.max(0, availH - tbH);\n        const maxWFromH = maxContentH * ratio;\n        initW = Math.min(desired, params.maxWidth(), availW, maxWFromH);\n        initW = Math.max(params.minWidth(), initW);\n      }\n    } else {\n      initW = Math.min(desired, params.maxWidth(), availW);\n      initW = Math.max(params.minWidth(), initW);\n    }\n    const initH = ratio !== null && ratio > 0 ? tbH + initW / ratio : null;\n    size.update((s) => ({ w: s.w ?? initW, h: s.h ?? initH }));\n  };\n\n  const initPosition = () => {\n    if (positionInitialized()) return;\n    applyInitialSize();\n    const rect = el.nativeElement.getBoundingClientRect();\n    pos.set({ x: rect.left, y: rect.top });\n\n    positionInitialized.set(true);\n    deriveStickyEdges();\n  };\n\n  afterRenderEffect(() => {\n    untracked(() => applyInitialSize());\n  });\n\n  const nudge = ({ dx, dy }: { dx: number; dy: number }) => {\n    initPosition();\n\n    if (isCollapsed()) {\n      snapToViewport();\n\n      return;\n    }\n\n    const elem = el.nativeElement;\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const pad = params.viewportPadding();\n    const maxX = Math.max(pad, vw - pad - elem.offsetWidth);\n    const maxY = Math.max(pad, vh - pad - elem.offsetHeight);\n\n    pos.update((p) => ({\n      x: Math.max(pad, Math.min(maxX, p.x + dx)),\n      y: Math.max(pad, Math.min(maxY, p.y + dy)),\n    }));\n    deriveStickyEdges();\n  };\n\n  const resizeBy = ({ dw, dh }: { dw: number; dh: number }) => {\n    initPosition();\n\n    if (isCollapsed()) {\n      snapToViewport();\n\n      return;\n    }\n\n    const elem = el.nativeElement;\n    const ratio = params.aspectRatio();\n    const pad = params.viewportPadding();\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const tbH = titleBarH();\n    const { w: currentW, h: currentH } = size.get();\n    const baseW = currentW ?? elem.offsetWidth;\n    const baseH = currentH ?? elem.offsetHeight;\n    const maxWFromHeight = ratio !== null ? Math.max(0, vh - pad * 2 - tbH) * ratio : params.maxWidth();\n    const maxW = Math.min(params.maxWidth(), vw - pad * 2, maxWFromHeight);\n    const clampW = (w: number) => Math.max(params.minWidth(), Math.min(maxW, w));\n\n    let newW: number;\n    let newH: number;\n\n    if (ratio !== null && ratio > 0) {\n      newW = clampW(dh !== 0 ? (baseH - tbH + dh) * ratio : baseW + dw);\n      newH = tbH + newW / ratio;\n    } else {\n      const maxH = Math.min(params.maxHeight(), vh - pad * 2);\n\n      newW = clampW(baseW + dw);\n      newH = Math.max(params.minHeight(), Math.min(maxH, baseH + dh));\n    }\n\n    size.update(() => ({ w: newW, h: newH }));\n    pos.update((p) => ({\n      x: Math.max(pad, Math.min(Math.max(pad, vw - pad - newW), p.x)),\n      y: Math.max(pad, Math.min(Math.max(pad, vh - pad - newH), p.y)),\n    }));\n    deriveStickyEdges();\n  };\n\n  const expand = () => {\n    initPosition();\n\n    if (isCollapsed()) {\n      snapToViewport();\n    }\n  };\n\n  const startDrag = () => {\n    initPosition();\n    isCollapsed.set(false);\n    startInteraction();\n  };\n\n  const endDrag = () => {\n    endInteraction();\n    checkAndCollapse();\n    deriveStickyEdges();\n  };\n\n  const applyDragStep = ({ stepX, stepY }: DragMoveEvent) => {\n    const elem = el.nativeElement;\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const peek = params.collapsePeek();\n    const pad = params.viewportPadding();\n    const minX = Math.min(pad - elem.offsetWidth, peek - elem.offsetWidth);\n    const maxX = Math.max(vw - pad, vw - peek);\n    const minY = Math.min(pad - elem.offsetHeight, peek - elem.offsetHeight);\n    const maxY = Math.max(vh - pad, vh - peek);\n    pos.update((p) => ({\n      x: Math.max(minX, Math.min(maxX, p.x + stepX)),\n      y: Math.max(minY, Math.min(maxY, p.y + stepY)),\n    }));\n  };\n\n  const startResize = () => {\n    initPosition();\n    forcedTitleBar.set(true);\n    const { w: lw, h: lh } = size.get();\n    const { x: lx, y: ly } = pos();\n    resizeBaseW = lw ?? el.nativeElement.offsetWidth;\n    resizeBaseH = lh ?? el.nativeElement.offsetHeight;\n    resizeBaseX = lx;\n    resizeBaseY = ly;\n    startInteraction();\n  };\n\n  const endResize = () => {\n    size.clearResize();\n    forcedTitleBar.set(false);\n    endInteraction();\n    snapToViewport();\n    deriveStickyEdges();\n  };\n\n  const applyResizeDelta = ({ edge, dx, dy }: ResizeMoveEvent) => {\n    const movesE = edge.includes('e');\n    const movesW = edge.includes('w');\n    const movesN = edge.includes('n');\n    const movesS = edge.includes('s');\n\n    if (!movesE && !movesW && !movesS) return;\n\n    const ratio = params.aspectRatio();\n    const pad = params.viewportPadding();\n    const vw = viewportSize().width;\n    const vh = viewportSize().height;\n    const maxViewportW = vw - pad * 2;\n    const maxWFromHeight = ratio !== null ? Math.max(0, vh - pad * 2 - titleBarH()) * ratio : params.maxWidth();\n    const maxW = Math.min(params.maxWidth(), maxViewportW, maxWFromHeight);\n\n    let newW: number;\n    let newX = resizeBaseX;\n    let newY = resizeBaseY;\n\n    if (movesS && !movesE && !movesW) {\n      if (ratio !== null && ratio > 0) {\n        const newContentH = Math.max(0, resizeBaseH - titleBarH() + dy);\n        newW = Math.max(params.minWidth(), Math.min(maxW, newContentH * ratio));\n      } else {\n        newW = resizeBaseW;\n      }\n      newX = resizeBaseX + (resizeBaseW - newW) / 2;\n    } else if (movesE) {\n      newW = Math.max(params.minWidth(), Math.min(maxW, resizeBaseW + dx));\n    } else {\n      newW = Math.max(params.minWidth(), Math.min(maxW, resizeBaseW - dx));\n      newX = resizeBaseX + (resizeBaseW - newW);\n    }\n\n    let newH: number;\n    if (ratio !== null) {\n      newH = titleBarH() + newW / ratio;\n      if (movesN) newY = resizeBaseY + (resizeBaseH - newH);\n    } else {\n      newH = resizeBaseH;\n    }\n\n    size.setResize(newW, newH);\n    pos.set({ x: newX, y: newY });\n  };\n\n  effect(() => {\n    viewportSize();\n    size.w();\n    size.h();\n    untracked(() => {\n      handlePositionAfterResize();\n      lastKnownW = size.get().w;\n    });\n  });\n\n  destroyRef.onDestroy(() => endInteraction());\n\n  toObservable(resizeHandles)\n    .pipe(\n      switchMap((handles) =>\n        outputToObservable(handles.resizeStarted).pipe(\n          exhaustMap(() => {\n            startResize();\n            return outputToObservable(handles.resizeMoved).pipe(\n              tap((event) => applyResizeDelta(event)),\n              takeUntil(merge(outputToObservable(handles.resizeEnded), outputToObservable(handles.resizeCancelled))),\n              finalize(() => endResize()),\n            );\n          }),\n        ),\n      ),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  toObservable(dragHandle)\n    .pipe(\n      switchMap((handle) =>\n        outputToObservable(handle.dragStarted).pipe(\n          exhaustMap(() => {\n            startDrag();\n            return outputToObservable(handle.dragMoved).pipe(\n              tap((event) => applyDragStep(event)),\n              // A window the user drags anywhere has no position to revert to, so a cancelled gesture\n              // just ends it - but it has to end, or the pip stays stuck in drag mode.\n              takeUntil(merge(outputToObservable(handle.dragEnded), outputToObservable(handle.dragCancelled))),\n              finalize(() => endDrag()),\n            );\n          }),\n        ),\n      ),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  toObservable(dragHandle)\n    .pipe(\n      switchMap((handle) =>\n        outputToObservable(handle.dragTapped).pipe(\n          tap(() => {\n            initPosition();\n            if (isCollapsed()) snapToViewport();\n          }),\n        ),\n      ),\n      takeUntilDestroyed(),\n    )\n    .subscribe();\n\n  return {\n    position: computed(() => `${pos().x}px ${pos().y}px`),\n    positionInitialized,\n    isCollapsed,\n    isDragging,\n    isResizing,\n    initPosition,\n    nudge,\n    resizeBy,\n    expand,\n    checkAndCollapse,\n    snapToViewport,\n    animateExit: (callback) => {\n      animateScaleFadeOut(el.nativeElement, { onFinish: callback });\n    },\n    startModeTransition: (duration = 260) => {\n      positionUpdateBlocked = true;\n      renderer.addClass(el.nativeElement, 'et-pip-window--mode-transitioning');\n      timer(duration)\n        .pipe(\n          take(1),\n          tap(() => {\n            positionUpdateBlocked = false;\n            renderer.removeClass(el.nativeElement, 'et-pip-window--mode-transitioning');\n            const apply = pendingPositionApply;\n            pendingPositionApply = null;\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            apply ? apply() : snapToViewport();\n          }),\n          takeUntilDestroyed(destroyRef),\n        )\n        .subscribe();\n    },\n  };\n};\n","import { Signal, computed, linkedSignal, signal } from '@angular/core';\nimport { injectViewportSize } from '@ethlete/core';\nimport { PipWindowParamsDirective } from '../pip-window-params.directive';\n\nexport type PipWindowSizeOptions = {\n  params: PipWindowParamsDirective;\n  titleBarH: Signal<number>;\n};\n\nexport type PipWindowSize = {\n  w: Signal<number | null>;\n  h: Signal<number | null>;\n  get(): { w: number | null; h: number | null };\n  update(fn: (prev: { w: number | null; h: number | null }) => { w: number | null; h: number | null }): void;\n  setResize(w: number, h: number): void;\n  clearResize(): void;\n};\n\nexport const createPipWindowSize = (options: PipWindowSizeOptions): PipWindowSize => {\n  const { params, titleBarH } = options;\n\n  const viewportSize = injectViewportSize();\n  const resizeState = signal<{ w: number; h: number } | null>(null);\n\n  const size = linkedSignal<\n    {\n      ratio: number | null;\n      vw: number;\n      vh: number;\n      pad: number;\n      minW: number;\n      minH: number;\n      resize: { w: number; h: number } | null;\n    },\n    { w: number | null; h: number | null }\n  >({\n    source: () => ({\n      ratio: params.aspectRatio(),\n      vw: viewportSize().width,\n      vh: viewportSize().height,\n      pad: params.viewportPadding(),\n      minW: params.minWidth(),\n      minH: params.minHeight(),\n      resize: resizeState(),\n    }),\n    computation: ({ ratio, vw, vh, pad, minW, minH, resize }, previous) => {\n      if (resize !== null) return { w: resize.w, h: resize.h };\n      const prev = previous?.value ?? { w: null, h: null };\n      if (prev.w === null) return prev;\n      let { w, h } = prev;\n      const availW = vw > 0 ? vw - pad * 2 : Infinity;\n      const availH = vh > 0 ? vh - pad * 2 : Infinity;\n      if (w > availW) w = Math.max(minW, availW);\n      if (ratio !== null) {\n        h = titleBarH() + w / ratio;\n        if (h > availH) {\n          const maxContentH = Math.max(0, availH - titleBarH());\n          w = Math.max(minW, maxContentH * ratio);\n          h = titleBarH() + w / ratio;\n        }\n      } else if (h !== null && h > availH) {\n        h = Math.max(minH, availH);\n      }\n\n      return { w, h };\n    },\n  });\n\n  return {\n    w: computed(() => size().w),\n    h: computed(() => size().h),\n    get: () => size(),\n    update: (fn) => size.update(fn),\n    setResize: (w, h) => resizeState.set({ w, h }),\n    clearResize: () => resizeState.set(null),\n  };\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, contentChild, inject, signal, viewChild } from '@angular/core';\nimport { ResizeEdge, ResizeHandlesComponent } from '@ethlete/core';\nimport { PipCollapseOverlayDirective } from './headless/pip-collapse-overlay.directive';\nimport { PipTitleBarTemplateDirective } from './headless/pip-title-bar-template.directive';\nimport { PipTitleBarDirective } from './headless/pip-title-bar.directive';\nimport { PipWindowParamsDirective } from './headless/pip-window-params.directive';\nimport { createPipWindowPosition } from './headless/internals/pip-window-position';\nimport { createPipWindowSize } from './headless/internals/pip-window-size';\nimport { injectStreamLabels } from '../stream-labels';\n\nconst KEYBOARD_STEP_PX = 10;\n\nconst KEYBOARD_ARROW_DIRECTIONS: Record<string, { x: number; y: number } | undefined> = {\n  ArrowLeft: { x: -1, y: 0 },\n  ArrowRight: { x: 1, y: 0 },\n  ArrowUp: { x: 0, y: -1 },\n  ArrowDown: { x: 0, y: 1 },\n};\n\n@Component({\n  selector: 'et-pip-window',\n  templateUrl: './pip-window.component.html',\n  styleUrl: './pip-window.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet, ResizeHandlesComponent, PipTitleBarDirective, PipCollapseOverlayDirective],\n  hostDirectives: [PipWindowParamsDirective],\n  host: {\n    class: 'et-pip-window',\n    '[class.et-pip-window--title-bar-forced]': 'forcedTitleBar()',\n    '[class.et-pip-window--dragging]': 'posState.isDragging()',\n    '[class.et-pip-window--collapsed]': 'posState.isCollapsed()',\n    '[class.et-pip-window--resizing]': 'posState.isResizing()',\n    '[class.et-pip-window--positioned]': 'posState.positionInitialized()',\n    '[style.translate]': 'posState.position()',\n    '[style.width.px]': 'sizeState.w()',\n    '[style.height.px]': 'sizeState.h()',\n    '[style.--et-pip-title-bar-h.px]': 'titleBarH()',\n    '[style.--et-pip-content-ratio]': '!posState.positionInitialized() ? params.aspectRatio() : null',\n  },\n})\nexport class PipWindowComponent {\n  protected params = inject(PipWindowParamsDirective);\n  protected labels = injectStreamLabels();\n\n  private resizeHandles = viewChild.required(ResizeHandlesComponent);\n  private titleBar = viewChild.required(PipTitleBarDirective);\n  protected titleBarTemplate = contentChild.required(PipTitleBarTemplateDirective);\n\n  protected dragHandle = computed(() => this.titleBar().dragHandle);\n  protected titleBarH = computed(() => this.titleBar().titleBarH());\n\n  public sizeState = createPipWindowSize({\n    params: this.params,\n    titleBarH: this.titleBarH,\n  });\n\n  public forcedTitleBar = signal(false);\n\n  public posState = createPipWindowPosition({\n    params: this.params,\n    titleBarH: this.titleBarH,\n    size: this.sizeState,\n    resizeHandles: this.resizeHandles,\n    dragHandle: this.dragHandle,\n    forcedTitleBar: this.forcedTitleBar,\n  });\n\n  public readonly RESIZE_EDGES: ResizeEdge[] = ['s', 'e', 'w', 'se', 'sw'];\n\n  protected handleTitleBarKeydown(event: KeyboardEvent) {\n    if (event.target !== event.currentTarget || event.altKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n\n    const direction = KEYBOARD_ARROW_DIRECTIONS[event.key];\n\n    if (direction) {\n      const delta = { dx: direction.x * KEYBOARD_STEP_PX, dy: direction.y * KEYBOARD_STEP_PX };\n\n      event.preventDefault();\n\n      if (event.shiftKey) {\n        this.posState.resizeBy({ dw: delta.dx, dh: delta.dy });\n      } else {\n        this.posState.nudge(delta);\n      }\n    } else if (!event.shiftKey && (event.key === 'Enter' || event.key === ' ')) {\n      event.preventDefault();\n      this.posState.expand();\n    }\n  }\n}\n","<et-resize-handles [edges]=\"RESIZE_EDGES\" [disabled]=\"posState.isCollapsed() || posState.isDragging()\" />\n\n@if (posState.isCollapsed()) {\n  <div [dragHandle]=\"dragHandle()\" etPipCollapseOverlay></div>\n}\n\n<div\n  [dragDisabled]=\"posState.isResizing()\"\n  [attr.aria-label]=\"labels().pipMove\"\n  (keydown)=\"handleTitleBarKeydown($event)\"\n  role=\"group\"\n  tabindex=\"0\"\n  etPipTitleBar\n>\n  <ng-container [ngTemplateOutlet]=\"titleBarTemplate().template\" />\n</div>\n\n<div class=\"et-pip-window__content\">\n  <ng-content />\n</div>\n","import { Directive, inject, input } from '@angular/core';\nimport { injectPipManager } from '../../pip-manager';\nimport { injectStreamLabels } from '../../stream-labels';\nimport { StreamPipEntry } from '../../stream-manager.types';\nimport { PIP_CHROME_REF_TOKEN } from './pip-chrome-ref.token';\nimport { PIP_ENTRY_TOKEN } from './pip-entry.token';\nimport { PipWindowComponent } from '../pip-window.component';\n\n@Directive({\n  selector: '[etPipClose]',\n  host: {\n    class: 'et-stream-pip-chrome__close',\n    type: 'button',\n    '[attr.aria-label]': 'labels().pipClose',\n    '(click)': 'close($event)',\n  },\n})\nexport class PipCloseDirective {\n  private chrome = inject(PIP_CHROME_REF_TOKEN, { optional: true });\n  private pipWindow = inject(PipWindowComponent, { optional: true });\n  private tokenEntry = inject(PIP_ENTRY_TOKEN, { optional: true });\n  private pipManager = injectPipManager();\n  protected labels = injectStreamLabels();\n\n  public entry = input<StreamPipEntry>();\n\n  public close(event: Event) {\n    event.stopPropagation();\n    const e = this.resolveEntry();\n    if (e) {\n      this.pipManager.pipDeactivate(e.playerId);\n    } else if (this.chrome) {\n      this.chrome.state.close(event, this.pipWindow ?? undefined);\n    }\n  }\n\n  private resolveEntry(): StreamPipEntry | null {\n    return this.entry() ?? this.tokenEntry?.() ?? null;\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { PIP_CHROME_REF_TOKEN } from './pip-chrome-ref.token';\n\n@Directive({\n  selector: '[etPipGridToggle]',\n  host: {\n    class: 'et-stream-pip-chrome__view-btn',\n    type: 'button',\n    '[attr.aria-label]': 'chrome?.state?.gridToggleLabel()',\n    '[attr.title]': 'chrome?.state?.gridToggleLabel()',\n    '(click)': 'toggle($event)',\n  },\n})\nexport class PipGridToggleDirective {\n  protected chrome = inject(PIP_CHROME_REF_TOKEN, { optional: true });\n\n  public toggle(event: Event) {\n    event.stopPropagation();\n    this.chrome?.animations.toggleMultiView();\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { PIP_CHROME_REF_TOKEN } from './pip-chrome-ref.token';\n\n@Directive({\n  selector: '[etPipStage]',\n  host: {\n    class: 'et-stream-pip-chrome__stage',\n    '[style.--et-pip-grid-cols]': 'chrome.state.gridCols()',\n    '[style.--et-pip-grid-rows]': 'chrome.state.gridRows()',\n  },\n})\nexport class PipStageDirective {\n  protected chrome = inject(PIP_CHROME_REF_TOKEN);\n}\n","import {\n  Component,\n  DOCUMENT,\n  DestroyRef,\n  ElementRef,\n  ViewEncapsulation,\n  afterRenderEffect,\n  computed,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { injectRenderer } from '@ethlete/core';\nimport { injectPipManager } from '../pip-manager';\nimport { injectStreamManager } from '../stream-manager';\nimport { StreamPipEntry } from '../stream-manager.types';\nimport { animateWithFixedWrapper } from './headless/internals/pip-animation';\nimport { PipCellDirective } from './headless/pip-cell.directive';\nimport { PIP_ENTRY_TOKEN } from './headless/pip-entry.token';\n\n@Component({\n  selector: 'et-pip-player',\n  template: `\n    @if (thumbnailUrl(); as url) {\n      <div [class.et-pip-player__thumb-wrapper--hidden]=\"!isThumbVisible()\" class=\"et-pip-player__thumb-wrapper\">\n        <img [src]=\"url\" class=\"et-pip-player__preview-thumb\" alt=\"\" aria-hidden=\"true\" />\n      </div>\n    }\n  `,\n  styleUrl: './pip-player.component.css',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: PIP_ENTRY_TOKEN,\n      useFactory: () => {\n        const player = inject(PipPlayerComponent);\n        return player.resolvedEntry;\n      },\n    },\n  ],\n  host: {\n    class: 'et-pip-player',\n    '[class.et-pip-player--ready]': 'isReady()',\n    '[attr.data-pip-player-id]': 'resolvedEntry().playerId',\n    '[attr.inert]': 'pipCell ? pipCell.cell().playerInertAttr : null',\n    '[style.--et-pip-player-ratio]': 'resolvedEntry()?.aspectRatio ?? (16 / 9)',\n  },\n})\nexport class PipPlayerComponent {\n  private document = inject(DOCUMENT);\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected pipCell = inject(PipCellDirective, { optional: true });\n  private streamManager = injectStreamManager();\n  private pipManager = injectPipManager();\n  private renderer = injectRenderer();\n\n  public entry = input<StreamPipEntry>();\n  public showThumbnail = input<boolean>();\n  public isReady = signal(false);\n\n  public resolvedEntry = computed(\n    () => this.entry() ?? this.pipCell?.cell().pip ?? (null as unknown as StreamPipEntry),\n  );\n\n  public thumbnailUrl = computed(() => this.resolvedEntry().thumbnail?.() ?? null);\n\n  public isThumbVisible = computed(\n    () => this.showThumbnail() ?? (this.pipCell ? !this.pipCell.cell().isFeatured : false),\n  );\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => this.pipManager.parkPlayerElement(this.resolvedEntry().playerId));\n\n    afterRenderEffect(() => {\n      const pip = this.resolvedEntry();\n      const entryEl = this.el.nativeElement;\n      const { playerId } = pip;\n\n      const playerEl = this.streamManager.getPlayerElement(playerId);\n      if (!playerEl) return;\n      if (playerEl.parentElement === entryEl) {\n        return;\n      }\n\n      this.isReady.set(false);\n\n      const fromRect = this.pipManager.getInitialRect(playerId);\n\n      queueMicrotask(() => {\n        if (!entryEl.isConnected) return;\n        if (playerEl.parentElement === entryEl) {\n          this.isReady.set(true);\n\n          return;\n        }\n\n        const toRect = entryEl.getBoundingClientRect();\n\n        if (fromRect && fromRect.width > 0 && fromRect.height > 0 && toRect.width > 0 && toRect.height > 0) {\n          this.renderer.setStyle(entryEl, { visibility: 'hidden' });\n\n          animateWithFixedWrapper({\n            playerEl,\n            fromRect,\n            toRect,\n            document: this.document,\n            renderer: this.renderer,\n            onFinish: () => {\n              this.renderer.moveBefore({ newParent: entryEl, child: playerEl, before: entryEl.firstElementChild });\n              this.renderer.setStyle(entryEl, { visibility: null });\n              this.isReady.set(true);\n            },\n          });\n        } else {\n          this.renderer.moveBefore({ newParent: entryEl, child: playerEl, before: entryEl.firstElementChild });\n          this.isReady.set(true);\n        }\n      });\n    });\n  }\n}\n","import {\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { ProvideSurfaceDirective, injectSurfaceThemes, resolveSurfaceByElevation, setInputSignal } from '@ethlete/core';\nimport { WINDOW_CONTROL_BUTTON_KINDS, WINDOW_CONTROL_BUTTON_SIZES, WindowControlButtonComponent } from '../../button';\nimport {\n  ARROW_OUT_UP_RIGHT_ICON,\n  FOCUS_FRAME_ICON,\n  GRID_2X2_ICON,\n  ICON_IMPORTS,\n  TIMES_ICON,\n  provideIcons,\n} from '../../icon';\nimport { injectPipManager } from '../pip-manager';\nimport { PipBackDirective } from './headless/pip-back.directive';\nimport { PipCellDirective } from './headless/pip-cell.directive';\nimport { createPipChromeAnimations } from './headless/pip-chrome-animations';\nimport { PIP_CHROME_REF_TOKEN, PipChromeRef } from './headless/pip-chrome-ref.token';\nimport { createPipChromeState } from './headless/pip-chrome-state';\nimport { PipCloseDirective } from './headless/pip-close.directive';\nimport { PipGridToggleDirective } from './headless/pip-grid-toggle.directive';\nimport { PipStageDirective } from './headless/pip-stage.directive';\nimport { PipTitleBarTemplateDirective } from './headless/pip-title-bar-template.directive';\nimport { PIP_WINDOW_ASPECT_RATIO_TOKEN } from './headless/pip-window-aspect-ratio.token';\nimport { PipPlayerComponent } from './pip-player.component';\nimport { PipWindowComponent } from './pip-window.component';\n\n@Component({\n  selector: 'et-stream-pip-chrome',\n  templateUrl: './pip-chrome.component.html',\n  styleUrl: './pip-chrome.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    ...ICON_IMPORTS,\n    PipWindowComponent,\n    PipPlayerComponent,\n    PipBackDirective,\n    PipGridToggleDirective,\n    PipStageDirective,\n    PipTitleBarTemplateDirective,\n    PipCellDirective,\n    PipCloseDirective,\n    WindowControlButtonComponent,\n  ],\n  providers: [\n    provideIcons(ARROW_OUT_UP_RIGHT_ICON, FOCUS_FRAME_ICON, GRID_2X2_ICON, TIMES_ICON),\n    { provide: PIP_CHROME_REF_TOKEN, useExisting: StreamPipChromeComponent },\n    {\n      provide: PIP_WINDOW_ASPECT_RATIO_TOKEN,\n      useFactory: () => {\n        const chrome = inject(StreamPipChromeComponent);\n        return chrome.state.windowAspectRatio;\n      },\n    },\n  ],\n  hostDirectives: [ProvideSurfaceDirective],\n  host: {\n    class: 'et-stream-pip-chrome',\n    '[class.et-stream-pip-chrome--grid]': 'state.multiView()',\n  },\n})\nexport class StreamPipChromeComponent implements PipChromeRef {\n  public pipManager = injectPipManager();\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  public stageRef = viewChild<PipStageDirective, ElementRef<HTMLElement>>(PipStageDirective, { read: ElementRef });\n  public pipWindowRef = viewChild(PipWindowComponent);\n  public gridBtnRef = viewChild<PipGridToggleDirective, ElementRef<HTMLElement>>(PipGridToggleDirective, {\n    read: ElementRef,\n  });\n\n  public state = createPipChromeState();\n  public animations = createPipChromeAnimations(this.state, {\n    stageRef: this.stageRef,\n    gridBtnRef: this.gridBtnRef,\n    pipWindowRef: this.pipWindowRef,\n  });\n\n  public readonly CLOSE_KIND = WINDOW_CONTROL_BUTTON_KINDS.CLOSE;\n  public controlsColor = computed(() => this.pipManager.pipChromeConfig().controlsColor);\n  public readonly WINDOW_CONTROL_BUTTON_SIZE = WINDOW_CONTROL_BUTTON_SIZES.SM;\n\n  constructor() {\n    // The chrome is mounted into document.body, so no surface context is inherited.\n    // Stream UI sits on video content and always reads as a dark surface.\n    if (this.surfaceThemes) {\n      effect(() => {\n        const surface = resolveSurfaceByElevation(this.surfaceThemes ?? [], 'dark', 1);\n\n        untracked(() => {\n          setInputSignal(this.provideSurface.surface, surface?.name ?? null);\n        });\n      });\n    }\n  }\n}\n","<et-pip-window>\n  <ng-template etPipTitleBar>\n    @if (state.showBackButton()) {\n      <button [color]=\"controlsColor()\" [size]=\"WINDOW_CONTROL_BUTTON_SIZE\" et-window-control-button etPipBack>\n        <i etIcon=\"et-arrow-out-up-right\"></i>\n      </button>\n    }\n    <span class=\"et-pip-window__title-bar-spacer\"></span>\n    @if (state.hasMultiplePips()) {\n      <button\n        [color]=\"controlsColor()\"\n        [pressed]=\"state.multiView()\"\n        [size]=\"WINDOW_CONTROL_BUTTON_SIZE\"\n        et-window-control-button\n        etPipGridToggle\n      >\n        @if (state.multiView()) {\n          <i etIcon=\"et-focus-frame\"></i>\n        } @else {\n          <i etIcon=\"et-grid-2x2\"></i>\n        }\n      </button>\n    }\n    <button\n      [color]=\"controlsColor()\"\n      [kind]=\"CLOSE_KIND\"\n      [size]=\"WINDOW_CONTROL_BUTTON_SIZE\"\n      et-window-control-button\n      etPipClose\n    >\n      <i etIcon=\"et-times\"></i>\n    </button>\n  </ng-template>\n\n  <div etPipStage>\n    @for (c of state.cells(); track c.playerId) {\n      <div [etPipCell]=\"c\">\n        <et-pip-player />\n      </div>\n    }\n  </div>\n</et-pip-window>\n","import { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\n\nexport type PipSlotPlaceholderConfig = {\n  /**\n   * The color theme name to apply on the back button.\n   * When set, applies `[color]` on the button element.\n   */\n  backButtonColor: string | null;\n};\n\nconst DEFAULT_PIP_SLOT_PLACEHOLDER_CONFIG: PipSlotPlaceholderConfig = {\n  backButtonColor: null,\n};\n\nconst PIP_SLOT_PLACEHOLDER_CONFIG_DEF = /* @__PURE__ */ defineStaticRootProvider<PipSlotPlaceholderConfig>(\n  DEFAULT_PIP_SLOT_PLACEHOLDER_CONFIG,\n  {\n    name: 'PipSlotPlaceholderConfig',\n  },\n);\n\nexport const providePipSlotPlaceholderConfig = /* @__PURE__ */ toProvideFn(PIP_SLOT_PLACEHOLDER_CONFIG_DEF);\nexport const injectPipSlotPlaceholderConfig = /* @__PURE__ */ toInjectFn(PIP_SLOT_PLACEHOLDER_CONFIG_DEF);\n","import { Component, ViewEncapsulation, computed, effect, inject, untracked, viewChild } from '@angular/core';\nimport {\n  ProvideSurfaceDirective,\n  injectSurfaceType,\n  SURFACE_PROVIDER,\n  injectSurfaceThemes,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\nimport { injectStreamLabels } from '../stream-labels';\nimport { mountStreamOverlayCardStyles } from '../stream-overlay-card-styles.component';\nimport { ButtonComponent } from '../../button';\nimport { ARROW_OUT_UP_RIGHT_ICON, IconDirective, provideIcons } from '../../icon';\nimport { injectPipManager } from '../pip-manager';\nimport { STREAM_SLOT_PLAYER_ID_TOKEN } from '../stream-manager.types';\nimport { PipBringBackDirective } from './headless/pip-bring-back.directive';\nimport { injectPipSlotPlaceholderConfig } from './pip-slot-placeholder-config';\n\n@Component({\n  selector: 'et-pip-slot-placeholder',\n  template: `\n    @if (isInPip()) {\n      <div class=\"et-pip-slot-placeholder-overlay\">\n        <div [etProvideSurface]=\"cardSurface()\" class=\"et-pip-slot-placeholder-card\" etSurfaced>\n          <span class=\"et-pip-slot-placeholder-icon\" etIcon=\"et-arrow-out-up-right\"></span>\n          <p class=\"et-pip-slot-placeholder-message\">{{ message() }}</p>\n          <button [color]=\"backButtonColor()\" et-button etPipBringBack type=\"button\">\n            {{ backLabel() }}\n          </button>\n        </div>\n      </div>\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [PipBringBackDirective, ButtonComponent, IconDirective, ProvideSurfaceDirective],\n  providers: [provideIcons(ARROW_OUT_UP_RIGHT_ICON)],\n  styles: `\n    @property --et-pip-slot-placeholder-gap {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 12px;\n    }\n\n    @property --et-pip-slot-placeholder-padding {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 32px;\n    }\n\n    @property --et-pip-slot-placeholder-icon-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 36px;\n    }\n\n    @property --et-pip-slot-placeholder-border-radius {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 16px;\n    }\n\n    @property --et-pip-slot-placeholder-message-size {\n      syntax: '<length>';\n      inherits: false;\n      initial-value: 14px;\n    }\n\n    @property --et-pip-slot-placeholder-message-weight {\n      syntax: '<number>';\n      inherits: false;\n      initial-value: 400;\n    }\n\n    @property --et-pip-slot-placeholder-message-line-height {\n      syntax: '<percentage>';\n      inherits: false;\n      initial-value: 150%;\n    }\n\n    et-pip-slot-placeholder {\n      display: contents;\n    }\n\n    .et-pip-slot-placeholder-overlay {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: var(--et-surface-background-solid, inherit);\n      color: var(--et-surface-color-solid, inherit);\n      z-index: 20;\n    }\n\n    .et-pip-slot-placeholder-card {\n      --et-stream-overlay-card-gap: var(--et-pip-slot-placeholder-gap);\n      --et-stream-overlay-card-padding: var(--et-pip-slot-placeholder-padding);\n      --et-stream-overlay-card-icon-size: var(--et-pip-slot-placeholder-icon-size);\n      --et-stream-overlay-card-border-radius: var(--et-pip-slot-placeholder-border-radius);\n      --et-stream-overlay-card-description-size: var(--et-pip-slot-placeholder-message-size);\n      --et-stream-overlay-card-description-weight: var(--et-pip-slot-placeholder-message-weight);\n      --et-stream-overlay-card-description-line-height: var(--et-pip-slot-placeholder-message-line-height);\n    }\n  `,\n})\nexport class PipSlotPlaceholderComponent {\n  private slotPlayerId = inject(STREAM_SLOT_PLAYER_ID_TOKEN);\n  private parentSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n  private surfaceType = injectSurfaceType();\n  private pipManager = injectPipManager();\n  private config = injectPipSlotPlaceholderConfig();\n  private labels = injectStreamLabels();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  private bringBackDir = viewChild(PipBringBackDirective);\n\n  public cardSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const type = this.surfaceType();\n    if (!themes || !type) return null;\n\n    const elevation = (this.parentSurfaceProvider?.elevation() ?? 0) + 1;\n\n    return resolveSurfaceByElevation(themes, type, elevation)?.name ?? null;\n  });\n\n  public isInPip = computed(() => {\n    const playerId = this.slotPlayerId();\n    if (!playerId) return false;\n    return this.pipManager.pips().some((p) => p.playerId === playerId);\n  });\n\n  public message = computed(() => this.labels().pipPlaceholderMessage);\n  public backLabel = computed(() => this.labels().pipPlaceholderBack);\n  public backButtonColor = computed(() => this.config.backButtonColor);\n\n  constructor() {\n    mountStreamOverlayCardStyles();\n\n    effect(() => {\n      this.pipManager.backPulseCounter();\n      const dir = this.bringBackDir();\n      const playerId = this.slotPlayerId();\n      if (!dir || !playerId) return;\n      untracked(() => {\n        if (this.pipManager.consumeBackPulse(playerId)) {\n          dir.pulse();\n        }\n      });\n    });\n  }\n}\n","// codes 1600-1699\nexport const STREAM_ERROR_CODES = {\n  MISSING_CONSENT_TOKEN: 1600,\n  SCRIPT_LOAD_FAILED: 1601,\n  TWITCH_SDK_NOT_AVAILABLE: 1602,\n  YOUTUBE_SDK_NOT_AVAILABLE: 1603,\n  MISSING_PIP_CHROME_TOKEN: 1604,\n  FACEBOOK_SDK_NOT_AVAILABLE: 1605,\n  VIMEO_SDK_NOT_AVAILABLE: 1606,\n  TIKTOK_PLAYER_ERROR: 1607,\n  FACEBOOK_VIDEO_UNAVAILABLE: 1608,\n} as const;\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  DestroyRef,\n  DOCUMENT,\n  effect,\n  EnvironmentInjector,\n  Injector,\n  inject,\n} from '@angular/core';\nimport { defineRootProvider, injectRenderer, RuntimeError, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { injectPipManager } from './pip-manager';\nimport { PIP_CHROME_REF_TOKEN } from './pip/headless/pip-chrome-ref.token';\nimport { StreamPipChromeComponent } from './pip/pip-chrome.component';\nimport { STREAM_ERROR_CODES } from './stream-errors';\n\nconst PIP_CHROME_MANAGER_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const pipManager = injectPipManager();\n    const appRef = inject(ApplicationRef);\n    const envInjector = inject(EnvironmentInjector);\n    const registrationInjector = inject(Injector);\n    const destroyRef = inject(DestroyRef);\n    const document = inject(DOCUMENT);\n    const renderer = injectRenderer();\n\n    let pipChromeRef: ComponentRef<unknown> | null = null;\n\n    const destroyPipChrome = () => {\n      if (!pipChromeRef) return;\n      appRef.detachView(pipChromeRef.hostView);\n      pipChromeRef.destroy();\n      pipChromeRef = null;\n    };\n\n    effect(() => {\n      const activePips = pipManager.pips();\n      if (activePips.length > 0 && !pipChromeRef) {\n        const pipChromeComponent = pipManager.pipChromeComponent() ?? StreamPipChromeComponent;\n\n        const ref = createComponent(pipChromeComponent, {\n          environmentInjector: envInjector,\n          elementInjector: registrationInjector,\n        });\n\n        if (ngDevMode && !ref.injector.get(PIP_CHROME_REF_TOKEN, null)) {\n          throw new RuntimeError(\n            STREAM_ERROR_CODES.MISSING_PIP_CHROME_TOKEN,\n            '[PipChromeManager] pipChromeComponent does not provide PIP_CHROME_REF_TOKEN. Implement PipChromeRef on the ' +\n              'component and add { provide: PIP_CHROME_REF_TOKEN, useExisting: YourChromeComponent } to its providers.',\n          );\n        }\n\n        appRef.attachView(ref.hostView);\n        renderer.appendChild(document.body, ref.location.nativeElement);\n        pipChromeRef = ref;\n      } else if (activePips.length === 0 && pipChromeRef) {\n        destroyPipChrome();\n      }\n    });\n\n    destroyRef.onDestroy(destroyPipChrome);\n  },\n  { name: 'PipChromeManager' },\n);\n\nexport const providePipChromeManager = /* @__PURE__ */ toProvideFn(PIP_CHROME_MANAGER_DEF);\nexport const injectPipChromeManager = /* @__PURE__ */ toInjectFn(PIP_CHROME_MANAGER_DEF);\n","import { Type } from '@angular/core';\nimport { defineStaticRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { StreamPlayerErrorComponent } from './error';\nimport { StreamPlayerLoadingComponent } from './loading';\n\nexport type StreamConfig = {\n  /**\n   * An optional consent component to automatically render around stream player components.\n   * When set, any stream player component will use this component as its consent gate.\n   *\n   * The component must have `[etStreamConsent]` as a `hostDirective` (or equivalent consent\n   * directive) so the stream player can read the consent state from the injector tree.\n   */\n  consentComponent: Type<unknown> | null;\n\n  /**\n   * An optional component to render inside every player slot as a PIP overlay.\n   */\n  pipSlotPlaceholderComponent: Type<unknown> | null;\n\n  /**\n   * An optional component shown while the player is initializing (before `isReady`).\n   * It is automatically destroyed once the player fires its ready event.\n   *\n   * @default `StreamPlayerLoadingComponent`\n   */\n  loadingComponent: Type<unknown>;\n\n  /**\n   * An optional component shown when the player fails to load (e.g. SDK blocked by an ad-blocker).\n   * It is automatically destroyed when the player is retried and hid again when retry succeeds.\n   *\n   * @default `StreamPlayerErrorComponent`\n   */\n  errorComponent: Type<unknown>;\n};\n\nconst DEFAULT_STREAM_CONFIG: StreamConfig = {\n  consentComponent: null,\n  pipSlotPlaceholderComponent: null,\n  loadingComponent: StreamPlayerLoadingComponent,\n  errorComponent: StreamPlayerErrorComponent,\n};\n\nconst STREAM_CONFIG_BASE_DEF = /* @__PURE__ */ defineStaticRootProvider<StreamConfig>(DEFAULT_STREAM_CONFIG, {\n  name: 'StreamConfig',\n});\n\nconst provideStreamConfigBase = /* @__PURE__ */ toProvideFn(STREAM_CONFIG_BASE_DEF);\nconst injectStreamConfigBase = /* @__PURE__ */ toInjectFn(STREAM_CONFIG_BASE_DEF);\n\nexport const injectStreamConfig = injectStreamConfigBase;\n\nexport const createStreamConfig = (valueOverride: Partial<StreamConfig> = {}) => ({\n  ...DEFAULT_STREAM_CONFIG,\n  ...valueOverride,\n});\n\nexport const provideStreamConfig = (valueOverride: Partial<StreamConfig> = {}) =>\n  provideStreamConfigBase(createStreamConfig(valueOverride));\n","import { InjectionToken, Signal } from '@angular/core';\nimport { StreamPlayerCapabilities, StreamPlayerState } from './stream.types';\n\nexport type StreamPlayer = {\n  /** Capabilities of the player, e.g. whether it supports seeking. */\n  readonly CAPABILITIES: StreamPlayerCapabilities;\n\n  /**\n   * Current state of the player, e.g. whether it's playing or paused.\n   * Note that the state depends on the capabilities - e.g. a player that doesn't support seeking will always have currentTime = null.\n   */\n  state: Signal<StreamPlayerState>;\n\n  /**\n   * A reactive thumbnail URL for this player, or `null` if unavailable.\n   * Only populated when `CAPABILITIES.hasThumbnail` is true.\n   */\n  thumbnail: Signal<string | null>;\n\n  /** Start playback. No-op if already playing or if canPlay capability is false. */\n  play(): void;\n\n  /** Pause playback. No-op if already paused or if canPause capability is false. */\n  pause(): void;\n\n  /** Mute playback. No-op if already muted or if canMute capability is false. */\n  mute(): void;\n\n  /** Unmute playback. No-op if already unmuted or if canMute capability is false. */\n  unmute(): void;\n\n  /** Seek to time in seconds. No-op if canSeek capability is false. */\n  seek(seconds: number): void;\n\n  /** Reload the player resource, e.g. after a script load failure. */\n  retry(): void;\n};\n\nexport const STREAM_PLAYER_TOKEN = new InjectionToken<StreamPlayer>('STREAM_PLAYER_TOKEN');\n","export type StreamPlayerCapabilities = {\n  canPlay: boolean;\n  canPause: boolean;\n  canMute: boolean;\n  canSeek: boolean;\n  canGetDuration: boolean;\n  isLiveCapable: boolean;\n  hasThumbnail: boolean;\n};\n\nexport type StreamPlayerState = {\n  isReady: boolean;\n  isLoading: boolean;\n  error: null | unknown;\n  isPlaying: boolean;\n  isMuted: boolean;\n  isEnded: boolean;\n  /** null until the player is ready and duration is available */\n  duration: number | null;\n  /** null for live streams */\n  currentTime: number | null;\n};\n\nexport const DEFAULT_STREAM_PLAYER_STATE: StreamPlayerState = {\n  isReady: false,\n  isLoading: true,\n  error: null,\n  isPlaying: false,\n  isMuted: false,\n  isEnded: false,\n  duration: null,\n  currentTime: null,\n};\n","import {\n  ApplicationRef,\n  ComponentRef,\n  DestroyRef,\n  EnvironmentInjector,\n  Injector,\n  Signal,\n  WritableSignal,\n  afterNextRender,\n  computed,\n  createComponent,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement, injectRenderer } from '@ethlete/core';\nimport { distinctUntilChanged, filter, map, take, tap } from 'rxjs';\nimport { STREAM_CONSENT_TOKEN, STREAM_USER_CONSENT_PROVIDER_TOKEN } from './consent/headless/stream-consent.directive';\nimport {\n  STREAM_PLAYER_ERROR_CONTEXT_TOKEN,\n  StreamPlayerErrorContext,\n} from './error/headless/stream-player-error.directive';\nimport { STREAM_PIP_TOKEN } from './stream-pip.token';\nimport { injectStreamConfig } from './stream-config';\nimport { STREAM_ERROR_CODES } from './stream-errors';\nimport { injectStreamManager } from './stream-manager';\nimport { StreamPlayerId } from './stream-manager.types';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from './stream-player';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerState } from './stream.types';\n\nexport type StreamPlayerSlotOptions = {\n  /** Reactive player id derived from platform-specific params (e.g. `computed(() => \\`youtube-\\${params.videoId()}\\`)`). */\n  playerId: Signal<StreamPlayerId>;\n  /** Natural aspect ratio (width / height) of the player. Passed to PIP entries so the chrome can resize accordingly. */\n  aspectRatio: number;\n  /** Forwarded from the host directive's `streamSlotPriority` input. */\n  streamSlotPriority: Signal<boolean>;\n  /** Forwarded from the host directive's `streamSlotOnPipBack` input. */\n  streamSlotOnPipBack: Signal<(() => void) | undefined>;\n  /**\n   * Creates and returns the platform player `ComponentRef`.\n   * Receives the environment and element injectors so input bindings have the\n   * correct injection context.\n   */\n  createPlayer: (envInjector: EnvironmentInjector, elementInjector: Injector) => ComponentRef<unknown>;\n  /** Used in dev-mode warnings to identify which directive misconfigured consent. */\n  directiveName?: string;\n};\n\nexport type StreamPlayerSlotHandle = {\n  currentPlayerIdSignal: WritableSignal<StreamPlayerId | null>;\n  currentState: Signal<StreamPlayerState>;\n  pipActivate(onBack?: () => void): void;\n  pipDeactivate(): void;\n};\n\nexport const createStreamPlayerSlot = (options: StreamPlayerSlotOptions): StreamPlayerSlotHandle => {\n  const streamManager = injectStreamManager();\n  const streamPip = inject(STREAM_PIP_TOKEN, { optional: true });\n  const el = injectHostElement<HTMLElement>();\n  const appRef = inject(ApplicationRef);\n  const envInjector = inject(EnvironmentInjector);\n  const elementInjector = inject(Injector);\n  const destroyRef = inject(DestroyRef);\n  const streamConfig = injectStreamConfig();\n  const renderer = injectRenderer();\n  const consentHandler = inject(STREAM_USER_CONSENT_PROVIDER_TOKEN, { optional: true });\n\n  const currentPlayerIdSignal = signal<StreamPlayerId | null>(null);\n  const currentPlayer = signal<StreamPlayer | null>(null);\n  const currentState = computed(() => currentPlayer()?.state() ?? DEFAULT_STREAM_PLAYER_STATE);\n  let consentComponentRef: ComponentRef<unknown> | null = null;\n  let pipPlaceholderComponentRef: ComponentRef<unknown> | null = null;\n  let loadingComponentRef: ComponentRef<unknown> | null = null;\n  let errorComponentRef: ComponentRef<unknown> | null = null;\n\n  const destroyLoadingComponent = () => {\n    if (loadingComponentRef) {\n      appRef.detachView(loadingComponentRef.hostView);\n      loadingComponentRef.destroy();\n      loadingComponentRef = null;\n    }\n  };\n\n  const destroyErrorComponent = () => {\n    if (errorComponentRef) {\n      appRef.detachView(errorComponentRef.hostView);\n      errorComponentRef.destroy();\n      errorComponentRef = null;\n    }\n  };\n\n  effect(() => {\n    const newPlayerId = options.playerId();\n    const oldPlayerId = currentPlayerIdSignal();\n\n    if (!oldPlayerId || oldPlayerId === newPlayerId) return;\n\n    streamManager.transferPlayer(oldPlayerId, newPlayerId);\n    streamManager.unregisterSlot(el);\n    streamManager.registerSlot({\n      playerId: newPlayerId,\n      priority: options.streamSlotPriority(),\n      element: el,\n      onPipBack: options.streamSlotOnPipBack(),\n    });\n    currentPlayerIdSignal.set(newPlayerId);\n  });\n\n  const createAndRegisterPlayer = () => {\n    const currentPlayerId = options.playerId();\n    const componentRef = options.createPlayer(envInjector, elementInjector);\n    appRef.attachView(componentRef.hostView);\n\n    const playerElement = componentRef.location.nativeElement as HTMLElement;\n    const player = componentRef.injector.get<StreamPlayer>(STREAM_PLAYER_TOKEN);\n\n    currentPlayer.set(player);\n\n    streamManager.registerPlayer({\n      id: currentPlayerId,\n      element: playerElement,\n      thumbnail: player.thumbnail,\n      onDestroy: () => {\n        appRef.detachView(componentRef.hostView);\n        componentRef.destroy();\n      },\n    });\n    streamManager.registerSlot({\n      playerId: currentPlayerId,\n      priority: options.streamSlotPriority(),\n      element: el,\n      onPipBack: options.streamSlotOnPipBack(),\n    });\n\n    const { loadingComponent, errorComponent, pipSlotPlaceholderComponent } = streamConfig;\n\n    if (loadingComponent) {\n      const loadingRef = createComponent(loadingComponent, {\n        environmentInjector: envInjector,\n        elementInjector,\n      });\n      appRef.attachView(loadingRef.hostView);\n      renderer.appendChild(el, loadingRef.location.nativeElement);\n      loadingComponentRef = loadingRef;\n    }\n\n    if (loadingComponent || errorComponent) {\n      afterNextRender(\n        () => {\n          toObservable(player.state, { injector: componentRef.injector })\n            .pipe(\n              map((state) => {\n                if (state.error !== null) return 'error' as const;\n                if (state.isReady) return 'ready' as const;\n                return 'loading' as const;\n              }),\n              distinctUntilChanged(),\n              tap((displayState) => {\n                if (displayState === 'loading') {\n                  destroyErrorComponent();\n                  if (loadingComponent && !loadingComponentRef) {\n                    const loadingRef = createComponent(loadingComponent, {\n                      environmentInjector: envInjector,\n                      elementInjector,\n                    });\n                    appRef.attachView(loadingRef.hostView);\n                    renderer.appendChild(el, loadingRef.location.nativeElement);\n                    loadingComponentRef = loadingRef;\n                  }\n                } else if (displayState === 'ready') {\n                  destroyLoadingComponent();\n                  destroyErrorComponent();\n                } else {\n                  destroyLoadingComponent();\n                  if (errorComponent && !errorComponentRef) {\n                    const errorInjector = Injector.create({\n                      parent: elementInjector,\n                      providers: [\n                        {\n                          provide: STREAM_PLAYER_ERROR_CONTEXT_TOKEN,\n                          useValue: {\n                            error: computed(() => player.state().error),\n                            retry: () => player.retry(),\n                          } satisfies StreamPlayerErrorContext,\n                        },\n                      ],\n                    });\n                    const errorRef = createComponent(errorComponent, {\n                      environmentInjector: envInjector,\n                      elementInjector: errorInjector,\n                    });\n                    appRef.attachView(errorRef.hostView);\n                    renderer.appendChild(el, errorRef.location.nativeElement);\n                    errorComponentRef = errorRef;\n                  }\n                }\n              }),\n              takeUntilDestroyed(destroyRef),\n            )\n            .subscribe();\n        },\n        { injector: elementInjector },\n      );\n    }\n\n    if (pipSlotPlaceholderComponent) {\n      const placeholderRef = createComponent(pipSlotPlaceholderComponent, {\n        environmentInjector: envInjector,\n        elementInjector,\n      });\n      appRef.attachView(placeholderRef.hostView);\n      renderer.appendChild(el, placeholderRef.location.nativeElement);\n      pipPlaceholderComponentRef = placeholderRef;\n    }\n  };\n\n  const showConsentComponent = () => {\n    const { consentComponent } = streamConfig;\n\n    if (!consentComponent) {\n      return;\n    }\n\n    const consentRef = createComponent(consentComponent, {\n      environmentInjector: envInjector,\n      elementInjector,\n    });\n    appRef.attachView(consentRef.hostView);\n    renderer.appendChild(el, consentRef.location.nativeElement);\n    consentComponentRef = consentRef;\n\n    const consentDirective = consentRef.injector.get(STREAM_CONSENT_TOKEN, null);\n\n    if (!consentDirective) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          STREAM_ERROR_CODES.MISSING_CONSENT_TOKEN,\n          `[${options.directiveName ?? 'StreamPlayerSlot'}] consentComponent does not provide STREAM_CONSENT_TOKEN. Ensure the component has hostDirectives: [StreamConsentDirective].`,\n          { element: el },\n        );\n      }\n\n      return;\n    }\n\n    toObservable(consentDirective.isGranted, { injector: envInjector })\n      .pipe(\n        filter(Boolean),\n        take(1),\n        tap(() => {\n          appRef.detachView(consentRef.hostView);\n          consentRef.destroy();\n          consentComponentRef = null;\n          createAndRegisterPlayer();\n        }),\n        takeUntilDestroyed(destroyRef),\n      )\n      .subscribe();\n  };\n\n  const init = () => {\n    const currentPlayerId = options.playerId();\n    currentPlayerIdSignal.set(currentPlayerId);\n\n    if (streamManager.getPlayerElement(currentPlayerId)) {\n      streamManager.registerSlot({\n        playerId: currentPlayerId,\n        priority: options.streamSlotPriority(),\n        element: el,\n        onPipBack: options.streamSlotOnPipBack(),\n      });\n\n      const { pipSlotPlaceholderComponent } = streamConfig;\n      if (pipSlotPlaceholderComponent && !pipPlaceholderComponentRef) {\n        const placeholderRef = createComponent(pipSlotPlaceholderComponent, {\n          environmentInjector: envInjector,\n          elementInjector,\n        });\n        appRef.attachView(placeholderRef.hostView);\n        renderer.appendChild(el, placeholderRef.location.nativeElement);\n        pipPlaceholderComponentRef = placeholderRef;\n      }\n\n      return;\n    }\n\n    const { consentComponent } = streamConfig;\n\n    if (consentHandler?.isGranted()) {\n      createAndRegisterPlayer();\n\n      return;\n    }\n\n    if (!consentHandler && !consentComponent) {\n      createAndRegisterPlayer();\n\n      return;\n    }\n\n    if (consentHandler && !consentComponent) {\n      toObservable(consentHandler.isGranted, { injector: envInjector })\n        .pipe(\n          filter(Boolean),\n          take(1),\n          tap(() => createAndRegisterPlayer()),\n          takeUntilDestroyed(destroyRef),\n        )\n        .subscribe();\n\n      return;\n    }\n\n    showConsentComponent();\n  };\n\n  const destroy = () => {\n    if (currentPlayerIdSignal()) {\n      streamManager.unregisterSlot(el);\n    }\n\n    if (consentComponentRef) {\n      appRef.detachView(consentComponentRef.hostView);\n      consentComponentRef.destroy();\n      consentComponentRef = null;\n    }\n\n    if (pipPlaceholderComponentRef) {\n      appRef.detachView(pipPlaceholderComponentRef.hostView);\n      pipPlaceholderComponentRef.destroy();\n      pipPlaceholderComponentRef = null;\n    }\n\n    destroyLoadingComponent();\n    destroyErrorComponent();\n  };\n\n  const pipActivate = (onBack?: () => void) =>\n    streamPip?.manager.pipActivate(el, {\n      onBack,\n      aspectRatio: options.aspectRatio,\n      pipChromeComponent: streamPip.options.pipChromeComponent ?? undefined,\n      pipChromeConfig: streamPip.options.pipChrome,\n    });\n\n  const pipDeactivate = () => {\n    const id = currentPlayerIdSignal();\n\n    if (id) {\n      streamPip?.manager.pipDeactivate(id);\n    }\n  };\n\n  afterNextRender(() => init());\n  destroyRef.onDestroy(() => destroy());\n\n  return { currentPlayerIdSignal, currentState, pipActivate, pipDeactivate };\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'et-stream-player-slot-styles',\n  template: '',\n  styleUrl: './stream-player-slot-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class StreamPlayerSlotStylesComponent {}\n","import {\n  Binding,\n  Directive,\n  InjectionToken,\n  Signal,\n  Type,\n  booleanAttribute,\n  computed,\n  createComponent,\n  effect,\n  inject,\n  input,\n  untracked,\n} from '@angular/core';\nimport {\n  ProvideSurfaceDirective,\n  injectSurfaceType,\n  SURFACE_PROVIDER,\n  injectStyleManager,\n  injectSurfaceThemes,\n  resolveSurfaceByElevation,\n  setInputSignal,\n} from '@ethlete/core';\nimport { STREAM_SLOT_PLAYER_ID_TOKEN, StreamPlayerId } from './stream-manager.types';\nimport { createStreamPlayerSlot } from './stream-player-slot';\nimport { StreamPlayerSlotStylesComponent } from './stream-player-slot-styles.component';\n\nexport type StreamPlayerParams = {\n  readonly playerId: Signal<StreamPlayerId>;\n  /** Natural aspect ratio (width / height) of the player. Defaults to 16/9 if absent. */\n  readonly ASPECT_RATIO?: number;\n  createBindings(): Binding[];\n};\n\nexport const STREAM_PLAYER_PARAMS_TOKEN = new InjectionToken<StreamPlayerParams>('STREAM_PLAYER_PARAMS_TOKEN');\nexport const STREAM_PLAYER_COMPONENT_TOKEN = new InjectionToken<Type<unknown>>('STREAM_PLAYER_COMPONENT_TOKEN');\nexport const STREAM_PLAYER_SLOT_TOKEN = new InjectionToken<StreamPlayerSlotDirective>('STREAM_PLAYER_SLOT_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: STREAM_PLAYER_SLOT_TOKEN, useExisting: StreamPlayerSlotDirective },\n    {\n      provide: STREAM_SLOT_PLAYER_ID_TOKEN,\n      useFactory: () => {\n        const directive = inject(StreamPlayerSlotDirective);\n        return directive.slot.currentPlayerIdSignal;\n      },\n    },\n  ],\n  hostDirectives: [\n    {\n      directive: ProvideSurfaceDirective,\n      inputs: ['etProvideSurface:surface'],\n    },\n  ],\n  host: {\n    class: 'et-stream-player-slot',\n  },\n})\nexport class StreamPlayerSlotDirective {\n  private params = inject(STREAM_PLAYER_PARAMS_TOKEN);\n  private playerComponent = inject(STREAM_PLAYER_COMPONENT_TOKEN);\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private parentSurfaceProvider = inject(SURFACE_PROVIDER, { optional: true, skipSelf: true });\n  private surfaceType = injectSurfaceType();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n  private styleManager = injectStyleManager();\n\n  public streamSlotPriority = input(false, { transform: booleanAttribute });\n  public streamSlotOnPipBack = input<() => void>();\n\n  private resolvedSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const type = this.surfaceType();\n    if (!themes || !type) return null;\n\n    const elevation = (this.parentSurfaceProvider?.elevation() ?? 0) + 1;\n    return resolveSurfaceByElevation(themes, type, elevation);\n  });\n\n  public slot = createStreamPlayerSlot({\n    playerId: this.params.playerId,\n    aspectRatio: this.params.ASPECT_RATIO ?? 16 / 9,\n    streamSlotPriority: this.streamSlotPriority,\n    streamSlotOnPipBack: this.streamSlotOnPipBack,\n    createPlayer: (envInjector, elementInjector) =>\n      createComponent(this.playerComponent, {\n        environmentInjector: envInjector,\n        elementInjector,\n        bindings: this.params.createBindings(),\n      }),\n  });\n\n  constructor() {\n    this.styleManager.mount(StreamPlayerSlotStylesComponent);\n\n    if (this.surfaceThemes) {\n      effect(() => {\n        const surface = this.resolvedSurface();\n\n        untracked(() => {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          setInputSignal(this.provideSurface.surface as any, surface?.name ?? null);\n        });\n      });\n    }\n  }\n}\n","import { Directive, computed, input, inputBinding, numberAttribute } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: DailymotionPlayerParamsDirective }],\n})\nexport class DailymotionPlayerParamsDirective implements StreamPlayerParams {\n  public videoId = input.required<string>();\n  public startTime = input(0, { transform: numberAttribute });\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public playerId = computed(() => `dailymotion-${this.videoId()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('startTime', () => this.startTime()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, InjectionToken, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { DailymotionPlayerParamsDirective } from './dailymotion-player-params.directive';\nimport { injectStreamLabels } from '../../../stream-labels';\n\nexport const DAILYMOTION_PLAYER_TOKEN = new InjectionToken<DailymotionPlayerDirective>('DAILYMOTION_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: DAILYMOTION_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: DailymotionPlayerDirective },\n  ],\n})\nexport class DailymotionPlayerDirective implements StreamPlayer {\n  private streamLabels = injectStreamLabels();\n\n  private platformId = inject(PLATFORM_ID);\n  private params = inject(DailymotionPlayerParamsDirective);\n  private el = injectHostElement();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: false,\n    canPause: false,\n    canMute: false,\n    canSeek: false,\n    canGetDuration: false,\n    isLiveCapable: true,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),\n    stream: ({ params: videoId }) => {\n      if (!videoId) return EMPTY;\n\n      return new Observable<void>((subscriber) => {\n        const iframe = this.renderer.createElement('iframe');\n        const qs = new URLSearchParams({ autoplay: '0' });\n        const startTime = this.params.startTime();\n        if (startTime > 0) qs.set('start', String(startTime));\n\n        const w = this.params.width();\n        const h = this.params.height();\n        iframe.src = `https://www.dailymotion.com/embed/video/${videoId}?${qs}`;\n        iframe.title = this.streamLabels().playerFrame('Dailymotion');\n        iframe.width = typeof w === 'number' ? String(w) : w;\n        iframe.height = typeof h === 'number' ? String(h) : h;\n        this.renderer.setStyle(iframe, { border: 'none' });\n        iframe.allow = 'autoplay; encrypted-media';\n        iframe.allowFullscreen = true;\n        this.renderer.setAttribute(iframe, 'scrolling', 'no');\n\n        iframe.onload = () => {\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE, isReady: true, isLoading: false });\n          subscriber.next();\n        };\n\n        this.renderer.appendChild(this.el, iframe);\n\n        return () => {\n          if (this.el.contains(iframe)) this.renderer.removeChild(this.el, iframe);\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n        };\n      });\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  // Dailymotion embeds have no programmatic control API without a dashboard-created player ID\n\n  public play() {\n    // no-op\n  }\n\n  public pause() {\n    // no-op\n  }\n\n  public mute() {\n    // no-op\n  }\n\n  public unmute() {\n    // no-op\n  }\n\n  public seek() {\n    // no-op\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { DailymotionPlayerParamsDirective } from './headless/dailymotion-player-params.directive';\nimport { DAILYMOTION_PLAYER_TOKEN, DailymotionPlayerDirective } from './headless/dailymotion-player.directive';\n\n@Component({\n  selector: 'et-dailymotion-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: DailymotionPlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    DailymotionPlayerDirective,\n  ],\n  host: {\n    class: 'et-dailymotion-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class DailymotionPlayerComponent {\n  public player = inject(DAILYMOTION_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { DailymotionPlayerComponent } from './dailymotion-player.component';\nimport { DailymotionPlayerParamsDirective } from './headless/dailymotion-player-params.directive';\n\n@Component({\n  selector: 'et-dailymotion-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: DailymotionPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: DailymotionPlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-dailymotion-player-slot et-stream-player-slot',\n  },\n})\nexport class DailymotionPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, computed, input, inputBinding } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: FacebookPlayerParamsDirective }],\n})\nexport class FacebookPlayerParamsDirective implements StreamPlayerParams {\n  public videoId = input.required<string>();\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public playerId = computed(() => `facebook-${this.videoId()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { CSP_NONCE, DOCUMENT, inject } from '@angular/core';\nimport { defineRootProvider, injectRenderer, RuntimeError, toInjectFn } from '@ethlete/core';\nimport { Observable, shareReplay } from 'rxjs';\nimport { STREAM_ERROR_CODES } from './stream-errors';\n\nconst STREAM_SCRIPT_LOADER_DEF = /* @__PURE__ */ defineRootProvider(\n  () => {\n    const document = inject(DOCUMENT);\n    const cache = new Map<string, Observable<void>>();\n    const mountedScripts = new Set<string>();\n    const renderer = injectRenderer();\n    const nonce = inject(CSP_NONCE, { optional: true });\n\n    const load = (src: string): Observable<void> => {\n      const cached = cache.get(src);\n\n      if (cached) return cached;\n\n      const obs$ = new Observable<void>((subscriber) => {\n        const isMounted = mountedScripts.has(src);\n\n        if (isMounted) {\n          subscriber.next();\n          subscriber.complete();\n\n          return;\n        }\n\n        const script = renderer.createElement('script');\n        script.src = src;\n        script.async = true;\n\n        if (nonce) renderer.setAttribute(script, 'nonce', nonce);\n\n        renderer.listen(script, 'load', () => {\n          subscriber.next();\n          subscriber.complete();\n          mountedScripts.add(src);\n        });\n\n        renderer.listen(script, 'error', () => {\n          cache.delete(src);\n          script.remove();\n          mountedScripts.delete(src);\n          subscriber.error(\n            new RuntimeError(\n              STREAM_ERROR_CODES.SCRIPT_LOAD_FAILED,\n              `[StreamScriptLoader] Failed to load script: ${src}.`,\n            ),\n          );\n        });\n\n        renderer.appendChild(document.head, script);\n      }).pipe(shareReplay(1));\n\n      cache.set(src, obs$);\n      return obs$;\n    };\n\n    return { load };\n  },\n  { name: 'Stream Script Loader' },\n);\n\nexport const injectStreamScriptLoader = /* @__PURE__ */ toInjectFn(STREAM_SCRIPT_LOADER_DEF);\n\nexport type StreamScriptLoader = ReturnType<typeof injectStreamScriptLoader>;\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, Directive, InjectionToken, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable, catchError, tap, timer } from 'rxjs';\nimport { STREAM_ERROR_CODES } from '../../../stream-errors';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { injectStreamScriptLoader } from '../../../stream-script-loader';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { FacebookPlayerParamsDirective } from './facebook-player-params.directive';\nimport { FacebookVideoPlayer, FacebookWindow } from './facebook-player.types';\n\nconst FB_SDK_URL = 'https://connect.facebook.net/de_DE/sdk.js#xfbml=1&version=v3.2';\nconst FB_READY_TIMEOUT = 15_000;\n\nexport const FACEBOOK_PLAYER_TOKEN = new InjectionToken<FacebookPlayerDirective>('FACEBOOK_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: FACEBOOK_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: FacebookPlayerDirective },\n  ],\n})\nexport class FacebookPlayerDirective implements StreamPlayer {\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private params = inject(FacebookPlayerParamsDirective);\n  private el = injectHostElement();\n  private scriptLoader = injectStreamScriptLoader();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: true,\n    canPause: true,\n    canMute: true,\n    canSeek: true,\n    canGetDuration: true,\n    isLiveCapable: false,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),\n    stream: ({ params: videoId }) => {\n      if (!videoId) return EMPTY;\n\n      const videoUrl = `https://www.facebook.com/video/${videoId}`;\n\n      return new Observable<FacebookVideoPlayer>((subscriber) => {\n        const win = this.document.defaultView as unknown as FacebookWindow;\n        const playerSubscriptions: Array<{ release(): void }> = [];\n        let active = true;\n        let loaderSub: { unsubscribe(): void } | null = null;\n        let xfbmlReadyHandler: ((msg: unknown) => void) | null = null;\n        let readyTimeoutSub: { unsubscribe(): void } | null = null;\n\n        const createEmbed = () => {\n          if (!active) return;\n\n          if (!win.FB) {\n            subscriber.error(\n              new RuntimeError(\n                STREAM_ERROR_CODES.FACEBOOK_SDK_NOT_AVAILABLE,\n                '[EtFacebookPlayer] Facebook SDK not available after script load. Ensure the Facebook SDK URL is accessible.',\n              ),\n            );\n\n            return;\n          }\n\n          const containerId = `et-fb-${Math.random().toString(36).slice(2)}`;\n\n          xfbmlReadyHandler = (rawMsg: unknown) => {\n            const msg = rawMsg as { type: string; id: string; instance: unknown };\n            if (msg.type !== 'video' || msg.id !== containerId) return;\n\n            readyTimeoutSub?.unsubscribe();\n            readyTimeoutSub = null;\n\n            const player = msg.instance as FacebookVideoPlayer;\n\n            this.state.update((s) => ({ ...s, isReady: true, isLoading: false }));\n            subscriber.next(player);\n\n            playerSubscriptions.push(\n              player.subscribe('startedPlaying', () => {\n                this.state.update((s) => ({ ...s, isPlaying: true, isEnded: false }));\n              }),\n            );\n            playerSubscriptions.push(\n              player.subscribe('paused', () => {\n                this.state.update((s) => ({ ...s, isPlaying: false }));\n              }),\n            );\n            playerSubscriptions.push(\n              player.subscribe('finishedPlaying', () => {\n                this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true }));\n              }),\n            );\n          };\n\n          win.FB.Event.subscribe('xfbml.ready', xfbmlReadyHandler);\n\n          const w = this.params.width();\n          const h = this.params.height();\n          const container = this.renderer.createElement('div');\n          container.id = containerId;\n          container.className = 'fb-video';\n          container.dataset['href'] = videoUrl;\n          container.dataset['width'] = typeof w === 'number' ? String(w) : 'auto';\n          container.dataset['showText'] = 'false';\n\n          this.renderer.setStyle(this.el, {\n            display: 'block',\n            width: typeof w === 'number' ? `${w}px` : w,\n            height: typeof h === 'number' ? `${h}px` : null,\n          });\n\n          this.renderer.appendChild(this.el, container);\n          win.FB.XFBML.parse(this.el);\n\n          readyTimeoutSub = timer(FB_READY_TIMEOUT)\n            .pipe(\n              tap(() => {\n                if (!active) return;\n\n                subscriber.error(\n                  new RuntimeError(\n                    STREAM_ERROR_CODES.FACEBOOK_VIDEO_UNAVAILABLE,\n                    '[EtFacebookPlayer] The Facebook video did not become ready within the expected time. The video may be unavailable or restricted.',\n                  ),\n                );\n              }),\n            )\n            .subscribe();\n        };\n\n        if (win.FB) {\n          createEmbed();\n        } else {\n          const prev = win.fbAsyncInit;\n          win.fbAsyncInit = () => {\n            prev?.();\n            createEmbed();\n          };\n          loaderSub = this.scriptLoader\n            .load(FB_SDK_URL)\n            .pipe(\n              catchError((e: unknown) => {\n                subscriber.error(e);\n                return EMPTY;\n              }),\n            )\n            .subscribe();\n        }\n\n        return () => {\n          active = false;\n          loaderSub?.unsubscribe();\n          readyTimeoutSub?.unsubscribe();\n          if (xfbmlReadyHandler) win.FB?.Event.unsubscribe('xfbml.ready', xfbmlReadyHandler);\n          for (const sub of playerSubscriptions) sub.release();\n          this.el.innerHTML = '';\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n        };\n      });\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  public play() {\n    this.playerResource.value()?.play();\n  }\n\n  public pause() {\n    this.playerResource.value()?.pause();\n  }\n\n  public mute() {\n    this.playerResource.value()?.mute();\n    this.state.update((s) => ({ ...s, isMuted: true }));\n  }\n\n  public unmute() {\n    this.playerResource.value()?.unmute();\n    this.state.update((s) => ({ ...s, isMuted: false }));\n  }\n\n  public seek(seconds: number) {\n    this.playerResource.value()?.seek(seconds);\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { FacebookPlayerParamsDirective } from './headless/facebook-player-params.directive';\nimport { FACEBOOK_PLAYER_TOKEN, FacebookPlayerDirective } from './headless/facebook-player.directive';\n\n@Component({\n  selector: 'et-facebook-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: FacebookPlayerParamsDirective,\n      inputs: ['videoId', 'width', 'height'],\n    },\n    FacebookPlayerDirective,\n  ],\n  host: {\n    class: 'et-facebook-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class FacebookPlayerComponent {\n  public player = inject(FACEBOOK_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { FacebookPlayerComponent } from './facebook-player.component';\nimport { FacebookPlayerParamsDirective } from './headless/facebook-player-params.directive';\n\n@Component({\n  selector: 'et-facebook-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: FacebookPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: FacebookPlayerParamsDirective,\n      inputs: ['videoId', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-facebook-player-slot et-stream-player-slot',\n  },\n})\nexport class FacebookPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, booleanAttribute, computed, input, inputBinding } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: KickPlayerParamsDirective }],\n})\nexport class KickPlayerParamsDirective implements StreamPlayerParams {\n  public channel = input.required<string>();\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n  public muted = input(false, { transform: booleanAttribute });\n\n  public playerId = computed(() => `kick-${this.channel()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('channel', () => this.channel()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n      inputBinding('muted', () => this.muted()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, InjectionToken, DOCUMENT, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { KickPlayerParamsDirective } from './kick-player-params.directive';\nimport { injectStreamLabels } from '../../../stream-labels';\n\nexport const KICK_PLAYER_TOKEN = new InjectionToken<KickPlayerDirective>('KICK_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: KICK_PLAYER_TOKEN, useExisting: KickPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: KickPlayerDirective },\n  ],\n})\nexport class KickPlayerDirective implements StreamPlayer {\n  private streamLabels = injectStreamLabels();\n\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private params = inject(KickPlayerParamsDirective);\n  private el = injectHostElement();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: false,\n    canPause: false,\n    canMute: false,\n    canSeek: false,\n    canGetDuration: false,\n    isLiveCapable: true,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.channel() : null),\n    stream: ({ params: channel }) => {\n      if (!channel) return EMPTY;\n\n      return new Observable<void>((subscriber) => {\n        const iframe = this.renderer.createElement('iframe');\n        const qs = new URLSearchParams({ parent: this.document.defaultView?.location.hostname ?? '' });\n        if (this.params.muted()) qs.set('muted', 'true');\n\n        iframe.src = `https://player.kick.com/${channel}?${qs}`;\n        iframe.title = this.streamLabels().playerFrame('Kick');\n        iframe.width = String(this.params.width());\n        iframe.height = String(this.params.height());\n        this.renderer.setStyle(iframe, { border: 'none' });\n        this.renderer.setAttribute(iframe, 'scrolling', 'no');\n        iframe.allowFullscreen = true;\n        iframe.allow = 'autoplay; encrypted-media';\n\n        iframe.onload = () => {\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE, isReady: true, isLoading: false });\n          subscriber.next();\n        };\n\n        this.renderer.appendChild(this.el, iframe);\n\n        return () => {\n          if (this.el.contains(iframe)) {\n            this.renderer.removeChild(this.el, iframe);\n          }\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n        };\n      });\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  // Kick embeds have no programmatic control API - these are intentional no-ops.\n\n  public play() {\n    // no-op\n  }\n  public pause() {\n    // no-op\n  }\n  public mute() {\n    // no-op\n  }\n  public unmute() {\n    // no-op\n  }\n  public seek() {\n    // no-op\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { KickPlayerParamsDirective } from './headless/kick-player-params.directive';\nimport { KICK_PLAYER_TOKEN, KickPlayerDirective } from './headless/kick-player.directive';\n\n@Component({\n  selector: 'et-kick-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: KickPlayerParamsDirective,\n      inputs: ['channel', 'width', 'height', 'muted'],\n    },\n    KickPlayerDirective,\n  ],\n  host: {\n    class: 'et-kick-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class KickPlayerComponent {\n  public player = inject(KICK_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { KickPlayerParamsDirective } from './headless/kick-player-params.directive';\nimport { KickPlayerComponent } from './kick-player.component';\n\n@Component({\n  selector: 'et-kick-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: KickPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: KickPlayerParamsDirective,\n      inputs: ['channel', 'width', 'height', 'muted'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-kick-player-slot et-stream-player-slot',\n  },\n})\nexport class KickPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, computed, input, inputBinding } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: SoopPlayerParamsDirective }],\n})\nexport class SoopPlayerParamsDirective implements StreamPlayerParams {\n  public userId = input<string | null>(null);\n  public videoId = input<string | null>(null);\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public playerId = computed(() => {\n    const u = this.userId();\n    return u ? `soop-user-${u}` : `soop-video-${this.videoId()}`;\n  });\n\n  public createBindings() {\n    return [\n      inputBinding('userId', () => this.userId()),\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, InjectionToken, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { SoopPlayerParamsDirective } from './soop-player-params.directive';\nimport { injectStreamLabels } from '../../../stream-labels';\n\nexport const SOOP_PLAYER_TOKEN = new InjectionToken<SoopPlayerDirective>('SOOP_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: SOOP_PLAYER_TOKEN, useExisting: SoopPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: SoopPlayerDirective },\n  ],\n})\nexport class SoopPlayerDirective implements StreamPlayer {\n  private streamLabels = injectStreamLabels();\n\n  private platformId = inject(PLATFORM_ID);\n  private params = inject(SoopPlayerParamsDirective);\n  private el = injectHostElement();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: false,\n    canPause: false,\n    canMute: false,\n    canSeek: false,\n    canGetDuration: false,\n    isLiveCapable: true,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: (): { userId: string | null; videoId: string | null } | null => {\n      if (!isPlatformBrowser(this.platformId)) return null;\n      const userId = this.params.userId();\n      const videoId = this.params.videoId();\n      if (!userId && !videoId) return null;\n      return { userId, videoId };\n    },\n    stream: ({ params }) => {\n      if (!params) return EMPTY;\n\n      return new Observable<void>((subscriber) => {\n        const iframe = this.renderer.createElement('iframe');\n        const w = this.params.width();\n        const h = this.params.height();\n\n        if (params.userId) {\n          iframe.src = `https://play.afreecatv.com/${params.userId}/embed`;\n        } else {\n          iframe.src = `https://vod.afreecatv.com/player/${params.videoId}`;\n        }\n\n        iframe.title = this.streamLabels().playerFrame('SOOP');\n        iframe.width = typeof w === 'number' ? String(w) : w;\n        iframe.height = typeof h === 'number' ? String(h) : h;\n        this.renderer.setStyle(iframe, { border: 'none' });\n        this.renderer.setAttribute(iframe, 'scrolling', 'no');\n        iframe.allowFullscreen = true;\n        iframe.allow = 'autoplay; encrypted-media';\n\n        iframe.onload = () => {\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE, isReady: true, isLoading: false });\n          subscriber.next();\n        };\n\n        this.renderer.appendChild(this.el, iframe);\n\n        return () => {\n          if (this.el.contains(iframe)) {\n            this.renderer.removeChild(this.el, iframe);\n          }\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n        };\n      });\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  // SOOP embeds have no programmatic control API - these are intentional no-ops.\n\n  public play() {\n    // no-op\n  }\n  public pause() {\n    // no-op\n  }\n  public mute() {\n    // no-op\n  }\n  public unmute() {\n    // no-op\n  }\n  public seek() {\n    // no-op\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { SoopPlayerParamsDirective } from './headless/soop-player-params.directive';\nimport { SOOP_PLAYER_TOKEN, SoopPlayerDirective } from './headless/soop-player.directive';\n\n@Component({\n  selector: 'et-soop-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: SoopPlayerParamsDirective,\n      inputs: ['userId', 'videoId', 'width', 'height'],\n    },\n    SoopPlayerDirective,\n  ],\n  host: {\n    class: 'et-soop-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class SoopPlayerComponent {\n  public player = inject(SOOP_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { SoopPlayerParamsDirective } from './headless/soop-player-params.directive';\nimport { SoopPlayerComponent } from './soop-player.component';\n\n@Component({\n  selector: 'et-soop-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: SoopPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: SoopPlayerParamsDirective,\n      inputs: ['userId', 'videoId', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-soop-player-slot et-stream-player-slot',\n  },\n})\nexport class SoopPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, computed, input, inputBinding } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: TikTokPlayerParamsDirective }],\n})\nexport class TikTokPlayerParamsDirective implements StreamPlayerParams {\n  public videoId = input.required<string>();\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public readonly ASPECT_RATIO = 9 / 16;\n\n  public playerId = computed(() => `tiktok-${this.videoId()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, InjectionToken, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { STREAM_ERROR_CODES } from '../../../stream-errors';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { TikTokPlayerParamsDirective } from './tiktok-player-params.directive';\nimport { injectStreamLabels } from '../../../stream-labels';\n\nexport const TIKTOK_PLAYER_TOKEN = new InjectionToken<TikTokPlayerDirective>('TIKTOK_PLAYER_TOKEN');\n\nconst TIKTOK_PLAYER_STATE = { INIT: -1, ENDED: 0, PLAYING: 1, PAUSED: 2, BUFFERING: 3 } as const;\n\n@Directive({\n  providers: [\n    { provide: TIKTOK_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: TikTokPlayerDirective },\n  ],\n})\nexport class TikTokPlayerDirective implements StreamPlayer {\n  private streamLabels = injectStreamLabels();\n\n  private platformId = inject(PLATFORM_ID);\n  private params = inject(TikTokPlayerParamsDirective);\n  private el = injectHostElement();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: true,\n    canPause: true,\n    canMute: true,\n    canSeek: true,\n    canGetDuration: true,\n    isLiveCapable: false,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private iframe: HTMLIFrameElement | null = null;\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),\n    stream: ({ params: videoId }) => {\n      if (!videoId) return EMPTY;\n\n      return new Observable<void>((subscriber) => {\n        const iframe = this.renderer.createElement('iframe');\n        const w = this.params.width();\n        const h = this.params.height();\n\n        iframe.src = `https://www.tiktok.com/player/v1/${videoId}?rel=0`;\n        iframe.title = this.streamLabels().playerFrame('TikTok');\n        iframe.width = typeof w === 'number' ? String(w) : w;\n        iframe.height = typeof h === 'number' ? String(h) : h;\n        this.renderer.setStyle(iframe, { border: 'none' });\n        this.renderer.setAttribute(iframe, 'scrolling', 'no');\n        iframe.allowFullscreen = true;\n        iframe.allow = 'accelerometer; autoplay; fullscreen; encrypted-media; gyroscope; picture-in-picture';\n\n        this.iframe = iframe;\n\n        const handleMessage = (event: Event) => {\n          const e = event as MessageEvent;\n          if (!iframe || e.source !== iframe.contentWindow) return;\n          const msg = e.data as Record<string, unknown> | null;\n          if (!msg?.['x-tiktok-player']) return;\n\n          switch (msg['type']) {\n            case 'onPlayerReady':\n              this.state.update((s) => ({ ...s, isReady: true, isLoading: false }));\n              break;\n            case 'onStateChange': {\n              const value = msg['value'] as number;\n              this.state.update((s) => ({\n                ...s,\n                isPlaying: value === TIKTOK_PLAYER_STATE.PLAYING || value === TIKTOK_PLAYER_STATE.BUFFERING,\n                isEnded: value === TIKTOK_PLAYER_STATE.ENDED,\n              }));\n              break;\n            }\n            case 'onCurrentTime': {\n              const val = msg['value'] as { currentTime: number; duration: number };\n              this.state.update((s) => ({ ...s, currentTime: val.currentTime, duration: val.duration }));\n              break;\n            }\n            case 'onMute': {\n              const muted = !!msg['value'];\n              this.state.update((s) => ({ ...s, isMuted: muted }));\n              break;\n            }\n            case 'onError': {\n              const tiktokError = new RuntimeError(\n                STREAM_ERROR_CODES.TIKTOK_PLAYER_ERROR,\n                `[EtTikTokPlayer] TikTok player error: ${msg['value'] ?? 'unknown error'}`,\n              );\n              this.state.update((s) => ({ ...s, error: tiktokError, isLoading: false }));\n              subscriber.error(tiktokError);\n              break;\n            }\n          }\n        };\n\n        const unlisten = this.renderer.listen('window', 'message', handleMessage);\n\n        iframe.onload = () => {\n          this.state.update((s) => ({ ...s, isReady: true, isLoading: false }));\n          subscriber.next();\n        };\n\n        this.renderer.appendChild(this.el, iframe);\n\n        return () => {\n          unlisten();\n          this.iframe = null;\n          if (this.el.contains(iframe)) {\n            this.renderer.removeChild(this.el, iframe);\n          }\n          this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n        };\n      });\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  public play() {\n    this.post('play');\n  }\n\n  public pause() {\n    this.post('pause');\n  }\n\n  public mute() {\n    this.post('mute');\n  }\n\n  public unmute() {\n    this.post('unMute');\n  }\n\n  public seek(seconds: number) {\n    this.post('seekTo', seconds);\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n\n  private post(type: string, value?: unknown) {\n    if (!this.iframe?.contentWindow) return;\n    const message: Record<string, unknown> = { 'x-tiktok-player': true, type };\n    if (value !== undefined) message['value'] = value;\n    this.iframe.contentWindow.postMessage(message, '*');\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { TikTokPlayerParamsDirective } from './headless/tiktok-player-params.directive';\nimport { TIKTOK_PLAYER_TOKEN, TikTokPlayerDirective } from './headless/tiktok-player.directive';\n\n@Component({\n  selector: 'et-tiktok-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: TikTokPlayerParamsDirective,\n      inputs: ['videoId', 'width', 'height'],\n    },\n    TikTokPlayerDirective,\n  ],\n  host: {\n    class: 'et-tiktok-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class TikTokPlayerComponent {\n  public player = inject(TIKTOK_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { TikTokPlayerParamsDirective } from './headless/tiktok-player-params.directive';\nimport { TikTokPlayerComponent } from './tiktok-player.component';\n\n@Component({\n  selector: 'et-tiktok-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: TikTokPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: TikTokPlayerParamsDirective,\n      inputs: ['videoId', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-tiktok-player-slot et-stream-player-slot',\n  },\n})\nexport class TikTokPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, booleanAttribute, computed, input, inputBinding, numberAttribute } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n// Matches Twitch VOD URLs: twitch.tv/videos/123 or twitch.tv/video/123\nconst MATCH_VIDEO = /(?:www\\.|go\\.)?twitch\\.tv\\/(?:videos?\\/)([\\d]+)/;\n// Matches Twitch channel URLs: twitch.tv/channelname\nconst MATCH_CHANNEL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+)/;\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: TwitchPlayerParamsDirective }],\n})\nexport class TwitchPlayerParamsDirective implements StreamPlayerParams {\n  public src = input.required<string>();\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n  public autoplay = input(false, { transform: booleanAttribute });\n  public chat = input(false, { transform: booleanAttribute });\n  public startTime = input(0, { transform: numberAttribute });\n\n  public channel = computed(() => {\n    const s = this.src();\n    if (MATCH_VIDEO.test(s)) return null;\n    const m = s.match(MATCH_CHANNEL);\n    if (m) return m[1] ?? null;\n    return /^\\d+$/.test(s) ? null : s;\n  });\n\n  public video = computed(() => {\n    const s = this.src();\n    const m = s.match(MATCH_VIDEO);\n    if (m) return m[1] ?? null;\n    if (MATCH_CHANNEL.test(s)) return null;\n    return /^\\d+$/.test(s) ? s : null;\n  });\n\n  public playerId = computed(() => {\n    const c = this.channel();\n    return c ? `twitch-channel-${c}` : `twitch-video-${this.video()}`;\n  });\n\n  public createBindings() {\n    return [\n      inputBinding('src', () => this.src()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n      inputBinding('autoplay', () => this.autoplay()),\n      inputBinding('chat', () => this.chat()),\n      inputBinding('startTime', () => this.startTime()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, Directive, InjectionToken, PLATFORM_ID, effect, inject, isDevMode, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement } from '@ethlete/core';\nimport { EMPTY, Observable, Subscription, interval, switchMap, tap } from 'rxjs';\nimport { STREAM_ERROR_CODES } from '../../../stream-errors';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { injectStreamScriptLoader } from '../../../stream-script-loader';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { TwitchPlayerParamsDirective } from './twitch-player-params.directive';\nimport { TwitchEmbedPlayer, TwitchPlayerParams, TwitchWindow } from './twitch-player.types';\n\nconst TWITCH_EMBED_URL = 'https://embed.twitch.tv/embed/v1.js';\n\nexport const TWITCH_PLAYER_TOKEN = new InjectionToken<TwitchPlayerDirective>('TWITCH_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: TWITCH_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: TwitchPlayerDirective },\n  ],\n})\nexport class TwitchPlayerDirective implements StreamPlayer {\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private params = inject(TwitchPlayerParamsDirective);\n  private el = injectHostElement();\n  private scriptLoader = injectStreamScriptLoader();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: true,\n    canPause: true,\n    canMute: true,\n    canSeek: true,\n    canGetDuration: true,\n    isLiveCapable: true,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: (): TwitchPlayerParams | null => {\n      if (!isPlatformBrowser(this.platformId)) return null;\n      const channel = this.params.channel();\n      const video = this.params.video();\n      if (!channel && !video) {\n        if (isDevMode()) console.warn('[et-twitch-player] Either `channel` or `video` input is required.');\n\n        return null;\n      }\n      return { channel, video };\n    },\n    stream: ({ params }) => {\n      if (!params) return EMPTY;\n\n      return this.scriptLoader.load(TWITCH_EMBED_URL).pipe(\n        switchMap(\n          () =>\n            new Observable<TwitchEmbedPlayer>((subscriber) => {\n              const win = this.document.defaultView as unknown as TwitchWindow;\n              const TwitchEmbed = win.Twitch?.Embed;\n\n              if (!TwitchEmbed) {\n                subscriber.error(\n                  new RuntimeError(\n                    STREAM_ERROR_CODES.TWITCH_SDK_NOT_AVAILABLE,\n                    '[EtTwitchPlayer] Twitch Embed SDK not available after script load. Ensure the Twitch Embed SDK URL is accessible.',\n                  ),\n                );\n\n                return;\n              }\n\n              let active = true;\n              let twitchPlayer: TwitchEmbedPlayer | null = null;\n              let currentTimeSub: Subscription | null = null;\n\n              const clearCurrentTimeInterval = () => {\n                currentTimeSub?.unsubscribe();\n                currentTimeSub = null;\n              };\n\n              const startSeconds = this.params.startTime();\n\n              const embed = new TwitchEmbed(this.el, {\n                width: this.params.width(),\n                height: this.params.height(),\n                parent: [this.document.defaultView?.location.hostname ?? ''],\n                autoplay: this.params.autoplay(),\n                layout: this.params.chat() ? 'video-with-chat' : 'video',\n                ...(params.channel ? { channel: params.channel } : {}),\n                ...(params.video ? { video: params.video } : {}),\n                ...(startSeconds ? { time: secondsToTimestamp(startSeconds) } : {}),\n              });\n\n              // eslint-disable-next-line ethlete/prefer-rxjs-timer\n              embed.addEventListener(TwitchEmbed.READY, () => {\n                if (!active) return;\n                twitchPlayer = embed.getPlayer();\n                const duration = twitchPlayer.getDuration();\n                this.state.set({\n                  ...DEFAULT_STREAM_PLAYER_STATE,\n                  isReady: true,\n                  isLoading: false,\n                  isMuted: twitchPlayer.getMuted(),\n                  duration: duration > 0 ? duration : null,\n                });\n                subscriber.next(twitchPlayer);\n              });\n\n              // eslint-disable-next-line ethlete/prefer-rxjs-timer\n              embed.addEventListener(TwitchEmbed.PLAY, () => {\n                if (!active || !twitchPlayer) return;\n                clearCurrentTimeInterval();\n                const player = twitchPlayer;\n                currentTimeSub = interval(250)\n                  .pipe(\n                    tap(() => {\n                      this.state.update((s) => ({ ...s, currentTime: player.getCurrentTime() }));\n                    }),\n                  )\n                  .subscribe();\n                const duration = player.getDuration();\n                this.state.update((s) => ({\n                  ...s,\n                  isPlaying: true,\n                  isEnded: false,\n                  duration: duration > 0 ? duration : s.duration,\n                  currentTime: player.getCurrentTime(),\n                }));\n              });\n\n              // eslint-disable-next-line ethlete/prefer-rxjs-timer\n              embed.addEventListener(TwitchEmbed.PAUSE, () => {\n                if (!active) return;\n                clearCurrentTimeInterval();\n                this.state.update((s) => ({ ...s, isPlaying: false }));\n              });\n\n              // eslint-disable-next-line ethlete/prefer-rxjs-timer\n              embed.addEventListener(TwitchEmbed.ENDED, () => {\n                if (!active) return;\n                clearCurrentTimeInterval();\n                this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true }));\n              });\n\n              return () => {\n                active = false;\n                clearCurrentTimeInterval();\n                this.el.innerHTML = '';\n                this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n              };\n            }),\n        ),\n      );\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  public play() {\n    this.playerResource.value()?.play();\n  }\n\n  public pause() {\n    this.playerResource.value()?.pause();\n  }\n\n  public mute() {\n    this.playerResource.value()?.setMuted(true);\n    this.state.update((s) => ({ ...s, isMuted: true }));\n  }\n\n  public unmute() {\n    this.playerResource.value()?.setMuted(false);\n    this.state.update((s) => ({ ...s, isMuted: false }));\n  }\n\n  public seek(seconds: number) {\n    this.playerResource.value()?.seek(seconds);\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n\nconst secondsToTimestamp = (seconds: number) => {\n  const h = Math.floor(seconds / 3600);\n  const m = Math.floor((seconds % 3600) / 60);\n  const s = Math.floor(seconds % 60);\n  return `${h}h${m}m${s}s`;\n};\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { TwitchPlayerParamsDirective } from './headless/twitch-player-params.directive';\nimport { TWITCH_PLAYER_TOKEN, TwitchPlayerDirective } from './headless/twitch-player.directive';\n\n@Component({\n  selector: 'et-twitch-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: TwitchPlayerParamsDirective,\n      inputs: ['src', 'width', 'height', 'autoplay', 'chat', 'startTime'],\n    },\n    TwitchPlayerDirective,\n  ],\n  host: {\n    class: 'et-twitch-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class TwitchPlayerComponent {\n  public player = inject(TWITCH_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { TwitchPlayerParamsDirective } from './headless/twitch-player-params.directive';\nimport { TwitchPlayerComponent } from './twitch-player.component';\n\n@Component({\n  selector: 'et-twitch-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: TwitchPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: TwitchPlayerParamsDirective,\n      inputs: ['src', 'width', 'height', 'autoplay', 'chat', 'startTime'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-twitch-player-slot et-stream-player-slot',\n  },\n})\nexport class TwitchPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, computed, input, inputBinding, numberAttribute } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: VimeoPlayerParamsDirective }],\n})\nexport class VimeoPlayerParamsDirective implements StreamPlayerParams {\n  public videoId = input.required<string | number>();\n  public startTime = input(0, { transform: numberAttribute });\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public playerId = computed(() => `vimeo-${this.videoId()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('startTime', () => this.startTime()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, Directive, InjectionToken, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable, switchMap } from 'rxjs';\nimport { STREAM_ERROR_CODES } from '../../../stream-errors';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { injectStreamScriptLoader } from '../../../stream-script-loader';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { VimeoPlayerParamsDirective } from './vimeo-player-params.directive';\nimport { VimeoDurationChangeEvent, VimeoPlaybackEvent, VimeoPlayer, VimeoWindow } from './vimeo-player.types';\n\nconst VIMEO_SDK_URL = 'https://player.vimeo.com/api/player.js';\n\nexport const VIMEO_PLAYER_TOKEN = new InjectionToken<VimeoPlayerDirective>('VIMEO_PLAYER_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: VIMEO_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: VimeoPlayerDirective },\n  ],\n})\nexport class VimeoPlayerDirective implements StreamPlayer {\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private params = inject(VimeoPlayerParamsDirective);\n  private el = injectHostElement();\n  private scriptLoader = injectStreamScriptLoader();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: true,\n    canPause: true,\n    canMute: true,\n    canSeek: true,\n    canGetDuration: true,\n    isLiveCapable: true,\n    hasThumbnail: false,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = signal<string | null>(null);\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),\n    stream: ({ params: videoId }) => {\n      if (!videoId) return EMPTY;\n\n      return this.scriptLoader.load(VIMEO_SDK_URL).pipe(\n        switchMap(\n          () =>\n            new Observable<VimeoPlayer>((subscriber) => {\n              const win = this.document.defaultView as unknown as VimeoWindow;\n              const startTime = this.params.startTime();\n              let active = true;\n\n              if (!win.Vimeo?.Player) {\n                subscriber.error(\n                  new RuntimeError(\n                    STREAM_ERROR_CODES.VIMEO_SDK_NOT_AVAILABLE,\n                    '[EtVimeoPlayer] Vimeo Player SDK not available after script load. Ensure the Vimeo SDK URL is accessible.',\n                  ),\n                );\n\n                return;\n              }\n\n              const w = this.params.width();\n              const h = this.params.height();\n              this.renderer.setStyle(this.el, {\n                display: 'block',\n                width: typeof w === 'number' ? `${w}px` : w,\n                height: typeof h === 'number' ? `${h}px` : h,\n              });\n\n              const player = new win.Vimeo.Player(this.el, { id: videoId, responsive: true });\n\n              const onPlay = (data: unknown) => {\n                const e = data as VimeoPlaybackEvent;\n                this.state.update((s) => ({\n                  ...s,\n                  isPlaying: true,\n                  isEnded: false,\n                  duration: e.duration,\n                  currentTime: e.seconds,\n                }));\n              };\n\n              const onPause = (data: unknown) => {\n                const e = data as VimeoPlaybackEvent;\n                this.state.update((s) => ({ ...s, isPlaying: false, currentTime: e.seconds }));\n              };\n\n              const onEnded = (data: unknown) => {\n                const e = data as VimeoPlaybackEvent;\n                this.state.update((s) => ({ ...s, isPlaying: false, isEnded: true, currentTime: e.seconds }));\n              };\n\n              const onTimeUpdate = (data: unknown) => {\n                const e = data as VimeoPlaybackEvent;\n                this.state.update((s) => ({ ...s, duration: e.duration, currentTime: e.seconds }));\n              };\n\n              const onDurationChange = (data: unknown) => {\n                const e = data as VimeoDurationChangeEvent;\n                this.state.update((s) => ({ ...s, duration: e.duration }));\n              };\n\n              const onVolumeChange = () => {\n                player.getMuted().then((isMuted) => {\n                  if (!active) return;\n                  this.state.update((s) => ({ ...s, isMuted }));\n                });\n              };\n\n              player.on('play', onPlay);\n              player.on('pause', onPause);\n              player.on('ended', onEnded);\n              player.on('timeupdate', onTimeUpdate);\n              player.on('durationchange', onDurationChange);\n              player.on('volumechange', onVolumeChange);\n\n              player\n                .ready()\n                .then(() => Promise.all([player.getMuted(), player.getDuration()]))\n                .then(([isMuted, duration]) => {\n                  if (!active) return;\n                  this.state.set({\n                    ...DEFAULT_STREAM_PLAYER_STATE,\n                    isReady: true,\n                    isLoading: false,\n                    isMuted,\n                    duration: isFinite(duration) ? duration : null,\n                  });\n                  if (startTime > 0) player.setCurrentTime(startTime);\n                  subscriber.next(player);\n                })\n                .catch((err: unknown) => {\n                  if (active)\n                    subscriber.error(\n                      new RuntimeError(\n                        STREAM_ERROR_CODES.VIMEO_SDK_NOT_AVAILABLE,\n                        `[EtVimeoPlayer] Vimeo player failed to become ready: ${err instanceof Error ? err.message : String(err)}`,\n                      ),\n                    );\n                });\n\n              return () => {\n                active = false;\n                player.off('play', onPlay);\n                player.off('pause', onPause);\n                player.off('ended', onEnded);\n                player.off('timeupdate', onTimeUpdate);\n                player.off('durationchange', onDurationChange);\n                player.off('volumechange', onVolumeChange);\n                player.destroy();\n                this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n              };\n            }),\n        ),\n      );\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  public play() {\n    this.playerResource.value()?.play();\n  }\n\n  public pause() {\n    this.playerResource.value()?.pause();\n  }\n\n  public mute() {\n    this.playerResource.value()?.setMuted(true);\n  }\n\n  public unmute() {\n    this.playerResource.value()?.setMuted(false);\n  }\n\n  public seek(seconds: number) {\n    this.playerResource.value()?.setCurrentTime(seconds);\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { VimeoPlayerParamsDirective } from './headless/vimeo-player-params.directive';\nimport { VIMEO_PLAYER_TOKEN, VimeoPlayerDirective } from './headless/vimeo-player.directive';\n\n@Component({\n  selector: 'et-vimeo-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: VimeoPlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    VimeoPlayerDirective,\n  ],\n  host: {\n    class: 'et-vimeo-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class VimeoPlayerComponent {\n  public player = inject(VIMEO_PLAYER_TOKEN);\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { VimeoPlayerParamsDirective } from './headless/vimeo-player-params.directive';\nimport { VimeoPlayerComponent } from './vimeo-player.component';\n\n@Component({\n  selector: 'et-vimeo-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: VimeoPlayerComponent }],\n  hostDirectives: [\n    {\n      directive: VimeoPlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-vimeo-player-slot et-stream-player-slot',\n  },\n})\nexport class VimeoPlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Directive, computed, input, inputBinding, numberAttribute } from '@angular/core';\nimport { STREAM_PLAYER_PARAMS_TOKEN, StreamPlayerParams } from '../../../stream-player-slot.directive';\n\n@Directive({\n  providers: [{ provide: STREAM_PLAYER_PARAMS_TOKEN, useExisting: YoutubePlayerParamsDirective }],\n})\nexport class YoutubePlayerParamsDirective implements StreamPlayerParams {\n  public videoId = input.required<string>();\n  public startTime = input(0, { transform: numberAttribute });\n  public width = input<string | number>('100%');\n  public height = input<string | number>('100%');\n\n  public playerId = computed(() => `youtube-${this.videoId()}`);\n\n  public createBindings() {\n    return [\n      inputBinding('videoId', () => this.videoId()),\n      inputBinding('startTime', () => this.startTime()),\n      inputBinding('width', () => this.width()),\n      inputBinding('height', () => this.height()),\n    ];\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, Directive, InjectionToken, PLATFORM_ID, computed, effect, inject, signal } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement, injectRenderer } from '@ethlete/core';\nimport { EMPTY, Observable, Subscription, interval, of, switchMap, tap } from 'rxjs';\nimport { STREAM_ERROR_CODES } from '../../../stream-errors';\nimport { STREAM_PLAYER_TOKEN, StreamPlayer } from '../../../stream-player';\nimport { injectStreamScriptLoader } from '../../../stream-script-loader';\nimport { DEFAULT_STREAM_PLAYER_STATE, StreamPlayerCapabilities, StreamPlayerState } from '../../../stream.types';\nimport { YoutubePlayerParamsDirective } from './youtube-player-params.directive';\nimport { YtPlayer, YtWindow } from './youtube-player.types';\n\nconst YT_API_URL = 'https://www.youtube.com/iframe_api';\n\nexport const YOUTUBE_PLAYER_TOKEN = new InjectionToken<YoutubePlayerDirective>('YOUTUBE_PLAYER_TOKEN');\n\nconst waitForYtReady = (win: YtWindow): Observable<void> => {\n  if (win.YT?.Player) return of(undefined);\n\n  return new Observable<void>((subscriber) => {\n    const prev = win.onYouTubeIframeAPIReady;\n    win.onYouTubeIframeAPIReady = () => {\n      prev?.();\n      subscriber.next();\n      subscriber.complete();\n    };\n  });\n};\n\n@Directive({\n  providers: [\n    { provide: YOUTUBE_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },\n    { provide: STREAM_PLAYER_TOKEN, useExisting: YoutubePlayerDirective },\n  ],\n})\nexport class YoutubePlayerDirective implements StreamPlayer {\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private params = inject(YoutubePlayerParamsDirective);\n  private el = injectHostElement();\n  private scriptLoader = injectStreamScriptLoader();\n  private renderer = injectRenderer();\n\n  public readonly CAPABILITIES: StreamPlayerCapabilities = {\n    canPlay: true,\n    canPause: true,\n    canMute: true,\n    canSeek: true,\n    canGetDuration: true,\n    isLiveCapable: true,\n    hasThumbnail: true,\n  };\n\n  public state = signal<StreamPlayerState>({ ...DEFAULT_STREAM_PLAYER_STATE });\n  public thumbnail = computed(() => `https://img.youtube.com/vi/${this.params.videoId()}/mqdefault.jpg`);\n\n  private playerResource = rxResource({\n    params: () => (isPlatformBrowser(this.platformId) ? this.params.videoId() : null),\n    stream: ({ params: videoId }) => {\n      if (!videoId) return EMPTY;\n\n      return this.scriptLoader.load(YT_API_URL).pipe(\n        switchMap(() => waitForYtReady(this.document.defaultView as unknown as YtWindow)),\n        switchMap(\n          () =>\n            new Observable<YtPlayer>((subscriber) => {\n              const win = this.document.defaultView as unknown as YtWindow;\n\n              if (!win.YT?.Player) {\n                subscriber.error(\n                  new RuntimeError(\n                    STREAM_ERROR_CODES.YOUTUBE_SDK_NOT_AVAILABLE,\n                    '[EtYoutubePlayer] YT.Player not available after SDK load. Ensure the YouTube IFrame API URL is accessible.',\n                  ),\n                );\n\n                return;\n              }\n\n              let currentTimeSub: Subscription | null = null;\n\n              const clearCurrentTimeInterval = () => {\n                currentTimeSub?.unsubscribe();\n                currentTimeSub = null;\n              };\n\n              const placeholder = this.renderer.createElement('div');\n              this.renderer.appendChild(this.el, placeholder);\n\n              const player = new win.YT.Player(placeholder, {\n                videoId,\n                width: this.params.width() as string,\n                height: this.params.height() as string,\n                playerVars: {\n                  enablejsapi: 1,\n                  origin: this.document.defaultView?.location.origin ?? '',\n                  start: this.params.startTime() || undefined,\n                  rel: 0,\n                },\n                events: {\n                  onReady: () => {\n                    this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE, isReady: true, isLoading: false });\n                    subscriber.next(player);\n                  },\n                  onStateChange: (event) => {\n                    const yt = win.YT;\n                    const s = event.data;\n                    const isPlaying = s === yt.PlayerState.PLAYING;\n\n                    clearCurrentTimeInterval();\n\n                    if (isPlaying) {\n                      currentTimeSub = interval(250)\n                        .pipe(\n                          tap(() => {\n                            this.state.update((prev) => ({\n                              ...prev,\n                              currentTime: player.getCurrentTime() ?? null,\n                            }));\n                          }),\n                        )\n                        .subscribe();\n                    }\n\n                    this.state.update((prev) => ({\n                      ...prev,\n                      isPlaying,\n                      isEnded: s === yt.PlayerState.ENDED,\n                      duration: player.getDuration() ?? null,\n                      currentTime: player.getCurrentTime() ?? null,\n                      isMuted: player.isMuted(),\n                    }));\n                  },\n                },\n              });\n\n              return () => {\n                clearCurrentTimeInterval();\n                player.destroy();\n                this.state.set({ ...DEFAULT_STREAM_PLAYER_STATE });\n              };\n            }),\n        ),\n      );\n    },\n  });\n\n  constructor() {\n    effect(() => {\n      const error = this.playerResource.error();\n      this.state.update((s) => ({\n        ...s,\n        isLoading: error !== undefined ? false : this.playerResource.isLoading(),\n        error: error ?? null,\n      }));\n    });\n  }\n\n  public play() {\n    this.playerResource.value()?.playVideo();\n  }\n\n  public pause() {\n    this.playerResource.value()?.pauseVideo();\n  }\n\n  public mute() {\n    this.playerResource.value()?.mute();\n    this.state.update((s) => ({ ...s, isMuted: true }));\n  }\n\n  public unmute() {\n    this.playerResource.value()?.unMute();\n    this.state.update((s) => ({ ...s, isMuted: false }));\n  }\n\n  public seek(seconds: number) {\n    this.playerResource.value()?.seekTo(seconds, true);\n  }\n\n  public retry() {\n    this.playerResource.reload();\n  }\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { YoutubePlayerParamsDirective } from './headless/youtube-player-params.directive';\nimport { YOUTUBE_PLAYER_TOKEN, YoutubePlayerDirective } from './headless/youtube-player.directive';\n\n@Component({\n  selector: 'et-youtube-player',\n  template: '',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: YoutubePlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    YoutubePlayerDirective,\n  ],\n  host: {\n    class: 'et-youtube-player et-stream-player',\n    '[style.display]': '\"block\"',\n    '[style.width]': '\"100%\"',\n    '[style.height]': '\"100%\"',\n  },\n})\nexport class YoutubePlayerComponent {\n  public player = inject(YOUTUBE_PLAYER_TOKEN);\n}\n","import {\n  Directive,\n  InjectionToken,\n  booleanAttribute,\n  computed,\n  createComponent,\n  inject,\n  input,\n  inputBinding,\n} from '@angular/core';\nimport { STREAM_SLOT_PLAYER_ID_TOKEN } from '../../../stream-manager.types';\nimport { createStreamPlayerSlot } from '../../../stream-player-slot';\nimport { YoutubePlayerParamsDirective } from './youtube-player-params.directive';\nimport { YoutubePlayerComponent } from '../youtube-player.component';\n\nexport const YOUTUBE_PLAYER_SLOT_TOKEN = new InjectionToken<YoutubePlayerSlotDirective>('YOUTUBE_PLAYER_SLOT_TOKEN');\n\n@Directive({\n  providers: [\n    { provide: YOUTUBE_PLAYER_SLOT_TOKEN, useExisting: YoutubePlayerSlotDirective },\n    {\n      provide: STREAM_SLOT_PLAYER_ID_TOKEN,\n      useFactory: () => {\n        const directive = inject(YoutubePlayerSlotDirective);\n        return directive.slot.currentPlayerIdSignal;\n      },\n    },\n  ],\n})\nexport class YoutubePlayerSlotDirective {\n  private params = inject(YoutubePlayerParamsDirective);\n\n  public streamSlotPriority = input(false, { transform: booleanAttribute });\n  public streamSlotOnPipBack = input<() => void>();\n\n  public slot = createStreamPlayerSlot({\n    playerId: computed(() => `youtube-${this.params.videoId()}`),\n    aspectRatio: 16 / 9,\n    streamSlotPriority: this.streamSlotPriority,\n    streamSlotOnPipBack: this.streamSlotOnPipBack,\n    createPlayer: (envInjector, elementInjector) =>\n      createComponent(YoutubePlayerComponent, {\n        environmentInjector: envInjector,\n        elementInjector,\n        bindings: [\n          inputBinding('videoId', () => this.params.videoId()),\n          inputBinding('startTime', () => this.params.startTime()),\n          inputBinding('width', () => this.params.width()),\n          inputBinding('height', () => this.params.height()),\n        ],\n      }),\n    directiveName: 'YoutubePlayerSlotDirective',\n  });\n}\n","import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  STREAM_PLAYER_COMPONENT_TOKEN,\n  STREAM_PLAYER_SLOT_TOKEN,\n  StreamPlayerSlotDirective,\n} from '../../stream-player-slot.directive';\nimport { YoutubePlayerParamsDirective } from './headless/youtube-player-params.directive';\nimport { YoutubePlayerComponent } from './youtube-player.component';\n\n@Component({\n  selector: 'et-youtube-player-slot',\n  template: '<ng-content />',\n  encapsulation: ViewEncapsulation.None,\n  providers: [{ provide: STREAM_PLAYER_COMPONENT_TOKEN, useValue: YoutubePlayerComponent }],\n  hostDirectives: [\n    {\n      directive: YoutubePlayerParamsDirective,\n      inputs: ['videoId', 'startTime', 'width', 'height'],\n    },\n    {\n      directive: StreamPlayerSlotDirective,\n      inputs: ['streamSlotPriority', 'streamSlotOnPipBack'],\n    },\n  ],\n  host: {\n    class: 'et-youtube-player-slot et-stream-player-slot',\n  },\n})\nexport class YoutubePlayerSlotComponent {\n  public slotDirective = inject(STREAM_PLAYER_SLOT_TOKEN);\n}\n","import { Provider } from '@angular/core';\nimport { injectPipChromeManager, providePipChromeManager } from './pip-chrome-manager';\nimport { DEFAULT_PIP_CHROME_CONFIG } from './pip/pip-chrome.config';\nimport { providePipManager, injectPipManager } from './pip-manager';\nimport { StreamPipOptions, STREAM_PIP_TOKEN } from './stream-pip.token';\n\nconst DEFAULT_STREAM_PIP_OPTIONS: StreamPipOptions = {\n  pipChromeComponent: null,\n  pipChrome: DEFAULT_PIP_CHROME_CONFIG,\n  pipWindow: {\n    minWidth: 160,\n    maxWidth: 640,\n    minHeight: 90,\n    maxHeight: 360,\n    desiredSize: 400,\n    collapsePeek: 40,\n    viewportPadding: 8,\n  },\n};\n\n/** Registers the floating picture-in-picture window and controls for stream player slots in scope. */\nexport const provideStreamPip = (options: Partial<StreamPipOptions> = {}): Provider[] => {\n  const streamPipOptions = {\n    ...DEFAULT_STREAM_PIP_OPTIONS,\n    ...options,\n    pipChrome: {\n      ...DEFAULT_PIP_CHROME_CONFIG,\n      ...(options.pipChrome ?? {}),\n    },\n    pipWindow: {\n      ...DEFAULT_STREAM_PIP_OPTIONS.pipWindow,\n      ...(options.pipWindow ?? {}),\n    },\n  };\n\n  return [\n    providePipManager(),\n    providePipChromeManager(),\n    {\n      provide: STREAM_PIP_TOKEN,\n      useFactory: () => {\n        const manager = injectPipManager();\n        injectPipChromeManager();\n\n        return { manager, options: streamPipOptions };\n      },\n    },\n  ];\n};\n","import { StreamConsentAcceptDirective } from './consent/headless/stream-consent-accept.directive';\nimport { StreamConsentComponent } from './consent/stream-consent.component';\nimport { StreamPlayerErrorComponent } from './error/stream-player-error.component';\nimport { StreamPlayerErrorDirective } from './error/headless/stream-player-error.directive';\nimport { StreamPlayerLoadingComponent } from './loading/stream-player-loading.component';\nimport { PipBackDirective } from './pip/headless/pip-back.directive';\nimport { PipBringBackDirective } from './pip/headless/pip-bring-back.directive';\nimport { PipCloseDirective } from './pip/headless/pip-close.directive';\nimport { PipGridToggleDirective } from './pip/headless/pip-grid-toggle.directive';\nimport { PipPlayerComponent } from './pip/pip-player.component';\nimport { PipWindowComponent } from './pip/pip-window.component';\nimport { DailymotionPlayerSlotComponent } from './platform/dailymotion/dailymotion-player-slot.component';\nimport { DailymotionPlayerComponent } from './platform/dailymotion/dailymotion-player.component';\nimport { DailymotionPlayerDirective } from './platform/dailymotion/headless/dailymotion-player.directive';\nimport { FacebookPlayerSlotComponent } from './platform/facebook/facebook-player-slot.component';\nimport { FacebookPlayerComponent } from './platform/facebook/facebook-player.component';\nimport { FacebookPlayerDirective } from './platform/facebook/headless/facebook-player.directive';\nimport { KickPlayerSlotComponent } from './platform/kick/kick-player-slot.component';\nimport { KickPlayerComponent } from './platform/kick/kick-player.component';\nimport { KickPlayerDirective } from './platform/kick/headless/kick-player.directive';\nimport { SoopPlayerSlotComponent } from './platform/soop/soop-player-slot.component';\nimport { SoopPlayerComponent } from './platform/soop/soop-player.component';\nimport { SoopPlayerDirective } from './platform/soop/headless/soop-player.directive';\nimport { TikTokPlayerSlotComponent } from './platform/tiktok/tiktok-player-slot.component';\nimport { TikTokPlayerComponent } from './platform/tiktok/tiktok-player.component';\nimport { TikTokPlayerDirective } from './platform/tiktok/headless/tiktok-player.directive';\nimport { TwitchPlayerSlotComponent } from './platform/twitch/twitch-player-slot.component';\nimport { TwitchPlayerComponent } from './platform/twitch/twitch-player.component';\nimport { TwitchPlayerDirective } from './platform/twitch/headless/twitch-player.directive';\nimport { VimeoPlayerSlotComponent } from './platform/vimeo/vimeo-player-slot.component';\nimport { VimeoPlayerComponent } from './platform/vimeo/vimeo-player.component';\nimport { VimeoPlayerDirective } from './platform/vimeo/headless/vimeo-player.directive';\nimport { YoutubePlayerParamsDirective } from './platform/youtube/headless/youtube-player-params.directive';\nimport { YoutubePlayerSlotComponent } from './platform/youtube/youtube-player-slot.component';\nimport { YoutubePlayerComponent } from './platform/youtube/youtube-player.component';\nimport { YoutubePlayerDirective } from './platform/youtube/headless/youtube-player.directive';\nimport { StreamPlayerSlotDirective } from './stream-player-slot.directive';\n\n/**\n * The parts every stream shares: the consent gate, the loading and error overlays, and the\n * `etStreamPlayerSlot` slot directive. Deliberately lean - add the barrel of each platform you actually\n * embed (e.g. {@link STREAM_YOUTUBE_IMPORTS}), so the seven you don't stay out of your bundle.\n */\nexport const STREAM_IMPORTS = [\n  StreamConsentComponent,\n  StreamConsentAcceptDirective,\n  StreamPlayerLoadingComponent,\n  StreamPlayerErrorComponent,\n  StreamPlayerErrorDirective,\n  StreamPlayerSlotDirective,\n] as const;\n\n/** The YouTube player, its headless directive, the `etYoutubePlayerParams` slot and its player slot. */\nexport const STREAM_YOUTUBE_IMPORTS = [\n  YoutubePlayerComponent,\n  YoutubePlayerDirective,\n  YoutubePlayerParamsDirective,\n  YoutubePlayerSlotComponent,\n] as const;\n\n/** The Twitch player, its headless directive and its player slot. */\nexport const STREAM_TWITCH_IMPORTS = [TwitchPlayerComponent, TwitchPlayerDirective, TwitchPlayerSlotComponent] as const;\n\n/** The Vimeo player, its headless directive and its player slot. */\nexport const STREAM_VIMEO_IMPORTS = [VimeoPlayerComponent, VimeoPlayerDirective, VimeoPlayerSlotComponent] as const;\n\n/** The Dailymotion player, its headless directive and its player slot. */\nexport const STREAM_DAILYMOTION_IMPORTS = [\n  DailymotionPlayerComponent,\n  DailymotionPlayerDirective,\n  DailymotionPlayerSlotComponent,\n] as const;\n\n/** The Kick player, its headless directive and its player slot. */\nexport const STREAM_KICK_IMPORTS = [KickPlayerComponent, KickPlayerDirective, KickPlayerSlotComponent] as const;\n\n/** The Facebook player, its headless directive and its player slot. */\nexport const STREAM_FACEBOOK_IMPORTS = [\n  FacebookPlayerComponent,\n  FacebookPlayerDirective,\n  FacebookPlayerSlotComponent,\n] as const;\n\n/** The TikTok player, its headless directive and its player slot. */\nexport const STREAM_TIKTOK_IMPORTS = [TikTokPlayerComponent, TikTokPlayerDirective, TikTokPlayerSlotComponent] as const;\n\n/** The SOOP player, its headless directive and its player slot. */\nexport const STREAM_SOOP_IMPORTS = [SoopPlayerComponent, SoopPlayerDirective, SoopPlayerSlotComponent] as const;\n\n/**\n * Picture-in-picture: the floating window, the PiP player and the `etPipClose` / `etPipBack` /\n * `etPipBringBack` / `etPipGridToggle` controls. Pulls in the draggable, resizable window chrome, so it\n * is separate from the players themselves.\n */\nexport const STREAM_PIP_IMPORTS = [\n  PipWindowComponent,\n  PipPlayerComponent,\n  PipCloseDirective,\n  PipBackDirective,\n  PipBringBackDirective,\n  PipGridToggleDirective,\n] as const;\n\n/**\n * Everything the stream domain has: the shared parts, all eight platforms and picture-in-picture. Handy\n * for a playground; in an app, import only the platforms you actually embed.\n */\nexport const STREAM_ALL_IMPORTS = [\n  STREAM_IMPORTS,\n  STREAM_YOUTUBE_IMPORTS,\n  STREAM_TWITCH_IMPORTS,\n  STREAM_VIMEO_IMPORTS,\n  STREAM_DAILYMOTION_IMPORTS,\n  STREAM_KICK_IMPORTS,\n  STREAM_FACEBOOK_IMPORTS,\n  STREAM_TIKTOK_IMPORTS,\n  STREAM_SOOP_IMPORTS,\n  STREAM_PIP_IMPORTS,\n] as const;\n","/**\n * Reconciling user column state (order, visibility, widths) against a changed `columns` input.\n *\n * The table's column state lives in `linkedSignal`s derived from the `columns` input, so a new\n * array **resets** them - and a consumer's column definitions legitimately change identity all the\n * time (a `computed()` over some other signal, a server-driven list view swapping its column set).\n * Resetting there would silently discard a user's reorder, resize and hidden columns.\n *\n * So each of these keeps whatever the user chose for the columns that still exist, and only takes\n * the declaration's word for columns it has never seen before.\n */\n\n/** The part of a column definition this reconciliation reads - row-type agnostic. */\nexport type ReconcilableColumn = {\n  key: string;\n  hidden?: boolean;\n};\n\n/**\n * The column order after a `columns` change: the user's order for the columns that survive, with\n * newly declared ones slotted in next to the column they were declared after (so adding a column\n * to the middle of a definition puts it in the middle, not at the end).\n */\nexport const reconcileColumnOrder = (keys: string[], previous: string[] | undefined) => {\n  if (!previous) return keys;\n\n  const declared = new Set(keys);\n  const next = previous.filter((key) => declared.has(key));\n\n  // Nothing was added - the filtered previous order is already the answer.\n  if (next.length === keys.length) return next;\n\n  keys.forEach((key, index) => {\n    if (next.includes(key)) return;\n\n    // The nearest column declared before this one that is already placed; the new column goes\n    // right after it (or at the very front, when it was declared before all of them).\n    const predecessor = keys\n      .slice(0, index)\n      .reverse()\n      .find((candidate) => next.includes(candidate));\n\n    next.splice(predecessor === undefined ? 0 : next.indexOf(predecessor) + 1, 0, key);\n  });\n\n  return next;\n};\n\n/**\n * The hidden-column set after a `columns` change: a column the user hid stays hidden and one they\n * revealed stays visible, while a column that wasn't there before takes its declared `hidden`.\n */\nexport const reconcileHiddenColumns = (\n  columns: readonly ReconcilableColumn[],\n  previous: { columns: readonly ReconcilableColumn[]; hidden: ReadonlySet<string> } | undefined,\n) => {\n  const hidden = new Set<string>();\n\n  if (!previous) {\n    for (const column of columns) {\n      if (column.hidden) hidden.add(column.key);\n    }\n\n    return hidden;\n  }\n\n  const known = new Set(previous.columns.map((column) => column.key));\n\n  for (const column of columns) {\n    const wasHidden = known.has(column.key) ? previous.hidden.has(column.key) : column.hidden;\n\n    if (wasHidden) hidden.add(column.key);\n  }\n\n  return hidden;\n};\n\n/** The user's width overrides after a `columns` change, dropping the ones whose column is gone. */\nexport const reconcileColumnWidths = (\n  columns: readonly ReconcilableColumn[],\n  previous: Record<string, number> | undefined,\n) => {\n  if (!previous) return {};\n\n  const declared = new Set(columns.map((column) => column.key));\n  const widths: Record<string, number> = {};\n\n  for (const [key, width] of Object.entries(previous)) {\n    if (declared.has(key)) widths[key] = width;\n  }\n\n  return widths;\n};\n","// codes 3500-3599\n// 3500 is retired: it was a duplicate-column-key check, which the keyed `TableColumns` record\n// makes impossible by construction.\nexport const TABLE_ERROR_CODES = {\n  /** An opt-in table feature (e.g. `etTableFilters`) was used outside an `<et-table>`. */\n  FEATURE_OUTSIDE_TABLE: 3501,\n  /** Two features tried to window the rendered rows (e.g. two virtual-scroll components). */\n  DUPLICATE_ROW_WINDOW: 3502,\n  /** An `etTableCell` (or header/footer) template was used outside an `<et-table>`. */\n  TEMPLATE_OUTSIDE_TABLE: 3503,\n  /** A column template was bound to a column that this table's `columns` record doesn't contain. */\n  UNKNOWN_TEMPLATE_COLUMN: 3504,\n  /** A CSV export named a column key the table doesn't declare. */\n  UNKNOWN_EXPORT_COLUMN: 3505,\n  /** A CSV export would write fewer rows than the table's source says exist - see `partial`. */\n  PARTIAL_EXPORT: 3506,\n  /** A CSV export was given both a server-built `file` and options that only apply to a built one. */\n  CONFLICTING_EXPORT_OPTIONS: 3507,\n  /** An `expandedRowTemplate` was set on a table without `etTableRowExpansion` to render it. */\n  MISSING_ROW_EXPANSION: 3508,\n  /** A `rowLink` answered with router commands on a table without `etTableRowRouterLink` to resolve them. */\n  MISSING_ROW_ROUTER_LINK: 3509,\n  /** A `rowsSource` publishes a `sort`/`filters` signal without the setter the table would write through. */\n  UNPAIRED_ROWS_SOURCE_STATE: 3510,\n  /** A column was pinned at runtime on a table without `etTableStickyColumns` to pin it. */\n  MISSING_STICKY_COLUMNS: 3511,\n} as const;\n","import { inject, Injector, isDevMode } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { injectFileDownload, RuntimeError } from '@ethlete/core';\nimport { QueryArgs, ReadonlyQuery } from '@ethlete/query';\nimport { defer, filter, from, isObservable, map, Observable, of, take, tap } from 'rxjs';\nimport { TABLE_ERROR_CODES } from '../table-errors';\nimport { TableColumnDef } from '../table.types';\n\n/**\n * The part of an `et-table` a CSV export reads. `TableComponent` satisfies it - the export is typed\n * against this shape rather than against the component so it stays a pure function (and so the\n * headless layer never imports the component).\n */\nexport type TableCsvSource<T> = {\n  /** The rows the table would render, after client filtering and sorting. */\n  rows: () => readonly T[];\n  /** The columns currently shown, in display order (the column chooser's and reorder's result). */\n  visibleColumns: () => readonly TableColumnDef<T>[];\n  /** Every declared column in display order, hidden ones included. */\n  allColumns: () => readonly TableColumnDef<T>[];\n  /** How many rows exist in total, when the table's source knows - see {@link TableCsvExportOptions.partial}. */\n  totalRows?: () => number | null;\n};\n\n/**\n * A source of rows the export has to wait for - an \"export everything\" request, or\n * {@link tableCsvRowsFromPages} walking a paginated endpoint. It is called when the export runs, not\n * before, so a button that is never clicked fetches nothing.\n */\nexport type TableCsvRowsProvider<T> = () => Promise<readonly T[]> | Observable<readonly T[]>;\n\n/**\n * A finished CSV the server built. Anything resolving to a `Blob` or a string will do: a promise, an\n * observable, or an `@ethlete/query` query - which is **followed, never executed**, so trigger it\n * yourself (or let a GET auto-execute) and the export saves the response it settles on.\n */\nexport type TableCsvExportFile = ReadonlyQuery<QueryArgs> | PromiseLike<Blob | string> | Observable<Blob | string>;\n\n/** Options for {@link tableToCsv} - the synchronous serializer, which only ever writes rows it is handed. */\nexport type TableCsvSerializeOptions<T> = {\n  /**\n   * Which columns to write, and in which order: `'visible'` follows what the table shows (column\n   * chooser + reorder), `'all'` adds the hidden ones, and an explicit key list writes exactly those,\n   * in the order given.\n   * @default 'visible'\n   */\n  columns?: 'visible' | 'all' | readonly string[];\n\n  /**\n   * The rows to write. Defaults to the table's rows - client-filtered and sorted, i.e. what the user\n   * is looking at, including the parts virtualization or a footer's paging keeps off screen.\n   *\n   * Pass your own list for anything else: `selection.selectedRows()` for the selection, or the\n   * untouched data to ignore the active filters.\n   */\n  rows?: readonly T[];\n\n  /** Write a header row of column labels. @default true */\n  header?: boolean;\n\n  /** Field separator. `';'` is what Excel expects in locales that use `,` as the decimal mark. @default ',' */\n  delimiter?: string;\n\n  /**\n   * Prefix a text field that starts with `=`, `+`, `-`, `@`, a tab or a carriage return with a `'`,\n   * so a spreadsheet treats it as text instead of a formula. This is CSV injection: without it, a\n   * row someone else authored can execute in the reader's spreadsheet when they open the file.\n   *\n   * Only text is guarded - numbers, booleans and dates are written as-is, as is a string that is\n   * simply a negative number. Turn it off only when the file is not headed for a spreadsheet.\n   * @default true\n   */\n  formulaGuard?: boolean;\n};\n\n/** Options for {@link injectTableCsvExport} - everything {@link TableCsvSerializeOptions} has, plus the file. */\nexport type TableCsvExportOptions<T> = Omit<TableCsvSerializeOptions<T>, 'rows'> & {\n  /**\n   * The rows to write - see {@link TableCsvSerializeOptions.rows}, plus a **provider** for rows the\n   * export has to go and get: a function returning a promise or an observable of them. That is how a\n   * server-paginated table exports more than the page it is holding, either from an \"everything\"\n   * request of your own or through {@link tableCsvRowsFromPages}.\n   *\n   * `export()` resolves once the file has been written, and the directive's `exporting` signal is true\n   * meanwhile, so the button can show that it is working.\n   */\n  rows?: readonly T[] | TableCsvRowsProvider<T>;\n\n  /**\n   * A CSV the **server** built - the usual answer for \"export the whole dataset\", since the backend\n   * already has the query and the file needs no client-side serialization at all. Takes an\n   * `@ethlete/query` query (followed, not executed), a promise or an observable resolving to a `Blob`\n   * or a string; it is saved under `filename`.\n   *\n   * Mutually exclusive with everything that describes how to *build* a file - `rows`, `columns`,\n   * `header`, `delimiter`, `formulaGuard`, `bom` - which cannot apply to one the server already wrote.\n   * Passing both is a dev-mode error (`ET3507`) rather than a silently ignored option.\n   */\n  file?: TableCsvExportFile;\n\n  /**\n   * Prefix the file with a UTF-8 BOM. It is what tells Excel the file is UTF-8 - without it Excel reads\n   * a CSV in the system's legacy code page, and every non-ASCII character becomes mojibake.\n   *\n   * `'auto'` writes one only when the file actually contains a non-ASCII character, which is the only\n   * time it changes anything: a pure-ASCII CSV reads identically either way, so the marker would only\n   * show up as `ï»¿` in the readers that don't strip it (text editors on the wrong encoding, most\n   * hand-rolled parsers). `true` and `false` force it.\n   * @default 'auto'\n   */\n  bom?: boolean | 'auto';\n\n  /**\n   * Write only the rows the table is holding, on purpose. A server-paginated table holds one page, so\n   * an export that says nothing would quietly write page 3 of 200 as if it were the data - in dev mode\n   * that throws `ET3506` instead. This is the opt-in that says you meant it, and what an explicit\n   * \"Export this page\" button passes.\n   *\n   * Only relevant when the table's rows come from a source that reports a `total`; a table given its\n   * rows outright holds all of them and never warns.\n   * @default false\n   */\n  partial?: boolean;\n\n  /** Downloaded file name; `.csv` is appended when missing. @default 'table.csv' */\n  filename?: string;\n};\n\n// What tells Excel the file is UTF-8; see `bom`.\nconst UTF8_BOM = '\\uFEFF';\n\n// Anything above ASCII, which is the only content the BOM changes anything for - see `bom`. Written as\n// a positive range so it carries no control characters of its own (and so CRLF isn't a match).\nconst NON_ASCII = /[\\u0080-\\uFFFF]/;\n\n/** Whether this file gets a BOM, under the `bom` option's three settings. */\nconst needsBom = (csv: string, bom: boolean | 'auto' | undefined) =>\n  (bom ?? 'auto') === 'auto' ? NON_ASCII.test(csv) : bom === true;\n\n// Fields a spreadsheet would evaluate rather than display. Tab and CR are in the list because both\n// Excel and Sheets skip leading whitespace before deciding.\nconst FORMULA_PREFIX = /^[=+\\-@\\t\\r]/;\n\n// A field needs quoting when it carries the delimiter, a quote, a newline, or edge whitespace that\n// would otherwise be eaten by a lenient parser.\nconst needsQuoting = (field: string, delimiter: string) =>\n  field.includes(delimiter) || /[\"\\r\\n]/.test(field) || field !== field.trim();\n\nconst quote = (field: string, delimiter: string) =>\n  needsQuoting(field, delimiter) ? `\"${field.replace(/\"/g, '\"\"')}\"` : field;\n\n/**\n * A cell's text. Dates go out as ISO 8601 - the only form that survives a spreadsheet's locale - and\n * nullish becomes an empty field rather than the string `\"null\"`.\n */\nconst serialize = (value: unknown) => {\n  if (value === null || value === undefined) return '';\n  if (value instanceof Date) return Number.isNaN(value.getTime()) ? '' : value.toISOString();\n\n  return String(value);\n};\n\nconst guardFormula = (field: string) => {\n  // `-5` is a number written as text, not a formula - guarding it would corrupt an ordinary export.\n  if (!FORMULA_PREFIX.test(field) || Number.isFinite(Number(field))) return field;\n\n  return `'${field}`;\n};\n\ntype FieldConfig = { delimiter: string; formulaGuard: boolean };\n\nconst toField = (value: unknown, { delimiter, formulaGuard }: FieldConfig) => {\n  const text = serialize(value);\n  const guarded = formulaGuard && typeof value === 'string' ? guardFormula(text) : text;\n\n  return quote(guarded, delimiter);\n};\n\nconst resolveColumns = <T>(table: TableCsvSource<T>, columns: TableCsvExportOptions<T>['columns']) => {\n  if (columns === undefined || columns === 'visible') return table.visibleColumns();\n  if (columns === 'all') return table.allColumns();\n\n  const byKey = new Map(table.allColumns().map((column) => [column.key, column]));\n\n  return columns\n    .map((key) => {\n      const column = byKey.get(key);\n\n      // Quietly writing one column fewer than asked for would read as a data bug, not a typo.\n      if (!column && isDevMode()) {\n        throw new RuntimeError(\n          TABLE_ERROR_CODES.UNKNOWN_EXPORT_COLUMN,\n          `[et-table] CSV export was asked for the column \"${key}\", which this table does not declare.`,\n        );\n      }\n\n      return column;\n    })\n    .filter((column): column is TableColumnDef<T> => column !== undefined);\n};\n\n/**\n * Build a table's rows as RFC 4180 CSV, without downloading anything - for uploading the file,\n * putting it on the clipboard, or asserting on it in a test. {@link injectTableCsvExport} returns the\n * same thing plus the download.\n *\n * A cell's text comes from the column's `exportValue`, else its `value` accessor. A column rendered\n * through an `etTableCell` template needs `exportValue`: a template is DOM, and there is nothing to\n * serialize it to. A column that declares `exportValue` is exported by it alone - an empty cell it\n * reports as `null` is written as an empty field, not as the raw `value` behind it.\n *\n * @example\n * const csv = tableToCsv(this.table(), { columns: 'all', delimiter: ';' });\n */\nexport const tableToCsv = <T>(table: TableCsvSource<T>, options: TableCsvSerializeOptions<T> = {}) => {\n  const field: FieldConfig = { delimiter: options.delimiter ?? ',', formulaGuard: options.formulaGuard ?? true };\n  const columns = resolveColumns(table, options.columns);\n  const rows = options.rows ?? table.rows();\n  const lines: string[] = [];\n\n  if (options.header ?? true) {\n    lines.push(columns.map((column) => toField(column.header ?? column.key, field)).join(field.delimiter));\n  }\n\n  for (const row of rows) {\n    const fields = columns.map((column) => toField((column.exportValue ?? column.value)(row), field));\n\n    lines.push(fields.join(field.delimiter));\n  }\n\n  // CRLF per RFC 4180. Excel accepts either; some older readers only accept this one.\n  return lines.join('\\r\\n');\n};\n\n// Duck-typed rather than `instanceof`: `@ethlete/query`'s query is a plain object, and this is the\n// same test `notification-promise.ts` uses to tell one from a promise.\nconst isQuery = (file: TableCsvExportFile): file is ReadonlyQuery<QueryArgs> =>\n  typeof file === 'object' && file !== null && 'executionState' in file;\n\n/**\n * A query's settled response, without executing it - the caller triggered it (or it is a GET that\n * auto-executes), and this only watches. Errors with the failure. A query that already carries a\n * response emits on subscribe.\n */\nconst queryToSource = (query: ReadonlyQuery<QueryArgs>, injector: Injector) =>\n  toObservable(query.executionState, { injector }).pipe(\n    filter((state) => !!state && state.type !== 'loading'),\n    take(1),\n    map((state) => {\n      if (state?.type !== 'success') throw state?.error;\n\n      return state.response as Blob | string;\n    }),\n  );\n\n// Deferred like the rows below: building an export must not start anything, and `toObservable` would\n// otherwise stand up an effect for a query nobody went on to subscribe to.\nconst fileToSource = (file: TableCsvExportFile, injector: Injector) =>\n  defer(() => {\n    if (isQuery(file)) return queryToSource(file, injector);\n    if (isObservable(file)) return file.pipe(take(1));\n\n    return from(file);\n  });\n\n/**\n * The `rows` option as an actual list: as given, from the provider it may be, or the table's own.\n * A provider's observable carries one list, so the first emission is the answer. Shared by the\n * download and by the directive's `toCsv`.\n *\n * @internal\n */\nexport const resolveTableCsvRows = <T>(\n  rows: readonly T[] | TableCsvRowsProvider<T> | undefined,\n  fallback: () => readonly T[],\n): Observable<readonly T[]> =>\n  // Deferred, so building an export requests nothing: the provider runs - and the table's rows are\n  // read - when someone subscribes, which is also what makes a retry fetch again rather than replay.\n  defer(() => {\n    if (rows === undefined) return of(fallback());\n    if (typeof rows !== 'function') return of(rows);\n\n    const produced = rows();\n\n    return isObservable(produced) ? produced.pipe(take(1)) : from(produced);\n  });\n\n// The options that describe how to *build* a file, which `file` excludes - see `file`.\nconst BUILD_OPTIONS = ['rows', 'columns', 'header', 'delimiter', 'formulaGuard', 'bom'] as const;\n\nconst without = <T>(options: TableCsvExportOptions<T>, keys: readonly (keyof TableCsvExportOptions<T>)[]) => {\n  const rest = { ...options };\n\n  for (const key of keys) delete rest[key];\n\n  return rest;\n};\n\n/**\n * A bound `etTableCsvExport` config with one `export()` call's overrides applied. `file` and the\n * options that build a file are mutually exclusive, so whichever of the two the *call* asked for\n * drops the other group from the config - a `bom: false` default must not make `export({ file })`\n * a conflict the call site never wrote. Passing both in the same call still throws `ET3507`.\n *\n * @internal\n */\nexport const mergeTableCsvExportOptions = <T>(\n  config: TableCsvExportOptions<T>,\n  overrides: TableCsvExportOptions<T>,\n): TableCsvExportOptions<T> => {\n  if (overrides.file !== undefined) return { ...without(config, BUILD_OPTIONS), ...overrides };\n\n  if (BUILD_OPTIONS.some((key) => overrides[key] !== undefined)) return { ...without(config, ['file']), ...overrides };\n\n  return { ...config, ...overrides };\n};\n\n/**\n * Refuse the combination that cannot mean anything: the server already wrote the file, so nothing\n * describing how to build one can apply to it. Silently ignoring `columns` here would look like the\n * option was broken.\n */\nconst assertFileOptions = <T>(options: TableCsvExportOptions<T>) => {\n  const ignored = BUILD_OPTIONS.filter((key) => options[key] !== undefined);\n\n  if (!ignored.length || !isDevMode()) return;\n\n  throw new RuntimeError(\n    TABLE_ERROR_CODES.CONFLICTING_EXPORT_OPTIONS,\n    `[et-table] CSV export was given \\`file\\` together with ${ignored.map((key) => `\\`${key}\\``).join(', ')}. The server already built that file, so there is nothing here to apply them to - drop them, or drop \\`file\\` and let the table serialize the rows.`,\n  );\n};\n\n/**\n * Refuse to write a plausible, wrong file. A server-paginated table holds one page; exporting it\n * without saying so hands the user \"the data\" when it is 20 rows of 4 312. Dev mode only - in\n * production the page is written rather than nothing at all.\n */\nconst assertNotPartial = <T>({\n  options,\n  table,\n  written,\n}: {\n  options: TableCsvExportOptions<T>;\n  table: TableCsvSource<T>;\n  /** How many rows the file is about to hold. */\n  written: number;\n}) => {\n  // An explicit row list (a selection, a fetched-everything provider) is already deliberate, and\n  // `partial` is the opt-in for the rest.\n  if (options.rows !== undefined || options.partial || !isDevMode()) return;\n\n  const total = table.totalRows?.() ?? null;\n\n  if (total === null || written >= total) return;\n\n  throw new RuntimeError(\n    TABLE_ERROR_CODES.PARTIAL_EXPORT,\n    `[et-table] CSV export would write ${written} of ${total} rows - this table's rows come from a server and it is holding one page. Pass \\`rows\\` (a list, or a provider such as \\`tableCsvRowsFromPages\\`), or \\`file\\` for a server-built export, or \\`partial: true\\` to write the loaded page on purpose.`,\n  );\n};\n\n/**\n * The CSV as a file the browser downloads. Call it once from an injection context - a field\n * initializer - and the function it hands back can then be called from anywhere, including a click\n * handler.\n *\n * It hands back an observable that writes the file on subscribe and completes - **nothing happens\n * until you subscribe**. That is what lets an export whose rows have to be fetched (`rows` as a\n * provider, or `file`) be composed, cancelled and retried like any other request;\n * {@link TableCsvExportDirective.export} is the fire-and-forget version for a button.\n *\n * A no-op where there is no browser (server-side rendering), so a toolbar button needs no platform\n * check of its own. Use {@link tableToCsv} to get the same file as a string instead.\n *\n * @example\n * private exportCsv = injectTableCsvExport();\n * protected table = viewChild.required(TableComponent);\n *\n * protected download() {\n *   this.exportCsv(this.table(), { filename: 'people.csv' }).subscribe();\n * }\n */\nexport const injectTableCsvExport = () => {\n  const download = injectFileDownload();\n  const injector = inject(Injector);\n\n  const save = (parts: BlobPart[], filename: string) => {\n    download({\n      content: parts,\n      filename: filename.toLowerCase().endsWith('.csv') ? filename : `${filename}.csv`,\n      type: 'text/csv;charset=utf-8',\n    });\n  };\n\n  return <T>(table: TableCsvSource<T>, options: TableCsvExportOptions<T> = {}): Observable<void> => {\n    const filename = options.filename ?? 'table.csv';\n\n    if (options.file) {\n      // Thrown on the way in rather than through the stream: this is a mistake in the call, so the\n      // stack should point at the call.\n      assertFileOptions(options);\n\n      return fileToSource(options.file, injector).pipe(\n        // Saved as it came: the server decided the columns, the delimiter and the encoding, and a BOM\n        // this side would be a second one prepended to a file that may already carry its own.\n        tap((file) => save([file], filename)),\n        map(() => undefined),\n      );\n    }\n\n    return resolveTableCsvRows(options.rows, () => table.rows()).pipe(\n      tap((rows) => assertNotPartial({ options, table, written: rows.length })),\n      map((rows) => tableToCsv(table, { ...options, rows })),\n      tap((csv) => save(needsBom(csv, options.bom) ? [UTF8_BOM, csv] : [csv], filename)),\n      map(() => undefined),\n    );\n  };\n};\n","import { defaultIfEmpty, defer, EMPTY, expand, from, isObservable, map, Observable, take, toArray } from 'rxjs';\nimport { TableCsvRowsProvider } from './table-csv-export';\n\n/** Options for {@link tableCsvRowsFromPages}. */\nexport type TableCsvRowsFromPagesOptions<T> = {\n  /**\n   * Fetch one page and hand back its rows. Called with `1`, then `2`, and so on until `hasMore` says\n   * to stop. An observable is read to its first emission - one page is one list, not a stream.\n   */\n  fetchPage: (page: number) => Promise<readonly T[]> | Observable<readonly T[]>;\n\n  /**\n   * Whether to ask for another page after this one. The default stops at the first page that comes\n   * back empty, which is right whenever the last page is followed by an empty one - pass your own when\n   * the response says so directly (`(rows, page) => page < response.totalPages`).\n   */\n  hasMore?: (rows: readonly T[], page: number) => boolean;\n\n  /** The first page's number, for a 0-based API. @default 1 */\n  initialPage?: number;\n\n  /**\n   * Stop after this many pages, whatever `hasMore` says. A backstop, not a limit: a `hasMore` that\n   * never goes false would otherwise walk a backend forever, and the export is running behind a button\n   * the user is waiting on.\n   * @default 1000\n   */\n  maxPages?: number;\n};\n\n// One page is one list, so the first emission is the answer and the subscription ends there. A source\n// that completes without emitting is the end of the pages, not a failure - hence the default.\nconst firstPage = <T>(source: Promise<readonly T[]> | Observable<readonly T[]>): Observable<readonly T[]> =>\n  (isObservable(source) ? source : from(source)).pipe(take(1), defaultIfEmpty<readonly T[], readonly T[]>([]));\n\n/**\n * Walks a paginated endpoint and concatenates every page, as a `rows` provider for a\n * [CSV export](/components/table#exporting-more-than-the-loaded-page).\n *\n * This is the fallback for a backend with no \"export everything\" endpoint of its own. Prefer one when\n * it exists - see the export's `file` option - because this makes N round trips for a file the server\n * could stream in one, and holds the whole dataset in memory to do it.\n *\n * The pages are fetched **in order, one at a time**: page N+1 is only asked for once page N has come\n * back, so a large export doesn't open fifty connections at once.\n *\n * @example\n * <button et-button [disabled]=\"csv.exporting()\" (click)=\"csv.export({ rows: allPeople })\">\n *   Export everything\n * </button>\n *\n * @example\n * protected allPeople = tableCsvRowsFromPages<Person>({\n *   fetchPage: (page) => this.http.get<Person[]>('/people', { params: { page, size: 200 } }),\n * });\n */\nexport const tableCsvRowsFromPages =\n  <T>(options: TableCsvRowsFromPagesOptions<T>): TableCsvRowsProvider<T> =>\n  () => {\n    const { fetchPage, hasMore, initialPage = 1, maxPages = 1000 } = options;\n    const more = (rows: readonly T[], page: number) => (hasMore ? hasMore(rows, page) : rows.length > 0);\n\n    // `defer` so nothing is requested until the export subscribes, and `expand` for the recursion:\n    // each page decides whether there is another, which is what keeps them strictly one at a time\n    // rather than all at once. `index` counts emissions, so it is also the page's offset.\n    return defer(() =>\n      firstPage(fetchPage(initialPage)).pipe(\n        expand((rows, index) =>\n          more(rows, initialPage + index) && index + 1 < maxPages\n            ? firstPage(fetchPage(initialPage + index + 1))\n            : EMPTY,\n        ),\n        toArray(),\n        map((pages) => pages.flat()),\n      ),\n    );\n  };\n","import { inject, Injector, InjectionToken, InputSignal, Signal, TemplateRef, Type } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { TABLE_ERROR_CODES } from '../table-errors';\nimport { TableLabels } from './table-labels';\nimport { TableColumnDef, TableColumnPin, TableSortDirection, TableTemplateSlot } from '../table.types';\n\n/**\n * The row-type-independent half of a {@link TableColumnDef} - everything a feature needs to read\n * about the column it renders into, without the row type `T` leaking into the seam (the `T`-typed\n * members are accessors and templates, which no feature touches).\n */\nexport type TableColumnMeta = Omit<TableColumnDef<never>, 'value' | 'sortValue' | 'filterValue' | 'quickFilterValue'>;\n\n/**\n * A feature's contribution to every header cell - e.g. the filter menu's trigger, a resize grip.\n * The table stamps `component` into every visible column's header cell, so the feature itself never\n * needs a view of its own (which is what lets features be directives on `<et-table>`).\n */\nexport type TableHeaderAdornment = {\n  /** The component to stamp. It must declare a `column` input to receive the column it renders in. */\n  component: Type<{ column: InputSignal<TableColumnMeta> }>;\n  /**\n   * The injector the stamped component resolves from - pass the feature's own (`inject(Injector)`)\n   * so the component can inject the feature that registered it. Defaults to the table's own, which\n   * is what the table's built-in cells use.\n   */\n  injector?: Injector;\n  /**\n   * Render order within the header cell - lower renders first. The built-in features take `0`\n   * (`etTableFilters`), `5` (`etTableColumnMenu`) and `10` (`etTableResize`); pick a number relative\n   * to those to place your own adornment among them.\n   *\n   * @default 0\n   */\n  order?: number;\n  /**\n   * Whether this contribution is live. A feature registers once, in its constructor, and gates itself\n   * with this rather than re-registering - so `[etTableResize]=\"{ enabled: … }\"` can be toggled at\n   * runtime. Omitted means always on.\n   */\n  enabled?: Signal<boolean>;\n};\n\n/** A component stamped into a lead column's body cells. It must declare a `row` input. */\nexport type TableLeadCellComponent = Type<{ row: InputSignal<unknown> }>;\n\n/** Which inline edge a utility column sits at - see {@link TableLeadColumn.side}. */\nexport type TableColumnSide = 'start' | 'end';\n\n/**\n * A feature's replacement for the mark the table draws in a failed cell (see `cellState`). Stamped\n * only into cells that are actually in the error state, so it costs nothing on a healthy table.\n *\n * This exists so the styled tooltip can stay out of the base bundle: showing a message on hover means\n * the overlay runtime plus floating-ui, which no table should pay for to render a list. The base marks\n * the cell and puts the message in `title`; `etTableCellErrorTooltip` upgrades it.\n */\nexport type TableCellErrorMark = {\n  /** The component to stamp. It must declare a `message` input. */\n  component: Type<{ message: InputSignal<string | null> }>;\n  /** The injector it resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether the mark is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A utility column: a fixed-width column outside the data columns, with a cell in every row kind\n * (group header, header, body, footer). Selection contributes one, row expansion another.\n *\n * The table owns the chrome - track width, sticky offsets, cell classes, ARIA roles - and stamps the\n * registered components into the body/header cells.\n */\nexport type TableLeadColumn = {\n  /** Stable identity, used to track the rendered cells. */\n  key: string;\n  /** The column's `grid-template-columns` track (e.g. `'var(--et-table-select-width, 32px)'`). */\n  width: string;\n  /**\n   * Which inline edge the column sits at: `'start'` before the data columns, `'end'` after them (and\n   * after the trailing slack track, so it ends the row).\n   *\n   * A `'start'` column is pinned along with a start-pinned data column; an `'end'` column is pinned to\n   * the trailing edge whenever pinning is live at all, since moving a utility column to that edge is a\n   * choice to keep it reachable and letting it scroll away would undo it.\n   *\n   * A signal, for the same reason {@link TableHeaderAdornment.enabled} is one: a feature registers once\n   * from its constructor, where its own config input is not bound yet. Omitted means `'start'`.\n   */\n  side?: Signal<TableColumnSide>;\n  /**\n   * Lower renders closer to this column's own edge. The built-in features take `0`\n   * (`etTableSelection`) and `100` (`etTableRowExpansion`); pick a number relative to those to place\n   * your own column among them.\n   *\n   * @default 0\n   */\n  order?: number;\n  /** Extra class put on every cell of this column, for the feature's own styling. */\n  cellClass: string;\n  /** Header cell content. Omit for an empty, `aria-hidden` header cell. */\n  headerComponent?: Type<unknown>;\n  /** Body cell content, stamped once per row. */\n  bodyComponent: TableLeadCellComponent;\n  /** The injector the stamped components resolve from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Extra class for the whole row, e.g. to mark it selected. */\n  rowClass?: (row: unknown) => string | null;\n  /** Whether this column is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A component the table stamps once, after the grid - a feature's own floating UI, such as the\n * reorder drag ghost and drop indicator. It is the reason a feature needs no view of its own even\n * when it draws something: the table hosts the layer, the feature only supplies the component.\n */\nexport type TableLayer = {\n  component: Type<unknown>;\n  /** The injector the layer resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether the layer is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/** A column's horizontal pinning, as the table's header, body and footer cells render it. */\nexport type TableCellPinning = {\n  stickyStart: boolean;\n  stickyEnd: boolean;\n  /** Inline-start offset (px) a start-pinned cell sits at, or `null` when it isn't one. */\n  offsetStart: number | null;\n  /** Inline-end offset (px) an end-pinned cell sits at, or `null` when it isn't one. */\n  offsetEnd: number | null;\n};\n\n/**\n * How a feature pins columns to the table's inline edges (`etTableStickyColumns`).\n *\n * The table keeps *rendering* the pinning - the classes and inline offsets sit on the cells it draws, and\n * a feature cannot contribute an attribute to those. What moves out is everything behind them: measuring\n * the header cells, stacking the offsets from each edge, and deciding when pinning would crowd the\n * scrollable columns off-screen. A table with no feature registered asks for none of it and runs no\n * measurement on resize.\n */\nexport type TableColumnPinning = {\n  /** How a data column is pinned. Called once per rendered cell kind, from a `computed`. */\n  cellPinning(key: string): TableCellPinning;\n  /** Whether the leading utility columns are pinned along with a start-pinned column, and how far in. */\n  leadPinning(key: string): { sticky: boolean; offset: number | null };\n  /** Whether the trailing utility columns are pinned to the trailing edge, and how far in. */\n  trailPinning(key: string): { sticky: boolean; offset: number | null };\n  /** Total frozen width (px) at each inline edge - where the scroll fades sit. */\n  insets(): { start: number; end: number };\n  /** Whether any visible column is pinned to the trailing edge, which already owns that edge. */\n  hasStickyEnd(): boolean;\n  /**\n   * The runtime pins, by column key, that override what a column declares - `null` unpins a column that\n   * declares `sticky`. Read from a `computed`.\n   */\n  pins?(): Readonly<Record<string, TableColumnPin | null>>;\n  /** Pin a column to an edge at runtime, or unpin it with `null`. */\n  pin?(key: string, side: TableColumnPin | null): void;\n  /** Whether pinning is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A row a feature renders above the column headers - the spanning group-header row. The table stamps\n * `component` as the grid's first child, before its own header row.\n *\n * The stamped component must be `display: contents` and render one cell per track itself: the table's\n * rows are `display: contents` too, so every cell of every row kind is a grid item of the same grid.\n * {@link TableFeatureHost.leadColumnsMeta}, {@link TableFeatureHost.hasFillerTrack} and\n * {@link TableFeatureHost.trailColumnsMeta} are what a row needs to cover the tracks that are not data\n * columns.\n */\nexport type TableHeaderRow = {\n  component: Type<unknown>;\n  /** The injector it resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether the row is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/** The layout mode contributed by `etTablePageStickyHeader`. */\nexport type TablePageStickyHeader = {\n  /** Whether the split page-sticky layout is active. */\n  enabled: Signal<boolean>;\n};\n\n/**\n * What a feature renders in place of the body while the table is loading and has no rows to show yet -\n * the placeholder rows. The table owns *when* (its `loading` / `error` inputs and row count); the\n * feature owns what a loading body looks like.\n *\n * The stamped component must be `display: contents` and lay its own cells into the table's tracks, the\n * same way {@link TableHeaderRow} does. Without a registered placeholder the body simply stays empty\n * while loading - blank rather than a misleading empty state.\n */\nexport type TableBodyPlaceholder = {\n  component: Type<unknown>;\n  /** The injector it resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether the placeholder is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A feature's stand-in for the content of one cell that is loading on its own (see the table's\n * `cellState`). Stamped only into cells actually in that state, so it costs nothing on a healthy table.\n *\n * This exists so the skeleton bone can stay out of the base bundle, the same way\n * {@link TableCellErrorMark} keeps the tooltip out of it. Without one, a loading cell keeps showing its\n * value and only carries `data-state=\"loading\"` for styling.\n */\nexport type TableCellPlaceholder = {\n  component: Type<unknown>;\n  /** The injector it resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether the placeholder is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A full-width row a feature renders directly under a body row - the detail row of an expanded row.\n * The table stamps `component` after every row `isOpen` answers `true` for, so the feature owns what a\n * detail row is and when it shows while the table keeps owning the grid.\n *\n * The stamped component must span every track itself (`grid-column: 1 / -1`), because the table's rows\n * are `display: contents` and it is placed in the same grid as their cells.\n */\nexport type TableRowDetail = {\n  /** The component to stamp. It must declare a `row` input to receive the row it belongs to. */\n  component: TableLeadCellComponent;\n  /** Whether this row's detail row is currently rendered. */\n  isOpen(row: unknown): boolean;\n  /** The injector it resolves from - see {@link TableHeaderAdornment.injector}. */\n  injector?: Injector;\n  /** Whether detail rows are live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * How a feature windows the rendered rows (virtual scrolling): the table renders `slice(rows)` with\n * spacers of `paddingStart`/`paddingEnd` standing in for what's left out, and offsets cell indices by\n * `offset` so they stay true row indices.\n */\nexport type TableRowWindow = {\n  slice: (rows: readonly unknown[]) => readonly unknown[];\n  paddingStart: Signal<number>;\n  paddingEnd: Signal<number>;\n  offset: Signal<number>;\n  /**\n   * Scroll an absolute row index far enough into the viewport that it renders. Without this a windowed\n   * table can only be navigated within what is already on screen - keyboard navigation asks the window\n   * to bring the target row in, then focuses it once it exists.\n   */\n  scrollToIndex?: (index: number) => void;\n  /** Whether the window is live - when false every row renders. See {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A feature's claim on cell-level focus (keyboard grid navigation). Registering it is what turns the\n * body's cells into focus targets: the table renders `tabindex=\"-1\"` on every one and stops making the\n * row itself a tab stop, so the grid body becomes the single tab stop the ARIA grid pattern asks for.\n * Which cell currently carries `tabindex=\"0\"` is the feature's to place - see\n * {@link TableFeatureHost.bodyCellElementAt}.\n */\nexport type TableCellNavigation = {\n  /** Whether the claim is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A feature's claim on editing a cell in place (inline editing). Registering it lets the table swap a\n * cell's content for the column's `etTableCellEdit` template while that one cell is being edited, and\n * gives keyboard navigation somewhere to hand `Enter` - see {@link TableFeatureHost.editCell}.\n *\n * The feature owns the session (which cell, the draft, commit/cancel); the table only renders it.\n */\nexport type TableCellEditing = {\n  /**\n   * The cell currently in edit mode, or `null`. `row` is the row's {@link TableFeatureHost.rowIdentity},\n   * `column` its key, and `context` what the column's edit template is rendered with (the feature builds\n   * it, since only the feature holds the draft).\n   */\n  cell: Signal<{ row: unknown; column: string; context: object } | null>;\n\n  /**\n   * Put a cell into edit mode, addressed the way {@link TableFeatureHost.bodyCellElementAt} addresses\n   * it. Returns whether the feature took it - `false` for a column that isn't editable, which is what\n   * lets `Enter` fall through to its usual job of drilling into the cell's content.\n   */\n  editCell(rowIndex: number, columnIndex: number): boolean;\n\n  /** Whether the claim is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * How a feature resolves and follows a row link given as router commands (`etTableRowRouterLink`).\n *\n * The table renders the link itself - one `<a href>` per row - and takes the `href` from here, because\n * turning `['/orders', 42]` into a URL is the router's job and the base table depends on no router. A\n * link given as a plain string never reaches this seam: the browser follows it.\n */\nexport type TableRowNavigation = {\n  /** The `href` to render for these commands. */\n  href(commands: readonly unknown[]): string;\n  /**\n   * Follow the link in place of the browser. Returns whether it did: a modified click (middle button,\n   * Ctrl/Cmd/Shift) is left alone, which is what keeps \"open in a new tab\" working.\n   */\n  navigate(commands: readonly unknown[], event: MouseEvent): boolean;\n  /** Whether the navigator is live - see {@link TableHeaderAdornment.enabled}. */\n  enabled?: Signal<boolean>;\n};\n\n/**\n * A feature's own serializable state, contributed to the table's {@link TableState} under `key`.\n *\n * The base table owns column order/visibility/width, sort and filters because they must round-trip\n * whether or not a feature is imported. Anything a *feature* owns (a selection, the expanded rows)\n * can't live there without the base knowing about the feature - so the feature hands over a slice\n * instead, and `state()` / `restoreState()` carry it as opaque JSON.\n */\nexport type TableStateSlice = {\n  /** Stable name of the slice in the serialized state, e.g. `'selection'`. */\n  key: string;\n  /** The value to serialize. Anything `JSON.stringify` handles. */\n  read(): unknown;\n  /** Apply a previously serialized value. Called with whatever `read` produced (never `undefined`). */\n  write(value: unknown): void;\n};\n\n/**\n * What an opt-in table feature can reach on its host table. Features **register** themselves here\n * (the table never queries for them), which is what keeps the base table free of any reference to a\n * feature's dependencies - a table without `etTableFilters` never pulls in the menu system.\n *\n * Serializable state (column order/visibility/width, sort, filters) stays owned by the base table so\n * `state()` / `restoreState()` round-trip regardless of which features are imported; features read and\n * write it through this contract, and contribute their own with {@link registerStateSlice}.\n */\nexport type TableFeatureHost = {\n  /** Add a component to every header cell. Call once, from the feature's constructor. */\n  registerHeaderAdornment(adornment: TableHeaderAdornment): void;\n  /** Add a leading utility column. Call once, from the feature's constructor. */\n  registerLeadColumn(column: TableLeadColumn): void;\n  /** Window the rendered rows (virtual scrolling). Call once, from the feature's constructor. */\n  registerRowWindow(window: TableRowWindow): void;\n  /** Take over cell focus (keyboard grid navigation). Call once, from the feature's constructor. */\n  registerCellNavigation(navigation: TableCellNavigation): void;\n  /** Take over editing a cell in place. Call once, from the feature's constructor. */\n  registerCellEditing(editing: TableCellEditing): void;\n  /** Add a floating layer rendered after the grid (a drag ghost). Call once, from the constructor. */\n  registerLayer(layer: TableLayer): void;\n  /** Render a full-width row under expanded rows. Call once, from the feature's constructor. */\n  registerRowDetail(detail: TableRowDetail): void;\n  /** Render a row above the column headers. Call once, from the feature's constructor. */\n  registerHeaderRow(row: TableHeaderRow): void;\n  /** Use the split page-sticky header layout. Call once, from the feature's constructor. */\n  registerPageStickyHeader(header: TablePageStickyHeader): void;\n  /** Render the body while the table is loading with no rows yet. Call once, from the constructor. */\n  registerBodyPlaceholder(placeholder: TableBodyPlaceholder): void;\n  /** Replace the content of a cell that is loading on its own. Call once, from the constructor. */\n  registerCellPlaceholder(placeholder: TableCellPlaceholder): void;\n  /** Pin columns to the table's inline edges. Call once, from the feature's constructor. */\n  registerColumnPinning(pinning: TableColumnPinning): void;\n  /** Replace the mark drawn in failed cells. Call once, from the feature's constructor. */\n  registerCellErrorMark(mark: TableCellErrorMark): void;\n  /** Resolve and follow row links given as router commands. Call once, from the constructor. */\n  registerRowNavigation(navigation: TableRowNavigation): void;\n  /** Contribute the feature's own serializable state. Call once, from the feature's constructor. */\n  registerStateSlice(slice: TableStateSlice): void;\n\n  /**\n   * The wording in effect on this table - the injected {@link TABLE_LABELS} set with the table's own\n   * `labels` input applied. A feature renders no string of its own: it reads them from here, so one\n   * `provideTableLabels` (or one `labels` binding) localizes the table and every feature on it.\n   */\n  resolvedLabels(): TableLabels;\n\n  /**\n   * A template a consumer registered for one of a column's slots, or `null`. A feature that renders\n   * part of a column (the filter menu's options) offers the same templating the base table does,\n   * without owning a registry of its own.\n   */\n  columnTemplate(slot: TableTemplateSlot, key: string): TemplateRef<unknown> | null;\n\n  /**\n   * The table's `expandedRowTemplate`, or `null`. It stays a table input rather than a feature option\n   * because only the table knows the row type - which is what gives the template's `let-row` a type\n   * instead of `any` (see `plans/table-api.md`). The expansion feature renders it from here.\n   */\n  detailTemplate(): TemplateRef<unknown> | null;\n\n  /** The rows the table would render, after client filtering/sorting. */\n  rows(): readonly unknown[];\n  /** Emit `rowClick` for a `rowInteractive` table's row - Enter on a cell with nothing of its own to open. */\n  activateRowAt(rowIndex: number): void;\n  /** Stable identity for a row - `rowKey`'s string form, else the row reference. */\n  rowIdentity(row: unknown): unknown;\n  /** Whether a `rowKey` is bound, i.e. whether row identity is stable enough to serialize. */\n  hasRowKey(): boolean;\n  /** A rendered body cell, for a feature that needs to measure real row height. */\n  firstBodyCellElement(): HTMLElement | null;\n\n  /**\n   * The rendered body cell at an absolute row index and a visible-column index, or `null` when that row\n   * is outside a virtual window's rendered range. Pair it with {@link scrollRowIntoView}, which is what\n   * makes the row exist in the first place.\n   */\n  bodyCellElementAt(rowIndex: number, columnIndex: number): HTMLElement | null;\n\n  /**\n   * Every rendered body cell, rows major - the list {@link bodyCellElementAt} indexes into. A feature\n   * that has to turn an event back into a cell finds it here (`event.composedPath()`), rather than\n   * walking the DOM.\n   */\n  bodyCellElements(): HTMLElement[];\n\n  /**\n   * Absolute index of the first rendered row - nonzero only while a window is in play. What turns a\n   * position within {@link bodyCellElements} back into an index into {@link rows}.\n   */\n  renderedRowOffset(): number;\n\n  /**\n   * Bring an absolute row index into the viewport - through the registered row window when there is\n   * one (which also renders it), else by scrolling the rendered row element into view. Returns whether\n   * a windowed scroll happened, i.e. whether the caller must wait for a render before the row exists.\n   */\n  scrollRowIntoView(rowIndex: number): boolean;\n\n  /** How many rows fit the scroll viewport - the step PageUp/PageDown moves by. At least 1. */\n  rowsPerPage(): number;\n\n  /**\n   * Hand a cell to a registered editing feature, if one wants it - see {@link TableCellEditing.editCell}.\n   * Returns `false` when nothing took it (no feature, or the column isn't editable), which is the\n   * signal for the caller to do whatever it would have done with the key otherwise.\n   *\n   * This is the contract between keyboard navigation and inline editing over `Enter`: navigation asks\n   * first and only drills into the cell's content when the answer is no. Neither feature references the\n   * other - both go through the table, as every other pair of features does.\n   */\n  editCell(rowIndex: number, columnIndex: number): boolean;\n\n  /**\n   * Total frozen width (px) at each inline edge - what a pinned block covers of the table's own\n   * viewport, and so where the scrolling columns actually start and end. Zero at both edges when\n   * nothing is pinned. A feature that works against the viewport's edges has to work against these\n   * instead, or it aims at a strip the user cannot reach.\n   */\n  frozenInsets(): { start: number; end: number };\n\n  /**\n   * Claim the drag a pointer started, so the other features leave it alone until it ends. Two features\n   * can begin from the same `pointerdown` on this element - column reorder and drag-to-scroll both\n   * delegate from it - and without a claim a header drag reorders the column and pans the table under\n   * it at the same time.\n   *\n   * Claim in the `pointerdown` handler, before the gesture has moved, and read it when your own\n   * gesture commits: the answer is then the same whichever listener the browser ran first. The claim\n   * is released when the pointer is let go or the browser takes the gesture away.\n   */\n  claimPointerGesture(event: PointerEvent, feature: string): void;\n\n  /**\n   * Which feature claimed the drag this pointer started, or `null` while it is unclaimed. Compare it\n   * against your own name - claiming is also how a feature keeps its own gesture. See\n   * {@link claimPointerGesture}.\n   */\n  pointerGestureClaim(event: PointerEvent): string | null;\n\n  /**\n   * The table's host element - a feature is a directive on it, so this is also the element it can\n   * listen on, measure or mark. `<et-table>`'s own DOM is inside it.\n   */\n  readonly element: HTMLElement;\n\n  /** The active scroll viewport: the host normally, or the body scroller in page-sticky mode. */\n  scrollElement(): HTMLElement;\n\n  /** The selected filter values for a column key (empty when unfiltered). */\n  filterValuesFor(key: string): unknown[];\n  /** Replace a column's selected filter values (an empty list clears the filter). */\n  setFilterValues(key: string, values: unknown[]): void;\n\n  /** The visible columns, in render order - what a feature hit-tests or iterates over. */\n  visibleColumnsMeta(): TableColumnMeta[];\n\n  /**\n   * The leading utility columns (selection, expander) in render order, as much of each as a feature needs:\n   * a whole-row feature draws one cell per entry with its `cellClass`, and a pinning feature keys their\n   * offsets by `key`.\n   */\n  leadColumnsMeta(): { key: string; cellClass: string }[];\n\n  /**\n   * The trailing utility columns in render order - the same contract as {@link leadColumnsMeta}, for the\n   * columns that sit after the data columns (see {@link TableLeadColumn.side}). A whole-row feature draws\n   * these after the filler track, so its row ends where every other row does.\n   */\n  trailColumnsMeta(): { key: string; cellClass: string }[];\n\n  /**\n   * Whether a trailing slack track is in play - it carries an empty cell in every row so the table's\n   * chrome runs to the panel's edge instead of stopping at the last rigid column. A feature rendering a\n   * whole row has to cover that track too.\n   */\n  hasFillerTrack(): boolean;\n\n  /**\n   * Whether rows have a box of their own rather than being layout-transparent - a card row, a row link.\n   * A feature drawing a whole row has to carry that box too, else its row misses the surface, the ring\n   * and the spacing every other row has.\n   */\n  hasRowBox(): boolean;\n\n  /**\n   * Whether rows are cards - a box on a surface one elevation above the table's own. A feature drawing\n   * a whole row has to raise that row too, else its card is painted on the table's surface and reads as\n   * a gap between the real ones.\n   */\n  hasCardRows(): boolean;\n\n  /**\n   * The rendered header cells of the visible columns, in the same order as `visibleColumnsMeta()`.\n   * A feature that must attach behavior to cells the table renders (a reorder drag) works from these.\n   */\n  headerCellElements(): HTMLElement[];\n  /** The rendered body cells of one column, e.g. to animate a column into its new position. */\n  bodyCellElementsFor(key: string): HTMLElement[];\n\n  /**\n   * The grid itself - every row and cell of the table, but not the footer bar around it. A feature\n   * measuring the whole of it (how far a pinned header may travel) reads this rather than the host,\n   * which is the scroll viewport and therefore a different box. `null` before the first render.\n   */\n  gridElement(): HTMLElement | null;\n\n  /** The separate header grid in page-sticky mode, or `null` in the regular layout. */\n  pageHeaderGridElement(): HTMLElement | null;\n\n  /** Apply the body grid's resolved column tracks to the page-sticky header grid. */\n  setPageHeaderColumns(columns: string | null): void;\n\n  /**\n   * The rendered header cells of the leading utility columns, in {@link leadColumnsMeta} order. A feature\n   * stacking offsets from the inline-start edge has to measure them before the first data column.\n   */\n  leadHeaderCellElements(): HTMLElement[];\n\n  /** The rendered header cells of the trailing utility columns, in {@link trailColumnsMeta} order. */\n  trailHeaderCellElements(): HTMLElement[];\n\n  /**\n   * The user's column width overrides (px), keyed by column key. Reading it in a `computed` or `effect`\n   * is how a feature re-measures when a resize changes the tracks without changing the host's size.\n   */\n  columnWidths(): Readonly<Record<string, number>>;\n  /**\n   * A column's effective pinning - `null` when unpinned, when pinning is currently suppressed, or when\n   * nothing pins columns at all. What `etTableReorder` asks to leave pinned columns out of a drag.\n   */\n  effectiveStickyOf(key: string): 'start' | 'end' | null;\n  /** Whether a live feature can pin columns at runtime (`etTableStickyColumns`). */\n  canPinColumns(): boolean;\n  /** The edge a column is pinned to - its runtime pin, else its declared `sticky` - or `null`. */\n  columnPin(key: string): TableColumnPin | null;\n  /** Pin a column to an edge at runtime, or unpin it with `null`. */\n  pinColumn(key: string, side: TableColumnPin | null): void;\n  /** Move a column next to another one in the full column order (hidden columns stay put). */\n  moveColumnNextTo(key: string, target: { overKey: string; before: boolean }): void;\n\n  /** The column's current rendered header width in px - the baseline a resize drag starts from. */\n  renderedColumnWidth(key: string): number;\n  /** Override a column's width in px. The table clamps it to a usable range and stores it in `state()`. */\n  setColumnWidth(key: string, width: number): void;\n  /** Drop a column's width override, returning it to the width its definition asks for. */\n  resetColumnWidth(key: string): void;\n  /** Whether the column carries a width override - i.e. whether there is one to reset. */\n  hasColumnWidthOverride(key: string): boolean;\n  /** Fit these columns to their widest rendered content, keeping the result as a width override. */\n  autosizeColumns(keys: readonly string[]): void;\n\n  /** A column's sort direction, or `null` when it isn't sorted. */\n  sortDirection(key: string): TableSortDirection | null;\n  /** Set a column's sort direction outright, or clear it with `null`. Honours `multiSort`. */\n  setSort(key: string, direction: TableSortDirection | null): void;\n  /** Show or hide a column. */\n  setColumnVisible(key: string, visible: boolean): void;\n  /** Every declared column in order, hidden ones included - what a \"choose columns\" panel lists. */\n  allColumns(): TableColumnMeta[];\n  /** Whether a column is currently shown. */\n  isColumnVisible(key: string): boolean;\n  /** Show every hidden column again. */\n  showAllColumns(): void;\n};\n\nexport const TABLE_FEATURE_HOST = new InjectionToken<TableFeatureHost>('TABLE_FEATURE_HOST');\n\n/** Options every feature accepts on top of its own. */\nexport type TableFeatureConfig = {\n  /**\n   * Turn the feature off without removing it - a directive can't be applied conditionally, so this is\n   * how `[etTableResize]=\"{ enabled: canResize() }\"` toggles at runtime. @default true\n   */\n  enabled?: boolean;\n};\n\n/**\n * Read a feature's config input. A feature directive is usually written bare (`etTableResize`), which\n * Angular binds as the empty string - normalize that to \"no options given\".\n */\nexport const tableFeatureConfig = <TConfig extends TableFeatureConfig>(value: TConfig | '') =>\n  value === '' ? ({} as TConfig) : value;\n\n/**\n * Inject the host table from inside a feature. Throws a labelled error when the feature was placed\n * outside an `<et-table>`, where it could only ever silently do nothing.\n */\nexport const injectTableFeatureHost = (feature: string): TableFeatureHost => {\n  const host = inject(TABLE_FEATURE_HOST, { optional: true });\n\n  if (!host) {\n    throw new RuntimeError(TABLE_ERROR_CODES.FEATURE_OUTSIDE_TABLE, `[${feature}] must be used inside an <et-table>.`);\n  }\n\n  return host;\n};\n","import { TableColumns, TableFilter } from '../table.types';\n\nexport type FilterRowsConfig<T> = {\n  rows: readonly T[];\n  filters: readonly TableFilter[];\n  columns: TableColumns<T>;\n};\n\n/**\n * Filter rows by a {@link TableFilter} list, using each column's `filterValue` (or its `value`\n * accessor). A row passes when, for **every** column with an active filter, its value is one of\n * that column's selected values (AND across columns, OR within a column). Pure and tree-shakable -\n * the base table applies it only in client filter mode; server-side callers let the backend filter.\n */\nexport const filterRows = <T>({ rows, filters, columns }: FilterRowsConfig<T>): T[] => {\n  const active = filters.filter((filter) => filter.values.length > 0);\n\n  if (!active.length) return [...rows];\n\n  return rows.filter((row) =>\n    active.every((filter) => {\n      const column = columns[filter.key];\n\n      if (!column) return true;\n\n      const accessor = column.filterValue ?? column.value;\n      const value = accessor(row);\n\n      return filter.values.some((selected) => selected === value);\n    }),\n  );\n};\n","import { TableColumns } from '../table.types';\n\nexport type QuickFilterRowsConfig<T> = {\n  rows: readonly T[];\n  /** The text to match. Split on whitespace; every word has to appear in the row. */\n  query: string | null | undefined;\n  /** The columns searched - pass only the visible ones to match what the reader sees. */\n  columns: TableColumns<T>;\n};\n\nconst searchText = (value: unknown) =>\n  typeof value === 'string' || typeof value === 'number' ? String(value).toLocaleLowerCase() : null;\n\n/**\n * Keep the rows in which every whitespace-separated word of `query` appears, case-insensitively, in\n * at least one column's text. A column's text is its `quickFilterValue`, else its `value` when that is\n * a string or a number; `quickFilter: false` leaves a column out. Pure and tree-shakable - the base\n * table applies it in client filter mode; server-side callers pass the query to the backend instead.\n */\nexport const quickFilterRows = <T>({ rows, query, columns }: QuickFilterRowsConfig<T>): T[] => {\n  const words = (query ?? '').toLocaleLowerCase().split(/\\s+/).filter(Boolean);\n\n  if (!words.length) return [...rows];\n\n  const searched = Object.values(columns).filter((column) => column.quickFilter !== false);\n\n  return rows.filter((row) => {\n    const texts = searched\n      .map((column) => searchText(column.quickFilterValue ? column.quickFilterValue(row) : column.value(row)))\n      .filter((text): text is string => text !== null);\n\n    return words.every((word) => texts.some((text) => text.includes(word)));\n  });\n};\n","import { Directive } from '@angular/core';\n\n/**\n * Marks projected content as the table's full-width footer slot - a region rendered below the grid\n * and pinned to the bottom of the table's own scroll viewport. The table bakes in no pager; drop your\n * own controls here (e.g. `<et-pagination>` plus a page-size `<et-select>`).\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"columns\">\n *   <div etTableFooter>\n *     <et-pagination [(page)]=\"page\" [totalPages]=\"totalPages()\" />\n *   </div>\n * </et-table>\n */\n@Directive({\n  selector: '[etTableFooter]',\n})\nexport class TableFooterDirective {}\n","import { defineLabels, LabelsSource, toInjectFn, toProvideFn, toToken } from '@ethlete/core';\n\n/**\n * Every string the table and its features render or announce themselves. Defaults are English\n * ({@link DEFAULT_TABLE_LABELS}); override them app-wide with {@link provideTableLabels} or per table\n * via `et-table`'s `labels` input.\n *\n * The functions take the column's own header text (its `key` when it has no header), so a translation\n * decides the word order rather than having it baked into a concatenation.\n *\n * Anything a consumer would rather build than translate has a template or slot instead - the empty and\n * error states ({@link TableComponent.emptyTemplate}, `[etTableEmpty]`, `[etTableError]`) and filter\n * option content. These are the strings that are left.\n */\nexport type TableLabels = {\n  /** Body text when there are no rows and no empty template/slot is given. */\n  empty: string;\n  /** Body text when `error` is set and no error template/slot is given. */\n  error: string;\n\n  /** Accessible label for a row's expander while the row is collapsed. */\n  expandRow: string;\n  /** Accessible label for a row's expander while the row is expanded. */\n  collapseRow: string;\n\n  /**\n   * Accessible name for a sortable column's header button. It announces what the *next* activation\n   * does, so it takes the direction that click would apply - `null` meaning \"clear the sort\".\n   */\n  sortAction: (header: string, next: 'asc' | 'desc' | null) => string;\n  /** Accessible description of a sorted column's place in a multi-column sort, 1-based. */\n  sortPriority: (priority: number, count: number) => string;\n\n  /** Accessible label for a column's filter trigger. */\n  filterColumn: (header: string) => string;\n  /** Placeholder for a filter menu's search field (`filterSearch` columns). */\n  filterSearch: string;\n  /** Shown in a filter menu that has no options to offer. */\n  filterEmpty: string;\n  /** The \"fetch the next page of options\" button in an async filter menu. */\n  filterLoadMore: string;\n\n  /** Accessible label for a column's `⋮` menu trigger. */\n  columnMenu: (header: string) => string;\n  /** Column-menu entry: sort this column ascending. */\n  sortAscending: string;\n  /** Column-menu entry: sort this column descending. */\n  sortDescending: string;\n  /** Column-menu entry: remove this column's sort. */\n  clearSort: string;\n  /** Column-menu entry: fit this column to its content. */\n  autosizeColumn: string;\n  /** Column-menu entry: fit every column to its content. */\n  autosizeAllColumns: string;\n  /** Column-menu entry: drop a resized column's width override. */\n  resetWidth: string;\n  /** Column-menu entry: hide this column. */\n  hideColumn: string;\n  /** Column-menu entry: pin this column to the inline-start edge. */\n  pinColumnStart: string;\n  /** Column-menu entry: pin this column to the inline-end edge. */\n  pinColumnEnd: string;\n  /** Column-menu entry: let this pinned column scroll again. */\n  unpinColumn: string;\n\n  /** The column chooser's trigger. */\n  columns: string;\n  /** The column chooser's \"make every column visible again\" entry. */\n  showAllColumns: string;\n\n  /** Accessible label for the header's select-all checkbox. */\n  selectAllRows: string;\n  /** Accessible label for a row's selection checkbox. */\n  selectRow: string;\n};\n\n/** The built-in English labels. */\nexport const DEFAULT_TABLE_LABELS: TableLabels = {\n  empty: 'No data',\n  error: 'Could not load data',\n\n  expandRow: 'Expand row',\n  collapseRow: 'Collapse row',\n\n  sortAction: (header, next) => {\n    if (next === 'asc') return `Sort ${header} ascending`;\n    if (next === 'desc') return `Sort ${header} descending`;\n\n    return `Clear sort on ${header}`;\n  },\n  sortPriority: (priority, count) => `Sort priority ${priority} of ${count}`,\n\n  filterColumn: (header) => `Filter ${header}`,\n  filterSearch: 'Search…',\n  filterEmpty: 'No options',\n  filterLoadMore: 'Load more',\n\n  columnMenu: (header) => `Column options for ${header}`,\n  sortAscending: 'Sort ascending',\n  sortDescending: 'Sort descending',\n  clearSort: 'Clear sort',\n  autosizeColumn: 'Autosize this column',\n  autosizeAllColumns: 'Autosize all columns',\n  resetWidth: 'Reset width',\n  hideColumn: 'Hide column',\n  pinColumnStart: 'Pin to start',\n  pinColumnEnd: 'Pin to end',\n  unpinColumn: 'Unpin',\n\n  columns: 'Columns',\n  showAllColumns: 'Show all columns',\n\n  selectAllRows: 'Select all rows',\n  selectRow: 'Select row',\n};\n\n/**\n * A label set, or a function building one for the **active locale**. See {@link LabelsSource}.\n *\n * @deprecated Use {@link LabelsSource}`<`{@link TableLabels}`>` - the shape is shared by every domain\n * in this library now.\n */\nexport type TableLabelsSource = LabelsSource<TableLabels>;\n\nconst TABLE_LABELS_DEF = /* @__PURE__ */ defineLabels<TableLabels>('TABLE_LABELS', DEFAULT_TABLE_LABELS);\n\n/**\n * Localize the table's strings for everything below this injector, and read the set in effect here as\n * a signal: the defaults with the provided set (or the set its factory builds for the current locale)\n * layered on top. Partial - whatever you leave out keeps its {@link DEFAULT_TABLE_LABELS} value. See\n * {@link defineLabels} for the shape, which every domain in this library shares.\n *\n * @example\n * // fixed wording\n * provideTableLabels({\n *   empty: 'Keine Daten',\n *   filterSearch: 'Suchen…',\n *   sortAction: (header, next) =>\n *     next === null ? `Sortierung nach ${header} aufheben` : `${header} ${next === 'asc' ? 'aufsteigend' : 'absteigend'} sortieren`,\n * });\n *\n * @example\n * // driven by the app's i18n, re-resolved when `provideLocale()`'s locale changes\n * provideTableLabels((locale) => ({\n *   empty: translate('table.empty', locale),\n *   sortAction: (header, next) => translate(`table.sort.${next ?? 'clear'}`, locale, { header }),\n * }));\n */\nexport const provideTableLabels = /* @__PURE__ */ toProvideFn(TABLE_LABELS_DEF);\nexport const injectTableLabels = /* @__PURE__ */ toInjectFn(TABLE_LABELS_DEF);\nexport const TABLE_LABELS = /* @__PURE__ */ toToken(TABLE_LABELS_DEF);\n","import { computed, effect, linkedSignal, signal, Signal, WritableSignal } from '@angular/core';\nimport { TableFilter, TableSort } from '../table.types';\n\n// The client-agnostic core shared by the signals-client (`tableRowsFromQuery`) and legacy-client\n// (`tableRowsFromV2Query`) adapters. Each client provides a small \"driver\" that normalizes its\n// query into three signals; the pagination/sort state and row/total bookkeeping live here once.\n\n/** The reactive server-side state the query args are built from. */\nexport type TableRowsQueryState = {\n  /** The active sort (bind the table's `sort` output through `setSort`). */\n  sort: Signal<TableSort[]>;\n  /** The active filters (bind the table's `filters` output through `setFilters`). */\n  filters: Signal<TableFilter[]>;\n  /** The current page (1-based by default). */\n  page: Signal<number>;\n  /** The free-text search (feed it through `setQuickFilter`), for the backend to match rows against. */\n  quickFilter: Signal<string>;\n};\n\n/**\n * What `<et-table [rowsSource]>` consumes: rows plus whatever async state and server-side sort/filter\n * plumbing a source happens to expose. Everything but `rows` is optional, so this is satisfied by\n * {@link TableRowsFromQuery} (both the signals-client and legacy-client adapters) **and** by a\n * hand-rolled object - the table depends on the shape, never on `@ethlete/query`.\n *\n * Bound, it feeds `data`, `loading` and `error`, and routes the table's own sort/filter changes back\n * through `setSort`/`setFilters` so the server does the work. That also flips `sortMode`/`filterMode`\n * to `'server'` unless you set them yourself: rows that came back sorted must not be re-sorted here.\n */\nexport type TableRowsSource<TRow> = {\n  /** The rows to render. */\n  rows: Signal<readonly TRow[]>;\n  /** True while a request is in flight - feeds the table's `loading`. */\n  loading?: Signal<boolean>;\n  /** The failure, if any - feeds the table's `error` (any non-nullish value counts). */\n  error?: Signal<unknown>;\n  /**\n   * How many rows the server holds in total, when the source knows - `null` while it doesn't. Nothing\n   * renders it; it is what lets a [CSV export](/components/table#exporting-more-than-the-loaded-page)\n   * notice that the table is holding 20 of 4 312 rows and say so instead of writing a plausible,\n   * wrong file. {@link TableRowsFromQuery} already provides it.\n   */\n  total?: Signal<number | null>;\n  /** The server-side sort, if the source owns it. */\n  sort?: Signal<TableSort[]>;\n  /** The server-side filters, if the source owns them. */\n  filters?: Signal<TableFilter[]>;\n  /** Called instead of updating the table's own `sort` when the user sorts. */\n  setSort?: (sort: TableSort[]) => void;\n  /** Called instead of updating the table's own `filters` when the user filters. */\n  setFilters?: (filters: TableFilter[]) => void;\n};\n\nexport type TableRowsFromQuery<TRow> = {\n  /** Bind to `<et-table [data]>`. Keeps the previous page visible while the next one loads. */\n  rows: Signal<TRow[]>;\n  /** True while a request is in flight. */\n  loading: Signal<boolean>;\n  /** The mapped error text, or `null`. */\n  error: Signal<string | null>;\n  /** Total row count (via `toTotal`), or `null`. */\n  total: Signal<number | null>;\n  /** Whether more pages exist (via `toHasMore`). */\n  hasMore: Signal<boolean>;\n  /** The current sort - bind to `<et-table [sort]>`. */\n  sort: Signal<TableSort[]>;\n  /** The current filters - bind to `<et-table [filters]>`. */\n  filters: Signal<TableFilter[]>;\n  /** The current page. */\n  page: Signal<number>;\n  /** The current free-text search. */\n  quickFilter: Signal<string>;\n  /** Set the sort (wire the table's `(sortChange)`); resets the page to `initialPage`. */\n  setSort: (sort: TableSort[]) => void;\n  /** Set the filters (wire the table's `(filtersChange)`); resets the page to `initialPage`. */\n  setFilters: (filters: TableFilter[]) => void;\n  /** Set the page (wire a paginator). */\n  setPage: (page: number) => void;\n  /** Set the free-text search (wire a search field); resets the page to `initialPage`. */\n  setQuickFilter: (quickFilter: string) => void;\n};\n\n/** A per-client view of a running query, normalized to three signals. */\nexport type TableRowsDriver<TResponse> = {\n  /** The latest settled response, or `null` while loading/failed (the core keeps the previous rows). */\n  response: Signal<TResponse | null>;\n  /** True while a request is in flight. */\n  loading: Signal<boolean>;\n  /** The failure mapped to text, or `null`. */\n  errorText: Signal<string | null>;\n};\n\nexport type CreateTableRowsSourceOptions<TResponse, TRow> = {\n  driver: TableRowsDriver<TResponse>;\n  sort: WritableSignal<TableSort[]>;\n  filters: WritableSignal<TableFilter[]>;\n  page: WritableSignal<number>;\n  quickFilter?: WritableSignal<string>;\n  initialPage: number;\n  toRows: (response: TResponse) => TRow[];\n  toTotal?: (response: TResponse) => number;\n  toHasMore?: (response: TResponse) => boolean;\n};\n\n/** Builds the shared adapter surface from a client driver + the reactive sort/page state. */\nexport const createTableRowsSource = <TResponse, TRow>(\n  options: CreateTableRowsSourceOptions<TResponse, TRow>,\n): TableRowsFromQuery<TRow> => {\n  const { driver, sort, filters, page, initialPage, toRows, toTotal, toHasMore } = options;\n  const quickFilter = options.quickFilter ?? signal('');\n\n  // Keep the previous page's rows while the next request is in flight (driver.response is null\n  // between executions) so the table doesn't flash empty. linkedSignal folds synchronously on read.\n  const rows = linkedSignal<TResponse | null, TRow[]>({\n    source: () => driver.response(),\n    computation: (response, previous) => (response === null ? (previous?.value ?? []) : toRows(response)),\n  });\n  // Fold even when nothing observes `rows` (e.g. between renders).\n  effect(() => void rows());\n\n  const total = linkedSignal<TResponse | null, number | null>({\n    source: () => driver.response(),\n    computation: (response, previous) =>\n      response === null ? (previous?.value ?? null) : (toTotal?.(response) ?? null),\n  });\n  effect(() => void total());\n\n  return {\n    rows,\n    total,\n    loading: driver.loading,\n    error: driver.errorText,\n    hasMore: computed(() => {\n      const response = driver.response();\n\n      if (response === null || !toHasMore) {\n        return false;\n      }\n\n      // A page that came back with no rows has nothing after it, whatever `toHasMore` derives from the\n      // response - this is what stops a load-more control from surviving one page past the end when the\n      // end can only be inferred (e.g. \"a full page means there is more\").\n      if (toRows(response).length === 0) {\n        return false;\n      }\n\n      return toHasMore(response);\n    }),\n    sort: sort.asReadonly(),\n    filters: filters.asReadonly(),\n    page: page.asReadonly(),\n    quickFilter: quickFilter.asReadonly(),\n    setSort: (next) => {\n      sort.set(next);\n      page.set(initialPage);\n    },\n    setFilters: (next) => {\n      filters.set(next);\n      page.set(initialPage);\n    },\n    setPage: (next) => page.set(next),\n    setQuickFilter: (next) => {\n      quickFilter.set(next);\n      page.set(initialPage);\n    },\n  };\n};\n","import { computed, signal } from '@angular/core';\nimport { AnyQueryCreator, QueryArgsOf, QueryErrorResponse, RequestArgs, ResponseType, withArgs } from '@ethlete/query';\nimport { createTableRowsSource, TableRowsFromQuery, TableRowsQueryState } from './table-rows-source';\nimport { TableFilter, TableSort } from '../table.types';\n\n// Note: `@ethlete/components` intentionally depends on `@ethlete/query`, so this query-aware\n// convenience factory lives here. It's a standalone function in its own module - tables that don't\n// use it (and apps not using `@ethlete/query`) tree-shake it away.\n\nexport type TableRowsFromQueryConfig<TCreator extends AnyQueryCreator, TRow> = {\n  /** The query creator to run. Created **once** and re-executes reactively as sort/page change. */\n  queryCreator: TCreator;\n  /**\n   * Builds the request args from the reactive server state. Runs like `withArgs`: reading\n   * `sort()`/`page()` re-executes the query. Return `null` to skip a request (rows keep their\n   * previous value).\n   */\n  args: (state: TableRowsQueryState) => RequestArgs<QueryArgsOf<TCreator>> | null;\n  /** Maps a successful response to the current page's rows. */\n  toRows: (response: ResponseType<QueryArgsOf<TCreator>>) => TRow[];\n  /** Total row count across all pages, for a paginator. */\n  toTotal?: (response: ResponseType<QueryArgsOf<TCreator>>) => number;\n  /** Whether more pages exist (gates a \"load more\"/next control). */\n  toHasMore?: (response: ResponseType<QueryArgsOf<TCreator>>) => boolean;\n  /** Turns a query failure into the table's error text. Defaults to the first error message. */\n  toErrorMessage?: (error: QueryErrorResponse) => string;\n  /** Initial sort. @default [] */\n  initialSort?: TableSort[];\n  /** Initial filters. @default [] */\n  initialFilters?: TableFilter[];\n  /** Initial free-text search. @default '' */\n  initialQuickFilter?: string;\n  /** The page `args` receives on first load; `setSort`/`setFilters`/`setQuickFilter` reset to it. @default 1 */\n  initialPage?: number;\n};\n\nconst firstErrorMessage = (error: QueryErrorResponse) => {\n  const message = 'errors' in error ? error.errors[0]?.message : error.error?.message;\n\n  return message ?? error.raw?.statusText ?? 'Something went wrong';\n};\n\n/**\n * Feeds a table's rows from an `@ethlete/query` query, server-side. Mirroring `createQueryStack`\n * (and `selectOptionsFromQuery`), it takes the `queryCreator` plus a reactive `args` builder: the\n * query is created once and re-executes as sort/page change. Use it with the table's\n * `sortMode=\"server\"` so the backend does the sorting:\n *\n * ```ts\n * users = tableRowsFromQuery({\n *   queryCreator: getUsers,\n *   args: ({ sort, page }) => ({\n *     queryParams: { sortBy: sort()[0]?.key, sortOrder: sort()[0]?.direction, page: page() },\n *   }),\n *   toRows: (res) => res.items,\n *   toTotal: (res) => res.totalHits,\n * });\n * ```\n *\n * ```html\n * <et-table\n *   [data]=\"users.rows()\"\n *   [columns]=\"columns\"\n *   [sort]=\"users.sort()\"\n *   (sortChange)=\"users.setSort($event)\"\n *   sortMode=\"server\"\n * />\n * ```\n *\n * Call it from a field initializer / constructor (injection context), the same place you'd create a\n * query or a query stack. For the legacy `V2QueryClient`, use `tableRowsFromV2Query`.\n */\nexport const tableRowsFromQuery = <TCreator extends AnyQueryCreator, TRow>(\n  config: TableRowsFromQueryConfig<TCreator, TRow>,\n): TableRowsFromQuery<TRow> => {\n  type TArgs = QueryArgsOf<TCreator>;\n  type TResponse = ResponseType<TArgs>;\n\n  const initialPage = config.initialPage ?? 1;\n  const sort = signal<TableSort[]>(config.initialSort ?? []);\n  const filters = signal<TableFilter[]>(config.initialFilters ?? []);\n  const page = signal(initialPage);\n  const quickFilter = signal(config.initialQuickFilter ?? '');\n\n  // Created once - `withArgs` re-runs as sort/filters/page change.\n  const query = config.queryCreator(withArgs<TArgs>(() => config.args({ sort, filters, page, quickFilter }) ?? null));\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  return createTableRowsSource<TResponse, TRow>({\n    driver: {\n      response: computed(() => query.response()),\n      loading: computed(() => query.loading() !== null),\n      errorText: computed(() => {\n        const error = query.error();\n\n        return error === null ? null : toErrorMessage(error);\n      }),\n    },\n    sort,\n    filters,\n    page,\n    quickFilter,\n    initialPage,\n    toRows: config.toRows,\n    toTotal: config.toTotal,\n    toHasMore: config.toHasMore,\n  });\n};\n","import { computed, signal } from '@angular/core';\nimport {\n  AnyLegacyQuery,\n  AnyLegacyQueryCreator,\n  AnyV2Query,\n  AnyV2QueryCreator,\n  QueryDataOf,\n  RequestError,\n  isQueryStateFailure,\n  isQueryStateLoading,\n  isQueryStateSuccess,\n  queryComputed,\n  queryStateSignal,\n} from '@ethlete/query';\nimport { createTableRowsSource, TableRowsFromQuery, TableRowsQueryState } from './table-rows-source';\nimport { TableFilter, TableSort } from '../table.types';\n\n// The legacy twin of `table-rows-from-query.ts` for apps still on the class-based `V2QueryClient`.\n// Same module rules: standalone function in its own file so unused integrations tree-shake away.\n\nexport type TableRowsFromV2QueryConfig<TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TRow> = {\n  /** The legacy query creator to run. A fresh query is prepared/executed as sort/page change; the previous is released. */\n  queryCreator: TCreator;\n  /** Builds the `prepare()` args from the reactive server state. Return `null` to skip (rows keep their previous value). */\n  args: (state: TableRowsQueryState) => Parameters<TCreator['prepare']>[0] | null;\n  /** Maps a successful response to the current page's rows. */\n  toRows: (response: QueryDataOf<TCreator>) => TRow[];\n  /** Total row count across all pages, for a paginator. */\n  toTotal?: (response: QueryDataOf<TCreator>) => number;\n  /** Whether more pages exist (gates a \"load more\"/next control). */\n  toHasMore?: (response: QueryDataOf<TCreator>) => boolean;\n  /** Turns a query failure into the table's error text. Defaults to the first error message. */\n  toErrorMessage?: (error: RequestError) => string;\n  /** Initial sort. @default [] */\n  initialSort?: TableSort[];\n  /** Initial filters. @default [] */\n  initialFilters?: TableFilter[];\n  /** Initial free-text search. @default '' */\n  initialQuickFilter?: string;\n  /** The page `args` receives on first load; `setSort`/`setFilters`/`setQuickFilter` reset to it. @default 1 */\n  initialPage?: number;\n};\n\nconst firstErrorMessage = (error: RequestError) => {\n  const detail = error.detail;\n\n  if (typeof detail === 'object' && detail !== null) {\n    if ('message' in detail && typeof detail.message === 'string') return detail.message;\n    if ('detail' in detail && typeof detail.detail === 'string') return detail.detail;\n  }\n\n  if (typeof detail === 'string') return detail;\n\n  return error.statusText || 'Something went wrong';\n};\n\n/**\n * The `V2QueryClient` counterpart of {@link tableRowsFromQuery}, for apps still on the legacy\n * client. Returns the same signal bundle - bind it to the table the same way, with\n * `sortMode=\"server\"`. Uses the legacy `queryComputed` container idiom: it re-prepares as sort/page\n * change and releases the previous query.\n *\n * Call it from a field initializer / constructor (injection context).\n */\nexport const tableRowsFromV2Query = <TCreator extends AnyV2QueryCreator | AnyLegacyQueryCreator, TRow>(\n  config: TableRowsFromV2QueryConfig<TCreator, TRow>,\n): TableRowsFromQuery<TRow> => {\n  type TResponse = QueryDataOf<TCreator>;\n\n  const initialPage = config.initialPage ?? 1;\n  const sort = signal<TableSort[]>(config.initialSort ?? []);\n  const filters = signal<TableFilter[]>(config.initialFilters ?? []);\n  const page = signal(initialPage);\n  const quickFilter = signal(config.initialQuickFilter ?? '');\n\n  const query = queryComputed<AnyV2Query | AnyLegacyQuery | null>(() => {\n    const args = config.args({ sort, filters, page, quickFilter });\n\n    if (args === null) return null;\n\n    return config.queryCreator.prepare(args).execute() as AnyV2Query | AnyLegacyQuery;\n  });\n\n  const state = queryStateSignal(query);\n  // Keeps the previous response available while the next request loads (see the select twin).\n  const settled = queryStateSignal(query, { cacheResponse: true });\n  const toErrorMessage = config.toErrorMessage ?? firstErrorMessage;\n\n  return createTableRowsSource<TResponse, TRow>({\n    driver: {\n      response: computed(() => {\n        const current = settled();\n\n        return isQueryStateSuccess(current) ? (current.response as TResponse) : null;\n      }),\n      loading: computed(() => isQueryStateLoading(state())),\n      errorText: computed(() => {\n        const current = state();\n\n        return isQueryStateFailure(current) ? toErrorMessage(current.error) : null;\n      }),\n    },\n    sort,\n    filters,\n    page,\n    quickFilter,\n    initialPage,\n    toRows: config.toRows,\n    toTotal: config.toTotal,\n    toHasMore: config.toHasMore,\n  });\n};\n","import { TableColumns, TableSort, TableSortValue } from '../table.types';\n\nconst isNullish = (value: TableSortValue): value is null | undefined => value === null || value === undefined;\n\nconst compare = (a: TableSortValue, b: TableSortValue) => {\n  if (isNullish(a) && isNullish(b)) return 0;\n  if (isNullish(a)) return 1;\n  if (isNullish(b)) return -1;\n\n  if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n  if (typeof a === 'number' && typeof b === 'number') return a - b;\n  if (typeof a === 'boolean' && typeof b === 'boolean') return Number(a) - Number(b);\n\n  return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n};\n\nexport type SortRowsConfig<T> = {\n  rows: readonly T[];\n  sort: readonly TableSort[];\n  columns: TableColumns<T>;\n};\n\n/**\n * Sort rows by a {@link TableSort} list, using each column's `sortValue` (or its\n * `value` accessor). Stable, multi-key, pure and tree-shakable - the base table\n * doesn't apply it unless in client sort mode; import it directly for custom flows.\n * Server-side callers ignore this and let the backend sort instead. Nullish values\n * always sink to the bottom, regardless of direction.\n */\nexport const sortRows = <T>({ rows, sort, columns }: SortRowsConfig<T>): T[] => {\n  if (!sort.length) return [...rows];\n\n  return [...rows].sort((rowA, rowB) => {\n    for (const { key, direction } of sort) {\n      const column = columns[key];\n\n      if (!column) continue;\n\n      const accessor = column.sortValue ?? column.value;\n      const valueA = accessor(rowA) as TableSortValue;\n      const valueB = accessor(rowB) as TableSortValue;\n\n      if (isNullish(valueA) || isNullish(valueB)) {\n        const nullCmp = compare(valueA, valueB);\n\n        if (nullCmp !== 0) return nullCmp;\n\n        continue;\n      }\n\n      const cmp = compare(valueA, valueB);\n\n      if (cmp !== 0) return direction === 'asc' ? cmp : -cmp;\n    }\n\n    return 0;\n  });\n};\n","import { TableColumnState, TableState } from '../table.types';\n\n/**\n * Serialize a {@link TableState} to a compact string for a URL query param (or any\n * string store), so a table setup - column order, visibility, sort, filters, expanded\n * rows and any feature slices - is shareable as a link. Pair with {@link deserializeTableState}.\n * `createTableStateStorage` uses the same form, so a link and a stored setup are interchangeable.\n *\n * The result is a raw JSON string; when you assign it to an Angular Router query param\n * the router handles URL-encoding. Encode it yourself (`encodeURIComponent`) only when\n * building a URL string by hand.\n */\nexport const serializeTableState = (state: TableState) => JSON.stringify(state);\n\nconst isColumnState = (value: unknown): value is TableColumnState =>\n  typeof value === 'object' && value !== null && typeof (value as TableColumnState).key === 'string';\n\n/**\n * Whether a value is a {@link TableState} this build can restore - a known version, and a `columns`\n * array whose every entry carries a `key`. `deserializeTableState` and `restoreState()` both apply it,\n * so a state that reaches a table from anywhere else (a server payload, a hand-built object) can be\n * checked the same way.\n */\nexport const isRestorableTableState = (value: unknown): value is TableState => {\n  if (typeof value !== 'object' || value === null) return false;\n\n  const candidate = value as Partial<TableState>;\n\n  // v1 predates the `features` bag and v2 the expansion feature's slice; all three restore, so an older\n  // link or stored setup keeps working - see TableState.\n  if (![1, 2, 3].includes(candidate.v as number) || !Array.isArray(candidate.columns)) return false;\n\n  return candidate.columns.every(isColumnState);\n};\n\n/**\n * Parse a {@link TableState} from a string produced by {@link serializeTableState}.\n * Returns `null` when the input is absent, malformed, or a version this build doesn't\n * understand - so a stale or hand-edited link degrades to \"no restore\" instead of throwing.\n */\nexport const deserializeTableState = (raw: string | null | undefined): TableState | null => {\n  if (!raw) return null;\n\n  let parsed: unknown;\n\n  try {\n    parsed = JSON.parse(raw);\n  } catch {\n    return null;\n  }\n\n  return isRestorableTableState(parsed) ? parsed : null;\n};\n","import { deserializeTableState, serializeTableState } from './table-state-url';\nimport { TableState } from '../table.types';\n\n/** Where a persisted {@link TableState} is kept. Both are per-origin; `'session'` dies with the tab. */\nexport type TableStateStorageKind = 'local' | 'session';\n\nexport type TableStateStorageOptions = {\n  /**\n   * The storage key. Namespace it per table *and* per meaning - `'users-table'`, not `'table'` - since\n   * restoring one table's column order into another is worse than not restoring at all.\n   */\n  key: string;\n  /** `'local'` survives a browser restart, `'session'` the tab only. @default 'local' */\n  kind?: TableStateStorageKind;\n  /**\n   * The store to use. Defaults to `window.localStorage` / `window.sessionStorage`, and falls back to a\n   * no-op when neither exists (SSR, or a browser with storage blocked) - persistence is a convenience,\n   * never a reason for a table to fail to render.\n   */\n  storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null;\n};\n\n/** A store that reads and writes nothing - SSR, or a browser that refuses storage. */\nconst NOOP_STORAGE: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> = {\n  getItem: () => null,\n  setItem: () => undefined,\n  removeItem: () => undefined,\n};\n\nconst resolveStorage = (options: TableStateStorageOptions) => {\n  if (options.storage !== undefined) return options.storage ?? NOOP_STORAGE;\n\n  try {\n    const storage = options.kind === 'session' ? globalThis.sessionStorage : globalThis.localStorage;\n\n    return storage ?? NOOP_STORAGE;\n  } catch {\n    // Access itself throws when cookies/storage are blocked, before any read.\n    return NOOP_STORAGE;\n  }\n};\n\n/**\n * A `localStorage` / `sessionStorage` store for a table's {@link TableState} - the same serialized form\n * {@link serializeTableState} produces for URLs, so a link and a stored setup are interchangeable.\n *\n * Every operation swallows its own failure (a full quota, private-mode restrictions, a hand-edited\n * value): a table that can't remember its columns still has to show them.\n *\n * @example\n * const store = createTableStateStorage({ key: 'users-table' });\n *\n * // restore once, then save on change\n * const state = store.load();\n * if (state) table.restoreState(state);\n * effect(() => store.save(table.state()));\n */\nexport const createTableStateStorage = (options: TableStateStorageOptions) => {\n  const storage = resolveStorage(options);\n\n  return {\n    /** The stored state, or `null` when there is none (or it is unreadable - see `deserializeTableState`). */\n    load: (): TableState | null => {\n      try {\n        return deserializeTableState(storage.getItem(options.key));\n      } catch {\n        return null;\n      }\n    },\n\n    /** Store a state. Silently does nothing when the store rejects the write. */\n    save: (state: TableState) => {\n      try {\n        storage.setItem(options.key, serializeTableState(state));\n      } catch {\n        // quota, private mode, disabled storage - nothing to do about it here\n      }\n    },\n\n    /** Forget the stored state, so the table starts from its column definitions again. */\n    clear: () => {\n      try {\n        storage.removeItem(options.key);\n      } catch {\n        // see save()\n      }\n    },\n  };\n};\n\nexport type TableStateStorage = ReturnType<typeof createTableStateStorage>;\n","import { booleanAttribute, computed, Directive, effect, inject, input } from '@angular/core';\nimport {\n  injectParentSurface,\n  injectSurfaceThemes,\n  ProvideSurfaceDirective,\n  resolveSurfaceByElevation,\n} from '@ethlete/core';\n\n/**\n * Raises a card row one surface elevation above the table it lies on, so the card is painted by a\n * theme instead of by a tint over the table's own surface - and so anything inside the row that\n * resolves an elevation of its own (a form field in an editing cell, a nested auto-surface) resolves\n * it from the card rather than from the table under it.\n *\n * @internal\n */\n@Directive({\n  selector: '[etTableCardSurface]',\n  hostDirectives: [ProvideSurfaceDirective],\n  host: {\n    '[class.et-table-row--card-tint]': 'hasNoSurface()',\n  },\n})\nexport class TableCardSurfaceDirective {\n  private provideSurface = inject(ProvideSurfaceDirective);\n  private parentSurface = injectParentSurface();\n  private surfaceThemes = injectSurfaceThemes({ optional: true });\n\n  /**\n   * Whether this row is a card. The table binds it per appearance; where it is off the row keeps the\n   * surface it inherits, which is what every other appearance paints its rows on.\n   */\n  public etTableCardSurface = input(false, { transform: booleanAttribute });\n\n  private resolvedSurface = computed(() => {\n    const themes = this.surfaceThemes;\n    const parent = this.parentSurface();\n\n    if (!this.etTableCardSurface() || !themes || !parent) return null;\n\n    return resolveSurfaceByElevation(themes, parent.type, parent.elevation + 1);\n  });\n\n  /**\n   * Whether the card asked for an elevation the app cannot give it - it registers no surface themes, or\n   * the table already sits on the top of the ladder. The row then falls back to a tint (see\n   * `.et-table-row--card-tint`), so a card is still marked off from the table under it.\n   */\n  protected hasNoSurface = computed(() => this.etTableCardSurface() && !this.resolvedSurface());\n\n  constructor() {\n    effect(() => {\n      const surface = this.resolvedSurface();\n\n      if (surface) {\n        this.provideSurface.forceSurface(surface.name);\n      } else {\n        this.provideSurface.clearForcedSurface();\n      }\n    });\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The row box layout, the `cards` appearance's surface/ring/corner chrome and the row-link anchor,\n * as a styles-only component mounted from `TableComponent` when either feature is on - see\n * `TableDetailStylesComponent` for the same pattern.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-row-box-styles',\n  template: '',\n  styleUrl: './table-row-box-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableRowBoxStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The sort priority badge, as a styles-only component mounted from `TableComponent` once a table allows\n * a multi-column sort - see `TableRowBoxStylesComponent` for the same pattern.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-sort-priority-styles',\n  template: '',\n  styleUrl: './table-sort-priority-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableSortPriorityStylesComponent {}\n","import { DOCUMENT, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n  afterNextRender,\n  booleanAttribute,\n  Component,\n  computed,\n  contentChild,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  isDevMode,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  TemplateRef,\n  untracked,\n  viewChild,\n  viewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, merge, Subscription, take, tap, timer } from 'rxjs';\nimport {\n  injectColorThemes,\n  injectRenderer,\n  injectStyleManager,\n  ProvideColorDirective,\n  RuntimeError,\n  signalDeferredLoading,\n  signalHostElementDimensions,\n  mountEasingTokens,\n} from '@ethlete/core';\nimport { ARROW_UP_ICON } from '../icon/headless/arrow-up-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport { TRIANGLE_EXCLAMATION_ICON } from '../icon/headless/triangle-exclamation-icon';\nimport {\n  ReconcilableColumn,\n  reconcileColumnOrder,\n  reconcileColumnWidths,\n  reconcileHiddenColumns,\n} from './headless/table-column-state';\nimport { TableCardSurfaceDirective } from './table-card-surface.directive';\nimport { TABLE_ERROR_CODES } from './table-errors';\nimport { TableRowBoxStylesComponent } from './table-row-box-styles.component';\nimport { TableSortPriorityStylesComponent } from './table-sort-priority-styles.component';\nimport {\n  TABLE_FEATURE_HOST,\n  TableCellErrorMark,\n  TableHeaderAdornment,\n  TableLayer,\n  TableLeadColumn,\n  TableCellEditing,\n  TableCellNavigation,\n  TableBodyPlaceholder,\n  TableCellPinning,\n  TableCellPlaceholder,\n  TableColumnPinning,\n  TableHeaderRow,\n  TablePageStickyHeader,\n  TableRowDetail,\n  TableRowNavigation,\n  TableRowWindow,\n  TableStateSlice,\n} from './headless/table-features';\nimport { filterRows } from './headless/table-filter';\nimport { quickFilterRows } from './headless/table-quick-filter';\nimport { TableFooterDirective } from './headless/table-footer.directive';\nimport { TableRowsSource } from './headless/table-rows-source';\nimport { injectTableLabels, TableLabels } from './headless/table-labels';\nimport { sortRows } from './headless/table-sort';\nimport { isRestorableTableState } from './headless/table-state-url';\nimport {\n  TableCellContext,\n  TableCellState,\n  TableCellStateValue,\n  TableColumnDef,\n  TableColumnPin,\n  TableColumns,\n  TableColumnState,\n  TableColumnTemplate,\n  TableEmptyContext,\n  TableErrorContext,\n  TableExpandedRowContext,\n  TableFilter,\n  TableRowLink,\n  TableMultiSort,\n  TableSort,\n  TableSortDirection,\n  TableSortGesture,\n  TableState,\n  TableTemplateSlot,\n} from './table.types';\n\n/**\n * The rendered shape of the table, resolved from the signals **before** the template runs.\n *\n * The template binds fields, never calls methods: a method in a binding re-runs on every change\n * detection with nothing to memoize it, and in a table that means row-count × column-count calls per\n * pass. Each `…Vm` below is one `computed`, so the same work happens once per actual change and the\n * template is a plain projection of it. (Event bindings still call methods - that's the one place a\n * call belongs.)\n */\n/** One leading utility cell (selection, expander) - identical chrome in every row kind. */\ntype TableLeadCellVm = {\n  key: string;\n  cellClass: string;\n  sticky: boolean;\n  offset: number | null;\n  lead: TableLeadColumn;\n};\n\ntype TableHeaderCellVm<T> = TableCellPinning & {\n  key: string;\n  column: TableColumnDef<T>;\n  align: string;\n  sortable: boolean;\n  disabled: boolean;\n  ariaSort: 'ascending' | 'descending' | 'none' | null;\n  sortLabel: string | null;\n  direction: TableSortDirection | null;\n  /** The column's 1-based place in a sort of more than one key, else `null`. */\n  priority: number | null;\n  priorityLabel: string | null;\n  template: TemplateRef<unknown> | null;\n  /** Whether the column has scrolled behind a pinned one, which its adornments must not outlive. */\n  obscured: boolean;\n};\n\ntype TableBodyCellVm<T> = TableCellPinning & {\n  key: string;\n  align: string;\n  /** Whether this is the cell that names the row's link - at most one per row, and only when it has one. */\n  linkHost: boolean;\n  /** Whether the column says it holds its own controls, which a row link's hit area then stays out of. */\n  interactive: boolean;\n  state: TableCellState | null;\n  /** What went wrong, when the callback said - shown on the mark. */\n  message: string | null;\n  template: TemplateRef<unknown> | null;\n  /** The cell's value, resolved through the column's accessor. */\n  value: unknown;\n  /** Context for a cell template, built here so the template outlet binds one object. */\n  context: TableCellContext<T, unknown>;\n  /**\n   * The column's edit template and the editing feature's context, while this is the one cell in edit\n   * mode. `null` for every other cell, which is every cell of a table without the feature.\n   */\n  edit: { template: TemplateRef<unknown>; context: object } | null;\n};\n\ntype TableBodyRowVm<T> = {\n  row: T;\n  /** The row's absolute index in `rows()` - true even while a virtual window renders a slice. */\n  index: number;\n  /** `rowIdentity`'s result - what `@for` tracks by. */\n  key: unknown;\n  classes: string;\n  stripe: boolean;\n  /** Whether the table ends here, so this row's rule would close it with a line hanging under it. */\n  last: boolean;\n  /** Where this row links to (see `rowLink`), or `null` for a row that links nowhere. */\n  link: TableRowLink | null;\n  /** The `href` the row's anchor carries - the link itself, or a navigator's resolution of it. */\n  href: string | null;\n  /** Id of the cell naming the link, which names the (textless) anchor via `aria-labelledby`. */\n  linkLabelId: string;\n  /** The registered detail row to stamp under this row, while it is open. */\n  detail: TableRowDetail | null;\n  leads: TableLeadCellVm[];\n  cells: TableBodyCellVm<T>[];\n  trails: TableLeadCellVm[];\n};\n\ntype TableFooterCellVm = TableCellPinning & {\n  key: string;\n  align: string;\n  template: TemplateRef<unknown> | null;\n};\n\n/**\n * Default narrowest width (px) a column may end up at, whether dragged there or squeezed there by a\n * wider neighbour. Sized so the header still reads: a cell spends 24px on its own inline padding and\n * up to another 24px on a column-menu trigger, so anything much under this is all chrome and no\n * label. A column that genuinely needs less says so with `minWidth`.\n */\nconst MIN_COLUMN_WIDTH = 96;\n\n/**\n * The default track for a column: it shares out the leftover room, but never shrinks past its floor -\n * which is what stops one wide (or resized) column from squeezing its neighbours down to their\n * padding and out of sight. Past that point the table scrolls instead, which the scroll fades\n * advertise.\n */\nconst defaultTrack = (minWidth: number) => `minmax(${minWidth}px, 1fr)`;\n\n/**\n * Trailing track that soaks up the room left over by all-rigid columns - see\n * {@link TableComponent.hasFiller}. Slack, not a column, so unlike {@link DEFAULT_TRACK} it has no\n * floor: it must be free to collapse to nothing.\n */\nconst FILLER_TRACK = 'minmax(0, 1fr)';\n\n/**\n * Whether a `grid-template-columns` track grows into leftover space: `auto` tracks are stretched by\n * the grid's default `justify-content: normal`, and `fr` tracks are flexible by definition.\n */\nconst isFlexibleTrack = (track: string) => /\\bauto\\b|[\\d.]fr\\b/.test(track);\n\n/**\n * Cheap structural comparison for the small, plain state lists the table mirrors (sort entries, filter\n * values). Enough to stop an equal-but-new array from being written back - see the mirroring effect.\n */\nconst sameJson = (a: unknown, b: unknown) => JSON.stringify(a) === JSON.stringify(b);\n\n/** Sub-pixel slack (px) before a scroll offset counts as \"there is content over there\". */\nconst SCROLL_FADE_EPSILON = 1;\n\n/** Sort indicator enter duration (must match the CSS animation) - see {@link TableComponent.sortIndicatorEnter}. */\nconst SORT_INDICATOR_ANIMATION_MS = 150;\n\ntype TableSortStep = { key: string; direction: TableSortDirection | null; additive: boolean };\n\nconst multiSortAttribute = (value: TableMultiSort | '' | 'true' | 'false' | null | undefined): TableMultiSort =>\n  value === 'shift' ? 'shift' : booleanAttribute(value);\n\n/** What a cell renders as when nothing pins columns - see `registerColumnPinning`. */\nconst NO_PIN: TableCellPinning = { stickyStart: false, stickyEnd: false, offsetStart: null, offsetEnd: null };\n\n/** The same for a leading utility cell, and for the scroll fades' inline offsets. */\nconst NO_LEAD_PIN = { sticky: false, offset: null };\nconst NO_INSET = { start: 0, end: 0 };\nconst EMPTY_COLUMN_KEYS: ReadonlySet<string> = /* @__PURE__ */ new Set();\n\n/** Each `rowsSource` state signal with the setter it needs and the column flag whose UI writes it. */\nconst UNPAIRED_ROWS_SOURCE_CHECKS = [\n  ['sort', 'setSort', 'sortable'],\n  ['filters', 'setFilters', 'filterable'],\n] as const;\n\n// Per-table counter, so the ids a row link is named by are unique across every table on the page.\nlet uniqueTableId = 0;\n\n/**\n * The default table. Renders typed rows and cells from a {@link TableColumns}\n * record on a CSS grid with a sticky header and an empty state. Light by\n * default - sort, filter, expansion, reordering, virtualization and state\n * persistence arrive as separate opt-in features.\n *\n * @example\n * const COLUMNS = {\n *   name: { header: 'Name', value: (user: User) => user.name },\n *   email: { header: 'Email', value: (user: User) => user.email },\n * } satisfies TableColumns<User>;\n *\n * <et-table [data]=\"users()\" [columns]=\"COLUMNS\" />\n */\n@Component({\n  selector: 'et-table',\n  templateUrl: './table.component.html',\n  styleUrl: './table.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgComponentOutlet, NgTemplateOutlet, IconDirective, ProvideColorDirective, TableCardSurfaceDirective],\n  providers: [\n    { provide: TABLE_FEATURE_HOST, useExisting: TableComponent },\n    provideIcons(ARROW_UP_ICON, TRIANGLE_EXCLAMATION_ICON),\n  ],\n  host: {\n    class: 'et-table-host',\n    '[attr.data-appearance]': 'appearance()',\n    '[attr.data-density]': 'density()',\n    '[attr.aria-busy]': 'resolvedLoading() ? \"true\" : null',\n    '[attr.role]': 'pageStickyHeader() ? \"grid\" : null',\n    '[class.et-table-host--scrolled-block-start]': 'blockScrollShadows().blockStart',\n    '[class.et-table-host--scrolled-block-end]': 'blockScrollShadows().blockEnd',\n    '[class.et-table-host--scrolled-inline-start]': 'scrollFades().start',\n    '[class.et-table-host--scrolled-inline-end]': 'scrollFades().end',\n    '[class.et-table-host--header-adornments]': 'headerAdornments().length > 0',\n    '[style.--_et-table-viewport-inline-size.px]': 'viewportInlineSize()',\n    '(scroll)': 'syncScrollState()',\n  },\n})\nexport class TableComponent<T> {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected injector = inject(Injector);\n  private destroyRef = inject(DestroyRef);\n  private document = inject(DOCUMENT);\n  private injectedLabels = injectTableLabels();\n  private renderer = injectRenderer();\n\n  /** The rows to render. */\n  public data = input<readonly T[]>([]);\n\n  /**\n   * A rows source to drive the table from - what `tableRowsFromQuery` / `tableRowsFromV2Query` return,\n   * or any object of that shape. It supplies `data`, `loading` and `error`, and takes the table's sort\n   * and filter changes back through its own setters, so one binding replaces six.\n   *\n   * Because such a source has already sorted and filtered on the server, `sortMode` and `filterMode`\n   * default to `'server'` while one is bound - set them explicitly to override.\n   */\n  public rowsSource = input<TableRowsSource<T>>();\n\n  /** The column definitions, keyed by column key (see {@link TableColumns}). */\n  public columns = input<TableColumns<T>>({});\n\n  /**\n   * Stable per-row identity for change tracking (and, later, row-keyed state such\n   * as selection/expansion). Defaults to row reference identity.\n   */\n  public rowKey = input<(row: T) => string | number>();\n\n  /**\n   * Wording for this table only, on top of the injected {@link TABLE_LABELS} set. Prefer\n   * {@link provideTableLabels} for app-wide localization; use this for a one-off. Partial - omitted\n   * keys keep the provided/default value.\n   */\n  public labels = input<Partial<TableLabels> | null>(null);\n\n  /**\n   * Whether the rows are being loaded. Over rows that are already on screen it keeps them readable and\n   * runs a busy bar under the header, so a refetch doesn't blank the table the user is reading; with\n   * nothing to show yet the body is left to whatever renders a loading state - `etTableSkeleton` draws\n   * placeholder rows, and without it the body simply stays empty. The host carries `aria-busy` either\n   * way. @default false\n   */\n  public loading = input(false, { transform: booleanAttribute });\n\n  /**\n   * The load's failure, if any - anything non-nullish counts (an `HttpErrorResponse`, a message, a\n   * flag), so it takes a query's `error` signal as-is. Set, it replaces the body with the error\n   * state: stale rows under an unreported failure are worse than an honest empty table. Say more than\n   * the `error` label with {@link errorTemplate} (which gets the error) or a projected `[etTableError]`.\n   */\n  public error = input<unknown>(null);\n\n  /**\n   * Body content for the empty state, in place of the `empty` label. Context: `{ $implicit: rows }` -\n   * the (empty) row list, so one template can serve \"nothing here\" and \"nothing matches your filters\".\n   * Takes precedence over projected `[etTableEmpty]` content.\n   */\n  public emptyTemplate = input<TemplateRef<TableEmptyContext<T>>>();\n\n  /**\n   * Body content for the error state, in place of the `error` label. Context: `{ $implicit: error }` -\n   * whatever was bound to {@link error} - so the template can render the message and a retry.\n   * Takes precedence over projected `[etTableError]` content.\n   */\n  public errorTemplate = input<TemplateRef<TableErrorContext>>();\n\n  /**\n   * Per-cell async state, for a cell that loads or fails on its own (inline editing). Return\n   * `'loading'` to replace that cell's content with a placeholder bar, `'error'` to mark it, or\n   * `null`/nothing for a normal cell. Return `{ state: 'error', message }` and the message rides\n   * along on the mark - as its `title` and accessible name, or as a tooltip with\n   * `etTableCellErrorTooltip`. Resolved once per rendered cell (see `bodyRows`), but keep it cheap\n   * anyway - a map lookup, not a search.\n   */\n  public cellState = input<(row: T, key: string) => TableCellStateValue | null | undefined>();\n\n  /**\n   * The table's visual frame. `'enclosed'` (default) is a bordered, rounded surface panel with a\n   * tinted header band; `'divided'` is borderless with row dividers; `'zebra'` stripes rows; `'grid'`\n   * draws full cell borders; `'bare'` has no chrome; `'cards'` gives every row a box of its own - a\n   * rounded card on a surface one elevation above the table's, spaced by `--et-table-row-gap`.\n   * @default 'enclosed'\n   */\n  public appearance = input<'enclosed' | 'divided' | 'zebra' | 'grid' | 'bare' | 'cards'>('enclosed');\n\n  /** Row density (cell padding): `'sm'` tight, `'md'` default, `'lg'` roomy. @default 'md' */\n  public density = input<'sm' | 'md' | 'lg'>('md');\n\n  /**\n   * The active sort, as an ordered list of `{ key, direction }`. Two-way bindable.\n   * In `'client'` mode the table sorts rows by it; in `'server'` mode it's yours to\n   * feed into query args.\n   */\n  public sort = model<TableSort[]>([]);\n\n  /**\n   * Allow more than one column to be sorted at once. `true` layers a key on every header activation;\n   * `'shift'` layers one on <kbd>Shift</kbd> + click or <kbd>Shift</kbd> + <kbd>Enter</kbd> and lets a\n   * plain activation replace the sort. A sorted header shows its priority once more than one key is\n   * sorted. @default false\n   */\n  public multiSort = input<TableMultiSort, TableMultiSort | '' | 'true' | 'false' | null | undefined>(false, {\n    transform: multiSortAttribute,\n  });\n\n  /**\n   * `'client'` sorts the rows in the browser via {@link sortRows}; `'server'`\n   * leaves rows untouched so the backend can sort.\n   * @default 'client'\n   */\n  public sortMode = input<'client' | 'server'>();\n\n  /**\n   * The active filters, as `{ key, values }` per filtered column. Two-way bindable.\n   * In `'client'` mode the table filters rows by it; in `'server'` mode it's yours\n   * to feed into query args.\n   */\n  public filters = model<TableFilter[]>([]);\n\n  /**\n   * `'client'` filters the rows in the browser via {@link filterRows}; `'server'`\n   * leaves rows untouched so the backend can filter.\n   * @default 'client'\n   */\n  public filterMode = input<'client' | 'server'>();\n\n  /**\n   * Free text that narrows the rows to those containing every word of it, in any visible column - see\n   * {@link quickFilterRows} for the matching and the column options. Applied in `'client'` filter mode;\n   * in `'server'` mode pass the same text to your query instead.\n   */\n  public quickFilter = input<string | null | undefined>('');\n\n  /**\n   * The detail template rendered as a full-width row when a row is expanded. Context:\n   * `{ $implicit: row }`. Nest another `<et-table>` here for sub-tables.\n   *\n   * It stays a table input rather than an option on {@link TableRowExpansionDirective} because only the\n   * table knows the row type, which is what types the template's `let-row`. **Rendering it needs\n   * `etTableRowExpansion`** - the expander column, the detail row and its animation ship with the\n   * feature, so a table that never expands a row carries none of it.\n   */\n  public expandedRowTemplate = input<TemplateRef<TableExpandedRowContext<T>>>();\n\n  /**\n   * Make whole rows respond to clicks: adds a hover/pointer affordance and emits {@link rowClick}\n   * (clicks landing on interactive cell content are ignored - see `rowClick`). For a row that\n   * navigates, prefer {@link rowLink} - a real link, not a click handler. @default false\n   */\n  public rowInteractive = input(false, { transform: booleanAttribute });\n\n  /**\n   * Make every row a link, by saying where it goes: an `href` the browser follows, or the router\n   * commands to navigate to - which need `etTableRowRouterLink` on the table, since the base table\n   * depends on no router. Answer `null` for a row that links nowhere.\n   *\n   * The table renders **one** real `<a href>` per row and stretches it over the row, so middle click,\n   * Ctrl/Cmd-click, \"open in a new tab\" and \"copy link address\" all work - none of which a\n   * {@link rowInteractive} click handler can offer. The anchor sits in the first column that holds no\n   * controls of its own and takes its accessible name from that cell, which keeps the row one link in\n   * the accessibility tree and one stop in the tab order.\n   *\n   * A cell with a control in it keeps its clicks: the selection and expander cells always, and any\n   * column that declares `interactive: true`.\n   *\n   * @example\n   * <et-table [rowsSource]=\"source\" [columns]=\"columns()\" [rowLink]=\"orderLink\" etTableRowRouterLink />\n   *\n   * protected orderLink = (order: Order) => ['/orders', order.id];\n   */\n  public rowLink = input<(row: T) => TableRowLink | null | undefined>();\n\n  /**\n   * Emitted when an interactive row (see {@link rowInteractive}) is clicked, with the row as payload.\n   * Clicks originating from interactive descendants - buttons, links, inputs, selects, a menu trigger,\n   * and the selection/expander cells - are ignored, so in-row controls keep working. The table bakes\n   * in no navigation; call `router.navigate` (etc.) yourself. For crawlable per-row links, render a\n   * real `<a>` in a cell instead.\n   */\n  public rowClick = output<T>();\n\n  // Whether the consumer projected an `[etTableFooter]` slot, so its chrome (border, sticky bar)\n  // renders only when there's actually footer content.\n  protected footerSlot = contentChild(TableFooterDirective);\n\n  private gridRef = viewChild<ElementRef<HTMLElement>>('grid');\n\n  private headerGridRef = viewChild<ElementRef<HTMLElement>>('headerGrid');\n\n  private scrollerRef = viewChild<ElementRef<HTMLElement>>('scroller');\n\n  private headerCells = viewChildren<ElementRef<HTMLElement>>('headerCell');\n\n  // Every rendered body cell (tagged with `data-col-key`); the first drives virtual-window\n  // measurement, and they're grouped by column to animate a column shift on reorder drop.\n  private bodyCells = viewChildren<ElementRef<HTMLElement>>('bodyCell');\n\n  // The rendered lead-column header cells, in lead-column order - measured so each lead column and\n  // the pinned data columns know how far in they start.\n  private leadHeaderCells = viewChildren<ElementRef<HTMLElement>>('leadHeaderCell');\n\n  // The same for the trailing utility columns, stacked from the trailing edge instead.\n  private trailHeaderCells = viewChildren<ElementRef<HTMLElement>>('trailHeaderCell');\n\n  // Base of the ids a row link is named by - one per table, so two tables on a page can't collide.\n  private readonly LINK_ID_PREFIX = `et-table-${uniqueTableId++}-row-link`;\n\n  /** The sort mode in effect: what you set, else `'server'` when a {@link rowsSource} is bound. */\n  public resolvedSortMode = computed<'client' | 'server'>(\n    () => this.sortMode() ?? (this.rowsSource() ? 'server' : 'client'),\n  );\n\n  /** The filter mode in effect: what you set, else `'server'` when a {@link rowsSource} is bound. */\n  public resolvedFilterMode = computed<'client' | 'server'>(\n    () => this.filterMode() ?? (this.rowsSource() ? 'server' : 'client'),\n  );\n\n  /** The strings in effect here: the injected label set with this table's `labels` applied. */\n  public resolvedLabels = computed<TableLabels>(() => ({ ...this.injectedLabels(), ...this.labels() }));\n\n  /**\n   * The app's error color theme, for the table's own error UI (the error state, an errored cell).\n   * Looked up by `type` rather than through `injectErrorTheme()`, which throws when an app registered\n   * no `type: 'error'` theme: a table must not require one just to render a list. Without one the\n   * error UI stays on the surface's own colors.\n   */\n  public errorColorTheme = injectColorThemes({ optional: true })?.find((theme) => theme.type === 'error');\n\n  // UI contributed by opt-in features (filter menus, resize grips), rendered in every header cell.\n  // Features register themselves (see TABLE_FEATURE_HOST) rather than being queried, so the table\n  // never references a feature's dependencies - that's what keeps them out of an unused bundle.\n  private headerAdornmentList = signal<TableHeaderAdornment[]>([]);\n\n  protected headerAdornments = computed(() =>\n    this.headerAdornmentList()\n      .filter((adornment) => adornment.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  // Serializable state owned by features (a selection), carried in `state().features`.\n  private stateSliceList = signal<TableStateSlice[]>([]);\n\n  // A feature's replacement for the errored-cell mark (the tooltip version). Null until one registers,\n  // which is what keeps the overlay runtime out of a table that only needs to mark the cell.\n  private cellErrorMarkList = signal<TableCellErrorMark[]>([]);\n\n  protected cellErrorMark = computed(() => this.cellErrorMarkList().find((mark) => mark.enabled?.() ?? true) ?? null);\n\n  // How a feature follows a row link given as router commands (etTableRowRouterLink). Null until one\n  // registers, which is what keeps the router out of a table that links with plain hrefs - or not at all.\n  private rowNavigationList = signal<TableRowNavigation[]>([]);\n\n  private rowNavigation = computed(\n    () => this.rowNavigationList().find((navigation) => navigation.enabled?.() ?? true) ?? null,\n  );\n\n  // Floating UI contributed by features (the reorder drag ghost). The table hosts it so a feature\n  // never needs a view - and never an element - of its own.\n  private layerList = signal<TableLayer[]>([]);\n\n  protected layers = computed(() => this.layerList().filter((layer) => layer.enabled?.() ?? true));\n\n  // Rows a feature renders above the column headers (the spanning group-header row).\n  private headerRowList = signal<TableHeaderRow[]>([]);\n\n  private pageStickyHeaderList = signal<TablePageStickyHeader[]>([]);\n\n  protected pageStickyHeader = computed(\n    () => this.pageStickyHeaderList().find((header) => header.enabled()) !== undefined,\n  );\n\n  protected headerRows = computed(() => this.headerRowList().filter((row) => row.enabled?.() ?? true));\n\n  // How a feature pins columns (etTableStickyColumns). Null until one registers, which is what keeps\n  // the measuring and the edge shadows out of a table that pins nothing.\n  private columnPinningList = signal<TableColumnPinning[]>([]);\n\n  private columnPinning = computed(\n    () => this.columnPinningList().find((pinning) => pinning.enabled?.() ?? true) ?? null,\n  );\n\n  // What a feature renders in place of the body while loading with no rows yet (etTableSkeleton).\n  private bodyPlaceholderList = signal<TableBodyPlaceholder[]>([]);\n\n  protected bodyPlaceholder = computed(\n    () => this.bodyPlaceholderList().find((placeholder) => placeholder.enabled?.() ?? true) ?? null,\n  );\n\n  // A feature's stand-in for the content of a cell that is loading on its own. Null until one registers,\n  // which is what keeps the skeleton bone out of a table that never shows one.\n  private cellPlaceholderList = signal<TableCellPlaceholder[]>([]);\n\n  protected cellPlaceholder = computed(\n    () => this.cellPlaceholderList().find((placeholder) => placeholder.enabled?.() ?? true) ?? null,\n  );\n\n  // A registered detail row (etTableRowExpansion). Null until one registers, which is what keeps the\n  // expander cell, the detail row's chrome and its animation out of a table that never expands.\n  private rowDetailList = signal<TableRowDetail[]>([]);\n\n  private rowDetail = computed(() => this.rowDetailList().find((detail) => detail.enabled?.() ?? true) ?? null);\n\n  // Leading utility columns from features (selection), plus the table's own expander column when a\n  // detail template is set. One generic loop per row kind renders them all.\n  private leadColumnList = signal<TableLeadColumn[]>([]);\n\n  // A registered row window (virtual scrolling); `null` renders every row.\n  private registeredRowWindow = signal<TableRowWindow | null>(null);\n\n  // A feature that owns cell focus (etTableKeyboardNav). While one is live the body's cells become the\n  // focus targets, which is the one thing the base has to know about: a focusable cell needs a\n  // `tabindex`, and the row must stop being a tab stop of its own or the body would have two.\n  private cellNavigationList = signal<TableCellNavigation[]>([]);\n\n  /** Whether a feature has taken over cell focus - see {@link registerCellNavigation}. */\n  public cellNavigation = computed(() =>\n    this.cellNavigationList().some((navigation) => navigation.enabled?.() ?? true),\n  );\n\n  // A feature that edits cells in place (etTableInlineEdit). The base knows only which cell is open and\n  // what to render in it - the session, the draft and the commit are all the feature's.\n  private cellEditingList = signal<TableCellEditing[]>([]);\n\n  private cellEditing = computed(() => this.cellEditingList().find((editing) => editing.enabled?.() ?? true) ?? null);\n\n  private rowWindow = computed(() => {\n    const window = this.registeredRowWindow();\n\n    return window && (window.enabled?.() ?? true) ? window : null;\n  });\n\n  // Inline-start offset for the auto-pinned expander column (it sits after the select column).\n  // Recompute sticky-column offsets when the host resizes (column widths change).\n  private hostDimensions = signalHostElementDimensions();\n\n  // Columns whose track is let out to `max-content` for one frame so it can be measured. Empty except\n  // during an `autosizeColumns` pass.\n  private autosizing = signal<ReadonlySet<string>>(new Set());\n\n  /** Where content is currently scrolled out of view horizontally. */\n  public scrollFades = signal<{ start: boolean; end: boolean }>({ start: false, end: false });\n\n  /** The columns currently covered by a pinned one - see {@link syncObscuredColumns}. */\n  private obscuredColumns = signal<ReadonlySet<string>>(EMPTY_COLUMN_KEYS);\n\n  /**\n   * Whether rows are currently passing under the sticky header, and whether more follow under the footer\n   * bar. Both edges cut a row off mid-height - on `cards`, mid-card - and a cut with nothing to explain\n   * it reads as a broken box, so each edge casts a shadow while there is something behind it.\n   */\n  protected blockScrollShadows = signal<{ blockStart: boolean; blockEnd: boolean }>({\n    blockStart: false,\n    blockEnd: false,\n  });\n\n  /** The inline offset (px) each edge gradient is pushed in by, so it clears any pinned columns. */\n  protected fadeInset = computed(() => this.columnPinning()?.insets() ?? NO_INSET);\n\n  /**\n   * The scroll viewport's own inline size, published as a custom property for the rules that have to\n   * span it rather than the tracks - the empty and the error message. A row spans every column, which\n   * on a table wider than its viewport is not where the reader is looking.\n   */\n  protected viewportInlineSize = computed(() => this.hostDimensions().client?.width ?? null);\n\n  /**\n   * Which edge gradients actually show. A gradient marks the boundary rows slide out under - so an edge\n   * that pins a column has one already: the pinned cells' own edge shadow, drawn per row. Two marks on\n   * the same boundary read as a smear, and the gradient is the one that has to go: it spans the whole\n   * grid, so on `cards` it paints across the gaps between them as well.\n   */\n  protected visibleScrollFades = computed(() => {\n    const scrolled = this.scrollFades();\n    const inset = this.fadeInset();\n\n    return { start: scrolled.start && inset.start === 0, end: scrolled.end && inset.end === 0 };\n  });\n\n  // The declared columns paired with their keys, in declaration order - the form everything else\n  // (rendering, features, state) works with. Keys are the record's, so they can't collide.\n  private columnDefs = computed<TableColumnDef<T>[]>(() =>\n    Object.entries(this.columns()).map(([key, column]) => ({ ...column, key })),\n  );\n\n  // Column order, visibility and user-resized widths (px). All three are reconciled rather than\n  // reset when the `columns` input changes identity, so a reorder / resize / hidden column (or a\n  // restoreState()) survives a consumer rebuilding its definitions - see `table-column-state.ts`.\n  private columnOrder = linkedSignal<TableColumnDef<T>[], string[]>({\n    source: () => this.columnDefs(),\n    computation: (columns, previous) =>\n      reconcileColumnOrder(\n        columns.map((column) => column.key),\n        previous?.value,\n      ),\n  });\n  // A restore that lands before the `columns` input is populated - a consumer building its columns\n  // from the same request that carries the stored state - has no previous source to reconcile against,\n  // so every column would read as never-seen and take its declared `hidden`, discarding the restore.\n  // What the restore spoke about stands in for the source in that one case.\n  private restoredColumns: ReconcilableColumn[] = [];\n  private hiddenColumns = linkedSignal<TableColumnDef<T>[], Set<string>>({\n    source: () => this.columnDefs(),\n    computation: (columns, previous) =>\n      reconcileHiddenColumns(\n        columns,\n        previous && {\n          columns: previous.source.length ? previous.source : this.restoredColumns,\n          hidden: previous.value,\n        },\n      ),\n  });\n  /**\n   * The user's width overrides (px) per column. Public because it is part of the feature contract -\n   * `etTableStickyColumns` re-measures its offsets when a resize changes the tracks without changing the\n   * host's size, which is the one thing no other signal reports.\n   */\n  public columnWidths = linkedSignal<TableColumnDef<T>[], Record<string, number>>({\n    source: () => this.columnDefs(),\n    computation: (columns, previous) => reconcileColumnWidths(columns, previous?.value),\n  });\n\n  private columnsByKey = computed(() => new Map(this.columnDefs().map((column) => [column.key, column])));\n\n  // Templates registered by the `etTableCell` / `etTableHeaderCell` / `etTableFooterCell`\n  // directives, resolved to a column key by identity against the `columns` record.\n  private columnTemplateList = signal<TableColumnTemplate[]>([]);\n\n  public columnTemplates = computed(() => {\n    const keyByColumn = new Map<object, string>(Object.entries(this.columns()).map(([key, column]) => [column, key]));\n    const slots: Record<TableTemplateSlot, Map<string, TemplateRef<unknown>>> = {\n      cell: new Map(),\n      header: new Map(),\n      footer: new Map(),\n      filterOption: new Map(),\n      cellSkeleton: new Map(),\n      cellEdit: new Map(),\n    };\n\n    for (const registration of this.columnTemplateList()) {\n      const key = keyByColumn.get(registration.column());\n\n      if (key === undefined) {\n        // Silently rendering nothing would look like a broken template, so name the mistake.\n        if (isDevMode()) {\n          throw new RuntimeError(\n            TABLE_ERROR_CODES.UNKNOWN_TEMPLATE_COLUMN,\n            `[et-table] A column template is bound to a column this table does not render. Bind it to a column of the same \\`columns\\` record (e.g. [etTableCell]=\"COLUMNS.role\").`,\n            { element: this.elementRef.nativeElement },\n          );\n        }\n\n        continue;\n      }\n\n      slots[registration.slot].set(key, registration.template);\n    }\n\n    return slots;\n  });\n\n  private orderedColumns = computed(() => {\n    const map = this.columnsByKey();\n\n    return this.columnOrder()\n      .map((key) => map.get(key))\n      .filter((column): column is TableColumnDef<T> => column !== undefined);\n  });\n\n  /**\n   * Columns currently displayed, in order. While a feature pins columns, each carries its effective\n   * `sticky` (a runtime pin wins over the declared one) and the pinned ones render in their edge's block.\n   */\n  public visibleColumns = computed(() => {\n    const visible = this.orderedColumns().filter((column) => !this.hiddenColumns().has(column.key));\n    const pinning = this.columnPinning();\n\n    if (!pinning) return visible;\n\n    const pins = pinning.pins?.() ?? {};\n    const pinned = visible.map((column) => {\n      const pin = column.key in pins ? pins[column.key] : column.sticky;\n\n      return (pin ?? undefined) === column.sticky ? column : { ...column, sticky: pin ?? undefined };\n    });\n\n    return [\n      ...pinned.filter((column) => column.sticky === 'start'),\n      ...pinned.filter((column) => !column.sticky),\n      ...pinned.filter((column) => column.sticky === 'end'),\n    ];\n  });\n\n  private visibleColumnRecord = computed<TableColumns<T>>(() =>\n    Object.fromEntries(this.visibleColumns().map((column) => [column.key, column])),\n  );\n\n  /** Whether any visible column has a registered footer cell (drives the sticky footer row). */\n  public hasFooter = computed(() => {\n    const footers = this.columnTemplates().footer;\n\n    return this.visibleColumns().some((column) => footers.has(column.key));\n  });\n\n  // Every live utility column, in render order within its own side.\n  private utilityColumns = computed<TableLeadColumn[]>(() =>\n    this.leadColumnList()\n      .filter((lead) => lead.enabled?.() ?? true)\n      .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),\n  );\n\n  /** The leading utility columns in render order - whatever features registered (selection, expansion). */\n  public leadColumns = computed<TableLeadColumn[]>(() =>\n    this.utilityColumns().filter((column) => (column.side?.() ?? 'start') === 'start'),\n  );\n\n  /** The trailing utility columns in render order - those a feature registered with `side: 'end'`. */\n  public trailColumns = computed<TableLeadColumn[]>(() =>\n    this.utilityColumns().filter((column) => column.side?.() === 'end'),\n  );\n\n  /**\n   * The column tracks, plus whether they are all rigid.\n   *\n   * A track that is `auto` or flexible (`fr`) soaks up whatever room is left over, so such a grid\n   * always fills its container. Once every column carries a fixed length - which is what resizing\n   * every column does - that stops being true, and the table's chrome (header band, row dividers,\n   * vertical rules) would stop at the last column instead of at the panel's edge. {@link hasFiller}\n   * is the fix.\n   */\n  private columnTracks = computed(() => {\n    const widths = this.columnWidths();\n    const measuring = this.autosizing();\n    const tracks = this.visibleColumns().map((column) => {\n      // Mid-autosize this column is let out to its content so it can be measured - see `autosizeColumns`.\n      if (measuring.has(column.key)) return 'max-content';\n\n      const resized = widths[column.key];\n\n      return resized !== undefined ? `${resized}px` : (column.width ?? defaultTrack(this.minWidthOf(column.key)));\n    });\n\n    // An end-pinned column already owns the trailing edge of the scroll viewport; a slack track\n    // between it and that edge would only strand it away from the last real column. Nor during a\n    // measurement pass: `max-content` isn't flexible, so it would otherwise add - and immediately\n    // drop - a filler cell in every row for that one frame.\n    const fixed =\n      tracks.length > 0 &&\n      !measuring.size &&\n      !tracks.some(isFlexibleTrack) &&\n      !(this.columnPinning()?.hasStickyEnd() ?? false);\n\n    // Utility columns bracket the data columns, in registration order (see `leadColumns`). Their widths\n    // are px, not rem: they must fit their control (a 24px button / 16px checkbox plus the cell's 4px\n    // inline padding) regardless of the host app's root font size. A trailing one goes after the filler,\n    // so the slack sits between the data and it rather than pushing it off the panel's edge.\n    const leads = this.leadColumns().map((lead) => lead.width);\n    const trails = this.trailColumns().map((trail) => trail.width);\n\n    return {\n      template: [...leads, ...tracks, ...(fixed ? [FILLER_TRACK] : []), ...trails].join(' '),\n      fixed,\n    };\n  });\n\n  /** The `grid-template-columns` value for the visible columns (plus a leading expander track when expandable). */\n  public templateColumns = computed(() => this.columnTracks().template);\n\n  private resolvedPageHeaderColumns = signal<string | null>(null);\n\n  protected pageHeaderColumns = computed(() => this.resolvedPageHeaderColumns() ?? this.templateColumns());\n\n  /**\n   * Whether a trailing filler track is in play. It carries an empty cell in every row so the header\n   * band, row dividers and vertical rules run to the panel's edge instead of stopping at the last\n   * rigid column.\n   */\n  protected hasFiller = computed(() => this.columnTracks().fixed);\n\n  // Set while the sort the user just asked for renders, cleared once its animation has run. A sort that\n  // arrives from a URL, a restored state or a bound source mounts the arrow too, and that one has to\n  // appear already there rather than fade in over a table the reader is still taking in.\n  private sortGesture = signal(false);\n  private sortGestureReset: Subscription | undefined;\n\n  /** The arrow's enter animation, empty unless the sort was a gesture on this table. */\n  protected sortIndicatorEnter = computed(() => (this.sortGesture() ? 'et-table-sort-indicator--enter' : ''));\n\n  /** The same for the arrow of a column the gesture unsorted. */\n  protected sortIndicatorLeave = computed(() => (this.sortGesture() ? 'et-table-sort-indicator--leave' : ''));\n\n  /** The serializable, versioned table state - column order, visibility, sort, filters and feature slices. */\n  public state = computed<TableState>(() => {\n    const sort = this.sort();\n    const multiSorted = sort.length > 1;\n    const sortByKey = new Map(sort.map((entry, index) => [entry.key, { direction: entry.direction, index }]));\n    const filtersByKey = new Map(this.filters().map((entry) => [entry.key, entry.values]));\n\n    const widths = this.columnWidths();\n\n    const columns = this.orderedColumns().map((column) => {\n      const entry: TableColumnState = { key: column.key, hidden: this.hiddenColumns().has(column.key) };\n      const columnSort = sortByKey.get(column.key);\n      const columnFilter = filtersByKey.get(column.key);\n\n      if (columnSort) {\n        entry.sort = columnSort.direction;\n\n        if (multiSorted) entry.sortPriority = columnSort.index;\n      }\n\n      if (columnFilter?.length) entry.filterValues = columnFilter;\n\n      if (widths[column.key] !== undefined) entry.width = widths[column.key];\n\n      return entry;\n    });\n\n    // Whatever the imported features own (a selection, the expanded rows). Absent when no feature\n    // contributed, so a plain table's state is exactly what it was before the bag existed.\n    const slices = this.stateSliceList();\n    const features: Record<string, unknown> = {};\n\n    for (const slice of slices) {\n      const value = slice.read();\n\n      if (value !== undefined) features[slice.key] = value;\n    }\n\n    const hasFeatures = Object.keys(features).length > 0;\n\n    return {\n      v: 3,\n      columns,\n      ...(hasFeatures ? { features } : {}),\n    };\n  });\n\n  /**\n   * The rendered rows - client-filtered (column filters and {@link quickFilter}) then client-sorted for\n   * whichever of `filterMode`/`sortMode` is `'client'`.\n   */\n  public rows = computed(() => {\n    const columns = this.columns();\n    // A bound source owns the rows; `data` is what a table without one renders.\n    let result: readonly T[] = this.rowsSource()?.rows() ?? this.data();\n\n    if (this.resolvedFilterMode() !== 'server') {\n      result = filterRows({ rows: result, filters: this.filters(), columns });\n      result = quickFilterRows({ rows: result, query: this.quickFilter(), columns: this.visibleColumnRecord() });\n    }\n\n    if (this.resolvedSortMode() !== 'server') {\n      result = sortRows({ rows: result, sort: this.sort(), columns });\n    }\n\n    return [...result];\n  });\n\n  /** The rows actually rendered - a registered row window's slice (virtual scrolling), or all of them. */\n  public renderedRows = computed<readonly T[]>(() => {\n    const window = this.rowWindow();\n    const rows = this.rows();\n\n    return window ? (window.slice(rows) as readonly T[]) : rows;\n  });\n\n  /** Absolute index of the first rendered row, so cell contexts keep true row indices while windowed. */\n  public rowIndexOffset = computed(() => this.rowWindow()?.offset() ?? 0);\n\n  /** The failure in effect: the `error` input, else whatever a bound {@link rowsSource} reports. */\n  public resolvedError = computed(() => this.error() ?? this.rowsSource()?.error?.() ?? null);\n\n  /** Whether there is a failure to show - the error state then stands in for the body. */\n  public hasError = computed(() => this.resolvedError() !== null && this.resolvedError() !== undefined);\n\n  /** Whether rows are loading: the `loading` input, or a bound {@link rowsSource} with a request out. */\n  public resolvedLoading = computed(() => this.loading() || (this.rowsSource()?.loading?.() ?? false));\n\n  /**\n   * How many rows exist in total, when a bound {@link rowsSource} knows - `null` for a table given its\n   * rows outright, which by definition holds all of them. Nothing renders it: it exists so a\n   * [CSV export](/components/table#exporting-more-than-the-loaded-page) can tell that it would write\n   * one page of many.\n   */\n  public totalRows = computed(() => this.rowsSource()?.total?.() ?? null);\n\n  /** Loading with nothing to show yet: placeholder rows stand in for the rows that are coming. */\n  protected showPlaceholderRows = computed(() => this.resolvedLoading() && !this.hasError() && !this.rows().length);\n\n  private refetchingOverRows = computed(() => this.resolvedLoading() && !this.hasError() && this.rows().length > 0);\n\n  /**\n   * Loading over rows that are already on screen: they stay, and the busy bar carries the news. This\n   * is the case a paged/refetching table is in most of the time, and blanking it there would cost the\n   * user their place for no gain. Deferred, because a page that arrives quickly would otherwise leave\n   * nothing behind but a flicker under the header.\n   */\n  protected showBusyBar = signalDeferredLoading(this.refetchingOverRows);\n\n  /** Whether body rows are cards - a box painted on a surface of its own (see `.et-table-row--card`). */\n  protected cardRows = computed(() => this.appearance() === 'cards');\n\n  /**\n   * Whether a body row gets a box of its own instead of being layout-transparent - a subgrid spanning\n   * every track (see `.et-table-row--box`).\n   *\n   * Opt-in, because a box changes the containing block of everything positioned inside a row: a pinned\n   * column, the row's own link. A card row needs one to paint, and a stretched row link needs one to\n   * stretch over.\n   */\n  protected rowBox = computed(() => this.cardRows() || !!this.rowLink());\n\n  /**\n   * The column whose cell hosts a row's link: the first visible one that doesn't hold controls of its\n   * own, else the first visible one. Its content is what names the link, so it should be the column a\n   * reader identifies the row by - which is what the leftmost column usually is.\n   */\n  private linkColumnKey = computed(() => {\n    if (!this.rowLink()) return null;\n\n    const columns = this.visibleColumns();\n\n    return (columns.find((column) => !column.interactive) ?? columns[0])?.key ?? null;\n  });\n\n  /** The leading utility cells, with the pinning every row kind applies to them. */\n  protected leadCells = computed<TableLeadCellVm[]>(() => {\n    const pinning = this.columnPinning();\n\n    return this.leadColumns().map((lead) => ({\n      key: lead.key,\n      cellClass: lead.cellClass,\n      ...(pinning?.leadPinning(lead.key) ?? NO_LEAD_PIN),\n      lead,\n    }));\n  });\n\n  /** The trailing utility cells - the same, pinned to the trailing edge instead. */\n  protected trailCells = computed<TableLeadCellVm[]>(() => {\n    const pinning = this.columnPinning();\n\n    return this.trailColumns().map((trail) => ({\n      key: trail.key,\n      cellClass: trail.cellClass,\n      ...(pinning?.trailPinning(trail.key) ?? NO_LEAD_PIN),\n      lead: trail,\n    }));\n  });\n\n  protected headerCellVms = computed<TableHeaderCellVm<T>[]>(() => {\n    const pinning = this.columnPinning();\n    const templates = this.columnTemplates().header;\n    const labels = this.resolvedLabels();\n    const obscured = this.obscuredColumns();\n    const sort = this.sort();\n\n    return this.visibleColumns().map((column) => {\n      const direction = this.sortDirection(column.key);\n      const priority = this.sortPriority(column.key);\n      // The header announces what the *next* activation does, and the cycle is asc → desc → clear.\n      const next = direction === null ? 'asc' : direction === 'asc' ? 'desc' : null;\n\n      return {\n        ...(pinning?.cellPinning(column.key) ?? NO_PIN),\n        key: column.key,\n        column,\n        align: column.align ?? 'start',\n        sortable: !!column.sortable,\n        disabled: !!column.disabled,\n        ariaSort: column.sortable\n          ? direction === 'asc'\n            ? 'ascending'\n            : direction === 'desc'\n              ? 'descending'\n              : 'none'\n          : null,\n        sortLabel: column.sortable ? labels.sortAction(column.header ?? column.key, next) : null,\n        direction,\n        priority,\n        priorityLabel: priority === null ? null : labels.sortPriority(priority, sort.length),\n        template: templates.get(column.key) ?? null,\n        obscured: obscured.has(column.key),\n      };\n    });\n  });\n\n  protected footerCells = computed<TableFooterCellVm[]>(() => {\n    const pinning = this.columnPinning();\n    const templates = this.columnTemplates().footer;\n\n    return this.visibleColumns().map((column) => ({\n      ...(pinning?.cellPinning(column.key) ?? NO_PIN),\n      key: column.key,\n      align: column.align ?? 'start',\n      template: templates.get(column.key) ?? null,\n    }));\n  });\n\n  /** Spacer sizes standing in for the rows a window leaves out, or `null` when every row renders. */\n  protected spacers = computed(() => {\n    const window = this.rowWindow();\n\n    if (!window || !this.rows().length) return null;\n\n    return { start: window.paddingStart(), end: window.paddingEnd() };\n  });\n\n  protected bodyRows = computed<TableBodyRowVm<T>[]>(() => {\n    const pinning = this.columnPinning();\n    const templates = this.columnTemplates().cell;\n    const columns = this.visibleColumns();\n    const leads = this.leadCells();\n    const trails = this.trailCells();\n    const cellState = this.cellState();\n    const indexOffset = this.rowIndexOffset();\n    const detail = this.rowDetail();\n    // At most one cell is ever open, so the edit templates are only looked up once there is one.\n    const editing = this.cellEditing()?.cell() ?? null;\n    const editTemplates = editing ? this.columnTemplates().cellEdit : null;\n    const rowLink = this.rowLink();\n    const linkColumn = this.linkColumnKey();\n    const navigation = this.rowNavigation();\n    const rendered = this.renderedRows();\n    // A footer row separates itself with this rule, and an end spacer stands in for rows still below.\n    const endsWithRows = !this.hasFooter() && !this.spacers()?.end;\n\n    return rendered.map((row, index) => {\n      const key = this.rowIdentity(row);\n      const link = rowLink?.(row) ?? null;\n      // A string is an href as given; commands are a URL only a navigator can build, so a table without\n      // one renders no link at all rather than a wrong one (see the dev-mode check in the constructor).\n      const href = link === null ? null : typeof link === 'string' ? link : (navigation?.href(link) ?? null);\n\n      return {\n        row,\n        key,\n        index: indexOffset + index,\n        link,\n        href,\n        linkLabelId: `${this.LINK_ID_PREFIX}-${indexOffset + index}`,\n        classes: [...leads, ...trails]\n          .map((utility) => utility.lead.rowClass?.(row))\n          .filter((className): className is string => !!className)\n          .join(' '),\n        stripe: (indexOffset + index) % 2 === 1,\n        last: endsWithRows && index === rendered.length - 1,\n        detail: detail?.isOpen(row) ? detail : null,\n        leads,\n        trails,\n        cells: columns.map((column) => {\n          const value = column.value(row);\n\n          // The callback may answer with the bare state or with a message alongside it.\n          const answer = cellState?.(row, column.key) ?? null;\n          const state = typeof answer === 'string' ? answer : (answer?.state ?? null);\n          const editTemplate =\n            editing && editing.row === key && editing.column === column.key\n              ? (editTemplates?.get(column.key) ?? null)\n              : null;\n\n          return {\n            ...(pinning?.cellPinning(column.key) ?? NO_PIN),\n            key: column.key,\n            align: column.align ?? 'start',\n            linkHost: href !== null && column.key === linkColumn,\n            interactive: !!column.interactive,\n            state,\n            message: typeof answer === 'string' ? null : (answer?.message ?? null),\n            template: templates.get(column.key) ?? null,\n            value,\n            context: { $implicit: row, value, index: indexOffset + index },\n            edit: editTemplate && editing ? { template: editTemplate, context: editing.context } : null,\n          };\n        }),\n      };\n    });\n  });\n\n  /**\n   * The keys of the currently hidden columns, in declared order. Nothing in the table's own chrome\n   * shows a hidden column - the column menu's \"Hide column\" takes one away and has no way back - so\n   * this is what an app builds its own \"columns\" chooser from, together with {@link allColumns},\n   * {@link setColumnVisible} and {@link showAllColumns}.\n   *\n   * @example\n   * // a menu of every column, checked when visible\n   * for (const column of table.allColumns()) {\n   *   … table.isColumnVisible(column.key) … table.toggleColumnVisibility(column.key) …\n   * }\n   */\n  public hiddenColumnKeys = computed(() =>\n    this.orderedColumns()\n      .filter((column) => this.hiddenColumns().has(column.key))\n      .map((column) => column.key),\n  );\n\n  /**\n   * Every declared column in the current order, hidden ones included - the counterpart to\n   * {@link visibleColumns}, and the list a \"columns\" chooser iterates.\n   */\n  public allColumns = computed(() => this.orderedColumns());\n\n  // Which feature owns the drag each live pointer started - see claimPointerGesture.\n  private pointerGestureClaims = new Map<number, string>();\n\n  constructor() {\n    mountEasingTokens();\n    const styleManager = injectStyleManager();\n\n    // The row box layout, the card row's surface/ring/corner chrome and the row-link anchor do nothing\n    // for a table that renders neither cards nor a row link, so they arrive only once `rowBox` turns\n    // true - see TableDetailStylesComponent for the same pattern. Mounted once and left mounted:\n    // switching the feature off never needs to reclaim it.\n    effect(() => {\n      if (this.rowBox()) styleManager.mount(TableRowBoxStylesComponent);\n    });\n\n    effect(() => {\n      if (this.multiSort() !== false) styleManager.mount(TableSortPriorityStylesComponent);\n    });\n\n    // A detail template with nothing to render it looks like a broken template rather than a missing\n    // import, so name the mistake. Deferred to an effect because a feature registers from its own\n    // constructor, which runs after the table's - and it asks whether one registered at all rather\n    // than whether it is enabled, so `[etTableRowExpansion]=\"{ enabled: false }\"` stays legal.\n    if (isDevMode()) {\n      effect(() => {\n        if (!this.expandedRowTemplate() || this.rowDetailList().length) return;\n\n        throw new RuntimeError(\n          TABLE_ERROR_CODES.MISSING_ROW_EXPANSION,\n          '[et-table] [expandedRowTemplate] needs the row-expansion feature to render it. Add `etTableRowExpansion` to the table and import TABLE_ROW_EXPANSION_IMPORTS.',\n          { element: this.elementRef.nativeElement },\n        );\n      });\n\n      // Router commands are a URL only the router can build, so such a row would otherwise render as a\n      // row that looks like a link and leads nowhere. Asked of the rendered rows rather than of the\n      // callback, since only a returned value says which form a table uses.\n      effect(() => {\n        const rowLink = this.rowLink();\n\n        if (!rowLink || this.rowNavigationList().length) return;\n        if (!this.renderedRows().some((row) => Array.isArray(rowLink(row)))) return;\n\n        throw new RuntimeError(\n          TABLE_ERROR_CODES.MISSING_ROW_ROUTER_LINK,\n          '[et-table] [rowLink] answered with router commands, which need the router feature to resolve them. Add `etTableRowRouterLink` to the table and import TABLE_ROW_ROUTER_LINK_IMPORTS, or answer with an href string instead.',\n          { element: this.elementRef.nativeElement },\n        );\n      });\n\n      // A source's `sort`/`filters` signal and its setter are one contract the optional members cannot\n      // express: the table writes through the setter and reads the signal back. Published without the\n      // setter, the signal wins every mirror pass and the control the user clicks does nothing at all.\n      effect(() => {\n        const source = this.rowsSource();\n\n        if (!source) return;\n\n        for (const [state, setter, columnFlag] of UNPAIRED_ROWS_SOURCE_CHECKS) {\n          if (!source[state] || source[setter]) continue;\n          if (!this.columnDefs().some((column) => column[columnFlag])) continue;\n\n          throw new RuntimeError(\n            TABLE_ERROR_CODES.UNPAIRED_ROWS_SOURCE_STATE,\n            `[et-table] [rowsSource] publishes \\`${state}\\` but no \\`${setter}\\`, so the table can never hand a change back to it and the ${columnFlag} columns would do nothing. Add \\`${setter}\\`, or drop \\`${state}\\` and let the table own the state.`,\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n\n    // A bound rows source owns the sort/filter state, but everything here - features, `state()`, the\n    // header models - reads `sort()` / `filters()`. Mirror the source into them rather than teaching\n    // every reader about two sources of truth. Writes go the other way (see `applySort`), and each\n    // branch only sets when the value actually differs, so the two can't ping-pong.\n    effect(() => {\n      const source = this.rowsSource();\n\n      if (!source) return;\n\n      const sort = source.sort?.();\n      const filters = source.filters?.();\n\n      untracked(() => {\n        if (sort && !sameJson(sort, this.sort())) this.sort.set([...sort]);\n        if (filters && !sameJson(filters, this.filters())) this.filters.set([...filters]);\n      });\n    });\n\n    // The fades depend on the live scroll offset, which no signal tracks - recheck on scroll, and\n    // whenever the host or the tracks resize (either can change what overflows).\n    effect(() => {\n      this.hostDimensions();\n      this.templateColumns();\n      this.pageStickyHeader();\n      afterNextRender({ read: () => this.syncScrollState() }, { injector: this.injector });\n    });\n  }\n\n  protected syncScrollState() {\n    const element = this.scrollElement();\n    // `scrollLeft` counts down from 0 in RTL, so compare distances rather than raw offsets.\n    const offset = Math.abs(element.scrollLeft);\n    const remaining = element.scrollWidth - element.clientWidth - offset;\n    const next = { start: offset > SCROLL_FADE_EPSILON, end: remaining > SCROLL_FADE_EPSILON };\n    const current = this.scrollFades();\n\n    if (next.start !== current.start || next.end !== current.end) this.scrollFades.set(next);\n\n    const below = element.scrollHeight - element.clientHeight - element.scrollTop;\n    const shadows = {\n      blockStart: element.scrollTop > SCROLL_FADE_EPSILON,\n      blockEnd: below > SCROLL_FADE_EPSILON,\n    };\n    const currentShadows = this.blockScrollShadows();\n\n    if (shadows.blockStart !== currentShadows.blockStart || shadows.blockEnd !== currentShadows.blockEnd) {\n      this.blockScrollShadows.set(shadows);\n    }\n\n    this.syncPageHeaderScroll(element);\n    this.syncObscuredColumns();\n  }\n\n  /**\n   * A template registered for one of a column's slots, or `null`. Part of the feature contract - the\n   * filter menu reads its option template through it; consumers register templates instead.\n   */\n  public columnTemplate(slot: TableTemplateSlot, key: string): TemplateRef<unknown> | null {\n    return this.columnTemplates()[slot].get(key) ?? null;\n  }\n\n  /**\n   * Called by an `etTableCell` / `etTableHeaderCell` / `etTableFooterCell` template to render itself\n   * into a column's cells. Part of the template contract; consumers never call this.\n   */\n  public registerColumnTemplate(registration: TableColumnTemplate) {\n    this.columnTemplateList.update((templates) => [...templates, registration]);\n  }\n\n  /**\n   * Called by a feature to contribute its own serializable state to `state()` / `restoreState()`. Part\n   * of the feature contract - see {@link TableFeatureHost}; consumers never call this.\n   */\n  public registerStateSlice(slice: TableStateSlice) {\n    this.stateSliceList.update((slices) => [...slices, slice]);\n  }\n\n  /**\n   * Called by `etTableCellErrorTooltip` to replace the mark drawn in failed cells. Part of the feature\n   * contract - see {@link TableFeatureHost}; consumers never call this.\n   */\n  public registerCellErrorMark(mark: TableCellErrorMark) {\n    this.cellErrorMarkList.update((marks) => [...marks, mark]);\n  }\n\n  /** Counterpart to {@link registerColumnTemplate}, called when the template's view is destroyed. */\n  public unregisterColumnTemplate(registration: TableColumnTemplate) {\n    this.columnTemplateList.update((templates) => templates.filter((entry) => entry !== registration));\n  }\n\n  /**\n   * Called by an opt-in feature (e.g. `etTableFilters`) to stamp a component into every header cell.\n   * Part of the feature contract - see `TableFeatureHost`; consumers never call this.\n   */\n  public registerHeaderAdornment(adornment: TableHeaderAdornment) {\n    this.headerAdornmentList.update((adornments) => [...adornments, adornment]);\n  }\n\n  /**\n   * Called by an opt-in feature to add a leading utility column (e.g. `etTableSelection`). Part of the\n   * feature contract; consumers never call this.\n   */\n  public registerLeadColumn(column: TableLeadColumn) {\n    this.leadColumnList.update((columns) => [...columns, column]);\n  }\n\n  /**\n   * Called by an opt-in feature to window the rendered rows (`etTableVirtualScroll`). Part of the\n   * feature contract; consumers never call this.\n   */\n  public registerRowWindow(window: TableRowWindow) {\n    if (isDevMode() && this.registeredRowWindow()) {\n      throw new RuntimeError(\n        TABLE_ERROR_CODES.DUPLICATE_ROW_WINDOW,\n        '[et-table] Two features tried to window the rows. Use only one row-windowing feature per table.',\n        { element: this.elementRef.nativeElement },\n      );\n    }\n\n    this.registeredRowWindow.set(window);\n  }\n\n  /**\n   * Called by an opt-in feature to render its own floating UI inside the table (`etTableReorder`'s\n   * drag ghost). Part of the feature contract; consumers never call this.\n   */\n  public registerLayer(layer: TableLayer) {\n    this.layerList.update((layers) => [...layers, layer]);\n  }\n\n  /**\n   * Called by an opt-in feature to render a full-width row under expanded rows (`etTableRowExpansion`).\n   * Part of the feature contract; consumers never call this.\n   */\n  public registerRowDetail(detail: TableRowDetail) {\n    this.rowDetailList.update((list) => [...list, detail]);\n  }\n\n  /**\n   * Called by an opt-in feature to render a row above the column headers (`etTableGroupHeaders`). Part\n   * of the feature contract; consumers never call this.\n   */\n  public registerHeaderRow(row: TableHeaderRow) {\n    this.headerRowList.update((rows) => [...rows, row]);\n  }\n\n  /** Use the split page-sticky header layout. Part of the feature contract; consumers never call this. */\n  public registerPageStickyHeader(header: TablePageStickyHeader) {\n    this.pageStickyHeaderList.update((headers) => [...headers, header]);\n  }\n\n  /**\n   * Called by an opt-in feature to render the loading body (`etTableSkeleton`). Part of the feature\n   * contract; consumers never call this.\n   */\n  public registerBodyPlaceholder(placeholder: TableBodyPlaceholder) {\n    this.bodyPlaceholderList.update((list) => [...list, placeholder]);\n  }\n\n  /**\n   * Called by an opt-in feature to fill a cell that is loading on its own (`etTableSkeleton`). Part of\n   * the feature contract; consumers never call this.\n   */\n  public registerCellPlaceholder(placeholder: TableCellPlaceholder) {\n    this.cellPlaceholderList.update((list) => [...list, placeholder]);\n  }\n\n  /**\n   * Called by an opt-in feature to pin columns to the inline edges (`etTableStickyColumns`). Part of the\n   * feature contract; consumers never call this.\n   */\n  public registerColumnPinning(pinning: TableColumnPinning) {\n    this.columnPinningList.update((list) => [...list, pinning]);\n  }\n\n  /**\n   * Called by an opt-in feature to resolve and follow row links given as router commands\n   * (`etTableRowRouterLink`). Part of the feature contract; consumers never call this.\n   */\n  public registerRowNavigation(navigation: TableRowNavigation) {\n    this.rowNavigationList.update((list) => [...list, navigation]);\n  }\n\n  /** The rendered header cells of the leading utility columns. Part of the feature contract. */\n  public leadHeaderCellElements() {\n    return this.leadHeaderCells().map((ref) => ref.nativeElement);\n  }\n\n  /** The leading utility columns, in render order. Part of the feature contract. */\n  public leadColumnsMeta() {\n    return this.leadColumns().map((lead) => ({ key: lead.key, cellClass: lead.cellClass }));\n  }\n\n  /** The rendered header cells of the trailing utility columns. Part of the feature contract. */\n  public trailHeaderCellElements() {\n    return this.trailHeaderCells().map((ref) => ref.nativeElement);\n  }\n\n  /** The trailing utility columns, in render order. Part of the feature contract. */\n  public trailColumnsMeta() {\n    return this.trailColumns().map((trail) => ({ key: trail.key, cellClass: trail.cellClass }));\n  }\n\n  /** Whether a trailing slack track is in play. Part of the feature contract. */\n  public hasFillerTrack() {\n    return this.hasFiller();\n  }\n\n  /** Whether rows have a box of their own (a card, a row link). Part of the feature contract. */\n  public hasRowBox() {\n    return this.rowBox();\n  }\n\n  /** Whether rows are cards. Part of the feature contract. */\n  public hasCardRows() {\n    return this.cardRows();\n  }\n\n  /** The `expandedRowTemplate` input, type-erased for the feature contract. */\n  public detailTemplate() {\n    return this.expandedRowTemplate() ?? null;\n  }\n\n  /**\n   * Called by an opt-in feature to take over cell focus (`etTableKeyboardNav`). Part of the feature\n   * contract; consumers never call this.\n   */\n  public registerCellNavigation(navigation: TableCellNavigation) {\n    this.cellNavigationList.update((list) => [...list, navigation]);\n  }\n\n  /**\n   * Called by an opt-in feature to edit cells in place (`etTableInlineEdit`). Part of the feature\n   * contract; consumers never call this.\n   */\n  public registerCellEditing(editing: TableCellEditing) {\n    this.cellEditingList.update((list) => [...list, editing]);\n  }\n\n  /**\n   * Offer a cell to a registered editing feature. Part of the feature contract - it is how\n   * `etTableKeyboardNav` hands `Enter` over to `etTableInlineEdit` without either knowing about the\n   * other. `false` when nothing took it.\n   */\n  public editCell(rowIndex: number, columnIndex: number) {\n    return this.cellEditing()?.editCell(rowIndex, columnIndex) ?? false;\n  }\n\n  /** What a pinned block covers at each inline edge. Part of the feature contract. */\n  public frozenInsets() {\n    return this.fadeInset();\n  }\n\n  /**\n   * Claim the drag a pointer started for one feature. Part of the feature contract - it is how\n   * `etTableReorder` keeps a header drag away from `etTableDragScroll` without either knowing about\n   * the other. Consumers never call this.\n   */\n  public claimPointerGesture(event: PointerEvent, feature: string) {\n    const { pointerId } = event;\n\n    this.pointerGestureClaims.set(pointerId, feature);\n\n    // Released off the document, not off the table: a pointer let go outside the table sends its\n    // `pointerup` nowhere near this element, and a claim left behind would block the next gesture\n    // that reuses the id.\n    merge(fromEvent<PointerEvent>(this.document, 'pointerup'), fromEvent<PointerEvent>(this.document, 'pointercancel'))\n      .pipe(\n        filter((ended) => ended.pointerId === pointerId),\n        take(1),\n        tap(() => this.pointerGestureClaims.delete(pointerId)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /** Which feature claimed this pointer's drag, or `null`. Part of the feature contract. */\n  public pointerGestureClaim(event: PointerEvent) {\n    return this.pointerGestureClaims.get(event.pointerId) ?? null;\n  }\n\n  /** A rendered body cell, for a feature measuring real row height. Part of the feature contract. */\n  public firstBodyCellElement() {\n    return this.bodyCells()[0]?.nativeElement ?? null;\n  }\n\n  /** Absolute index of the first rendered row. Part of the feature contract. */\n  public renderedRowOffset() {\n    return this.rowIndexOffset();\n  }\n\n  /** Every rendered body cell, rows major. Part of the feature contract. */\n  public bodyCellElements() {\n    return this.bodyCells().map((cell) => cell.nativeElement);\n  }\n\n  /**\n   * The rendered body cell at an absolute row index and visible-column index. Part of the feature\n   * contract. `null` when the row is outside a window's rendered range - ask {@link scrollRowIntoView}\n   * for it first.\n   */\n  public bodyCellElementAt(rowIndex: number, columnIndex: number) {\n    const columns = this.visibleColumns().length;\n    const rendered = rowIndex - this.rowIndexOffset();\n\n    if (rendered < 0 || rendered >= this.renderedRows().length) return null;\n    if (columnIndex < 0 || columnIndex >= columns) return null;\n\n    // `bodyCells` is every rendered data cell in DOM order, rows major - lead cells carry no `#bodyCell`\n    // ref, so the arithmetic doesn't have to know how many of them there are.\n    return this.bodyCells()[rendered * columns + columnIndex]?.nativeElement ?? null;\n  }\n\n  /**\n   * Bring an absolute row index into view. Part of the feature contract. Returns `true` when a\n   * registered window did it - the row is then only rendered after the next change detection, which is\n   * what the caller has to wait for.\n   */\n  public scrollRowIntoView(rowIndex: number) {\n    const window = this.rowWindow();\n\n    if (window?.scrollToIndex) {\n      window.scrollToIndex(rowIndex);\n\n      return true;\n    }\n\n    // Every row is rendered, so the element itself knows how to get on screen. `nearest` keeps a cell\n    // that is already visible exactly where it is instead of jumping it to an edge.\n    this.bodyCellElementAt(rowIndex, 0)?.parentElement?.scrollIntoView({ block: 'nearest' });\n\n    return false;\n  }\n\n  /** How many rows fit the scroll viewport. Part of the feature contract - the PageUp/PageDown step. */\n  public rowsPerPage() {\n    const rowHeight = this.firstBodyCellElement()?.offsetHeight ?? 0;\n    const viewport = this.scrollElement().clientHeight;\n\n    if (!rowHeight || !viewport) return 1;\n\n    return Math.max(1, Math.floor(viewport / rowHeight) - 1);\n  }\n\n  /**\n   * Apply a previously captured {@link TableState} - column order, visibility, sort, filters and feature\n   * slices. A bound {@link rowsSource} keeps the sort and the filters it publishes; only the layout and\n   * the feature slices are restored onto such a table. A state this build cannot read (a hand-edited\n   * stored setup or link) is ignored rather than partially applied - see `isRestorableTableState`.\n   */\n  public restoreState(next: TableState) {\n    if (!isRestorableTableState(next)) return;\n\n    this.restoredColumns = next.columns.map((column) => ({ key: column.key, hidden: column.hidden }));\n    this.columnOrder.set(next.columns.map((column) => column.key));\n    this.hiddenColumns.set(new Set(next.columns.filter((column) => column.hidden).map((column) => column.key)));\n\n    const widths: Record<string, number> = {};\n\n    for (const column of next.columns) {\n      if (typeof column.width === 'number') widths[column.key] = column.width;\n    }\n\n    this.columnWidths.set(widths);\n\n    // Whatever a bound source publishes, it owns (see the constructor). Writing it from a restored\n    // state would leave the mirror holding a value the source never had: the source does not change,\n    // so the effect does not re-run to correct it. A layout-only state would silently drop the sort\n    // arrow off a header whose rows are still sorted.\n    const source = this.rowsSource();\n\n    if (!source?.sort) {\n      const sort = next.columns\n        .filter((column) => column.sort)\n        .sort((a, b) => (a.sortPriority ?? 0) - (b.sortPriority ?? 0))\n        .map((column) => ({ key: column.key, direction: column.sort as TableSortDirection }));\n\n      this.sort.set(sort);\n    }\n\n    if (!source?.filters) {\n      const filters = next.columns\n        .filter((column) => column.filterValues?.length)\n        .map((column) => ({ key: column.key, values: column.filterValues ?? [] }));\n\n      this.filters.set(filters);\n    }\n\n    // Hand each feature its own slice back. A slice with no matching feature (it wasn't imported here)\n    // is left alone rather than dropped, so a round-trip through a table that lacks a feature doesn't\n    // erase that feature's state elsewhere.\n    for (const slice of this.stateSliceList()) {\n      const value = next.features?.[slice.key];\n\n      if (value !== undefined) slice.write(value);\n    }\n  }\n\n  /** The sort direction for a column key, or `null` when it isn't sorted. */\n  public sortDirection(key: string): TableSortDirection | null {\n    return this.sort().find((entry) => entry.key === key)?.direction ?? null;\n  }\n\n  /** A column's 1-based place in the sort while more than one key is sorted, else `null`. */\n  public sortPriority(key: string): number | null {\n    const sort = this.sort();\n\n    if (sort.length < 2) return null;\n\n    const index = sort.findIndex((entry) => entry.key === key);\n\n    return index === -1 ? null : index + 1;\n  }\n\n  /**\n   * Cycle a column's sort: unsorted → ascending → descending → unsorted. A sort that layers (see\n   * {@link multiSort}) keeps the other keys and the column's own place among them; otherwise the\n   * column replaces the sort.\n   */\n  public toggleSort(key: string, gesture: TableSortGesture = {}) {\n    const direction = this.sortDirection(key);\n    const next = direction === null ? 'asc' : direction === 'asc' ? 'desc' : null;\n\n    this.applySort(this.nextSort({ key, direction: next, additive: !!gesture.additive }));\n  }\n\n  /**\n   * Set a column's sort direction outright, or clear it with `null` - what a column menu's explicit\n   * \"Sort ascending / descending / Clear\" entries need, where {@link toggleSort}'s cycle would make\n   * the result depend on the column's current state. Layers like a plain header activation does.\n   */\n  public setSort(key: string, direction: TableSortDirection | null) {\n    this.applySort(this.nextSort({ key, direction, additive: false }));\n  }\n\n  protected activateSortHeader(key: string, event: Event) {\n    if (event instanceof KeyboardEvent) event.preventDefault();\n\n    const additive = (event instanceof MouseEvent || event instanceof KeyboardEvent) && event.shiftKey;\n\n    this.toggleSort(key, { additive });\n  }\n\n  /** Whether a column carries a user width override (a resize), i.e. whether there is one to reset. */\n  public hasColumnWidthOverride(key: string) {\n    return this.columnWidths()[key] !== undefined;\n  }\n\n  /** The selected filter values for a column key (empty when unfiltered). */\n  public filterValuesFor(key: string): unknown[] {\n    return this.filters().find((entry) => entry.key === key)?.values ?? [];\n  }\n\n  /** Replace a column's selected filter values (drops the entry when empty). */\n  public setFilterValues(key: string, values: unknown[]) {\n    const others = this.filters().filter((entry) => entry.key !== key);\n    const next = values.length ? [...others, { key, values }] : others;\n    const source = this.rowsSource();\n\n    source?.setFilters?.(next);\n\n    // See `applySort`: without a `filters` signal on the source nothing writes the value back.\n    if (!source?.filters) this.filters.set(next);\n  }\n\n  /** Whether a column is currently visible. */\n  public isColumnVisible(key: string) {\n    return !this.hiddenColumns().has(key);\n  }\n\n  /** Show or hide a column. */\n  public setColumnVisible(key: string, visible: boolean) {\n    this.hiddenColumns.update((hidden) => {\n      const next = new Set(hidden);\n\n      if (visible) {\n        next.delete(key);\n      } else {\n        next.add(key);\n      }\n\n      return next;\n    });\n  }\n\n  /** Toggle a column's visibility. */\n  public toggleColumnVisibility(key: string) {\n    this.setColumnVisible(key, !this.isColumnVisible(key));\n  }\n\n  /** Show every hidden column again, in one go. */\n  public showAllColumns() {\n    this.hiddenColumns.update((hidden) => (hidden.size ? new Set<string>() : hidden));\n  }\n\n  /** Move a column to a new index within the full column order. */\n  public moveColumn(key: string, toIndex: number) {\n    this.columnOrder.update((order) => {\n      const from = order.indexOf(key);\n\n      if (from === -1) return order;\n\n      const next = [...order];\n      next.splice(from, 1);\n      next.splice(Math.max(0, Math.min(toIndex, next.length)), 0, key);\n\n      return next;\n    });\n  }\n\n  /**\n   * Emit {@link rowClick} for a row (click or keyboard), unless the activation came from interactive\n   * content inside it. Takes a plain `Event`: Angular types `$event` for the `keydown.enter` /\n   * `keydown.space` pseudo-events that way, and the keyboard case is narrowed below.\n   */\n  protected activateRow(row: T, event: Event) {\n    if (!this.rowInteractive() || this.originatesFromInteractive(event)) return;\n    if (event instanceof KeyboardEvent && event.key === 'Enter' && this.cellNavigation()) return;\n\n    // Enter/Space on a focused row shouldn't also scroll the page.\n    if (event instanceof KeyboardEvent) event.preventDefault();\n\n    this.rowClick.emit(row);\n  }\n\n  /**\n   * Emit `rowClick` for a `rowInteractive` table's row at an absolute index, the way Enter on a focused\n   * row does. Part of the feature contract: while cell navigation is on, Enter belongs to the cell first\n   * (an editor, a control to drill into) and the feature hands it here only when the cell has nothing of\n   * its own to open.\n   */\n  public activateRowAt(rowIndex: number) {\n    const row = this.rows()[rowIndex];\n\n    if (row === undefined || !this.rowInteractive()) return;\n\n    this.rowClick.emit(row);\n  }\n\n  /**\n   * Follow a row link the browser would otherwise load as a whole page. Only a link given as router\n   * commands is followed, and only on a plain left click - a middle or Ctrl/Cmd-click keeps the\n   * browser's own behaviour, which is the reason the row carries a real `href` at all.\n   */\n  protected activateRowLink(link: TableRowLink | null, event: MouseEvent) {\n    if (link === null || typeof link === 'string') return;\n\n    if (this.rowNavigation()?.navigate(link, event)) event.preventDefault();\n  }\n\n  /**\n   * Stable identity for row-keyed state (change tracking, expansion, selection): the string form of\n   * `rowKey` (so it matches its serialized form regardless of string/number), or the row reference.\n   */\n  public rowIdentity(row: T): unknown {\n    const rowKey = this.rowKey();\n\n    return rowKey ? String(rowKey(row)) : row;\n  }\n\n  /**\n   * Whether a `rowKey` is bound, i.e. whether {@link rowIdentity} is a stable string rather than the\n   * row reference - which is what a feature needs before it can serialize row-keyed state.\n   */\n  public hasRowKey() {\n    return this.rowKey() !== undefined;\n  }\n\n  /** The table's own element. Part of the feature contract (a feature is a directive on it). */\n  public get element() {\n    return this.elementRef.nativeElement;\n  }\n\n  /** The active scroll viewport. Part of the feature contract. */\n  public scrollElement() {\n    return this.scrollerRef()?.nativeElement ?? this.elementRef.nativeElement;\n  }\n\n  /** The visible columns, in render order. Part of the feature contract. */\n  public visibleColumnsMeta() {\n    return this.visibleColumns();\n  }\n\n  /** The grid itself, for a feature measuring the whole of it. Part of the feature contract. */\n  public gridElement() {\n    return this.gridRef()?.nativeElement ?? null;\n  }\n\n  /** The separate page-sticky header grid. Part of the feature contract. */\n  public pageHeaderGridElement() {\n    return this.headerGridRef()?.nativeElement ?? null;\n  }\n\n  /** Use the body grid's resolved column tracks for the page-sticky header. Part of the feature contract. */\n  public setPageHeaderColumns(columns: string | null) {\n    if (columns === this.resolvedPageHeaderColumns()) return;\n\n    this.resolvedPageHeaderColumns.set(columns);\n  }\n\n  /** The rendered header cells, ordered like {@link visibleColumnsMeta}. Part of the feature contract. */\n  public headerCellElements() {\n    return this.headerCells().map((ref) => ref.nativeElement);\n  }\n\n  /** The rendered body cells of one column. Part of the feature contract (reorder animates them). */\n  public bodyCellElementsFor(key: string) {\n    return this.bodyCells()\n      .map((ref) => ref.nativeElement)\n      .filter((cell) => cell.dataset['colKey'] === key);\n  }\n\n  /** Whether a live feature can pin columns at runtime - `etTableStickyColumns`. */\n  public canPinColumns() {\n    return !!this.columnPinning()?.pin;\n  }\n\n  /**\n   * The edge a column is pinned to - a runtime {@link pinColumn} pin, else its declared `sticky` - or\n   * `null`. Pinning can still be suspended on a narrow viewport, see {@link effectiveStickyOf}.\n   */\n  public columnPin(key: string): TableColumnPin | null {\n    const pins = this.columnPinning()?.pins?.() ?? {};\n\n    if (key in pins) return pins[key] ?? null;\n\n    return this.columnsByKey().get(key)?.sticky ?? null;\n  }\n\n  /**\n   * Pin a column to the `'start'` or `'end'` edge, or unpin it with `null` - on top of what the column\n   * declares, and carried in `state()`. Needs `etTableStickyColumns`, which does the pinning.\n   */\n  public pinColumn(key: string, side: TableColumnPin | null) {\n    const pinning = this.columnPinning();\n\n    if (!pinning?.pin) {\n      if (ngDevMode) {\n        throw new RuntimeError(\n          TABLE_ERROR_CODES.MISSING_STICKY_COLUMNS,\n          '[et-table] pinColumn() needs the sticky-columns feature to pin anything. Add `etTableStickyColumns` to the table and import TABLE_STICKY_COLUMNS_IMPORTS.',\n          { element: this.elementRef.nativeElement },\n        );\n      }\n\n      return;\n    }\n\n    pinning.pin(key, side);\n  }\n\n  /** A column's effective pinning, or `null` when unpinned/suppressed. Part of the feature contract. */\n  public effectiveStickyOf(key: string): 'start' | 'end' | null {\n    const pinning = this.columnPinning()?.cellPinning(key);\n\n    return pinning?.stickyStart ? 'start' : pinning?.stickyEnd ? 'end' : null;\n  }\n\n  /**\n   * Insert a column next to another in the full column order, keeping hidden columns in place. Part of\n   * the feature contract - `etTableReorder` commits a drop with it.\n   */\n  public moveColumnNextTo(key: string, target: { overKey: string; before: boolean }) {\n    this.columnOrder.update((order) => {\n      const next = order.filter((entry) => entry !== key);\n      const overIndex = next.indexOf(target.overKey);\n\n      if (overIndex === -1) return order;\n\n      next.splice(target.before ? overIndex : overIndex + 1, 0, key);\n\n      return next;\n    });\n  }\n\n  /**\n   * The column's current rendered header width in px. Part of the feature contract - `etTableResize`\n   * uses it as the baseline for a drag.\n   */\n  public renderedColumnWidth(key: string) {\n    const cell = this.headerCells().find((ref) => ref.nativeElement.getAttribute('data-col-key') === key);\n\n    return cell?.nativeElement.getBoundingClientRect().width ?? 0;\n  }\n\n  /**\n   * Override a column's width, clamped between a usable minimum and the table's own width - a column\n   * wider than the visible table only scrolls uselessly and makes it easy to strand the layout in a\n   * strange state. Stored in `state()` so it round-trips. Part of the feature contract.\n   */\n  public setColumnWidth(key: string, width: number) {\n    const max = this.scrollElement().clientWidth || Number.MAX_SAFE_INTEGER;\n    const clamped = Math.min(max, Math.max(this.minWidthOf(key), Math.round(width)));\n\n    this.columnWidths.update((widths) => ({ ...widths, [key]: clamped }));\n  }\n\n  /**\n   * The narrowest a column may be: its own `minWidth`, else {@link MIN_COLUMN_WIDTH}. One source for\n   * both floors a column has - the flexible track's, and how far a resize drag may go - so the two\n   * can't disagree.\n   */\n  public minWidthOf(key: string) {\n    return this.columnsByKey().get(key)?.minWidth ?? MIN_COLUMN_WIDTH;\n  }\n\n  /**\n   * Fit columns to their widest rendered content, then keep that as a width override.\n   *\n   * Measured by letting the tracks out to `max-content` for one frame and reading back what the\n   * browser gave them, rather than by adding up text metrics - that way arbitrary cell content (a\n   * badge, an avatar, a nested component) is measured as it actually lays out, and the cell's own\n   * padding is included for free. Only *rendered* rows count, so on a virtualized table this fits the\n   * current window, as it must: the rows outside it have no width to measure.\n   */\n  public autosizeColumns(keys: readonly string[]) {\n    const measurable = keys.filter((key) => this.columnsByKey().has(key));\n\n    if (!measurable.length) return;\n\n    this.resolvedPageHeaderColumns.set(null);\n    this.autosizing.set(new Set(measurable));\n\n    afterNextRender(\n      {\n        read: () => {\n          // Read every width before writing any, so committing the first doesn't reflow the rest.\n          const measured = measurable.map(\n            (key) =>\n              [key, Math.ceil(Math.max(this.renderedColumnWidth(key), this.renderedBodyColumnWidth(key)))] as const,\n          );\n\n          this.autosizing.set(new Set());\n\n          for (const [key, width] of measured) {\n            if (width > 0) this.setColumnWidth(key, width);\n          }\n        },\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /** Fit one column to its widest rendered content - see {@link autosizeColumns}. */\n  public autosizeColumn(key: string) {\n    this.autosizeColumns([key]);\n  }\n\n  /** Fit every visible column to its widest rendered content - see {@link autosizeColumns}. */\n  public autosizeAllColumns() {\n    this.autosizeColumns(this.visibleColumns().map((column) => column.key));\n  }\n\n  /** Reset a column to its default width (drops the user override), e.g. on grip double-click. */\n  public resetColumnWidth(key: string) {\n    this.columnWidths.update((widths) => {\n      if (widths[key] === undefined) return widths;\n\n      const next = { ...widths };\n      delete next[key];\n\n      return next;\n    });\n  }\n\n  // Must stay a same-tick write on the header grid. A requestAnimationFrame hop defers it past the\n  // paint the body already moved in, so the header trails a whole frame; and the property inherits,\n  // so writing it on the host recalculates style for every row cell, which only the header reads.\n  private syncPageHeaderScroll(scroller: HTMLElement) {\n    const header = this.headerGridRef()?.nativeElement;\n\n    if (!header) return;\n\n    this.renderer?.setCssProperties(header, { '--_et-table-inline-scroll': `${scroller.scrollLeft}px` });\n  }\n\n  private renderedBodyColumnWidth(key: string) {\n    const cell = this.bodyCells().find((ref) => ref.nativeElement.getAttribute('data-col-key') === key);\n\n    return cell?.nativeElement.getBoundingClientRect().width ?? 0;\n  }\n\n  // Which columns have scrolled behind a pinned one. Their cells are hidden by the pinned cells' own\n  // opaque fill, but anything a feature hangs off a header cell in a portal - a filter menu, a column\n  // menu - is not: it floats over the pinned column, anchored to a cell nobody can see. floating-ui's\n  // own `referenceHidden` can't catch this either, since the cell is clipped by nothing; it is covered.\n  // So the table says when a column is covered, and the header drops its adornments.\n  private syncObscuredColumns() {\n    const inset = this.fadeInset();\n\n    if (inset.start === 0 && inset.end === 0) {\n      if (this.obscuredColumns().size) this.obscuredColumns.set(EMPTY_COLUMN_KEYS);\n\n      return;\n    }\n\n    const cells = this.headerCells();\n    const columns = this.visibleColumns();\n    // One live read per scroll tick over the header row only, which is what this has to compare against\n    // the pinned edges - `signalElementDimensions` observes a single element and never sees a scroll.\n\n    const host = this.scrollElement().getBoundingClientRect();\n    const startEdge = host.left + inset.start;\n    const endEdge = host.right - inset.end;\n    const next = new Set<string>();\n\n    columns.forEach((column, index) => {\n      if (column.sticky) return;\n\n      const cell = cells[index]?.nativeElement;\n\n      if (!cell) return;\n\n      const rect = cell.getBoundingClientRect();\n\n      if (rect.right <= startEdge || rect.left >= endEdge) next.add(column.key);\n    });\n\n    const current = this.obscuredColumns();\n    const changed = next.size !== current.size || [...next].some((key) => !current.has(key));\n\n    if (changed) this.obscuredColumns.set(next);\n  }\n\n  private nextSort({ key, direction, additive }: TableSortStep): TableSort[] {\n    const multiSort = this.multiSort();\n    const layered = multiSort === true || (multiSort === 'shift' && additive);\n\n    if (!layered) return direction ? [{ key, direction }] : [];\n\n    const current = this.sort();\n\n    if (!direction) return current.filter((entry) => entry.key !== key);\n    if (!current.some((entry) => entry.key === key)) return [...current, { key, direction }];\n\n    return current.map((entry) => (entry.key === key ? { key, direction } : entry));\n  }\n\n  /**\n   * The one place sort state is written. A bound {@link rowsSource} owns it - it resets the page and\n   * refetches - and a source that publishes a `sort` signal syncs its own value back into `sort` (see\n   * the constructor), so everything else can keep reading `sort()` whichever drives it.\n   */\n  private applySort(sort: TableSort[]) {\n    this.sortGesture.set(true);\n    this.sortGestureReset?.unsubscribe();\n    this.sortGestureReset = timer(SORT_INDICATOR_ANIMATION_MS)\n      .pipe(\n        tap(() => this.sortGesture.set(false)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    const source = this.rowsSource();\n\n    source?.setSort?.(sort);\n\n    // Only a source that publishes `sort` mirrors the new value back; skipping the local write for one\n    // that does not would leave the header on the direction it already had, forever.\n    if (!source?.sort) this.sort.set(sort);\n  }\n\n  // ── Render models ───────────────────────────────────────────────────────\n  // See the `…Vm` types above: everything the template binds is resolved here, so a binding is a field\n  // read rather than a call the framework has to repeat on every change-detection pass.\n\n  // Walk the event's composed path up to the row element; bail if it passed through anything the\n  // user meant to click instead of the row (a control, a menu trigger, or a utility cell). Uses\n  // composedPath (not `.closest()`, which the styleguide forbids) so it also works across shadow roots.\n  private originatesFromInteractive(event: Event) {\n    for (const target of event.composedPath()) {\n      if (target === event.currentTarget) break;\n      if (!(target instanceof HTMLElement)) continue;\n\n      const tag = target.tagName;\n\n      if (tag === 'BUTTON' || tag === 'A' || tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA') return true;\n      if (target.hasAttribute('etMenuTrigger') || target.getAttribute('role') === 'button') return true;\n      if (target.classList.contains('et-table-select-cell') || target.classList.contains('et-table-expander-cell')) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\n","<!-- Every binding below reads a field off a render model (see the `…Vm` types in the component):\n     methods belong in event bindings, not in bindings the framework re-evaluates each pass. -->\n<ng-template #headerContent>\n  <!-- Rows a feature renders above the column headers (etTableGroupHeaders' spanning group row). Each\n       is display: contents and lays its own cells into these tracks — see registerHeaderRow. -->\n  @for (headerRow of headerRows(); track $index) {\n    <ng-container *ngComponentOutlet=\"headerRow.component; injector: headerRow.injector\" />\n  }\n\n  <div class=\"et-table-header-row\" role=\"row\">\n    <!-- Leading utility columns (selection from a feature, the expander when expansion is on). The\n         table owns the cell chrome; the feature only supplies what goes inside. -->\n    @for (lead of leadCells(); track lead.key) {\n      <div\n        #leadHeaderCell\n        [class]=\"lead.cellClass\"\n        [class.et-table-sticky-start]=\"lead.sticky\"\n        [style.inset-inline-start.px]=\"pageStickyHeader() ? null : lead.offset\"\n        [attr.aria-hidden]=\"lead.lead.headerComponent ? null : 'true'\"\n        class=\"et-table-header-cell\"\n        role=\"columnheader\"\n      >\n        @if (lead.lead.headerComponent; as headerComponent) {\n          <ng-container *ngComponentOutlet=\"headerComponent; injector: lead.lead.injector\" />\n        }\n      </div>\n    }\n    @for (cell of headerCellVms(); track cell.key) {\n      <div\n        #headerCell\n        [attr.data-align]=\"cell.align\"\n        [attr.data-col-key]=\"cell.key\"\n        [attr.data-disabled]=\"cell.disabled || null\"\n        [attr.aria-sort]=\"cell.ariaSort\"\n        [class.et-table-sticky-start]=\"cell.stickyStart\"\n        [class.et-table-sticky-end]=\"cell.stickyEnd\"\n        [style.inset-inline-start.px]=\"pageStickyHeader() ? null : cell.offsetStart\"\n        [style.inset-inline-end.px]=\"pageStickyHeader() ? null : cell.offsetEnd\"\n        class=\"et-table-header-cell\"\n        role=\"columnheader\"\n      >\n        <!-- Sorting is the whole header's job, not a control's: the label plus everything around it is\n             one button, and the only sort affordance is the direction arrow, which appears once the\n             column is actually sorted. Adornments sit outside it so their own clicks don't sort. -->\n        @if (cell.sortable) {\n          <button\n            [attr.aria-label]=\"cell.sortLabel\"\n            [attr.aria-description]=\"cell.priorityLabel\"\n            [disabled]=\"cell.disabled\"\n            (click)=\"activateSortHeader(cell.key, $event)\"\n            (keydown.shift.enter)=\"activateSortHeader(cell.key, $event)\"\n            class=\"et-table-header-label et-table-header-label--sortable\"\n            type=\"button\"\n          >\n            <span class=\"et-table-header-label-box\">\n              @if (cell.template; as headerTemplate) {\n                <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: cell.column.header }\" />\n              } @else {\n                <span class=\"et-table-cell-text\">{{ cell.column.header }}</span>\n              }\n              @if (cell.direction; as direction) {\n                <!-- Flipping direction keeps this element mounted, so the arrow turns over rather than\n                     swapping; only appearing and disappearing are the fade, and only for a sort the user\n                     just asked for (see sortIndicatorEnter). -->\n                <i\n                  [attr.data-direction]=\"direction\"\n                  [animate.enter]=\"sortIndicatorEnter()\"\n                  [animate.leave]=\"sortIndicatorLeave()\"\n                  class=\"et-table-sort-indicator\"\n                  etIcon=\"et-arrow-up\"\n                ></i>\n              }\n              @if (cell.priority; as priority) {\n                <span class=\"et-table-sort-priority\" aria-hidden=\"true\">{{ priority }}</span>\n              }\n            </span>\n          </button>\n        } @else {\n          <span class=\"et-table-header-label\">\n            <span class=\"et-table-header-label-box\">\n              @if (cell.template; as headerTemplate) {\n                <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: cell.column.header }\" />\n              } @else {\n                <span class=\"et-table-cell-text\">{{ cell.column.header }}</span>\n              }\n            </span>\n          </span>\n        }\n\n        <!-- UI from opt-in features (filter menu, …), each registered rather than referenced — see\n             registerHeaderAdornment. Renders nothing when no feature is imported.\n\n             Dropped once the column is covered by a pinned one: an adornment's menu is a portal, so it\n             would go on floating over the pinned column, anchored to a cell nobody can see. Unmounting\n             the trigger is what closes it. -->\n        @if (!cell.obscured && headerAdornments().length) {\n          <div class=\"et-table-header-adornments\">\n            @for (adornment of headerAdornments(); track $index) {\n              <ng-container\n                *ngComponentOutlet=\"adornment.component; inputs: { column: cell.column }; injector: adornment.injector\"\n              />\n            }\n          </div>\n        }\n      </div>\n    }\n    <!-- Filler cell for the trailing slack track (see hasFiller): carries the header band to the\n         panel's edge when every column is a rigid width. -->\n    @if (hasFiller()) {\n      <div class=\"et-table-header-cell et-table-filler-cell\" role=\"presentation\" aria-hidden=\"true\"></div>\n    }\n    <!-- Trailing utility columns (a selection column moved to this edge). Same chrome as the leading\n         ones, pinned to the trailing edge instead - see TableLeadColumn.side. -->\n    @for (trail of trailCells(); track trail.key) {\n      <div\n        #trailHeaderCell\n        [class]=\"trail.cellClass\"\n        [class.et-table-sticky-end]=\"trail.sticky\"\n        [style.inset-inline-end.px]=\"pageStickyHeader() ? null : trail.offset\"\n        [attr.aria-hidden]=\"trail.lead.headerComponent ? null : 'true'\"\n        class=\"et-table-header-cell\"\n        role=\"columnheader\"\n      >\n        @if (trail.lead.headerComponent; as headerComponent) {\n          <ng-container *ngComponentOutlet=\"headerComponent; injector: trail.lead.injector\" />\n        }\n      </div>\n    }\n  </div>\n</ng-template>\n\n<ng-template #bodyContent>\n  <!-- Refetching over rows that are already on screen: a 2px indeterminate bar right under the header,\n       so the data stays readable and in place. Drawn here rather than with `et-progress-bar` — the base\n       table takes no component dependencies, and this is 2px of chrome, not a control. -->\n  @if (showBusyBar()) {\n    <!-- Faded in and out: a refetch is often over in a few hundred ms, and a bar that pops in and\n         vanishes reads as a flicker rather than as work happening. -->\n    <div\n      class=\"et-table-busy-bar\"\n      animate.enter=\"et-table-busy-bar--enter\"\n      animate.leave=\"et-table-busy-bar--leave\"\n      role=\"presentation\"\n      aria-hidden=\"true\"\n    ></div>\n  }\n\n  @if (spacers(); as spacer) {\n    <div [style.block-size.px]=\"spacer.start\" class=\"et-table-spacer\" role=\"presentation\" aria-hidden=\"true\"></div>\n  }\n\n  @if (hasError()) {\n    <!-- The error state stands in for the whole body: rows are either trustworthy or absent. -->\n    <div class=\"et-table-message-row\" role=\"row\">\n      <div class=\"et-table-error-cell\" role=\"gridcell\" aria-live=\"polite\">\n        @if (errorTemplate(); as template) {\n          <ng-container *ngTemplateOutlet=\"template; context: { $implicit: error() }\" />\n        } @else {\n          <ng-content select=\"[etTableError]\">\n            <i [etProvideColor]=\"errorColorTheme\" class=\"et-table-error-icon\" etIcon=\"et-triangle-exclamation\"></i>\n            <span>{{ resolvedLabels().error }}</span>\n          </ng-content>\n        }\n      </div>\n    </div>\n  } @else if (showPlaceholderRows()) {\n    <!-- First load with nothing to show yet. What a loading body looks like belongs to a feature\n         (etTableSkeleton draws placeholder rows in these tracks); with none the body stays blank rather\n         than showing a misleading empty state — the host's `aria-busy` is the announcement. -->\n    @if (bodyPlaceholder(); as placeholder) {\n      <ng-container *ngComponentOutlet=\"placeholder.component; injector: placeholder.injector\" />\n    }\n  } @else {\n    @for (rowVm of bodyRows(); track rowVm.key) {\n      <!-- A linked row is not a tab stop of its own: its anchor is the one stop, and the one link. -->\n      <div\n        [class]=\"rowVm.classes\"\n        [class.et-table-row--stripe]=\"rowVm.stripe\"\n        [class.et-table-row--last]=\"rowVm.last\"\n        [class.et-table-row--interactive]=\"rowInteractive()\"\n        [class.et-table-row--box]=\"rowBox()\"\n        [class.et-table-row--card]=\"cardRows()\"\n        [class.et-table-row--link]=\"rowVm.href !== null\"\n        [etTableCardSurface]=\"cardRows()\"\n        [attr.tabindex]=\"rowInteractive() && !cellNavigation() && rowVm.href === null ? 0 : null\"\n        (click)=\"activateRow(rowVm.row, $event)\"\n        (keydown.enter)=\"activateRow(rowVm.row, $event)\"\n        (keydown.space)=\"activateRow(rowVm.row, $event)\"\n        class=\"et-table-row\"\n        role=\"row\"\n      >\n        @for (lead of rowVm.leads; track lead.key) {\n          <div\n            [class]=\"lead.cellClass\"\n            [class.et-table-sticky-start]=\"lead.sticky\"\n            [style.inset-inline-start.px]=\"lead.offset\"\n            class=\"et-table-cell\"\n            role=\"gridcell\"\n          >\n            <ng-container\n              *ngComponentOutlet=\"lead.lead.bodyComponent; inputs: { row: rowVm.row }; injector: lead.lead.injector\"\n            />\n          </div>\n        }\n        @for (cell of rowVm.cells; track cell.key) {\n          <div\n            #bodyCell\n            [attr.data-align]=\"cell.align\"\n            [attr.data-col-key]=\"cell.key\"\n            [attr.tabindex]=\"cellNavigation() ? -1 : null\"\n            [attr.data-state]=\"cell.state\"\n            [attr.id]=\"cell.linkHost ? rowVm.linkLabelId : null\"\n            [class.et-table-cell--interactive]=\"cell.interactive\"\n            [class.et-table-cell--editing]=\"cell.edit\"\n            [class.et-skeleton--animated]=\"cell.state === 'loading'\"\n            [class.et-table-sticky-start]=\"cell.stickyStart\"\n            [class.et-table-sticky-end]=\"cell.stickyEnd\"\n            [style.inset-inline-start.px]=\"cell.offsetStart\"\n            [style.inset-inline-end.px]=\"cell.offsetEnd\"\n            class=\"et-table-cell\"\n            role=\"gridcell\"\n          >\n            @if (cell.edit; as edit) {\n              <!-- The one cell in edit mode: the column's etTableCellEdit template, rendered with the\n                   editing feature's own context (the draft field). See registerCellEditing. -->\n              <ng-container *ngTemplateOutlet=\"edit.template; context: edit.context\" />\n            } @else if (cell.state === 'loading' && cellPlaceholder(); as placeholder) {\n              <!-- A cell that is loading on its own (an inline edit saving) shows a feature's placeholder\n                   instead of its value; the row around it stays readable. Without one the value stays put\n                   and `data-state` carries the cue — see registerCellPlaceholder. -->\n              <ng-container *ngComponentOutlet=\"placeholder.component; injector: placeholder.injector\" />\n            } @else {\n              @if (cell.state === 'error') {\n                @if (cellErrorMark(); as mark) {\n                  <!-- A feature (etTableCellErrorTooltip) draws the mark instead, so the overlay runtime\n                       only ships when a table actually wants a tooltip. -->\n                  <ng-container\n                    *ngComponentOutlet=\"mark.component; inputs: { message: cell.message }; injector: mark.injector\"\n                  />\n                } @else {\n                  <!-- Color-scoped here rather than on the cell: the mark is the only part that must read\n                       as an error, and a provider per errored cell is cheap where one per cell would not\n                       be. The message rides along as `title`, which costs nothing. -->\n                  <i\n                    [etProvideColor]=\"errorColorTheme\"\n                    [attr.title]=\"cell.message\"\n                    [attr.aria-label]=\"cell.message\"\n                    [attr.aria-hidden]=\"cell.message ? null : 'true'\"\n                    class=\"et-table-cell-error-icon\"\n                    etIcon=\"et-triangle-exclamation\"\n                  ></i>\n                }\n              }\n              @if (cell.template; as bodyTemplate) {\n                <ng-container *ngTemplateOutlet=\"bodyTemplate; context: cell.context\" />\n              } @else {\n                <span class=\"et-table-cell-text\">{{ cell.value }}</span>\n              }\n            }\n          </div>\n        }\n        @if (hasFiller()) {\n          <div class=\"et-table-cell et-table-filler-cell\" role=\"presentation\" aria-hidden=\"true\"></div>\n        }\n        @for (trail of rowVm.trails; track trail.key) {\n          <div\n            [class]=\"trail.cellClass\"\n            [class.et-table-sticky-end]=\"trail.sticky\"\n            [style.inset-inline-end.px]=\"trail.offset\"\n            class=\"et-table-cell\"\n            role=\"gridcell\"\n          >\n            <ng-container\n              *ngComponentOutlet=\"trail.lead.bodyComponent; inputs: { row: rowVm.row }; injector: trail.lead.injector\"\n            />\n          </div>\n        }\n\n        @if (rowVm.href !== null) {\n          <!-- The row's link: one real anchor, stretched over the row box (see rowBox) rather than\n               wrapping any content, so the cells stay exactly as a table without links renders them.\n               It carries no text of its own and is named by the identity cell instead - `aria-labelledby`\n               resolves to that cell's content, which is the row's identity.\n\n               A child of the row, not of a cell: a cell that is pinned is `position: sticky` and would\n               therefore be the anchor's containing block, shrinking the row's hit area to that one\n               column. The row box is the containing block that spans every cell. -->\n          <!-- eslint-disable-next-line @angular-eslint/template/elements-content -- the rule's\n               allowList knows `aria-label` but not `aria-labelledby`, which names it just as well. -->\n          <a\n            [attr.href]=\"rowVm.href\"\n            [attr.aria-labelledby]=\"rowVm.linkLabelId\"\n            (click)=\"activateRowLink(rowVm.link, $event)\"\n            class=\"et-table-row-link\"\n          ></a>\n        }\n\n        @if (cardRows()) {\n          <div class=\"et-table-card-corners\" role=\"presentation\" aria-hidden=\"true\"></div>\n        }\n      </div>\n\n      <!-- The detail row of an expanded row, from etTableRowExpansion — the whole row, its chrome and\n           its animation belong to the feature, so a table that never expands carries none of them. -->\n      @if (rowVm.detail; as detail) {\n        <ng-container *ngComponentOutlet=\"detail.component; inputs: { row: rowVm.row }; injector: detail.injector\" />\n      }\n    } @empty {\n      <div class=\"et-table-message-row\" role=\"row\">\n        <div class=\"et-table-empty-cell\" role=\"gridcell\">\n          @if (emptyTemplate(); as template) {\n            <ng-container *ngTemplateOutlet=\"template; context: { $implicit: rows() }\" />\n          } @else {\n            <ng-content select=\"[etTableEmpty]\">{{ resolvedLabels().empty }}</ng-content>\n          }\n        </div>\n      </div>\n    }\n  }\n\n  @if (spacers(); as spacer) {\n    <div [style.block-size.px]=\"spacer.end\" class=\"et-table-spacer\" role=\"presentation\" aria-hidden=\"true\"></div>\n  }\n\n  <!-- Edge gradients marking rows scrolled out of view horizontally, on the edges no pinned column\n       already marks (see visibleScrollFades). The layer is absolutely positioned over the whole grid —\n       the full scroll extent, not just the viewport — which is what lets the two fades inside it hold\n       their place with `position: sticky` for the entire scroll range. -->\n  <div class=\"et-table-scroll-fades\" role=\"presentation\" aria-hidden=\"true\">\n    <div\n      [style.inset-inline-start.px]=\"fadeInset().start\"\n      [class.et-table-scroll-fade--visible]=\"visibleScrollFades().start\"\n      class=\"et-table-scroll-fade et-table-scroll-fade--start\"\n    ></div>\n    <div\n      [style.inset-inline-end.px]=\"fadeInset().end\"\n      [class.et-table-scroll-fade--visible]=\"visibleScrollFades().end\"\n      class=\"et-table-scroll-fade et-table-scroll-fade--end\"\n    ></div>\n  </div>\n\n  @if (hasFooter()) {\n    <div class=\"et-table-footer-row\" role=\"row\">\n      @for (lead of leadCells(); track lead.key) {\n        <div\n          [class]=\"lead.cellClass\"\n          [class.et-table-sticky-start]=\"lead.sticky\"\n          [style.inset-inline-start.px]=\"lead.offset\"\n          class=\"et-table-footer-cell\"\n          role=\"gridcell\"\n          aria-hidden=\"true\"\n        ></div>\n      }\n      @for (cell of footerCells(); track cell.key) {\n        <div\n          [attr.data-align]=\"cell.align\"\n          [class.et-table-sticky-start]=\"cell.stickyStart\"\n          [class.et-table-sticky-end]=\"cell.stickyEnd\"\n          [style.inset-inline-start.px]=\"cell.offsetStart\"\n          [style.inset-inline-end.px]=\"cell.offsetEnd\"\n          class=\"et-table-footer-cell\"\n          role=\"gridcell\"\n        >\n          @if (cell.template; as footerTemplate) {\n            <ng-container *ngTemplateOutlet=\"footerTemplate; context: { $implicit: rows() }\" />\n          }\n        </div>\n      }\n      @if (hasFiller()) {\n        <div class=\"et-table-footer-cell et-table-filler-cell\" role=\"presentation\" aria-hidden=\"true\"></div>\n      }\n      @for (trail of trailCells(); track trail.key) {\n        <div\n          [class]=\"trail.cellClass\"\n          [class.et-table-sticky-end]=\"trail.sticky\"\n          [style.inset-inline-end.px]=\"trail.offset\"\n          class=\"et-table-footer-cell\"\n          role=\"gridcell\"\n          aria-hidden=\"true\"\n        ></div>\n      }\n    </div>\n  }\n</ng-template>\n\n@if (pageStickyHeader()) {\n  <div class=\"et-table-header-strip\" role=\"presentation\">\n    <div\n      #headerGrid\n      [style.grid-template-columns]=\"pageHeaderColumns()\"\n      class=\"et-table et-table-header\"\n      role=\"rowgroup\"\n    >\n      <ng-container *ngTemplateOutlet=\"headerContent\" />\n    </div>\n  </div>\n  <div #scroller (scroll)=\"syncScrollState()\" class=\"et-table-scroller\" role=\"presentation\">\n    <div #grid [style.grid-template-columns]=\"templateColumns()\" class=\"et-table\" role=\"rowgroup\">\n      <ng-container *ngTemplateOutlet=\"bodyContent\" />\n    </div>\n  </div>\n} @else {\n  <div #grid [style.grid-template-columns]=\"templateColumns()\" class=\"et-table\" role=\"grid\">\n    <ng-container *ngTemplateOutlet=\"headerContent\" />\n    <ng-container *ngTemplateOutlet=\"bodyContent\" />\n  </div>\n}\n\n<!-- Full-width footer slot (paginator, page-size, etc.), pinned to the bottom of the scroll viewport.\n     Rendered only when the consumer projects `[etTableFooter]`, so the chrome never shows empty. -->\n@if (footerSlot()) {\n  <div class=\"et-table-footer\">\n    <ng-content select=\"[etTableFooter]\" />\n  </div>\n}\n\n<!-- Floating UI from opt-in features (the reorder drag ghost / drop indicator), stamped here so a\n     feature can draw without having a view — or an element — of its own. -->\n@for (layer of layers(); track $index) {\n  <ng-container *ngComponentOutlet=\"layer.component; injector: layer.injector\" />\n}\n","import { afterNextRender, computed, Directive, effect, inject, Injector, input, untracked } from '@angular/core';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './table-features';\nimport { createTableStateStorage, TableStateStorageKind, TableStateStorageOptions } from './table-state-storage';\nimport { TableComponent } from '../table.component';\n\n/** Options for {@link TableStatePersistenceDirective}. */\nexport type TableStatePersistenceConfig = TableFeatureConfig &\n  Pick<TableStateStorageOptions, 'key' | 'storage'> & {\n    /** `'local'` survives a browser restart, `'session'` the tab only. @default 'local' */\n    kind?: TableStateStorageKind;\n  };\n\n/**\n * Opt-in persistence for a table's setup - column order, visibility, widths, sort, filters, expanded\n * rows and whatever the imported features contribute (a selection). Restores once when the table first\n * renders, then writes on every change.\n *\n * A feature rather than a table input because it is a side effect on a store, and one many tables don't\n * want: a table whose columns depend on the route or on a permission set should start from its\n * definitions every time, not from what a user left behind last month.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" [etTableStatePersistence]=\"{ key: 'users-table' }\" />\n *\n * <!-- for the tab only, and switchable at runtime -->\n * <et-table [etTableStatePersistence]=\"{ key: 'users-table', kind: 'session', enabled: remember() }\" … />\n */\n@Directive({\n  selector: '[etTableStatePersistence]',\n  exportAs: 'etTableStatePersistence',\n})\nexport class TableStatePersistenceDirective {\n  /** The host table whose state is persisted. */\n  public table = inject<TableComponent<unknown>>(TableComponent);\n\n  /** See {@link TableStatePersistenceConfig}. */\n  public config = input({} as TableStatePersistenceConfig, {\n    alias: 'etTableStatePersistence',\n    transform: tableFeatureConfig<TableStatePersistenceConfig>,\n  });\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  /** The store in effect - rebuilt when the key or kind changes, so one table can move stores. */\n  public storage = computed(() => {\n    const { key, kind, storage } = this.config();\n\n    return createTableStateStorage({ key, kind, storage });\n  });\n\n  constructor() {\n    // Registered through the feature host so `[etTableStatePersistence]` outside a table throws the\n    // same labelled error as every other feature.\n    injectTableFeatureHost('etTableStatePersistence');\n\n    // Restore after the first render, not in the constructor: the columns the state refers to are\n    // reconciled against the table's own definitions, which need the inputs to have arrived.\n    afterNextRender(\n      () => {\n        if (!untracked(this.enabled)) return;\n\n        const stored = untracked(this.storage).load();\n\n        if (stored) this.table.restoreState(stored);\n      },\n      { injector: inject(Injector) },\n    );\n\n    let restored = false;\n\n    effect(() => {\n      const state = this.table.state();\n      const enabled = this.enabled();\n      const storage = this.storage();\n\n      // Skip the very first value: it is the table's own defaults, and writing it would overwrite a\n      // stored setup before the restore above has had its render.\n      if (!restored) {\n        restored = true;\n\n        return;\n      }\n\n      if (enabled) storage.save(state);\n    });\n  }\n\n  /** Forget the stored setup; the table keeps its current one until something changes it. */\n  public clear() {\n    this.storage().clear();\n  }\n}\n","import { DestroyRef, Directive, inject, input, Signal, TemplateRef } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { TABLE_ERROR_CODES } from '../table-errors';\nimport { TableComponent } from '../table.component';\nimport {\n  AnyTableColumn,\n  TableCellContext,\n  TableCellEditContext,\n  TableCellSkeletonContext,\n  TableColumn,\n  TableColumnTemplate,\n  TableFilterOptionContext,\n  TableFooterContext,\n  TableHeaderContext,\n  TableTemplateSlot,\n} from '../table.types';\n\n/**\n * Register the host `<ng-template>` with the table it sits in. Shared by the three column-template\n * directives below; the table keeps them in a registry rather than querying for them.\n */\nconst registerColumnTemplate = ({\n  slot,\n  name,\n  column,\n}: {\n  slot: TableTemplateSlot;\n  /** The directive's selector, for the error message when it sits outside a table. */\n  name: string;\n  column: Signal<object>;\n}) => {\n  const table = inject(TableComponent, { optional: true });\n\n  if (!table) {\n    throw new RuntimeError(\n      TABLE_ERROR_CODES.TEMPLATE_OUTSIDE_TABLE,\n      `[${name}] must be used on an <ng-template> inside an <et-table>.`,\n    );\n  }\n\n  const registration: TableColumnTemplate = { slot, column, template: inject(TemplateRef) };\n\n  table.registerColumnTemplate(registration);\n  inject(DestroyRef).onDestroy(() => table.unregisterColumnTemplate(registration));\n};\n\n/**\n * Custom body-cell content for one column. Bind the column from your `TableColumns` record and the\n * context is typed from it - `let-row` is the row type and `let-value` the column's `value` type,\n * inferred, not declared.\n *\n * @example\n * <et-table [data]=\"users()\" [columns]=\"COLUMNS\">\n *   <ng-template [etTableCell]=\"COLUMNS.role\" let-row let-value=\"value\">\n *     <et-chip>{{ value }}</et-chip>\n *   </ng-template>\n * </et-table>\n */\n@Directive({\n  selector: 'ng-template[etTableCell]',\n  exportAs: 'etTableCell',\n})\nexport class TableCellDirective<T, TValue> {\n  /** The column whose body cells this template renders. */\n  public column = input.required<TableColumn<T, TValue>>({ alias: 'etTableCell' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'cell', name: 'etTableCell', column: this.column });\n  }\n\n  // static on purpose (the lint ban excepts it): Angular's template type checker requires the\n  // context guard to be static - it types the `let-` bindings of the host ng-template.\n  public static ngTemplateContextGuard<T, TValue>(\n    _directive: TableCellDirective<T, TValue>,\n    _context: unknown,\n  ): _context is TableCellContext<T, TValue> {\n    return true;\n  }\n}\n\n/**\n * Custom header content for one column, replacing its `header` text. `let-header` is that text, so\n * a template can decorate it rather than restate it.\n *\n * @example\n * <ng-template [etTableHeaderCell]=\"COLUMNS.role\" let-header>\n *   {{ header }} <i etIcon=\"et-info\"></i>\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etTableHeaderCell]',\n  exportAs: 'etTableHeaderCell',\n})\nexport class TableHeaderCellDirective<T> {\n  /** The column whose header cell this template renders. */\n  public column = input.required<AnyTableColumn<T>>({ alias: 'etTableHeaderCell' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'header', name: 'etTableHeaderCell', column: this.column });\n  }\n\n  public static ngTemplateContextGuard<T>(\n    _directive: TableHeaderCellDirective<T>,\n    _context: unknown,\n  ): _context is TableHeaderContext {\n    return true;\n  }\n}\n\n/**\n * Custom content for one column's filter options - a flag beside a country, a subtitle under a name,\n * an avatar. `let-option` is the option (`label`, `value`, and anything else you put on it) and\n * `let-selected` says whether it is currently picked; the menu still owns the row, its checkbox/radio\n * mark and its keyboard behaviour.\n *\n * Needs `TABLE_FILTER_IMPORTS` on the table - without the filter feature there is no menu to render\n * into, and the template simply goes unused.\n *\n * @example\n * <ng-template [etTableFilterOption]=\"COLUMNS.country\" let-option>\n *   <img [src]=\"option.flag\" alt=\"\" /> {{ option.label }}\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etTableFilterOption]',\n  exportAs: 'etTableFilterOption',\n})\nexport class TableFilterOptionDirective<T> {\n  /** The column whose filter options this template renders. */\n  public column = input.required<AnyTableColumn<T>>({ alias: 'etTableFilterOption' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'filterOption', name: 'etTableFilterOption', column: this.column });\n  }\n\n  public static ngTemplateContextGuard<T>(\n    _directive: TableFilterOptionDirective<T>,\n    _context: unknown,\n  ): _context is TableFilterOptionContext {\n    return true;\n  }\n}\n\n/**\n * What one column's cells look like while the table is loading with no rows yet. Without it the table\n * draws a line-of-text bone, which is right for text and wrong for anything taller - a chip, an avatar,\n * a button. Since the placeholder rows exist to keep the layout still, a column whose cells are taller\n * than text should say so here, or the table will resize when the data lands.\n *\n * `let-index` is the placeholder row's index and `let-width` the width the default bone would have used.\n *\n * @example\n * <!-- the Role column renders a chip, so its placeholder is chip-shaped -->\n * <ng-template [etTableCellSkeleton]=\"COLUMNS.role\">\n *   <et-skeleton-item shape=\"rect\" style=\"inline-size: 64px; block-size: 24px; --et-skeleton-radius: 999px\" />\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etTableCellSkeleton]',\n  exportAs: 'etTableCellSkeleton',\n})\nexport class TableCellSkeletonDirective<T> {\n  /** The column whose loading placeholder this template renders. */\n  public column = input.required<AnyTableColumn<T>>({ alias: 'etTableCellSkeleton' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'cellSkeleton', name: 'etTableCellSkeleton', column: this.column });\n  }\n\n  public static ngTemplateContextGuard<T>(\n    _directive: TableCellSkeletonDirective<T>,\n    _context: unknown,\n  ): _context is TableCellSkeletonContext {\n    return true;\n  }\n}\n\n/**\n * The editor one column's cells swap to while they are being edited in place - what makes a column\n * marked `editable` actually editable. Needs `etTableInlineEdit` on the table.\n *\n * `let-field` is the draft, as a signal-forms field: bind it with `[formField]` and the control saves\n * into it, exactly as it would in a form. `let-row` is the row and `let-value` the value editing started\n * from. Committing is the table's (Enter, Tab); the template only renders the control.\n *\n * @example\n * <ng-template [etTableCellEdit]=\"COLUMNS.name\" let-field=\"field\">\n *   <et-form-field size=\"sm\">\n *     <et-input [formField]=\"field\" aria-label=\"Name\" />\n *   </et-form-field>\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etTableCellEdit]',\n  exportAs: 'etTableCellEdit',\n})\nexport class TableCellEditDirective<T, TValue> {\n  /** The column whose cells this template edits. */\n  public column = input.required<TableColumn<T, TValue>>({ alias: 'etTableCellEdit' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'cellEdit', name: 'etTableCellEdit', column: this.column });\n  }\n\n  public static ngTemplateContextGuard<T, TValue>(\n    _directive: TableCellEditDirective<T, TValue>,\n    _context: unknown,\n  ): _context is TableCellEditContext<T, TValue> {\n    return true;\n  }\n}\n\n/**\n * A footer cell for one column - a totals/summary row. `let-rows` is every rendered row (typed),\n * so the cell can aggregate them. Any column with one shows the table's sticky footer row.\n *\n * @example\n * <ng-template [etTableFooterCell]=\"COLUMNS.amount\" let-rows>\n *   {{ total(rows) | currency }}\n * </ng-template>\n */\n@Directive({\n  selector: 'ng-template[etTableFooterCell]',\n  exportAs: 'etTableFooterCell',\n})\nexport class TableFooterCellDirective<T> {\n  /** The column whose footer cell this template renders. */\n  public column = input.required<AnyTableColumn<T>>({ alias: 'etTableFooterCell' });\n\n  constructor() {\n    registerColumnTemplate({ slot: 'footer', name: 'etTableFooterCell', column: this.column });\n  }\n\n  public static ngTemplateContextGuard<T>(\n    _directive: TableFooterCellDirective<T>,\n    _context: unknown,\n  ): _context is TableFooterContext<T> {\n    return true;\n  }\n}\n","// The table's headless layer: everything with state or logic but no visual opinion - the feature-host\n// contract features register through, the pure row transforms (sort, filter, column reconciliation),\n// the label set, the template-registration directives, the serialization adapters (URL, storage) and\n// the query-backed rows sources.\n//\n// The feature *directives* that stamp a control into the table (filters, resize, reorder, selection,\n// the column menu) stay at the domain root next to the components they stamp: they are orchestrators\n// of presentation, so putting them here would only invert the dependency. `table.types.ts` and\n// `table-errors.ts` also stay at the root - domain-wide infrastructure, per the architecture doc.\nexport * from './table-column-state';\nexport * from './table-csv-export';\nexport * from './table-csv-rows-from-pages';\nexport * from './table-features';\nexport * from './table-filter';\nexport * from './table-quick-filter';\nexport * from './table-footer.directive';\nexport * from './table-labels';\nexport * from './table-rows-from-query';\nexport * from './table-rows-from-v2-query';\nexport * from './table-rows-source';\nexport * from './table-sort';\nexport * from './table-state-persistence.directive';\nexport * from './table-state-storage';\nexport * from './table-state-url';\nexport * from './table-templates';\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport { TableCellErrorMarkComponent } from './table-cell-error-mark.component';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableComponent } from './table.component';\n\n/** Options for {@link TableCellErrorTooltipDirective}. */\nexport type TableCellErrorTooltipConfig = TableFeatureConfig;\n\n/**\n * Opt-in tooltips on failed cells: the message a `cellState` callback returns\n * (`{ state: 'error', message }`) is shown on hover and focus instead of as a native `title`.\n *\n * It carries the [tooltip](/components/tooltip) - and with it the overlay runtime and floating-ui -\n * which is exactly why it is separate: a table that only marks failed cells never pulls that in. Its\n * mark is stamped only into cells that are actually failing.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" [cellState]=\"cellState\" etTableCellErrorTooltip />\n */\n@Directive({\n  selector: '[etTableCellErrorTooltip]',\n  exportAs: 'etTableCellErrorTooltip',\n})\nexport class TableCellErrorTooltipDirective {\n  /** The host table this feature registered with. */\n  public table = inject<TableComponent<unknown>>(TableComponent);\n\n  /** See {@link TableCellErrorTooltipConfig}. */\n  public config = input({} as TableCellErrorTooltipConfig, {\n    alias: 'etTableCellErrorTooltip',\n    transform: tableFeatureConfig<TableCellErrorTooltipConfig>,\n  });\n\n  constructor() {\n    // Registered through the feature host (which throws a labelled error outside a table), but the\n    // mark also needs the table's own error colour, so the concrete component is what's injected above.\n    injectTableFeatureHost('etTableCellErrorTooltip').registerCellErrorMark({\n      component: TableCellErrorMarkComponent,\n      injector: inject(Injector),\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport { TRIANGLE_EXCLAMATION_ICON } from '../icon/headless/triangle-exclamation-icon';\nimport { TooltipDirective } from '../tooltip/headless/tooltip.directive';\nimport { TableCellErrorTooltipDirective } from './table-cell-error-tooltip.directive';\n\n/**\n * The mark drawn in a failed cell when `etTableCellErrorTooltip` is imported: the same glyph the base\n * table draws, with the cell's message on a real tooltip instead of a native `title`.\n *\n * This is where the tooltip - and with it the overlay runtime and floating-ui - is actually referenced,\n * which is the whole reason the feature is separate. Stamped only into cells that are in the error\n * state, so even with the feature imported a healthy table creates none of these.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-cell-error-mark',\n  template: `\n    <i\n      [etProvideColor]=\"feature.table.errorColorTheme\"\n      [etTooltip]=\"message()\"\n      [etTooltipDisabled]=\"!message()\"\n      [attr.aria-label]=\"message()\"\n      [attr.aria-hidden]=\"message() ? null : 'true'\"\n      [attr.tabindex]=\"message() ? 0 : null\"\n      class=\"et-table-cell-error-icon\"\n      etIcon=\"et-triangle-exclamation\"\n    ></i>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, TooltipDirective, ProvideColorDirective],\n  providers: [provideIcons(TRIANGLE_EXCLAMATION_ICON)],\n})\nexport class TableCellErrorMarkComponent {\n  protected feature = inject(TableCellErrorTooltipDirective);\n\n  /** What went wrong, from the cell's `cellState`. Set by the table. */\n  public message = input<string | null>(null);\n}\n","import { Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { BUTTON_SIZES, BUTTON_VARIANTS, ButtonComponent, ButtonSize, ButtonVariant } from '../button/button.component';\nimport { EYE_ICON } from '../icon/headless/eye-icons';\nimport { GRID_2X2_ICON } from '../icon/headless/grid-2x2-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport {\n  MenuCheckboxItemComponent,\n  MenuComponent,\n  MenuDirective,\n  MenuItemComponent,\n  MenuSeparatorComponent,\n  MenuSurfaceDirective,\n} from '../menu';\nimport { MenuTriggerDirective } from '../menu/headless';\nimport { TableFeatureHost } from './headless/table-features';\n\n/** The slice of the table a column chooser drives - any `et-table` satisfies it. */\nexport type TableColumnVisibilityHost = Pick<\n  TableFeatureHost,\n  'allColumns' | 'visibleColumnsMeta' | 'isColumnVisible' | 'setColumnVisible' | 'showAllColumns' | 'resolvedLabels'\n>;\n\n/**\n * A \"columns\" button and menu for toggling column visibility, placed wherever you like - a toolbar\n * above the table, the `[etTableFooter]` slot, a page header.\n *\n * Deliberately *not* part of the per-column `⋮` menu. A list that hides columns cannot hang off a\n * control inside the header it is editing: hiding a column relays the header out and drags the menu\n * with it, and hiding the column the menu was opened from destroys its own anchor. Anchored to a\n * button of yours, which nothing in the table can move, neither happens.\n *\n * @example\n * <et-table #table [data]=\"rows()\" [columns]=\"COLUMNS\">\n *   <div etTableFooter>\n *     <et-table-column-chooser [table]=\"table\" />\n *   </div>\n * </et-table>\n */\n@Component({\n  selector: 'et-table-column-chooser',\n  templateUrl: './table-column-chooser.component.html',\n  styleUrl: './table-column-chooser.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MenuDirective,\n    MenuTriggerDirective,\n    MenuSurfaceDirective,\n    MenuComponent,\n    MenuItemComponent,\n    MenuSeparatorComponent,\n    MenuCheckboxItemComponent,\n    ButtonComponent,\n    IconDirective,\n  ],\n  providers: [provideIcons(GRID_2X2_ICON, EYE_ICON)],\n})\nexport class TableColumnChooserComponent {\n  /** The table whose columns this toggles - bind a template ref to the `<et-table>`. */\n  public table = input.required<TableColumnVisibilityHost>();\n\n  /**\n   * Size of the trigger button. The default suits the chooser sitting in the table's own chrome; match\n   * it to the other controls when you put it in a toolbar of your own.\n   */\n  public size = input<ButtonSize>(BUTTON_SIZES.SM);\n\n  /**\n   * Shape of the trigger button, for the same reason as {@link size}: the default reads as table chrome,\n   * and a chooser standing among an app's own buttons has to read as one of them.\n   */\n  public variant = input<ButtonVariant>(BUTTON_VARIANTS.TRANSPARENT);\n\n  /**\n   * The bound table's wording, so the chooser needs no strings of its own - localize it with\n   * `provideTableLabels` or the table's `labels` input like everything else.\n   */\n  protected labels = computed(() => this.table().resolvedLabels());\n\n  /**\n   * Toggling a column leaves the menu open - hiding several in one visit is the point of the list. A\n   * field rather than a literal in the template because `closeOnActivate` is tri-state\n   * (`boolean | undefined`) and so takes a binding, not a static attribute.\n   */\n  protected readonly KEEP_MENU_OPEN = false;\n\n  protected hasHidden = computed(() => this.table().visibleColumnsMeta().length < this.table().allColumns().length);\n\n  /**\n   * The last column standing can't be hidden - a table with no columns has nothing to show. Its\n   * checkbox is disabled rather than absent, so the list still reads as the whole set.\n   */\n  protected isLastVisible(key: string) {\n    const table = this.table();\n\n    return table.isColumnVisible(key) && table.visibleColumnsMeta().length <= 1;\n  }\n\n  protected toggle(key: string) {\n    const table = this.table();\n\n    table.setColumnVisible(key, !table.isColumnVisible(key));\n  }\n}\n","<div class=\"et-table-column-chooser\" etMenu>\n  <button\n    [size]=\"size()\"\n    [variant]=\"variant()\"\n    class=\"et-table-column-chooser-trigger\"\n    et-button\n    etMenuTrigger\n    type=\"button\"\n  >\n    <i etIcon=\"et-grid-2x2\"></i>\n    {{ labels().columns }}\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu>\n      <!-- Every declared column, hidden ones included: this list is the only way back from hiding one. -->\n      @for (column of table().allColumns(); track column.key) {\n        <et-menu-checkbox-item\n          [value]=\"column.key\"\n          [checked]=\"table().isColumnVisible(column.key)\"\n          [disabled]=\"isLastVisible(column.key)\"\n          [closeOnActivate]=\"KEEP_MENU_OPEN\"\n          (activate)=\"toggle(column.key)\"\n        >\n          {{ column.header || column.key }}\n        </et-menu-checkbox-item>\n      }\n\n      <!-- Always rendered, disabled when nothing is hidden: appearing and disappearing would resize the\n           menu under the pointer while columns are being toggled. -->\n      <et-menu-separator />\n      <button\n        [closeOnActivate]=\"KEEP_MENU_OPEN\"\n        [disabled]=\"!hasHidden()\"\n        (activate)=\"table().showAllColumns()\"\n        et-menu-item\n        type=\"button\"\n      >\n        <i class=\"et-table-column-chooser-icon\" etIcon=\"et-eye\"></i>\n        {{ labels().showAllColumns }}\n      </button>\n    </et-menu>\n  </ng-template>\n</div>\n","import { computed, Directive, inject, Injector, input } from '@angular/core';\nimport {\n  injectTableFeatureHost,\n  TableColumnMeta,\n  TableFeatureConfig,\n  tableFeatureConfig,\n} from './headless/table-features';\nimport { TableColumnMenuTriggerComponent } from './table-column-menu-trigger.component';\nimport { TableColumnPin } from './table.types';\n\n/** Options for {@link TableColumnMenuDirective}. */\nexport type TableColumnMenuConfig = TableFeatureConfig & {\n  /** Offer \"Autosize this column\" / \"Autosize all columns\". @default true */\n  autosize?: boolean;\n  /** Offer \"Reset width\" when the column has been resized. @default true */\n  resetWidth?: boolean;\n  /** Offer \"Hide column\". The last visible column can never be hidden. @default true */\n  hideColumn?: boolean;\n  /** Offer \"Pin to start\" / \"Pin to end\" / \"Unpin\" while `etTableStickyColumns` is on the table. @default true */\n  pinColumn?: boolean;\n};\n\n/**\n * Opt-in per-column menu for `et-table`: a `⋮` in every header cell opening the column's actions -\n * sort ascending / descending / clear, reset a resized width, hide the column, and pin it to an edge\n * when `etTableStickyColumns` is on the table.\n *\n * It carries the menu system, so it is a separate feature: a table without it never pulls that in.\n * (If you also use `etTableFilters`, the two share that cost.)\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableColumnMenu />\n *\n * <!-- with options -->\n * <et-table [etTableColumnMenu]=\"{ hideColumn: false }\" … />\n */\n@Directive({\n  selector: '[etTableColumnMenu]',\n  exportAs: 'etTableColumnMenu',\n})\nexport class TableColumnMenuDirective {\n  public table = injectTableFeatureHost('etTableColumnMenu');\n\n  /** See {@link TableColumnMenuConfig}. */\n  public config = input({} as TableColumnMenuConfig, {\n    alias: 'etTableColumnMenu',\n    transform: tableFeatureConfig<TableColumnMenuConfig>,\n  });\n\n  constructor() {\n    // After the filter trigger (order 0) and before the resize grip (order 10), so the header reads\n    // label → filter → menu with the grip still pinned to the very edge.\n    this.table.registerHeaderAdornment({\n      component: TableColumnMenuTriggerComponent,\n      injector: inject(Injector),\n      order: 5,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n\n  /** Whether the column is sorted, and which way - drives the menu's checked state. */\n  public directionOf(column: TableColumnMeta) {\n    return this.table.sortDirection(column.key);\n  }\n\n  public sortAscending(column: TableColumnMeta) {\n    this.table.setSort(column.key, 'asc');\n  }\n\n  public sortDescending(column: TableColumnMeta) {\n    this.table.setSort(column.key, 'desc');\n  }\n\n  public clearSort(column: TableColumnMeta) {\n    this.table.setSort(column.key, null);\n  }\n\n  public canAutosize() {\n    return this.config().autosize ?? true;\n  }\n\n  public autosize(column: TableColumnMeta) {\n    this.table.autosizeColumns([column.key]);\n  }\n\n  public autosizeAll() {\n    this.table.autosizeColumns(this.table.visibleColumnsMeta().map((column) => column.key));\n  }\n\n  /** Only worth offering once the user has actually resized the column. */\n  public canResetWidth(column: TableColumnMeta) {\n    return (this.config().resetWidth ?? true) && this.table.hasColumnWidthOverride(column.key);\n  }\n\n  public resetWidth(column: TableColumnMeta) {\n    this.table.resetColumnWidth(column.key);\n  }\n\n  /**\n   * Hiding the last visible column would leave a table with no header to un-hide it from - a\n   * table-wide condition, so it takes no column.\n   */\n  public canHide() {\n    return (this.config().hideColumn ?? true) && this.table.visibleColumnsMeta().length > 1;\n  }\n\n  public hide(column: TableColumnMeta) {\n    this.table.setColumnVisible(column.key, false);\n  }\n\n  public canPin() {\n    return (this.config().pinColumn ?? true) && this.table.canPinColumns();\n  }\n\n  public pinOf(column: TableColumnMeta) {\n    return this.table.columnPin(column.key);\n  }\n\n  public pin(column: TableColumnMeta, side: TableColumnPin | null) {\n    this.table.pinColumn(column.key, side);\n  }\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { IconButtonComponent } from '../button/icon-button.component';\nimport { ARROW_UP_ICON } from '../icon/headless/arrow-up-icon';\nimport { EYE_SLASH_ICON } from '../icon/headless/eye-icons';\nimport { ARROWS_LEFT_RIGHT_ICON } from '../icon/headless/arrows-left-right-icon';\nimport { ELLIPSIS_VERTICAL_ICON } from '../icon/headless/ellipsis-vertical-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport { ROTATE_RIGHT_ICON } from '../icon/headless/rotate-right-icon';\nimport { THUMBTACK_ICON } from '../icon/headless/thumbtack-icon';\nimport { TIMES_ICON } from '../icon/headless/times-icon';\nimport { MenuComponent, MenuDirective, MenuItemComponent, MenuSeparatorComponent, MenuSurfaceDirective } from '../menu';\nimport { MenuTriggerDirective } from '../menu/headless';\nimport { TableColumnMenuDirective } from './table-column-menu.directive';\nimport { TableColumnMeta } from './headless/table-features';\n\n/**\n * The `⋮` column menu for one header cell, stamped there by `etTableColumnMenu` (see\n * `registerHeaderAdornment`).\n *\n * This is where the menu system is actually referenced, and it is created with the feature's own\n * injector, so it reaches the feature - and the table's state - by plain DI.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-column-menu-trigger',\n  templateUrl: './table-column-menu-trigger.component.html',\n  styleUrl: './table-column-menu-trigger.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MenuDirective,\n    MenuTriggerDirective,\n    MenuSurfaceDirective,\n    MenuComponent,\n    MenuItemComponent,\n    MenuSeparatorComponent,\n    IconButtonComponent,\n    IconDirective,\n  ],\n  providers: [\n    provideIcons(\n      ELLIPSIS_VERTICAL_ICON,\n      ARROW_UP_ICON,\n      ARROWS_LEFT_RIGHT_ICON,\n      TIMES_ICON,\n      ROTATE_RIGHT_ICON,\n      EYE_SLASH_ICON,\n      THUMBTACK_ICON,\n    ),\n  ],\n})\nexport class TableColumnMenuTriggerComponent {\n  protected menu = inject(TableColumnMenuDirective);\n\n  /** The column this menu acts on. Set by the table (see {@link TableHeaderAdornment}). */\n  public column = input.required<TableColumnMeta>();\n\n  /** The host table's wording - every string here comes from there, never from this component. */\n  protected labels = this.menu.table.resolvedLabels;\n}\n","<div class=\"et-table-column-menu\" etMenu>\n  <button\n    [attr.aria-label]=\"labels().columnMenu(column().header ?? column().key)\"\n    [disabled]=\"!!column().disabled\"\n    class=\"et-table-column-menu-trigger\"\n    et-icon-button\n    size=\"xs\"\n    etMenuTrigger\n    type=\"button\"\n  >\n    <i etIcon=\"et-ellipsis-vertical\"></i>\n  </button>\n\n  <ng-template etMenuSurface>\n    <et-menu>\n      @if (column().sortable) {\n        <button (activate)=\"menu.sortAscending(column())\" et-menu-item type=\"button\">\n          <i class=\"et-table-column-menu-icon\" etIcon=\"et-arrow-up\"></i>\n          {{ labels().sortAscending }}\n        </button>\n        <button (activate)=\"menu.sortDescending(column())\" et-menu-item type=\"button\">\n          <i class=\"et-table-column-menu-icon et-table-column-menu-icon--down\" etIcon=\"et-arrow-up\"></i>\n          {{ labels().sortDescending }}\n        </button>\n        @if (menu.directionOf(column())) {\n          <button (activate)=\"menu.clearSort(column())\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-times\"></i>\n            {{ labels().clearSort }}\n          </button>\n        }\n      }\n\n      @if (menu.canAutosize()) {\n        @if (column().sortable) {\n          <et-menu-separator />\n        }\n        <button (activate)=\"menu.autosize(column())\" et-menu-item type=\"button\">\n          <i class=\"et-table-column-menu-icon\" etIcon=\"et-arrows-left-right\"></i>\n          {{ labels().autosizeColumn }}\n        </button>\n        <button (activate)=\"menu.autosizeAll()\" et-menu-item type=\"button\">\n          <i class=\"et-table-column-menu-icon\" etIcon=\"et-arrows-left-right\"></i>\n          {{ labels().autosizeAllColumns }}\n        </button>\n      }\n\n      @if (menu.canPin()) {\n        @if (column().sortable || menu.canAutosize()) {\n          <et-menu-separator />\n        }\n        @if (menu.pinOf(column()) !== 'start') {\n          <button (activate)=\"menu.pin(column(), 'start')\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-thumbtack\"></i>\n            {{ labels().pinColumnStart }}\n          </button>\n        }\n        @if (menu.pinOf(column()) !== 'end') {\n          <button (activate)=\"menu.pin(column(), 'end')\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-thumbtack\"></i>\n            {{ labels().pinColumnEnd }}\n          </button>\n        }\n        @if (menu.pinOf(column())) {\n          <button (activate)=\"menu.pin(column(), null)\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-times\"></i>\n            {{ labels().unpinColumn }}\n          </button>\n        }\n      }\n\n      @if (menu.canResetWidth(column()) || menu.canHide()) {\n        @if (column().sortable || menu.canAutosize() || menu.canPin()) {\n          <et-menu-separator />\n        }\n        @if (menu.canResetWidth(column())) {\n          <button (activate)=\"menu.resetWidth(column())\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-rotate-right\"></i>\n            {{ labels().resetWidth }}\n          </button>\n        }\n        @if (menu.canHide()) {\n          <button (activate)=\"menu.hide(column())\" et-menu-item type=\"button\">\n            <i class=\"et-table-column-menu-icon\" etIcon=\"et-eye-slash\"></i>\n            {{ labels().hideColumn }}\n          </button>\n        }\n      }\n    </et-menu>\n  </ng-template>\n</div>\n","import { computed, DestroyRef, Directive, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { finalize, map } from 'rxjs';\nimport { RuntimeError } from '@ethlete/core';\nimport {\n  injectTableCsvExport,\n  mergeTableCsvExportOptions,\n  resolveTableCsvRows,\n  TableCsvExportOptions,\n  tableToCsv,\n} from './headless/table-csv-export';\nimport { TABLE_ERROR_CODES } from './table-errors';\nimport { TableComponent } from './table.component';\n\n/** Options for {@link TableCsvExportDirective} - the defaults every `export()` call starts from. */\nexport type TableCsvExportConfig<T> = TableCsvExportOptions<T>;\n\n// A feature directive is usually written bare (`etTableCsvExport`), which Angular binds as the empty\n// string - normalize that to \"no options given\". (`tableFeatureConfig` isn't reused here: this feature\n// registers nothing on the table, so it has no `enabled` to gate.)\nconst csvExportConfig = <T>(value: TableCsvExportConfig<T> | '') => (value === '' ? {} : value);\n\n/**\n * Downloads an `et-table` as CSV, from a button of your own. It registers nothing on the table and\n * renders nothing - it exists so the options live next to the table in the template and the call site\n * is one `export()`.\n *\n * The columns follow what the table shows (the chooser's visibility and the reordered order); the rows\n * are the table's own - client-filtered and sorted. See {@link TableCsvExportOptions} for changing\n * either, and {@link injectTableCsvExport} to do the same thing from TypeScript without the directive.\n *\n * @example\n * <et-table\n *   #table\n *   [data]=\"people()\"\n *   [columns]=\"COLUMNS\"\n *   [etTableCsvExport]=\"{ filename: 'people.csv' }\"\n *   #csv=\"etTableCsvExport\"\n * />\n * <button et-button (click)=\"csv.export()\">Export CSV</button>\n *\n * @example\n * // the selected rows instead of all of them\n * <button et-button (click)=\"csv.export({ rows: selection.selectedRows() })\">Export selection</button>\n */\n@Directive({\n  selector: '[etTableCsvExport]',\n  exportAs: 'etTableCsvExport',\n})\nexport class TableCsvExportDirective<T> {\n  private table = injectHostTable<T>();\n  private download = injectTableCsvExport();\n  private destroyRef = inject(DestroyRef);\n\n  /** See {@link TableCsvExportConfig}. */\n  public config = input({} as TableCsvExportConfig<T>, {\n    alias: 'etTableCsvExport',\n    transform: csvExportConfig<T>,\n  });\n\n  // Counted rather than a boolean: two buttons can be clicked before the first fetch comes back, and\n  // the second finishing must not un-busy the first.\n  private running = signal(0);\n\n  /**\n   * Whether an export is in flight - bind it to the button's `disabled` and its spinner. Only ever\n   * true for an export that has to fetch first (a `rows` provider, or `file`); a table exporting the\n   * rows it already holds writes the file in the same tick.\n   */\n  public exporting = computed(() => this.running() > 0);\n\n  /**\n   * Build and download the file, now. Anything passed here wins over the bound config, so one\n   * directive can serve an \"export all\" and an \"export selection\" button - including a `file` call\n   * on a directive that binds serializer options, which drops them rather than conflicting.\n   *\n   * Fire-and-forget, so a `(click)` handler is the whole call site: it starts the work, keeps\n   * {@link exporting} true while it runs, and stops with the directive. A failure reaches the app's\n   * `ErrorHandler` - use {@link injectTableCsvExport} directly for an export you want to compose,\n   * cancel or recover from yourself.\n   */\n  public export(overrides: TableCsvExportOptions<T> = {}) {\n    this.running.update((count) => count + 1);\n\n    this.download(this.table, mergeTableCsvExportOptions(this.config(), overrides))\n      .pipe(\n        finalize(() => this.running.update((count) => count - 1)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /**\n   * The same CSV as a string, without downloading it - to upload it, or to put it on the clipboard.\n   * An observable rather than a string because `rows` may be a provider it has to wait for. `file`\n   * has no meaning here: the whole point of it is that this side never builds the string.\n   */\n  public toCsv(overrides: TableCsvExportOptions<T> = {}) {\n    const options = mergeTableCsvExportOptions(this.config(), overrides);\n\n    return resolveTableCsvRows(options.rows, () => this.table.rows()).pipe(\n      map((rows) => tableToCsv(this.table, { ...options, rows })),\n    );\n  }\n}\n\n// The table is a component on the same element, so it injects directly. Placed anywhere else the\n// directive could only ever silently do nothing, so name the mistake instead.\nconst injectHostTable = <T>() => {\n  const table = inject(TableComponent, { optional: true }) as TableComponent<T> | null;\n\n  if (!table) {\n    throw new RuntimeError(\n      TABLE_ERROR_CODES.FEATURE_OUTSIDE_TABLE,\n      `[etTableCsvExport] must be used on an <et-table>.`,\n    );\n  }\n\n  return table;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The detail row's chrome and its grow-open animation, as a styles-only component mounted by\n * `etTableRowExpansion` - see `ButtonStylesDirective` for the same pattern.\n *\n * Split out of `table.component.css` because it is the largest block in there (the keyframes alone are\n * most of it) and it does nothing for a table that never expands a row. It arrives with the feature, so\n * those rules stay out of the document - and out of style recalculation - for every table without it.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-detail-styles',\n  template: '',\n  styleUrl: './table-detail-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableDetailStylesComponent {}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The grab cursors a dragged table scrolls under, as a styles-only component mounted by\n * `etTableDragScroll` - see `TableDetailStylesComponent` for the same pattern.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-drag-scroll-styles',\n  template: '',\n  styleUrl: './table-drag-scroll-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableDragScrollStylesComponent {}\n","import {\n  afterNextRender,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { finalize, fromEvent, take, takeUntil, takeWhile, tap, timer } from 'rxjs';\nimport { dragGestureFrom, injectStyleManager, signalHostElementDimensions } from '@ethlete/core';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableDragScrollStylesComponent } from './table-drag-scroll-styles.component';\n\n/** Options for {@link TableDragScrollDirective}. */\nexport type TableDragScrollConfig = TableFeatureConfig;\n\n/**\n * Whether a press landed inside a scroll container of its own between the target and the table - a sub\n * table in a detail row, a scrolling panel in a cell. That container is what the gesture belongs to, so\n * the table must not pan instead: dragging in a sub table would scroll the list under it. One that fits\n * its content scrolls nothing, so it is left to the table.\n */\nconst hasOwnScroller = ({\n  target,\n  host,\n  tableScroller,\n}: {\n  target: EventTarget | null;\n  host: HTMLElement;\n  tableScroller: HTMLElement;\n}) => {\n  let element = target instanceof Element ? target : null;\n\n  while (element !== null && element !== host && element !== tableScroller) {\n    const style = getComputedStyle(element);\n    const scrollsInline = /^(auto|scroll)$/.test(style.overflowX) && element.scrollWidth > element.clientWidth;\n    const scrollsBlock = /^(auto|scroll)$/.test(style.overflowY) && element.scrollHeight > element.clientHeight;\n\n    if (scrollsInline || scrollsBlock) {\n      return true;\n    }\n\n    element = element.parentElement;\n  }\n\n  return false;\n};\n\n/** Whether a press landed in something whose own drag is the point of it: selecting text, not panning. */\nconst isTextGesture = (target: EventTarget | null) =>\n  target instanceof HTMLInputElement ||\n  target instanceof HTMLTextAreaElement ||\n  target instanceof HTMLSelectElement ||\n  // True inside a contenteditable region as well, not only on the element carrying the attribute.\n  (target instanceof HTMLElement && target.isContentEditable);\n\n/**\n * Opt-in drag-to-scroll for `et-table`: pressing anywhere in the table and dragging scrolls it, the way\n * a map pans. A wide table is otherwise reachable only through the scrollbar or a horizontal wheel,\n * neither of which a mouse user has close to hand.\n *\n * A press that does not travel is still a click, so rows, row links and header controls behave exactly\n * as they did; a press that becomes a drag swallows the click it would have ended on, so panning off a\n * row link does not also follow it. Dragging inside a text field is left alone, and a touch pointer\n * keeps the browser's own scrolling. A press inside content that scrolls on its own - a sub table in a\n * detail row - belongs to that content, so the table stays put.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableDragScroll />\n */\n@Directive({\n  selector: '[etTableDragScroll]',\n  exportAs: 'etTableDragScroll',\n  host: {\n    '[class.et-table-host--drag-scrollable]': 'scrollable()',\n    '[class.et-table-host--dragging]': 'dragging()',\n    '(pointerdown)': 'startDrag($event)',\n    '(dragstart)': 'preventNativeDrag($event)',\n    '(scroll)': 'syncScrollable()',\n  },\n})\nexport class TableDragScrollDirective {\n  private table = injectTableFeatureHost('etTableDragScroll');\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private destroyRef = inject(DestroyRef);\n  private injector = inject(Injector);\n\n  /** See {@link TableDragScrollConfig}. */\n  public config = input({} as TableDragScrollConfig, {\n    alias: 'etTableDragScroll',\n    transform: tableFeatureConfig<TableDragScrollConfig>,\n  });\n  private hostDimensions = signalHostElementDimensions();\n\n  /** Whether a drag is in progress, which is what the grabbing cursor reads. */\n  public dragging = signal(false);\n\n  /** Whether the table overflows at all - a table that fits takes no grab cursor. */\n  protected scrollable = signal(false);\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  constructor() {\n    injectStyleManager().mount(TableDragScrollStylesComponent);\n\n    // Whether the table overflows has no signal of its own: recheck whenever the host resizes or the\n    // tracks change, both of which decide it.\n    effect(() => {\n      this.hostDimensions();\n      this.table.columnWidths();\n      this.table.visibleColumnsMeta();\n      afterNextRender({ read: () => this.syncScrollable() }, { injector: this.injector });\n    });\n  }\n\n  protected syncScrollable() {\n    const scroller = this.table.scrollElement();\n    const scrollable =\n      this.enabled() && (scroller.scrollWidth > scroller.clientWidth || scroller.scrollHeight > scroller.clientHeight);\n\n    if (scrollable !== this.scrollable()) this.scrollable.set(scrollable);\n  }\n\n  /**\n   * A press that travels over an `<a>` or an image starts the browser's own drag-and-drop, which fires\n   * `pointercancel` and takes the gesture away before it has moved far enough to count as a drag. A\n   * table that pans by dragging has no room for the other kind.\n   */\n  protected preventNativeDrag(event: DragEvent) {\n    if (this.enabled()) event.preventDefault();\n  }\n\n  protected startDrag(event: PointerEvent) {\n    // Touch already pans by dragging, and a pen or a mouse is the only pointer the scrollbar is awkward\n    // for. A non-primary button belongs to the browser's own menus.\n    if (!this.enabled() || event.pointerType === 'touch' || event.button !== 0) return;\n    if (!this.scrollable() || isTextGesture(event.target)) return;\n\n    const host = this.elementRef.nativeElement;\n    const scroller = this.table.scrollElement();\n\n    if (hasOwnScroller({ target: event.target, host, tableScroller: scroller })) return;\n    const startLeft = scroller.scrollLeft;\n    const startTop = scroller.scrollTop;\n\n    dragGestureFrom(event, host)\n      .pipe(\n        // Column reorder starts from this same pointerdown and claims the gesture in that handler, so\n        // reading the claim here - once the drag has already travelled - gives the same answer\n        // whichever of the two listeners the browser ran first.\n        takeWhile(() => {\n          const claim = this.table.pointerGestureClaim(event);\n\n          return claim === null || claim === 'etTableDragScroll';\n        }),\n        tap((gesture) => {\n          if (gesture.type === 'start') {\n            this.dragging.set(true);\n            this.table.claimPointerGesture(event, 'etTableDragScroll');\n          }\n          if (gesture.type === 'move') {\n            scroller.scrollLeft = startLeft - gesture.data.totalDx;\n            scroller.scrollTop = startTop - gesture.data.totalDy;\n          }\n          if (gesture.type === 'end' || gesture.type === 'cancelled') this.swallowNextClick();\n        }),\n        finalize(() => this.dragging.set(false)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  /**\n   * The release ends on a `click` at whatever the pointer landed on. After a drag that click was never\n   * meant - the row under the pointer is not the row the user pressed - so it is eaten in the capture\n   * phase, before a row link or a header control can act on it. Only that one click, and only if it\n   * arrives on this turn of the loop: the next real click has to get through.\n   */\n  private swallowNextClick() {\n    if (!this.dragging()) return;\n\n    fromEvent<MouseEvent>(this.elementRef.nativeElement, 'click', { capture: true })\n      .pipe(\n        takeUntil(timer(0)),\n        take(1),\n        tap((click) => {\n          click.preventDefault();\n          click.stopPropagation();\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import {\n  afterEveryRender,\n  afterNextRender,\n  computed,\n  Directive,\n  DOCUMENT,\n  inject,\n  Injector,\n  input,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { getFocusableElements, injectRenderer } from '@ethlete/core';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\n\n/** Options for {@link TableKeyboardNavDirective}. */\nexport type TableKeyboardNavConfig = TableFeatureConfig;\n\n/** A focused cell: absolute row index in `rows()`, plus the visible column's index. */\ntype CellPosition = { row: number; column: number };\n\nconst clamp = (value: number, max: number) => Math.min(Math.max(value, 0), max);\n\n/**\n * Opt-in arrow-key navigation over an `et-table`'s cells, following the\n * [ARIA grid pattern](https://www.w3.org/WAI/ARIA/apg/patterns/grid/): the body becomes a **single tab\n * stop**, and the arrows move focus from cell to cell inside it. Without it a table's `role=\"grid\"` is\n * a promise it doesn't keep - only its sortable headers are operable from the keyboard.\n *\n * It is opt-in because it changes what Tab does: a read-only display table is usually better off\n * letting Tab skip straight past it.\n *\n * | Key                          | Moves to                                  |\n * | ---------------------------- | ----------------------------------------- |\n * | `←` `→` `↑` `↓`              | the neighbouring cell                     |\n * | `Home` / `End`               | first / last cell of the row              |\n * | `Ctrl+Home` / `Ctrl+End`     | first / last cell of the grid             |\n * | `PageUp` / `PageDown`        | one viewport of rows up / down            |\n * | `Enter`                      | into the cell's own control, if it has one |\n * | `Escape`                     | back out to the cell                      |\n *\n * Composes with [virtual scrolling](/components/table#virtualization): a target row that isn't\n * rendered is scrolled into the window first and focused once it exists.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableKeyboardNav />\n */\n@Directive({\n  selector: '[etTableKeyboardNav]',\n  exportAs: 'etTableKeyboardNav',\n  host: {\n    '(keydown)': 'handleKeydown($event)',\n    '(focusin)': 'handleFocusIn($event)',\n  },\n})\nexport class TableKeyboardNavDirective {\n  private table = injectTableFeatureHost('etTableKeyboardNav');\n  private renderer = injectRenderer();\n  private injector = inject(Injector);\n  private document = inject(DOCUMENT);\n\n  /** See {@link TableKeyboardNavConfig}. */\n  public config = input({} as TableKeyboardNavConfig, {\n    alias: 'etTableKeyboardNav',\n    transform: tableFeatureConfig<TableKeyboardNavConfig>,\n  });\n\n  // The one cell currently carrying `tabindex=\"0\"`. Held rather than looked up, so moving the tab stop\n  // is two attribute writes and no DOM query.\n  private tabStop: HTMLElement | null = null;\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  // The roving target. It exists before anything is focused so that tabbing into the table lands\n  // somewhere sensible - the first cell - rather than nowhere.\n  private active = signal<CellPosition>({ row: 0, column: 0 });\n\n  /** The cell the grid's tab stop currently sits on: absolute row index and visible-column index. */\n  public activeCell = this.active.asReadonly();\n\n  constructor() {\n    this.table.registerCellNavigation({ enabled: this.enabled });\n\n    // The table renders every cell at `tabindex=\"-1\"`; without this there would be no `0` anywhere and\n    // Tab could never get in. It also repairs the tab stop after a render replaced the cell it was on -\n    // which is every scroll of a virtualized table, and every sort, filter or page change of any table.\n    afterEveryRender({\n      write: () => {\n        if (!this.enabled()) return;\n\n        // A render can destroy the cell the tab stop was on (any scroll of a virtualized table, any\n        // sort, filter or page change of any table). `isConnected` is how that is noticed.\n        if (this.tabStop?.isConnected) return;\n\n        const { row, column } = untracked(this.active);\n\n        // The roving row may have scrolled out of a window's range. Anchoring on the first rendered\n        // cell keeps the body reachable; the arrows carry on from wherever the user then is.\n        const cell = this.table.bodyCellElementAt(row, column) ?? this.table.bodyCellElements()[0] ?? null;\n\n        this.applyRovingTabIndex(cell);\n      },\n    });\n  }\n\n  /** Move the roving target to a cell and focus it, scrolling it into view first when it isn't rendered. */\n  public focusCell(position: CellPosition) {\n    const row = clamp(position.row, Math.max(0, this.table.rows().length - 1));\n    const column = clamp(position.column, Math.max(0, this.table.visibleColumnsMeta().length - 1));\n\n    this.active.set({ row, column });\n\n    const cell = this.table.bodyCellElementAt(row, column);\n\n    if (cell) {\n      this.applyRovingTabIndex(cell);\n      cell.focus();\n\n      return;\n    }\n\n    // Not rendered: a window is holding it back. Ask for it, then take the focus once the render that\n    // creates it has run - there is no element to focus before that.\n    this.table.scrollRowIntoView(row);\n    afterNextRender(\n      {\n        write: () => {\n          const rendered = this.table.bodyCellElementAt(row, column);\n\n          if (!rendered) return;\n\n          this.applyRovingTabIndex(rendered);\n          rendered.focus();\n        },\n      },\n      { injector: this.injector },\n    );\n  }\n\n  // Focus landing on a cell - a click, or Tab arriving from outside - becomes the roving target, so the\n  // arrows continue from wherever the user actually is.\n  protected handleFocusIn(event: FocusEvent) {\n    if (!this.enabled()) return;\n\n    const hit = this.cellFrom(event);\n\n    if (!hit) return;\n\n    this.active.set(hit.position);\n    this.applyRovingTabIndex(hit.cell);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (!this.enabled()) return;\n\n    const hit = this.cellFrom(event);\n\n    if (!hit) return;\n\n    // Focus is on something *inside* the cell (a link, an edit control) - the arrows and Home/End are\n    // that control's, not ours. Only Escape is still ours, to get back out.\n    if (event.target !== hit.cell) {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        hit.cell.focus();\n      }\n\n      return;\n    }\n\n    const next = this.targetOf(event, hit.position);\n\n    if (!next) return;\n\n    event.preventDefault();\n\n    if (next === 'drill') {\n      if (this.table.editCell(hit.position.row, hit.position.column)) return;\n      if (this.drillInto(hit.cell)) return;\n\n      this.table.activateRowAt(hit.position.row);\n\n      return;\n    }\n\n    this.focusCell(next);\n  }\n\n  // Which cell a key asks for, or `null` when the key isn't ours. Split out so the handler stays one\n  // decision and this stays a table of moves.\n  private targetOf(event: KeyboardEvent, from: CellPosition) {\n    const jump = event.ctrlKey || event.metaKey;\n    const lastRow = Math.max(0, this.table.rows().length - 1);\n    const lastColumn = Math.max(0, this.table.visibleColumnsMeta().length - 1);\n\n    switch (event.key) {\n      case 'ArrowRight':\n        return { ...from, column: from.column + 1 };\n      case 'ArrowLeft':\n        return { ...from, column: from.column - 1 };\n      case 'ArrowDown':\n        return { ...from, row: from.row + 1 };\n      case 'ArrowUp':\n        return { ...from, row: from.row - 1 };\n      case 'Home':\n        return jump ? { row: 0, column: 0 } : { ...from, column: 0 };\n      case 'End':\n        return jump ? { row: lastRow, column: lastColumn } : { ...from, column: lastColumn };\n      case 'PageDown':\n        return { ...from, row: from.row + this.table.rowsPerPage() };\n      case 'PageUp':\n        return { ...from, row: from.row - this.table.rowsPerPage() };\n      case 'Enter':\n        return 'drill' as const;\n      default:\n        return null;\n    }\n  }\n\n  private drillInto(cell: HTMLElement) {\n    const target = getFocusableElements(cell, this.document)[0];\n\n    target?.focus();\n\n    return target !== undefined;\n  }\n\n  /**\n   * The body cell an event came from, with its position - `null` when the event started outside the\n   * grid body (a header button, the footer slot, a detail row). Found by matching the event's path\n   * against the cells the table rendered, which is also what makes the position pure arithmetic: the\n   * list is rows major, so the index carries both coordinates.\n   */\n  private cellFrom(event: Event) {\n    const cells = this.table.bodyCellElements();\n    const path = event.composedPath();\n    const index = cells.findIndex((candidate) => path.includes(candidate));\n    const cell = index === -1 ? undefined : cells[index];\n\n    if (!cell) return null;\n\n    const columns = untracked(() => this.table.visibleColumnsMeta()).length;\n\n    if (!columns) return null;\n\n    return {\n      cell,\n      position: {\n        row: this.table.renderedRowOffset() + Math.floor(index / columns),\n        column: index % columns,\n      },\n    };\n  }\n\n  // One `tabindex=\"0\"` in the whole body, on the cell the roving target is on; every other cell keeps\n  // the `-1` the table rendered. Written here rather than bound in the table's template because the\n  // alternative is rebuilding every rendered row's view model on each arrow press.\n  private applyRovingTabIndex(cell: HTMLElement | null) {\n    if (this.tabStop === cell) return;\n\n    if (this.tabStop?.isConnected) this.renderer.setAttribute(this.tabStop, 'tabindex', '-1');\n\n    this.tabStop = cell;\n\n    if (cell) this.renderer.setAttribute(cell, 'tabindex', '0');\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { injectTableFeatureHost } from './headless/table-features';\nimport { TableRowExpansionDirective } from './table-row-expansion.directive';\n\n/**\n * The detail row of an expanded row: the table's `expandedRowTemplate` in a full-width row under the\n * row it belongs to. Stamped by the table through `registerRowDetail`, so it exists only while a row is\n * actually open.\n *\n * The enter/leave animation is a **host** binding rather than a binding on an element inside the\n * template, because Angular runs `animate.leave` on the element that is being removed - and what the\n * table removes is this component's host. On a child it would never be awaited, and the row would\n * disappear instantly instead of closing.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-row-detail',\n  template: `\n    <!-- The clip window the animating track squeezes to nothing, and the body that carries the padding.\n         Two elements on purpose - see table-detail-styles.component.css. -->\n    <div class=\"et-table-detail-cell\" role=\"gridcell\">\n      <div class=\"et-table-detail-body\">\n        <ng-container *ngTemplateOutlet=\"table.detailTemplate(); context: { $implicit: row() }\" />\n      </div>\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet],\n  host: {\n    class: 'et-table-detail-row',\n    role: 'row',\n    // Animated only for the row the user just toggled - a re-mount from paging/sorting must not replay\n    // the reveal (see TableRowExpansionDirective.animates).\n    '[animate.enter]': \"animated() ? 'et-table-detail--enter' : ''\",\n    '[animate.leave]': \"animated() ? 'et-table-detail--leave' : ''\",\n  },\n})\nexport class TableRowDetailComponent {\n  private expansion = inject(TableRowExpansionDirective);\n  protected table = injectTableFeatureHost('etTableRowExpansion');\n\n  /** The row this detail row belongs to. Set by the table (see {@link TableRowDetail}). */\n  public row = input.required<unknown>();\n\n  protected animated = computed(() => this.expansion.animates(this.row()));\n}\n","import { computed, DestroyRef, Directive, inject, Injector, input, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { injectStyleManager } from '@ethlete/core';\nimport { Subscription, tap, timer } from 'rxjs';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableDetailStylesComponent } from './table-detail-styles.component';\nimport { TableExpanderCellComponent } from './table-expander-cell.component';\nimport { TableRowDetailComponent } from './table-row-detail.component';\n\n/** Detail-row enter/leave duration (must match the CSS animations) - see {@link TableRowExpansionDirective.animates}. */\nconst DETAIL_ANIMATION_MS = 200;\n\n/** Options for {@link TableRowExpansionDirective}. */\nexport type TableRowExpansionConfig<T> = TableFeatureConfig & {\n  /**\n   * The signal holding the expanded row keys (by the table's `rowKey`, else the row reference). The\n   * feature writes into it directly, so pass your own signal to read or drive the expansion - set a\n   * `rowKey` on the table so it survives sorting, filtering and data changes, and so it can be\n   * serialized into `state()`. Omit it and the expansion is kept internally (reachable via `exportAs`).\n   */\n  expanded?: WritableSignal<Set<unknown>>;\n  /** Gate which rows can expand. Defaults to all rows. */\n  expandableRow?: (row: T) => boolean;\n};\n\n/**\n * Opt-in row expansion for `et-table`: adds a leading expander column and renders the table's\n * `[expandedRowTemplate]` as a full-width detail row under the row it belongs to.\n *\n * The template stays a table input because only the table knows the row type - that is what gives\n * `let-row` a type instead of `any`. Everything else is here, which is what keeps the expander cell, the\n * detail row's chrome and its grow-open animation out of a table that never expands a row.\n *\n * @example\n * protected expanded = signal<Set<unknown>>(new Set());\n *\n * <et-table\n *   [data]=\"users()\"\n *   [columns]=\"COLUMNS\"\n *   [rowKey]=\"rowId\"\n *   [expandedRowTemplate]=\"detail\"\n *   [etTableRowExpansion]=\"{ expanded: expanded }\"\n * >\n *   <ng-template #detail let-user>{{ user.bio }}</ng-template>\n * </et-table>\n */\n@Directive({\n  selector: '[etTableRowExpansion]',\n  exportAs: 'etTableRowExpansion',\n})\nexport class TableRowExpansionDirective<T> {\n  private table = injectTableFeatureHost('etTableRowExpansion');\n  private destroyRef = inject(DestroyRef);\n\n  /** See {@link TableRowExpansionConfig}. */\n  public config = input({} as TableRowExpansionConfig<T>, {\n    alias: 'etTableRowExpansion',\n    transform: tableFeatureConfig<TableRowExpansionConfig<T>>,\n  });\n\n  // Used when the consumer passes no signal of their own, so a bare `etTableRowExpansion` still expands.\n  private ownExpanded = signal<Set<unknown>>(new Set());\n\n  /** The signal the expanded keys are kept in - the consumer's when they passed one, else the feature's own. */\n  public expanded = computed(() => this.config().expanded ?? this.ownExpanded);\n\n  // The row key the user just toggled, cleared once the animation has run. Compared by identity in\n  // `animates`, so any other (re-)mount of a detail row skips the animation.\n  private userToggledKey = signal<unknown>(null);\n  private userToggleReset: Subscription | undefined;\n\n  constructor() {\n    const injector = inject(Injector);\n\n    this.table.registerLeadColumn({\n      key: 'et-table-expander',\n      width: 'var(--et-table-expander-width, 32px)',\n      // after any other feature column, so a select checkbox stays leftmost\n      order: 100,\n      cellClass: 'et-table-expander-cell',\n      bodyComponent: TableExpanderCellComponent,\n      injector,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n\n    this.table.registerRowDetail({\n      component: TableRowDetailComponent,\n      isOpen: (row) => this.canExpand(row as T) && this.isExpanded(row as T),\n      injector,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n\n    // The expanded rows are the feature's own state, so they travel in `state().features.expansion`\n    // rather than in the base table's own entries - see TableStateSlice. A table without a `rowKey`\n    // keys by row reference and has nothing stable to write, so it contributes nothing.\n    this.table.registerStateSlice({\n      key: 'expansion',\n      read: () => {\n        if (!this.table.hasRowKey()) return undefined;\n\n        const keys = [...this.expanded()()];\n\n        return keys.length ? keys.map(String) : undefined;\n      },\n      write: (value) => {\n        if (this.table.hasRowKey() && Array.isArray(value)) this.expanded().set(new Set(value.map(String)));\n      },\n    });\n\n    // The detail row's chrome and keyframes are the largest block the table's CSS had, and do nothing\n    // without expansion - so they arrive with the feature. Mounted here rather than from the detail row\n    // itself so the rules are in the document before the first expansion animates. The style manager\n    // de-duplicates across every table in the app.\n    injectStyleManager().mount(TableDetailStylesComponent);\n  }\n\n  /** Whether a row is currently expanded. */\n  public isExpanded(row: T) {\n    return this.expanded()().has(this.table.rowIdentity(row));\n  }\n\n  /** Whether a row may expand at all (see `expandableRow`). */\n  public canExpand(row: T) {\n    return this.config().expandableRow?.(row) ?? true;\n  }\n\n  /**\n   * Whether this row's detail row should animate open/closed.\n   *\n   * Only the row the user just toggled does. A detail row also mounts and unmounts when the rows\n   * themselves change - paging away and back, sorting, a query refresh - and animating those replays an\n   * open/close the user never asked for (and pays the layout cost mid page-change).\n   */\n  public animates(row: unknown) {\n    return this.userToggledKey() === this.table.rowIdentity(row);\n  }\n\n  /** Toggle a row's expanded state. */\n  public toggle(row: T) {\n    const key = this.table.rowIdentity(row);\n    const next = new Set(this.expanded()());\n\n    if (next.has(key)) {\n      next.delete(key);\n    } else {\n      next.add(key);\n    }\n\n    this.markUserToggled(key);\n    this.expanded().set(next);\n  }\n\n  private markUserToggled(key: unknown) {\n    this.userToggledKey.set(key);\n    this.userToggleReset?.unsubscribe();\n    this.userToggleReset = timer(DETAIL_ANIMATION_MS)\n      .pipe(\n        tap(() => this.userToggledKey.set(null)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n}\n","import { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CHEVRON_ICON } from '../icon/headless/chevron-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport { injectTableFeatureHost } from './headless/table-features';\nimport { TableRowExpansionDirective } from './table-row-expansion.directive';\n\n/**\n * The row expander, stamped into the lead column `etTableRowExpansion` registers. Its styles travel\n * with it rather than in `table.component.css`, so Angular injects them the first time a table actually\n * renders an expander.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-expander-cell',\n  template: `\n    @if (canExpand()) {\n      <button\n        [attr.aria-expanded]=\"expanded()\"\n        [attr.aria-label]=\"expanded() ? table.resolvedLabels().collapseRow : table.resolvedLabels().expandRow\"\n        (click)=\"expansion.toggle(row())\"\n        class=\"et-table-expander\"\n        type=\"button\"\n      >\n        <i [attr.data-expanded]=\"expanded()\" class=\"et-table-expander-icon\" etIcon=\"et-chevron\" aria-hidden=\"true\"></i>\n      </button>\n    }\n  `,\n  styleUrl: './table-expander-cell.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective],\n  providers: [provideIcons(CHEVRON_ICON)],\n})\nexport class TableExpanderCellComponent {\n  protected expansion = inject<TableRowExpansionDirective<unknown>>(TableRowExpansionDirective);\n  protected table = injectTableFeatureHost('etTableRowExpansion');\n\n  /** The row this cell belongs to. Set by the table (see {@link TableLeadCellComponent}). */\n  public row = input.required<unknown>();\n\n  protected canExpand = computed(() => this.expansion.canExpand(this.row()));\n  protected expanded = computed(() => this.expansion.isExpanded(this.row()));\n}\n","import { computed, Directive, inject, Injector, input, signal } from '@angular/core';\nimport { TableFilterTriggerComponent } from './table-filter-trigger.component';\nimport {\n  injectTableFeatureHost,\n  TableColumnMeta,\n  TableFeatureConfig,\n  tableFeatureConfig,\n} from './headless/table-features';\nimport { TableFilterOption, TableFilterOptionsProvider } from './table.types';\n\n/** Options for {@link TableFiltersDirective}. */\nexport type TableFiltersConfig = TableFeatureConfig;\n\n/**\n * Opt-in filter menus for `et-table`: renders a filter trigger on every `filterable` column and a\n * checkbox menu of that column's `filterOptions`, with an optional in-menu search and async\n * (provider-backed) options. The trigger and menu are stamped into the table's header cells (see\n * {@link TableFilterTriggerComponent}), so this directive itself renders nothing.\n *\n * It carries the whole [menu](/components/menu) system with it, which is exactly why it is separate:\n * a table without filters never pulls that in.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableFilters />\n *\n * <!-- switched off at runtime; wording lives in the table's label set -->\n * <et-table [etTableFilters]=\"{ enabled: canFilter() }\" … />\n */\n@Directive({\n  selector: '[etTableFilters]',\n  exportAs: 'etTableFilters',\n})\nexport class TableFiltersDirective {\n  /** The host table this feature registered with - filter state lives there, so it serializes. */\n  public table = injectTableFeatureHost('etTableFilters');\n\n  /** See {@link TableFiltersConfig}. */\n  public config = input({} as TableFiltersConfig, {\n    alias: 'etTableFilters',\n    transform: tableFeatureConfig<TableFiltersConfig>,\n  });\n\n  // Per-column filter-menu search text - client-side for a static option list, and forwarded to a\n  // provider's setQuery for an async one.\n  private searchQueries = signal<Record<string, string>>({});\n\n  constructor() {\n    // Filters sit at the trailing edge of the header cell, before the resize grip. The trigger is\n    // created with this feature's injector, so it can inject the feature back.\n    this.table.registerHeaderAdornment({\n      component: TableFilterTriggerComponent,\n      injector: inject(Injector),\n      order: 0,\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n\n  public isFiltered(key: string) {\n    return this.table.filterValuesFor(key).length > 0;\n  }\n\n  /** Whether the column's menu gets a search box - asked for explicitly, or implied by an async provider. */\n  public hasSearch(column: TableColumnMeta) {\n    return column.filterSearch === true || this.providerOf(column) !== null;\n  }\n\n  public searchQuery(key: string) {\n    return this.searchQueries()[key] ?? '';\n  }\n\n  public setSearchQuery(column: TableColumnMeta, query: string) {\n    this.searchQueries.update((current) => ({ ...current, [column.key]: query }));\n    this.providerOf(column)?.setQuery?.(query);\n  }\n\n  /** The options for a column's menu - provider-backed, or the static list narrowed by the search text. */\n  public optionsFor(column: TableColumnMeta): TableFilterOption[] {\n    const provider = this.providerOf(column);\n\n    if (provider) return provider.options();\n\n    const options = (column.filterOptions as TableFilterOption[] | undefined) ?? [];\n\n    if (!column.filterSearch) return options;\n\n    const query = this.searchQuery(column.key).trim().toLowerCase();\n\n    return query ? options.filter((option) => option.label.toLowerCase().includes(query)) : options;\n  }\n\n  public loading(column: TableColumnMeta) {\n    return this.providerOf(column)?.loading?.() ?? false;\n  }\n\n  public hasMore(column: TableColumnMeta) {\n    return this.providerOf(column)?.hasMore?.() ?? false;\n  }\n\n  public loadMore(column: TableColumnMeta) {\n    this.providerOf(column)?.loadMore?.();\n  }\n\n  /** A single-choice column's picked value, or `null` - the filter list holds at most one entry. */\n  public singleValueFor(key: string): unknown {\n    return this.table.filterValuesFor(key)[0] ?? null;\n  }\n\n  /**\n   * Pick a single-choice column's value, or clear it by picking the one already selected - the only way\n   * out of a radio group, which has no \"none\" row to go back to. Driven by each item's `activate`\n   * rather than the group's `valueChange`: a radio group emits nothing when the checked item is chosen\n   * again, which is exactly the gesture that has to clear here.\n   */\n  public toggleSingleValue(key: string, value: unknown) {\n    const current = this.singleValueFor(key);\n\n    this.table.setFilterValues(key, value === null || value === undefined || value === current ? [] : [value]);\n  }\n\n  /** The menu's checkbox group emits a single value or an array - normalize to the filter's list. */\n  public asArray(value: unknown): unknown[] {\n    return Array.isArray(value) ? value : value === null || value === undefined ? [] : [value];\n  }\n\n  /** The async options provider for a column, or `null` when its options are a static list. */\n  private providerOf(column: TableColumnMeta): TableFilterOptionsProvider | null {\n    const options = column.filterOptions;\n\n    return options && !Array.isArray(options) ? options : null;\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { IconButtonComponent } from '../button/icon-button.component';\nimport { FILTER_ICON } from '../icon/headless/filter-icon';\nimport { provideIcons } from '../icon/headless/icon-provider';\nimport { IconDirective } from '../icon/headless/icon.directive';\nimport {\n  MenuCheckboxGroupComponent,\n  MenuCheckboxItemComponent,\n  MenuComponent,\n  MenuRadioGroupComponent,\n  MenuRadioItemComponent,\n  MenuDirective,\n  MenuSearchDirective,\n  MenuSurfaceDirective,\n  MenuTriggerDirective,\n} from '../menu';\nimport { TableColumnMeta } from './headless/table-features';\nimport { TableFilterOptionContext, TableFilterSelection } from './table.types';\nimport { TableFiltersDirective } from './table-filters.directive';\n\n/**\n * The filter menu for one column's header cell, stamped there by `etTableFilters` (see\n * `registerHeaderAdornment`). A non-filterable column renders nothing.\n *\n * This is where the menu system is actually referenced, and it is created with the filters feature's\n * own injector, so it reaches the feature - and the feature's state - by plain DI.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-filter-trigger',\n  templateUrl: './table-filter-trigger.component.html',\n  styleUrl: './table-filter-trigger.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MenuDirective,\n    MenuTriggerDirective,\n    MenuSurfaceDirective,\n    MenuComponent,\n    MenuSearchDirective,\n    MenuCheckboxGroupComponent,\n    MenuCheckboxItemComponent,\n    MenuRadioGroupComponent,\n    MenuRadioItemComponent,\n    IconButtonComponent,\n    IconDirective,\n    NgTemplateOutlet,\n  ],\n  providers: [provideIcons(FILTER_ICON)],\n})\nexport class TableFilterTriggerComponent {\n  protected filters = inject(TableFiltersDirective);\n\n  /** The column this trigger belongs to. Set by the table (see {@link TableHeaderAdornment}). */\n  public column = input.required<TableColumnMeta>();\n\n  /** The host table's wording - every string here comes from there, never from this component. */\n  protected labels = this.filters.table.resolvedLabels;\n\n  /** One value or several - a column says so with `filterSelection`. @default 'multiple' */\n  protected selection = computed<TableFilterSelection>(() => this.column().filterSelection ?? 'multiple');\n\n  /**\n   * The menu's rows, resolved off the signals: the option, whether it is picked, and the template that\n   * renders it (the column's `etTableFilterOption`, else the trigger's own label row). Built here so\n   * the template binds fields rather than calling back into the feature per row.\n   */\n  protected options = computed(() => {\n    const column = this.column();\n    const template = this.filters.table.columnTemplate('filterOption', column.key);\n    const selected = new Set(this.filters.table.filterValuesFor(column.key));\n\n    return this.filters.optionsFor(column).map((option) => ({\n      value: option.value,\n      template,\n      context: { $implicit: option, selected: selected.has(option.value) } satisfies TableFilterOptionContext,\n    }));\n  });\n}\n","@if (column().filterable) {\n  <div class=\"et-table-filter\" etMenu>\n    <button\n      [attr.data-active]=\"filters.isFiltered(column().key)\"\n      [attr.aria-label]=\"labels().filterColumn(column().header ?? column().key)\"\n      [disabled]=\"!!column().disabled\"\n      class=\"et-table-filter-trigger\"\n      et-icon-button\n      size=\"xs\"\n      etMenuTrigger\n      type=\"button\"\n    >\n      <i etIcon=\"et-filter\"></i>\n    </button>\n\n    <ng-template etMenuSurface>\n      <et-menu>\n        @if (filters.hasSearch(column())) {\n          <input\n            [query]=\"filters.searchQuery(column().key)\"\n            [loading]=\"filters.loading(column())\"\n            [placeholder]=\"labels().filterSearch\"\n            (queryChange)=\"filters.setSearchQuery(column(), $event)\"\n            etMenuSearch\n          />\n        }\n\n        <!-- Radio for a single-choice column, checkboxes otherwise. Two blocks rather than one\n             parameterised group: the menu's radio and checkbox groups are different components (their\n             items carry different roles and marks), and which one a column wants never changes at\n             runtime. The option row itself is shared — see the #option template below. -->\n        @if (selection() === 'single') {\n          <!-- The group's `value` draws the mark; the picking is handled per item on `activate`. A radio\n               group emits nothing when the checked item is chosen again, and that gesture has to clear\n               the filter — a radio menu has no \"none\" row to go back to. -->\n          <et-menu-radio-group [value]=\"filters.singleValueFor(column().key)\">\n            @for (option of options(); track option.value) {\n              <et-menu-radio-item\n                [value]=\"option.value\"\n                (activate)=\"filters.toggleSingleValue(column().key, option.value)\"\n              >\n                <ng-container *ngTemplateOutlet=\"option.template ?? plain; context: option.context\" />\n              </et-menu-radio-item>\n            } @empty {\n              @if (!filters.loading(column())) {\n                <p class=\"et-table-filter-empty\">{{ labels().filterEmpty }}</p>\n              }\n            }\n          </et-menu-radio-group>\n        } @else {\n          <et-menu-checkbox-group\n            [value]=\"filters.table.filterValuesFor(column().key)\"\n            (valueChange)=\"filters.table.setFilterValues(column().key, filters.asArray($event))\"\n          >\n            @for (option of options(); track option.value) {\n              <et-menu-checkbox-item [value]=\"option.value\">\n                <ng-container *ngTemplateOutlet=\"option.template ?? plain; context: option.context\" />\n              </et-menu-checkbox-item>\n            } @empty {\n              @if (!filters.loading(column())) {\n                <p class=\"et-table-filter-empty\">{{ labels().filterEmpty }}</p>\n              }\n            }\n          </et-menu-checkbox-group>\n        }\n\n        @if (filters.hasMore(column())) {\n          <button (click)=\"filters.loadMore(column())\" class=\"et-table-filter-more\" type=\"button\">\n            {{ labels().filterLoadMore }}\n          </button>\n        }\n      </et-menu>\n    </ng-template>\n  </div>\n}\n\n<!-- The default option row: just the label. A column with an `etTableFilterOption` template gets that\n     instead, with the same context, so both paths render through one outlet above. -->\n<ng-template #plain let-option>{{ option.label }}</ng-template>\n","import { computed, Directive, inject, Injector, input, Signal, signal } from '@angular/core';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableGroupHeaderRowComponent } from './table-group-header-row.component';\nimport { TableHeaderGroup } from './table.types';\n\n/** Options for {@link TableGroupHeadersDirective}. */\nexport type TableGroupHeadersConfig = TableFeatureConfig;\n\n/**\n * Opt-in grouped column headers for `et-table`: a spanning row above the column headers, in which\n * adjacent visible columns that share a `group` read under one label.\n *\n * @example\n * const COLUMNS = {\n *   won: { header: 'W', value: (t: Team) => t.won, group: 'Season' },\n *   lost: { header: 'L', value: (t: Team) => t.lost, group: 'Season' },\n *   form: { header: 'Form', value: (t: Team) => t.form },\n * } satisfies TableColumns<Team>;\n *\n * <et-table [data]=\"teams()\" [columns]=\"COLUMNS\" etTableGroupHeaders />\n */\n@Directive({\n  selector: '[etTableGroupHeaders]',\n  exportAs: 'etTableGroupHeaders',\n  host: {\n    // What the column-header row offsets its own sticky position by, so it pins just below the group\n    // row. The base sheet falls back to 0, which is what a table without this feature gets.\n    '[style.--_et-table-group-h]': 'groupRowHeight() + \"px\"',\n  },\n})\nexport class TableGroupHeadersDirective {\n  private table = injectTableFeatureHost('etTableGroupHeaders');\n\n  /** See {@link TableGroupHeadersConfig}. */\n  public config = input({} as TableGroupHeadersConfig, {\n    alias: 'etTableGroupHeaders',\n    transform: tableFeatureConfig<TableGroupHeadersConfig>,\n  });\n\n  /**\n   * The stamped row's own measured height, which it hands over on construction - the row is created in\n   * the table's view, so there is nothing here to query for it. Part of the feature's internal contract\n   * with its row; consumers never set this.\n   */\n  public rowHeight = signal<Signal<number> | null>(null);\n\n  protected groupRowHeight = computed(() => this.rowHeight()?.() ?? 0);\n\n  /**\n   * The spanning row as maximal runs of adjacent visible columns sharing a `group`. Ungrouped columns\n   * each form their own single-track run (`label: null`) so the row still covers every track - dragging\n   * a column out of a group simply splits the run.\n   */\n  public headerGroups = computed<TableHeaderGroup[]>(() => {\n    const runs: TableHeaderGroup[] = [];\n\n    for (const column of this.table.visibleColumnsMeta()) {\n      const label = column.group ?? null;\n      const last = runs[runs.length - 1];\n\n      if (last && label !== null && last.label === label) {\n        last.span += 1;\n      } else {\n        runs.push({ key: column.key, label, span: 1 });\n      }\n    }\n\n    return runs;\n  });\n\n  /** Whether any visible column declares a `group`, i.e. whether the row shows a label at all. */\n  public hasGroups = computed(() => this.table.visibleColumnsMeta().some((column) => !!column.group));\n\n  constructor() {\n    this.table.registerHeaderRow({\n      component: TableGroupHeaderRowComponent,\n      injector: inject(Injector),\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n}\n","import { Component, computed, ElementRef, inject, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { signalElementDimensions } from '@ethlete/core';\nimport { injectTableFeatureHost } from './headless/table-features';\nimport { TableGroupHeadersDirective } from './table-group-headers.directive';\n\n/**\n * The spanning group-header row, stamped by the table through `registerHeaderRow`. It is\n * `display: contents`, so the cells below are grid items of the table's own grid and land in its tracks.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-group-header-row',\n  template: `\n    <!-- One empty cell per utility column (selection, expander), so the band covers their tracks too. -->\n    @for (lead of leads(); track $index) {\n      <div class=\"et-table-group-cell\" aria-hidden=\"true\"></div>\n    }\n    @for (group of feature.headerGroups(); track group.key) {\n      <div\n        #groupCell\n        [style.grid-column]=\"'span ' + group.span\"\n        [class.et-table-group-cell--labeled]=\"group.label\"\n        [attr.role]=\"group.label ? 'columnheader' : null\"\n        [attr.aria-hidden]=\"group.label ? null : 'true'\"\n        class=\"et-table-group-cell\"\n      >\n        @if (group.label) {\n          <span class=\"et-table-cell-text\">{{ group.label }}</span>\n        }\n      </div>\n    }\n    @if (table.hasFillerTrack()) {\n      <div class=\"et-table-group-cell et-table-filler-cell\" role=\"presentation\" aria-hidden=\"true\"></div>\n    }\n    @for (trail of trails(); track $index) {\n      <div class=\"et-table-group-cell\" aria-hidden=\"true\"></div>\n    }\n  `,\n  styleUrl: './table-group-header-row.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-table-group-row',\n    role: 'row',\n  },\n})\nexport class TableGroupHeaderRowComponent {\n  protected feature = inject(TableGroupHeadersDirective);\n  protected table = injectTableFeatureHost('etTableGroupHeaders');\n\n  // Measured so the column-header row can stick just below this one - see the feature's host binding.\n  private groupCells = viewChildren<ElementRef<HTMLElement>>('groupCell');\n  private groupCellDimensions = signalElementDimensions(computed(() => [...this.groupCells()]));\n\n  /** Rendered height of the row, for the header row's sticky offset. */\n  public blockSize = computed(() => this.groupCellDimensions()?.offset?.height ?? 0);\n\n  protected leads = computed(() => this.table.leadColumnsMeta());\n  protected trails = computed(() => this.table.trailColumnsMeta());\n\n  constructor() {\n    this.feature.rowHeight.set(this.blockSize);\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The edit-mode cell's rules, as a styles-only component mounted by `etTableInlineEdit` (see\n * `TableVirtualScrollStylesComponent` for the pattern).\n *\n * Referenced only from the feature, so a read-only table never pulls it into the bundle.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-inline-edit-styles',\n  template: '',\n  styleUrl: './table-inline-edit-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableInlineEditStylesComponent {}\n","import {\n  afterNextRender,\n  computed,\n  Directive,\n  DOCUMENT,\n  effect,\n  inject,\n  Injector,\n  input,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FieldTree, form } from '@angular/forms/signals';\nimport { getFocusableElements, injectRenderer, RuntimeError } from '@ethlete/core';\nimport { TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TABLE_ERROR_CODES } from './table-errors';\nimport { TableInlineEditStylesComponent } from './table-inline-edit-styles.component';\nimport { injectStyleManager } from '@ethlete/core';\nimport { TableComponent } from './table.component';\nimport { TableCellEditContext, TableColumnDef } from './table.types';\n\n/** What one committed edit reports. The mutation is the consumer's - see {@link TableInlineEditDirective}. */\nexport type TableCellEditCommit<T> = {\n  /** The row that was edited. */\n  row: T;\n  /** The edited column's key. */\n  column: string;\n  /** The cell's value before the edit. */\n  previous: unknown;\n  /** The value the editor produced. Equal to `previous` when the user changed nothing. */\n  next: unknown;\n};\n\n/** Which cell an edit was about - what `cellCancel` reports. */\nexport type TableCellEditTarget<T> = {\n  row: T;\n  /** The column's key. */\n  column: string;\n};\n\n/** Options for {@link TableInlineEditDirective}. */\nexport type TableInlineEditConfig<T> = TableFeatureConfig & {\n  /**\n   * Gate individual cells on top of the column's `editable` - e.g. a row the current user may not\n   * change, or a field that is locked once it has a value. Defaults to every cell of an editable column.\n   */\n  editableCell?: (row: T, column: string) => boolean;\n};\n\n// The one open edit. `position` is where the cell is (absolute row index, visible-column index), which\n// is what focus goes back to and what the Tab step counts from.\ntype TableEditSession<T> = {\n  row: T;\n  column: TableColumnDef<T>;\n  position: { row: number; column: number };\n  previous: unknown;\n  context: TableCellEditContext<T, unknown>;\n};\n\n/**\n * Opt-in inline cell editing for `et-table`: a cell of an `editable` column swaps its content for the\n * column's `etTableCellEdit` template, and Enter or Escape puts it back.\n *\n * The editor is yours. The feature holds the draft as a **signal-forms field** and hands it to the\n * template, so the control is bound exactly the way every control in this library is bound\n * (`[formField]`) - there is no cell-editor interface to implement.\n *\n * | Key / gesture       | Does                                                        |\n * | ------------------- | ----------------------------------------------------------- |\n * | double-click        | starts editing the cell                                       |\n * | `Enter`             | starts editing the focused cell, and commits the open one     |\n * | `Escape`            | cancels, restoring the value                                  |\n * | `Tab` / `Shift+Tab` | commits and moves to the next cell in the row, editing it too |\n *\n * `Enter` needs cell focus, which is [`etTableKeyboardNav`](/components/table#keyboard-navigation) -\n * without it the double-click flow still works, and the two features agree on `Enter` through the table\n * (navigation offers the cell here first, and only drills into its content when this feature passes).\n *\n * **The feature does not write to your data.** `commit` reports the change; you perform the mutation\n * and report its progress back through the table's `cellState`, which is what shows the cell as saving\n * or failed.\n *\n * @example\n * <et-table\n *   [data]=\"people()\"\n *   [columns]=\"COLUMNS\"\n *   [cellState]=\"cellStateOf\"\n *   (cellCommit)=\"save($event)\"\n *   etTableInlineEdit\n *   etTableKeyboardNav\n * >\n *   <ng-template [etTableCellEdit]=\"COLUMNS.name\" let-field=\"field\">\n *     <et-form-field size=\"sm\"><et-input [formField]=\"field\" aria-label=\"Name\" /></et-form-field>\n *   </ng-template>\n * </et-table>\n */\n@Directive({\n  selector: '[etTableInlineEdit]',\n  exportAs: 'etTableInlineEdit',\n  host: {\n    '(dblclick)': 'handleDoubleClick($event)',\n    '(keydown)': 'handleKeydown($event)',\n  },\n})\nexport class TableInlineEditDirective<T> {\n  private table = injectHostTable<T>();\n  private renderer = injectRenderer();\n  private injector = inject(Injector);\n  private document = inject(DOCUMENT);\n\n  /** See {@link TableInlineEditConfig}. */\n  public config = input({} as TableInlineEditConfig<T>, {\n    alias: 'etTableInlineEdit',\n    transform: tableFeatureConfig<TableInlineEditConfig<T>>,\n  });\n\n  /**\n   * A cell was committed - with Enter, with Tab, or by opening another one. Perform the mutation here\n   * and drive the table's `cellState` from it; the feature has already closed the editor.\n   */\n  public cellCommit = output<TableCellEditCommit<T>>();\n\n  /** An edit was abandoned with Escape, or because its row left the table. Nothing was changed. */\n  public cellCancel = output<TableCellEditTarget<T>>();\n\n  // The draft the open editor writes into. One signal - and so one form - for every edit, because only\n  // one cell is ever open; starting an edit seeds it with the cell's current value.\n  private draft = signal<unknown>(null);\n\n  // What the template binds with [formField]. `form()` needs an injection context, which is why it is\n  // built once here rather than per session.\n  private draftField = form(this.draft) as FieldTree<unknown>;\n\n  private session = signal<TableEditSession<T> | null>(null);\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  /** The cell currently being edited, or `null`. */\n  public editing = computed(() => {\n    const session = this.session();\n\n    return session && ({ row: session.row, column: session.column.key } satisfies TableCellEditTarget<T>);\n  });\n\n  constructor() {\n    // The edit-mode cell's rules ship with the feature, so a read-only table has none of them.\n    injectStyleManager().mount(TableInlineEditStylesComponent);\n\n    this.table.registerCellEditing({\n      cell: computed(() => {\n        const session = this.session();\n\n        return (\n          session && {\n            row: this.table.rowIdentity(session.row),\n            column: session.column.key,\n            context: session.context,\n          }\n        );\n      }),\n      editCell: (rowIndex, columnIndex) => this.editCell(rowIndex, columnIndex),\n      enabled: this.enabled,\n    });\n\n    // A refetch, a filter or a page change can take the edited row away while its editor is open. Left\n    // alone the draft would go on floating over whatever row moved into that position.\n    effect(() => {\n      const rows = this.table.rows();\n      const session = untracked(this.session);\n\n      if (!session) return;\n\n      const identity = this.table.rowIdentity(session.row);\n\n      if (!rows.some((row) => this.table.rowIdentity(row) === identity)) untracked(() => this.cancel());\n    });\n  }\n\n  /**\n   * Start editing the cell at an absolute row index and a visible-column index. Returns whether it\n   * opened - `false` for a column that isn't `editable`, has no `etTableCellEdit` template, or was\n   * turned down by `editableCell`. Also the table's `editCell` seam, which is how `Enter` arrives.\n   */\n  public editCell(rowIndex: number, columnIndex: number) {\n    if (!this.enabled()) return false;\n\n    const row = untracked(() => this.table.rows())[rowIndex];\n    const column = untracked(() => this.table.visibleColumns())[columnIndex];\n\n    if (!row || !column || !this.canEdit(row, column)) return false;\n\n    this.begin({ row, column, position: { row: rowIndex, column: columnIndex } });\n\n    return true;\n  }\n\n  /** Close the open editor and report the draft as a commit. Does nothing when no cell is open. */\n  public commit() {\n    const session = untracked(this.session);\n\n    if (!session) return;\n\n    const next = untracked(this.draft);\n\n    // Closed before the consumer hears about it: they will start a request and drive `cellState`, and\n    // the cell has to be showing its value again by then for that state to land on anything.\n    this.session.set(null);\n    this.restoreFocus(session);\n    this.cellCommit.emit({ row: session.row, column: session.column.key, previous: session.previous, next });\n  }\n\n  /** Close the open editor, discarding the draft. Does nothing when no cell is open. */\n  public cancel() {\n    const session = untracked(this.session);\n\n    if (!session) return;\n\n    this.session.set(null);\n    this.restoreFocus(session);\n    this.cellCancel.emit({ row: session.row, column: session.column.key });\n  }\n\n  protected handleDoubleClick(event: MouseEvent) {\n    if (!this.enabled()) return;\n\n    const hit = this.cellFrom(event);\n\n    if (!hit) return;\n\n    // A double-click also selects the text under it, which is exactly what the editor is about to\n    // replace - so the selection would be left behind on top of the field.\n    if (this.editCell(hit.row, hit.column)) this.document.getSelection()?.removeAllRanges();\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    if (!this.enabled()) return;\n\n    const session = untracked(this.session);\n\n    if (!session) return;\n\n    const cell = this.cellOf(session);\n\n    // Only the open editor's own keystrokes are ours. Everything else in the table - another row's\n    // link, a header's sort button - carries on as it would without this feature.\n    if (!cell || !event.composedPath().includes(cell)) return;\n\n    // Escape gets out from anywhere in the cell, including the cell itself: an editor with nothing\n    // focusable in it would otherwise be a trap.\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      this.cancel();\n\n      return;\n    }\n\n    // Enter and Tab have to come from *inside* the editor. The `Enter` that opens one is dispatched on\n    // the cell, and keyboard navigation may have handed it over before this listener ran - so without\n    // this the editor would be closed by the very keystroke that opened it. Host-listener order between\n    // two directives on the same element is not ours to choose, so it must not matter.\n    if (event.target === cell) return;\n\n    switch (event.key) {\n      case 'Enter':\n        event.preventDefault();\n        this.commit();\n\n        return;\n      case 'Tab':\n        event.preventDefault();\n        this.commitAndMove(session, event.shiftKey ? -1 : 1);\n\n        return;\n      default:\n        return;\n    }\n  }\n\n  // Tab moves within the row only. The next row may not be rendered (a virtual window), and a Tab that\n  // scrolls the grid is not what someone typing down a form expects; at the row's edge the cell simply\n  // keeps focus, so the next Tab leaves the grid exactly as it would from any other cell.\n  private commitAndMove(session: TableEditSession<T>, step: number) {\n    const { row: rowIndex, column: columnIndex } = session.position;\n    const nextIndex = columnIndex + step;\n\n    this.commit();\n\n    const cell = this.table.bodyCellElementAt(rowIndex, nextIndex);\n\n    if (!cell) return;\n\n    // Focus first: keyboard navigation, when it is on, picks the cell up as its new roving target from\n    // this very event, and the editor that may open next then focuses out of the right place.\n    this.focusCellElement(cell);\n\n    const row = untracked(() => this.table.rows())[rowIndex];\n    const column = untracked(() => this.table.visibleColumns())[nextIndex];\n\n    if (row && column && this.canEdit(row, column))\n      this.begin({ row, column, position: { row: rowIndex, column: nextIndex } });\n  }\n\n  private begin({ row, column, position }: Omit<TableEditSession<T>, 'previous' | 'context'>) {\n    // Opening a second cell commits the first - one cell is in edit mode at a time, and abandoning the\n    // typing someone just did is not what moving on means.\n    this.commit();\n\n    const previous = column.value(row);\n\n    this.draft.set(previous);\n    this.session.set({\n      row,\n      column,\n      position,\n      previous,\n      context: { $implicit: row, value: previous, field: this.draftField },\n    });\n\n    // The editor does not exist until the render this just scheduled has run.\n    afterNextRender({ write: () => this.focusEditor() }, { injector: this.injector });\n  }\n\n  private focusEditor() {\n    const session = untracked(this.session);\n\n    if (!session) return;\n\n    const cell = this.cellOf(session);\n\n    if (!cell) return;\n\n    getFocusableElements(cell, this.document)[0]?.focus();\n  }\n\n  // Back to the cell the editor was in, so the arrows carry on from there rather than from wherever the\n  // browser puts focus when the editor is destroyed (the document body).\n  private restoreFocus(session: TableEditSession<T>) {\n    const cell = this.cellOf(session);\n\n    if (cell) this.focusCellElement(cell);\n  }\n\n  // A body cell is only focusable while a cell-navigation feature is on, which inline editing does not\n  // require. Giving it a `-1` stop of its own costs nothing (it stays out of the tab order) and is what\n  // keeps focus inside the table after a commit on a table without the arrows.\n  private focusCellElement(cell: HTMLElement) {\n    if (!cell.hasAttribute('tabindex')) this.renderer.setAttribute(cell, 'tabindex', '-1');\n\n    cell.focus();\n  }\n\n  private canEdit(row: T, column: TableColumnDef<T>) {\n    // Without a template there is nothing to swap the cell's content for, so `editable` alone would\n    // blank the cell on Enter. Treating that as \"not editable\" is the quiet, correct answer.\n    if (!column.editable || !this.table.columnTemplate('cellEdit', column.key)) return false;\n\n    return this.config().editableCell?.(row, column.key) ?? true;\n  }\n\n  private cellOf(session: TableEditSession<T>) {\n    return this.table.bodyCellElementAt(session.position.row, session.position.column);\n  }\n\n  /**\n   * The body cell an event came from, as a position - `null` when it started outside the grid body.\n   * The rendered cells are rows major, so their index carries both coordinates; this is the same\n   * arithmetic keyboard navigation does, and it exists because `closest()` is banned here.\n   */\n  private cellFrom(event: Event) {\n    const cells = this.table.bodyCellElements();\n    const path = event.composedPath();\n    const index = cells.findIndex((candidate) => path.includes(candidate));\n\n    if (index === -1) return null;\n\n    const columns = untracked(() => this.table.visibleColumns()).length;\n\n    if (!columns) return null;\n\n    return {\n      row: this.table.renderedRowOffset() + Math.floor(index / columns),\n      column: index % columns,\n    };\n  }\n}\n\n// The feature reads cell values through the columns' `value` accessors, which the row-type-agnostic\n// feature seam deliberately hides - so it injects the table itself, as the CSV export does. Placed\n// anywhere else the directive could only ever silently do nothing, so name the mistake instead.\nconst injectHostTable = <T>() => {\n  const table = inject(TableComponent, { optional: true }) as TableComponent<T> | null;\n\n  if (!table) {\n    throw new RuntimeError(\n      TABLE_ERROR_CODES.FEATURE_OUTSIDE_TABLE,\n      `[etTableInlineEdit] must be used on an <et-table>.`,\n    );\n  }\n\n  return table;\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The split page-sticky header layout, as a styles-only component mounted by `etTablePageStickyHeader` - see\n * `TableDragScrollStylesComponent` for the same pattern.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-page-sticky-header-styles',\n  template: '',\n  styleUrl: './table-page-sticky-header-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TablePageStickyHeaderStylesComponent {}\n","import { Directive, Injector, afterNextRender, computed, effect, inject, input } from '@angular/core';\nimport { injectRenderer, injectStyleManager, signalHostElementDimensions } from '@ethlete/core';\nimport { TableFeatureConfig, injectTableFeatureHost, tableFeatureConfig } from './headless/table-features';\nimport { TablePageStickyHeaderStylesComponent } from './table-page-sticky-header-styles.component';\n\n/** Options for {@link TablePageStickyHeaderDirective}. */\nexport type TablePageStickyHeaderConfig = TableFeatureConfig & {\n  /** How far below the top of the viewport the header stops, in px. */\n  offset?: number;\n};\n\n/**\n * Keeps the header rows of an unbounded, page-scrolled `et-table` at the top of the viewport.\n * The header stays horizontally aligned with the body and stops at the end of the table.\n *\n * Not for bounded or virtualized tables, which already pin their header inside their own scroll viewport.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTablePageStickyHeader />\n */\n@Directive({\n  selector: '[etTablePageStickyHeader]',\n  exportAs: 'etTablePageStickyHeader',\n  host: {\n    '[class.et-table-host--page-sticky-header]': 'enabled()',\n    '[style.--et-table-sticky-header-offset.px]': 'config().offset ?? null',\n  },\n})\nexport class TablePageStickyHeaderDirective {\n  private table = injectTableFeatureHost('etTablePageStickyHeader');\n  private injector = inject(Injector);\n  private renderer = injectRenderer();\n\n  /** See {@link TablePageStickyHeaderConfig}. */\n  public config = input({} as TablePageStickyHeaderConfig, {\n    alias: 'etTablePageStickyHeader',\n    transform: tableFeatureConfig<TablePageStickyHeaderConfig>,\n  });\n  private hostDimensions = signalHostElementDimensions();\n\n  protected enabled = computed(() => this.config().enabled ?? true);\n\n  constructor() {\n    injectStyleManager().mount(TablePageStickyHeaderStylesComponent);\n    this.table.registerPageStickyHeader({ enabled: this.enabled });\n\n    effect(() => {\n      this.hostDimensions();\n      this.enabled();\n      this.table.columnWidths();\n      this.table.visibleColumnsMeta();\n      this.table.leadColumnsMeta();\n      this.table.trailColumnsMeta();\n      afterNextRender({ read: () => this.measure() }, { injector: this.injector });\n    });\n  }\n\n  private measure() {\n    const host = this.table.element;\n    const grid = this.table.gridElement();\n    const headerGrid = this.table.pageHeaderGridElement();\n    const scroller = this.table.scrollElement();\n    const view = host.ownerDocument.defaultView;\n\n    if (!this.enabled() || !grid || !headerGrid || !view) {\n      this.table.setPageHeaderColumns(null);\n      this.writeMaxScroll(host, 0);\n\n      return;\n    }\n\n    this.table.setPageHeaderColumns(view.getComputedStyle(grid).gridTemplateColumns);\n    this.writeMaxScroll(host, Math.max(0, scroller.scrollWidth - scroller.clientWidth));\n  }\n\n  private writeMaxScroll(host: HTMLElement, maxScroll: number) {\n    this.renderer?.setCssProperties(host, { '--_et-table-inline-max-scroll': `${maxScroll}px` });\n  }\n}\n","import {\n  afterNextRender,\n  computed,\n  DestroyRef,\n  Directive,\n  effect,\n  inject,\n  Injector,\n  input,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { dragGestureFrom, injectPrefersReducedMotion, injectRenderer } from '@ethlete/core';\nimport { EMPTY, exhaustMap, fromEvent, tap } from 'rxjs';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableReorderOverlayComponent } from './table-reorder-overlay.component';\n\n/** Options for {@link TableReorderDirective}. */\nexport type TableReorderConfig = TableFeatureConfig;\n\n/** How long a column takes to slide between preview positions. */\nconst PREVIEW_DURATION_MS = 160;\n\n/** Dead zone (px) each side of a column's midpoint - see {@link TableReorderDirective.flipThresholdOf}. */\nconst FLIP_HYSTERESIS_PX = 12;\n\n/** How near an inline edge a drag has to be held before the table scrolls itself under it. */\nconst AUTO_SCROLL_ZONE_PX = 56;\n\n/** Fastest the edge auto-scroll runs, in px per frame - reached with the pointer on the edge itself. */\nconst AUTO_SCROLL_MAX_STEP_PX = 18;\n\n/** The column order that dropping `key` next to `overKey` (on the given side) would produce. */\nconst landingOrder = (order: readonly string[], move: { key: string; overKey: string; before: boolean }) => {\n  const without = order.filter((candidate) => candidate !== move.key);\n  const over = without.indexOf(move.overKey);\n\n  if (over === -1) return [...order];\n\n  const at = move.before ? over : over + 1;\n\n  return [...without.slice(0, at), move.key, ...without.slice(at)];\n};\n\n/** The inline offset each column starts at, walking a given order's widths from zero. */\nconst runningOffsets = (order: readonly string[], widths: ReadonlyMap<string, number>) => {\n  const offsets = new Map<string, number>();\n  let x = 0;\n\n  for (const key of order) {\n    offsets.set(key, x);\n    x += widths.get(key) ?? 0;\n  }\n\n  return offsets;\n};\n\n/**\n * Opt-in drag-to-reorder columns for `et-table`: dragging a header lifts a floating ghost, and the\n * columns slide into the order they'd take on release, so the table itself previews the drop.\n *\n * The drag has to live on the header cells the *table* renders, so this delegates `pointerdown` from\n * the table's host and drives `dragGestureFrom` (the primitive behind `etDragHandle`) on the cell that\n * was hit. The ghost is drawn by a layer the table hosts ({@link TableReorderOverlayComponent}).\n *\n * Pinned columns are excluded: they anchor to an edge, so dragging one into the scrolling middle\n * leaves a gap and breaks the sticky offsets.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableReorder />\n */\n@Directive({\n  selector: '[etTableReorder]',\n  exportAs: 'etTableReorder',\n})\nexport class TableReorderDirective {\n  public table = injectTableFeatureHost('etTableReorder');\n  private injector = inject(Injector);\n  private renderer = injectRenderer();\n  private prefersReducedMotion = injectPrefersReducedMotion();\n\n  /** See {@link TableReorderConfig}. */\n  public config = input({} as TableReorderConfig, {\n    alias: 'etTableReorder',\n    transform: tableFeatureConfig<TableReorderConfig>,\n  });\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  /** The column key being dragged, and the header text shown in the floating ghost. */\n  public dragging = signal<{ key: string; header: string } | null>(null);\n\n  /** Live pointer position - drives the ghost. */\n  public pointer = signal<{ x: number; y: number } | null>(null);\n\n  // Where a drop would land: the column it would insert next to, and which side.\n  private target = signal<{ key: string; before: boolean } | null>(null);\n\n  // The preview offset currently applied to each shifted column, so clearing doesn't have to touch\n  // every cell in the table.\n  private previewOffsets = new Map<string, number>();\n\n  // The last previewed landing order, to skip re-applying identical transforms on every pointer move.\n  private previewSignature: string | null = null;\n\n  // The pointer's last x, which the edge auto-scroll re-resolves the drop target against: it moves the\n  // columns while the pointer stands still, so no pointer event says the target changed.\n  private pointerX = 0;\n  private autoScrollFrame: number | null = null;\n  private autoScrollStep = 0;\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => this.stopAutoScroll());\n\n    this.table.registerLayer({\n      component: TableReorderOverlayComponent,\n      injector: this.injector,\n      enabled: this.enabled,\n    });\n\n    // The grab affordance is on the table host, so only a reorderable table's headers advertise it.\n    effect(() => {\n      const method = this.enabled() ? 'addClass' : 'removeClass';\n\n      this.renderer[method](this.table.element, 'et-table-host--reorderable');\n    });\n\n    // A delegated pointerdown on the table sees every header cell, without the table having to know\n    // this feature exists (and without it importing any drag code).\n    fromEvent<PointerEvent>(this.table.element, 'pointerdown')\n      .pipe(\n        // one gesture at a time - a second pointer must not start a competing drag\n        exhaustMap((event) => {\n          const hit = this.headerCellAt(event);\n\n          if (!hit) return EMPTY;\n\n          // Claimed here, in the pointerdown itself, so drag-to-scroll reads the claim whichever of\n          // the two listeners the browser ran first. Without it a header drag reorders the column and\n          // pans the table out from under it at the same time.\n          this.table.claimPointerGesture(event, 'etTableReorder');\n\n          return dragGestureFrom(event, hit.cell).pipe(\n            tap((gesture) => {\n              if (gesture.type === 'start') this.start(hit.key, gesture.data);\n              if (gesture.type === 'move') this.move(gesture.data);\n              if (gesture.type === 'end') this.end();\n              if (gesture.type === 'cancelled') this.cancel();\n            }),\n          );\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n  }\n\n  /** The reorderable header cell a pointerdown landed in, or `null` when the drag must not start. */\n  private headerCellAt(event: PointerEvent) {\n    if (event.button !== 0 || !this.enabled()) return null;\n\n    const cells = this.table.headerCellElements();\n    const path = event.composedPath();\n    const index = cells.findIndex((cell) => path.includes(cell));\n\n    if (index === -1) return null;\n\n    const column = this.table.visibleColumnsMeta()[index];\n    const cell = cells[index];\n\n    // Pinned columns can't be reordered - they anchor to an edge. A nested drag handle (the resize\n    // grip) stops its own pointerdown, so reaching here means the header itself was grabbed.\n    if (!column || !cell || this.table.effectiveStickyOf(column.key) !== null) return null;\n\n    return { cell, key: column.key };\n  }\n\n  private start(key: string, at: { clientX: number; clientY: number }) {\n    const header = this.table.visibleColumnsMeta().find((column) => column.key === key)?.header ?? key;\n\n    this.dragging.set({ key, header });\n    this.pointer.set({ x: at.clientX, y: at.clientY });\n    this.pointerX = at.clientX;\n    this.target.set(null);\n    this.previewSignature = null;\n    this.markDragging(key, true);\n  }\n\n  private move(at: { clientX: number; clientY: number }) {\n    if (!this.dragging()) return;\n\n    this.pointer.set({ x: at.clientX, y: at.clientY });\n    this.pointerX = at.clientX;\n    this.resolveDropTarget(at.clientX);\n    this.previewLandingOrder();\n    this.syncAutoScroll(at.clientX);\n  }\n\n  /** The browser took the gesture away, so there is no drop the user chose - slide back and clean up. */\n  private cancel() {\n    this.target.set(null);\n    this.end();\n  }\n\n  /** Commit the deferred move once; the columns are already sitting where it puts them. */\n  private end() {\n    const dragging = this.dragging();\n    const target = this.target();\n\n    this.stopAutoScroll();\n\n    if (dragging) this.markDragging(dragging.key, false);\n\n    const moved = dragging && target && target.key !== dragging.key;\n\n    if (moved) this.table.moveColumnNextTo(dragging.key, { overKey: target.key, before: target.before });\n\n    this.dragging.set(null);\n    this.pointer.set(null);\n    this.target.set(null);\n    this.previewSignature = null;\n\n    if (!moved) {\n      // Nothing to commit - slide the preview back to the resting order.\n      this.clearPreview({ animated: true });\n\n      return;\n    }\n\n    // The preview already has every cell at its post-drop x, so the transforms must survive until the\n    // reordered grid has actually rendered - dropping them any earlier flashes the old order for a\n    // frame. Cleared in the write phase of that render, which is before it paints.\n    afterNextRender({ write: () => this.clearPreview({ animated: false }) }, { injector: this.injector });\n  }\n\n  /**\n   * Scroll the table while the drag is held near an inline edge, so a column can be dropped past the\n   * visible range. A reorder is otherwise limited to what fits the viewport: the pointer is already\n   * down, so neither the wheel nor a drag-to-scroll pan is available to bring the target column in.\n   *\n   * The step grows with how far into the zone the pointer is, so the edge itself runs fastest and a\n   * pointer that only grazes the zone barely moves the table.\n   *\n   * Measured from the inner edge of each pinned block, not from the table's own edges: a pinned column\n   * covers that strip of the viewport, so a zone laid on the viewport edge sits underneath it and the\n   * drag has to travel all the way past the pinned column before the table moves at all.\n   */\n  private syncAutoScroll(clientX: number) {\n    const bounds = this.table.scrollElement().getBoundingClientRect();\n    const frozen = this.table.frozenInsets();\n    const intoStart = AUTO_SCROLL_ZONE_PX - (clientX - (bounds.left + frozen.start));\n    const intoEnd = AUTO_SCROLL_ZONE_PX - (bounds.right - frozen.end - clientX);\n    const depth = intoStart > 0 ? -intoStart : intoEnd > 0 ? intoEnd : 0;\n    const ratio = Math.min(Math.abs(depth), AUTO_SCROLL_ZONE_PX) / AUTO_SCROLL_ZONE_PX;\n\n    this.autoScrollStep = Math.sign(depth) * ratio * AUTO_SCROLL_MAX_STEP_PX;\n\n    if (this.autoScrollStep === 0) {\n      this.stopAutoScroll();\n\n      return;\n    }\n\n    if (this.autoScrollFrame === null) this.stepAutoScroll();\n  }\n\n  private stepAutoScroll() {\n    const scroller = this.table.scrollElement();\n    const before = scroller.scrollLeft;\n\n    scroller.scrollLeft = before + this.autoScrollStep;\n\n    // The table is already at that end, so stop rather than run a frame per tick doing nothing.\n    if (scroller.scrollLeft === before) {\n      this.stopAutoScroll();\n\n      return;\n    }\n\n    this.resolveDropTarget(this.pointerX);\n    this.previewLandingOrder();\n\n    this.autoScrollFrame = requestAnimationFrame(() => this.stepAutoScroll());\n  }\n\n  private stopAutoScroll() {\n    if (this.autoScrollFrame !== null) cancelAnimationFrame(this.autoScrollFrame);\n\n    this.autoScrollFrame = null;\n    this.autoScrollStep = 0;\n  }\n\n  /**\n   * Resolve which column the pointer is over and which side it would drop on.\n   *\n   * Hit-testing runs against the columns' **resting** slots (see {@link restingBoundsOf}), not where\n   * the preview has moved them to. Measuring them as-drawn would feed the preview back into its own\n   * input: shifting a column out from under the pointer changes which column is hit, which picks a\n   * different landing order, which shifts a different set of columns - and the row oscillates on its\n   * own. Resting slots never move, so each pointer position maps to exactly one landing order.\n   */\n  private resolveDropTarget(clientX: number) {\n    const dragging = this.dragging()?.key;\n    const cells = this.table.headerCellElements();\n    const columns = this.table.visibleColumnsMeta();\n\n    for (let index = 0; index < cells.length; index++) {\n      const cell = cells[index];\n      const overColumn = columns[index];\n      const overKey = overColumn?.key;\n\n      if (!cell || !overColumn || !overKey) continue;\n\n      // Pinned columns anchor to an edge - never drop a column onto (or across) one.\n      if (this.table.effectiveStickyOf(overKey) !== null) continue;\n\n      const bounds = this.restingBoundsOf(cell);\n\n      if (clientX < bounds.start || clientX > bounds.end) continue;\n\n      if (overKey === dragging) {\n        // Hovering the dragged column's own slot - releasing here changes nothing.\n        this.target.set(null);\n\n        return;\n      }\n\n      this.target.set({ key: overKey, before: clientX < this.flipThresholdOf(bounds, overKey) });\n\n      return;\n    }\n  }\n\n  /**\n   * Where the column sits in the table's real layout, whatever the preview is currently drawing.\n   *\n   * `offsetLeft`/`offsetWidth` are layout geometry, so - unlike a client rect - they ignore the\n   * preview's transforms, *including* a transform part-way through its transition. That matters: a\n   * client rect measured mid-slide sits between the two orders, so backing out the preview's final\n   * offset lands nowhere real and a 1px pointer move can resolve to a whole different column.\n   *\n   * Both halves are read live rather than captured at drag start, so the bounds stay right if the\n   * table is scrolled sideways mid-drag.\n   */\n  private restingBoundsOf(cell: HTMLElement) {\n    const parent = cell.offsetParent as HTMLElement | null;\n\n    const anchor = parent ? parent.getBoundingClientRect().left + parent.clientLeft : 0;\n    const start = anchor + cell.offsetLeft;\n\n    return { start, end: start + cell.offsetWidth };\n  }\n\n  /**\n   * The x at which the drop flips from this column's leading to its trailing side.\n   *\n   * That is its midpoint, biased *away* from whichever side is already showing. Without the bias a\n   * hand resting on the midpoint flaps the preview - every pixel of tremor re-crosses it, and each\n   * crossing slides the columns a full width in the opposite direction. The bias makes crossing back\n   * a deliberate move instead, and is capped to a quarter of the column so a narrow one stays usable.\n   */\n  private flipThresholdOf(bounds: { start: number; end: number }, key: string) {\n    const current = this.target();\n    const showing = current?.key === key ? current.before : null;\n    const slack = Math.min(FLIP_HYSTERESIS_PX, (bounds.end - bounds.start) / 4);\n    const middle = (bounds.start + bounds.end) / 2;\n\n    if (showing === null) return middle;\n\n    return showing ? middle + slack : middle - slack;\n  }\n\n  /**\n   * Slide every column to the x it would have if the drag ended now, so the table shows the landing\n   * order live instead of a floating bar hinting at it.\n   *\n   * Offsets are derived from the two orders rather than from measured positions: cumulative widths\n   * give an exact delta per column, and a pinned column - which can never be reordered - keeps its\n   * index and so lands on a delta of 0. Measuring `left` instead would read a sticky cell's *painted*\n   * x, which drifts from its layout x as soon as the table is scrolled sideways.\n   */\n  private previewLandingOrder() {\n    const dragging = this.dragging()?.key;\n    const target = this.target();\n    const columns = this.table.visibleColumnsMeta();\n    const cells = this.table.headerCellElements();\n\n    if (!dragging) return;\n\n    const order = columns.map((column) => column.key);\n    const landing =\n      target && target.key !== dragging\n        ? landingOrder(order, { key: dragging, overKey: target.key, before: target.before })\n        : order;\n    const signature = landing.join('\\0');\n\n    if (signature === this.previewSignature) return;\n\n    this.previewSignature = signature;\n\n    const widths = new Map(order.map((key, index) => [key, cells[index]?.getBoundingClientRect().width ?? 0]));\n    const restingX = runningOffsets(order, widths);\n    const landingX = runningOffsets(landing, widths);\n    const transition = this.prefersReducedMotion() ? 'none' : `transform ${PREVIEW_DURATION_MS}ms ease`;\n\n    for (const key of order) {\n      const delta = (landingX.get(key) ?? 0) - (restingX.get(key) ?? 0);\n      const shifted = Math.abs(delta) >= 0.5;\n\n      if (!shifted && !this.previewOffsets.has(key)) continue;\n\n      for (const element of this.cellsFor(key)) {\n        this.renderer.setStyle(element, { transition, transform: shifted ? `translateX(${delta}px)` : '' });\n      }\n\n      if (shifted) this.previewOffsets.set(key, delta);\n      else this.previewOffsets.delete(key);\n    }\n  }\n\n  /** Drop the preview transforms - instantly once the real order has caught up, animated otherwise. */\n  private clearPreview({ animated }: { animated: boolean }) {\n    for (const key of this.previewOffsets.keys()) {\n      for (const element of this.cellsFor(key)) {\n        this.renderer.setStyle(element, {\n          transition: animated ? `transform ${PREVIEW_DURATION_MS}ms ease` : 'none',\n        });\n        this.renderer.removeStyle(element, 'transform');\n      }\n    }\n\n    this.previewOffsets.clear();\n  }\n\n  /** A column's header cell plus every body cell under it. */\n  private cellsFor(key: string) {\n    const index = this.table.visibleColumnsMeta().findIndex((column) => column.key === key);\n    const header = this.table.headerCellElements()[index];\n\n    return header ? [header, ...this.table.bodyCellElementsFor(key)] : this.table.bodyCellElementsFor(key);\n  }\n\n  // The source header dims while its ghost is dragged. Set imperatively: the cell belongs to the\n  // table's template, so there is no binding of ours to drive it.\n  private markDragging(key: string, dragging: boolean) {\n    const cells = this.table.headerCellElements();\n    const index = this.table.visibleColumnsMeta().findIndex((column) => column.key === key);\n    const cell = cells[index];\n\n    if (!cell) return;\n\n    if (dragging) {\n      this.renderer.addClass(cell, 'et-table-header-cell--dragging');\n    } else {\n      this.renderer.removeClass(cell, 'et-table-header-cell--dragging');\n    }\n  }\n}\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { TableReorderDirective } from './table-reorder.directive';\n\n/**\n * The reorder drag ghost, stamped into the table as a layer by `etTableReorder` (see `registerLayer`).\n * Renders nothing until a drag starts.\n *\n * This is what lets the reorder feature be a directive: the drag lives on the header cells the table\n * renders, and the only thing that needs a view - this floating UI - is hosted by the table. Where the\n * column will land needs no view at all: the columns themselves slide into the landing order.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-reorder-overlay',\n  template: `\n    @if (reorder.dragging(); as drag) {\n      <!-- Floating copy of the dragged header; the table's own markup stays put until drop. -->\n      @if (reorder.pointer(); as position) {\n        <div [style.left.px]=\"position.x\" [style.top.px]=\"position.y\" class=\"et-table-drag-ghost\" aria-hidden=\"true\">\n          {{ drag.header }}\n        </div>\n      }\n    }\n  `,\n  styleUrl: './table-reorder-overlay.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableReorderOverlayComponent {\n  protected reorder = inject(TableReorderDirective);\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n// The route is the base a relative command list resolves against - the same job `routerLink` gives it -\n// not a source of values to read, which is what the rule below is about.\n// eslint-disable-next-line ethlete/no-angular-router-api\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\n\n/** Options for {@link TableRowRouterLinkDirective}. */\nexport type TableRowRouterLinkConfig = TableFeatureConfig;\n\n/**\n * Whether the browser, not the router, should handle a click: a middle or right button, or any modifier\n * the user presses to open a link somewhere else. Exactly what `RouterLink` leaves alone, and the reason\n * the table renders a real `href` at all.\n */\nconst opensElsewhere = (event: MouseEvent) =>\n  event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey;\n\n/**\n * Opt-in Angular routing for an `et-table`'s [row links](/components/table#row-links): with it, a\n * `[rowLink]` may answer with router commands (`['/orders', order.id]`) instead of an `href` string, and\n * a plain click navigates through the router rather than loading the page again.\n *\n * The commands are resolved relative to the route the table sits on, the way `routerLink` resolves its\n * own. Modified clicks - middle button, Ctrl/Cmd/Shift - are left to the browser, which is what keeps\n * \"open in a new tab\" working on the same rows.\n *\n * It is a feature rather than part of the table because the base table depends on no router: a table that\n * links with plain `href` strings - or not at all - never pulls `@angular/router` into its bundle.\n *\n * @example\n * <et-table [data]=\"orders()\" [columns]=\"COLUMNS\" [rowLink]=\"orderLink\" etTableRowRouterLink />\n *\n * protected orderLink = (order: Order) => ['/orders', order.id];\n */\n@Directive({\n  selector: '[etTableRowRouterLink]',\n  exportAs: 'etTableRowRouterLink',\n})\nexport class TableRowRouterLinkDirective {\n  private table = injectTableFeatureHost('etTableRowRouterLink');\n  private router = inject(Router);\n  // eslint-disable-next-line ethlete/no-angular-router-api\n  private route = inject(ActivatedRoute, { optional: true });\n\n  /** See {@link TableRowRouterLinkConfig}. */\n  public config = input({} as TableRowRouterLinkConfig, {\n    alias: 'etTableRowRouterLink',\n    transform: tableFeatureConfig<TableRowRouterLinkConfig>,\n  });\n\n  constructor() {\n    this.table.registerRowNavigation({\n      href: (commands) => this.href(commands),\n      navigate: (commands, event) => this.navigate(commands, event),\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n  }\n\n  /** The URL these commands resolve to - what the row's anchor carries as its `href`. */\n  public href(commands: readonly unknown[]) {\n    return this.router.serializeUrl(this.urlTree(commands));\n  }\n\n  /** Navigate to these commands, unless the click asked for the browser's own behaviour. */\n  public navigate(commands: readonly unknown[], event: MouseEvent) {\n    if (opensElsewhere(event)) return false;\n\n    this.router.navigateByUrl(this.urlTree(commands));\n\n    return true;\n  }\n\n  private urlTree(commands: readonly unknown[]) {\n    return this.router.createUrlTree([...commands], { relativeTo: this.route });\n  }\n}\n","import { computed, Directive, inject, Injector, input, signal } from '@angular/core';\nimport { DragMoveEvent } from '@ethlete/core';\nimport {\n  injectTableFeatureHost,\n  TableColumnMeta,\n  TableFeatureConfig,\n  tableFeatureConfig,\n} from './headless/table-features';\nimport { TableResizeGripComponent } from './table-resize-grip.component';\n\n/** Options for {@link TableResizeDirective}. */\nexport type TableResizeConfig = TableFeatureConfig;\n\n/**\n * Opt-in column resizing for `et-table`: adds a grip to every header cell's trailing edge that drags\n * the column's width, with a double-click to reset it.\n *\n * Widths live on the table (`state()`'s `TableColumnState.width`), so they survive reordering and\n * round-trip through `restoreState()` - even in a table that never imported this feature.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" etTableResize />\n */\n@Directive({\n  selector: '[etTableResize]',\n  exportAs: 'etTableResize',\n})\nexport class TableResizeDirective {\n  public table = injectTableFeatureHost('etTableResize');\n\n  /** See {@link TableResizeConfig}. */\n  public config = input({} as TableResizeConfig, {\n    alias: 'etTableResize',\n    transform: tableFeatureConfig<TableResizeConfig>,\n  });\n\n  // The column being dragged, with the width it had when the drag began - every move applies the\n  // pointer's cumulative delta to that baseline, so the column can't drift over a long drag.\n  private resizing = signal<{ key: string; startWidth: number; hadOverride: boolean } | null>(null);\n\n  constructor() {\n    // Renders after the filter trigger: the grip is absolutely positioned at the cell's edge.\n    this.table.registerHeaderAdornment({\n      component: TableResizeGripComponent,\n      injector: inject(Injector),\n      order: 10,\n      // A lone column has nothing to trade width with - it already spans the table - so the grip\n      // would only ever push the layout into overflow or leave a gap. Hide it until there are two.\n      enabled: computed(() => (this.config().enabled ?? true) && this.table.visibleColumnsMeta().length > 1),\n    });\n  }\n\n  public start(column: TableColumnMeta) {\n    this.resizing.set({\n      key: column.key,\n      startWidth: this.table.renderedColumnWidth(column.key),\n      hadOverride: this.table.hasColumnWidthOverride(column.key),\n    });\n  }\n\n  public update(event: DragMoveEvent) {\n    const resizing = this.resizing();\n\n    if (!resizing) return;\n\n    // The table clamps to a usable minimum and its own width.\n    this.table.setColumnWidth(resizing.key, Math.round(resizing.startWidth + event.totalDx));\n  }\n\n  public end() {\n    this.resizing.set(null);\n  }\n\n  /**\n   * The browser took the gesture away - leave the column as it was grabbed. A column that carried no\n   * width override keeps none, so a cancelled drag can't turn a flexible column rigid.\n   */\n  public cancel() {\n    const resizing = this.resizing();\n\n    if (!resizing) return;\n\n    if (resizing.hadOverride) {\n      this.table.setColumnWidth(resizing.key, resizing.startWidth);\n    } else {\n      this.table.resetColumnWidth(resizing.key);\n    }\n\n    this.resizing.set(null);\n  }\n\n  public reset(column: TableColumnMeta) {\n    this.table.resetColumnWidth(column.key);\n  }\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { DragHandleDirective } from '@ethlete/core';\nimport { TableColumnMeta } from './headless/table-features';\nimport { TableResizeDirective } from './table-resize.directive';\n\n/**\n * The drag grip at one header cell's trailing edge, stamped there by `etTableResize`.\n *\n * Its own `etDragHandle` swallows the pointerdown, so grabbing the grip resizes instead of starting a\n * header reorder when both features are used together. This is where the drag primitives are actually\n * referenced; it reaches the feature by DI through the injector the feature registered with.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-resize-grip',\n  template: `\n    <span\n      (dragStarted)=\"resize.start(column())\"\n      (dragMoved)=\"resize.update($event)\"\n      (dragEnded)=\"resize.end()\"\n      (dragCancelled)=\"resize.cancel()\"\n      (dblclick)=\"resize.reset(column())\"\n      class=\"et-table-resize-grip\"\n      etDragHandle\n      aria-hidden=\"true\"\n    ></span>\n  `,\n  styleUrl: './table-resize-grip.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DragHandleDirective],\n})\nexport class TableResizeGripComponent {\n  protected resize = inject(TableResizeDirective);\n\n  /** The column this grip resizes. Set by the table (see {@link TableHeaderAdornment}). */\n  public column = input.required<TableColumnMeta>();\n}\n","import { computed, Directive, inject, Injector, input, signal, WritableSignal } from '@angular/core';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableSelectAllCellComponent, TableSelectCellComponent } from './table-select-cell.component';\n\n/** Options for {@link TableSelectionDirective}. */\nexport type TableSelectionConfig<T> = TableFeatureConfig & {\n  /**\n   * The signal holding the selected row keys (by the table's `rowKey`, else the row reference). The\n   * feature writes into it directly, so pass your own signal to read the selection back - set a\n   * `rowKey` on the table so a selection survives sorting, filtering and data changes.\n   * Omit it and the selection is kept internally (reachable via `exportAs`).\n   */\n  selection?: WritableSignal<Set<unknown>>;\n  /** Gate which rows can be selected. Defaults to all rows. */\n  selectableRow?: (row: T) => boolean;\n  /**\n   * Which inline edge the checkbox column sits at. At `'end'` it ends every row and, with\n   * `etTableStickyColumns` on, stays pinned to that edge while the table scrolls sideways.\n   *\n   * @default 'start'\n   */\n  side?: 'start' | 'end';\n};\n\n/**\n * Opt-in multi-row selection for `et-table`: adds a leading checkbox column whose header checkbox\n * selects or clears every selectable row (indeterminate while only some are).\n *\n * It carries the [checkbox](/components/choice-inputs) component with it, which is why it is separate:\n * a table without selection never pulls that in.\n *\n * @example\n * protected selected = signal<Set<unknown>>(new Set());\n *\n * <et-table\n *   [data]=\"rows()\"\n *   [columns]=\"COLUMNS\"\n *   [rowKey]=\"rowId\"\n *   [etTableSelection]=\"{ selection: selected }\"\n * />\n */\n@Directive({\n  selector: '[etTableSelection]',\n  exportAs: 'etTableSelection',\n})\nexport class TableSelectionDirective<T> {\n  private table = injectTableFeatureHost('etTableSelection');\n\n  /** See {@link TableSelectionConfig}. */\n  public config = input({} as TableSelectionConfig<T>, {\n    alias: 'etTableSelection',\n    transform: tableFeatureConfig<TableSelectionConfig<T>>,\n  });\n\n  // Used when the consumer passes no signal of their own, so a bare `etTableSelection` still selects.\n  private ownSelection = signal<Set<unknown>>(new Set());\n\n  /** The signal the selection is kept in - the consumer's when they passed one, else the feature's own. */\n  public selection = computed(() => this.config().selection ?? this.ownSelection);\n\n  /** Accessible label for the header's select-all checkbox - from the table's label set. */\n  public selectAllLabel = computed(() => this.table.resolvedLabels().selectAllRows);\n\n  /** Accessible label for a row's checkbox - from the table's label set. */\n  public rowLabel = computed(() => this.table.resolvedLabels().selectRow);\n\n  /** The rendered rows that may be selected, which is what select-all acts on. */\n  private selectableRows = computed(() => {\n    const gate = this.config().selectableRow;\n\n    return gate ? this.rows().filter((row) => gate(row)) : this.rows();\n  });\n\n  /** The selected rows within the current data set (keys with no matching row are ignored). */\n  public selectedRows = computed(() => this.rows().filter((row) => this.isSelected(row)));\n\n  /** True when every selectable row in the current data set is selected. */\n  public isAllSelected = computed(() => {\n    const rows = this.selectableRows();\n\n    return rows.length > 0 && rows.every((row) => this.isSelected(row));\n  });\n\n  /** True when some - but not all - selectable rows are selected (checkbox indeterminate). */\n  public isPartiallySelected = computed(() => {\n    const rows = this.selectableRows();\n    const selected = rows.filter((row) => this.isSelected(row)).length;\n\n    return selected > 0 && selected < rows.length;\n  });\n\n  constructor() {\n    this.table.registerLeadColumn({\n      key: 'et-table-selection',\n      width: 'var(--et-table-select-width, 44px)',\n      side: computed(() => this.config().side ?? 'start'),\n      // leftmost: before the expander (order 100) and any other feature column\n      order: 0,\n      cellClass: 'et-table-select-cell',\n      headerComponent: TableSelectAllCellComponent,\n      bodyComponent: TableSelectCellComponent,\n      injector: inject(Injector),\n      rowClass: (row) => (this.isSelected(row as T) ? 'et-table-row--selected' : null),\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n\n    // The selection is the feature's own state, so it travels in `state().features.selection` rather\n    // than in the base table's column entries - see TableStateSlice. Keys serialize as strings, which\n    // is what a `rowKey` produces anyway; a table without a `rowKey` keys by row reference and has\n    // nothing stable to write, so it contributes nothing.\n    this.table.registerStateSlice({\n      key: 'selection',\n      read: () => {\n        if (!this.table.hasRowKey()) return undefined;\n\n        const keys = [...this.selection()()];\n\n        return keys.length ? keys.map(String) : undefined;\n      },\n      write: (value) => {\n        if (this.table.hasRowKey() && Array.isArray(value)) this.selection().set(new Set(value.map(String)));\n      },\n    });\n  }\n\n  /** Whether a row is selected. */\n  public isSelected(row: T) {\n    return this.selection()().has(this.table.rowIdentity(row));\n  }\n\n  /** Select or deselect a single row. */\n  public setSelected(row: T, selected: boolean) {\n    const key = this.table.rowIdentity(row);\n    const next = new Set(this.selection()());\n\n    if (selected) {\n      next.add(key);\n    } else {\n      next.delete(key);\n    }\n\n    this.selection().set(next);\n  }\n\n  /** Select every selectable row in the current data set, or clear them when all are already selected. */\n  public toggleAll() {\n    const rows = this.selectableRows();\n    const next = new Set(this.selection()());\n    const clearing = this.isAllSelected();\n\n    for (const row of rows) {\n      const key = this.table.rowIdentity(row);\n\n      if (clearing) {\n        next.delete(key);\n      } else {\n        next.add(key);\n      }\n    }\n\n    this.selection().set(next);\n  }\n\n  /** Whether a row may be selected at all (see `selectableRow`). */\n  public canSelect(row: T) {\n    return this.config().selectableRow?.(row) ?? true;\n  }\n\n  // The table's rows, typed back to T - the feature seam is row-type agnostic.\n  private rows() {\n    return this.table.rows() as readonly T[];\n  }\n}\n","import { Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CheckboxComponent } from '../forms/checkbox';\nimport { TableSelectionDirective } from './table-selection.directive';\n\n/**\n * The select-all checkbox in the selection column's header cell, stamped there by\n * `etTableSelection`. Indeterminate while only some rows are selected.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-select-all-cell',\n  template: `\n    <et-checkbox\n      [checked]=\"selection.isAllSelected()\"\n      [indeterminate]=\"selection.isPartiallySelected()\"\n      [aria-label]=\"selection.selectAllLabel()\"\n      (checkedChange)=\"selection.toggleAll()\"\n    />\n  `,\n  styleUrl: './table-select-cell.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CheckboxComponent],\n})\nexport class TableSelectAllCellComponent {\n  protected selection = inject<TableSelectionDirective<unknown>>(TableSelectionDirective);\n}\n\n/**\n * One row's selection checkbox, stamped into the selection column by `etTableSelection`. This is\n * where the checkbox component is actually referenced, so a table without selection never pulls it in.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-select-cell',\n  template: `\n    @if (selection.canSelect(row())) {\n      <et-checkbox\n        [checked]=\"selection.isSelected(row())\"\n        [aria-label]=\"selection.rowLabel()\"\n        (checkedChange)=\"selection.setSelected(row(), $event)\"\n      />\n    }\n  `,\n  styleUrl: './table-select-cell.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CheckboxComponent],\n})\nexport class TableSelectCellComponent {\n  protected selection = inject<TableSelectionDirective<unknown>>(TableSelectionDirective);\n\n  /** The row this checkbox selects. Set by the table (see {@link TableLeadCellComponent}). */\n  public row = input.required<unknown>();\n}\n","import { computed, Directive, effect, input, signal } from '@angular/core';\nimport { signalHostElementDimensions } from '@ethlete/core';\nimport {\n  injectTableFeatureHost,\n  TableCellPinning,\n  TableFeatureConfig,\n  tableFeatureConfig,\n} from './headless/table-features';\nimport { TableColumnPin } from './table.types';\n\n/**\n * Least horizontal room (px) the non-pinned columns must keep before pinning is suppressed: below this,\n * start+end pinned columns would cover the viewport and scrolling would reveal nothing.\n */\nconst MIN_UNPINNED_SPACE = 96;\n\n/** Measured inline offsets (px) for pinned columns, keyed by column key. */\ntype StickyOffsets = { start: Record<string, number>; end: Record<string, number> };\n\nconst NO_PINNING: TableCellPinning = { stickyStart: false, stickyEnd: false, offsetStart: null, offsetEnd: null };\n\ntype TableColumnPins = Readonly<Record<string, TableColumnPin | null>>;\n\nconst isColumnPins = (value: unknown): value is TableColumnPins =>\n  typeof value === 'object' &&\n  value !== null &&\n  !Array.isArray(value) &&\n  Object.values(value).every((pin) => pin === 'start' || pin === 'end' || pin === null);\n\n/** Options for {@link TableStickyColumnsDirective}. */\nexport type TableStickyColumnsConfig = TableFeatureConfig;\n\n/**\n * Opt-in sticky columns for `et-table`: a column declaring `sticky: 'start' | 'end'` - or pinned at\n * runtime with the table's `pinColumn` - stays put while the table scrolls horizontally, and the scroll\n * fades move in to sit at the pinned column's inner edge. Runtime pins travel in `state()` as the\n * `pinning` slice.\n *\n * The offsets are measured, not declared - each pinned column stacks after the ones before it from its\n * own edge - so this runs a measurement whenever the host resizes or a column is resized. That is the\n * reason it is a feature: a table that pins nothing runs none of it, and never has the pinned cells'\n * chrome in the document either.\n *\n * @example\n * const COLUMNS = {\n *   name: { header: 'Name', value: (u: User) => u.name, width: '220px', sticky: 'start' },\n *   email: { header: 'Email', value: (u: User) => u.email, width: '280px' },\n * } satisfies TableColumns<User>;\n *\n * <et-table [data]=\"users()\" [columns]=\"COLUMNS\" etTableStickyColumns />\n */\n@Directive({\n  selector: '[etTableStickyColumns]',\n  exportAs: 'etTableStickyColumns',\n})\nexport class TableStickyColumnsDirective {\n  private table = injectTableFeatureHost('etTableStickyColumns');\n\n  /** See {@link TableStickyColumnsConfig}. */\n  public config = input({} as TableStickyColumnsConfig, {\n    alias: 'etTableStickyColumns',\n    transform: tableFeatureConfig<TableStickyColumnsConfig>,\n  });\n\n  // The feature is a directive on the table, so its host *is* the table's element.\n  private hostDimensions = signalHostElementDimensions();\n\n  private pins = signal<TableColumnPins>({});\n  private offsets = signal<StickyOffsets>({ start: {}, end: {} });\n  private leadOffsets = signal<Record<string, number>>({});\n  private trailOffsets = signal<Record<string, number>>({});\n\n  /**\n   * True when pinning is measured to crowd the non-pinned columns off-screen. Pinning is then dropped so\n   * every column scrolls normally instead of hiding behind the pins - which is what makes the same table\n   * work on desktop and on a narrow viewport without a breakpoint of the consumer's own.\n   */\n  public suppressed = signal(false);\n\n  private insets = signal({ start: 0, end: 0 });\n\n  private enabled = computed(() => this.config().enabled ?? true);\n\n  /** Whether any visible column is pinned to the inline-start edge (which also pins the lead columns). */\n  public hasStickyStart = computed(\n    () => !this.suppressed() && this.table.visibleColumnsMeta().some((column) => column.sticky === 'start'),\n  );\n\n  /** Whether any visible column is pinned to the trailing edge. */\n  public hasStickyEnd = computed(\n    () => !this.suppressed() && this.table.visibleColumnsMeta().some((column) => column.sticky === 'end'),\n  );\n\n  constructor() {\n    const enabled = this.enabled;\n\n    this.table.registerColumnPinning({\n      cellPinning: (key) => this.cellPinning(key),\n      leadPinning: (key) => this.leadPinning(key),\n      trailPinning: (key) => this.trailPinning(key),\n      insets: () => this.insets(),\n      hasStickyEnd: () => this.hasStickyEnd(),\n      pins: () => this.pins(),\n      pin: (key, side) => this.pin(key, side),\n      enabled,\n    });\n\n    this.table.registerStateSlice({\n      key: 'pinning',\n      read: () => (Object.keys(this.pins()).length ? this.pins() : undefined),\n      write: (value) => this.pins.set(isColumnPins(value) ? { ...value } : {}),\n    });\n\n    // Measure the pinned columns' inline offsets from the header cells' widths. Start pins stack from the\n    // inline-start edge (clearing the lead columns), end pins from the trailing edge - pin from the edges,\n    // so widths sum cleanly.\n    effect(() => {\n      if (!enabled()) return;\n\n      this.hostDimensions();\n      // Re-measure when a column is resized: the tracks change but the host's size does not.\n      this.table.columnWidths();\n\n      const columns = this.table.visibleColumnsMeta();\n      const cells = this.table.headerCellElements();\n\n      // `signalElementDimensions` observes one element; these offsets need the widths of *every* header\n      // cell summed in order, re-read whenever the host resizes or a column width changes - both of which\n      // this effect already tracks above.\n      // eslint-disable-next-line ethlete/prefer-element-dimensions\n      const width = (index: number) => cells[index]?.getBoundingClientRect().width ?? 0;\n\n      const leadCells = this.table.leadHeaderCellElements();\n      const leadOffsets: Record<string, number> = {};\n      let leadWidth = 0;\n\n      this.table.leadColumnsMeta().forEach((lead, index) => {\n        leadOffsets[lead.key] = leadWidth;\n        // Same as above: a running sum over all lead cells, not one observable element.\n        // eslint-disable-next-line ethlete/prefer-element-dimensions\n        leadWidth += leadCells[index]?.getBoundingClientRect().width ?? 0;\n      });\n\n      // The trailing utility columns stack from the trailing edge, so they are summed in reverse: the\n      // last one sits at the edge and each one before it clears the ones after it.\n      const trailCells = this.table.trailHeaderCellElements();\n      const trailMeta = this.table.trailColumnsMeta();\n      const trailOffsets: Record<string, number> = {};\n      let trailWidth = 0;\n\n      for (let index = trailMeta.length - 1; index >= 0; index--) {\n        const trail = trailMeta[index];\n\n        if (!trail) continue;\n\n        trailOffsets[trail.key] = trailWidth;\n        // Same as above: a running sum over all trailing cells, not one observable element.\n        // eslint-disable-next-line ethlete/prefer-element-dimensions\n        trailWidth += trailCells[index]?.getBoundingClientRect().width ?? 0;\n      }\n\n      const start: Record<string, number> = {};\n      let left = leadWidth;\n      let pinnedStartWidth = 0;\n      let pinnedEndWidth = 0;\n      let hasStartPin = false;\n\n      for (let index = 0; index < columns.length; index++) {\n        const column = columns[index];\n\n        if (column?.sticky === 'start') {\n          start[column.key] = left;\n          pinnedStartWidth += width(index);\n          hasStartPin = true;\n        }\n\n        left += width(index);\n      }\n\n      const end: Record<string, number> = {};\n      // The trailing utility columns own that edge, so an end-pinned data column stacks after them -\n      // the mirror of `left` starting at the leading utility columns' width.\n      let right = trailWidth;\n\n      for (let index = columns.length - 1; index >= 0; index--) {\n        const column = columns[index];\n\n        if (column?.sticky === 'end') {\n          end[column.key] = right;\n          pinnedEndWidth += width(index);\n        }\n\n        right += width(index);\n      }\n\n      // Suppress pinning when the columns that would stay put (the pins, plus the lead columns when a\n      // start pin makes them sticky too) leave the scrollable ones too little room to ever surface. Track\n      // widths don't change when we unpin, so this can't oscillate.\n      const containerWidth = this.hostDimensions()?.client?.width ?? 0;\n      // A trailing utility column is pinned whenever pinning is live, so its width always counts here.\n      const pinnedWidth = pinnedStartWidth + pinnedEndWidth + (hasStartPin ? leadWidth : 0) + trailWidth;\n      const hasUnpinned = columns.some((column) => !column?.sticky);\n      const suppressed = hasUnpinned && containerWidth > 0 && containerWidth - pinnedWidth < MIN_UNPINNED_SPACE;\n\n      this.leadOffsets.set(leadOffsets);\n      this.trailOffsets.set(trailOffsets);\n      this.offsets.set({ start, end });\n      this.suppressed.set(suppressed);\n      this.insets.set(\n        suppressed\n          ? { start: 0, end: 0 }\n          : { start: hasStartPin ? leadWidth + pinnedStartWidth : 0, end: pinnedEndWidth + trailWidth },\n      );\n    });\n  }\n\n  /** How a data column is pinned, as the table's header, body and footer cells render it. */\n  public cellPinning(key: string): TableCellPinning {\n    if (this.suppressed()) return NO_PINNING;\n\n    const sticky = this.table.visibleColumnsMeta().find((column) => column.key === key)?.sticky ?? null;\n    const offsets = this.offsets();\n\n    return {\n      stickyStart: sticky === 'start',\n      stickyEnd: sticky === 'end',\n      offsetStart: offsets.start[key] ?? null,\n      offsetEnd: offsets.end[key] ?? null,\n    };\n  }\n\n  /** Whether the leading utility columns are pinned along with a start-pinned column, and how far in. */\n  public leadPinning(key: string) {\n    const pinned = this.hasStickyStart();\n\n    return { sticky: pinned, offset: pinned ? (this.leadOffsets()[key] ?? 0) : null };\n  }\n\n  /**\n   * Whether the trailing utility columns are pinned to the trailing edge, and how far in. Unlike the\n   * leading ones, these do not wait for a pinned data column: a feature puts its column at that edge to\n   * keep it reachable, so pinning is live means pinned - see {@link TableLeadColumn.side}.\n   */\n  public trailPinning(key: string) {\n    const pinned = this.enabled() && !this.suppressed();\n\n    return { sticky: pinned, offset: pinned ? (this.trailOffsets()[key] ?? 0) : null };\n  }\n\n  private pin(key: string, side: TableColumnPin | null) {\n    const declared = this.table.allColumns().find((column) => column.key === key)?.sticky ?? null;\n\n    this.pins.update((pins) => {\n      const { [key]: _previous, ...rest } = pins;\n\n      return side === declared ? rest : { ...rest, [key]: side };\n    });\n  }\n}\n","import { afterEveryRender, computed, Directive, inject, Injector, input, signal, untracked } from '@angular/core';\nimport { SkeletonItemComponent } from '../skeleton/skeleton-item.component';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableSkeletonRowsComponent } from './table-skeleton-rows.component';\n\n/** Options for {@link TableSkeletonDirective}. */\nexport type TableSkeletonConfig = TableFeatureConfig & {\n  /** How many placeholder rows to draw while loading with no rows yet. @default 5 */\n  rows?: number;\n};\n\n/**\n * Opt-in loading placeholders for `et-table`: the body becomes a block of skeleton rows while the table\n * is loading with nothing to show yet, and a cell that is loading on its own (see the table's\n * `cellState`) shows a bone in place of its value.\n *\n * It carries the [skeleton](/components/skeleton) component with it, which is why it is separate: a table\n * that never draws a placeholder never pulls that in. Without it a first load leaves the body blank -\n * the host's `aria-busy` and the busy bar over existing rows are part of the base.\n *\n * @example\n * <et-table [data]=\"rows()\" [columns]=\"COLUMNS\" [loading]=\"loading()\" etTableSkeleton />\n */\n@Directive({\n  selector: '[etTableSkeleton]',\n  exportAs: 'etTableSkeleton',\n})\nexport class TableSkeletonDirective {\n  private table = injectTableFeatureHost('etTableSkeleton');\n\n  /** See {@link TableSkeletonConfig}. */\n  public config = input({} as TableSkeletonConfig, {\n    alias: 'etTableSkeleton',\n    transform: tableFeatureConfig<TableSkeletonConfig>,\n  });\n\n  /**\n   * The height of a real row, remembered from the last time this table had any, so a refetch or a page\n   * change keeps the table exactly as tall as the data the user was just looking at. `null` until a row\n   * has been rendered - a first load has nothing to measure, which is what `etTableCellSkeleton` is for.\n   */\n  public measuredRowHeight = signal<number | null>(null);\n\n  constructor() {\n    const enabled = computed(() => this.config().enabled ?? true);\n\n    this.table.registerBodyPlaceholder({\n      component: TableSkeletonRowsComponent,\n      injector: inject(Injector),\n      enabled,\n    });\n\n    // `shape` already defaults to `text`, so the bone needs no wrapper of its own - the cell lays it out\n    // as a flex child, which is what stretches it to the cell's inline size.\n    this.table.registerCellPlaceholder({ component: SkeletonItemComponent, enabled });\n\n    // Measured from a rendered body cell (a row is `display: contents` and has no box of its own)\n    // whenever the render changes - cheap, and the only way to know a row's height when its cells hold\n    // arbitrary content.\n    afterEveryRender(() => {\n      const cell = this.table.firstBodyCellElement();\n\n      if (!cell) return;\n\n      const height = Math.round(cell.getBoundingClientRect().height);\n\n      if (height > 0 && height !== untracked(this.measuredRowHeight)) this.measuredRowHeight.set(height);\n    });\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { SkeletonItemComponent } from '../skeleton/skeleton-item.component';\nimport { TableCardSurfaceDirective } from './table-card-surface.directive';\nimport { injectTableFeatureHost } from './headless/table-features';\nimport { TableSkeletonDirective } from './table-skeleton.directive';\nimport { TableCellSkeletonContext } from './table.types';\n\n/**\n * Widths (%) a placeholder bar cycles through, so a block of them reads as ragged text rather than a bar\n * chart. Cycled by row + column index, not random: a fresh width per pass would make the block twitch.\n */\nconst PLACEHOLDER_WIDTHS = [72, 45, 88, 60, 34, 79];\n\n/** One placeholder row: a bone per column, at a width that doesn't change between passes. */\ntype SkeletonRowVm = {\n  key: number;\n  cells: {\n    key: string;\n    align: string;\n    width: number;\n    /** The column's own `etTableCellSkeleton`, when it has one. */\n    template: TemplateRef<unknown> | null;\n    context: TableCellSkeletonContext;\n  }[];\n};\n\n/**\n * The placeholder body of a first load, stamped by the table through `registerBodyPlaceholder`. It is\n * `display: contents`, so its rows and cells are grid items of the table's own grid and land in the same\n * tracks as real ones - which is what keeps the columns from jumping when the data arrives.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-skeleton-rows',\n  template: `\n    @for (row of rows(); track row.key) {\n      <div\n        [style.--_et-table-row-h.px]=\"feature.measuredRowHeight()\"\n        [class.et-table-row--box]=\"table.hasRowBox()\"\n        [class.et-table-row--card]=\"table.hasCardRows()\"\n        [etTableCardSurface]=\"table.hasCardRows()\"\n        class=\"et-table-row et-table-row--placeholder et-skeleton--animated\"\n        role=\"row\"\n        aria-hidden=\"true\"\n      >\n        @for (lead of table.leadColumnsMeta(); track lead.key) {\n          <div [class]=\"lead.cellClass\" class=\"et-table-cell\" role=\"gridcell\"></div>\n        }\n        @for (cell of row.cells; track cell.key) {\n          <div [attr.data-align]=\"cell.align\" class=\"et-table-cell\" role=\"gridcell\">\n            @if (cell.template; as skeleton) {\n              <!-- The column said what its cells look like while loading — a chip-shaped bone for a chip\n                   column, an avatar for an avatar. See etTableCellSkeleton. -->\n              <ng-container *ngTemplateOutlet=\"skeleton; context: cell.context\" />\n            } @else {\n              <!-- A text-shaped bone is a line of text's height, which is what keeps a placeholder row\n                   as tall as a row of text. -->\n              <et-skeleton-item [style.inline-size.%]=\"cell.width\" shape=\"text\" />\n            }\n          </div>\n        }\n        @if (table.hasFillerTrack()) {\n          <div class=\"et-table-cell et-table-filler-cell\" role=\"presentation\"></div>\n        }\n        @for (trail of table.trailColumnsMeta(); track trail.key) {\n          <div [class]=\"trail.cellClass\" class=\"et-table-cell\" role=\"gridcell\"></div>\n        }\n        @if (table.hasRowBox()) {\n          <div class=\"et-table-card-corners\" role=\"presentation\" aria-hidden=\"true\"></div>\n        }\n      </div>\n    }\n  `,\n  styleUrl: './table-skeleton-rows.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgTemplateOutlet, SkeletonItemComponent, TableCardSurfaceDirective],\n  host: { class: 'et-table-skeleton-rows' },\n})\nexport class TableSkeletonRowsComponent {\n  protected feature = inject(TableSkeletonDirective);\n  protected table = injectTableFeatureHost('etTableSkeleton');\n\n  protected rows = computed<SkeletonRowVm[]>(() => {\n    const columns = this.table.visibleColumnsMeta();\n\n    return Array.from({ length: Math.max(1, this.feature.config().rows ?? 5) }, (_, rowIndex) => ({\n      key: rowIndex,\n      cells: columns.map((column, columnIndex) => {\n        const width = PLACEHOLDER_WIDTHS[(rowIndex + columnIndex) % PLACEHOLDER_WIDTHS.length] ?? 60;\n\n        return {\n          key: column.key,\n          align: column.align ?? 'start',\n          width,\n          template: this.table.columnTemplate('cellSkeleton', column.key),\n          context: { $implicit: rowIndex, width },\n        };\n      }),\n    }));\n  });\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * The virtual window's spacer rule, as a styles-only component mounted by `etTableVirtualScroll` (see\n * `ButtonStylesDirective` for the pattern).\n *\n * Referenced only from the feature, so a table that renders every row never pulls it into the bundle -\n * the same discipline the feature's TypeScript already follows, applied to its CSS.\n *\n * @internal\n */\n@Component({\n  selector: 'et-table-virtual-scroll-styles',\n  template: '',\n  styleUrl: './table-virtual-scroll-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TableVirtualScrollStylesComponent {}\n","import { computed, Directive, effect, input } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\nimport { createVirtualWindow } from '../internals/virtual-window';\nimport { injectTableFeatureHost, TableFeatureConfig, tableFeatureConfig } from './headless/table-features';\nimport { TableVirtualScrollStylesComponent } from './table-virtual-scroll-styles.component';\n\n/** Options for {@link TableVirtualScrollDirective}. */\nexport type TableVirtualScrollConfig = TableFeatureConfig & {\n  /** Row height assumed before a real row is measured - tune it to your rows for a stable first paint. @default 48 */\n  estimateRowHeight?: number;\n  /** Rows kept rendered just outside the viewport on each side, to hide scroll flicker. @default 6 */\n  overscan?: number;\n};\n\n/**\n * Opt-in virtual scrolling for `et-table`: only the rows near the viewport are rendered, with spacers\n * standing in for the rest so the scrollbar still reflects the whole row count.\n *\n * The table is its own scroll container, so give it a bounded height (e.g.\n * `style=\"block-size: 24rem\"`) for the window to track.\n *\n * @example\n * <et-table [data]=\"manyRows()\" [columns]=\"COLUMNS\" style=\"block-size: 24rem\" etTableVirtualScroll />\n *\n * <!-- with options -->\n * <et-table [etTableVirtualScroll]=\"{ estimateRowHeight: 52 }\" … />\n */\n@Directive({\n  selector: '[etTableVirtualScroll]',\n  exportAs: 'etTableVirtualScroll',\n})\nexport class TableVirtualScrollDirective {\n  private table = injectTableFeatureHost('etTableVirtualScroll');\n\n  /** See {@link TableVirtualScrollConfig}. */\n  public config = input({} as TableVirtualScrollConfig, {\n    alias: 'etTableVirtualScroll',\n    transform: tableFeatureConfig<TableVirtualScrollConfig>,\n  });\n\n  private window = createVirtualWindow({\n    container: computed(() => this.table.scrollElement()),\n    itemCount: computed(() => this.table.rows().length),\n    estimateItemHeight: computed(() => this.config().estimateRowHeight ?? 48),\n    overscan: computed(() => this.config().overscan ?? 6),\n  });\n\n  constructor() {\n    // The spacer rule lives with the feature (see TableVirtualScrollStylesComponent), so a table that\n    // renders every row ships none of it.\n    injectStyleManager().mount(TableVirtualScrollStylesComponent);\n\n    this.table.registerRowWindow({\n      slice: (rows) => {\n        const { start, end } = this.window.range();\n\n        return rows.slice(start, end);\n      },\n      paddingStart: this.window.paddingTop,\n      paddingEnd: this.window.paddingBottom,\n      offset: computed(() => this.window.range().start),\n      // Keyboard navigation asks for a row that may be outside the rendered range; the window can put\n      // it there, which nothing working from the DOM could.\n      scrollToIndex: (index) => this.window.scrollToIndex(index),\n      enabled: computed(() => this.config().enabled ?? true),\n    });\n\n    // Feed a real rendered row's height back into the window so its scroll math self-corrects from the\n    // estimate. Uniform-height model: any body cell stands in for all of them.\n    effect(() => {\n      const cell = this.table.firstBodyCellElement();\n\n      if (cell) this.window.measureItem(cell);\n    });\n  }\n}\n","import { TableCellErrorTooltipDirective } from './table-cell-error-tooltip.directive';\nimport { TableColumnChooserComponent } from './table-column-chooser.component';\nimport { TableColumnMenuDirective } from './table-column-menu.directive';\nimport { TableCsvExportDirective } from './table-csv-export.directive';\nimport { TableDragScrollDirective } from './table-drag-scroll.directive';\nimport { TableFiltersDirective } from './table-filters.directive';\nimport { TableGroupHeadersDirective } from './table-group-headers.directive';\nimport { TableFooterDirective } from './headless/table-footer.directive';\nimport { TableInlineEditDirective } from './table-inline-edit.directive';\nimport { TableKeyboardNavDirective } from './table-keyboard-nav.directive';\nimport { TablePageStickyHeaderDirective } from './table-page-sticky-header.directive';\nimport { TableReorderDirective } from './table-reorder.directive';\nimport { TableRowExpansionDirective } from './table-row-expansion.directive';\nimport { TableRowRouterLinkDirective } from './table-row-router-link.directive';\nimport { TableResizeDirective } from './table-resize.directive';\nimport { TableSelectionDirective } from './table-selection.directive';\nimport { TableSkeletonDirective } from './table-skeleton.directive';\nimport { TableStickyColumnsDirective } from './table-sticky-columns.directive';\nimport { TableStatePersistenceDirective } from './headless/table-state-persistence.directive';\nimport {\n  TableCellDirective,\n  TableCellEditDirective,\n  TableCellSkeletonDirective,\n  TableFilterOptionDirective,\n  TableFooterCellDirective,\n  TableHeaderCellDirective,\n} from './headless/table-templates';\nimport { TableVirtualScrollDirective } from './table-virtual-scroll.directive';\nimport { TableComponent } from './table.component';\n\n/**\n * The base table: typed rows and cells, the `etTableCell` / `etTableHeaderCell` /\n * `etTableFooterCell` templates, sort headers, the empty state and the footer slot.\n * Deliberately lean - each optional feature ships its own imports array (e.g.\n * {@link TABLE_FILTER_IMPORTS}), so what you don't import stays out of your bundle.\n *\n * Row expansion, grouped headers, loading placeholders and sticky columns are **not** in here - see\n * {@link TABLE_ROW_EXPANSION_IMPORTS}, {@link TABLE_GROUP_HEADERS_IMPORTS},\n * {@link TABLE_SKELETON_IMPORTS} and {@link TABLE_STICKY_COLUMNS_IMPORTS}.\n */\nexport const TABLE_IMPORTS = [\n  TableComponent,\n  TableFooterDirective,\n  TableCellDirective,\n  TableHeaderCellDirective,\n  TableFooterCellDirective,\n] as const;\n\n/**\n * Filter menus for `filterable` columns (`etTableFilters`), plus the `etTableFilterOption` template for\n * templating an option's content. Pulls in the menu system.\n */\nexport const TABLE_FILTER_IMPORTS = [TableFiltersDirective, TableFilterOptionDirective] as const;\n\n/**\n * A `⋮` menu of per-column actions in every header cell (`etTableColumnMenu`): sort ascending /\n * descending / clear, reset a resized width, hide the column. Pulls in the menu system - which it\n * shares with {@link TABLE_FILTER_IMPORTS} when both are used.\n */\nexport const TABLE_COLUMN_MENU_IMPORTS = [TableColumnMenuDirective] as const;\n\n/**\n * A \"columns\" button + menu for toggling column visibility (`<et-table-column-chooser [table]=\"…\" />`),\n * placed wherever you like. Deliberately separate from the per-column menu - see the component's own\n * docs for why a visibility list must not hang off a header control. Pulls in the menu system.\n */\nexport const TABLE_COLUMN_CHOOSER_IMPORTS = [TableColumnChooserComponent] as const;\n\n/**\n * Download the table as CSV from a button of your own (`etTableCsvExport`). No extra dependency - the\n * serializer is a pure function you can also call directly (`tableToCsv`), and the download is\n * `injectTableCsvExport()`.\n */\nexport const TABLE_CSV_EXPORT_IMPORTS = [TableCsvExportDirective] as const;\n\n/**\n * Arrow-key navigation over the body's cells (`etTableKeyboardNav`), following the ARIA grid pattern:\n * the body becomes one tab stop. No extra dependency.\n */\nexport const TABLE_KEYBOARD_NAV_IMPORTS = [TableKeyboardNavDirective] as const;\n\n/**\n * Inline cell editing (`etTableInlineEdit`), plus the `etTableCellEdit` template that supplies a\n * column's editor. No extra dependency of its own - the editor is whichever control you put in the\n * template. Pair it with {@link TABLE_KEYBOARD_NAV_IMPORTS} for the `Enter`-to-edit flow.\n */\nexport const TABLE_INLINE_EDIT_IMPORTS = [TableInlineEditDirective, TableCellEditDirective] as const;\n\n/** Drag-to-resize column widths (`etTableResize`). Pulls in the drag primitives. */\nexport const TABLE_RESIZE_IMPORTS = [TableResizeDirective] as const;\n\n/**\n * Drag-to-scroll (`etTableDragScroll`): pressing in the table and dragging pans it, so a wide table is\n * reachable without the scrollbar. Pulls in the drag primitives - which it shares with\n * {@link TABLE_RESIZE_IMPORTS} and {@link TABLE_REORDER_IMPORTS} when those are used too.\n */\nexport const TABLE_DRAG_SCROLL_IMPORTS = [TableDragScrollDirective] as const;\n\n/** Drag-to-reorder columns (`etTableReorder`), with the drag ghost and drop indicator. */\nexport const TABLE_REORDER_IMPORTS = [TableReorderDirective] as const;\n\n/** Multi-row selection (`etTableSelection`). Pulls in the checkbox component. */\nexport const TABLE_SELECTION_IMPORTS = [TableSelectionDirective] as const;\n\n/**\n * Grouped column headers (`etTableGroupHeaders`): a spanning row above the column headers in which\n * adjacent columns sharing a `group` read under one label. Carries that row and its chrome.\n */\nexport const TABLE_GROUP_HEADERS_IMPORTS = [TableGroupHeadersDirective] as const;\n\n/**\n * Sticky columns (`etTableStickyColumns`): a column declaring `sticky: 'start' | 'end'` stays put while\n * the table scrolls horizontally. Carries the measuring of the pinned offsets and the pinned cells'\n * chrome, which is why it is separate - a table that pins nothing measures nothing.\n */\nexport const TABLE_STICKY_COLUMNS_IMPORTS = [TableStickyColumnsDirective] as const;\n\n/**\n * A viewport-pinned header row (`etTablePageStickyHeader`) for a table the page scrolls rather than the\n * table itself. A table with a height of its own pins its header without any of this.\n */\nexport const TABLE_PAGE_STICKY_HEADER_IMPORTS = [TablePageStickyHeaderDirective] as const;\n\n/**\n * Loading placeholders (`etTableSkeleton`): a block of skeleton rows while loading with no rows yet, a\n * bone in a cell that is loading on its own, and the `etTableCellSkeleton` template for saying what a\n * column's bone looks like. Pulls in the [skeleton](/components/skeleton) component.\n */\nexport const TABLE_SKELETON_IMPORTS = [TableSkeletonDirective, TableCellSkeletonDirective] as const;\n\n/**\n * Row expansion (`etTableRowExpansion`): a leading expander column and a full-width detail row for the\n * table's `[expandedRowTemplate]`. Carries the detail row's chrome and its grow-open animation, which is\n * why it is separate - a table that never expands a row pays for none of it.\n */\nexport const TABLE_ROW_EXPANSION_IMPORTS = [TableRowExpansionDirective] as const;\n\n/**\n * Angular routing for row links (`etTableRowRouterLink`): a `[rowLink]` may then answer with router\n * commands instead of an `href`, and a plain click navigates through the router. Separate because the\n * base table depends on no router - a table linking with plain `href` strings pays for none of it.\n */\nexport const TABLE_ROW_ROUTER_LINK_IMPORTS = [TableRowRouterLinkDirective] as const;\n\n/**\n * Tooltips on failed cells (`etTableCellErrorTooltip`): a `cellState` message is shown on hover/focus\n * rather than as a native `title`. Pulls in the tooltip, and with it the overlay runtime.\n */\nexport const TABLE_CELL_ERROR_TOOLTIP_IMPORTS = [TableCellErrorTooltipDirective] as const;\n\n/**\n * Persist a table's setup to `localStorage` / `sessionStorage` (`etTableStatePersistence`): column\n * order, visibility, widths, sort, filters, expanded rows and any feature slices. No extra dependency -\n * separate because storing state is a side effect not every table wants.\n */\nexport const TABLE_STATE_PERSISTENCE_IMPORTS = [TableStatePersistenceDirective] as const;\n\n/** Virtual scrolling (`etTableVirtualScroll`). Pulls in the virtual-window utility. */\nexport const TABLE_VIRTUAL_SCROLL_IMPORTS = [TableVirtualScrollDirective] as const;\n","// codes 2000-2099\nexport const TAB_ERROR_CODES = {\n  MISSING_TAB_BAR: 2000,\n  MISSING_TAB_GROUP: 2001,\n  MISSING_TAB_PANEL: 2002,\n  MISSING_NAV_TABS: 2003,\n} as const;\n","import { InjectionToken } from '@angular/core';\nimport { TabBarTriggerDirective } from './tab-bar-trigger.directive';\nimport { TabBarDirective } from './tab-bar.directive';\n\nexport const TAB_BAR_TOKEN = new InjectionToken<TabBarDirective>('TAB_BAR_TOKEN');\n\nexport const TAB_BAR_TRIGGER_TOKEN = new InjectionToken<TabBarTriggerDirective>('TAB_BAR_TRIGGER_TOKEN');\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { RuntimeError, SurfaceInteractiveDirective } from '@ethlete/core';\nimport { ScrollableDirective } from '../../scrollable/headless/scrollable.directive';\nimport { TAB_ERROR_CODES } from '../tab-errors';\nimport { TAB_BAR_TOKEN, TAB_BAR_TRIGGER_TOKEN } from './tab-bar.tokens';\n\nlet nextTriggerId = 0;\n\n@Directive({\n  selector: '[etTabBarTrigger]',\n  providers: [{ provide: TAB_BAR_TRIGGER_TOKEN, useExisting: TabBarTriggerDirective }],\n  hostDirectives: [SurfaceInteractiveDirective],\n  host: {\n    role: 'tab',\n    '[attr.id]': 'ID',\n    '[attr.aria-selected]': 'isSelected()',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.disabled]': 'disabled() || null',\n    '[attr.tabindex]': 'tabIndex()',\n    '[class.et-tab-bar-trigger--just-activated]': 'justActivated()',\n    '[class.et-tab-bar-trigger--no-initial-transition]': '!tabBar?.animationsReady()',\n    '(click)': 'handleClick()',\n    '(mouseleave)': 'justActivated.set(false)',\n  },\n})\nexport class TabBarTriggerDirective {\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private scrollable = inject(ScrollableDirective, { optional: true });\n  protected tabBar = inject(TAB_BAR_TOKEN, { optional: true });\n\n  public disabled = input(false, { transform: booleanAttribute });\n\n  public readonly ID = `et-tab-trigger-${nextTriggerId++}`;\n\n  public justActivated = signal(false);\n\n  /**\n   * @internal Set when something else owns the selection - a router link, where a click only asks to\n   * navigate and the selection has to wait until that navigation is actually committed.\n   */\n  public deferSelection = signal(false);\n\n  public isSelected = computed(() => {\n    const tabBar = this.tabBar;\n\n    if (!tabBar) {\n      return false;\n    }\n\n    const idx = tabBar.triggers().indexOf(this);\n\n    return idx === tabBar.selectedIndex();\n  });\n\n  public tabIndex = computed(() => {\n    const tabBar = this.tabBar;\n\n    if (!tabBar || this.disabled()) {\n      return -1;\n    }\n\n    const myIndex = tabBar.triggers().indexOf(this);\n    const focusedIdx = tabBar.focusedIndex();\n\n    if (focusedIdx !== -1) {\n      return myIndex === focusedIdx ? 0 : -1;\n    }\n\n    return myIndex === tabBar.tabStopIndex() ? 0 : -1;\n  });\n\n  constructor() {\n    this.tabBar?.registerTrigger(this);\n\n    inject(DestroyRef).onDestroy(() => this.tabBar?.unregisterTrigger(this));\n\n    effect(() => {\n      if (!this.scrollable) {\n        return;\n      }\n\n      if (!this.isSelected()) {\n        return;\n      }\n\n      if (!this.scrollable.getScrollContainerRef()()) {\n        return;\n      }\n\n      this.scrollIntoView();\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tabBar) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_TAB_BAR,\n            '[TabBarTriggerDirective] etTabBarTrigger must be placed inside a tab bar (et-tab-group, et-nav-tabs, or an [etTabBar] element).',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public focus() {\n    this.elementRef.nativeElement.focus();\n    this.scrollIntoView();\n  }\n\n  /** @internal */\n  public getElement() {\n    return this.elementRef.nativeElement;\n  }\n\n  public handleClick() {\n    if (!this.disabled()) {\n      const wasSelected = this.isSelected();\n\n      if (!this.deferSelection()) {\n        this.tabBar?.selectTrigger(this);\n      }\n\n      if (!wasSelected) {\n        this.justActivated.set(true);\n      }\n    }\n  }\n\n  private scrollIntoView() {\n    if (!this.scrollable) {\n      return;\n    }\n\n    this.scrollable.scrollToElement({\n      element: this.elementRef.nativeElement,\n      origin: 'center',\n    });\n  }\n}\n","import { Directive, ElementRef, computed, effect, inject, untracked } from '@angular/core';\nimport { createFlipAnimation } from '@ethlete/core';\nimport { TAB_BAR_TOKEN, TAB_BAR_TRIGGER_TOKEN } from './tab-bar.tokens';\n\n@Directive({\n  selector: '[etTabBarUnderline]',\n  host: {\n    class: 'et-tab-bar-underline',\n    '[class.et-tab-bar-underline--active]': 'isActive()',\n  },\n})\nexport class TabBarUnderlineDirective {\n  private tabBar = inject(TAB_BAR_TOKEN);\n  private trigger = inject(TAB_BAR_TRIGGER_TOKEN);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public isActive = computed(() => this.tabBar.activeTrigger() === this.trigger);\n\n  constructor() {\n    effect(() => {\n      const activeTrigger = this.tabBar.activeTrigger();\n\n      if (activeTrigger !== this.trigger) {\n        return;\n      }\n\n      const underlineEl = this.elementRef.nativeElement;\n      const previousOriginEl = untracked(() => this.tabBar.lastActiveUnderlineElement());\n\n      // Store this underline element for the next transition\n      untracked(() => {\n        this.tabBar.lastActiveUnderlineElement.set(underlineEl);\n      });\n\n      // Skip animation until the tab bar has completed initial render\n      if (!previousOriginEl || !this.tabBar.animationsReady() || previousOriginEl === underlineEl) {\n        return;\n      }\n\n      untracked(() => this.tabBar.runningUnderlineFlip())?.cancel();\n\n      const flip = createFlipAnimation({\n        element: underlineEl,\n        originElement: previousOriginEl,\n        duration: 250,\n        easing: 'cubic-bezier(0.35, 0.25, 0.2, 1)',\n      });\n\n      this.tabBar.runningUnderlineFlip.set(flip);\n\n      flip.play();\n    });\n  }\n}\n","export const TAB_BAR_ORIENTATIONS = {\n  HORIZONTAL: 'horizontal',\n  VERTICAL: 'vertical',\n} as const;\n\nexport type TabBarOrientation = (typeof TAB_BAR_ORIENTATIONS)[keyof typeof TAB_BAR_ORIENTATIONS];\n\nexport const TAB_BAR_FITS = {\n  CONTENT: 'content',\n  FILL: 'fill',\n} as const;\n\nexport type TabBarFit = (typeof TAB_BAR_FITS)[keyof typeof TAB_BAR_FITS];\n\nexport const TAB_BAR_VARIANTS = {\n  PRIMARY: 'primary',\n  SECONDARY: 'secondary',\n} as const;\n\nexport type TabBarVariant = (typeof TAB_BAR_VARIANTS)[keyof typeof TAB_BAR_VARIANTS];\n","import {\n  afterNextRender,\n  booleanAttribute,\n  computed,\n  DestroyRef,\n  Directive,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap, timer } from 'rxjs';\nimport { sortByDomOrder } from '../../internals/dom-order';\nimport { TabBarTriggerDirective } from './tab-bar-trigger.directive';\nimport { TAB_BAR_TOKEN } from './tab-bar.tokens';\nimport {\n  TAB_BAR_FITS,\n  TAB_BAR_ORIENTATIONS,\n  TAB_BAR_VARIANTS,\n  TabBarFit,\n  TabBarOrientation,\n  TabBarVariant,\n} from './tab-bar.types';\n\nlet nextTabBarId = 0;\n\n@Directive({\n  selector: '[etTabBar]',\n  providers: [{ provide: TAB_BAR_TOKEN, useExisting: TabBarDirective }],\n  host: {\n    '[attr.role]': 'hostRole()',\n    '[attr.aria-orientation]': \"hostRole() === 'tablist' ? orientation() : null\",\n    '(keydown)': 'handleKeydown($event)',\n    '(focusout)': 'handleFocusout($event)',\n  },\n})\nexport class TabBarDirective {\n  private destroyRef = inject(DestroyRef);\n\n  public orientation = input<TabBarOrientation>(TAB_BAR_ORIENTATIONS.HORIZONTAL);\n  public fit = input<TabBarFit>(TAB_BAR_FITS.CONTENT);\n  public variant = input<TabBarVariant>(TAB_BAR_VARIANTS.SECONDARY);\n  public divider = input(true, { transform: booleanAttribute });\n  /** @internal */\n  public hostRole = signal<'tablist' | 'none'>('tablist');\n  private registeredTriggers = signal<TabBarTriggerDirective[]>([]);\n  /**\n   * @internal The triggers in DOM order - registration follows creation order, so a tab inserted\n   * anywhere but the end would otherwise desync every `$index`-keyed consumer from the rendered bar.\n   */\n  public triggers = computed(() => sortByDomOrder(this.registeredTriggers(), (trigger) => trigger.getElement()));\n  /** @internal */\n  public focusedIndex = signal(-1);\n  public selectedIndex = signal(0);\n\n  /** @internal */\n  public readonly ID = `et-tab-bar-${nextTabBarId++}`;\n\n  /** @internal */\n  public lastActiveUnderlineElement = signal<HTMLElement | null>(null);\n\n  /**\n   * @internal Cancel this before the next transition measures its origin - a rect taken mid-flight\n   * reports the animated position, leaving the new transition nothing to travel.\n   */\n  public runningUnderlineFlip = signal<{ cancel: () => void } | null>(null);\n\n  /** @internal */\n  public animationsReady = signal(false);\n\n  public activeTrigger = computed(() => {\n    const idx = this.selectedIndex();\n    const all = this.triggers();\n\n    return all[idx] ?? null;\n  });\n\n  /** @internal The bar's tab stop while nothing in it has focus, or `-1` when every trigger is disabled. */\n  public tabStopIndex = computed(() => {\n    const all = this.triggers();\n    const selected = this.selectedIndex();\n    const selectedTrigger = all[selected];\n\n    if (selectedTrigger && !selectedTrigger.disabled()) {\n      return selected;\n    }\n\n    return all.findIndex((trigger) => !trigger.disabled());\n  });\n\n  constructor() {\n    afterNextRender(() => {\n      timer(0)\n        .pipe(\n          tap(() => {\n            this.animationsReady.set(true);\n          }),\n          takeUntilDestroyed(this.destroyRef),\n        )\n        .subscribe();\n    });\n  }\n\n  /** @internal */\n  public registerTrigger(trigger: TabBarTriggerDirective) {\n    this.registeredTriggers.update((list) => [...list, trigger]);\n  }\n\n  /** @internal */\n  public unregisterTrigger(trigger: TabBarTriggerDirective) {\n    this.registeredTriggers.update((list) => list.filter((t) => t !== trigger));\n  }\n\n  /** @internal */\n  public selectTrigger(trigger: TabBarTriggerDirective) {\n    const idx = this.triggers().indexOf(trigger);\n\n    if (idx !== -1) {\n      this.selectedIndex.set(idx);\n    }\n  }\n\n  public handleKeydown(event: KeyboardEvent) {\n    const isHorizontal = this.orientation() === TAB_BAR_ORIENTATIONS.HORIZONTAL;\n    const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n    const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n    if (event.key === nextKey) {\n      event.preventDefault();\n      this.moveFocus(1);\n    } else if (event.key === prevKey) {\n      event.preventDefault();\n      this.moveFocus(-1);\n    } else if (event.key === 'Home') {\n      event.preventDefault();\n      this.focusFirst();\n    } else if (event.key === 'End') {\n      event.preventDefault();\n      this.focusLast();\n    } else if (event.key === 'Enter' && this.focusedIndex() !== -1) {\n      event.preventDefault();\n      this.activateFocused();\n    }\n  }\n\n  public handleFocusout(event: FocusEvent) {\n    const relatedTarget = event.relatedTarget as HTMLElement | null;\n    const triggers = this.triggers();\n    const isFocusStillInBar = relatedTarget !== null && triggers.some((t) => t.getElement() === relatedTarget);\n\n    if (!isFocusStillInBar) {\n      this.focusedIndex.set(-1);\n    }\n  }\n\n  private moveFocus(direction: 1 | -1) {\n    const all = this.triggers();\n\n    if (all.length === 0) {\n      return;\n    }\n\n    let currentIndex = this.focusedIndex();\n\n    if (currentIndex === -1) {\n      currentIndex = this.selectedIndex();\n    }\n\n    let nextIndex = currentIndex;\n    const length = all.length;\n\n    for (let i = 0; i < length; i++) {\n      nextIndex = (nextIndex + direction + length) % length;\n      const trigger = all[nextIndex];\n\n      if (trigger && !trigger.disabled()) {\n        this.focusedIndex.set(nextIndex);\n        trigger.focus();\n\n        return;\n      }\n    }\n  }\n\n  private focusFirst() {\n    const all = this.triggers();\n\n    for (let i = 0; i < all.length; i++) {\n      const trigger = all[i];\n\n      if (trigger && !trigger.disabled()) {\n        this.focusedIndex.set(i);\n        trigger.focus();\n\n        return;\n      }\n    }\n  }\n\n  private focusLast() {\n    const all = this.triggers();\n\n    for (let i = all.length - 1; i >= 0; i--) {\n      const trigger = all[i];\n\n      if (trigger && !trigger.disabled()) {\n        this.focusedIndex.set(i);\n        trigger.focus();\n\n        return;\n      }\n    }\n  }\n\n  private activateFocused() {\n    const idx = this.focusedIndex();\n\n    if (idx === -1) {\n      return;\n    }\n\n    const trigger = this.triggers()[idx];\n\n    if (trigger && !trigger.disabled()) {\n      trigger.getElement().click();\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { NavTabsDirective } from './nav-tabs.directive';\n\nexport const NAV_TABS_TOKEN = new InjectionToken<NavTabsDirective>('NAV_TABS_TOKEN');\n","import { DestroyRef, Directive, afterNextRender, computed, effect, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterLinkActive } from '@angular/router';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { tap } from 'rxjs';\nimport { OVERLAY_ROUTER_LINK_TOKEN } from '../../../overlay/routing/overlay-router-link.directive';\nimport { TabBarTriggerDirective } from '../../headless/tab-bar-trigger.directive';\nimport { TabBarDirective } from '../../headless/tab-bar.directive';\nimport { TAB_ERROR_CODES } from '../../tab-errors';\nimport { NAV_TABS_TOKEN } from './nav-tabs.tokens';\n\n@Directive({\n  selector: '[etNavTabLink]',\n})\nexport class NavTabLinkDirective {\n  private routerLinkActive = inject(RouterLinkActive, { self: true, optional: true });\n  private overlayRouterLink = inject(OVERLAY_ROUTER_LINK_TOKEN, { self: true, optional: true });\n  private navTabs = inject(NAV_TABS_TOKEN, { optional: true });\n  private tabBar = inject(TabBarDirective, { optional: true });\n  private destroyRef = inject(DestroyRef);\n  private hostElement = injectHostElement();\n\n  public trigger = inject(TabBarTriggerDirective);\n\n  private routerLinkIsActive = signal(this.routerLinkActive?.isActive ?? false);\n\n  public isActive = computed(() => this.overlayRouterLink?.isActive() ?? this.routerLinkIsActive());\n\n  constructor() {\n    // The router owns the selection: a click only asks to navigate, so a guard that vetoes or stalls\n    // the navigation leaves the tab bar where it is.\n    this.trigger.deferSelection.set(true);\n\n    this.routerLinkActive?.isActiveChange\n      .pipe(\n        tap((active) => {\n          this.routerLinkIsActive.set(active);\n        }),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n\n    effect(() => {\n      if (this.isActive() && this.tabBar?.activeTrigger() !== this.trigger) {\n        this.tabBar?.selectTrigger(this.trigger);\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.navTabs) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_NAV_TABS,\n            '[NavTabLinkDirective] a nav tab link must be placed inside an et-nav-tabs element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Signal, computed, signal } from '@angular/core';\nimport { defineRootProvider, toInjectFn, toProvideFn } from '@ethlete/core';\nimport { TabBarDirective } from '../../headless/tab-bar.directive';\n\n/** @internal */\nexport type NavTabsRegistry = {\n  /** The only registered tab bar, or null when none or more than one exists. */\n  single: Signal<TabBarDirective | null>;\n  hasAny: Signal<boolean>;\n  register: (tabBar: TabBarDirective) => void;\n  unregister: (tabBar: TabBarDirective) => void;\n};\n\nconst NAV_TABS_REGISTRY_DEF = /* @__PURE__ */ defineRootProvider(\n  (): NavTabsRegistry => {\n    const tabBars = signal<TabBarDirective[]>([]);\n\n    const single = computed(() => {\n      const bars = tabBars();\n\n      return bars.length === 1 ? (bars[0] ?? null) : null;\n    });\n\n    const hasAny = computed(() => tabBars().length > 0);\n\n    const register = (tabBar: TabBarDirective) => {\n      tabBars.update((list) => [...list, tabBar]);\n    };\n\n    const unregister = (tabBar: TabBarDirective) => {\n      tabBars.update((list) => list.filter((bar) => bar !== tabBar));\n    };\n\n    return { single, hasAny, register, unregister };\n  },\n  { name: 'NavTabsRegistry' },\n);\n\n/**\n * Tracks the tab bars of all nav-tabs elements on the page so a nav-tabs outlet\n * placed as a sibling of its et-nav-tabs element can still resolve the tab bar\n * that labels it.\n *\n * @internal\n */\nexport const provideNavTabsRegistry = /* @__PURE__ */ toProvideFn(NAV_TABS_REGISTRY_DEF);\nexport const injectNavTabsRegistry = /* @__PURE__ */ toInjectFn(NAV_TABS_REGISTRY_DEF);\n","import { Directive, afterNextRender, computed, inject } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { TabBarDirective } from '../../headless/tab-bar.directive';\nimport { TAB_ERROR_CODES } from '../../tab-errors';\nimport { injectNavTabsRegistry } from './nav-tabs-registry';\n\nlet nextOutletId = 0;\n\n@Directive({\n  selector: '[etNavTabsOutlet]',\n  host: {\n    role: 'tabpanel',\n    '[attr.id]': 'ID',\n    '[attr.aria-labelledby]': 'activeTriggerId()',\n  },\n})\nexport class NavTabsOutletDirective {\n  private nearestTabBar = inject(TabBarDirective, { optional: true });\n  private registry = injectNavTabsRegistry();\n  private hostElement = injectHostElement();\n\n  public readonly ID = `et-nav-tabs-outlet-${nextOutletId++}`;\n\n  private tabBar = computed(() => this.nearestTabBar ?? this.registry.single());\n\n  public activeTriggerId = computed(() => this.tabBar()?.activeTrigger()?.ID ?? null);\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.nearestTabBar && !this.registry.hasAny()) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_NAV_TABS,\n            '[NavTabsOutletDirective] et-nav-tabs-outlet requires an et-nav-tabs element on the page.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { DestroyRef, Directive, computed, inject } from '@angular/core';\nimport { NavigationEnd } from '@angular/router';\nimport { injectRouterEvent } from '@ethlete/core';\nimport { TabBarDirective } from '../../headless/tab-bar.directive';\nimport { injectNavTabsRegistry } from './nav-tabs-registry';\nimport { NAV_TABS_TOKEN } from './nav-tabs.tokens';\n\n@Directive({\n  selector: '[etNavTabs]',\n  providers: [{ provide: NAV_TABS_TOKEN, useExisting: NavTabsDirective }],\n})\nexport class NavTabsDirective {\n  private routerEvent = injectRouterEvent();\n  private registry = injectNavTabsRegistry();\n  private tabBar = inject(TabBarDirective, { self: true });\n  private destroyRef = inject(DestroyRef);\n\n  /** @internal */\n  public navigationVersion = computed(() => {\n    const event = this.routerEvent();\n\n    if (event instanceof NavigationEnd) {\n      return event.id;\n    }\n\n    return -1;\n  });\n\n  constructor() {\n    this.registry.register(this.tabBar);\n\n    this.destroyRef.onDestroy(() => {\n      this.registry.unregister(this.tabBar);\n    });\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\n\n/**\n * The trigger chrome, divider baseline, underline geometry and hover/focus/active tints shared by\n * `et-tab-group` triggers and `et-nav-tab-link`. A tab bar host must map its own underline tokens\n * onto `--et-tab-bar-underline-size` / `--et-tab-bar-underline-radius`, or this sheet falls back to\n * the registered defaults.\n *\n * @internal\n */\n@Component({\n  selector: 'et-tab-bar-styles',\n  template: '',\n  styleUrl: './tab-bar-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class TabBarStylesComponent {}\n\n/** @internal */\nexport const mountTabBarStyles = () => injectStyleManager().mount(TabBarStylesComponent);\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { injectStyleManager } from '@ethlete/core';\nimport { mountTabBarStyles } from '../tab-bar-styles.component';\n\n/** @internal */\n@Component({\n  selector: 'et-nav-tab-link-styles',\n  template: '',\n  styleUrl: './nav-tab-link-styles.component.css',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NavTabLinkStylesComponent {}\n\n/** @internal */\nexport const mountNavTabLinkStyles = () => {\n  mountTabBarStyles();\n\n  return injectStyleManager().mount(NavTabLinkStylesComponent);\n};\n","import { Component, ElementRef, ViewEncapsulation, inject } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { FocusRingDirective } from '../../focus-ring';\nimport { TabBarTriggerDirective } from '../headless/tab-bar-trigger.directive';\nimport { TabBarUnderlineDirective } from '../headless/tab-bar-underline.directive';\nimport { NavTabLinkDirective } from './headless/nav-tab-link.directive';\nimport { mountNavTabLinkStyles } from './nav-tab-link-styles.component';\n\n@Component({\n  selector: 'a[et-nav-tab-link]',\n  template: `<span class=\"et-nav-tab-link__content\"><ng-content /></span><span etTabBarUnderline></span>`,\n  encapsulation: ViewEncapsulation.None,\n  imports: [TabBarUnderlineDirective],\n  hostDirectives: [\n    {\n      directive: RouterLink,\n      inputs: [\n        'routerLink:et-nav-tab-link',\n        'queryParams',\n        'fragment',\n        'queryParamsHandling',\n        'preserveFragment',\n        'skipLocationChange',\n        'replaceUrl',\n        'state',\n        'relativeTo',\n      ],\n    },\n    {\n      directive: RouterLinkActive,\n      inputs: ['routerLinkActive', 'routerLinkActiveOptions', 'ariaCurrentWhenActive'],\n    },\n    {\n      directive: TabBarTriggerDirective,\n      inputs: ['disabled'],\n    },\n    NavTabLinkDirective,\n    FocusRingDirective,\n  ],\n  host: {\n    class: 'et-nav-tab-link',\n    '[class.et-nav-tab-link--active]': 'navTabLink.isActive()',\n    '[class.et-nav-tab-link--disabled]': 'navTabLink.trigger.disabled()',\n    '[attr.href]': 'navTabLink.trigger.disabled() ? null : routerLink.href',\n    '(keydown.space)': 'handleSpace($event)',\n  },\n})\nexport class NavTabLinkComponent {\n  protected navTabLink = inject(NavTabLinkDirective);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected routerLink = inject(RouterLink, { self: true });\n\n  constructor() {\n    mountNavTabLinkStyles();\n  }\n\n  protected handleSpace(event: Event) {\n    event.preventDefault();\n\n    if (this.navTabLink.trigger.disabled()) {\n      return;\n    }\n\n    this.elementRef.nativeElement.click();\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { NavTabsOutletDirective } from './headless/nav-tabs-outlet.directive';\n\n@Component({\n  selector: 'et-nav-tabs-outlet',\n  template: `<ng-content />`,\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [NavTabsOutletDirective],\n  host: {\n    class: 'et-nav-tabs-outlet',\n  },\n  styles: `\n    .et-nav-tabs-outlet {\n      display: block;\n    }\n  `,\n})\nexport class NavTabsOutletComponent {}\n","export const TAB_SIZES = {\n  SM: 'sm',\n  MD: 'md',\n  LG: 'lg',\n} as const;\n\nexport type TabSize = (typeof TAB_SIZES)[keyof typeof TAB_SIZES];\n","import { Component, ViewEncapsulation, inject, input } from '@angular/core';\nimport { ProvideColorDirective, ProvideSurfaceDirective } from '@ethlete/core';\nimport { ScrollableButtonsDirective } from '../../scrollable/headless/scrollable-buttons.directive';\nimport { SCROLLABLE_IMPORTS } from '../../scrollable/scrollable.imports';\nimport { TabBarDirective } from '../headless/tab-bar.directive';\nimport { mountTabBarStyles } from '../tab-bar-styles.component';\nimport { mountTabScaleStyles } from '../tab-scale-styles.component';\nimport { TAB_SIZES, TabSize } from '../tab-sizes';\nimport { NavTabsDirective } from './headless/nav-tabs.directive';\n\n@Component({\n  selector: 'et-nav-tabs',\n  template: `\n    <et-scrollable\n      [direction]=\"tabBar.orientation()\"\n      [itemSize]=\"tabBar.fit() === 'fill' ? 'same' : 'auto'\"\n      class=\"et-nav-tabs__scrollable\"\n      etScrollableButtons\n      renderMasks=\"false\"\n      role=\"presentation\"\n      scrollMode=\"element\"\n      scrollOrigin=\"center\"\n      scrollableClass=\"et-nav-tabs__container\"\n      scrollableRole=\"presentation\"\n    >\n      <ng-content />\n    </et-scrollable>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [SCROLLABLE_IMPORTS, ScrollableButtonsDirective],\n  hostDirectives: [\n    {\n      directive: ProvideSurfaceDirective,\n      inputs: ['etProvideSurface:surface'],\n    },\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n    {\n      directive: TabBarDirective,\n      inputs: ['orientation', 'fit', 'divider', 'variant'],\n    },\n    NavTabsDirective,\n  ],\n  host: {\n    class: 'et-nav-tabs et-tab-scale',\n    '[attr.data-orientation]': 'tabBar.orientation()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-fit]': 'tabBar.fit()',\n    '[attr.data-divider]': 'tabBar.divider()',\n    '[attr.data-variant]': 'tabBar.variant()',\n  },\n  styles: `\n    @layer components {\n      @property --et-nav-tabs-gap {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 0px;\n      }\n\n      @property --et-nav-tabs-underline-size {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 2px;\n      }\n\n      @property --et-nav-tabs-underline-radius {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 1px;\n      }\n\n      .et-nav-tabs {\n        display: block;\n        min-inline-size: 0;\n\n        --et-nav-tabs-underline-size: var(--et-tab-underline-size);\n        --et-nav-tabs-underline-radius: var(--et-tab-underline-radius);\n        --et-nav-tabs-font-size: var(--et-tab-font-size);\n        --et-tab-bar-underline-size: var(--et-nav-tabs-underline-size);\n        --et-tab-bar-underline-radius: var(--et-nav-tabs-underline-radius);\n\n        &:where([data-variant='primary'][data-size='sm']),\n        &:where([data-variant='primary'][data-size='md']) {\n          --et-nav-tabs-underline-size: 3px;\n        }\n\n        &:where([data-variant='primary'][data-size='lg']) {\n          --et-nav-tabs-underline-size: 4px;\n        }\n      }\n\n      .et-nav-tabs__scrollable {\n        min-inline-size: 0;\n      }\n\n      .et-nav-tabs__container {\n        position: relative;\n        gap: var(--et-nav-tabs-gap);\n\n        [data-orientation='vertical'] & {\n          justify-items: start;\n        }\n\n        [data-orientation='vertical'][data-fit='fill'] & {\n          justify-items: stretch;\n        }\n      }\n    }\n  `,\n})\nexport class NavTabsComponent {\n  protected tabBar = inject(TabBarDirective);\n\n  public size = input<TabSize>(TAB_SIZES.MD);\n\n  constructor() {\n    mountTabScaleStyles();\n    mountTabBarStyles();\n  }\n}\n","import { Component, ElementRef, ViewEncapsulation, inject } from '@angular/core';\nimport { FocusRingDirective } from '../../focus-ring';\nimport { OverlayRouterLinkDirective } from '../../overlay/routing/overlay-router-link.directive';\nimport { TabBarTriggerDirective } from '../headless/tab-bar-trigger.directive';\nimport { TabBarUnderlineDirective } from '../headless/tab-bar-underline.directive';\nimport { NavTabLinkDirective } from './headless/nav-tab-link.directive';\nimport { mountNavTabLinkStyles } from './nav-tab-link-styles.component';\n\n/**\n * A nav tab link that drives an overlay router instead of the Angular router, for tabbed navigation\n * inside an overlay. Takes the target route as its selector input and otherwise behaves like\n * `a[et-nav-tab-link]`.\n *\n * @example\n * <et-nav-tabs orientation=\"vertical\">\n *   <button et-overlay-nav-tab-link=\"/email\">Email</button>\n * </et-nav-tabs>\n */\n@Component({\n  selector: 'button[et-overlay-nav-tab-link]',\n  template: `<span class=\"et-nav-tab-link__content\"><ng-content /></span><span etTabBarUnderline></span>`,\n  encapsulation: ViewEncapsulation.None,\n  imports: [TabBarUnderlineDirective],\n  hostDirectives: [\n    {\n      directive: OverlayRouterLinkDirective,\n      inputs: ['etOverlayRouterLink:et-overlay-nav-tab-link', 'navigationDirection'],\n    },\n    {\n      directive: TabBarTriggerDirective,\n      inputs: ['disabled'],\n    },\n    NavTabLinkDirective,\n    FocusRingDirective,\n  ],\n  host: {\n    class: 'et-nav-tab-link',\n    '[class.et-nav-tab-link--active]': 'navTabLink.isActive()',\n    '[class.et-nav-tab-link--disabled]': 'navTabLink.trigger.disabled()',\n    '(keydown.space)': 'handleSpace($event)',\n  },\n})\nexport class OverlayNavTabLinkComponent {\n  protected navTabLink = inject(NavTabLinkDirective);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    mountNavTabLinkStyles();\n  }\n\n  protected handleSpace(event: Event) {\n    event.preventDefault();\n    this.elementRef.nativeElement.click();\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { TabGroupDirective } from './tab-group.directive';\nimport { TabPanelDirective } from './tab-panel.directive';\n\nexport const TAB_GROUP_TOKEN = new InjectionToken<TabGroupDirective>('TAB_GROUP_TOKEN');\n\nexport const TAB_PANEL_TOKEN = new InjectionToken<TabPanelDirective>('TAB_PANEL_TOKEN');\n","import {\n  Directive,\n  ElementRef,\n  afterNextRender,\n  booleanAttribute,\n  effect,\n  inject,\n  input,\n  model,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { RuntimeError, canUseSessionMemory, createAutoSessionMemoryKey, createSessionMemory } from '@ethlete/core';\nimport { TabBarDirective } from '../../headless/tab-bar.directive';\nimport { TAB_ERROR_CODES } from '../../tab-errors';\nimport { TAB_GROUP_TOKEN } from './tab-group.tokens';\nimport { TabPanelDirective } from './tab-panel.directive';\n\nconst ET_TAB_GROUP_AUTO_SESSION_MEMORY_PREFIX = 'tab-group';\nconst ET_TAB_GROUP_SESSION_MEMORY_PREFIX = 'et-tab-group:';\n\n@Directive({\n  selector: '[etTabGroup]',\n  providers: [{ provide: TAB_GROUP_TOKEN, useExisting: TabGroupDirective }],\n})\nexport class TabGroupDirective {\n  public tabBar = inject(TabBarDirective);\n  private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  public preserveContent = input(true, { transform: booleanAttribute });\n  public selectedIndex = model(0);\n  public sessionMemoryKey = input<string | null>(null);\n  private sessionMemoryAvailable = canUseSessionMemory();\n\n  /** @internal */\n  public panels = signal<TabPanelDirective[]>([]);\n\n  /** @internal Set by composing components (e.g. et-tab-group) that render panel content themselves instead of registering [etTabPanel] directives. */\n  public managesPanelsInternally = signal(false);\n\n  public restoredSessionMemoryKey = signal('');\n\n  constructor() {\n    effect(() => {\n      const selectedIndex = this.selectedIndex();\n\n      untracked(() => {\n        if (this.tabBar.selectedIndex() !== selectedIndex) {\n          this.tabBar.selectedIndex.set(selectedIndex);\n        }\n      });\n    });\n\n    effect(() => {\n      const selectedIndex = this.tabBar.selectedIndex();\n\n      untracked(() => {\n        if (this.selectedIndex() !== selectedIndex) {\n          this.selectedIndex.set(selectedIndex);\n        }\n      });\n    });\n\n    effect(() => {\n      const selectedIndex = this.selectedIndex();\n      const triggerCount = this.tabBar.triggers().length;\n\n      if (triggerCount === 0) {\n        return;\n      }\n\n      const resolvedSelectedIndex = this.resolveSelectedIndex(selectedIndex);\n\n      if (resolvedSelectedIndex === null || resolvedSelectedIndex === selectedIndex) {\n        return;\n      }\n\n      untracked(() => {\n        this.selectedIndex.set(resolvedSelectedIndex);\n      });\n    });\n\n    effect(() => {\n      if (!this.sessionMemoryAvailable) {\n        return;\n      }\n\n      const sessionMemoryKey = this.getResolvedSessionMemoryKey();\n      const restoredSessionMemoryKey = this.restoredSessionMemoryKey();\n      const triggerCount = this.tabBar.triggers().length;\n\n      if (triggerCount === 0 || restoredSessionMemoryKey === sessionMemoryKey) {\n        return;\n      }\n\n      const storedSelectedIndex = this.getSessionMemory(sessionMemoryKey).read();\n      const resolvedSelectedIndex = this.resolveSelectedIndex(storedSelectedIndex ?? this.selectedIndex());\n\n      untracked(() => {\n        this.restoredSessionMemoryKey.set(sessionMemoryKey);\n\n        if (resolvedSelectedIndex !== null && this.selectedIndex() !== resolvedSelectedIndex) {\n          this.selectedIndex.set(resolvedSelectedIndex);\n        }\n      });\n    });\n\n    effect(() => {\n      if (!this.sessionMemoryAvailable) {\n        return;\n      }\n\n      const sessionMemoryKey = this.getResolvedSessionMemoryKey();\n      const restoredSessionMemoryKey = this.restoredSessionMemoryKey();\n      const selectedIndex = this.selectedIndex();\n      const triggerCount = this.tabBar.triggers().length;\n\n      if (restoredSessionMemoryKey !== sessionMemoryKey || triggerCount === 0) {\n        return;\n      }\n\n      const resolvedSelectedIndex = this.resolveSelectedIndex(selectedIndex);\n\n      if (resolvedSelectedIndex === null) {\n        return;\n      }\n\n      this.getSessionMemory(sessionMemoryKey).write(resolvedSelectedIndex);\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.managesPanelsInternally() && this.tabBar.triggers().length > 0 && this.panels().length === 0) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_TAB_PANEL,\n            '[TabGroupDirective] The tab group has tab triggers but no [etTabPanel] was registered. Add a panel per tab.',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** @internal */\n  public registerPanel(panel: TabPanelDirective) {\n    this.panels.update((list) => [...list, panel]);\n  }\n\n  /** @internal */\n  public unregisterPanel(panel: TabPanelDirective) {\n    this.panels.update((list) => list.filter((p) => p !== panel));\n  }\n\n  private resolveSelectedIndex(index: number) {\n    const triggers = this.tabBar.triggers();\n\n    if (triggers.length === 0) {\n      return null;\n    }\n\n    const clampedIndex = Math.min(Math.max(index, 0), triggers.length - 1);\n    const selectedTrigger = triggers[clampedIndex];\n\n    if (selectedTrigger && !selectedTrigger.disabled()) {\n      return clampedIndex;\n    }\n\n    for (let currentIndex = 0; currentIndex < triggers.length; currentIndex++) {\n      const trigger = triggers[currentIndex];\n\n      if (trigger && !trigger.disabled()) {\n        return currentIndex;\n      }\n    }\n\n    return null;\n  }\n\n  private getSessionMemoryStorageKey(sessionMemoryKey: string) {\n    return `${ET_TAB_GROUP_SESSION_MEMORY_PREFIX}${sessionMemoryKey}`;\n  }\n\n  private getResolvedSessionMemoryKey() {\n    return (\n      this.sessionMemoryKey() ??\n      createAutoSessionMemoryKey({\n        element: this.elementRef.nativeElement,\n        prefix: ET_TAB_GROUP_AUTO_SESSION_MEMORY_PREFIX,\n      })\n    );\n  }\n\n  private getSessionMemory(sessionMemoryKey: string) {\n    return createSessionMemory<number>({\n      key: this.getSessionMemoryStorageKey(sessionMemoryKey),\n      parse: (storedSelectedIndex) => this.parseSelectedIndex(storedSelectedIndex),\n      serialize: (selectedIndex) => String(selectedIndex),\n    });\n  }\n\n  private parseSelectedIndex(storedSelectedIndex: string) {\n    const parsedSelectedIndex = Number.parseInt(storedSelectedIndex, 10);\n\n    if (!Number.isInteger(parsedSelectedIndex)) {\n      return null;\n    }\n\n    return parsedSelectedIndex;\n  }\n}\n","import { DestroyRef, Directive, afterNextRender, computed, inject, input } from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { TAB_ERROR_CODES } from '../../tab-errors';\nimport { TAB_GROUP_TOKEN, TAB_PANEL_TOKEN } from './tab-group.tokens';\n\nlet nextPanelId = 0;\n\n@Directive({\n  selector: '[etTabPanel]',\n  providers: [{ provide: TAB_PANEL_TOKEN, useExisting: TabPanelDirective }],\n  host: {\n    role: 'tabpanel',\n    '[attr.id]': 'ID',\n    '[attr.aria-labelledby]': 'triggerId()',\n    '[attr.inert]': 'isInactive() || null',\n    '[attr.hidden]': 'isHidden() || null',\n  },\n})\nexport class TabPanelDirective {\n  private tabGroup = inject(TAB_GROUP_TOKEN, { optional: true });\n  private hostElement = injectHostElement();\n\n  public triggerId = input<string | null>(null);\n  public readonly ID = `et-tab-panel-${nextPanelId++}`;\n\n  public isActive = computed(() => {\n    const tabGroup = this.tabGroup;\n\n    if (!tabGroup) {\n      return false;\n    }\n\n    const idx = tabGroup.panels().indexOf(this);\n\n    return idx === tabGroup.tabBar.selectedIndex();\n  });\n\n  public isInactive = computed(() => !this.isActive());\n\n  public isHidden = computed(() => {\n    if (this.tabGroup?.preserveContent()) {\n      return !this.isActive();\n    }\n\n    return false;\n  });\n\n  public shouldRender = computed(() => {\n    const tabGroup = this.tabGroup;\n\n    if (!tabGroup) {\n      return false;\n    }\n\n    if (tabGroup.preserveContent()) {\n      return true;\n    }\n\n    return this.isActive();\n  });\n\n  constructor() {\n    this.tabGroup?.registerPanel(this);\n\n    inject(DestroyRef).onDestroy(() => this.tabGroup?.unregisterPanel(this));\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tabGroup) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_TAB_GROUP,\n            '[TabPanelDirective] etTabPanel must be placed inside an [etTabGroup] element (e.g. et-tab-group).',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n  selector: '[etTabTrigger]',\n  host: {\n    '[attr.aria-controls]': 'panelId()',\n  },\n})\nexport class TabTriggerDirective {\n  public panelId = input<string | null>(null);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n  selector: '[etTabLabel]',\n})\nexport class TabLabelDirective {\n  public templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n  Component,\n  TemplateRef,\n  ViewEncapsulation,\n  afterNextRender,\n  booleanAttribute,\n  contentChild,\n  inject,\n  input,\n  viewChild,\n} from '@angular/core';\nimport { injectHostElement, RuntimeError } from '@ethlete/core';\nimport { TAB_ERROR_CODES } from '../tab-errors';\nimport { TAB_GROUP_TOKEN } from './headless/tab-group.tokens';\nimport { TabLabelDirective } from './tab-label.directive';\n\n@Component({\n  selector: 'et-tab',\n  template: `\n    <ng-template #implicitLabel>{{ label() }}</ng-template>\n    <ng-template #contentTpl>\n      <ng-content />\n    </ng-template>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-tab',\n    '[style.display]': '\"none\"',\n  },\n})\nexport class TabComponent {\n  private tabGroup = inject(TAB_GROUP_TOKEN, { optional: true });\n  private hostElement = injectHostElement();\n\n  public label = input('');\n  public icon = input<string | null>(null);\n  public disabled = input(false, { transform: booleanAttribute });\n\n  public customLabel = contentChild(TabLabelDirective);\n  /** @internal */\n  public implicitLabelRef = viewChild.required<TemplateRef<unknown>>('implicitLabel');\n  /** @internal */\n  public contentRef = viewChild.required<TemplateRef<unknown>>('contentTpl');\n\n  constructor() {\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tabGroup) {\n          throw new RuntimeError(\n            TAB_ERROR_CODES.MISSING_TAB_GROUP,\n            '[TabComponent] <et-tab> must be placed inside an <et-tab-group> element.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, contentChildren, inject, input } from '@angular/core';\nimport { ProvideColorDirective, ProvideSurfaceDirective } from '@ethlete/core';\nimport { FocusRingDirective } from '../../focus-ring';\nimport { IconDirective } from '../../icon';\nimport { ScrollableButtonsDirective } from '../../scrollable/headless/scrollable-buttons.directive';\nimport { SCROLLABLE_IMPORTS } from '../../scrollable/scrollable.imports';\nimport { TabBarTriggerDirective } from '../headless/tab-bar-trigger.directive';\nimport { TabBarUnderlineDirective } from '../headless/tab-bar-underline.directive';\nimport { TabBarDirective } from '../headless/tab-bar.directive';\nimport { mountTabBarStyles } from '../tab-bar-styles.component';\nimport { mountTabScaleStyles } from '../tab-scale-styles.component';\nimport { TAB_SIZES, TabSize } from '../tab-sizes';\nimport { TabGroupDirective } from './headless/tab-group.directive';\nimport { TabComponent } from './tab.component';\n\n@Component({\n  selector: 'et-tab-group',\n  template: `\n    <div [attr.aria-orientation]=\"tabGroup.tabBar.orientation()\" class=\"et-tab-group__header-shell\" role=\"tablist\">\n      <et-scrollable\n        [direction]=\"tabGroup.tabBar.orientation()\"\n        [itemSize]=\"tabGroup.tabBar.fit() === 'fill' ? 'same' : 'auto'\"\n        class=\"et-tab-group__header-scrollable\"\n        etScrollableButtons\n        renderMasks=\"false\"\n        role=\"presentation\"\n        scrollMode=\"element\"\n        scrollOrigin=\"center\"\n        scrollableClass=\"et-tab-group__header\"\n        scrollableRole=\"presentation\"\n      >\n        @for (tab of tabs(); track tab; let idx = $index) {\n          <button\n            [class.et-tab-group__trigger--active]=\"tabGroup.tabBar.selectedIndex() === idx\"\n            [class.et-tab-group__trigger--disabled]=\"tab.disabled()\"\n            [disabled]=\"tab.disabled()\"\n            [attr.aria-controls]=\"'et-tab-panel-' + tabGroupId + '-' + idx\"\n            class=\"et-tab-group__trigger\"\n            etTabBarTrigger\n            etFocusRing\n          >\n            <span class=\"et-tab-group__trigger-content\">\n              @if (tab.icon(); as icon) {\n                <span [etIcon]=\"icon\" class=\"et-tab-group__trigger-icon\"></span>\n              }\n              @if (tab.customLabel(); as customLabel) {\n                <ng-container [ngTemplateOutlet]=\"customLabel.templateRef\" />\n              } @else {\n                <ng-container [ngTemplateOutlet]=\"tab.implicitLabelRef()\" />\n              }\n            </span>\n            <span etTabBarUnderline></span>\n          </button>\n        }\n      </et-scrollable>\n    </div>\n    <div class=\"et-tab-group__body\">\n      @for (tab of tabs(); track tab; let idx = $index) {\n        <div\n          [attr.id]=\"'et-tab-panel-' + tabGroupId + '-' + idx\"\n          [attr.aria-labelledby]=\"triggerElements()[idx]?.ID ?? null\"\n          [attr.inert]=\"tabGroup.tabBar.selectedIndex() !== idx || null\"\n          [attr.hidden]=\"isPanelHidden(idx) || null\"\n          class=\"et-tab-group__panel\"\n          role=\"tabpanel\"\n        >\n          @if (shouldRenderPanel(idx)) {\n            <ng-container [ngTemplateOutlet]=\"tab.contentRef()\" />\n          }\n        </div>\n      }\n    </div>\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    TabBarTriggerDirective,\n    TabBarUnderlineDirective,\n    NgTemplateOutlet,\n    IconDirective,\n    FocusRingDirective,\n    SCROLLABLE_IMPORTS,\n    ScrollableButtonsDirective,\n  ],\n  hostDirectives: [\n    {\n      directive: ProvideSurfaceDirective,\n      inputs: ['etProvideSurface:surface'],\n    },\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n    {\n      directive: TabBarDirective,\n      inputs: ['orientation', 'fit', 'divider', 'variant'],\n    },\n    {\n      directive: TabGroupDirective,\n      inputs: ['preserveContent', 'selectedIndex', 'sessionMemoryKey'],\n      outputs: ['selectedIndexChange'],\n    },\n  ],\n  host: {\n    class: 'et-tab-group et-tab-scale',\n    '[attr.data-orientation]': 'tabGroup.tabBar.orientation()',\n    '[attr.data-size]': 'size()',\n    '[attr.data-fit]': 'tabGroup.tabBar.fit()',\n    '[attr.data-divider]': 'tabGroup.tabBar.divider()',\n    '[attr.data-variant]': 'tabGroup.tabBar.variant()',\n  },\n  styles: `\n    @layer components {\n      @property --et-tab-group-gap {\n        syntax: '<length>';\n        inherits: false;\n        initial-value: 0px;\n      }\n\n      @property --et-tab-group-header-gap {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 0px;\n      }\n\n      @property --et-tab-group-trigger-padding-inline {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 16px;\n      }\n\n      @property --et-tab-group-trigger-padding-block {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 12px;\n      }\n\n      @property --et-tab-group-underline-size {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 2px;\n      }\n\n      @property --et-tab-group-underline-radius {\n        syntax: '<length>';\n        inherits: true;\n        initial-value: 1px;\n      }\n\n      .et-tab-group {\n        display: flex;\n        flex-direction: column;\n        gap: var(--et-tab-group-gap);\n\n        --et-tab-group-trigger-padding-inline: var(--et-tab-padding-inline);\n        --et-tab-group-trigger-padding-block: var(--et-tab-padding-block);\n        --et-tab-group-underline-size: var(--et-tab-underline-size);\n        --et-tab-group-underline-radius: var(--et-tab-underline-radius);\n        --et-tab-group-font-size: var(--et-tab-font-size);\n        --et-tab-bar-underline-size: var(--et-tab-group-underline-size);\n        --et-tab-bar-underline-radius: var(--et-tab-group-underline-radius);\n\n        &[data-orientation='vertical'] {\n          flex-direction: row;\n        }\n\n        &:where([data-variant='primary'][data-size='sm']),\n        &:where([data-variant='primary'][data-size='md']) {\n          --et-tab-group-underline-size: 3px;\n        }\n\n        &:where([data-variant='primary'][data-size='lg']) {\n          --et-tab-group-underline-size: 4px;\n        }\n      }\n\n      .et-tab-group__header-shell {\n        min-inline-size: 0;\n      }\n\n      .et-tab-group__header-scrollable {\n        min-inline-size: 0;\n      }\n\n      .et-tab-group__header {\n        position: relative;\n        gap: var(--et-tab-group-header-gap);\n\n        [data-orientation='vertical'] & {\n          justify-items: start;\n        }\n      }\n\n      .et-tab-group__trigger {\n        padding-inline: var(--et-tab-group-trigger-padding-inline);\n        padding-block: var(--et-tab-group-trigger-padding-block);\n        border: none;\n        background: none;\n        font: inherit;\n        font-size: var(--et-tab-group-font-size);\n\n        .et-tab-group__trigger-content {\n          display: flex;\n          gap: 8px;\n        }\n      }\n\n      .et-tab-group__body {\n        display: grid;\n      }\n\n      .et-tab-group__panel {\n        grid-area: 1 / 1;\n\n        &[hidden] {\n          display: none;\n        }\n      }\n    }\n  `,\n})\nexport class TabGroupComponent {\n  protected tabGroup = inject(TabGroupDirective);\n\n  public size = input<TabSize>(TAB_SIZES.MD);\n  public tabs = contentChildren(TabComponent);\n  protected triggerElements = computed(() => this.tabGroup.tabBar.triggers());\n\n  /** @internal */\n  public tabGroupId = this.tabGroup.tabBar.ID;\n\n  constructor() {\n    mountTabScaleStyles();\n    mountTabBarStyles();\n\n    // the component renders its panels inline instead of registering [etTabPanel] directives\n    this.tabGroup.managesPanelsInternally.set(true);\n    this.tabGroup.tabBar.hostRole.set('none');\n  }\n\n  protected isPanelHidden(index: number) {\n    if (this.tabGroup.preserveContent()) {\n      return this.tabGroup.tabBar.selectedIndex() !== index;\n    }\n\n    return false;\n  }\n\n  protected shouldRenderPanel(index: number) {\n    if (this.tabGroup.preserveContent()) {\n      return true;\n    }\n\n    return this.tabGroup.tabBar.selectedIndex() === index;\n  }\n}\n","import { NavTabLinkComponent } from './nav-tabs/nav-tab-link.component';\nimport { NavTabsOutletComponent } from './nav-tabs/nav-tabs-outlet.component';\nimport { NavTabsComponent } from './nav-tabs/nav-tabs.component';\nimport { OverlayNavTabLinkComponent } from './nav-tabs/overlay-nav-tab-link.component';\nimport { TabGroupComponent } from './tabs/tab-group.component';\nimport { TabLabelDirective } from './tabs/tab-label.directive';\nimport { TabComponent } from './tabs/tab.component';\n\nexport const NAV_TAB_IMPORTS = [\n  NavTabsComponent,\n  NavTabLinkComponent,\n  NavTabsOutletComponent,\n  OverlayNavTabLinkComponent,\n] as const;\n\nexport const TAB_IMPORTS = [TabGroupComponent, TabComponent, TabLabelDirective] as const;\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ProvideColorDirective } from '@ethlete/core';\n\n/**\n * One event on an `et-timeline`: a marker on the rail plus whatever content describes it. Project\n * `[etTimelineTime]` for the timestamp above the content, and `[etTimelineMarker]` to replace the\n * default dot with an icon or an avatar. `color` scopes a color theme to this item, which is what\n * tints its marker.\n *\n * @example\n * <et-timeline-item color=\"error\">\n *   <span etTimelineTime>14:02</span>\n *   <i etTimelineMarker etIcon=\"et-triangle-exclamation\"></i>\n *   <p>Deployment failed</p>\n * </et-timeline-item>\n */\n@Component({\n  selector: 'et-timeline-item',\n  templateUrl: './timeline-item.component.html',\n  styleUrl: './timeline-item.component.css',\n  encapsulation: ViewEncapsulation.None,\n  hostDirectives: [\n    {\n      directive: ProvideColorDirective,\n      inputs: ['etProvideColor:color'],\n    },\n  ],\n  host: {\n    class: 'et-timeline-item',\n    role: 'listitem',\n  },\n})\nexport class TimelineItemComponent {}\n","<span class=\"et-timeline-item-rail\">\n  <span class=\"et-timeline-item-marker\">\n    <ng-content select=\"[etTimelineMarker]\" />\n  </span>\n</span>\n\n<div class=\"et-timeline-item-content\">\n  <ng-content select=\"[etTimelineTime]\" />\n  <ng-content />\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * A vertical rail of chronological events - an activity feed, an audit log, a match report. Project\n * `et-timeline-item`s in the order they should read; the connecting line and the markers are drawn\n * for you.\n *\n * Reach for `et-progress-steps` instead when the items are the stages of one linear process rather\n * than things that already happened.\n *\n * @example\n * <et-timeline>\n *   <et-timeline-item>\n *     <span etTimelineTime>09:15</span>\n *     <p>Match kicked off</p>\n *   </et-timeline-item>\n *   <et-timeline-item color=\"success\">\n *     <span etTimelineTime>23'</span>\n *     <p>Goal by A. Rossi</p>\n *   </et-timeline-item>\n * </et-timeline>\n */\n@Component({\n  selector: 'et-timeline',\n  template: `<ng-content />`,\n  styleUrl: './timeline.component.css',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'et-timeline',\n    role: 'list',\n  },\n})\nexport class TimelineComponent {}\n","import { TimelineItemComponent } from './timeline-item.component';\nimport { TimelineComponent } from './timeline.component';\n\nexport const TIMELINE_IMPORTS = [TimelineComponent, TimelineItemComponent] as const;\n","// codes 4600-4699\nexport const TREE_ERROR_CODES = {\n  /** An `[etTree]` was rendered without a `[dataSource]`, so it has nothing to show. */\n  MISSING_DATA_SOURCE: 4600,\n  /** A tree part (`etTreeNode`, `etTreeNodeDef`) was used outside an `[etTree]`. */\n  PART_OUTSIDE_TREE: 4601,\n} as const;\n","import { Observable, from, isObservable, of } from 'rxjs';\nimport { TreeCompareWith, TreeNode } from '../tree.types';\n\n/** Whether a node can be expanded - false for explicit leaves and `hasChildren: false`. */\nexport const canExpand = <T>(node: TreeNode<T>) => node.isLeaf !== true && node.hasChildren !== false;\n\nexport const defaultCompareWith: TreeCompareWith<unknown> = (a, b) => a === b;\n\n/** Value equality between two nodes via the configured comparator. `null` matches only `null`. */\nexport const nodesEqual = <T>(options: {\n  a: TreeNode<T> | null;\n  b: TreeNode<T> | null;\n  compareWith: TreeCompareWith<T>;\n}) => {\n  const { a, b, compareWith } = options;\n\n  if (a === null || b === null) {\n    return a === b;\n  }\n\n  return compareWith(a.value, b.value);\n};\n\n/** Normalizes a `loadChildren` result (array | Promise | Observable) into an Observable. */\nexport const toChildrenObservable = <T>(\n  result: TreeNode<T>[] | Promise<TreeNode<T>[]> | Observable<TreeNode<T>[]>,\n): Observable<TreeNode<T>[]> => {\n  if (Array.isArray(result)) {\n    return of(result);\n  }\n\n  if (isObservable(result)) {\n    return result;\n  }\n\n  return from(result);\n};\n","import { Observable } from 'rxjs';\n\n/** A single entry in a tree's hierarchy. `T` is the consumer's value type. */\nexport type TreeNode<T> = {\n  /**\n   * Identifies the node. Expansion, selection and focus are all tracked by value, so it has to be\n   * unique across the whole tree - not just among its siblings.\n   */\n  value: T;\n  /** The visible label. Also what type-ahead matches on. */\n  label: string;\n  /** Marks the node as a terminal leaf - it is never expandable. */\n  isLeaf?: boolean;\n  /**\n   * Whether the node has children to expand into. `false` makes it terminal (like `isLeaf`); omit it\n   * to discover children lazily by loading them.\n   */\n  hasChildren?: boolean;\n  /** Disables selecting and expanding the node. */\n  disabled?: boolean;\n};\n\n/**\n * The hierarchical source a tree renders. `loadChildren` returns the children of a node (or the\n * root's children when `parent` is `null`) as a sync array, a `Promise`, or an `Observable` - so\n * static trees and per-level async both work, and a branch loads only when it is first expanded.\n *\n * Structurally identical to the cascader's `CascaderDataSource.loadChildren`, so one source object\n * can drive an `et-tree` and an `et-cascader` over the same hierarchy.\n */\nexport type TreeDataSource<T> = {\n  loadChildren(parent: TreeNode<T> | null): TreeNode<T>[] | Promise<TreeNode<T>[]> | Observable<TreeNode<T>[]>;\n};\n\n/** Value equality between two node values - override when values are objects. */\nexport type TreeCompareWith<T> = (a: T, b: T) => boolean;\n\nexport const TREE_SELECTION_MODES = {\n  /** Rows never select. Expansion, focus and `activated` still work - a pure navigation tree. */\n  NONE: 'none',\n  /** At most one selected node; `value` is `T | null`. */\n  SINGLE: 'single',\n  /** Any number of selected nodes; `value` is `T[]`, and activating a row toggles it. */\n  MULTIPLE: 'multiple',\n} as const;\n\nexport type TreeSelectionMode = (typeof TREE_SELECTION_MODES)[keyof typeof TREE_SELECTION_MODES];\n\nexport const TREE_LEVEL_STATUSES = {\n  /** Not requested yet - a collapsed branch's children start here. */\n  IDLE: 'idle',\n  LOADING: 'loading',\n  LOADED: 'loaded',\n  ERROR: 'error',\n} as const;\n\nexport type TreeLevelStatus = (typeof TREE_LEVEL_STATUSES)[keyof typeof TREE_LEVEL_STATUSES];\n\n/**\n * One row of the flattened tree - what a tree renders instead of nesting components per level. Carries\n * everything a row needs, including the ARIA position values a flat DOM has to state explicitly.\n */\nexport type TreeRow<T> = {\n  node: TreeNode<T>;\n  /** Depth, 1-based - reported as `aria-level`. */\n  level: number;\n  /** The chain from the root down to (and including) this node. */\n  path: readonly TreeNode<T>[];\n  isExpandable: boolean;\n  isExpanded: boolean;\n  isDisabled: boolean;\n  /** Load state of this node's *children*. `'idle'` until the branch is first expanded. */\n  childrenStatus: TreeLevelStatus;\n  /** The message from a failed child load, via the tree's `toErrorMessage`. */\n  childrenError: string | null;\n  /** 1-based index among its siblings - reported as `aria-posinset`. */\n  posInSet: number;\n  /** How many siblings it has in total - reported as `aria-setsize`. */\n  setSize: number;\n};\n\n/** The context an `etTreeNodeDef` row template is rendered with. */\nexport type TreeNodeDefContext<T> = {\n  $implicit: TreeNode<T>;\n  row: TreeRow<T>;\n};\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  Signal,\n  TemplateRef,\n  afterNextRender,\n  afterRenderEffect,\n  booleanAttribute,\n  computed,\n  inject,\n  input,\n  model,\n  output,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { RuntimeError, injectHostElement } from '@ethlete/core';\nimport { EMPTY, catchError, defer, merge, mergeMap, switchMap, take, tap } from 'rxjs';\nimport { createTypeahead } from '../../internals/typeahead';\nimport { TREE_ERROR_CODES } from '../tree-errors';\nimport { canExpand, defaultCompareWith, nodesEqual, toChildrenObservable } from './internals/tree-data';\nimport {\n  TREE_LEVEL_STATUSES,\n  TREE_SELECTION_MODES,\n  TreeCompareWith,\n  TreeDataSource,\n  TreeLevelStatus,\n  TreeNode,\n  TreeNodeDefContext,\n  TreeRow,\n  TreeSelectionMode,\n} from './tree.types';\n\ntype TreeLevel<T> = {\n  parent: TreeNode<T> | null;\n  status: TreeLevelStatus;\n  nodes: TreeNode<T>[];\n  error: string | null;\n};\n\ntype TreeNodeLike<T> = {\n  row: Signal<TreeRow<T>>;\n  elementRef: ElementRef<HTMLElement>;\n};\n\ntype TreeNodeDefLike<T> = {\n  templateRef: TemplateRef<TreeNodeDefContext<T>>;\n};\n\n/**\n * An ARIA tree over a lazily loaded hierarchy: owns the expansion state, the selection, roving focus\n * and the keyboard model, and flattens the whole thing into the list of rows a template renders\n * ({@link visibleRows}). No visual opinion - bring your own template, or use the default `et-tree`.\n *\n * Children are loaded per branch through the {@link TreeDataSource}, the first time that branch is\n * expanded, so a deep or remote hierarchy costs only what the user actually opens. Every node is\n * identified by its `value`, which therefore has to be unique across the tree.\n *\n * Rows are rendered flat rather than nested, which is why each one carries `level`, `posInSet` and\n * `setSize` - a flat DOM has to state those for assistive tech.\n *\n * @example\n * <div [dataSource]=\"source\" [(value)]=\"selected\" etTree #tree=\"etTree\">\n *   @for (row of tree.visibleRows(); track row.node) {\n *     <div [row]=\"row\" etTreeNode>{{ row.node.label }}</div>\n *   }\n * </div>\n */\n@Directive({\n  selector: '[etTree]',\n  exportAs: 'etTree',\n  host: {\n    role: 'tree',\n    '[attr.aria-multiselectable]': 'selectionMode() === \"multiple\" ? \"true\" : null',\n    '[attr.aria-busy]': 'rootStatus() === \"loading\" ? \"true\" : null',\n    '[attr.data-disabled]': 'disabled() || null',\n  },\n})\nexport class TreeDirective<T = unknown> {\n  private hostElement = injectHostElement();\n\n  /** The hierarchical source the tree renders. Required. */\n  public dataSource = input<TreeDataSource<T> | null>(null);\n\n  /** Value equality - override when node values are objects. */\n  public compareWith = input<TreeCompareWith<T>>(defaultCompareWith);\n\n  /** Whether rows select, and how many at a time. @default 'single' */\n  public selectionMode = input<TreeSelectionMode>(TREE_SELECTION_MODES.SINGLE);\n\n  /** The selected value: `T | null` in single mode, `T[]` in multiple. Two-way bindable. */\n  public value = model<T | T[] | null>(null);\n\n  /**\n   * The values of the expanded branches. Two-way bindable, and the tree's only expansion state - nothing\n   * is inferred from the data, so an expansion set can be persisted and restored as-is.\n   *\n   * Values that match no node are ignored rather than pruned, so a set restored before its branch has\n   * loaded still opens once the node arrives.\n   */\n  public expandedValues = model<readonly T[]>([]);\n\n  /** Refuse to expand, select or move focus. Rows are marked `aria-disabled` and keep their DOM order. */\n  public disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * Turns a `loadChildren` failure into the message shown on the branch that failed. The default shows an\n   * `Error`'s `message` verbatim and a generic fallback for anything else.\n   */\n  public toErrorMessage = input<(error: unknown) => string>(\n    (error) => (error instanceof Error && error.message) || 'Something went wrong',\n  );\n\n  /** A row was activated - clicked, or Enter'd. Fires for branches and leaves alike. */\n  public nodeActivate = output<TreeNode<T>>();\n\n  private levels = signal<TreeLevel<T>[]>([]);\n\n  private registeredNodes = signal<TreeNodeLike<T>[]>([]);\n\n  /** @internal The `etTreeNodeDef` row template, when one is projected. */\n  public nodeTemplate = signal<TreeNodeDefLike<T> | null>(null);\n\n  /**\n   * The node holding roving focus, once the user has moved it. A row writes it on `focusin`, so the tab\n   * stop stays where the user left it and Shift+Tab re-enters there.\n   */\n  public focusedNode = signal<TreeNode<T> | null>(null);\n\n  // written while the focused row is still visible: once a collapse destroys it, this is the only\n  // record of where in the tree that row was\n  private focusedPath = signal<readonly TreeNode<T>[]>([]);\n\n  private focusedRowElement: HTMLElement | null = null;\n\n  /**\n   * The flattened tree: every row that is currently visible, in DOM order - the root's children plus\n   * the loaded children of every expanded branch below them.\n   */\n  public visibleRows = computed<TreeRow<T>[]>(() => {\n    const compareWith = this.compareWith();\n    const levels = this.levels();\n    const expanded = this.expandedValues();\n    const rows: TreeRow<T>[] = [];\n\n    const levelOf = (parent: TreeNode<T> | null) =>\n      levels.find((level) => nodesEqual({ a: level.parent, b: parent, compareWith })) ?? null;\n\n    // `seen` guards against a malformed source whose branch contains its own value, which would\n    // otherwise recurse until the stack gives out\n    const walk = (options: {\n      parent: TreeNode<T> | null;\n      level: number;\n      path: readonly TreeNode<T>[];\n      seen: readonly T[];\n    }) => {\n      const { parent, level, path, seen } = options;\n      const entry = levelOf(parent);\n\n      if (!entry) return;\n\n      entry.nodes.forEach((node, index) => {\n        const isExpandable = canExpand(node);\n        const children = isExpandable ? levelOf(node) : null;\n        const isExpanded = isExpandable && expanded.some((value) => compareWith(value, node.value));\n        const nodePath = [...path, node];\n\n        rows.push({\n          node,\n          level,\n          path: nodePath,\n          isExpandable,\n          isExpanded,\n          isDisabled: node.disabled === true,\n          childrenStatus: children?.status ?? TREE_LEVEL_STATUSES.IDLE,\n          childrenError: children?.error ?? null,\n          posInSet: index + 1,\n          setSize: entry.nodes.length,\n        });\n\n        if (isExpanded && !seen.some((value) => compareWith(value, node.value))) {\n          walk({ parent: node, level: level + 1, path: nodePath, seen: [...seen, node.value] });\n        }\n      });\n    };\n\n    walk({ parent: null, level: 1, path: [], seen: [] });\n\n    return rows;\n  });\n\n  /** Load state of the root level - what a tree shows a loading or empty state for. */\n  public rootStatus = computed(() => this.levelOf(null)?.status ?? TREE_LEVEL_STATUSES.IDLE);\n\n  /** The message from a failed root load, or `null`. */\n  public rootError = computed(() => this.levelOf(null)?.error ?? null);\n\n  /** The selected values, normalized to an array (empty for no selection). */\n  public values = computed<T[]>(() => {\n    const value = this.value();\n\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    return value === null || value === undefined ? [] : [value];\n  });\n\n  /**\n   * The row that owns the tree's single tab stop: the focused node while it is still visible, else the\n   * first row. A tree is one tab stop with the arrow keys moving inside it, so exactly one row is\n   * tabbable at any time.\n   */\n  public activeNode = computed(() => {\n    const rows = this.visibleRows();\n    const focused = this.focusedNode();\n    const compareWith = this.compareWith();\n\n    if (focused && rows.some((row) => compareWith(row.node.value, focused.value))) {\n      return focused;\n    }\n\n    const survivor = [...this.focusedPath()]\n      .reverse()\n      .find((ancestor) => rows.some((row) => compareWith(row.node.value, ancestor.value)));\n\n    return survivor ?? rows[0]?.node ?? null;\n  });\n\n  // type-to-focus by label across the visible rows - a deep tree cannot be navigated by name otherwise\n  private typeahead = createTypeahead();\n\n  constructor() {\n    // Every branch that needs loading right now: the root, plus each expanded branch whose children\n    // have not been requested yet. Expansion is therefore the only trigger a load ever needs - an\n    // `expandedValues` set that was restored from storage loads its branches exactly like a click does.\n    const idleParents = computed(() => {\n      if (!this.dataSource()) return [];\n\n      const parents: (TreeNode<T> | null)[] = [];\n\n      if (this.rootStatus() === TREE_LEVEL_STATUSES.IDLE) {\n        parents.push(null);\n      }\n\n      for (const row of this.visibleRows()) {\n        if (row.isExpanded && row.childrenStatus === TREE_LEVEL_STATUSES.IDLE) {\n          parents.push(row.node);\n        }\n      }\n\n      return parents;\n    });\n\n    // created here rather than inside the switchMap below, which is not an injection context\n    const idleParents$ = toObservable(idleParents);\n\n    toObservable(this.dataSource)\n      .pipe(\n        switchMap((source) => {\n          // a swapped source describes a different tree - drop what was learned from the old one, and\n          // let switchMap cancel its in-flight loads so a late response cannot write into the new tree\n          untracked(() => {\n            this.levels.set([]);\n            this.focusedNode.set(null);\n            this.focusedPath.set([]);\n          });\n\n          if (!source) return EMPTY;\n\n          // mergeMap, not switchMap: sibling branches expanded in quick succession all load\n          return idleParents$.pipe(mergeMap((parents) => merge(...parents.map((parent) => this.load(source, parent)))));\n        }),\n        takeUntilDestroyed(),\n      )\n      .subscribe();\n\n    afterRenderEffect(() => {\n      this.visibleRows();\n      untracked(() => this.restoreLostFocus());\n    });\n\n    inject(DestroyRef).onDestroy(() => this.typeahead.destroy());\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.dataSource()) {\n          throw new RuntimeError(\n            TREE_ERROR_CODES.MISSING_DATA_SOURCE,\n            '[TreeDirective] A [dataSource] is required - without one the tree has nothing to load. ' +\n              'Bind an object with a loadChildren(parent) method.',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  /** Whether a node is expanded. */\n  public isExpanded(node: TreeNode<T>) {\n    const compareWith = this.compareWith();\n\n    return this.expandedValues().some((value) => compareWith(value, node.value));\n  }\n\n  /** Whether a node is selected. */\n  public isSelected(node: TreeNode<T>) {\n    const compareWith = this.compareWith();\n\n    return this.values().some((value) => compareWith(value, node.value));\n  }\n\n  /** Expand a branch, loading its children if this is the first time. No-op on leaves and disabled nodes. */\n  public expand(node: TreeNode<T>) {\n    if (this.disabled() || node.disabled || !canExpand(node) || this.isExpanded(node)) return;\n\n    this.expandedValues.update((values) => [...values, node.value]);\n  }\n\n  /** Collapse a branch. Its children stay loaded, so re-expanding it is instant. */\n  public collapse(node: TreeNode<T>) {\n    if (this.disabled()) return;\n\n    const compareWith = this.compareWith();\n\n    this.moveFocusOutOf([node]);\n    this.expandedValues.update((values) => values.filter((value) => !compareWith(value, node.value)));\n  }\n\n  public toggleExpansion(node: TreeNode<T>) {\n    if (this.isExpanded(node)) {\n      this.collapse(node);\n    } else {\n      this.expand(node);\n    }\n  }\n\n  /**\n   * Expand every branch loaded so far. On a lazy source that is one level deeper than what is currently\n   * visible: call it again once the newly loaded branches arrive to keep going.\n   */\n  public expandAll() {\n    if (this.disabled()) return;\n\n    const compareWith = this.compareWith();\n    const expandable = this.levels()\n      .flatMap((level) => level.nodes)\n      .filter((node) => canExpand(node) && !node.disabled);\n\n    this.expandedValues.update((values) => [\n      ...values,\n      ...expandable.filter((node) => !values.some((value) => compareWith(value, node.value))).map((node) => node.value),\n    ]);\n  }\n\n  public collapseAll() {\n    if (this.disabled()) return;\n\n    this.moveFocusOutOf(\n      this.visibleRows()\n        .filter((row) => row.isExpanded)\n        .map((row) => row.node),\n    );\n    this.expandedValues.set([]);\n  }\n\n  /** Reload a branch's children - what a failed load is retried with. Pass `null` for the root. */\n  public retry(parent: TreeNode<T> | null) {\n    this.setLevel(parent, { status: TREE_LEVEL_STATUSES.IDLE, nodes: [], error: null });\n  }\n\n  /** Select a node. No-op while `selectionMode` is `'none'`. */\n  public select(node: TreeNode<T>) {\n    if (this.disabled() || node.disabled || this.selectionMode() === TREE_SELECTION_MODES.NONE) return;\n\n    if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {\n      if (this.isSelected(node)) return;\n\n      this.value.set([...this.values(), node.value]);\n\n      return;\n    }\n\n    this.value.set(node.value);\n  }\n\n  public deselect(node: TreeNode<T>) {\n    if (this.disabled() || !this.isSelected(node)) return;\n\n    const compareWith = this.compareWith();\n\n    if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {\n      this.value.set(this.values().filter((value) => !compareWith(value, node.value)));\n\n      return;\n    }\n\n    this.value.set(null);\n  }\n\n  /** Multiple mode: add the node to the selection, or remove it when already selected. */\n  public toggleSelection(node: TreeNode<T>) {\n    if (this.isSelected(node)) {\n      this.deselect(node);\n    } else {\n      this.select(node);\n    }\n  }\n\n  public clearSelection() {\n    this.value.set(this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE ? [] : null);\n  }\n\n  /**\n   * What a click or Enter on a row does: move roving focus there, retry a branch whose children failed to\n   * load, otherwise expand/collapse it, and apply the selection for the current mode. Always emits\n   * {@link nodeActivate}, so a leaf can be \"opened\" without being selected.\n   */\n  public activate(node: TreeNode<T>) {\n    if (this.disabled() || node.disabled) return;\n\n    this.focusNode(node);\n\n    const row = this.rowOf(node);\n\n    if (row?.childrenError) {\n      this.retry(node);\n    } else if (canExpand(node)) {\n      this.toggleExpansion(node);\n    }\n\n    if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {\n      this.toggleSelection(node);\n    } else {\n      this.select(node);\n    }\n\n    this.nodeActivate.emit(node);\n  }\n\n  /** Move roving focus - and DOM focus, when the row is rendered - to a node. */\n  public focusNode(node: TreeNode<T>) {\n    this.focusedNode.set(node);\n    this.focusedPath.set(this.rowOf(node)?.path ?? []);\n\n    const element = this.elementOf(node);\n\n    if (!element) return;\n\n    element.focus({ preventScroll: true });\n    element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n  }\n\n  /** Move focus to the tree's first row - where a fresh Tab lands. */\n  public focusFirst() {\n    const first = this.visibleRows()[0]?.node;\n\n    if (first) {\n      this.focusNode(first);\n    }\n  }\n\n  /** @internal Called from a row's `focusin`: the path goes with the node so a collapse can fall back to an ancestor. */\n  public markFocused(row: TreeRow<T>, element: HTMLElement) {\n    this.focusedNode.set(row.node);\n    this.focusedPath.set(row.path);\n    this.focusedRowElement = element.contains(element.ownerDocument.activeElement) ? element : null;\n  }\n\n  /** @internal Called from a node's constructor; the registration is undone when the row is destroyed. */\n  public registerNode(node: TreeNodeLike<T>) {\n    this.registeredNodes.update((nodes) => [...nodes, node]);\n\n    inject(DestroyRef).onDestroy(() =>\n      this.registeredNodes.update((nodes) => nodes.filter((candidate) => candidate !== node)),\n    );\n  }\n\n  /** @internal Routes a row's keydown through the tree navigation model. */\n  public handleNodeKeydown(event: KeyboardEvent, node: TreeNode<T>) {\n    if (event.ctrlKey || event.metaKey || event.altKey || this.disabled()) return;\n\n    const rows = this.visibleRows();\n    const compareWith = this.compareWith();\n    const index = rows.findIndex((row) => compareWith(row.node.value, node.value));\n    const row = rows[index];\n\n    if (!row) return;\n\n    // ArrowRight/ArrowLeft expand and collapse, which means they follow the writing direction\n    const rtl = getComputedStyle(this.hostElement).direction === 'rtl';\n    const expandKey = rtl ? 'ArrowLeft' : 'ArrowRight';\n    const collapseKey = rtl ? 'ArrowRight' : 'ArrowLeft';\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.focusRow(rows, index + 1);\n\n        return;\n      case 'ArrowUp':\n        event.preventDefault();\n        this.focusRow(rows, index - 1);\n\n        return;\n      case 'Home':\n        event.preventDefault();\n        this.focusRow(rows, 0);\n\n        return;\n      case 'End':\n        event.preventDefault();\n        this.focusRow(rows, rows.length - 1);\n\n        return;\n      case expandKey:\n        event.preventDefault();\n\n        if (row.isExpandable && !row.isExpanded) {\n          this.expand(node);\n        } else if (row.isExpanded && rows[index + 1]?.level === row.level + 1) {\n          this.focusRow(rows, index + 1);\n        }\n\n        return;\n      case collapseKey:\n        event.preventDefault();\n\n        if (row.isExpanded) {\n          this.collapse(node);\n\n          return;\n        }\n\n        // to the parent - the closest row above that sits one level up\n        for (let candidate = index - 1; candidate >= 0; candidate--) {\n          if (rows[candidate]?.level === row.level - 1) {\n            this.focusRow(rows, candidate);\n\n            return;\n          }\n        }\n\n        return;\n      case 'Enter':\n        event.preventDefault();\n        this.activate(node);\n\n        return;\n      case ' ':\n        if (this.selectionMode() === TREE_SELECTION_MODES.NONE) return;\n\n        event.preventDefault();\n\n        if (this.selectionMode() === TREE_SELECTION_MODES.MULTIPLE) {\n          this.toggleSelection(node);\n        } else {\n          this.select(node);\n        }\n\n        return;\n      case '*':\n        event.preventDefault();\n        this.expandSiblings(rows, row);\n\n        return;\n    }\n\n    if (event.key.length !== 1) return;\n\n    const query = this.typeahead.append(event.key);\n    // start after the focused row and wrap, so repeating a letter walks through the matches\n    const match = rows\n      .slice(index + 1)\n      .concat(rows.slice(0, index + 1))\n      .find((candidate) => !candidate.isDisabled && candidate.node.label.toLowerCase().startsWith(query));\n\n    if (match) {\n      event.preventDefault();\n      this.focusNode(match.node);\n    }\n  }\n\n  private levelOf(parent: TreeNode<T> | null) {\n    const compareWith = this.compareWith();\n\n    return this.levels().find((level) => nodesEqual({ a: level.parent, b: parent, compareWith })) ?? null;\n  }\n\n  private rowOf(node: TreeNode<T>) {\n    const compareWith = this.compareWith();\n\n    return this.visibleRows().find((row) => compareWith(row.node.value, node.value)) ?? null;\n  }\n\n  private elementOf(node: TreeNode<T>) {\n    const compareWith = this.compareWith();\n\n    return (\n      this.registeredNodes().find((registered) => compareWith(registered.row().node.value, node.value))?.elementRef\n        .nativeElement ?? null\n    );\n  }\n\n  // an outside `expandedValues` write destroys the focused row before any tree code runs, so DOM\n  // focus can only be handed on once the render that removed it has finished\n  private restoreLostFocus() {\n    const lost = this.focusedRowElement;\n\n    if (!lost || lost.isConnected) return;\n\n    this.focusedRowElement = null;\n\n    const active = lost.ownerDocument.activeElement;\n\n    if (active && active !== lost.ownerDocument.body) return;\n\n    const node = this.activeNode();\n\n    if (node) this.focusNode(node);\n  }\n\n  // must run before the collapse, while the surviving ancestor and the focused row are both rendered\n  private moveFocusOutOf(collapsed: readonly TreeNode<T>[]) {\n    const focused = this.focusedNode();\n\n    if (!focused) return;\n\n    const compareWith = this.compareWith();\n    const survivor = this.focusedPath().find(\n      (ancestor) =>\n        !compareWith(ancestor.value, focused.value) &&\n        collapsed.some((node) => compareWith(node.value, ancestor.value)),\n    );\n\n    if (!survivor) return;\n\n    const element = this.elementOf(focused);\n\n    if (element?.contains(element.ownerDocument.activeElement)) {\n      this.focusNode(survivor);\n    } else {\n      this.focusedNode.set(survivor);\n      this.focusedPath.set(this.rowOf(survivor)?.path ?? []);\n    }\n  }\n\n  private focusRow(rows: readonly TreeRow<T>[], index: number) {\n    const row = rows[Math.max(0, Math.min(rows.length - 1, index))];\n\n    if (row) {\n      this.focusNode(row.node);\n    }\n  }\n\n  /** `*` expands every branch at the focused row's level that shares its parent. */\n  private expandSiblings(rows: readonly TreeRow<T>[], row: TreeRow<T>) {\n    const compareWith = this.compareWith();\n    const parent = row.path[row.path.length - 2] ?? null;\n\n    for (const candidate of rows) {\n      if (\n        candidate.level === row.level &&\n        nodesEqual({ a: candidate.path[candidate.path.length - 2] ?? null, b: parent, compareWith })\n      ) {\n        this.expand(candidate.node);\n      }\n    }\n  }\n\n  private load(source: TreeDataSource<T>, parent: TreeNode<T> | null) {\n    // The request was queued from a state that has since changed - the source was swapped, or the\n    // branch collapsed again while `toObservable` was still holding this list. Reading the current\n    // set is what keeps a re-emission from loading the same branch twice.\n    if (!this.isIdle(parent)) return EMPTY;\n\n    this.setLevel(parent, { status: TREE_LEVEL_STATUSES.LOADING, nodes: [], error: null });\n\n    // defer, so a `loadChildren` that throws on the spot fails the branch like a rejected load\n    // rather than tearing down the whole pipeline\n    return defer(() => toChildrenObservable(source.loadChildren(parent))).pipe(\n      take(1),\n      tap({\n        next: (nodes) => this.setLevel(parent, { status: TREE_LEVEL_STATUSES.LOADED, nodes, error: null }),\n        error: (error) =>\n          this.setLevel(parent, {\n            status: TREE_LEVEL_STATUSES.ERROR,\n            nodes: [],\n            error: this.toErrorMessage()(error),\n          }),\n      }),\n      catchError(() => EMPTY),\n    );\n  }\n\n  private isIdle(parent: TreeNode<T> | null) {\n    const level = this.levelOf(parent);\n\n    if (level !== null && level.status !== TREE_LEVEL_STATUSES.IDLE) {\n      return false;\n    }\n\n    return parent === null || this.isExpanded(parent);\n  }\n\n  private setLevel(parent: TreeNode<T> | null, state: Omit<TreeLevel<T>, 'parent'>) {\n    const compareWith = this.compareWith();\n\n    this.levels.update((levels) => [\n      ...levels.filter((level) => !nodesEqual({ a: level.parent, b: parent, compareWith })),\n      { parent, ...state },\n    ]);\n  }\n}\n","import { Directive, ElementRef, afterNextRender, computed, inject, input } from '@angular/core';\nimport { RuntimeError } from '@ethlete/core';\nimport { TREE_ERROR_CODES } from '../tree-errors';\nimport { TreeDirective } from './tree.directive';\nimport { TreeRow } from './tree.types';\n\n/**\n * A single row of a tree. Bind the {@link TreeRow} it represents; the directive wires the ARIA tree\n * semantics (including the position values a flat DOM has to state), the roving tab stop and the\n * interaction, and mirrors the row's state as `data-*` attributes for styling.\n *\n * @example\n * @for (row of tree.visibleRows(); track row.node) {\n *   <div [row]=\"row\" etTreeNode>{{ row.node.label }}</div>\n * }\n */\n@Directive({\n  selector: '[etTreeNode]',\n  exportAs: 'etTreeNode',\n  host: {\n    role: 'treeitem',\n    '[attr.aria-level]': 'row().level',\n    '[attr.aria-posinset]': 'row().posInSet',\n    '[attr.aria-setsize]': 'row().setSize',\n    '[attr.aria-expanded]': 'row().isExpandable ? row().isExpanded : null',\n    '[attr.aria-selected]': 'selectionMode() === \"none\" ? null : selected()',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.aria-busy]': 'row().childrenStatus === \"loading\" ? \"true\" : null',\n    '[attr.tabindex]': 'active() ? 0 : -1',\n    '[attr.data-selected]': 'selected() || null',\n    '[attr.data-expanded]': 'row().isExpanded || null',\n    '[attr.data-branch]': 'row().isExpandable || null',\n    '[attr.data-disabled]': 'disabled() || null',\n    '[attr.data-error]': 'row().childrenError !== null || null',\n    '(click)': 'handleClick()',\n    '(keydown)': 'handleKeydown($event)',\n    '(focusin)': 'handleFocusIn()',\n  },\n})\nexport class TreeNodeDirective<T = unknown> {\n  private tree = inject<TreeDirective<T>>(TreeDirective, { optional: true });\n\n  /** @internal The element the tree moves DOM focus to when roving focus lands on this row. */\n  public elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  /** The row this element renders - one entry of the tree's `visibleRows()`. */\n  public row = input.required<TreeRow<T>>();\n\n  protected selectionMode = computed(() => this.tree?.selectionMode() ?? 'none');\n  protected selected = computed(() => this.tree?.isSelected(this.row().node) ?? false);\n  protected disabled = computed(() => this.row().isDisabled || (this.tree?.disabled() ?? false));\n\n  protected active = computed(() => {\n    const active = this.tree?.activeNode();\n\n    if (!active || !this.tree) return false;\n\n    return this.tree.compareWith()(active.value, this.row().node.value);\n  });\n\n  constructor() {\n    this.tree?.registerNode(this);\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tree) {\n          throw new RuntimeError(\n            TREE_ERROR_CODES.PART_OUTSIDE_TREE,\n            '[TreeNodeDirective] etTreeNode must be placed inside an [etTree] element (e.g. <et-tree>).',\n            { element: this.elementRef.nativeElement },\n          );\n        }\n      });\n    }\n  }\n\n  protected handleClick() {\n    this.tree?.activate(this.row().node);\n  }\n\n  protected handleKeydown(event: KeyboardEvent) {\n    this.tree?.handleNodeKeydown(event, this.row().node);\n  }\n\n  protected handleFocusIn() {\n    this.tree?.markFocused(this.row(), this.elementRef.nativeElement);\n  }\n}\n","import { DestroyRef, Directive, TemplateRef, afterNextRender, inject } from '@angular/core';\nimport { RuntimeError, injectHostElement } from '@ethlete/core';\nimport { TREE_ERROR_CODES } from '../tree-errors';\nimport { TreeDirective } from './tree.directive';\nimport { TreeNodeDefContext } from './tree.types';\n\n/**\n * Replaces the default tree's plain-text row label with a template, for rows that need markup - an\n * icon per node type, a badge, a secondary line. The node is the template's implicit value, and its\n * full {@link TreeRow} is available as `let-row` for the level, expansion and load state.\n *\n * @example\n * <et-tree [dataSource]=\"files\">\n *   <ng-template etTreeNodeDef let-node let-row=\"row\">\n *     <i [etIcon]=\"row.isExpandable ? 'folder' : 'file'\"></i>\n *     {{ node.label }}\n *   </ng-template>\n * </et-tree>\n */\n@Directive({\n  selector: 'ng-template[etTreeNodeDef]',\n  exportAs: 'etTreeNodeDef',\n})\nexport class TreeNodeDefDirective<T = unknown> {\n  private hostElement = injectHostElement<Comment>();\n\n  private tree = inject<TreeDirective<T>>(TreeDirective, { optional: true });\n\n  public templateRef = inject<TemplateRef<TreeNodeDefContext<T>>>(TemplateRef);\n\n  constructor() {\n    this.tree?.nodeTemplate.set(this);\n\n    inject(DestroyRef).onDestroy(() => {\n      if (this.tree?.nodeTemplate() === this) {\n        this.tree.nodeTemplate.set(null);\n      }\n    });\n\n    if (ngDevMode) {\n      afterNextRender(() => {\n        if (!this.tree) {\n          throw new RuntimeError(\n            TREE_ERROR_CODES.PART_OUTSIDE_TREE,\n            '[TreeNodeDefDirective] etTreeNodeDef must be placed inside an [etTree] element (e.g. <et-tree>).',\n            { element: this.hostElement },\n          );\n        }\n      });\n    }\n  }\n\n  // static on purpose (the lint ban excepts it): Angular's template type checker requires the\n  // context guard to be static - it types the `let-` bindings of the host ng-template\n  public static ngTemplateContextGuard<T>(\n    _directive: TreeNodeDefDirective<T>,\n    _context: unknown,\n  ): _context is TreeNodeDefContext<T> {\n    return true;\n  }\n}\n","import { Component, ViewEncapsulation, input } from '@angular/core';\nimport { CHEVRON_ICON, IconDirective, TRIANGLE_EXCLAMATION_ICON, provideIcons } from '../icon';\nimport { SpinnerComponent } from '../loader';\n\n/** What the slot in front of a tree row shows. */\nexport const TREE_MARKERS = {\n  /** Nothing - a leaf, which keeps the slot so its label lines up with its siblings. */\n  NONE: 'none',\n  /** A collapsed or expanded branch; the rotation follows the row's `data-expanded`. */\n  CHEVRON: 'chevron',\n  /** The branch is loading its children. */\n  SPINNER: 'spinner',\n  /** The branch failed to load. */\n  WARNING: 'warning',\n} as const;\n\nexport type TreeMarker = (typeof TREE_MARKERS)[keyof typeof TREE_MARKERS];\n\n/**\n * The slot in front of a tree row: its chevron, load spinner or failure mark. Its own component so\n * that it - and not the tree - is what registers the icons it draws. A `provideIcons()` on the tree\n * would sit above every projected row template in the injector tree and hide the consumer's own icon\n * registration from it, since an embedded view resolves DI from where it is inserted.\n */\n@Component({\n  selector: 'et-tree-marker',\n  template: `\n    @switch (marker()) {\n      @case ('spinner') {\n        <et-spinner [diameter]=\"12\" />\n      }\n      @case ('warning') {\n        <i class=\"et-tree-node-warning\" etIcon=\"et-triangle-exclamation\"></i>\n      }\n      @case ('chevron') {\n        <i class=\"et-tree-node-chevron\" etIcon=\"et-chevron\"></i>\n      }\n    }\n  `,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconDirective, SpinnerComponent],\n  providers: [provideIcons(CHEVRON_ICON, TRIANGLE_EXCLAMATION_ICON)],\n  host: {\n    class: 'et-tree-node-marker',\n    'aria-hidden': 'true',\n  },\n})\nexport class TreeMarkerComponent {\n  public marker = input<TreeMarker>(TREE_MARKERS.NONE);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { TREE_SELECTION_MODES, TreeDirective, TreeNodeDirective, TreeRow } from './headless';\nimport { TREE_MARKERS, TreeMarker, TreeMarkerComponent } from './tree-marker.component';\n\nconst markerFor = (row: TreeRow<unknown>): TreeMarker => {\n  if (row.childrenStatus === 'loading') return TREE_MARKERS.SPINNER;\n  if (row.childrenError !== null) return TREE_MARKERS.WARNING;\n\n  return row.isExpandable ? TREE_MARKERS.CHEVRON : TREE_MARKERS.NONE;\n};\n\n/**\n * The default tree: an indented, themed, keyboard-navigable rendering of a hierarchy, driven by the\n * headless {@link TreeDirective}. Rows show their label; project an `<ng-template etTreeNodeDef>` to\n * render them with markup instead.\n *\n * Branches load their children the first time they expand, so binding a lazy `[dataSource]` needs no\n * extra wiring - a branch that is still loading shows a spinner in place of its chevron, and one whose\n * load failed shows the message and reloads when selected again.\n *\n * @example\n * <et-tree [dataSource]=\"categories\" [(value)]=\"categoryId\" [(expandedValues)]=\"openBranches\" />\n */\n@Component({\n  selector: 'et-tree',\n  templateUrl: './tree.component.html',\n  styleUrl: './tree.component.css',\n  encapsulation: ViewEncapsulation.None,\n  imports: [TreeNodeDirective, TreeMarkerComponent, NgTemplateOutlet],\n  hostDirectives: [\n    {\n      directive: TreeDirective,\n      inputs: ['dataSource', 'compareWith', 'selectionMode', 'value', 'expandedValues', 'disabled', 'toErrorMessage'],\n      outputs: ['valueChange', 'expandedValuesChange', 'nodeActivate'],\n    },\n  ],\n  host: {\n    class: 'et-tree',\n  },\n})\nexport class TreeComponent<T = unknown> {\n  protected tree = inject<TreeDirective<T>>(TreeDirective);\n\n  /** Shown while the root level loads. */\n  public loadingLabel = input('Loading…');\n\n  /** Shown when the root level loaded no nodes at all. */\n  public emptyLabel = input('Nothing to show');\n\n  /** Appended to a failed level's message, to say that selecting the row loads it again. */\n  public retryLabel = input('select to retry');\n\n  /**\n   * The rows plus their marker and template context, built together so each row's context object\n   * survives change detection instead of being rebuilt on every pass.\n   */\n  protected rows = computed(() =>\n    this.tree.visibleRows().map((row) => ({ row, marker: markerFor(row), context: { $implicit: row.node, row } })),\n  );\n\n  protected isMultiSelect = computed(() => this.tree.selectionMode() === TREE_SELECTION_MODES.MULTIPLE);\n}\n","@for (entry of rows(); track entry.row.node) {\n  <div [row]=\"entry.row\" [style.--_et-tree-node-depth]=\"entry.row.level - 1\" class=\"et-tree-node\" etTreeNode>\n    <et-tree-marker [marker]=\"entry.marker\" />\n\n    @if (isMultiSelect()) {\n      <span class=\"et-tree-node-check\" aria-hidden=\"true\"></span>\n    }\n\n    <span class=\"et-tree-node-label\">\n      @if (tree.nodeTemplate(); as nodeTemplate) {\n        <ng-container [ngTemplateOutlet]=\"nodeTemplate.templateRef\" [ngTemplateOutletContext]=\"entry.context\" />\n      } @else {\n        {{ entry.row.node.label }}\n      }\n    </span>\n\n    @if (entry.row.childrenError; as error) {\n      <span class=\"et-tree-node-error\">{{ error }} · {{ retryLabel() }}</span>\n    }\n  </div>\n}\n\n<!-- The status lines are `treeitem`s rather than plain text: everything inside a `role=\"tree\"` has to be\n     one. The error line is also the retry control - selecting it reloads, the same way activating a\n     branch whose children failed does. -->\n@if (tree.rootStatus() === 'loading') {\n  <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n    <et-tree-marker marker=\"spinner\" />\n    {{ loadingLabel() }}\n  </div>\n} @else if (tree.rootError(); as error) {\n  <div\n    (click)=\"tree.retry(null)\"\n    (keydown.enter)=\"tree.retry(null)\"\n    class=\"et-tree-status et-tree-status--error\"\n    aria-level=\"1\"\n    aria-selected=\"false\"\n    role=\"treeitem\"\n    tabindex=\"0\"\n  >\n    <et-tree-marker marker=\"warning\" />\n    {{ error }} · {{ retryLabel() }}\n  </div>\n} @else if (!rows().length) {\n  <div class=\"et-tree-status\" aria-disabled=\"true\" aria-level=\"1\" aria-selected=\"false\" role=\"treeitem\">\n    {{ emptyLabel() }}\n  </div>\n}\n","import { TreeDirective, TreeNodeDefDirective, TreeNodeDirective } from './headless';\nimport { TreeComponent } from './tree.component';\n\nexport const TREE_IMPORTS = [TreeComponent, TreeDirective, TreeNodeDirective, TreeNodeDefDirective] as const;\n","// Generated from package.json by tools/scripts/generate-version.js - do not edit.\n\n/** The version of `@ethlete/components` this build was cut from. */\nexport const COMPONENTS_VERSION = '1.0.0-next.62';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["selectorOf","svg","i1.AccordionDirective","PRESSED_VARIANT_MAP","i1.ButtonDirective","i2.ButtonStylesDirective","i3","i4.FocusRingDirective","i5.ButtonColorDirective","i2.IconDirective","i1.FocusRingDirective","i2.PictureComponent","i3.PictureErrorDirective","i4.SkeletonItemComponent","i1.MatchCardDirective","i2.FocusRingDirective","i1.IconDirective","i1.MatchCardComponent","resolveBracketLayoutCore","uniqueId","optionalNumberAttribute","setupJourneyHighlightListeners","i3.FocusRingDirective","i4","i1.OverlayMainDirective","COMMIT_THRESHOLD_PX","isDevMode","i1","DOCUMENT","i1.IconButtonComponent","i2.ToggletipDirective","i3.ToggletipTriggerDirective","i1.BreadcrumbDirective","i2.SkeletonComponent","i3.SkeletonItemComponent","i1.CalendarDirective","i1.ScrollableDirective","i2","clamp","i1.CarouselDirective","i2.CarouselAutoplayDirective","i3.IconButtonComponent","i4.ScrollableComponent","i5.ScrollableDragDirective","i6.ScrollableSnapDirective","finiteOrNull","i1.TooltipDirective","i1.BarChartDirective","zonedFields","instantFromZonedFields","viewerTimeZone","i1.LineChartDirective","i1.PieChartDirective","i1.ChipDirective","i1.CommandPaletteDirective","firstErrorMessage","uniqueIdCounter","defaultCompareWith","nodesEqual","toChildrenObservable","i1.ScrollbarDirective","i1.CascaderDirective","i1.FormFieldDirective","PAGE_STEP_MULTIPLIER","decimalPrecisionOf","formatDate","i1.DateInputDirective","i2.CalendarComponent","i1.DateRangeInputDirective","secondsOfDay","UNBOUND_VALUE","i2.SelectionListDirective","i1.SelectionOptionDirective","PICKER_ROWS","localReadingIdCounter","i1.DateTimeInputDirective","i3.TimePickerComponent","i1.DateTimeRangeInputDirective","i1.DurationInputDirective","i1.TimeInputDirective","i2.TimePickerComponent","i1.TimeRangeInputDirective","i2.DropzoneDirective","i1.NumberInputDirective","isPromiseLike","i2.ButtonComponent","i4.TextButtonComponent","i5.FormFieldComponent","i6.LabelDirective","i7.InputComponent","i8.ChoiceFieldComponent","i9.CheckboxComponent","i7.HintComponent","i8.InputComponent","i1.ButtonComponent","createMenuTypeahead","i1.MenuSelectionGroupDirective","i1.MenuItemDirective","i2.MenuSelectionItemDirective","i1.MenuPanelDirective","i2.MenuDirective","i3.MenuTriggerDirective","i4.MenuSurfaceDirective","i5.MenuComponent","i6.MenuRadioGroupComponent","i7.MenuRadioItemComponent","i6.MenuItemComponent","i1.RichTextEditorDirective","i2.IconButtonComponent","i1.MenuDirective","i2.MenuTriggerDirective","i3.MenuSurfaceDirective","i4.MenuComponent","i5.MenuRadioGroupComponent","i6.MenuRadioItemComponent","i2.RichTextEditorComponent","i2.OtpInputDirective","i1.SelectAllOptionDirective","i1.SelectOptionGroupDirective","i1.SelectOptionDirective","rxDebounceTime","i1.SelectVirtualOptionDirective","i1.SelectDirective","i1.PhoneInputDirective","i1.SelectionListControlDirective","i2.RangeSliderDirective","i2.SliderDirective","i1.TagInputDirective","i1.GridItemDirective","i2.GridDragDirective","i3.GridResizeDirective","i1.GridDirective","tap","isQuery","i4.IconDirective","i1.NotificationStackDirective","i1.PaginationDirective","i1.QueryErrorDirective","appointmentCoversDay","MINUTES_PER_DAY","i1.SchedulerAgendaDirective","i1.FormFieldComponent","i2.LabelDirective","i3.InputComponent","i4.RadioGroupComponent","i5.RadioComponent","i3.TextareaComponent","i3.DateTimeRangeInputComponent","i2.SchedulerEditSurfaceDirective","i3.SchedulerEditTitleDirective","i4.SchedulerEditTimeRangeDirective","i5.SchedulerEditLocationDirective","i6.SchedulerEditDescriptionDirective","i7.SchedulerEditColorDirective","i8.SchedulerActionAddSubAppointmentDirective","i9.SchedulerActionDeleteDirective","i10.ButtonComponent","i11.IconButtonComponent","i12.MenuDirective","i13.MenuTriggerDirective","i14.MenuSurfaceDirective","i15.MenuComponent","i16.MenuItemComponent","i1.SchedulerMonthDirective","i1.SchedulerTimeGridDirective","i1.SchedulerDirective","i2.SchedulerBadgeColorDotDirective","i3.SchedulerBadgeTitleDirective","i4.SchedulerBadgeTimeRangeDirective","i5.SchedulerBadgeLocationDirective","i6.SchedulerBadgeChainCountDirective","i7.SchedulerActionAddAppointmentDirective","i8.SchedulerSwipeNavigationDirective","i9.SchedulerAppointmentDragDirective","i11.FabComponent","i12.IconButtonComponent","i13.FloatingActionDirective","i14.FloatingActionAnchorDirective","i14.FloatingActionTriggerDirective","i15.SegmentedButtonGroupComponent","i16.SegmentedButtonComponent","i2.MatchParticipantComponent","i1.StandingsDirective","i1.StreamConsentDirective","i1.StreamPlayerErrorDirective","i1.PipWindowParamsDirective","injectHostTable","i2.TabBarTriggerDirective","i3.NavTabLinkDirective","i2.TabBarDirective","i3.NavTabsDirective","i1.OverlayRouterLinkDirective","i3.TabGroupDirective"],"mappings":"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,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC9B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC/B,IA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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA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"}