{"version":3,"file":"ux-aspects-ux-aspects.mjs","sources":["../../../src/common/colors/color.enum.ts","../../../src/common/icon/icon-type.ts","../../../src/common/operators/tick.operator.ts","../../../src/common/utilities/trigger-source.ts","../../../src/components/accordion/accordion-panel/accordion-panel-heading.directive.ts","../../../src/components/accordion/accordion.service.ts","../../../src/directives/accessibility/options/accessibility-options.token.ts","../../../src/directives/accessibility/options/accessibility-options.service.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator-options/focus-indicator-options.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator-origin/focus-indicator-origin.service.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator.service.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator.directive.ts","../../../src/components/accordion/accordion-panel/accordion-panel.component.ts","../../../src/components/accordion/accordion-panel/accordion-panel.component.html","../../../src/components/accordion/accordion.component.ts","../../../src/components/accordion/accordion.component.html","../../../src/services/color/color-sets/keppel-color-set.ts","../../../src/services/color/color-sets/micro-focus-color-set.ts","../../../src/services/color/color-sets/index.ts","../../../src/services/color/theme-color.ts","../../../src/services/color/color.service.ts","../../../src/services/color/color.module.ts","../../../src/directives/accessibility/contrast-ratio/contrast.service.ts","../../../src/directives/accessibility/contrast-ratio/color-contrast.directive.ts","../../../src/directives/accessibility/focus-indicator/default-focus-indicator.directive.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator-options/focus-indicator-options.directive.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator-origin/focus-indicator-origin.ts","../../../src/directives/accessibility/focus-indicator/focus-indicator-origin/focus-indicator-origin.directive.ts","../../../src/directives/accessibility/focus-within/focus-within.directive.ts","../../../src/directives/accessibility/managed-focus-container/managed-focus-container.service.ts","../../../src/directives/accessibility/managed-focus-container/managed-focus-container.directive.ts","../../../src/directives/accessibility/splitter/splitter-accessibility.directive.ts","../../../src/directives/accessibility/tabbable-list/tabbable-list.service.ts","../../../src/directives/accessibility/tabbable-list/tabbable-list-item.directive.ts","../../../src/directives/accessibility/tabbable-list/tabbable-list.directive.ts","../../../src/directives/accessibility/accessibility.module.ts","../../../src/components/accordion/accordion.module.ts","../../../src/components/alert/alert-icon.directive.ts","../../../src/components/icon/icon-options.token.ts","../../../src/components/icon/iconsets/common-icons.ts","../../../src/components/icon/iconsets/ux-iconset.ts","../../../src/components/icon/icon.service.ts","../../../src/components/icon/icon.component.ts","../../../src/components/alert/alert.component.ts","../../../src/components/alert/alert.component.html","../../../src/components/icon/icon.module.ts","../../../src/components/alert/alert.module.ts","../../../src/components/breadcrumbs/breadcrumbs.component.ts","../../../src/components/breadcrumbs/breadcrumbs.component.html","../../../src/components/breadcrumbs/breadcrumbs.module.ts","../../../src/directives/resize/resize.service.ts","../../../src/directives/resize/resize.directive.ts","../../../src/directives/resize/resize.module.ts","../../../src/components/card-tabs/card-tab/card-tab-content.directive.ts","../../../src/components/card-tabs/card-tabs.service.ts","../../../src/components/card-tabs/card-tab/card-tab.component.ts","../../../src/components/card-tabs/card-tab/card-tab.component.html","../../../src/components/card-tabs/card-tabset/card-tabset.component.ts","../../../src/components/card-tabs/card-tabset/card-tabset.component.html","../../../src/components/card-tabs/card-tabs.module.ts","../../../src/components/menu/menu-divider/menu-divider.component.ts","../../../src/components/menu/menu-divider/menu-divider.component.html","../../../src/components/menu/menu-item/menu-item-type.enum.ts","../../../src/components/menu/menu-options.token.ts","../../../src/components/menu/menu/menu.component.ts","../../../src/components/menu/menu/menu.component.html","../../../src/components/menu/menu-initial-focus/menu-initial-focus.directive.ts","../../../src/components/menu/menu-tabbable-item/menu-tabbable-item.directive.ts","../../../src/components/menu/menu-item-custom-control/menu-item-custom-control.directive.ts","../../../src/components/menu/menu-item/menu-item.component.ts","../../../src/components/menu/menu-item/menu-item.component.html","../../../src/services/overlay-placement/overlay-placement.service.ts","../../../src/components/menu/menu-trigger/menu-trigger.directive.ts","../../../src/components/menu/menu.module.ts","../../../src/components/checkbox/checkbox.component.ts","../../../src/components/checkbox/checkbox.component.html","../../../src/components/checkbox/checkbox.module.ts","../../../src/components/color-picker/color-picker-color.ts","../../../src/components/tooltip/tooltip.component.ts","../../../src/components/tooltip/tooltip.component.html","../../../src/components/tooltip/tooltip.service.ts","../../../src/components/tooltip/tooltip.directive.ts","../../../src/components/color-picker/color-picker.component.ts","../../../src/components/color-picker/color-picker.component.html","../../../src/components/number-picker/number-picker.component.ts","../../../src/components/number-picker/number-picker.component.html","../../../src/components/number-picker/number-picker.module.ts","../../../src/components/tooltip/tooltip.module.ts","../../../src/components/color-picker/color-picker.module.ts","../../../src/components/column-sorting/column-sorting.directive.ts","../../../src/components/column-sorting/column-sorting.component.ts","../../../src/components/column-sorting/column-sorting.component.html","../../../src/components/column-sorting/column-sorting.module.ts","../../../src/components/conduit/conduit-subject.ts","../../../src/components/conduit/conduit-zone.service.ts","../../../src/components/conduit/conduit.component.ts","../../../src/components/conduit/conduit-zone.component.ts","../../../src/components/conduit/interfaces/conduit-properties.ts","../../../src/components/conduit/conduit.decorator.ts","../../../src/components/conduit/conduit.module.ts","../../../src/directives/drag/drag.service.ts","../../../src/directives/drag/drag.directive.ts","../../../src/directives/drag/drop.directive.ts","../../../src/directives/drag/drag.module.ts","../../../src/components/dashboard/widget/dashboard-stack-mode.enum.ts","../../../src/components/dashboard/dashboard.service.ts","../../../src/components/dashboard/widget/dashboard-widget.component.ts","../../../src/components/dashboard/widget/dashboard-widget.component.html","../../../src/components/dashboard/grab-handle/grab-handle.service.ts","../../../src/components/dashboard/grab-handle/grab-handle.directive.ts","../../../src/components/dashboard/dashboard.component.ts","../../../src/components/dashboard/dashboard.component.html","../../../src/components/dashboard/drag-handle/drag-handle.directive.ts","../../../src/components/dashboard/dashboard.module.ts","../../../src/components/date-time-picker/date-time-picker.utils.ts","../../../src/components/date-range-picker/date-range.service.ts","../../../src/components/date-range-picker/date-range-picker.directive.ts","../../../src/components/date-time-picker/date-time-picker.config.ts","../../../src/components/date-time-picker/date-time-picker.service.ts","../../../src/components/date-time-picker/header/header.component.ts","../../../src/components/date-time-picker/header/header.component.html","../../../src/components/date-time-picker/day-view/day-view.service.ts","../../../src/directives/focus-if/focus-if.directive.ts","../../../src/components/date-time-picker/pipes/weekday-sort.pipe.ts","../../../src/components/date-time-picker/day-view/day-view.component.ts","../../../src/components/date-time-picker/day-view/day-view.component.html","../../../src/components/date-time-picker/month-view/month-view.service.ts","../../../src/components/date-time-picker/month-view/month-view.component.ts","../../../src/components/date-time-picker/month-view/month-view.component.html","../../../src/components/date-time-picker/year-view/year-view.service.ts","../../../src/components/date-time-picker/year-view/year-view.component.ts","../../../src/components/date-time-picker/year-view/year-view.component.html","../../../src/components/spin-button/spin-button.component.ts","../../../src/components/spin-button/spin-button.component.html","../../../src/components/time-picker/time-picker.component.ts","../../../src/components/time-picker/time-picker.component.html","../../../src/components/date-time-picker/time-view/time-view.component.ts","../../../src/components/date-time-picker/time-view/time-view.component.html","../../../src/components/date-time-picker/date-time-picker.component.ts","../../../src/components/date-time-picker/date-time-picker.component.html","../../../src/pipes/date-formatter/date-formatter.pipe.ts","../../../src/components/date-range-picker/date-range-picker.component.ts","../../../src/components/date-range-picker/date-range-picker.component.html","../../../src/pipes/date-formatter/date-formatter.module.ts","../../../src/directives/focus-if/focus-if.module.ts","../../../src/components/spin-button/spin-button.module.ts","../../../src/components/time-picker/time-picker.module.ts","../../../src/components/date-time-picker/date-time-picker.module.ts","../../../src/components/date-range-picker/date-range-picker.module.ts","../../../src/components/ebox/ebox.component.ts","../../../src/components/ebox/ebox.component.html","../../../src/components/ebox/ebox.module.ts","../../../src/components/facets/base/facet-header/facet-header.component.ts","../../../src/components/facets/base/facet-header/facet-header.component.html","../../../src/components/facets/facet-events.ts","../../../src/components/facets/facet.service.ts","../../../src/components/facets/facet-check-list/check-list-item/facet-check-list-item.component.ts","../../../src/components/facets/facet-check-list/check-list-item/facet-check-list-item.component.html","../../../src/components/facets/facet-check-list/facet-check-list.component.ts","../../../src/components/facets/facet-check-list/facet-check-list.component.html","../../../src/components/facets/facet-clear-button/facet-clear-button.directive.ts","../../../src/components/facets/facet-container.component.ts","../../../src/components/facets/facet-container.component.html","../../../src/components/typeahead/typeahead-event.ts","../../../src/components/typeahead/typeahead-key.service.ts","../../../src/directives/infinite-scroll/infinite-scroll-load-button.directive.ts","../../../src/directives/infinite-scroll/infinite-scroll-loading.directive.ts","../../../src/directives/infinite-scroll/infinite-scroll.directive.ts","../../../src/directives/infinite-scroll/infinite-scroll.module.ts","../../../src/services/popover-orientation/popover-orientation.service.ts","../../../src/components/typeahead/typeahead.service.ts","../../../src/directives/safe-inner-html/safe-inner-html.directive.ts","../../../src/directives/scroll/scroll-into-view.service.ts","../../../src/directives/scroll/scroll-into-view-if.directive.ts","../../../src/components/typeahead/typeahead-highlight.directive.ts","../../../src/components/typeahead/typeahead-options-list.component.ts","../../../src/components/typeahead/typeahead-options-list.component.html","../../../src/components/typeahead/typeahead.component.ts","../../../src/components/typeahead/typeahead.component.html","../../../src/directives/scroll/scroll-into-view.directive.ts","../../../src/directives/scroll/scroll.module.ts","../../../src/components/typeahead/typeahead.module.ts","../../../src/components/facets/facet-typeahead-list/typeahead-list-item/facet-typeahead-list-item.component.ts","../../../src/components/facets/facet-typeahead-list/typeahead-list-item/facet-typeahead-list-item.component.html","../../../src/components/facets/facet-typeahead-list/facet-typeahead-list.component.ts","../../../src/components/facets/facet-typeahead-list/facet-typeahead-list.component.html","../../../src/directives/reorderable/reorderable-handle.directive.ts","../../../src/directives/reorderable/reorderable-model.directive.ts","../../../src/directives/reorderable/reorderable.directive.ts","../../../src/directives/reorderable/reorderable.module.ts","../../../src/components/facets/facets.module.ts","../../../src/components/facets/models/facet.ts","../../../src/components/filters/events/filter-add-event.ts","../../../src/components/filters/events/filter-remove-all-event.ts","../../../src/components/filters/events/filter-remove-event.ts","../../../src/components/filters/filter.service.ts","../../../src/components/filters/filter-container.component.ts","../../../src/components/filters/filter-container.component.html","../../../src/components/filters/filter-dropdown/filter-dropdown.component.ts","../../../src/components/filters/filter-dropdown/filter-dropdown.component.html","../../../src/components/filters/filter-dynamic/filter-typeahead-highlight.pipe.ts","../../../src/components/filters/filter-dynamic/filter-dynamic.component.ts","../../../src/components/filters/filter-dynamic/filter-dynamic.component.html","../../../src/components/filters/filter.module.ts","../../../src/components/flippable-card/flippable-card.component.ts","../../../src/components/flippable-card/flippable-card.component.html","../../../src/components/flippable-card/flippable-card.module.ts","../../../src/components/floating-action-buttons/floating-action-buttons.service.ts","../../../src/components/floating-action-buttons/floating-action-button.component.ts","../../../src/components/floating-action-buttons/floating-action-button.component.html","../../../src/components/floating-action-buttons/floating-action-buttons.component.ts","../../../src/components/floating-action-buttons/floating-action-buttons.component.html","../../../src/components/floating-action-buttons/floating-action-buttons.module.ts","../../../src/components/hierarchy-bar/hierarchy-bar-node/hierarchy-bar-node-icon.directive.ts","../../../src/components/hierarchy-bar/hierarchy-bar.service.ts","../../../src/directives/click-outside/click-outside.directive.ts","../../../src/components/popover/popover.component.ts","../../../src/components/popover/popover.component.html","../../../src/components/popover/popover.directive.ts","../../../src/components/hierarchy-bar/hierarchy-bar-node/hierarchy-bar-node.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar-node/hierarchy-bar-node.component.html","../../../src/components/hierarchy-bar/hierarchy-bar-popover-item/hierarchy-bar-popover-item.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar-popover-item/hierarchy-bar-popover-item.component.html","../../../src/components/hierarchy-bar/hierarchy-bar-popover/hierarchy-bar-popover.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar-popover/hierarchy-bar-popover.component.html","../../../src/components/hierarchy-bar/hierarchy-bar-standard/hierarchy-bar-standard.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar-standard/hierarchy-bar-standard.component.html","../../../src/components/hierarchy-bar/hierarchy-bar-collapsed/hierarchy-bar-collapsed.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar-collapsed/hierarchy-bar-collapsed.component.html","../../../src/components/hierarchy-bar/hierarchy-bar.component.ts","../../../src/components/hierarchy-bar/hierarchy-bar.component.html","../../../src/directives/click-outside/click-outside.module.ts","../../../src/components/popover/popover.module.ts","../../../src/components/hierarchy-bar/hierarchy-bar.module.ts","../../../src/components/input-dropdown/input-dropdown.component.ts","../../../src/components/input-dropdown/input-dropdown.component.html","../../../src/components/input-dropdown/input-dropdown.module.ts","../../../src/components/side-panel/side-panel-animations.ts","../../../src/components/side-panel/side-panel.service.ts","../../../src/components/side-panel/side-panel.component.ts","../../../src/components/side-panel/side-panel.component.html","../../../src/components/item-display-panel/item-display-panel.component.ts","../../../src/components/item-display-panel/item-display-panel.component.html","../../../src/components/item-display-panel/item-display-panel.module.ts","../../../src/components/marquee-wizard/marquee-wizard-step-icon.directive.ts","../../../src/components/wizard/wizard.service.ts","../../../src/components/wizard/wizard-step.component.ts","../../../src/components/wizard/wizard-step.component.html","../../../src/components/wizard/wizard.component.ts","../../../src/components/wizard/wizard.component.html","../../../src/components/wizard/wizard.module.ts","../../../src/components/marquee-wizard/marquee-wizard-step.component.ts","../../../src/components/marquee-wizard/marquee-wizard-step.component.html","../../../src/components/marquee-wizard/marquee-wizard.component.ts","../../../src/components/marquee-wizard/marquee-wizard.component.html","../../../src/components/marquee-wizard/marquee-wizard.module.ts","../../../src/services/frame-extraction/frame-extraction.service.ts","../../../src/components/media-player/media-player.service.ts","../../../src/components/media-player/extensions/base-extension.directive.ts","../../../src/components/slider/slider.component.ts","../../../src/components/slider/slider.component.html","../../../src/components/slider/slider.module.ts","../../../src/components/media-player/extensions/controls/controls.component.ts","../../../src/components/media-player/extensions/controls/controls.component.html","../../../src/components/media-player/extensions/controls/custom-control/custom-control.directive.ts","../../../src/pipes/duration/duration.pipe.ts","../../../src/components/media-player/extensions/timeline/timeline.component.ts","../../../src/components/media-player/extensions/timeline/timeline.component.html","../../../src/services/audio/audio.service.ts","../../../src/services/audio/audio.module.ts","../../../src/pipes/file-size/file-size.pipe.ts","../../../src/components/media-player/media-player.component.ts","../../../src/components/media-player/media-player.component.html","../../../src/pipes/duration/duration.module.ts","../../../src/pipes/file-size/file-size.module.ts","../../../src/components/media-player/media-player.module.ts","../../../src/components/navigation/navigation-item/navigation-item.component.ts","../../../src/components/navigation/navigation-item/navigation-item.component.html","../../../src/components/navigation/navigation-options.ts","../../../src/components/navigation/navigation.service.ts","../../../src/components/navigation/navigation-link/navigation-link.directive.ts","../../../src/components/navigation/navigation.component.ts","../../../src/components/navigation/navigation.component.html","../../../src/components/navigation/navigation.module.ts","../../../src/components/nested-donut-chart/nested-donut-chart.component.ts","../../../src/components/nested-donut-chart/nested-donut-chart.component.html","../../../src/components/nested-donut-chart/nested-donut-chart.module.ts","../../../src/components/notification/notification.service.ts","../../../src/components/notification/notification-list.component.ts","../../../src/components/notification/notification-list.component.html","../../../src/components/notification/notification.module.ts","../../../src/components/organization-chart/organization-chart.component.ts","../../../src/components/organization-chart/organization-chart.component.html","../../../src/components/organization-chart/organization-chart.module.ts","../../../src/components/tabset/tab/tab-heading.directive.ts","../../../src/components/tabset/tabset.service.ts","../../../src/components/tabset/tabset.token.ts","../../../src/components/tabset/tab/tab.component.ts","../../../src/components/tabset/tab/tab.component.html","../../../src/components/tabset/tabset.component.ts","../../../src/components/tabset/tabset.component.html","../../../src/components/tabset/tabset.module.ts","../../../src/components/page-header/custom-menu/custom-menu.directive.ts","../../../src/components/page-header/icon-menu/icon-menu.component.ts","../../../src/components/page-header/icon-menu/icon-menu.component.html","../../../src/components/page-header/page-header.service.ts","../../../src/components/page-header/navigation/navigation-dropdown-item/navigation-dropdown-item.component.ts","../../../src/components/page-header/navigation/navigation-dropdown-item/navigation-dropdown-item.component.html","../../../src/components/page-header/navigation/navigation.service.ts","../../../src/components/page-header/navigation/navigation-item/navigation-item.component.ts","../../../src/components/page-header/navigation/navigation-item/navigation-item.component.html","../../../src/components/page-header/navigation/navigation-secondary-item/navigation-secondary-item.directive.ts","../../../src/components/page-header/navigation/navigation.component.ts","../../../src/components/page-header/navigation/navigation.component.html","../../../src/components/page-header/page-header.component.ts","../../../src/components/page-header/page-header.component.html","../../../src/components/page-header/page-header.module.ts","../../../src/components/pagination/pagination.component.ts","../../../src/components/pagination/pagination.component.html","../../../src/components/pagination/pagination.module.ts","../../../src/components/partition-map/events/partition-map-segment-events.directive.ts","../../../src/components/partition-map/partition-map.component.ts","../../../src/components/partition-map/partition-map.component.html","../../../src/components/partition-map/partition-map.module.ts","../../../src/components/progress-bar/progress-bar.component.ts","../../../src/components/progress-bar/progress-bar.component.html","../../../src/components/progress-bar/progress-bar.module.ts","../../../src/components/radiobutton/radio-button-group/radio-button-group.directive.ts","../../../src/components/radiobutton/radiobutton.component.ts","../../../src/components/radiobutton/radiobutton.component.html","../../../src/components/radiobutton/radiobutton.module.ts","../../../src/components/sankey-chart/sankey-chart.ts","../../../src/components/sankey-chart/sankey-focus-manager.ts","../../../src/components/sankey-chart/sankey-chart-node.directive.ts","../../../src/components/sankey-chart/sankey-chart.component.ts","../../../src/components/sankey-chart/sankey-chart.component.html","../../../src/components/sankey-chart/sankey-chart.module.ts","../../../src/components/search-builder/search-builder-focus.service.ts","../../../src/components/search-builder/search-builder.service.ts","../../../src/components/search-builder/search-builder-group/search-builder-group.service.ts","../../../src/components/search-builder/search-builder-outlet/search-builder-outlet.directive.ts","../../../src/components/search-builder/search-builder-group/search-builder-group.component.ts","../../../src/components/search-builder/search-builder-group/search-builder-group.component.html","../../../src/components/search-builder/search-builder.component.ts","../../../src/components/search-builder/search-builder.component.html","../../../src/components/tag-input/tag-input-event.ts","../../../src/components/tag-input/tag-input.component.ts","../../../src/components/tag-input/tag-input.component.html","../../../src/components/select/select.component.ts","../../../src/components/select/select.component.html","../../../src/components/tag-input/tag-input.module.ts","../../../src/components/select/select.module.ts","../../../src/components/search-builder/search-components/base-search.component.ts","../../../src/components/search-builder/search-components/date-range/date-range.component.ts","../../../src/components/search-builder/search-components/date-range/date-range.component.html","../../../src/components/search-builder/search-components/date/date.component.ts","../../../src/components/search-builder/search-components/date/date.component.html","../../../src/components/search-builder/search-components/select/select.component.ts","../../../src/components/search-builder/search-components/select/select.component.html","../../../src/components/search-builder/search-components/text/text.component.ts","../../../src/components/search-builder/search-components/text/text.component.html","../../../src/components/search-builder/search-builder.module.ts","../../../src/directives/selection/strategies/selection.strategy.ts","../../../src/directives/selection/strategies/row-selection.strategy.ts","../../../src/directives/selection/strategies/row-alt-selection.strategy.ts","../../../src/directives/selection/strategies/simple-selection.strategy.ts","../../../src/directives/selection/selection.service.ts","../../../src/components/select-list/select-list-item/select-list-item.component.ts","../../../src/components/select-list/select-list-item/select-list-item.component.html","../../../src/directives/selection/selection-item.directive.ts","../../../src/directives/selection/selection.directive.ts","../../../src/directives/selection/selection.module.ts","../../../src/components/select-list/strategies/multiple-select-list.strategy.ts","../../../src/components/select-list/strategies/single-select-list.strategy.ts","../../../src/components/select-list/select-list.component.ts","../../../src/components/select-list/select-list.component.html","../../../src/components/select-list/select-list.module.ts","../../../src/components/side-panel/side-panel-close.directive.ts","../../../src/components/side-panel/side-panel.module.ts","../../../src/components/spark/spark.component.ts","../../../src/components/spark/spark.component.html","../../../src/components/spark/spark.module.ts","../../../src/components/table/column-picker/interfaces/column-picker-group-item.interface.ts","../../../src/components/table/column-picker/column-picker.service.ts","../../../src/components/table/column-picker/column-picker.component.ts","../../../src/components/table/column-picker/column-picker.component.html","../../../src/components/table/table-column-resize/resizable-table-base.service.ts","../../../src/components/table/table-column-resize/resizable-table-service.token.ts","../../../src/components/table/table-column-resize/table-column-resize-standard/resizable-table.service.ts","../../../src/components/table/table-column-resize/resizable-table-cell.component.ts","../../../src/components/table/table-column-resize/resizable-table-cell.component.html","../../../src/components/table/table-column-resize/resizable-table-column.component.ts","../../../src/components/table/table-column-resize/resizable-table-column.component.html","../../../src/components/table/table-column-resize/resizable-table-base.directive.ts","../../../src/components/table/table-column-resize/table-column-resize-expanding/resizable-expanding-table.service.ts","../../../src/components/table/table-column-resize/table-column-resize-expanding/resizable-expanding-table.directive.ts","../../../src/components/table/table-column-resize/table-column-resize-standard/resizable-table.directive.ts","../../../src/components/table/table.module.ts","../../../src/components/timeline/timeline-event/timeline-event.component.ts","../../../src/components/timeline/timeline-event/timeline-event.component.html","../../../src/components/timeline/timeline.component.ts","../../../src/components/timeline/timeline.component.html","../../../src/components/timeline/timeline.module.ts","../../../src/components/toggleswitch/toggleswitch.component.ts","../../../src/components/toggleswitch/toggleswitch.component.html","../../../src/components/toggleswitch/toggleswitch.module.ts","../../../src/components/toolbar-search/toolbar-search-button.directive.ts","../../../src/components/toolbar-search/toolbar-search-field.directive.ts","../../../src/components/toolbar-search/toolbar-search.component.ts","../../../src/components/toolbar-search/toolbar-search.module.ts","../../../src/components/virtual-scroll/virtual-for/virtual-for.service.ts","../../../src/components/virtual-scroll/virtual-for/virtual-for.directive.ts","../../../src/components/virtual-scroll/virtual-for/virtual-for.component.ts","../../../src/components/virtual-scroll/virtual-for/virtual-for.component.html","../../../src/components/virtual-scroll/virtual-scroll/directives/virtual-scroll-cell.directive.ts","../../../src/components/virtual-scroll/virtual-scroll/directives/virtual-scroll-load-button.directive.ts","../../../src/components/virtual-scroll/virtual-scroll/directives/virtual-scroll-loading.directive.ts","../../../src/components/virtual-scroll/virtual-scroll/virtual-scroll.component.ts","../../../src/components/virtual-scroll/virtual-scroll/virtual-scroll.component.html","../../../src/components/virtual-scroll/virtual-scroll.module.ts","../../../src/directives/auto-grow/auto-grow.directive.ts","../../../src/directives/auto-grow/auto-grow.module.ts","../../../src/directives/badge/badge.directive.ts","../../../src/directives/badge/badge.module.ts","../../../src/directives/fixed-header-table/fixed-header-table.directive.ts","../../../src/directives/fixed-header-table/fixed-header-table.module.ts","../../../src/directives/float-label/float-label.directive.ts","../../../src/directives/float-label/float-label.module.ts","../../../src/directives/help-center/help-center.service.ts","../../../src/directives/help-center/help-center-item.directive.ts","../../../src/directives/help-center/help-center.module.ts","../../../src/directives/hover-action/hover-action.service.ts","../../../src/directives/hover-action/hover-action-container.directive.ts","../../../src/directives/hover-action/hover-action.directive.ts","../../../src/directives/hover-action/hover-action.module.ts","../../../src/directives/layout-switcher/layout-switcher-item.directive.ts","../../../src/directives/layout-switcher/layout-switcher.directive.ts","../../../src/directives/layout-switcher/layout-switcher.module.ts","../../../src/directives/menu-navigation/menu-navigation.service.ts","../../../src/directives/menu-navigation/menu-navigation-item.directive.ts","../../../src/directives/menu-navigation/menu-navigation-toggle.directive.ts","../../../src/directives/menu-navigation/menu-navigation.directive.ts","../../../src/directives/menu-navigation/menu-navigation.module.ts","../../../src/directives/observers/overflow/overflow-observer.directive.ts","../../../src/directives/observers/observers.module.ts","../../../src/directives/tree-grid/tree-grid-state.class.ts","../../../src/directives/tree-grid/tree-grid.service.ts","../../../src/directives/tree-grid/tree-grid-row.directive.ts","../../../src/directives/tree-grid/tree-grid-indent.directive.ts","../../../src/directives/tree-grid/tree-grid.directive.ts","../../../src/directives/tree-grid/tree-grid.module.ts","../../../src/pipes/string-filter/string-filter.pipe.ts","../../../src/pipes/string-filter/string-filter.module.ts","../../../src/plugins/chartjs/timeline/timeline-chart.module.ts","../../../src/services/persistent-data/adapters/cookie-adapter.ts","../../../src/services/persistent-data/adapters/local-storage-adapter.ts","../../../src/services/persistent-data/adapters/session-storage-adapter.ts","../../../src/services/persistent-data/persistent-data.service.ts","../../../src/services/persistent-data/persistent-data.module.ts","../../../src/services/persistent-data/adapters/storage-adapter.ts","../../../src/index.ts","../../../src/ux-aspects-ux-aspects.ts"],"sourcesContent":["export enum Color {\n    Primary = 'primary',\n    Accent = 'accent',\n    Secondary = 'secondary',\n    Alternate1 = 'alternate1',\n    Alternate2 = 'alternate2',\n    Alternate3 = 'alternate3',\n    Vibrant1 = 'vibrant1',\n    Vibrant2 = 'vibrant2',\n    Grey1 = 'grey1',\n    Grey2 = 'grey2',\n    Grey3 = 'grey3',\n    Grey4 = 'grey4',\n    Grey5 = 'grey5',\n    Grey6 = 'grey6',\n    Grey7 = 'grey7',\n    Grey8 = 'grey8',\n    Chart1 = 'chart1',\n    Chart2 = 'chart2',\n    Chart3 = 'chart3',\n    Chart4 = 'chart4',\n    Chart5 = 'chart5',\n    Chart6 = 'chart6',\n    Ok = 'ok',\n    Warning = 'warning',\n    Critical = 'critical',\n    Partition1 = 'partition1',\n    Partition9 = 'partition9',\n    Partition10 = 'partition10',\n    Partition11 = 'partition11',\n    Partition12 = 'partition12',\n    Partition13 = 'partition13',\n    Partition14 = 'partition14',\n    SocialChartNode = 'social-chart-node',\n    SocialChartEdge = 'social-chart-edge',\n}","/**\n * Determine the type of icon based upon the identifier.\n *\n * We support the following iconset:\n *\n * - `ux-icon` - UX Icon Set\n * - `component` - Component icon not tied to a specific set\n *\n * @param identifier - The name of the icon\n */\nexport function getIconType(identifier: string | null): IconType {\n    if (identifier && identifier.trim().indexOf('ux-') === 0) {\n        return IconType.UxIcon;\n    }\n\n    return IconType.Component;\n}\n\nexport enum IconType {\n    UxIcon = 'ux-icon',\n    Component = 'component'\n}\n","import { Observable } from 'rxjs';\n\n/**\n * This is a simple RxJS operator to allow us to avoid the\n * \"expression has changed after it was checked issue\"\n * by making the subscription asynchronous. We could just use a\n * delay operator but this uses a timeout which is significantly\n * slower than using requestAnimationFrame.\n */\nexport const tick = <T>() => (source: Observable<T>) => new Observable<T>((subscriber) => {\n    source.subscribe({\n        next(value: T) { requestAnimationFrame(() => subscriber.next(value)); },\n        error(err: unknown) { subscriber.error(err); },\n        complete() { subscriber.complete(); },\n    });\n});","/**\n * A button will trigger a click event whenever the a mouse click occurs or the enter key is pressed.\n * These functions can be used to identify if a `click` event was caused by the keyboard or\n * by a mouse.\n *\n * The `event.detail` property will change based on the source of the event.\n * A mouse click will have varying values based on the browser, however\n * the enter key will always have a value of `0` so we can check against that\n */\n\nexport function isKeyboardTrigger(event: MouseEvent | KeyboardEvent): boolean {\n    return event.detail === 0;\n}\n\nexport function isMouseTrigger(event: MouseEvent | KeyboardEvent): boolean {\n    return !isKeyboardTrigger(event);\n}","import { Directive } from '@angular/core';\n\n@Directive({\n  selector: 'ux-accordion-panel-header'\n})\nexport class AccordionPanelHeadingDirective {\n\n}","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class AccordionService {\n\n    collapseOthers: boolean = false;\n    collapse = new Subject<void>();\n\n    collapseAll(): void {\n        this.collapse.next();\n    }\n}","import { InjectionToken } from '@angular/core';\nimport { AccessibilityOptions } from './accessibility-options.interface';\n\nexport const ACCESSIBILITY_OPTIONS_TOKEN = new InjectionToken<AccessibilityOptions>('ACCESSIBILITY_OPTIONS');","import { inject, Injectable } from '@angular/core';\nimport { AccessibilityOptions } from './accessibility-options.interface';\nimport { ACCESSIBILITY_OPTIONS_TOKEN } from './accessibility-options.token';\n\n@Injectable()\nexport class AccessibilityOptionsService {\n    /** Get the user specified options - but handle cases where they may not be specified */\n    readonly _options = inject(ACCESSIBILITY_OPTIONS_TOKEN, { optional: true });\n\n    /** Determine the default options */\n    private readonly _defaultOptions: AccessibilityOptions = {\n        mouseFocusIndicator: false,\n        touchFocusIndicator: false,\n        keyboardFocusIndicator: true,\n        programmaticFocusIndicator: false\n    };\n\n    /** Get the complete options populating unspecified options with the default values */\n    get options(): AccessibilityOptions {\n        return { ...this._defaultOptions, ...this._options };\n    }\n}\n","import { AccessibilityOptions } from '../../options/accessibility-options.interface';\n\nexport class LocalFocusIndicatorOptions implements AccessibilityOptions {\n    mouseFocusIndicator: boolean;\n    touchFocusIndicator: boolean;\n    keyboardFocusIndicator: boolean;\n    programmaticFocusIndicator: boolean;\n}","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { Renderer2 } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FocusIndicatorOptions } from './focus-indicator-options.interface';\nimport { FocusIndicatorOriginService } from './focus-indicator-origin/focus-indicator-origin.service';\n\nexport class FocusIndicator {\n  /** Apply a class when the item is focused */\n  set isFocused(isFocused: boolean) {\n    // update the class on the element\n    isFocused\n      ? this._renderer.addClass(this._element, 'ux-focus-indicator-active')\n      : this._renderer.removeClass(this._element, 'ux-focus-indicator-active');\n\n    // emit the focus state\n    this.isFocused$.next(isFocused);\n  }\n\n  /** Provide a convenience getter to allow access to focus state without a subscription */\n  get isFocused(): boolean {\n    return this.isFocused$.value;\n  }\n\n  /** An observable to monitor the focus state */\n  readonly isFocused$ = new BehaviorSubject<boolean>(false);\n\n  /** An observable to monitor the focus origin */\n  readonly origin$ = new Subject<FocusOrigin>();\n\n  /** Remove all subscriptions on destroy */\n  private readonly _onDestroy = new Subject<void>();\n\n  constructor(\n    private readonly _element: HTMLElement,\n    private readonly _focusMonitor: FocusMonitor,\n    private readonly _renderer: Renderer2,\n    private _options: FocusIndicatorOptions,\n    private readonly _focusIndicatorOrigin: FocusIndicatorOriginService\n  ) {\n    // check if the element is already being monitored\n    if (!_element.classList.contains('ux-focus-indicator')) {\n      this.initialise();\n    }\n  }\n\n  /** Setup the focus monitoring */\n  private initialise(): void {\n    // add a class to the element to specify we are controlling the focus\n    this._renderer.addClass(this._element, 'ux-focus-indicator');\n\n    // watch for any changes to the focus state\n    this._focusMonitor\n      .monitor(this._element, this._options.checkChildren)\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(this.onFocusChange.bind(this));\n  }\n\n  /** Focus the element with a specific origin */\n  focus(origin?: FocusOrigin, options?: { preventScroll?: boolean }): void {\n    this._focusIndicatorOrigin.setOrigin(origin);\n    this._element.focus(options);\n  }\n\n  /** Tear down the subscriptions */\n  destroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n    this.isFocused$.complete();\n    this._focusMonitor.stopMonitoring(this._element);\n  }\n\n  /** Allow the options to be updates */\n  setOptions(options: FocusIndicatorOptions): void {\n    this._options = { ...this._options, ...options };\n  }\n\n  /** Monitor changes to an elements focus state */\n  private onFocusChange(origin: FocusOrigin): void {\n    // if the origin is null then we blurred\n    if (origin === null) {\n      this.isFocused = false;\n      this.origin$.next(null);\n      return;\n    }\n\n    // get the origin if there is one\n    const syntheticOrigin = this._focusIndicatorOrigin.getOrigin();\n\n    // emit the origin\n    this.origin$.next(syntheticOrigin || origin);\n\n    switch (syntheticOrigin || origin) {\n      case 'mouse':\n        this.isFocused = this._options.mouseFocusIndicator;\n        break;\n\n      case 'touch':\n        this.isFocused = this._options.touchFocusIndicator;\n        break;\n\n      case 'keyboard':\n        this.isFocused = this._options.keyboardFocusIndicator;\n        break;\n\n      case 'program':\n        this.isFocused = this._options.programmaticFocusIndicator;\n        break;\n\n      default:\n        this.isFocused = false;\n    }\n  }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FocusIndicatorOriginService {\n\n    /** Store the most recent origin event */\n    private _origin: FocusOrigin;\n\n    /** Store the event source origin */\n    setOrigin(origin: FocusOrigin): void {\n        this._origin = origin;\n    }\n\n    /** Get the most recent event origin */\n    getOrigin(): FocusOrigin | null {\n\n        // get the most recent origin if there is one\n        const origin = this._origin;\n\n        // we should clear the origin so this value doesn't cause issues with future focus events\n        this._origin = null;\n\n        return origin;\n    }\n\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { AccessibilityOptionsService } from '../options/accessibility-options.service';\nimport { ACCESSIBILITY_OPTIONS_TOKEN } from '../options/accessibility-options.token';\nimport { FocusIndicator } from './focus-indicator';\nimport { FocusIndicatorOptions } from './focus-indicator-options.interface';\nimport { FocusIndicatorOriginService } from './focus-indicator-origin/focus-indicator-origin.service';\n\n@Injectable()\nexport class FocusIndicatorService {\n    private readonly _localOptions = inject(ACCESSIBILITY_OPTIONS_TOKEN, { optional: true });\n\n    readonly rendererFactory = inject(RendererFactory2);\n\n    private readonly _focusMonitor = inject(FocusMonitor);\n\n    private readonly _globalOptions = inject(AccessibilityOptionsService);\n\n    private readonly _focusIndicatorOrigin = inject(FocusIndicatorOriginService);\n\n    /** We need the renderer to add and remove classes */\n    private readonly _renderer: Renderer2;\n\n    constructor() {\n        // programmatically create a renderer as it can't be injected into a service\n        this._renderer = this.rendererFactory.createRenderer(null, null);\n    }\n\n    /** This is essentially just a factory method to prevent the user having to pass in focus monitor, renderer and global options each time */\n    monitor(element: HTMLElement, options: FocusIndicatorOptions = { ...this._globalOptions.options, ...this._localOptions, checkChildren: false }): FocusIndicator {\n        return new FocusIndicator(element, this._focusMonitor, this._renderer, { ...this._globalOptions.options, ...this._localOptions, ...options }, this._focusIndicatorOrigin);\n    }\n\n}","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, EventEmitter, inject, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AccessibilityOptionsService } from '../options/accessibility-options.service';\nimport { FocusIndicator } from './focus-indicator';\nimport { LocalFocusIndicatorOptions } from './focus-indicator-options/focus-indicator-options';\nimport { FocusIndicatorService } from './focus-indicator.service';\n\n@Directive({\n    selector: '[uxFocusIndicator]',\n    exportAs: 'ux-focus-indicator',\n})\nexport class FocusIndicatorDirective implements OnInit, OnDestroy {\n    readonly optionsService = inject(AccessibilityOptionsService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _focusIndicatorService = inject(FocusIndicatorService);\n\n    private readonly _ngZone = inject(NgZone);\n\n    readonly localOptions = inject(LocalFocusIndicatorOptions, { optional: true });\n\n    /** Specify whether or not we should mark this element as having focus if a child is focused */\n    @Input() set checkChildren(checkChildren: boolean | string) {\n\n        // allow a string to be used so we can skip checking a binding for performance benefits\n        checkChildren = coerceBooleanProperty(checkChildren);\n\n        if (checkChildren !== null && checkChildren !== undefined) {\n            this._checkChildren = checkChildren;\n            this.setOptions();\n        }\n    }\n\n    /** Indicate whether or not mouse events should cause the focus indicator to appear - will override any global setting */\n    @Input() set mouseFocusIndicator(mouseFocusIndicator: boolean | string) {\n\n        // allow a string to be used so we can skip checking a binding for performance benefits\n        mouseFocusIndicator = coerceBooleanProperty(mouseFocusIndicator);\n\n        if (mouseFocusIndicator !== null && mouseFocusIndicator !== undefined) {\n            this._options.set('mouseFocusIndicator', mouseFocusIndicator);\n            this.setOptions();\n        }\n    }\n\n    /** Indicate whether or not touch events should cause the focus indicator to appear - will override any global setting */\n    @Input() set touchFocusIndicator(touchFocusIndicator: boolean | string) {\n\n        // allow a string to be used so we can skip checking a binding for performance benefits\n        touchFocusIndicator = coerceBooleanProperty(touchFocusIndicator);\n\n        if (touchFocusIndicator !== null && touchFocusIndicator !== undefined) {\n            this._options.set('touchFocusIndicator', touchFocusIndicator);\n            this.setOptions();\n        }\n    }\n\n    /** Indicate whether or not keyboard events should cause the focus indicator to appear - will override any global setting */\n    @Input() set keyboardFocusIndicator(keyboardFocusIndicator: boolean | string) {\n\n        // allow a string to be used so we can skip checking a binding for performance benefits\n        keyboardFocusIndicator = coerceBooleanProperty(keyboardFocusIndicator);\n\n        if (keyboardFocusIndicator !== null && keyboardFocusIndicator !== undefined) {\n            this._options.set('keyboardFocusIndicator', keyboardFocusIndicator);\n            this.setOptions();\n        }\n    }\n\n    /** Indicate whether or not programmatic events should cause the focus indicator to appear - will override any global setting */\n    @Input() set programmaticFocusIndicator(programmaticFocusIndicator: boolean | string) {\n\n        // allow a string to be used so we can skip checking a binding for performance benefits\n        programmaticFocusIndicator = coerceBooleanProperty(programmaticFocusIndicator);\n\n        if (programmaticFocusIndicator !== null && programmaticFocusIndicator !== undefined) {\n            this._options.set('programmaticFocusIndicator', programmaticFocusIndicator);\n            this.setOptions();\n        }\n    }\n\n    /** Emit the latest focus state */\n    @Output() indicator = new EventEmitter<boolean>();\n\n    /** Store a private reference for the checkChildren option */\n    private _checkChildren: boolean = false;\n\n    /** Store all configuation options*/\n    private readonly _options = new Map<string, boolean>();\n\n    /** Store a reference to the focus handler */\n    private _focusIndicator: FocusIndicator;\n\n    /** Unsubscribe on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // set the inital option values based on global options\n        for (const option in (this.optionsService.options || {})) {\n            this._options.set(option, this.optionsService.options[option]);\n        }\n\n        // set the inital option values based on local options (if there are any)\n        for (const option in (this.localOptions || {})) {\n            this._options.set(option, this.localOptions[option]);\n        }\n    }\n\n    /** Setup the focus monitoring */\n    ngOnInit(): void {\n\n        // start the focus monitoring\n        this._focusIndicator = this._focusIndicatorService.monitor(this._elementRef.nativeElement, {\n            checkChildren: this._checkChildren,\n            mouseFocusIndicator: this._options.get('mouseFocusIndicator'),\n            touchFocusIndicator: this._options.get('touchFocusIndicator'),\n            keyboardFocusIndicator: this._options.get('keyboardFocusIndicator'),\n            programmaticFocusIndicator: this._options.get('programmaticFocusIndicator')\n        });\n\n        // subscribe to the focus state to emit an event on change\n        this._focusIndicator.isFocused$.pipe(takeUntil(this._onDestroy)).subscribe(isFocused => {\n            // emit the latest value\n            this._ngZone.run(() => this.indicator.emit(isFocused));\n        });\n    }\n\n    /** Tear down the directive */\n    ngOnDestroy(): void {\n        if (this._focusIndicator) {\n            this._focusIndicator.destroy();\n        }\n\n        // unsubscribe from all observables\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Focus this element with a specific origin */\n    focus(origin?: FocusOrigin, options?: { preventScroll: boolean }): void {\n        this._focusIndicator.focus(origin, options);\n    }\n\n    /** Update the focus indicator with the latest options */\n    private setOptions(): void {\n        if (this._focusIndicator) {\n            this._focusIndicator.setOptions({\n                checkChildren: this._checkChildren,\n                mouseFocusIndicator: this._options.get('mouseFocusIndicator'),\n                touchFocusIndicator: this._options.get('touchFocusIndicator'),\n                keyboardFocusIndicator: this._options.get('keyboardFocusIndicator'),\n                programmaticFocusIndicator: this._options.get('programmaticFocusIndicator')\n            });\n        }\n    }\n}","import { Component, EventEmitter, HostBinding, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AccordionService } from '../accordion.service';\n\nlet uniqueId: number = 1;\n\n@Component({\n    selector: 'ux-accordion-panel',\n    templateUrl: './accordion-panel.component.html',\n    host: {\n        'class': 'panel panel-default'\n    }\n})\nexport class AccordionPanelComponent implements OnInit, OnDestroy {\n\n    readonly accordion = inject(AccordionService);\n\n    @Input() panelId: string = `ux-accordion-panel-${uniqueId++}`;\n    @Input() headingId: string = `${this.panelId}-heading`;\n\n    @Input() disabled: boolean = false;\n    @Input() heading: string;\n    @Input() @HostBinding('class.panel-open') expanded: boolean = false;\n\n    @Output() expandedChange = new EventEmitter<boolean>();\n\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        this.accordion.collapse.pipe(takeUntil(this._onDestroy)).subscribe(() => this.collapse());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    toggle(): void {\n\n        if (this.expanded) {\n            this.collapse();\n            return;\n        }\n\n        // check if we should collapse others\n        if (this.accordion.collapseOthers) {\n            this.accordion.collapseAll();\n        }\n\n        // store the new expanded state\n        this.expand();\n    }\n\n    expand(): void {\n        if (this.disabled === false && this.expanded === false) {\n            this.expanded = true;\n            this.expandedChange.next(true);\n        }\n    }\n\n    collapse(): void {\n        if (this.disabled === false && this.expanded === true) {\n            this.expanded = false;\n            this.expandedChange.next(false);\n        }\n    }\n\n}\n","<div class=\"panel-heading\"\n      role=\"button\"\n      uxFocusIndicator\n      [tabindex]=\"disabled ? -1 : 0\"\n      [id]=\"headingId\"\n      [attr.aria-expanded]=\"expanded\"\n      [attr.aria-controls]=\"panelId\"\n      [attr.aria-disabled]=\"disabled\"\n      (click)=\"toggle()\"\n      (keydown.enter)=\"toggle()\"\n      (keydown.space)=\"toggle(); $event.preventDefault()\"\n      (keydown.spacebar)=\"toggle(); $event.preventDefault()\">\n\n  <div class=\"panel-title\">\n      {{ heading }}\n      <ng-content select=\"ux-accordion-panel-header\"></ng-content>\n  </div>\n</div>\n\n<div [id]=\"panelId\"\n      class=\"panel-collapse collapse\"\n      [class.in]=\"expanded\"\n      role=\"tabpanel\"\n      [attr.aria-labelledby]=\"headingId\">\n\n  <div class=\"panel-body\">\n    <ng-content></ng-content>\n  </div>\n</div>","import { Component, inject, Input } from '@angular/core';\nimport { AccordionService } from './accordion.service';\n\n@Component({\n    selector: 'ux-accordion',\n    templateUrl: './accordion.component.html',\n    providers: [ AccordionService ],\n    host: {\n        'class': 'panel-group',\n        'aria-multiselectable': 'true'\n    }\n})\nexport class AccordionComponent {\n\n    private readonly _accordion = inject(AccordionService);\n\n    @Input() set collapseOthers(collapseOthers: boolean) {\n        this._accordion.collapseOthers = collapseOthers;\n    }\n\n}","<ng-content></ng-content>","export const KEPPEL_COLOR_SET = {\n    'primary': '#00a7a2',\n    'accent': '#7b63a3',\n    'secondary': '#fff',\n    'alternate1': '#3baa43',\n    'alternate2': '#025662',\n    'alternate3': '#b08f5c',\n    'vibrant1': '#00cceb',\n    'vibrant2': '#ff9048',\n    'grey1': '#2a2a2a',\n    'grey2': '#333',\n    'grey3': '#666',\n    'grey4': '#999',\n    'grey5': '#ccc',\n    'grey6': '#eee',\n    'grey7': '#f5f5f5',\n    'grey8': '#fafafa',\n    'chart1': '#00a7a2',\n    'chart2': '#7b63a3',\n    'chart3': '#3baa43',\n    'chart4': '#025662',\n    'chart5': '#b08f5c',\n    'chart6': '#ccc',\n    'ok': '#3baa43',\n    'warning': '#ff9048',\n    'critical': '#ff454f',\n    'partition1': '#635387',\n    'partition9': '#4a4066',\n    'partition10': '#308935',\n    'partition11': '#023e42',\n    'partition12': '#91744d',\n    'partition13': '#999',\n    'partition14': '#294266',\n    'social-chart-node': '#00cceb',\n    'social-chart-edge': '#00cceb'\n};","export const MICRO_FOCUS_COLOR_SET = {\n    'brand-blue': '#0073e7',\n    'cerulean': '#1668c1',\n    'aqua': '#29ceff',\n    'aquamarine': '#2fd6c3',\n    'fuchsia': '#c6179d',\n    'indigo': '#7425ad',\n    'dark-blue': '#231ca5',\n    'white': '#ffffff',\n    'slightly-gray': '#f5f7f8',\n    'bright-gray': '#f1f2f3',\n    'gray': '#dcdedf',\n    'silver': '#bdbec0',\n    'dim-gray': '#656668',\n    'dark-gray': '#323435',\n    'black': '#000000',\n    'crimson-negative': '#e5004c',\n    'apricot': '#f48b34',\n    'yellow': '#fcdb1f',\n    'green-positive': '#1aac60',\n    'ultramarine': '#3939c6',\n    'skyblue': '#00abf3',\n    'pale-aqua': '#43e4ff',\n    'pale-green': '#1ffbba',\n    'lime': '#75da4d',\n    'orange': '#ffce00',\n    'magenta': '#eb23c2',\n    'pale-purple': '#ba47e2',\n    'dark-ultramarine': '#271782',\n    'steelblue': '#014272',\n    'arctic-blue': '#0b8eac',\n    'emerald': '#00a989',\n    'olive': '#5bba36',\n    'goldenrod': '#ffb000',\n    'purple': '#9b1e83',\n    'pale-eggplant': '#5216ac',\n    'red': '#ff454f',\n    'pale-amber': '#ffb24d',\n    'pale-lemon': '#fde159',\n    'pale-emerald': '#33c180',\n    'plum': '#b21646',\n    'copper': '#e57828',\n    'amber': '#ffc002',\n    'leaf-green': '#118c4f',\n    'forest-green': '#00645a',\n    'primary': '#0073e7',\n    'accent': '#7425ad',\n    'secondary': '#ffffff',\n    'alternate1': '#29ceff',\n    'alternate2': '#2fd6c3',\n    'alternate3': '#c6179d',\n    'vibrant1': '#43e4ff',\n    'vibrant2': '#ffce00',\n    'grey1': '#000000',\n    'grey2': '#323435',\n    'grey3': '#656668',\n    'grey4': '#bdbec0',\n    'grey5': '#dcdedf',\n    'grey6': '#f1f2f3',\n    'grey7': '#f5f7f8',\n    'grey8': '#ffffff',\n    'chart1': '#3939c6',\n    'chart2': '#00abf3',\n    'chart3': '#75da4d',\n    'chart4': '#ffce00',\n    'chart5': '#eb23c2',\n    'chart6': '#ba47e2',\n    'info': '#00abf3',\n    'ok': '#1aac60',\n    'warning': '#fcdb1f',\n    'danger': '#f48b34',\n    'critical': '#e5004c',\n    'partition1': '#7425ad',\n    'partition9': '#5216ac',\n    'partition10': '#5bba36',\n    'partition11': '#014272',\n    'partition12': '#ffb000',\n    'partition13': '#bdbec0',\n    'partition14': '#271782',\n    'social-chart-node': '#ff00ff',\n    'social-chart-edge': '#ff00ff'\n};","import { InjectionToken } from '@angular/core';\nimport { KEPPEL_COLOR_SET } from './keppel-color-set';\nimport { MICRO_FOCUS_COLOR_SET } from './micro-focus-color-set';\n\nexport const colorSets = {\n    keppel: {\n        colorValueSet: KEPPEL_COLOR_SET,\n    },\n    microFocus: {\n        colorValueSet: MICRO_FOCUS_COLOR_SET\n    }\n};\n\nexport type ColorSet = {\n    colorValueSet: { [key: string]: string }\n};\n\n/** Provide a default color set for an application */\nexport const COLOR_SET_TOKEN = new InjectionToken<ColorSet>('COLOR_SET_TOKEN');","export class ThemeColor {\n\n    constructor(private _r: string, private _g: string, private _b: string, private _a: string = '1') { }\n\n    /**\n     * Create a ThemeColor object from a CSS color string\n     * @param value The CSS color string to derive a ThemeColor object from\n     */\n    static parse(value: string): ThemeColor {\n        let r, g, b, a = '1';\n\n        const rgbaPattern = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/;\n        const shortHexPattern = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n        const longHexPattern = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\n        const rgbaMatch = value.match(rgbaPattern);\n        const shortHexMatch = value.match(shortHexPattern);\n        const longHexMatch = value.match(longHexPattern);\n\n        if (rgbaMatch) {\n            r = rgbaMatch[1];\n            g = rgbaMatch[2];\n            b = rgbaMatch[3];\n            a = rgbaMatch[4] ? rgbaMatch[4] : '1';\n        } else if (longHexMatch) {\n            r = parseInt(longHexMatch[1], 16).toString();\n            g = parseInt(longHexMatch[2], 16).toString();\n            b = parseInt(longHexMatch[3], 16).toString();\n        } else if (shortHexMatch) {\n            r = parseInt(shortHexMatch[1] + shortHexMatch[1], 16).toString();\n            g = parseInt(shortHexMatch[2] + shortHexMatch[2], 16).toString();\n            b = parseInt(shortHexMatch[3] + shortHexMatch[3], 16).toString();\n        } else {\n            throw new Error(`Cannot parse color - ${value} is not a valid color.`);\n        }\n        return new ThemeColor(r, g, b, a);\n    }\n\n    /**\n     * Clone a theme color so it can be modified without affecting other places using the color\n     * @param themeColor The original theme color to clone\n     */\n    static from(themeColor: ThemeColor): ThemeColor {\n        return new ThemeColor(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), themeColor.getAlpha());\n    }\n\n    /**\n     * Determine if an object is an instance of a theme color.\n     * Using a simple instanceof check will not always work in plunker\n     * where the ThemeColor is from @ux-aspects/ux-aspects and the color\n     * comes from @micro-focus/ux-aspects\n     */\n    static isInstanceOf(themeColor: unknown): themeColor is ThemeColor {\n        return (\n          typeof themeColor === 'object' &&\n          // eslint-disable-next-line no-prototype-builtins\n          themeColor.hasOwnProperty('_r') &&\n          // eslint-disable-next-line no-prototype-builtins\n          themeColor.hasOwnProperty('_g') &&\n          // eslint-disable-next-line no-prototype-builtins\n          themeColor.hasOwnProperty('_b') &&\n          // eslint-disable-next-line no-prototype-builtins\n          themeColor.hasOwnProperty('_a')\n        );\n      }\n\n    /**\n     * Convert the theme color to a CSS hex color code\n     */\n    toHex(): string {\n        let red = parseInt(this._r).toString(16);\n        let green = parseInt(this._g).toString(16);\n        let blue = parseInt(this._b).toString(16);\n\n        if (red.length < 2) {\n            red = '0' + red;\n        }\n        if (green.length < 2) {\n            green = '0' + green;\n        }\n        if (blue.length < 2) {\n            blue = '0' + blue;\n        }\n\n        return '#' + red + green + blue;\n    }\n\n    /**\n     * Convert the theme color to a CSS rgb color code\n     */\n    toRgb(): string {\n        return 'rgb(' + this._r + ', ' + this._g + ', ' + this._b + ')';\n    }\n\n    /**\n     * Convert the theme color to a CSS rgbs color code\n     */\n    toRgba(): string {\n        return 'rgba(' + this._r + ', ' + this._g + ', ' + this._b + ', ' + this._a + ')';\n    }\n\n    /**\n     * Get the red value from the RGBA color value\n     */\n    getRed(): string {\n        return this._r;\n    }\n\n    /**\n     * Get the green value from the RGBA color value\n     */\n    getGreen(): string {\n        return this._g;\n    }\n\n\n    /**\n     * Get the blue value from the RGBA color value\n     */\n    getBlue(): string {\n        return this._b;\n    }\n\n\n    /**\n     * Get the alpha value from the RGBA color value\n     */\n    getAlpha(): string {\n        return this._a;\n    }\n\n    /**\n     * Set the red value from the RGBA color value\n     */\n    setRed(red: string): this {\n        this._r = red;\n        return this;\n    }\n\n    /**\n     * Set the green value from the RGBA color value\n     */\n    setGreen(green: string): this {\n        this._g = green;\n        return this;\n    }\n\n    /**\n     * Set the blue value from the RGBA color value\n     */\n    setBlue(blue: string): this {\n        this._b = blue;\n        return this;\n    }\n\n    /**\n     * Set the alpha value from the RGBA color value\n     */\n    setAlpha(alpha: string | number): this {\n        this._a = alpha.toString();\n        return this;\n    }\n}","import { inject, Injectable } from '@angular/core';\nimport { ColorSet, colorSets, COLOR_SET_TOKEN } from './color-sets/index';\nimport { ThemeColor } from './theme-color';\n\n@Injectable()\nexport class ColorService {\n    private _colorSet = inject(COLOR_SET_TOKEN, { optional: true });\n\n    /** Set the default theme to the Keppel colorset */\n    private _theme: Readonly<Theme>;\n\n    /** Allow the color set to be provided in a forRoot function otherwise set it to the Keppel theme by default */\n    constructor() {\n\n        // resolve the theme based on the colorset\n        this._theme = this.getTheme(this._colorSet);\n    }\n\n    /**\n     * Get a ThemeColor object from a color name\n     * @param colorName The name of the color from the color palette\n     */\n    getColor(colorName: ColorIdentifier): ThemeColor {\n\n        // get the matching ThemeColor from the active theme\n        const themeColor = this._theme[this.resolveColorName(colorName)];\n\n        // if there is not a match then throw an error\n        if (!themeColor) {\n            throw new Error('Color not found: ' + colorName);\n        }\n\n        return new ThemeColor(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), themeColor.getAlpha());\n    }\n\n    /**\n     * Get the active color set\n     */\n    getColorSet(): ColorSet {\n        return this._colorSet;\n    }\n\n    /**\n     * Define the current color set and produce a Theme from it\n     */\n    setColorSet(colorSet: ColorSet): void {\n        this._colorSet = colorSet;\n        this._theme = this.getTheme(colorSet);\n    }\n\n    /**\n     * Resolve a color value. This may be the name of a color from the color set\n     * or it may simply be a hex or rgb(a) color value. This function will return\n     * a CSS color value regardless of which one of these formats it is\n     * @param value The color name, hex code or rgb(a) value to resolve\n     * @returns If the color is the name of a color in the set, the `rgba` color will be returned, otherwise the original CSS value will be returned.\n     */\n    resolve(value: string): string {\n        if (!value) {\n            return;\n        }\n\n        const colorName = this.resolveColorName(value);\n\n        for (const color in this._theme) {\n            if (colorName === color.toLowerCase()) {\n                return this.getColor(colorName).toRgba();\n            }\n        }\n\n        return value;\n    }\n\n    /**\n     * Converts a color name to an appropriate ColorSet name. For example\n     * a color may be written in lower-camel-case, however color sets are in\n     * kebab-case. This will convert to the appropriate naming format\n     * @param colorName The color name to resolve\n     */\n    resolveColorName(colorName: string = ''): string {\n        return colorName.replace(/\\s+/g, '-').toLowerCase();\n    }\n\n    /** Determine if the current colorset has a specific color */\n    colorExists(name: string): boolean {\n        return !!Object.keys(this._theme).find(colorName => colorName === this.resolveColorName(name));\n    }\n\n    /** Create a theme from a colorset */\n    private getTheme(colorSet: ColorSet): Readonly<Theme> {\n        // create a new theme object\n        const theme: Theme = {};\n\n        // ensure we have a colorset\n        if (!colorSet) {\n            colorSet = colorSets.keppel;\n        }\n\n        // iterate over each hex code and convert it to a theme color\n        for (const color in colorSet.colorValueSet) {\n            theme[color] = ThemeColor.parse(colorSet.colorValueSet[color]);\n        }\n\n        return theme;\n    }\n}\n\nexport interface Theme {\n    [name: string]: ThemeColor;\n}\n\nexport type ColorIdentifier = string;\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ColorSet, colorSets, COLOR_SET_TOKEN } from './color-sets/index';\nimport { ColorService } from './color.service';\n\n@NgModule({})\nexport class ColorServiceModule {\n\n    /**\n     * The function allows the consuming applications to specify the applications\n     * color set once in the app module, eg:\n     * ```\n     * ColorServiceModule.forRoot(colorSets.microFocus);\n     * ```\n     * @param colorSet The color set the application should use\n     */\n    static forRoot(colorSet: ColorSet): ModuleWithProviders<ColorServiceModule> {\n        return {\n            ngModule: ColorServiceModule,\n            providers: [\n                { provide: COLOR_SET_TOKEN, useValue: colorSet ? colorSet : colorSets.keppel },\n                ColorService\n            ]\n        };\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ThemeColor } from '../../../services/color/index';\n\n@Injectable()\nexport class ContrastService {\n    /**\n     * Calculate the contract ratio between two colors.\n     * This uses the official WCAG Color Contrast Ratio\n     * Algorithm: https://www.w3.org/TR/WCAG20-TECHS/G17.html\n     */\n    getContrastColor(backgroundColor: ThemeColor, lightColor: ThemeColor, darkColor: ThemeColor): ThemeColor {\n        // get a ThemeColor from the ColorPickerColor\n        const themeColor = ThemeColor.parse(backgroundColor.toHex());\n\n        const background = this.getLuminance(themeColor);\n        const light = this.getLuminance(lightColor);\n        const dark = this.getLuminance(darkColor);\n\n        // determine the contrast for both black and white\n        const whiteContrast = (light + 0.05) / (background + 0.05);\n        const blackContrast = (background + 0.05) / (dark + 0.05);\n\n        // return the color with the most contrast ratio\n        return blackContrast > whiteContrast ? darkColor : lightColor;\n    }\n\n    private getLuminance(color: ThemeColor): number {\n\n        // normalize the colors\n        let r = +color.getRed() / 255;\n        let g = +color.getGreen() / 255;\n        let b = +color.getBlue() / 255;\n\n        // calculate the value required for each color component\n        r = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);\n        g = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);\n        b = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);\n\n        // return the luminance\n        return (0.2126 * r) + (0.7152 * g) + (0.0722 * b);\n    }\n}","import { Directive, HostBinding, inject, Input } from '@angular/core';\nimport { ColorService, ThemeColor } from '../../../services/color/index';\nimport { ContrastService } from './contrast.service';\n\n@Directive({\n    selector: '[uxColorContrast]'\n})\nexport class ColorContrastDirective {\n    private readonly _colorService = inject(ColorService);\n\n    private readonly _contrastService = inject(ContrastService);\n\n    /**\n     * Define the background color for contrast comparison.\n     * This can be a CSS color value or the name of a\n     * color from the color palette.\n     */\n    @Input() set uxColorContrast(backgroundColor: string) {\n        this._backgroundColor = ThemeColor.parse(this._colorService.resolve(backgroundColor));\n    }\n\n    /**\n     * Define the light color for contrast comparison.\n     * This can be a CSS color value or the name of a\n     * color from the color palette.\n     */\n    @Input() set lightColor(lightColor: string) {\n        this._lightColor = ThemeColor.parse(this._colorService.resolve(lightColor));\n    }\n\n    /**\n     * Define the dark color for contrast comparison.\n     * This can be a CSS color value or the name of a\n     * color from the color palette.\n     */\n    @Input() set darkColor(darkColor: string) {\n        this._darkColor = ThemeColor.parse(this._colorService.resolve(darkColor));\n    }\n\n    /** Determine the color to set based on the supplied parameters */\n    @HostBinding('style.color')\n    get _color(): string | null {\n        return this._backgroundColor ? this._contrastService.getContrastColor(this._backgroundColor, this._lightColor, this._darkColor).toRgba() : null;\n    }\n\n    /** Store the background color as a ThemeColor object */\n    private _backgroundColor: ThemeColor;\n\n    /** Store the light color as a ThemeColor object */\n    private _lightColor: ThemeColor = ThemeColor.parse('#fff');\n\n    /** Store the light color as a ThemeColor object */\n    private _darkColor: ThemeColor = ThemeColor.parse('#000');\n\n}\n","import { Directive } from '@angular/core';\nimport { FocusIndicatorDirective } from './focus-indicator.directive';\n\n/**\n * This directive can be used to target specific elements based on their CSS\n * class so we can control when the focus shows. This will help prevent us\n * polluting the FocusIndicatorDirective with an lot of selectors.\n *\n * If the button has a uxFocusIndicator, uxMenuTriggerFor or uxMenuNavigationToggle directive applied we should skip this\n */\n@Directive({\n    selector: '.btn:not([uxFocusIndicator]):not([uxMenuNavigationToggle]):not([uxMenuTriggerFor]), a[href]:not([uxFocusIndicator]):not([uxMenuNavigationToggle]):not([uxMenuTriggerFor])'\n})\nexport class DefaultFocusIndicatorDirective extends FocusIndicatorDirective {\n\n    constructor() {\n        super();\n\n        // Enable programmatic focus by default\n        this.programmaticFocusIndicator = true;\n    }\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AccessibilityOptions } from '../../options/accessibility-options.interface';\nimport { LocalFocusIndicatorOptions } from './focus-indicator-options';\n\n@Directive({\n    selector: '[uxFocusIndicatorOptions]',\n    providers: [LocalFocusIndicatorOptions]\n})\nexport class FocusIndicatorOptionsDirective implements AccessibilityOptions {\n    private readonly _options = inject(LocalFocusIndicatorOptions, { self: true });\n\n    /** If `true`, this element will receive a focus indicator when the element is clicked on. */\n    @Input() set mouseFocusIndicator(mouseFocusIndicator: boolean) {\n        this._options.mouseFocusIndicator = mouseFocusIndicator;\n    }\n\n    /** If `true`, this element will receive a focus indicator when the element is touched. */\n    @Input() set touchFocusIndicator(touchFocusIndicator: boolean) {\n        this._options.touchFocusIndicator = touchFocusIndicator;\n    }\n\n    /** If `true`, this element will receive a focus indicator when the element is focused using the keyboard. */\n    @Input() set keyboardFocusIndicator(keyboardFocusIndicator: boolean) {\n        this._options.keyboardFocusIndicator = keyboardFocusIndicator;\n    }\n\n    /** If `true`, this element will receive a focus indicator when the element is programmatically focused. */\n    @Input() set programmaticFocusIndicator(programmaticFocusIndicator: boolean) {\n        this._options.programmaticFocusIndicator = programmaticFocusIndicator;\n    }\n}\n","import { ElementRef, Renderer2 } from '@angular/core';\nimport { FocusIndicatorOriginService } from './focus-indicator-origin.service';\n\n/**\n * When working with component host elements\n * we cannot apply directives, eg. FocusIndicatorOriginDirective\n * however we may still want the functionality to be applied to\n * the host element. This class allows the host element to become\n * a focus indicator origin\n */\nexport class FocusIndicatorOrigin {\n\n    /** Store all event handlers */\n    private readonly _handlers: (() => void)[] = [];\n\n    /** Click events can be trigged by both mouse and keyboard so we want to ensure we emit the correct origin */\n    private _isMouseEvent: boolean;\n\n    constructor(private readonly _focusIndicatorOrigin: FocusIndicatorOriginService, elementRef: ElementRef, renderer: Renderer2) {\n\n        // add event handlers\n        this._handlers = [\n            renderer.listen(elementRef.nativeElement, 'click', () => this.onClick()),\n            renderer.listen(elementRef.nativeElement, 'mousedown', () => this.onMouseDown()),\n            renderer.listen(elementRef.nativeElement, 'keydown', () => this.onKeydown())\n        ];\n    }\n\n    /** Remove all event handlers */\n    destroy(): void {\n        this._handlers.forEach(handler => handler());\n    }\n\n    onMouseDown(): void {\n        this._isMouseEvent = true;\n    }\n\n    onClick(): void {\n        // if the click was triggered after a mousedown event then it is a keyboard event\n        this._focusIndicatorOrigin.setOrigin(this._isMouseEvent ? 'mouse' : 'keyboard');\n\n        // reset the mouse event flag\n        this._isMouseEvent = false;\n    }\n\n    onKeydown(): void {\n        this._isMouseEvent = false;\n        this._focusIndicatorOrigin.setOrigin('keyboard');\n    }\n\n}","import { Directive, ElementRef, inject, OnDestroy, Renderer2 } from '@angular/core';\nimport { FocusIndicatorOrigin } from './focus-indicator-origin';\nimport { FocusIndicatorOriginService } from './focus-indicator-origin.service';\n\n@Directive({\n    selector: '[uxFocusIndicatorOrigin]',\n})\nexport class FocusIndicatorOriginDirective implements OnDestroy {\n    readonly focusOriginService = inject(FocusIndicatorOriginService);\n\n    readonly elementRef = inject(ElementRef);\n\n    readonly renderer = inject(Renderer2);\n\n    /** Store the instance of the focus indicator origin */\n    private readonly _focusOrigin: FocusIndicatorOrigin;\n\n    constructor() {\n        this._focusOrigin = new FocusIndicatorOrigin(this.focusOriginService, this.elementRef, this.renderer);\n    }\n\n    ngOnDestroy(): void {\n        this._focusOrigin.destroy();\n    }\n}","import { Directive, ElementRef, EventEmitter, inject, OnDestroy, Output } from '@angular/core';\n\n@Directive({\n    selector: '[uxFocusWithin],[uxBlurWithin]',\n})\nexport class FocusWithinDirective implements OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    /** Emits when a child element gains focus */\n    @Output() uxFocusWithin = new EventEmitter<void>();\n\n    /** Emits when a child element loses focus */\n    @Output() uxBlurWithin = new EventEmitter<void>();\n\n    /**\n     * Note: We used to use @angular/cdk FocusMonitor here instead of manually listening\n     * to focus blur events, however this was problematic as any child elements using the FocusMonitor,\n     * eg: `uxFocusIndicator` which not get the correct `origin`, they will instead get a programmatic\n     * origin even if it was clicked or focused via the keyboard.\n     */\n    constructor() {\n\n        // We need to listen in capture phase since focus events don't bubble.\n        this._elementRef.nativeElement.addEventListener('focus', this.onFocus.bind(this), true);\n        this._elementRef.nativeElement.addEventListener('blur', this.onBlur.bind(this), true);\n    }\n\n    ngOnDestroy(): void {\n        this._elementRef.nativeElement.removeEventListener('focus', this.onFocus.bind(this), true);\n        this._elementRef.nativeElement.removeEventListener('blur', this.onBlur.bind(this), true);\n    }\n\n    private onFocus(): void {\n        this.uxFocusWithin.emit();\n    }\n\n    private onBlur(): void {\n        this.uxBlurWithin.emit();\n    }\n}\n","import { inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class ManagedFocusContainerService {\n    readonly rendererFactory = inject(RendererFactory2);\n\n    private _containers: ManagedFocusContainerWithReferences[] = [];\n    private readonly _renderer: Renderer2;\n\n    constructor() {\n        // programmatically create a renderer as it can't be injected into a service\n        this._renderer = this.rendererFactory.createRenderer(null, null);\n    }\n\n    /**\n     * Create or get an existing object which manages the tabindex of descendants.\n     * @param element The element containing focusable descendants.\n     * @param component The component requesting the managed focus container.\n     */\n    register(element: HTMLElement, component: unknown): void {\n\n        // Only create a new instance if no other component has created a container on the same element\n        let containerRef = this._containers.find(ref => ref.container.element.isEqualNode(element));\n        if (!containerRef) {\n            containerRef = new ManagedFocusContainerWithReferences(new ManagedFocusContainer(element, this._renderer));\n            this._containers.push(containerRef);\n\n            // Start listening for focus\n            containerRef.container.register();\n        }\n\n        // Track references to dispose correctly\n        if (component) {\n            containerRef.addReference(component);\n        }\n    }\n\n    /**\n     * Remove the container object. This will call `unregister` on the container if `component` is the last reference\n     * to it.\n     * @param element The element containing focusable descendants.\n     * @param component The component requesting the managed focus container.\n     */\n    unregister(element: HTMLElement, component: unknown): void {\n\n        // Remove the container's reference to the source component\n        const containerRef = this._containers.find(ref => ref.container.element.isEqualNode(element));\n\n        // technically this function can be called before the register function if ngOnDestroy runs before it\n        // is fully initialized so we should stop here if there is no containRef.\n        if (!containerRef) {\n            return;\n        }\n\n        containerRef.removeReference(component);\n\n        if (!containerRef.isAlive()) {\n\n            // Last reference was removed, so unregister the listeners\n            containerRef.container.unregister();\n\n            // Clean up the reference tracking array\n            this._containers = this._containers.filter(c => c !== containerRef);\n        }\n    }\n\n    /**\n     * Get an observable which can be used to determine when the element or one of its descendants has focus.\n     * @param element The element containing focusable descendants.\n     */\n    hasFocus(element: HTMLElement): Observable<boolean> {\n        const container = this.getContainer(element);\n        return container ? container.hasFocus$.asObservable() : null;\n    }\n\n    private getContainer(element: HTMLElement): ManagedFocusContainer {\n        const containerRef = this._containers.find(ref => ref.container.element.isEqualNode(element));\n        return containerRef ? containerRef.container : null;\n    }\n}\n\nclass ManagedFocusContainer {\n\n    /** Whether the container or one of its descendants has focus. */\n    readonly hasFocus$ = new BehaviorSubject<boolean>(false);\n\n    private _modifiedElements: ManagedFocusElementInfo[] = [];\n    private _unlisten: (() => void)[] = [];\n\n    constructor(\n        public readonly element: HTMLElement,\n        private readonly _renderer: Renderer2\n    ) { }\n\n    /** Start managing the focus of child elements. */\n    register(): void {\n\n        this._unlisten.push(this._renderer.listen(this.element, 'focusin', this.onFocusIn.bind(this)));\n        this._unlisten.push(this._renderer.listen(this.element, 'focusout', this.onFocusOut.bind(this)));\n\n        // Check if the container already has focus\n        setTimeout(() => {\n            if (!this.element.contains(document.activeElement)) {\n                this.removeTabFocus();\n            }\n        });\n    }\n\n    /** Stop managing the focus of child elements. */\n    unregister(): void {\n\n        // Dispose the event handlers\n        this._unlisten.forEach(unlisten => unlisten());\n        this._unlisten = [];\n\n        // Undo any tabindex modifications\n        this.restoreTabFocus();\n    }\n\n    private onFocusIn(): void {\n        this.restoreTabFocus();\n    }\n\n    private onFocusOut(): void {\n        this.removeTabFocus();\n    }\n\n    private removeTabFocus(): void {\n\n        this.hasFocus$.next(false);\n\n        // Clear the list of affected elements\n        this._modifiedElements = [];\n\n        // Get all focusable children\n        const focusable = this.element.querySelectorAll(\n            'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n        );\n\n        // Remove focusable children from the tab ring\n        Array.from(focusable).forEach(element => {\n            const originalTabIndex = element.getAttribute('tabindex');\n            this._renderer.setAttribute(element, 'tabindex', '-1');\n            this._modifiedElements.push({\n                element,\n                tabindex: originalTabIndex\n            });\n        });\n    }\n\n    private restoreTabFocus(): void {\n\n        this.hasFocus$.next(true);\n\n        // Restore tab focus ability by removing the custom `tabindex` attribute\n        this._modifiedElements.forEach(elementInfo => {\n            if (elementInfo.tabindex === null) {\n                this._renderer.removeAttribute(elementInfo.element, 'tabindex');\n            } else {\n                this._renderer.setAttribute(elementInfo.element, 'tabindex', elementInfo.tabindex);\n            }\n        });\n\n        // Clear the list of affected elements\n        this._modifiedElements = [];\n    }\n}\n\ninterface ManagedFocusElementInfo {\n    element: Element;\n    tabindex: string;\n}\n\nclass ManagedFocusContainerWithReferences {\n\n    private _components: unknown[] = [];\n\n    constructor(public container: ManagedFocusContainer) { }\n\n    addReference(component: unknown): void {\n        this._components.push(component);\n    }\n\n    removeReference(component: unknown): void {\n        this._components = this._components.filter(c => c !== component);\n    }\n\n    isAlive(): boolean {\n        return this._components.length > 0;\n    }\n}","import { Directive, ElementRef, inject, OnDestroy, OnInit } from '@angular/core';\nimport { ManagedFocusContainerService } from './managed-focus-container.service';\n\n@Directive({\n    selector: '[uxManagedFocusContainer]'\n})\nexport class ManagedFocusContainerDirective implements OnInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _managedFocusContainerService = inject(ManagedFocusContainerService);\n\n    ngOnInit(): void {\n        this._managedFocusContainerService.register(this._elementRef.nativeElement, this);\n    }\n\n    ngOnDestroy(): void {\n        this._managedFocusContainerService.unregister(this._elementRef.nativeElement, this);\n    }\n}","import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, ContentChildren, Directive, ElementRef, EventEmitter, HostListener, inject, OnDestroy, OnInit, Output, PLATFORM_ID, QueryList, Renderer2 } from '@angular/core';\nimport { SplitAreaDirective, SplitComponent } from 'angular-split';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FocusIndicator } from '../focus-indicator/focus-indicator';\nimport { FocusIndicatorService } from '../focus-indicator/focus-indicator.service';\n\n@Directive({\n    selector: 'as-split'\n})\nexport class SplitterAccessibilityDirective implements OnInit, AfterViewInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _splitter = inject(SplitComponent);\n\n    private readonly _focusIndicatorService = inject(FocusIndicatorService);\n\n    private readonly _platform = inject<string>(PLATFORM_ID);\n\n    /** Emit an event whenever the gutter is moved using the keyboard */\n    @Output() gutterKeydown = new EventEmitter<KeyboardEvent>();\n\n    /** Find all the split areas */\n    @ContentChildren(SplitAreaDirective) areas: QueryList<SplitAreaDirective>;\n\n    /** Store all the gutter elements */\n    private _gutters: HTMLElement[] = [];\n\n    /** Watch for gutters being added or removed */\n    private _observer: MutationObserver;\n\n    /** Teardown our observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Store references to all focus indicators */\n    private _focusIndicators: FocusIndicator[] = [];\n\n    ngOnInit(): void {\n        // update aria values when the a gutter is dragged\n        this._splitter.dragProgress$\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.updateGutterAttributes());\n    }\n\n    /** Once initialised make the gutters accessible */\n    ngAfterViewInit(): void {\n        // find the gutters\n        this.onGutterChange();\n\n        // if the number of split areas change then update the gutters and apply aria properties\n        this.areas.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => this.onGutterChange());\n\n        // we can't know when additional split-gutters appear using ContentChildren as the directive class is not exported and selector doesn't work - use mutation observer instead\n        if (isPlatformBrowser(this._platform)) {\n\n            // create the mutation observer\n            this._observer = new MutationObserver(() => this.onGutterChange());\n\n            // begin observing the child nodes\n            this._observer.observe(this._elementRef.nativeElement, { childList: true });\n        }\n    }\n\n    /** Destroy all observables and observers */\n    ngOnDestroy(): void {\n\n        if (this._observer) {\n            this._observer.disconnect();\n        }\n\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        // destroy all existing focus indicators\n        this._focusIndicators.forEach(indicator => indicator.destroy());\n    }\n\n    /** We should focus the gutter when it is clicked */\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent): void {\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            (event.target as HTMLInputElement).parentElement.focus();\n        }\n    }\n\n    /** Find all the gutters and set their attributes */\n    private onGutterChange(): void {\n\n        // destroy all existing focus indicators\n        this._focusIndicators.forEach(indicator => indicator.destroy());\n\n        // reset the array\n        this._focusIndicators = [];\n\n        // get the new gutter elements\n        this._gutters = this.getGutters();\n\n        // monitor the focus of each gutter\n        this._gutters.forEach(gutter => this._focusIndicators.push(this._focusIndicatorService.monitor(gutter)));\n\n        // apply all required accessibility attributes to the gutter elements\n        this.setGutterAttributes();\n    }\n\n    /** Get all the gutter elements */\n    private getGutters(): HTMLElement[] {\n        // This function uses DOM accessing properties - which won't work if server side rendered\n        if (isPlatformBrowser(this._platform)) {\n            const gutters: HTMLElement[] = [];\n\n            for (let idx = 0; idx < this._elementRef.nativeElement.children.length; idx++) {\n                const node = this._elementRef.nativeElement.children.item(idx);\n\n                if (this.isSplitterGutter(node as HTMLElement)) {\n                    gutters.push(node as HTMLElement);\n                }\n            }\n\n            return gutters;\n        }\n\n        return [];\n    }\n\n    /** Set the appropriate attributes on the gutter elements */\n    private setGutterAttributes(): void {\n        // apply attribute to every gutter\n        this._gutters.forEach(gutter => {\n            // apply the separator role\n            this._renderer.setAttribute(gutter, 'role', 'separator');\n\n            // make the gutters tabbable\n            this._renderer.setAttribute(gutter, 'tabindex', '0');\n\n            // set the value now aria property\n            this.updateGutterAttributes();\n        });\n    }\n\n    /** Apply the aria attribute values */\n    private updateGutterAttributes(): void {\n        // update the value now properties of each gutter\n        this._gutters.forEach((gutter, idx) => {\n            this.setGutterValueNow(gutter, idx);\n            this.setGutterValueMin(gutter, idx);\n            this.setGutterValueMax(gutter, idx);\n        });\n    }\n\n    /** Apply the value now aria attribute */\n    private setGutterValueNow(gutter: HTMLElement, index: number): void {\n        // get the matching split area\n        const area = this._splitter.displayedAreas[index];\n\n        if (area.size === '*') {\n            return;\n        }\n\n        // indicate the size\n        this._renderer.setAttribute(gutter, 'aria-valuenow', `${Math.round(area.size)}`);\n    }\n\n    /** Apply the value min aria attribute */\n    private setGutterValueMin(gutter: HTMLElement, index: number): void {\n        // get the matching split area\n        const area = this.areas.toArray()[index];\n\n        // indicate the minimum size\n        this._renderer.setAttribute(gutter, 'aria-valuemin', `${Math.round(area.minSize)}`);\n    }\n\n    /** Apply the value max aria attribute */\n    private setGutterValueMax(gutter: HTMLElement, index: number): void {\n        // get every other splitter area\n        const availableSize = this.areas\n            .filter((_area, idx) => index !== idx)\n            .reduce<number>((total, area) => total + area.minSize, 0);\n\n        // indicate the minimum size\n        this._renderer.setAttribute(gutter, 'aria-valuemax', `${100 - Math.round(availableSize)}`);\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeydown(event: KeyboardEvent): void {\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            this.gutterKeydown.emit(event);\n        }\n    }\n\n    @HostListener('keydown.ArrowDown', ['$event'])\n    @HostListener('keydown.ArrowRight', ['$event'])\n    onIncreaseKey(event: KeyboardEvent): void {\n        // only perform a move if a gutter is focused\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            this.setGutterPosition(event.target as HTMLElement, -1);\n\n            // stop the browser from scrolling\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.ArrowUp', ['$event'])\n    @HostListener('keydown.ArrowLeft', ['$event'])\n    onDecreaseKey(event: KeyboardEvent): void {\n        // only perform a move if a gutter is focused\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            this.setGutterPosition(event.target as HTMLElement, 1);\n\n            // stop the browser from scrolling\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.Home', ['$event'])\n    onHomeKey(event: KeyboardEvent): void {\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            // get the affected panels\n            const areas = this.getAreasFromGutter(event.target as HTMLElement);\n\n            if (areas.previous.size === '*') {\n                return;\n            }\n\n            // set the previous area to it's minimum size\n            const delta = areas.previous.size - areas.previous.minSize;\n\n            // update the sizes accordingly\n            this.setGutterPosition(event.target as HTMLElement, delta);\n\n            // stop the browser from scrolling\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.End', ['$event'])\n    onEndKey(event: KeyboardEvent): void {\n        if (this.isSplitterGutter(event.target as HTMLElement)) {\n            // get the affected panels\n            const areas = this.getAreasFromGutter(event.target as HTMLElement);\n\n            if (areas.next.size === '*') {\n                return;\n            }\n\n            // set the next area to it's minimum size\n            const delta = areas.next.size - areas.next.minSize;\n\n            // update the sizes accordingly\n            this.setGutterPosition(event.target as HTMLElement, -delta);\n\n            // stop the browser from scrolling\n            event.preventDefault();\n        }\n    }\n\n    /** Determine if an element is a gutter */\n    private isSplitterGutter(element: HTMLElement): boolean {\n        return element.classList.contains('as-split-gutter') || element.classList.contains('as-split-gutter-icon');\n    }\n\n    /** Update the gutter position */\n    private setGutterPosition(gutter: HTMLElement, delta: number): void {\n        // get the affected panels\n        const areas = this.getAreasFromGutter(gutter);\n\n        if (areas.previous.size === '*' || areas.next.size === '*') {\n            return;\n        }\n\n        // ensure we can perform the resize\n        if (areas.previous.size - delta < areas.previous.minSize || areas.next.size + delta < areas.next.minSize) {\n            return;\n        }\n\n        // perform the resize\n        areas.previous.size -= delta;\n        areas.next.size += delta;\n\n        // update the splitter - this is a private method but we need to call it\n        //eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (this._splitter as any).refreshStyleSizes();\n\n        // update the gutter aria values\n        this.updateGutterAttributes();\n    }\n\n    /** Get the split areas associated with a given gutter */\n    private getAreasFromGutter(gutter: HTMLElement) {\n        const index = this._gutters.indexOf(gutter);\n\n        return {\n            previous: this._splitter.displayedAreas[index],\n            next: this._splitter.displayedAreas[index + 1]\n        };\n    }\n}\n","import { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, END, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Injectable, OnDestroy, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TabbableListItemDirective } from './tabbable-list-item.directive';\n\n@Injectable()\nexport class TabbableListService implements OnDestroy {\n\n    /** Indicate is this is being using on a hierarchichal set of items */\n    hierarchy: boolean = false;\n\n    /** Determine if we all the alt key */\n    allowAltModifier: boolean = true;\n\n    /** Determine if we all the ctrl key */\n    allowCtrlModifier: boolean = true;\n\n    /** Determine if we allow the Home/End keys */\n    allowBoundaryKeys: boolean = false;\n\n    /** Determine if we should scroll the item into view on focus */\n    shouldScrollInView: boolean = true;\n\n    /** Store the instance of the focus key manager */\n    focusKeyManager: FocusKeyManager<TabbableListItemDirective>;\n\n    /** Indicate if we should refocus an item on QueryList change - for use within virtual lists */\n    shouldFocusOnChange: boolean = true;\n\n    /** Store the container element */\n    containerRef: HTMLElement;\n\n    /** Emit whenever focus does not change but tabindexes have */\n    onTabIndexChange = new Subject<void>();\n\n    /** Determine if focus is currently within the tabbable list */\n    isFocused: boolean = false;\n\n    /** Store the list of tabbable items */\n    private _items: QueryList<TabbableListItemDirective>;\n\n    /** Store the direction of the list */\n    private _direction: 'horizontal' | 'vertical';\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        this.onTabIndexChange.complete();\n    }\n\n    initialize(items: QueryList<TabbableListItemDirective>, direction: 'horizontal' | 'vertical', wrap: boolean): void {\n\n        // store the items\n        this._items = items;\n\n        // create the new focus key manager\n        this.focusKeyManager = new FocusKeyManager(items);\n\n        // set the direction of the list\n        direction === 'vertical' ? this.focusKeyManager.withVerticalOrientation() : this.focusKeyManager.withHorizontalOrientation('ltr');\n        this._direction = direction;\n\n        // enable wrapping if required\n        if (wrap) {\n            this.focusKeyManager.withWrap();\n        }\n\n        // make sure the first item in the list is tabbable\n        this.setFirstItemTabbable();\n\n        // call the init function on each item\n        this._items.forEach(item => item.onInit());\n\n        // if the list changes we need to ensure there is always at least one tabbable item\n        this._items.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n\n            // call the on init function on any new items\n            this._items.filter(item => !item.initialized).forEach(item => item.onInit());\n\n            // ensure we update the tab indexes\n            this.onTabIndexChange.next();\n\n            // ensure there is at least one item tabbable at all times\n            this.ensureTabbableItem();\n        });\n    }\n\n    /** Give and item focus or just make it the current tabbable item */\n    activate(item: TabbableListItemDirective, updateIndexOnly: boolean = false): void {\n\n        if (!item) {\n            return;\n        }\n\n        // get the item index\n        const index = this._items.toArray().indexOf(item);\n\n        this.activateItemAtIndex(index, updateIndexOnly);\n    }\n\n    /** Give and item focus or just make it the current tabbable item */\n    activateItemAtIndex(index: number, updateIndexOnly: boolean = false): void {\n\n        // if we only want to update the index\n        if (updateIndexOnly) {\n            return this.updateActiveItemIndex(index);\n        }\n\n        // update active the item only if it is not already active\n        if (this.focusKeyManager.activeItemIndex !== index) {\n            this.focusKeyManager.setActiveItem(index);\n        }\n    }\n\n    isItemActive(item: TabbableListItemDirective): boolean {\n\n        // if this is called before the items have been set then do nothing\n        if (!this._items) {\n            return false;\n        }\n\n        // find the index of the item\n        const index = this._items.toArray().findIndex(_item => _item.id === item.id);\n\n        // check if the item is active (we check against index as it can be updated without setting the activeItem)\n        return this.focusKeyManager && this.focusKeyManager.activeItemIndex === index;\n    }\n\n    setFirstItemTabbable(): void {\n        // find the first item that is not disabled\n        const first = this._items.toArray().findIndex(item => !item.disabled);\n\n        if (first !== -1) {\n            this.updateActiveItemIndex(first);\n        }\n    }\n\n    isAnyItemTabbable(): boolean {\n        const tabbable = this._items.toArray().find(item => item.tabindex === 0);\n        return tabbable ? true : false;\n    }\n\n    ensureTabbableItem(): void {\n        // check to see if any item is tabbable\n        const active = this._items.find(item => this.isItemActive(item));\n\n        if (!active) {\n            this.setFirstItemTabbable();\n        }\n    }\n\n    focusTabbableItem(): void {\n\n        if (!this._items) {\n            return;\n        }\n\n        // find the item in the list with a tab index\n        const index = this._items.toArray().findIndex(item => this.isItemActive(item));\n\n        // if an item was found then focus it\n        if (index !== -1) {\n            this.focusKeyManager.setActiveItem(index);\n        }\n    }\n\n    onKeydown(source: TabbableListItemDirective, event: KeyboardEvent): void {\n\n        // prevent anything happening when modifier keys are pressed if they have been disabled\n        if (!this.allowAltModifier && event.altKey || !this.allowCtrlModifier && event.ctrlKey) {\n            return;\n        }\n\n        this.focusKeyManager.onKeydown(event);\n\n        // if the key is a boundary key and boundary keys are enabled\n        if (this.allowBoundaryKeys) {\n            switch (event.which) {\n                case HOME:\n                    this.focusKeyManager.setFirstItemActive();\n                    event.preventDefault();\n                    break;\n\n                case END:\n                    this.focusKeyManager.setLastItemActive();\n                    event.preventDefault();\n                    break;\n            }\n        }\n\n        if (this.hierarchy) {\n\n            if ((this._direction === 'horizontal' && event.keyCode === DOWN_ARROW) ||\n                (this._direction === 'vertical' && event.keyCode === RIGHT_ARROW)) {\n                source.keyboardExpanded$.next(true);\n            } else if ((this._direction === 'horizontal' && event.keyCode === UP_ARROW) ||\n                (this._direction === 'vertical' && event.keyCode === LEFT_ARROW)) {\n\n                if (source.children.length > 0 && source.expanded) {\n                    source.keyboardExpanded$.next(false);\n                } else if (source.parent) {\n                    source.parent.keyboardExpanded$.next(false);\n                }\n            }\n        }\n    }\n\n    sortItemsByHierarchy(list: QueryList<TabbableListItemDirective>): TabbableListItemDirective[] {\n\n        const topLevel: TabbableListItemDirective[] = [];\n\n        // Populating children - clear previously generated collection\n        list.forEach(item => item.children = []);\n\n        // Populating children - map from child -> parent relationship\n        list.forEach(item => {\n            if (item.parent) {\n                item.parent.children.push(item);\n            } else {\n                topLevel.push(item);\n            }\n        });\n\n        // Flatten the tree to produce the cursor key order\n        return this.flattenHierarchy(topLevel);\n    }\n\n    /**\n     * In a uxVirtualFor list cells can be resused. This means that when we scroll\n     * the data associated with a given element may change and not the actual elements. If only the data changes\n     * then the QueryList will not emit a change so we may show focus indicatator on the element that previously displayed\n     * the correct data but no longer does.\n     *\n     * We need to handle this correctly here. We already have keys implements to handle virtual elements so we can check\n     * if a key changes and use it to update the focused item even if the QueryList doesn't inform us that we have changed.\n     */\n    itemReferenceChange(previousKey: unknown, origin: FocusOrigin): void {\n        // find the item that now has the previously focused key\n        const item = this.getItemByKey(previousKey);\n\n        // if no key was found then we should ensure there is a tabbable item\n        if (!item) {\n            return this.ensureTabbableItem();\n        }\n\n        // get the item index\n        const index = this._items.toArray().indexOf(item);\n\n        // activate the item without side effects\n        this.updateActiveItemIndex(index);\n\n        // focus the item with the same origin that it previously had\n        item.focusWithOrigin(origin);\n    }\n\n    /** Update the active item without causing focus */\n    updateActiveItemIndex(index: number): void {\n        this.focusKeyManager.updateActiveItem(index);\n        this.onTabIndexChange.next();\n    }\n\n    /** Determine if there is an item with a tabindex of 0 */\n    hasTabbableItem(): boolean {\n        return this.focusKeyManager && this.focusKeyManager.activeItemIndex >= 0;\n    }\n\n    private getItemByKey(key: unknown): TabbableListItemDirective | null {\n        return this._items.find(item => item.key === key);\n    }\n\n    private flattenHierarchy(items: TabbableListItemDirective[]): TabbableListItemDirective[] {\n        const flatList: TabbableListItemDirective[] = [];\n        items.forEach(item => {\n            item.children.sort((a, b) => a.rank - b.rank);\n            flatList.push(item, ...this.flattenHierarchy(item.children));\n        });\n        return flatList;\n    }\n}\n","import { FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\nimport { Platform } from '@angular/cdk/platform';\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { tick } from '../../../common/index';\nimport { FocusIndicator } from '../focus-indicator/focus-indicator';\nimport { FocusIndicatorOriginService } from '../focus-indicator/focus-indicator-origin/focus-indicator-origin.service';\nimport { FocusIndicatorService } from '../focus-indicator/focus-indicator.service';\nimport { ManagedFocusContainerService } from '../managed-focus-container/managed-focus-container.service';\nimport { TabbableListService } from './tabbable-list.service';\n\nlet nextId = 0;\nlet uniqueKey = 0;\n\n@Directive({\n    selector: '[uxTabbableListItem]',\n    exportAs: 'ux-tabbable-list-item'\n})\nexport class TabbableListItemDirective implements FocusableOption, OnDestroy {\n    /** Access the service to programmatically control focus indicators */\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n    /** Access the tabbable list service */\n    private readonly _tabbableList = inject(TabbableListService);\n    /** Access the tabbable item element */\n    private readonly _elementRef = inject(ElementRef);\n    /** Access the service responsible for handling focus in child elements */\n    private readonly _managedFocusContainerService = inject(ManagedFocusContainerService);\n    /** Access the service which can provide us with browser identification */\n    private readonly _platform = inject(Platform);\n    /** Access the change detector to ensure tabindex gets updated as expects */\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n    /** Access the focus origin if one is provided */\n    private readonly _focusOriginService = inject(FocusIndicatorOriginService);\n    /** Access the renderer to make manual dom manipulations */\n    private readonly _renderer = inject(Renderer2);\n\n\n    /** Indicate the parent tabbable list item if one is present. */\n    @Input() parent: TabbableListItemDirective;\n\n    @Input() rank: number = 0;\n\n    /** Indicate if this item is disabled */\n    @Input() disabled: boolean = false;\n\n    /** Indicate if the item is expanded if used as a hierarchical item. */\n    @Input() expanded: boolean = false;\n\n    /** Provide a unique key to help identify items when used in a virtual list */\n     \n    @Input() set key(key: any) {\n\n        // store the previous key\n        const previousKey = this._key;\n\n        // check if the key has changed eg. via cell reuse\n        const didChangeRef = previousKey && key !== previousKey;\n\n        // update the current key\n        this._key = key;\n\n        // if this element was the previously tabbable item then update the reference\n        if (didChangeRef && this.isTabbable()) {\n\n            // allow the virtual scroll to update\n            this._changeDetector.detectChanges();\n\n            // this item should no longer be tabbable\n            this._tabbableList.focusKeyManager.updateActiveItem(-1);\n\n            // store the focus origin before we blur\n            const origin = this._focusOrigin;\n\n            // blur this item\n            this._elementRef.nativeElement.blur();\n\n            // update the reference\n            this._tabbableList.itemReferenceChange(previousKey, origin);\n        }\n    }\n\n     \n    get key(): any {\n        return this._key || this._defaultKey;\n    }\n\n    /** Emit when the expanded state changes. */\n    @Output() expandedChange = new EventEmitter<boolean>();\n\n    /** Emit when the element receives focus via the tabbable list. */\n    @Output() activated = new EventEmitter<FocusOrigin>();\n\n    get tabindex(): number {\n        return this._tabbableList.isItemActive(this) ? 0 : -1;\n    }\n\n    /** Give each tabbable item a unique id */\n    id: number = nextId++;\n\n    /** Each item in the list needs to be initialised by the service. When the item QueryList changes this is used to identify which items previously existed and which are new */\n    initialized: boolean = false;\n\n    /** Store a list of all child tabbable items */\n    children: TabbableListItemDirective[] = [];\n\n    /** Emit whenever the expanded state changes */\n    keyboardExpanded$ = new Subject<boolean>();\n\n    /** Automatically unsubscribe from all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Store a reference to the focus indicator instance */\n    private readonly _focusIndicator: FocusIndicator;\n\n    /** Store the current key - it may change in a ngFor/uxVirtualFor if the cell is reused. */\n     \n    private _key: any;\n\n    /** Store a default key to use if one is not provided */\n    private readonly _defaultKey: string = `tabbable-list-key-${uniqueKey++}`;\n\n    /** Determine if this element has a focus indicator visible */\n    private _focusOrigin: FocusOrigin = null;\n\n    constructor() {\n\n        // create the focus indicator\n        this._focusIndicator = this.focusIndicatorService.monitor(this._elementRef.nativeElement);\n\n        // store the most current focus origin\n        this._focusIndicator.origin$.pipe(takeUntil(this._onDestroy))\n            .subscribe(origin => this._focusOrigin = origin);\n\n        // watch for changes to tabindexes\n        this._tabbableList.onTabIndexChange.pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.setTabIndex());\n\n        this.keyboardExpanded$.pipe(tick(), takeUntil(this._onDestroy)).subscribe(expanded => {\n\n            // Emit event which may alter the DOM\n            this.expandedChange.emit(expanded);\n\n            // Activate the appropriate item\n            if (expanded) {\n                if (this.children.length > 0) {\n                    this._tabbableList.activate(this.children[0]);\n                }\n            } else {\n                this._tabbableList.activate(this);\n            }\n        });\n    }\n\n    onInit(): void {\n        this.initialized = true;\n\n        // Watch for focus within the container element and manage tabindex of descendants\n        this._managedFocusContainerService.register(this._elementRef.nativeElement, this);\n\n        // ensure the tab index is initially set\n        this.setTabIndex();\n    }\n\n    ngOnDestroy(): void {\n\n        // check if this is the currently focused item - if so we need to make another item tabbable\n        if (this.tabindex === 0) {\n            this._tabbableList.setFirstItemTabbable();\n        }\n\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        this._focusIndicator.destroy();\n\n        this._managedFocusContainerService.unregister(this._elementRef.nativeElement, this);\n    }\n\n    focus(): void {\n\n        // check if there are currently any items that are tabbable\n        const hasTabbableItem = this._tabbableList.hasTabbableItem();\n\n        // determine the focus origin\n        const origin = hasTabbableItem ? this._focusOriginService.getOrigin() || 'keyboard' : 'keyboard';\n\n        // apply focus to the element\n        this.focusWithOrigin(origin, !this._tabbableList.shouldScrollInView);\n\n        // ensure the focus key manager updates the active item correctly\n        this._tabbableList.activate(this, hasTabbableItem);\n\n        // emit the focus event\n        this.activated.emit(origin);\n    }\n\n    @HostListener('focus')\n    @HostListener('click')\n    onFocus(): void {\n        // if this item is not currently focused in the focusKeyManager set it as the active item\n        if (!this._tabbableList.isItemActive(this)) {\n            this._tabbableList.activate(this, true);\n        }\n\n        // also inform the service that an item within the list is now focused\n        this._tabbableList.isFocused = true;\n    }\n\n    @HostListener('blur')\n    onBlur(): void {\n        // if this is the current active item and it is blurred then update the isFocused state\n        if (this._tabbableList.isItemActive(this)) {\n            this._tabbableList.isFocused = false;\n        }\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeydown(event: KeyboardEvent): void {\n        this._tabbableList.onKeydown(this, event);\n    }\n\n    getFocused(): boolean {\n        return this._elementRef.nativeElement === document.activeElement;\n    }\n\n    /** We can programmatically focus an element but may want a different origin than 'programmatic' */\n    focusWithOrigin(origin: FocusOrigin, preventScroll: boolean = true): void {\n\n        if (origin) {\n\n            const scrollTop = this._tabbableList.containerRef.scrollTop;\n\n            // focus the item with a given origin\n            this._focusIndicator.focus(origin, { preventScroll });\n\n            // IE and Firefox don't support prevent scroll\n            if (preventScroll && !this._platform.WEBKIT) {\n                this._tabbableList.containerRef.scrollTop = scrollTop;\n            }\n        }\n    }\n\n    private isTabbable(): boolean {\n        return this.tabindex === 0;\n    }\n\n    private setTabIndex(): void {\n        // update the tabindex attribute\n        this._renderer.setAttribute(this._elementRef.nativeElement, 'tabindex', this.tabindex.toString());\n    }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { AfterContentInit, ContentChildren, Directive, ElementRef, inject, Input, OnDestroy, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { TabbableListItemDirective } from './tabbable-list-item.directive';\nimport { TabbableListService } from './tabbable-list.service';\n\n@Directive({\n    selector: '[uxTabbableList]',\n    exportAs: 'ux-tabbable-list',\n    providers: [TabbableListService]\n})\nexport class TabbableListDirective implements AfterContentInit, OnDestroy {\n    /** Access the tabbable list service */\n    private readonly _tabbableList = inject(TabbableListService);\n    /** Access the native dom element */\n    readonly elementRef = inject(ElementRef);\n\n    /** Determine whether the up/down arrows should be used or the left/right arrows */\n    @Input() direction: 'horizontal' | 'vertical' = 'vertical';\n\n    /** Indicate whether or not focus should loop back to the first element after the last */\n    @Input() wrap: boolean = true;\n\n    /** Indicate whether or not the first item should receive focus on show - useful for modals and popovers */\n    @Input() focusOnShow: boolean = false;\n\n    /** Indicate whether or not focus should be returned to the previous element (only applicable when using focusOnShow) */\n    @Input() returnFocus: boolean = false;\n\n    /** Enabling handling of hierarchical lists via use of the `TabbableListItemDirective.parent` property. */\n    @Input() set hierarchy(value: boolean) { this._tabbableList.hierarchy = value; }\n\n    /** Prevent keyboard interaction when alt modifier key is pressed */\n    @Input() set allowAltModifier(value: boolean) { this._tabbableList.allowAltModifier = value; }\n\n    /** Prevent keyboard interaction when ctrl modifier key is pressed */\n    @Input() set allowCtrlModifier(value: boolean) { this._tabbableList.allowCtrlModifier = value; }\n\n    /** Focus the first or last item when Home or End keys are pressed */\n    @Input() set allowBoundaryKeys(value: boolean) { this._tabbableList.allowBoundaryKeys = value; }\n\n    /** Find all tabbable list items */\n    @ContentChildren(TabbableListItemDirective, { descendants: true }) items: QueryList<TabbableListItemDirective>;\n\n    /** Store the currently focused HTML element */\n    private _focusedElement: HTMLElement;\n\n    /** Store the items in a specific order */\n    private _orderedItems: QueryList<TabbableListItemDirective>;\n\n    /** Unsubscribe from all observables automatically on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    get focusKeyManager(): FocusKeyManager<TabbableListItemDirective> {\n        return this._tabbableList.focusKeyManager;\n    }\n\n    constructor() {\n        // store a reference to the container element\n        this._tabbableList.containerRef = this.elementRef.nativeElement;\n    }\n\n    ngAfterContentInit(): void {\n\n        // store the currently focused element\n        this._focusedElement = document.activeElement as HTMLElement;\n        this._orderedItems = new QueryList<TabbableListItemDirective>();\n\n        if (this._tabbableList.hierarchy) {\n\n            // Sort items in a hierarchy\n            this._orderedItems.reset(this._tabbableList.sortItemsByHierarchy(this.items));\n\n            // Ensure that the child items remain sorted\n            this.items.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n                this._orderedItems.reset(this._tabbableList.sortItemsByHierarchy(this.items));\n                this._orderedItems.notifyOnChanges();\n            });\n\n        } else {\n\n            // Items are already in order\n            this._orderedItems = this.items;\n\n            // Ensure we reselect a selected item after the querylist has changed\n            this.items.changes.pipe(filter(() => this._tabbableList.shouldFocusOnChange && this._tabbableList.isFocused), takeUntil(this._onDestroy))\n                .subscribe((items: QueryList<TabbableListItemDirective>) => {\n\n                    // check if an item is currently focused\n                    const activeItem = this._tabbableList.focusKeyManager.activeItem;\n\n                    // restore the selected item if there was one and it is still visible\n                    if (activeItem) {\n\n                        // find the matching index\n                        const index = items.toArray().findIndex(item => item.key === activeItem.key);\n\n                        // if the item is still in the list we want to focus it\n                        if (index > -1) {\n\n                            // however we are refocusing an item that was focused so we dont want to scroll into view again as this can prevent wheel scrolling\n                            this._tabbableList.shouldScrollInView = false;\n\n                            // refocus the item again\n                            this._tabbableList.activateItemAtIndex(index, !this._tabbableList.isFocused);\n\n                            // re-enable scrolling into view\n                            this._tabbableList.shouldScrollInView = true;\n                        }\n                    }\n                });\n        }\n\n        // Set up the focus monitoring\n        this._tabbableList.initialize(this._orderedItems, this.direction, this.wrap);\n\n        // focus the first element if specified\n        if (this.focusOnShow) {\n            this._tabbableList.focusKeyManager.setFirstItemActive();\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.returnFocus && this._focusedElement instanceof HTMLElement) {\n            setTimeout(() => this._focusedElement.focus());\n        }\n\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    setFirstItemTabbable(): void {\n        if (!this._tabbableList.isAnyItemTabbable()) {\n            this._tabbableList.setFirstItemTabbable();\n        }\n    }\n\n    focus(): void {\n        if (this._tabbableList.focusKeyManager && this._tabbableList.focusKeyManager.activeItem) {\n            this._tabbableList.focusKeyManager.activeItem.focus();\n        }\n    }\n\n    focusTabbableItem(): void {\n        this._tabbableList.focusTabbableItem();\n    }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { ColorContrastDirective } from './contrast-ratio/color-contrast.directive';\nimport { ContrastService } from './contrast-ratio/contrast.service';\nimport { DefaultFocusIndicatorDirective } from './focus-indicator/default-focus-indicator.directive';\nimport { FocusIndicatorOptionsDirective } from './focus-indicator/focus-indicator-options/focus-indicator-options.directive';\nimport { FocusIndicatorOriginDirective } from './focus-indicator/focus-indicator-origin/focus-indicator-origin.directive';\nimport { FocusIndicatorDirective } from './focus-indicator/focus-indicator.directive';\nimport { FocusIndicatorService } from './focus-indicator/focus-indicator.service';\nimport { FocusWithinDirective } from './focus-within/focus-within.directive';\nimport { ManagedFocusContainerDirective } from './managed-focus-container/managed-focus-container.directive';\nimport { ManagedFocusContainerService } from './managed-focus-container/managed-focus-container.service';\nimport { AccessibilityOptions } from './options/accessibility-options.interface';\nimport { AccessibilityOptionsService } from './options/accessibility-options.service';\nimport { ACCESSIBILITY_OPTIONS_TOKEN } from './options/accessibility-options.token';\nimport { SplitterAccessibilityDirective } from './splitter/splitter-accessibility.directive';\nimport { TabbableListItemDirective } from './tabbable-list/tabbable-list-item.directive';\nimport { TabbableListDirective } from './tabbable-list/tabbable-list.directive';\n\n@NgModule({\n    declarations: [\n        DefaultFocusIndicatorDirective,\n        FocusIndicatorDirective,\n        FocusIndicatorOptionsDirective,\n        FocusIndicatorOriginDirective,\n        FocusWithinDirective,\n        ManagedFocusContainerDirective,\n        SplitterAccessibilityDirective,\n        TabbableListDirective,\n        TabbableListItemDirective,\n        FocusIndicatorOriginDirective,\n        ColorContrastDirective\n    ],\n    imports: [\n        A11yModule,\n        ColorServiceModule,\n        PlatformModule\n    ],\n    exports: [\n        DefaultFocusIndicatorDirective,\n        FocusIndicatorDirective,\n        FocusIndicatorOptionsDirective,\n        FocusIndicatorOriginDirective,\n        FocusWithinDirective,\n        ManagedFocusContainerDirective,\n        SplitterAccessibilityDirective,\n        TabbableListDirective,\n        TabbableListItemDirective,\n        FocusIndicatorOriginDirective,\n        ColorContrastDirective\n    ],\n    providers: [\n        AccessibilityOptionsService,\n        ContrastService,\n        FocusIndicatorService,\n        ManagedFocusContainerService,\n    ]\n})\nexport class AccessibilityModule {\n\n    static forRoot(options: AccessibilityOptions): ModuleWithProviders<AccessibilityModule> {\n        return {\n            ngModule: AccessibilityModule,\n            providers: [\n                { provide: ACCESSIBILITY_OPTIONS_TOKEN, useValue: options }\n            ]\n        };\n    }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { AccordionPanelHeadingDirective } from './accordion-panel/accordion-panel-heading.directive';\nimport { AccordionPanelComponent } from './accordion-panel/accordion-panel.component';\nimport { AccordionComponent } from './accordion.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule\n    ],\n    declarations: [\n        AccordionComponent,\n        AccordionPanelComponent,\n        AccordionPanelHeadingDirective\n    ],\n    exports: [\n        AccordionComponent,\n        AccordionPanelComponent,\n        AccordionPanelHeadingDirective\n    ]\n})\nexport class AccordionModule { }","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxAlertIcon]',\n})\nexport class AlertIconDirective { }","import { InjectionToken } from '@angular/core';\nimport { IconModuleOptions } from './icon-options.interface';\n\nexport const ICON_OPTIONS_TOKEN = new InjectionToken<IconModuleOptions>('ICON_OPTIONS_TOKEN');\n","/** AUTOGENERATED: DO NOT MODIFY **/\n\nexport const commonIcons = [\n    '3d',\n    'achievement',\n    'action',\n    'actions',\n    'active',\n    'add',\n    'address-book',\n    'advanced-search',\n    'aggregate',\n    'alarm',\n    'alert-filled',\n    'alert',\n    'analytics',\n    'announcement',\n    'app',\n    'archive',\n    'article',\n    'ascend',\n    'assistant',\n    'attachment',\n    'bar-chart',\n    'blog',\n    'bloomberg',\n    'book',\n    'bookmark-filled',\n    'bookmark',\n    'bundle',\n    'calculator',\n    'calendar',\n    'camera-filled',\n    'camera',\n    'capacity',\n    'caret-down-filled',\n    'caret-down',\n    'caret-next-filled',\n    'caret-next',\n    'caret-previous-filled',\n    'caret-previous',\n    'caret-up-filled',\n    'caret-up',\n    'catalog',\n    'change-password',\n    'chapter-add',\n    'chapter-next-filled',\n    'chapter-next',\n    'chapter-previous-filled',\n    'chapter-previous',\n    'chart-organization',\n    'chart-partition',\n    'chart-sankey',\n    'chat-attachment',\n    'chat',\n    'checkbox-selected',\n    'checkbox',\n    'checkmark',\n    'chevron-down',\n    'chevron-left-double',\n    'chevron-left',\n    'chevron-right-double',\n    'chevron-right',\n    'chevron-up',\n    'chorus',\n    'circular-view',\n    'clipboard',\n    'clone',\n    'close',\n    'cloud-computer',\n    'cloud-download',\n    'cloud-software',\n    'cloud-upload',\n    'cloud',\n    'cluster',\n    'code',\n    'command-line',\n    'compare',\n    'compass',\n    'compliance',\n    'computer-personal',\n    'configuration-filled',\n    'configuration',\n    'confluence',\n    'connect',\n    'contact-card',\n    'contact-us-filled',\n    'contact-us',\n    'contract',\n    'copy',\n    'cube-filled',\n    'cube',\n    'cubes',\n    'cursor-filled',\n    'cursor',\n    'cut',\n    'cycle',\n    'dashboard',\n    'database',\n    'defect',\n    'deliver',\n    'deployment',\n    'descend',\n    'desktop',\n    'detach',\n    'directions',\n    'dislike-filled',\n    'dislike',\n    'divide-four',\n    'divide-right',\n    'divide-three',\n    'divide',\n    'document-cloud',\n    'document-compress',\n    'document-config',\n    'document-csv',\n    'document-data',\n    'document-download',\n    'document-excel',\n    'document-executable',\n    'document-html',\n    'document-image',\n    'document-import',\n    'document-locked',\n    'document-missing',\n    'document-notes',\n    'document-outlook',\n    'document-pdf',\n    'document-performance',\n    'document-powerpoint',\n    'document-rtf',\n    'document-sound',\n    'document-test',\n    'document-text',\n    'document-threat',\n    'document-time',\n    'document-transfer',\n    'document-txt',\n    'document-update',\n    'document-upload',\n    'document-user',\n    'document-verified',\n    'document-video',\n    'document-word',\n    'document',\n    'domain',\n    'down',\n    'download',\n    'drag',\n    'drive-cage',\n    'duplicate',\n    'edit-filled',\n    'edit',\n    'efax',\n    'eject-filled',\n    'eject',\n    'expand',\n    'export',\n    'fan',\n    'fast-forward-filled',\n    'fast-forward',\n    'favorite-filled',\n    'favorite',\n    'filter-filled',\n    'filter',\n    'first-aid',\n    'flag-filled',\n    'flag',\n    'folder-cycle',\n    'folder-open',\n    'folder',\n    'gallery-filled',\n    'gallery',\n    'globe',\n    'grid',\n    'group-add',\n    'group',\n    'grow',\n    'halt',\n    'help-circle',\n    'help',\n    'highlighting-remove',\n    'highlighting',\n    'history',\n    'home-filled',\n    'home',\n    'host-maintenance',\n    'host',\n    'image-filled',\n    'image',\n    'impact',\n    'import',\n    'in-progress',\n    'inactive',\n    'inbox',\n    'indicator-filled',\n    'indicator',\n    'information-filled',\n    'information',\n    'inherit-filled',\n    'inherit',\n    'input-to-process',\n    'install',\n    'integration',\n    'iteration-filled',\n    'iteration',\n    'java-filled',\n    'java',\n    'language',\n    'launch',\n    'license-filled',\n    'license',\n    'like-filled',\n    'like',\n    'line-chart',\n    'link-bottom',\n    'link-down',\n    'link-next',\n    'link-previous',\n    'link-top',\n    'link-up',\n    'link',\n    'list',\n    'location-filled',\n    'location-pin-filled',\n    'location-pin',\n    'location',\n    'lock',\n    'login',\n    'logout',\n    'mail-attachment',\n    'mail-filled',\n    'mail',\n    'manual',\n    'map-location',\n    'map',\n    'menu',\n    'microphone-filled',\n    'microphone',\n    'monitor',\n    'more',\n    'multiple',\n    'navigate',\n    'new-window',\n    'new',\n    'news-aggregation',\n    'news-collection',\n    'news-content',\n    'news',\n    'next',\n    'notes',\n    'notification-filled',\n    'notification',\n    'optimization',\n    'organization',\n    'overview',\n    'pan',\n    'pause-filled',\n    'pause',\n    'payment-google-wallet',\n    'payment-mastercard',\n    'payment-paypal',\n    'payment-square',\n    'payment-visa',\n    'pin-filled',\n    'pin',\n    'plan',\n    'platform-apple',\n    'platform-chrome',\n    'platform-dropbox',\n    'platform-edge',\n    'platform-firefox',\n    'platform-internet-explorer',\n    'platform-kubernetes',\n    'platform-skype',\n    'platform-windows',\n    'play-filled',\n    'play',\n    'power',\n    'previous',\n    'print',\n    'quick-view',\n    'radial-selected',\n    'radial',\n    'redo',\n    'refresh',\n    'resources',\n    'reuters',\n    'rewind-filled',\n    'rewind',\n    'risk',\n    'rss',\n    'satellite',\n    'save-filled',\n    'save',\n    'scale-out-repository',\n    'schedule-clone',\n    'schedule-new',\n    'schedule-play',\n    'schedule',\n    'scorecard',\n    'search',\n    'secure',\n    'select-left',\n    'select',\n    'server-cluster',\n    'server-started',\n    'server',\n    'servers',\n    'service-business',\n    'service-start',\n    'share',\n    'shield-configure',\n    'shield-filled',\n    'shield',\n    'shift',\n    'shop-basket',\n    'shop-cart',\n    'show-less',\n    'show-more',\n    'sms',\n    'soa',\n    'social-cisco-jabber',\n    'social-email',\n    'social-facebook-workplace',\n    'social-facebook',\n    'social-github',\n    'social-instagram',\n    'social-instant-message',\n    'social-jira',\n    'social-linkedin',\n    'social-medium',\n    'social-ms-teams',\n    'social-pinterest',\n    'social-reddit',\n    'social-salesforce-filled',\n    'social-salesforce',\n    'social-sharepoint',\n    'social-skype-for-business',\n    'social-slack',\n    'social-tumblr',\n    'social-twitter',\n    'social-vimeo',\n    'social-we-chat',\n    'social-whats-app',\n    'social-yammer',\n    'social-youtube',\n    'social-zoom',\n    'sort',\n    'stakeholder',\n    'star-filled',\n    'star-half',\n    'star',\n    'status-approved-filled',\n    'status-error-filled',\n    'status-information-filled',\n    'status-information',\n    'status-warning-filled',\n    'steps-filled',\n    'steps',\n    'storage',\n    'street-view-filled',\n    'street-view',\n    'subtitles',\n    'subtract',\n    'support',\n    'symphony',\n    'sync',\n    'system',\n    'tab-next',\n    'tab-previous',\n    'tab-up',\n    'table-add',\n    'table',\n    'tag-filled',\n    'tag',\n    'target',\n    'task',\n    'template',\n    'test-desktop',\n    'test',\n    'text-wrap',\n    'threats',\n    'ticket',\n    'tools',\n    'tooltip',\n    'transaction-filled',\n    'transaction',\n    'translate',\n    'trash-filled',\n    'trash',\n    'tree',\n    'trigger',\n    'trophy-filled',\n    'trophy',\n    'troubleshooting',\n    'undo',\n    'unlock',\n    'up',\n    'update',\n    'upgrade-filled',\n    'upgrade',\n    'upload',\n    'user-add-filled',\n    'user-add',\n    'user-admin',\n    'user-expert',\n    'user-female-filled',\n    'user-female',\n    'user-filled',\n    'user-manager',\n    'user-new',\n    'user-police',\n    'user-settings',\n    'user-worker',\n    'user',\n    'validation-filled',\n    'validation',\n    'video-filled',\n    'video',\n    'view-filled',\n    'view',\n    'virtual-machine',\n    'vm-maintenance',\n    'voltage',\n    'volume-filled',\n    'volume-low-filled',\n    'volume-low',\n    'volume-mute-filled',\n    'volume-mute',\n    'volume',\n    'vulnerability',\n    'waypoint-filled',\n    'waypoint',\n    'workshop',\n    'zoom-in',\n    'zoom-out'\n];\n","import { commonIcons } from './common-icons';\nimport { SingleIconDefinition } from './iconset.interface';\n\n/** We generate the iconset definition as hardcoding it increases bundle size by ~40kb per iconset */\nexport const uxIconset: ReadonlyArray<SingleIconDefinition> = [\n    ...commonIcons.map<SingleIconDefinition>(uxIconMapper)\n];\n\nfunction uxIconMapper(icon: string): SingleIconDefinition {\n    return { name: icon, iconset: 'ux-icon', icon: `ux-icon-${icon}` };\n}\n","import { inject, Injectable } from '@angular/core';\n \nimport { Subject } from 'rxjs';\nimport { ICON_OPTIONS_TOKEN } from './icon-options.token';\nimport { IconDefinition, SingleIconDefinition } from './iconsets/iconset.interface';\nimport { uxIconset } from './iconsets/ux-iconset';\n\n@Injectable()\nexport class IconService {\n    readonly options = inject(ICON_OPTIONS_TOKEN, { optional: true });\n\n    private readonly _iconService = inject(IconService, { optional: true, skipSelf: true });\n\n    /** Emit whenever the iconset changes */\n    iconsChanged$ = new Subject<IconChangeEvent>();\n\n    /** Store a list of all icon */\n    private _icons: ReadonlyArray<SingleIconDefinition> = [...uxIconset];\n\n    /** Inject a parent service if one exists */\n    constructor() {\n        // if the iconset was defined at the root or child module level apply this configuration\n        if (this.options && this.options.icons) {\n            this.setIcons(this.options.icons);\n        }\n    }\n\n    /** Define multiple icon definitions. This will override icon definitions if a name and size collision occurs */\n    setIcons(icons: ReadonlyArray<IconDefinition>): void {\n        icons.forEach(icon => this.setIcon(icon));\n    }\n\n    /** Provide an icon definition which will override if necessary */\n    setIcon({ name, icon, iconset, size }: IconDefinition): void {\n\n        // if there are multiple sizes specified add them all as individual records\n        if (Array.isArray(size)) {\n            return size.forEach(variant => this.setIcon({ name, icon, iconset, size: variant }));\n        }\n\n        // remove any existing definition with the same parameters\n        this._icons = this._icons.filter(definition => !(definition.name === name && definition.size === size));\n\n        // insert the new definition\n        this._icons = [...this._icons, { name, icon, iconset, size }];\n\n        // emit the icon change\n        this.iconsChanged$.next({ name, size });\n    }\n\n    /** Find an icon based on the given name and size if provided */\n    getIcon(name: string, size?: string): SingleIconDefinition {\n\n        // if no name was specified then do nothing (this can occur if the name input on the component is not initially defined)\n        if (!name) {\n            return;\n        }\n\n        // if there is a size specified then check for an exact match\n        if (size) {\n\n            // get an icon definition that matches both name and size\n            const sizedIcon = this._icons.find(definition => definition.name === name && definition.size === size);\n\n            // if there is a match then return otherwise fallthrough to the default\n            if (sizedIcon) {\n                return sizedIcon;\n            }\n\n        }\n\n        // find a general match with no size constraint\n        const icon = this._icons.find(definition => definition.name === name && definition.size === undefined);\n\n        // if no match is found and there is a parent service then we should check it\n        if (!icon && this._iconService) {\n            return this._iconService.getIcon(name, size);\n        } else if (!icon) {\n            console.warn(`Icon '${name}' was not found.`);\n        }\n\n        return icon;\n    }\n}\n\nexport interface IconChangeEvent {\n    name: string;\n    size?: string;\n}\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { IconService } from './icon.service';\nimport { IconDefinition } from './iconsets/iconset.interface';\n\n@Component({\n    selector: 'ux-icon',\n    template: '',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[style.font-size]': 'size',\n        '[class.ux-flip-horizontal]': 'flipHorizontal',\n        '[class.ux-flip-vertical]': 'flipVertical',\n        '[class.ux-rotate-90]': 'rotate == 90',\n        '[class.ux-rotate-180]': 'rotate == 180',\n        '[class.ux-rotate-270]': 'rotate == 270',\n    }\n})\nexport class IconComponent implements OnChanges, AfterViewInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _iconService = inject(IconService);\n\n    /** Define the icon to display */\n    @Input() name: string;\n\n    /** Define a custom size for the icon */\n    @Input() size: string;\n\n    /** The number of degrees to rotate the icon */\n    @Input() set rotate(rotation: IconRotation | number) {\n        this._rotate = coerceNumberProperty(rotation) as IconRotation;\n    }\n\n    get rotate() {\n        return this._rotate;\n    }\n\n    /** Define if the icon should be horizontally flipped */\n    @Input() set flipHorizontal(flipHorizontal: boolean) {\n        this._flipHorizontal = coerceBooleanProperty(flipHorizontal);\n    }\n\n    get flipHorizontal() {\n        return this._flipHorizontal;\n    }\n\n    /** Define if the icon should be horizontally flipped */\n    @Input() set flipVertical(flipVertical: boolean) {\n        this._flipVertical = coerceBooleanProperty(flipVertical);\n    }\n\n    get flipVertical() {\n        return this._flipVertical;\n    }\n\n    /** Store the matching icon definition */\n    _icon: IconDefinition;\n\n    /** Store the numeric value of rotation */\n    private _rotate: IconRotation;\n\n    /** Store the boolean value of flip vertical */\n    private _flipVertical: boolean = false;\n\n    /** Store the boolean value of flip horizontal */\n    private _flipHorizontal: boolean = false;\n\n    /** Automatically unsubscribe from observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** When inputs change ensure we have the best icon definition */\n    ngOnChanges(changes: SimpleChanges): void {\n\n        // if the name or size changes then update the icon\n        if (changes.name && changes.name.currentValue !== changes.name.previousValue ||\n            changes.size && changes.size.currentValue !== changes.size.previousValue) {\n            this.updateIcon();\n        }\n    }\n\n    /** Watch for changes to the iconset */\n    ngAfterViewInit(): void {\n        // watch for changes to the iconset to check if we need to update.\n        this._iconService.iconsChanged$.pipe(\n            filter(event => this._icon && event.name === this._icon.name),\n            takeUntil(this._onDestroy)\n        ).subscribe(() => this.updateIcon());\n    }\n\n    /** Cleanup on component destroy */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** get the icon definition based on the name and size specified */\n    updateIcon(): void {\n\n        // remove the current icon set and icon classes of the old icon.\n        // note we are using the renderer and not HostBindings as a HostBinding\n        // on the `class` property will override any user added classes which is\n        // not desirable.\n        if (this._icon) {\n            this._renderer.removeClass(this._elementRef.nativeElement, this._icon.iconset);\n            this._renderer.removeClass(this._elementRef.nativeElement, this._icon.icon);\n        }\n\n        // update the stored icon definition with the best match based on name and size\n        this._icon = this._iconService.getIcon(this.name, this.size);\n\n        // add the new icon classes, again using the renderer to avoid overriding user classes\n        if (this._icon) {\n            this._renderer.addClass(this._elementRef.nativeElement, this._icon.iconset);\n            this._renderer.addClass(this._elementRef.nativeElement, this._icon.icon);\n        } else if (this.name) {\n            console.warn(`The icon ${this.name} could not be found. Ensure you are using the correct iconset.`);\n        }\n    }\n}\n\nexport type IconRotation = 90 | 180 | 270;\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ColorService } from '../../services/color/index';\nimport { AlertIconDirective } from './alert-icon.directive';\n\n@Component({\n    selector: 'ux-alert',\n    templateUrl: './alert.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'role': 'alert',\n        '[class.ux-alert-info]': 'type === \"info\" && !_isCustomColor',\n        '[class.ux-alert-error]': 'type === \"error\" && !_isCustomColor',\n        '[class.ux-alert-warning]': 'type === \"warning\" && !_isCustomColor',\n        '[class.ux-alert-success]': 'type === \"success\" && !_isCustomColor',\n        '[class.ux-alert-dark]': 'type === \"dark\" && !_isCustomColor',\n        '[style.background-color]': '_backgroundColor',\n        '[style.color]': '_foregroundColor'\n    }\n})\nexport class AlertComponent {\n\n    private readonly colorService = inject(ColorService);\n\n    /** Determine the style of the alert */\n    @Input() type: AlertType = 'info';\n\n    /** Determine the the alert can be dismissed */\n    @Input() dismissible: boolean = false;\n\n    /** Define a custom background color */\n    @Input() backgroundColor: string;\n\n    /** Define a custom foreground color */\n    @Input() foregroundColor: string;\n\n    /** Define a custom aria label for the dismiss button */\n    @Input() dismissAriaLabel: string = 'Dismiss Alert';\n\n    /** Emit when the dismiss button is pressed */\n    @Output() dismiss = new EventEmitter<void>();\n\n    /** Identify if we have an icon */\n    @ContentChild(AlertIconDirective, { static: false }) icon: AlertIconDirective;\n\n    /** Resolve the background color from the color set */\n    get _backgroundColor(): string {\n        return this.backgroundColor ? this.getColor(this.backgroundColor) : null;\n    }\n\n    /** Resolve the foreground color from the color set */\n    get _foregroundColor(): string {\n        return this.foregroundColor ? this.getColor(this.foregroundColor) : null;\n    }\n\n    /** Determine if we are using a prefined type or custom colors */\n    get _isCustomColor(): boolean {\n        return !!this.backgroundColor && !!this.foregroundColor;\n    }\n\n    private getColor(color: string): string | null {\n        // check if it is a color name from the color palette or just return the CSS color value\n        return this.colorService.resolve(color);\n    }\n\n}\n\nexport type AlertType = 'info' | 'error' | 'warning' | 'success' | 'dark';","@if (icon) {\n  <div class=\"alert-icon\">\n    <ng-content select=\"[uxAlertIcon]\"></ng-content>\n  </div>\n}\n\n<div class=\"alert-content\">\n  <ng-content></ng-content>\n</div>\n\n@if (dismissible) {\n  <button\n    uxFocusIndicator\n    class=\"alert-close\"\n    type=\"button\"\n    (click)=\"dismiss.emit()\"\n    [attr.aria-label]=\"dismissAriaLabel\">\n    <ux-icon name=\"close\" class=\"alert-close-icon\"></ux-icon>\n  </button>\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { IconModuleOptions } from './icon-options.interface';\nimport { ICON_OPTIONS_TOKEN } from './icon-options.token';\nimport { IconComponent } from './icon.component';\nimport { IconService } from './icon.service';\n\n@NgModule({\n    declarations: [\n        IconComponent\n    ],\n    exports: [\n        IconComponent\n    ],\n    providers: [\n        IconService\n    ]\n})\nexport class IconModule {\n\n    /** Allow configuration at AppModule level */\n    static forRoot(options?: IconModuleOptions): ModuleWithProviders<IconModule> {\n        return {\n            ngModule: IconModule,\n            providers: [\n                { provide: ICON_OPTIONS_TOKEN, useValue: options }\n            ]\n        };\n    }\n\n    /** Allow configuration at a child module level */\n    static forChild(options?: IconModuleOptions): ModuleWithProviders<IconModule> {\n        // the `forChild` does the same as `forRoot` however this having\n        // `forChild` follows the correct conventions as we should never\n        // import `forRoot` in a child module\n        return IconModule.forRoot(options);\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/index';\nimport { AlertIconDirective } from './alert-icon.directive';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        IconModule\n    ],\n    declarations: [\n        AlertComponent,\n        AlertIconDirective\n    ],\n    exports: [\n        AlertComponent,\n        AlertIconDirective\n    ]\n})\nexport class AlertModule { }","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'ux-breadcrumbs',\n    templateUrl: './breadcrumbs.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbsComponent {\n\n    /** The list of breadcrumbs to display. */\n    @Input() crumbs: ReadonlyArray<Breadcrumb>;\n\n    clickCrumb(event: MouseEvent, crumb: Breadcrumb) {\n        if (crumb.onClick) {\n            crumb.onClick.call(null, event);\n        }\n    }\n}\n\nexport interface Breadcrumb {\n    title: string;\n    routerLink?: string;\n    fragment?: string;\n    queryParams?: unknown;\n    onClick?: (event: MouseEvent) => void;\n}","<nav aria-label=\"Breadcrumb\">\n  <ol class=\"breadcrumb\">\n    @for (crumb of crumbs; track crumb) {\n      <li>\n        <!-- If there is a router link or an onClick function then use a tag -->\n        @if (crumb.routerLink) {\n          <a\n            uxFocusIndicator\n            tabindex=\"0\"\n            [routerLink]=\"crumb.routerLink\"\n            [fragment]=\"crumb.fragment\"\n            [queryParams]=\"crumb.queryParams\"\n            (click)=\"clickCrumb($event, crumb)\"\n            >\n            {{ crumb.title }}\n          </a>\n        }\n        @if (crumb.onClick && !crumb.routerLink) {\n          <a\n            uxFocusIndicator\n            tabindex=\"0\"\n            (click)=\"clickCrumb($event, crumb)\"\n            >\n            {{ crumb.title }}\n          </a>\n        }\n        <!-- If there is no router link or onClick function then display text in a span -->\n        @if (!crumb.routerLink && !crumb.onClick) {\n          <span>{{ crumb.title }}</span>\n        }\n      </li>\n    }\n  </ol>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { BreadcrumbsComponent } from './breadcrumbs.component';\n\n@NgModule({\n  imports: [AccessibilityModule, CommonModule, RouterModule],\n  exports: [BreadcrumbsComponent],\n  declarations: [BreadcrumbsComponent],\n})\nexport class BreadcrumbsModule {}\n","import { inject, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\n@Injectable()\nexport class ResizeService implements OnDestroy {\n  private readonly _zone = inject(NgZone);\n\n  private readonly _observer = new ResizeObserver(this.elementDidResize.bind(this));\n\n  private readonly _targets = new WeakMap<HTMLElement, ReplaySubject<ResizeDimensions>>();\n\n  ngOnDestroy(): void {\n    this._observer.disconnect();\n  }\n\n  addResizeListener(target: HTMLElement): ReplaySubject<ResizeDimensions> {\n    this._zone.runOutsideAngular(() => this._observer.observe(target));\n\n    if (this._targets.has(target)) {\n      return this._targets.get(target);\n    } else {\n      const emitter = new ReplaySubject<ResizeDimensions>();\n      this._targets.set(target, emitter);\n      return emitter;\n    }\n  }\n\n  removeResizeListener(target: HTMLElement): void {\n    this._observer.unobserve(target);\n  }\n\n  private elementDidResize(entries: ResizeObserverEntry[]): void {\n    this._zone.run(() => {\n      for (const entry of entries) {\n        if (this._targets.has(entry.target as HTMLElement)) {\n          const emitter = this._targets.get(entry.target as HTMLElement);\n          emitter.next({\n            width: (entry.target as HTMLElement).offsetWidth,\n            height: (entry.target as HTMLElement).offsetHeight,\n          });\n        }\n      }\n    });\n  }\n}\n\nexport interface ResizeDimensions {\n  width: number;\n  height: number;\n}\n","import { Directive, ElementRef, EventEmitter, inject, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResizeDimensions, ResizeService } from './resize.service';\n\n@Directive({\n    selector: '[uxResize]',\n    providers: [ResizeService]\n})\nexport class ResizeDirective implements OnInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _resizeService = inject(ResizeService);\n\n    private readonly _ngZone = inject(NgZone);\n\n    /** Debounce the resize event emitter */\n    @Input() throttle: number = 0;\n\n    /** Emits whenever a resize event occurs */\n    @Output() uxResize: EventEmitter<ResizeDimensions> = new EventEmitter<ResizeDimensions>();\n\n    /** Remove all subscriptions on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        this._resizeService.addResizeListener(this._elementRef.nativeElement)\n            .pipe(takeUntil(this._onDestroy), debounceTime(this.throttle))\n            .subscribe((event: ResizeDimensions) => this._ngZone.run(() => this.uxResize.emit(event)));\n    }\n\n    ngOnDestroy(): void {\n        this._resizeService.removeResizeListener(this._elementRef.nativeElement);\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}","import { NgModule } from '@angular/core';\n\nimport { ResizeDirective } from './resize.directive';\nimport { ResizeService } from './resize.service';\n\n@NgModule({\n    exports: [ResizeDirective],\n    declarations: [ResizeDirective],\n    providers: [ResizeService]\n})\nexport class ResizeModule { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[uxCardTabContent]'\n})\nexport class CardTabContentDirective { }\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CardTabComponent } from './card-tab/card-tab.component';\n\n@Injectable()\nexport class CardTabsService implements OnDestroy {\n\n    tab$ = new BehaviorSubject<CardTabComponent>(null);\n    tabs$ = new BehaviorSubject<CardTabComponent[]>([]);\n    position$ = new BehaviorSubject<string>('top');\n\n    private readonly _subscription: Subscription;\n\n    constructor() {\n\n        // when a tab is added or removed ensure we always select one if any are available\n        this._subscription = this.tabs$.pipe(\n            filter(tabs => !this.tab$.value || !tabs.find(tab => tab === this.tab$.value)),\n        ).subscribe(tabs => this.tab$.next(tabs.length > 0 ? tabs[0] : null));\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    /**\n     * Add a tab to the list of tabs\n     */\n    addTab(tab: CardTabComponent): void {\n        this.tabs$.next([...this.tabs$.value, tab]);\n    }\n\n    /**\n     * Remove a tab from the list\n     */\n    removeTab(tab: CardTabComponent): void {\n        this.tabs$.next(this.tabs$.value.filter(_tab => _tab !== tab));\n    }\n\n    /**\n     * Select the tab\n     */\n    select(tab: CardTabComponent): void {\n        this.tab$.next(tab);\n    }\n\n    /**\n     * Set the position of the tab content\n     */\n    setPosition(position: string): void {\n        this.position$.next(position);\n    }\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, inject, OnDestroy, TemplateRef } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CardTabsService } from '../card-tabs.service';\nimport { CardTabContentDirective } from './card-tab-content.directive';\n\n@Component({\n    selector: 'ux-card-tab',\n    templateUrl: './card-tab.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardTabComponent implements OnDestroy {\n\n    private readonly _tabService = inject(CardTabsService);\n\n    active$: Observable<boolean> = this._tabService.tab$.pipe(map(tab => tab === this));\n    @ContentChild(CardTabContentDirective, { read: TemplateRef, static: false }) content: TemplateRef<void>;\n\n    constructor() {\n        this._tabService.addTab(this);\n    }\n\n    ngOnDestroy(): void {\n        this._tabService.removeTab(this);\n    }\n\n}\n","@if (active$ | async) {<ng-content></ng-content>}","import { Component, ElementRef, HostBinding, inject, Input, ViewChild } from '@angular/core';\nimport { ResizeDimensions } from '../../../directives/resize';\nimport { CardTabComponent } from '../card-tab/card-tab.component';\nimport { CardTabsService } from '../card-tabs.service';\n\n@Component({\n    selector: 'ux-card-tabset',\n    templateUrl: './card-tabset.component.html',\n    providers: [CardTabsService]\n})\nexport class CardTabsetComponent {\n\n    tabService = inject(CardTabsService);\n\n    @HostBinding('class')\n    @Input() set position(direction: string) {\n        this.tabService.setPosition(direction);\n    }\n\n    get position(): string {\n        return this.tabService.position$.getValue();\n    }\n\n    @ViewChild('tablist', { static: true }) tablist: ElementRef;\n\n    offset: number = 0;\n    bounds: CardTabsBounds = { lower: 0, upper: 0 };\n\n    private _width: number;\n    private _innerWidth: number;\n\n    select(tab: CardTabComponent, element: HTMLElement): void {\n        // select the tab\n        this.tabService.select(tab);\n\n        // ensure the tab is moved into view if required\n        this.moveIntoView(element);\n    }\n\n    resize(dimensions: ResizeDimensions): void {\n        this._width = dimensions.width;\n        this._innerWidth = this.tablist.nativeElement.scrollWidth;\n\n        this.bounds.lower = 0;\n        this.bounds.upper = -(this._innerWidth - this._width);\n    }\n\n    previous(): void {\n        this.offset += this._width;\n\n        // ensure it remains within the allowed bounds\n        this.offset = Math.min(this.offset, this.bounds.lower);\n    }\n\n    next(): void {\n        this.offset -= this._width;\n\n        // ensure it remains within the allowed bounds\n        this.offset = Math.max(this.offset, this.bounds.upper);\n    }\n\n    private moveIntoView(element: HTMLElement): void {\n\n        // if we dont have the dimensions we cant check\n        if (!this._width || !this._innerWidth) {\n            return;\n        }\n\n        // get the current element bounds\n        const { offsetLeft, offsetWidth } = element;\n        const { marginLeft, marginRight } = getComputedStyle(element);\n\n        // calculate the visible area\n        const viewportStart = Math.abs(this.offset);\n        const viewportEnd = viewportStart + this._width;\n        const cardWidth = parseFloat(marginLeft) + offsetWidth + parseFloat(marginRight);\n\n        // if we need to move to the left - figure out how much\n        if (offsetLeft < viewportStart) {\n            this.offset -= (offsetLeft - parseFloat(marginLeft)) - viewportStart;\n        }\n\n        // if we need to move to the right - figure out how much\n        if ((offsetLeft + cardWidth) > viewportEnd) {\n            this.offset -= (offsetLeft + cardWidth) - viewportEnd;\n        }\n    }\n}\n\nexport interface CardTabsBounds {\n    lower: number;\n    upper: number;\n}\n","@if ((tabService.tab$ | async)) {\n  <div class=\"card-tab-content\" role=\"tabpanel\">\n    <ng-content></ng-content>\n  </div>\n}\n\n<div class=\"card-tabs\" #tabs>\n\n  @if (offset < bounds.lower) {\n    <button type=\"button\" class=\"card-tabs-paging-btn card-tabs-paging-btn-previous\" aria-label=\"Previous Tabs\" (click)=\"previous()\">\n      <ux-icon name=\"previous\"></ux-icon>\n    </button>\n  }\n\n  <div class=\"card-tabs-list\" role=\"tablist\" #tablist (uxResize)=\"resize($event)\" [style.transform]=\"'translateX(' + offset + 'px)'\">\n\n    @for (tab of tabService.tabs$ | async; track tab) {\n      <div class=\"card-tab\"\n        role=\"tab\"\n        tabindex=\"0\" #card\n        [ngClass]=\"tabService.position$ | async\"\n        [class.active]=\"tab.active$ | async\"\n        [attr.aria-selected]=\"tab.active$ | async\"\n        (click)=\"select(tab, card)\"\n        (focus)=\"tabs.scrollLeft = 0\"\n        (keydown.enter)=\"select(tab, card)\">\n        <ng-container [ngTemplateOutlet]=\"tab.content\"></ng-container>\n      </div>\n    }\n\n  </div>\n\n  @if (offset > bounds.upper) {\n    <button type=\"button\" class=\"card-tabs-paging-btn card-tabs-paging-btn-next\" aria-label=\"Next Tabs\" (click)=\"next()\">\n      <ux-icon name=\"next\"></ux-icon>\n    </button>\n  }\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { IconModule } from '../icon/index';\nimport { CardTabContentDirective } from './card-tab/card-tab-content.directive';\nimport { CardTabComponent } from './card-tab/card-tab.component';\nimport { CardTabsetComponent } from './card-tabset/card-tabset.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ResizeModule,\n        IconModule\n    ],\n    declarations: [\n        CardTabsetComponent,\n        CardTabComponent,\n        CardTabContentDirective\n    ],\n    exports: [\n        CardTabsetComponent,\n        CardTabComponent,\n        CardTabContentDirective\n    ]\n})\nexport class CardTabsModule { }\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n    selector: 'ux-menu-divider',\n    templateUrl: './menu-divider.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        role: 'separator'\n    }\n})\nexport class MenuDividerComponent { }\n","","/**\n * This is used to avoid having to do an `instanceof` check\n * which would cause a circular dependency between the\n * `MenuComponent` and `MenuItemComponent`\n */\nexport enum MenuItemType {\n    Default,\n    Custom\n}","import { InjectionToken } from '@angular/core';\nimport { MenuModuleOptions } from './menu-options.interface';\n\nexport const MENU_OPTIONS_TOKEN = new InjectionToken<MenuModuleOptions>('MENU_OPTIONS_TOKEN');","import { animate, style, transition, trigger } from '@angular/animations';\nimport { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y';\nimport { TAB } from '@angular/cdk/keycodes';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, Output, QueryList, SimpleChanges, TemplateRef, ViewChild, ViewRef, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, merge } from 'rxjs';\nimport { map, switchMap, takeUntil } from 'rxjs/operators';\nimport { AnchorAlignment, AnchorPlacement } from '../../../common/overlay/index';\nimport { MenuItemType } from '../menu-item/menu-item-type.enum';\nimport { MenuItemComponent } from '../menu-item/menu-item.component';\nimport { MENU_OPTIONS_TOKEN } from '../menu-options.token';\nimport { MenuTabbableItemDirective } from '../menu-tabbable-item/menu-tabbable-item.directive';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-menu',\n    templateUrl: './menu.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [\n        trigger('menuAnimation', [\n            transition(':enter', [\n                style({ opacity: 0, transform: 'scaleY(0)' }),\n                animate('200ms ease-out', style({ opacity: 1, transform: 'none' })),\n            ]),\n            transition(':leave', [\n                animate('200ms ease-out', style({ opacity: 0, transform: 'scaleY(0)' }))\n            ])\n        ]),\n    ]\n})\nexport class MenuComponent implements AfterContentInit, OnDestroy, OnChanges {\n    private readonly _options = inject(MENU_OPTIONS_TOKEN, { optional: true });\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** A unique id for the component. */\n    @Input() @HostBinding('attr.id') id: string = `ux-menu-${++uniqueId}`;\n\n    /** Define the position of the menu */\n    @Input() placement: AnchorPlacement = 'bottom';\n\n    /** Define the alignment of the menu */\n    @Input() alignment: AnchorAlignment = 'start';\n\n    /** Define if we should animate the menu */\n    // eslint-disable-next-line no-prototype-builtins\n    @Input() animate: boolean = this._options && this._options.hasOwnProperty('animate') ? this._options.animate : true;\n\n    /** Forward any classes to the actual menu element */\n    @Input() menuClass: string;\n\n    /** Emit when the opening has begun (the opened EventEmitter waits until the animation has finished) */\n    @Output() readonly opening = new EventEmitter<void>();\n\n    /** Emit when the menu is opened */\n    @Output() readonly opened = new EventEmitter<void>();\n\n    /** Emit whenever closing has begun (the closed EventEmitter waits until animation has finished) */\n    @Output() readonly closing = new EventEmitter<void>();\n\n    /** Emit when the menu is closed */\n    @Output() readonly closed = new EventEmitter<void>();\n\n    /** Access the menu content template */\n    @ViewChild(TemplateRef, { static: false }) templateRef: TemplateRef<void>;\n\n    /** Store the menu open state */\n    isMenuOpen: boolean = false;\n\n    /** Store the animation state */\n    _isAnimating: boolean = false;\n\n    /** Determine if this is a submenu */\n    _isSubMenu: boolean = false;\n\n    /** Handle keyboard interactions */\n    _keyManager: FocusKeyManager<MenuItemComponent | MenuTabbableItemDirective>;\n\n    /** Whether this menu should close when it loses focus */\n    _closeOnBlur: boolean = false;\n\n    /** Emit when the focused item changes (we use this as the key manager is not instantiated until a late lifecycle hook) */\n    readonly _activeItem$ = new BehaviorSubject<MenuItemComponent | MenuTabbableItemDirective>(null);\n\n    /** Access allow a close event to propagate all the way up the submenus */\n    readonly _closeAll$ = new Subject<FocusOrigin | 'tabout'>();\n\n    /** Emit keyboard events */\n    readonly _onKeydown$ = new Subject<KeyboardEvent>();\n\n    /** Emit hover events */\n    readonly _isHovering$ = new BehaviorSubject<boolean>(false);\n\n    /** Emit focus events */\n    readonly _isFocused$ = new BehaviorSubject<boolean>(false);\n\n    /** Emit placement change */\n    readonly _placement$ = new BehaviorSubject<AnchorPlacement>('bottom');\n    readonly _alignment$ = new BehaviorSubject<AnchorAlignment>('start');\n\n    /** Access all child menu items for accessibility purposes */\n    private readonly _items$ = new BehaviorSubject<(MenuItemComponent | MenuTabbableItemDirective)[]>([]);\n\n    /** Automatically unsubscribe when the component is destroyed */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    private _isTabPressed = false;\n\n    /** Get innerId for use for accessibility  */\n    get innerId(): string {\n       return `${this.id}-menu`;\n    }\n\n    get _isExpanded(): Observable<boolean> {\n        return this._menuItems.pipe(switchMap(items => merge(...items.map(item => item.isExpanded$))), takeUntil(this._onDestroy$));\n    }\n\n    get _menuItemClick(): Observable<FocusOrigin> {\n        return this._menuItems.pipe(switchMap(items => merge(...items.map(item => item.onClick$))), takeUntil(this._onDestroy$));\n    }\n\n    /** Return only menu items an not custom tabbable items */\n    private get _menuItems(): Observable<MenuItemComponent[]> {\n        return this._items$.pipe(map(items => items.filter(item => item.type === MenuItemType.Default) as MenuItemComponent[]));\n    }\n\n    /** Create an internal querylist to store the menu items */\n    private readonly _itemsList = new QueryList<MenuItemComponent | MenuTabbableItemDirective>();\n\n    ngAfterContentInit(): void {\n\n        // initialise the query list with the items\n        this._items$.pipe(takeUntil(this._onDestroy$)).subscribe(items => {\n            // if no items has been marked as tabbable then this should be\n            if (!this._activeItem$.value && items.length > 0) {\n                this._activeItem$.next(items[0]);\n            }\n\n            this._itemsList.reset(items);\n            this._itemsList.notifyOnChanges();\n        });\n\n        // setup keyboard functionality\n        this._keyManager = new FocusKeyManager<MenuItemComponent | MenuTabbableItemDirective>(this._itemsList)\n            .withVerticalOrientation()\n            .withTypeAhead()\n            .withWrap();\n\n        // emit the tabbable item on change\n        this._keyManager.change.pipe(map(() => this._keyManager.activeItem), takeUntil(this._onDestroy$))\n            .subscribe(item => this._activeItem$.next(item));\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n\n        if (changes.placement && changes.placement.currentValue !== changes.placement.previousValue) {\n            this._placement$.next(changes.placement.currentValue);\n        }\n\n        if (changes.alignment && changes.alignment.currentValue !== changes.alignment.previousValue) {\n            this._alignment$.next(changes.alignment.currentValue);\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n        this._closeAll$.complete();\n        this._isHovering$.complete();\n        this._isFocused$.complete();\n        this._activeItem$.complete();\n        this._items$.complete();\n        this._placement$.complete();\n    }\n\n    /** Register a menu item - we do this do avoid `@ContentChildren` detecting submenu items */\n    _addItem(item: MenuItemComponent | MenuTabbableItemDirective): void {\n        if (!this.hasItem(item)) {\n            this._items$.next([...this._items$.value, item]);\n        }\n    }\n\n    /** Remove an item */\n    _removeItem(item: MenuItemComponent | MenuTabbableItemDirective): void {\n        if (this.hasItem(item)) {\n            this._items$.next(this._items$.value.filter(_item => _item !== item));\n        }\n    }\n\n    /** Determine if an item exists */\n    private hasItem(item: MenuItemComponent | MenuTabbableItemDirective): boolean {\n        return !!this._items$.value.find(_item => _item === item);\n    }\n\n    /** Internal function to set the open state and run change detection */\n    _setMenuOpen(menuOpen: boolean): void {\n\n        // store the open state\n        this.isMenuOpen = menuOpen;\n\n        // if we are closing the menu reset some values\n        if (!menuOpen) {\n            this._isHovering$.next(false);\n            this._isFocused$.next(false);\n        }\n\n        // the change detector is actually an instance of a ViewRef (which extends ChangeDetectorRef) when used within a component\n        // and the ViewRef contains the destroyed state of the component which is more reliable\n        // than setting a flag in ngOnDestroy as the component can be destroyed before\n        // the lifecycle hook is called\n        const viewRef = this._changeDetector as ViewRef;\n\n        // check for changes - required to show the menu as we are using `*ngIf`\n        if (!viewRef.destroyed) {\n            this._changeDetector.detectChanges();\n        }\n\n        // emit the closing event\n        menuOpen ? this.opening.emit() : this.closing.emit();\n    }\n\n    /** Close the menu if the focus event is null */\n    _focusChange(event) {\n        if (event === null && this._closeOnBlur && this._isTabPressed) {\n            this._closeAll$.next('tabout');\n        }\n    }\n\n    /** Track the animation state */\n    _onAnimationStart(): void {\n        this._isAnimating = true;\n    }\n\n    /** Track animation state and emit event when opening or closing */\n    _onAnimationDone(): void {\n        this._isAnimating = false;\n\n        if (this.isMenuOpen) {\n            this.opened.emit();\n        } else {\n            this.closed.emit();\n        }\n    }\n\n    _closeMenu(): void {\n        this._setMenuOpen(false);\n    }\n\n    /** Forward any keyboard events to the key manage for accessibility */\n    _onKeydown(event: KeyboardEvent): void {\n        this._keyManager.setFocusOrigin('keyboard').onKeydown(event);\n\n        // emit the keydown event\n        this._onKeydown$.next(event);\n    }\n\n    _onHoverStart(): void {\n        this._isHovering$.next(true);\n    }\n\n    _onHoverEnd(): void {\n        this._isHovering$.next(false);\n    }\n\n    _onFocus(): void {\n        this._isFocused$.next(true);\n    }\n\n    _onBlur(): void {\n        this._isFocused$.next(false);\n    }\n\n    _onKeyDown(event: KeyboardEvent): void {\n        this._isTabPressed = event.keyCode === TAB;\n    }\n\n}\n","<ng-template>\n  @if (isMenuOpen) {\n    <div\n      class=\"ux-menu\"\n      role=\"menu\"\n      [id]=\"innerId\"\n      [class.ux-sub-menu]=\"_isSubMenu\"\n      [ngClass]=\"menuClass\"\n      @menuAnimation\n      [@.disabled]=\"!animate\"\n      (@menuAnimation.start)=\"_onAnimationStart()\"\n      (@menuAnimation.done)=\"_onAnimationDone()\"\n      (mouseenter)=\"_onHoverStart()\"\n      (mouseover)=\"_onHoverStart()\"\n      (mouseleave)=\"_onHoverEnd()\"\n      (focusin)=\"_onFocus()\"\n      (focusout)=\"_onBlur()\"\n      (keydown)=\"_onKeyDown($event)\"\n      cdkMonitorSubtreeFocus\n      [cdkTrapFocus]=\"_closeOnBlur\"\n      (cdkFocusChange)=\"_focusChange($event)\">\n      <ng-content></ng-content>\n    </div>\n  }\n</ng-template>\n","import { Directive, ElementRef, inject, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MenuComponent } from '../menu/menu.component';\n\n@Directive({ selector: '[uxMenuInitialFocus]' })\nexport class MenuInitialFocusDirective implements OnInit, OnDestroy {\n    private readonly _menu = inject(MenuComponent);\n\n    private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        this.ensureFocusable();\n\n        // Focus the host element when the parent menu is opened.\n        this._menu.opened\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(() => {\n                this._elementRef.nativeElement.focus();\n            });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Apply tabindex=\"0\" to the element if it's not already focusable. */\n    private ensureFocusable(): void {\n        if (this._elementRef.nativeElement.tabIndex >= 0) {\n            return;\n        }\n\n        this._renderer.setAttribute(this._elementRef.nativeElement, 'tabindex', '0');\n    }\n}\n","import { FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, HostListener, inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FocusIndicator, FocusIndicatorService } from '../../../directives/accessibility/index';\nimport { MenuItemType } from '../menu-item/menu-item-type.enum';\nimport { MenuComponent } from '../menu/menu.component';\n\n@Directive({\n    selector: '[uxMenuTabbableItem]',\n})\nexport class MenuTabbableItemDirective implements OnInit, OnDestroy, FocusableOption {\n    protected readonly _menu = inject(MenuComponent);\n\n    protected readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    protected readonly _focusIndicatorService = inject(FocusIndicatorService);\n\n    protected readonly _renderer = inject(Renderer2);\n\n    /** Define if this item is disabled or not */\n    @Input() disabled: boolean = false;\n\n    /** Indicate the type of the menu item */\n    readonly type: MenuItemType = MenuItemType.Default;\n\n    /** Store the focus indicator instance */\n    protected focusIndicator: FocusIndicator;\n\n    /** Automatically unsubscribe when directive is destroyed */\n    protected _onDestroy$ = new Subject<void>();\n\n    ngOnInit(): void {\n        // register this item in the MenuComponent\n        this._menu._addItem(this);\n\n        // we only want to show the focus indicator whenever the keyboard is used\n        this.focusIndicator = this._focusIndicatorService.monitor(this._elementRef.nativeElement);\n\n        // subscribe to active item changes\n        this._menu._activeItem$.pipe(takeUntil(this._onDestroy$))\n            .subscribe(item => this.setTabIndex(item === this));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n        this.focusIndicator.destroy();\n    }\n\n    /** Focus this item with a given origin */\n    focus(origin: FocusOrigin): void {\n        this.focusIndicator.focus(origin);\n    }\n\n    /** This function is built into the CDK manager to allow jumping to items based on text content */\n    getLabel(): string {\n        return this._elementRef.nativeElement.textContent.trim();\n    }\n\n    /** Forward any keyboard events to the MenuComponent for accessibility */\n    @HostListener('keydown', ['$event'])\n    _onKeydown(event: KeyboardEvent): void {\n        this._menu._onKeydown(event);\n    }\n\n    /** Update the tab index on this item */\n    protected setTabIndex(isTabbable: boolean): void {\n        this._renderer.setAttribute(this._elementRef.nativeElement, 'tabindex', isTabbable ? '0' : '-1');\n    }\n\n}\n","import { FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\nimport { Directive, inject, InjectionToken, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { FocusableControl } from '../interfaces/focusable-control.interface';\nimport { MenuItemType } from '../menu-item/menu-item-type.enum';\nimport { MenuTabbableItemDirective } from '../menu-tabbable-item/menu-tabbable-item.directive';\n\nexport const FocusableItemToken = new InjectionToken<FocusableControl>('Focusable Option');\n\n@Directive({\n    selector: '[uxMenuItemCustomControl]',\n    host: {\n        '[class.ux-menu-item]': 'true',\n        'role': 'menuitem'\n    }\n})\nexport class MenuItemCustomControlDirective extends MenuTabbableItemDirective implements FocusableOption, OnInit, OnDestroy {\n    private readonly _focusableControl = inject(FocusableItemToken, { optional: true });\n\n    /** Indicate the type of the menu item */\n    readonly type: MenuItemType = MenuItemType.Custom;\n\n    constructor() {\n        super();\n    }\n\n    ngOnInit(): void {\n        // register this item in the MenuComponent\n        super.ngOnInit();\n\n        this._menu.opened\n            .pipe(takeUntil(this._onDestroy$))\n            .subscribe(() => {\n                // remove any existing tab index on component instance and have it handled by this directive\n                this._focusableControl?.setInputTabIndex(-1);\n            });\n    }\n\n    /** Focus this item with a given origin */\n    focus(origin: FocusOrigin): void {\n        super.focus(origin);\n        this._focusableControl ? this._focusableControl.focus(origin) : this._elementRef.nativeElement.focus();\n    }\n\n    /** We want to remove the ability to shift+tab back into the parent element */\n    protected setTabIndex(): void {\n        super.setTabIndex(false);\n    }\n}\n","import { FocusableOption, FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { isKeyboardTrigger } from '../../../common/index';\nimport { FocusIndicator, FocusIndicatorService } from '../../../directives/accessibility/index';\nimport { MenuComponent } from '../menu/menu.component';\nimport { MenuItemType } from './menu-item-type.enum';\n\n@Component({\n    selector: '[uxMenuItem]',\n    templateUrl: './menu-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[attr.disabled]': 'disabled ? \"disabled\" : null',\n        '[attr.role]': 'role',\n        '[class.disabled]': 'disabled',\n        '[class.ux-menu-item]': 'true',\n        '[class.open]': 'isOpen'\n    }\n})\nexport class MenuItemComponent implements OnInit, OnDestroy, FocusableOption {\n    private readonly _menu = inject(MenuComponent);\n\n    private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    private readonly _focusIndicatorService = inject(FocusIndicatorService);\n\n    private readonly _renderer = inject(Renderer2);\n\n    /** Define if this item is disabled or not */\n    @Input() set disabled(disabled: boolean) {\n        this._disabled = coerceBooleanProperty(disabled);\n    }\n\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /** Determine if the menu should close on item click/enter.*/\n    @Input() set closeOnSelect(value: boolean) {\n        this._closeOnSelect = coerceBooleanProperty(value);\n    }\n\n    get closeOnSelect(): boolean {\n        return this._closeOnSelect;\n    }\n\n    /** Define the role of the element */\n    @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' = 'menuitem';\n\n    /** Emits when the menu item is clicked or the enter key is pressed. */\n    @Output() activate = new EventEmitter<MouseEvent | KeyboardEvent>();\n\n    /** Access the open state */\n    get isOpen(): boolean {\n        return this._menu.isMenuOpen;\n    }\n\n    /** Indicate the type of the menu item */\n    readonly type: MenuItemType = MenuItemType.Default;\n\n    /** Store the current hover state */\n    readonly isHovered$ = new BehaviorSubject<boolean>(false);\n\n    /** Store the current focus state */\n    readonly isFocused$ = new BehaviorSubject<boolean>(false);\n\n    /** Store the current expanded state */\n    readonly isExpanded$ = new BehaviorSubject<boolean>(false);\n\n    /** Emit when an item is clicked */\n    readonly onClick$ = new Subject<FocusOrigin>();\n\n    /** Store the focus indicator instance */\n    private _focusIndicator: FocusIndicator;\n\n    /** Automatically unsubscribe from observables on destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    private _disabled: boolean = false;\n\n    private _closeOnSelect: boolean = true;\n\n    ngOnInit(): void {\n        // register this item in the MenuComponent\n        this._menu._addItem(this);\n\n        // we only want to show the focus indicator whenever the keyboard is used\n        this._focusIndicator = this._focusIndicatorService.monitor(this._elementRef.nativeElement);\n\n        // subscribe to active item changes\n        this._menu._activeItem$.pipe(takeUntil(this._onDestroy$))\n            .subscribe(item => this.setTabIndex(item === this));\n    }\n\n    ngOnDestroy(): void {\n        this._menu._removeItem(this);\n        this.isHovered$.complete();\n        this.isExpanded$.complete();\n        this.isFocused$.complete();\n        this.onClick$.complete();\n        this._focusIndicator.destroy();\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    focus(origin: FocusOrigin): void {\n        this._focusIndicator.focus(origin);\n    }\n\n    /** This function is built into the CDK manager to allow jumping to items based on text content */\n    getLabel(): string {\n        return this._elementRef.nativeElement.textContent.trim();\n    }\n\n    @HostListener('mouseenter')\n    _onMouseEnter(): void {\n        this.isHovered$.next(true);\n    }\n\n    @HostListener('mouseleave')\n    _onMouseLeave(): void {\n        this.isHovered$.next(false);\n    }\n\n    @HostListener('focus')\n    _onFocus(): void {\n        this.isFocused$.next(true);\n    }\n\n    @HostListener('blur')\n    _onBlur(): void {\n        this.isFocused$.next(false);\n    }\n\n    @HostListener('click', ['$event'])\n    @HostListener('keydown.enter', ['$event'])\n    _onClick(event: MouseEvent | KeyboardEvent): void {\n        if (!this.disabled) {\n            if (this.closeOnSelect) {\n                this.onClick$.next(isKeyboardTrigger(event) ? 'keyboard' : 'mouse');\n            }\n            this.activate.emit(event);\n        }\n    }\n\n    /** Forward any keyboard events to the MenuComponent for accessibility */\n    @HostListener('keydown', ['$event'])\n    _onKeydown(event: KeyboardEvent): void {\n        this._menu._onKeydown(event);\n    }\n\n    /** Update the tab index on this item */\n    private setTabIndex(isTabbable: boolean): void {\n        this._renderer.setAttribute(this._elementRef.nativeElement, 'tabindex', isTabbable ? '0' : '-1');\n    }\n\n    static ngAcceptInputType_disabled: boolean | string;\n    static ngAcceptInputType_closeOnSelect: BooleanInput;\n}\n","<ng-content></ng-content>\n","import {\n    ConnectedPosition,\n    FlexibleConnectedPositionStrategy,\n    HorizontalConnectionPos,\n    OriginConnectionPosition,\n    OverlayConnectionPosition,\n    OverlayRef,\n    VerticalConnectionPos\n} from '@angular/cdk/overlay';\nimport { Injectable } from '@angular/core';\nimport { AnchorPlacement } from '../../common/overlay/index';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class OverlayPlacementService {\n\n    /** Updates the position of the current menu. */\n    updatePosition(\n        overlayRef: OverlayRef,\n        placement: string,\n        alignment: string,\n        customFallbackPlacement?: AnchorPlacement,\n    ): void {\n        const position = overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n        const origin = this.getOrigin(placement, alignment);\n        const overlay = this.getOverlayPosition(placement, alignment);\n\n        position.withPositions(this.addPositions(origin, overlay, customFallbackPlacement));\n    }\n\n    /** Apply position to position strategy */\n    private addPositions(\n        origin: OriginConnectedPositions,\n        overlay: OverlayConnectedPositions,\n        customFallbackPlacement: AnchorPlacement\n    ): ConnectedPosition[] {\n        if (customFallbackPlacement) {\n            return [\n                { ...origin.main, ...overlay.main },\n                this.getFallbackPosition(customFallbackPlacement),\n            ];\n        } else {\n            return [\n                { ...origin.main, ...overlay.main },\n                { ...origin.fallback, ...overlay.fallback },\n                { ...{ originX: origin.main.originX, originY: this.invertHorizontalPosition(origin.main.originY) }, ...{ overlayX: overlay.main.overlayX, overlayY: this.invertHorizontalPosition(overlay.main.overlayY) } },\n                { ...{ originX: origin.fallback.originX, originY: this.invertHorizontalPosition(origin.fallback.originY) }, ...{ overlayX: overlay.fallback.overlayX, overlayY: this.invertHorizontalPosition(overlay.fallback.overlayY) } }\n            ];\n        }\n    }\n\n    /** Get the origin position based on the specified tooltip placement */\n    private getOrigin(\n        initialPlacement: string,\n        alignment: string\n    ): OriginConnectedPositions {\n        // ensure placement is defined\n        const placement = initialPlacement || 'bottom';\n        let originPosition: OriginConnectionPosition;\n\n        if (placement === 'top' || placement === 'bottom') {\n            originPosition = { originX: alignment as HorizontalConnectionPos, originY: placement };\n        }\n\n        if (placement === 'left') {\n            originPosition = { originX: 'start', originY: this.getVerticalAlignment(alignment) };\n        }\n\n        if (placement === 'right') {\n            originPosition = { originX: 'end', originY: this.getVerticalAlignment(alignment) };\n        }\n\n        const { x, y } = this.invertPosition(placement, originPosition!.originX, originPosition!.originY);\n\n        return {\n            main: originPosition,\n            fallback: { originX: x, originY: y },\n        };\n    }\n\n    /** Calculate the overlay position based on the specified tooltip placement */\n    private getOverlayPosition(\n        initialPlacement: string,\n        alignment: string\n    ): OverlayConnectedPositions {\n        // ensure placement is defined\n        const placement = initialPlacement || 'top';\n        let overlayPosition: OverlayConnectionPosition;\n\n        if (placement === 'top') {\n            overlayPosition = { overlayX: alignment as HorizontalConnectionPos, overlayY: 'bottom' };\n        }\n\n        if (placement === 'bottom') {\n            overlayPosition = { overlayX: alignment as HorizontalConnectionPos, overlayY: 'top' };\n        }\n\n        if (placement === 'left') {\n            overlayPosition = { overlayX: 'end', overlayY: this.getVerticalAlignment(alignment) };\n        }\n\n        if (placement === 'right') {\n            overlayPosition = { overlayX: 'start', overlayY: this.getVerticalAlignment(alignment) };\n        }\n\n        const { x, y } = this.invertPosition(placement, overlayPosition!.overlayX, overlayPosition!.overlayY);\n\n        return {\n            main: overlayPosition!,\n            fallback: { overlayX: x, overlayY: y },\n        };\n    }\n\n    /** Convert the alignment property to a valid CDK alignment value */\n    private getVerticalAlignment(alignment: string): VerticalConnectionPos {\n        switch (alignment) {\n            case 'start':\n                return 'top';\n\n            case 'end':\n                return 'bottom';\n\n            default:\n                return alignment as VerticalConnectionPos;\n        }\n    }\n\n    /** Inverts an overlay position. */\n    private invertPosition(placement: string, x: HorizontalConnectionPos, y: VerticalConnectionPos) {\n        if (placement === 'top' || placement === 'bottom') {\n            if (y === 'top') {\n                y = 'bottom';\n            } else if (y === 'bottom') {\n                y = 'top';\n            }\n        } else {\n            if (x === 'end') {\n                x = 'start';\n            } else if (x === 'start') {\n                x = 'end';\n            }\n        }\n\n        return { x, y };\n    }\n\n    invertHorizontalPosition(y: string): 'top' | 'center' | 'bottom' {\n        return y === 'top' ? 'bottom' : 'top';\n    }\n\n    private getFallbackPosition(fallbackPlacement: string): ConnectedPosition {\n        switch (fallbackPlacement) {\n            case 'left':\n                return { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' };\n            case 'right':\n                return { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' };\n            case 'top':\n                return { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' };\n            case 'bottom':\n                return { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' };\n        }\n    }\n}\n\ninterface OriginConnectedPositions {\n    main: OriginConnectionPosition;\n    fallback: OriginConnectionPosition;\n}\n\ninterface OverlayConnectedPositions {\n    main: OverlayConnectionPosition;\n    fallback: OverlayConnectionPosition;\n}","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ContentChildren, Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, QueryList, ViewContainerRef, forwardRef, inject } from '@angular/core';\nimport { Observable, Subject, combineLatest, merge, of, timer } from 'rxjs';\nimport { debounceTime, filter, take, takeUntil } from 'rxjs/operators';\nimport { AnchorPlacement } from '../../../common/overlay/anchor-placement';\nimport { FocusIndicator, FocusIndicatorOriginService, FocusIndicatorService } from '../../../directives/accessibility/index';\nimport { OverlayPlacementService } from '../../../services/overlay-placement/index';\nimport { MenuItemComponent } from '../menu-item/menu-item.component';\nimport { MenuComponent } from '../menu/menu.component';\n\n@Directive({\n    selector: '[uxMenuTriggerFor]',\n    exportAs: 'ux-menu-trigger',\n    host: {\n        '[attr.disabled]': 'disabled ? true : null',\n        '[attr.aria-haspopup]': '!!menu',\n        '[attr.aria-expanded]': 'menu?.isMenuOpen',\n        '[attr.aria-controls]': 'ariaControls'\n    }\n})\nexport class MenuTriggerDirective implements OnInit, OnDestroy {\n    private readonly _overlay = inject(Overlay);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    private readonly _focusOrigin = inject(FocusIndicatorOriginService);\n\n    private readonly _focusIndicatorService = inject(FocusIndicatorService);\n\n    private readonly _overlayPlacement = inject(OverlayPlacementService);\n\n    private readonly _parentMenu = inject(MenuComponent, { optional: true });\n\n    private readonly _menuItem = inject(MenuItemComponent, { optional: true, self: true });\n\n    /** Access the menu we should show */\n    @Input('uxMenuTriggerFor') menu: MenuComponent;\n\n    /** Determine if we should disable the trigger */\n    @Input() disabled: boolean = false;\n\n    /** Optionally specify the menu's parent element */\n    @Input('uxMenuParent') parent: ElementRef;\n\n    /** Determine if the menu should close when it loses focus */\n    @Input() set closeOnBlur(value: boolean) {\n        this._closeOnBlur = coerceBooleanProperty(value);\n    }\n\n    get closeOnBlur(): boolean {\n        return this._closeOnBlur;\n    }\n\n    /** Emit when the menu is closed */\n    @Output() readonly closed = new EventEmitter<void>();\n\n    /** Reference to the portal based off the MenuCompont templateRef */\n    private _portal: TemplatePortal;\n\n    /** Store the reference to the overlay */\n    private _overlayRef?: OverlayRef;\n\n    /** Get the aria controls for accessibility */\n    get ariaControls(): string | null {\n        return this.menu?.isMenuOpen ? this.menu?.innerId : null;\n    }\n\n    /** Store the instance of the focus indicator */\n    private _focusIndicator: FocusIndicator;\n\n    /** Automatically unsubscribe on directive destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    /** Reference to the menu should close when it loses focus */\n    private _closeOnBlur: boolean = false;\n\n    /** Determine if this triggers a submenu */\n    private get _isSubmenuTrigger(): boolean {\n        return !!this._parentMenu;\n    }\n\n    /** Determine if this is the root trigger */\n    private get _isRootTrigger(): boolean {\n        return !this._isSubmenuTrigger;\n    }\n\n    private readonly _debounceTime: number = 50;\n\n    @ContentChildren(forwardRef(() => MenuTriggerDirective)) menuTriggers: QueryList<MenuTriggerDirective>;\n\n    /** If this is a submenu we want to know when the mouse leaves the items or parent item */\n    private get _menuShouldClose(): Observable<boolean[]> {\n        if (!this._isSubmenuTrigger) {\n            return of();\n        }\n\n        // This combined observable will essentially check for all of the combinations of events that can cause a menu\n        // to remain open, for example:\n        //\n        // 1. Hovering over any item in the menu should keep the menu open\n        // 2. Having any item in the menu focused should keep the menu open\n        // 3. Having the parent menu item hovered should keep a submenu open\n        // 4. Having the parent menu item focused should keep a submenu open\n        // 5. Having a submenu open should keep the parent open (if the submenu meets one of the above conditions)\n        //\n        // We also debounce this because there is often a delay between a blur and a focus event or moving the mouse\n        // from a menu item to a sub menu item, so we add this buffer time to prevent the menu from closing unexpectedly\n        return combineLatest([ this.menu._isHovering$, this.menu._isFocused$, this._menuItem.isHovered$, this.menu._isExpanded, this._menuItem.isFocused$ ])\n            .pipe(debounceTime(50), filter(([isHovered, isFocused, isItemHovered, isExpanded, isItemFocused]) =>\n                !isHovered && !isFocused && !isItemHovered && !isExpanded && !isItemFocused));\n    }\n\n    ngOnInit(): void {\n\n        // set up focus indicator handling\n        this._focusIndicator = this._focusIndicatorService.monitor(this._elementRef.nativeElement);\n\n        // if there is a parent menu then we should override the default initial\n        // position to be to the right rather than beneath. Note this gets called\n        // before ngOnInit in the MenuComponent so if the user specifies an explicit\n        // position then it will still take precendence\n        if (this._isSubmenuTrigger) {\n            this.menu._isSubMenu = true;\n            this.menu.placement = this.getSubMenuPlacement(this.menu.placement);\n        }\n\n        // listen for the menu to open (after animation so we can focus the first item)\n        this.menu.opened.pipe(takeUntil(this._onDestroy$))\n            .subscribe(() => this.menuDidOpen());\n\n        // propagate the close event if it is triggered\n        this.menu._closeAll$.pipe(takeUntil(this._onDestroy$))\n            .subscribe(origin => {\n                if (origin === 'tabout' && this._isRootTrigger) {\n                    this.closeMenu('keyboard', true, true, true);\n                } else {\n                    this.closeMenu(origin as FocusOrigin, true);\n                }\n            });\n\n        // handle keyboard events in the menu\n        this.menu._onKeydown$.pipe(takeUntil(this._onDestroy$))\n            .subscribe(event => this.onMenuKeydown(event));\n\n        combineLatest([this.menu._placement$, this.menu._alignment$])\n            .pipe(takeUntil(this._onDestroy$))\n            .subscribe(() => {\n                if (this._isSubmenuTrigger) {\n                    this.menu.placement = this.getSubMenuPlacement(this.menu.placement);\n                }\n                this.getOverlay(true);\n            });\n    }\n\n    ngOnDestroy(): void {\n        this.destroyMenu();\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    /** Focus the next focusable element */\n    focusNextElement() {\n        // add elements we want to include in our selection\n        const focusableElements = 'a:not([disabled]), button:not([disabled]), input:not([disabled]), [tabindex]:not([disabled]):not([tabindex=\"-1\"])';\n\n        if (document.activeElement) {\n\n            const focusable: NodeListOf<HTMLElement> = document.querySelectorAll(focusableElements);\n            const suitableElements = [];\n\n            focusable.forEach((element) => {\n                if ((element.offsetWidth > 0 || element.offsetHeight > 0 || element === document.activeElement) && !element.classList.contains('cdk-visually-hidden')) {\n                    suitableElements.push(element);\n                }\n            });\n\n            const index = suitableElements.indexOf(document.activeElement);\n\n            if (index > -1) {\n               const nextElement = suitableElements[index + 1] || focusable[0];\n               nextElement.focus();\n            }\n        }\n    }\n\n    /** Open the menu */\n    openMenu(): void {\n        // if the menu is already open then do nothing\n        if (this.menu.isMenuOpen || this.disabled) {\n            return;\n        }\n\n        this.menu._closeOnBlur = this.closeOnBlur;\n\n        // get or create an overlayRef\n        const overlayRef = this.getOverlay();\n        const portal = this.getPortal();\n\n        // if the overlay is already attached do nothing\n        if (overlayRef.hasAttached()) {\n            return;\n        }\n\n        // attach the menu to the DOM\n        overlayRef.attach(portal);\n\n        // mark the menu as open\n        this.menu._setMenuOpen(true);\n\n        if (this._menuItem) {\n            // timer is needed because isExpanded$ will get set to false\n            // prematurely due to the debounceTime on the menuShouldClose.\n            timer(this._debounceTime).pipe(takeUntil(this._onDestroy$))\n                .subscribe(() => this._menuItem.isExpanded$.next(true));\n        }\n\n        // listen for a menu item to be selected\n        this.menu._menuItemClick.pipe(take(1), takeUntil(this._onDestroy$))\n            .subscribe(origin => this.closeMenu(origin, true));\n\n        // subscribe to any close events\n        this.didMenuClose().pipe(take(1), takeUntil(this._onDestroy$))\n            .subscribe(() => this.closeMenu());\n\n        // listen for the menu to animate closed then destroy it, if submenu wait for it to start closing to destroy.\n        if (this._isSubmenuTrigger) {\n            this.menu.closing.pipe(take(1), takeUntil(this._onDestroy$))\n                .subscribe(() => this.destroyMenu());\n        } else {\n            this.menu.closed.pipe(take(1), takeUntil(this._onDestroy$))\n                .subscribe(() => this.destroyMenu());\n        }\n    }\n\n    /** Close a menu or submenu */\n    closeMenu(origin?: FocusOrigin, closeParents: boolean = false, focusTrigger: boolean = true, focusNextElement: boolean = false): Observable<void> {\n\n        if (!this._overlayRef.hasAttached()) {\n            return;\n        }\n\n        // update the menu state\n        this.menu._setMenuOpen(false);\n\n        if (this._menuItem) {\n            this._menuItem.isExpanded$.next(false);\n        }\n\n        // if we should close parents then propagate the event\n        if (closeParents && this._parentMenu) {\n            this._parentMenu._closeAll$.next(origin);\n        }\n\n        // we should focus the trigger element if this is the root trigger unless otherwise specified\n        if (this._isRootTrigger && focusTrigger) {\n            this._focusIndicator.focus(origin);\n        }\n\n        if (focusNextElement) {\n            this.focusNextElement();\n        }\n\n        this.closed.emit();\n        return this.menu.closed;\n    }\n\n    /** Toggle the open state of a menu */\n    @HostListener('click', ['$event'])\n    @HostListener('keydown.enter', ['$event'])\n    @HostListener('keydown.space', ['$event'])\n    toggleMenu(event?: MouseEvent | KeyboardEvent): void {\n\n        // if this occurs on a submenu trigger then we can skip\n        if (this._isSubmenuTrigger) {\n            return;\n        }\n\n        if (!this.menu._isAnimating) {\n\n            // determine the focus origin based on whether or not a keyboard was used\n            const origin = event instanceof KeyboardEvent ? 'keyboard' : 'mouse';\n\n            // set the correct focus origin - if triggered by an event then use the source otherwise it was programmatic\n            this._focusOrigin.setOrigin(event ? origin : 'program');\n\n            // toggle the menu open state\n            this.menu.isMenuOpen ? this.closeMenu(origin, true) : this.openMenu();\n        }\n\n        // the enter key will trigger the click event and therefore set the wrong focus origin\n        // so we nee to ensure this doesn't happen\n        if (event) {\n            event.preventDefault();\n        }\n    }\n\n    /** Submenus should be opened by hovering on the menu item */\n    @HostListener('mouseenter')\n    _onMouseEnter(): void {\n        if (this._isSubmenuTrigger && !this._parentMenu._isAnimating) {\n            this.openMenu();\n        }\n    }\n\n    @HostListener('mousemove')\n    _onMouseMove(): void {\n        if (this._isSubmenuTrigger && !this._parentMenu._isAnimating) {\n            setTimeout(() => {\n                this.openMenu();\n            }, this._debounceTime);\n        }\n    }\n\n    /** Pressing the escape key should close all menus */\n    @HostListener('document:keydown.escape')\n    _onEscape(): void {\n        if (this.menu.isMenuOpen) {\n            this.closeMenu();\n\n            // refocus the root trigger and show the focus ring\n            if (this._isRootTrigger) {\n                this._focusIndicator.focus('keyboard');\n            }\n        }\n    }\n\n    /** Handle keyboard events for opening submenus */\n    @HostListener('keydown', ['$event'])\n    _onKeydown(event: KeyboardEvent): void {\n\n        // arrow key in the correct direction should open the menu\n        if (\n            this.menu.placement === 'right' && event.keyCode === RIGHT_ARROW ||\n            this.menu.placement === 'left' && event.keyCode === LEFT_ARROW ||\n            this.menu.placement === 'top' && event.keyCode === UP_ARROW ||\n            this.menu.placement === 'bottom' && event.keyCode === DOWN_ARROW\n        ) {\n            this._focusOrigin.setOrigin('keyboard');\n\n            // if the menu was opened by a click but we subsequently use the arrow keys focus the first item\n            if (this.menu.isMenuOpen) {\n                this.menu._keyManager.setFocusOrigin('keyboard').setFirstItemActive();\n            } else {\n                // otherwise open the menu\n                this.openMenu();\n            }\n\n            // prevent the browser from scrolling\n            event.preventDefault();\n        }\n    }\n\n    /** Blurring the trigger should check if the menu has focus and close it if not */\n    @HostListener('blur')\n    _onBlur(): void {\n        if (this.closeOnBlur) {\n            this.closeOnFocusout();\n        }\n    }\n\n    /** Remove the menu from the DOM */\n    private destroyMenu(): void {\n        // if the menu has been destroyed already then do nothing\n        if (!this._overlayRef) {\n            return;\n        }\n\n        // remove the overlay\n        this._overlayRef.detach();\n    }\n\n    /** Create an overlay or return an existing instance */\n    private getOverlay(recreateOverlay: boolean = false): OverlayRef {\n\n        // if we have already created the overlay then reuse it\n        if (this._overlayRef && !recreateOverlay) {\n            return this._overlayRef;\n        }\n\n        const strategy = this._overlay.position()\n            .flexibleConnectedTo(this.parent ?? this._elementRef)\n            .withFlexibleDimensions(false)\n            .withPush(false)\n            .withTransformOriginOn('.ux-menu');\n\n        // otherwise create a new one\n        this._overlayRef = this._overlay.create({\n            hasBackdrop: !this._isSubmenuTrigger,\n            backdropClass: 'cdk-overlay-transparent-backdrop',\n            scrollStrategy: this._overlay.scrollStrategies.reposition({ scrollThrottle: 0 }),\n            positionStrategy: strategy\n        });\n\n        this._overlayPlacement.updatePosition(\n            this._overlayRef,\n            this.menu.placement,\n            this.menu.alignment,\n            undefined,\n        );\n\n        return this._overlayRef;\n    }\n\n    /** Create a Template portal if one does not already exist (or the template has changed) */\n    private getPortal(): TemplatePortal {\n\n        // if there is no portal or the templateRef has changed then create a new one\n        if (!this._portal || this.menu.templateRef !== this._portal.templateRef) {\n            this._portal = new TemplatePortal(this.menu.templateRef, this._viewContainerRef);\n        }\n\n        return this._portal;\n    }\n\n    /** Get an observable that emits on any of the triggers that close a menu */\n     \n    private didMenuClose(): Observable<any> {\n        return merge(\n            this._overlayRef.backdropClick(),\n            this._parentMenu ? this._parentMenu.closing : of(),\n            this._menuShouldClose\n        );\n    }\n\n    /** When the menu opens we want to focus the first item in the list */\n    private menuDidOpen(): void {\n        // if the keyboard is used we should always focus and show the indicator\n        // regardless of it this is the root menu or not\n        if (this._focusOrigin.getOrigin() === 'keyboard') {\n            this.menu._keyManager.setFocusOrigin('keyboard').setFirstItemActive();\n        }\n    }\n\n    /** Handle keypresses in submenus where we may want to close them */\n    private onMenuKeydown(event: KeyboardEvent): void {\n        // if we are a submenu and the user presses an arrow key in the opposite\n        // direction than it is positioned from its parents then we should close the menu\n        if (this._parentMenu) {\n            if (\n                this.menu.placement === 'right' && event.keyCode === LEFT_ARROW ||\n                this.menu.placement === 'left' && event.keyCode === RIGHT_ARROW ||\n                this.menu.placement === 'top' && event.keyCode === DOWN_ARROW ||\n                this.menu.placement === 'bottom' && event.keyCode === UP_ARROW\n            ) {\n                this.closeMenu();\n\n                // refocus the parent menu item\n                this._menuItem.focus('keyboard');\n            }\n        }\n    }\n\n    /** Check whether the overlay has focus */\n    private hasFocus(): boolean {\n        let check = false;\n\n        document.querySelectorAll('.cdk-overlay-container .ux-menu').forEach(el => {\n            if (el.contains(document.activeElement)) {\n                check = true;\n            }\n        });\n\n        return check;\n    }\n\n    /** Close the menu if there is no element focused */\n    private closeOnFocusout(): void {\n        if (this.menu.isMenuOpen) {\n            setTimeout(() => {\n                if (!this.hasFocus()) {\n                    this.closeMenu(undefined, true, false);\n                }\n            }, this._debounceTime);\n        }\n    }\n\n    private getSubMenuPlacement(placement: AnchorPlacement): AnchorPlacement {\n        return placement === 'left' ? 'left' : 'right';\n    }\n\n    static ngAcceptInputType_closeOnBlur: BooleanInput;\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { MenuDividerComponent } from './menu-divider/menu-divider.component';\nimport { MenuInitialFocusDirective } from './menu-initial-focus/menu-initial-focus.directive';\nimport { MenuItemCustomControlDirective } from './menu-item-custom-control/menu-item-custom-control.directive';\nimport { MenuItemComponent } from './menu-item/menu-item.component';\nimport { MenuModuleOptions } from './menu-options.interface';\nimport { MENU_OPTIONS_TOKEN } from './menu-options.token';\nimport { MenuTabbableItemDirective } from './menu-tabbable-item/menu-tabbable-item.directive';\nimport { MenuTriggerDirective } from './menu-trigger/menu-trigger.directive';\nimport { MenuComponent } from './menu/menu.component';\n\n@NgModule({\n    declarations: [\n        MenuComponent,\n        MenuTriggerDirective,\n        MenuItemComponent,\n        MenuDividerComponent,\n        MenuTabbableItemDirective,\n        MenuInitialFocusDirective,\n        MenuItemCustomControlDirective\n    ],\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        CommonModule,\n        OverlayModule\n    ],\n    exports: [\n        MenuComponent,\n        MenuTriggerDirective,\n        MenuItemComponent,\n        MenuDividerComponent,\n        MenuTabbableItemDirective,\n        MenuInitialFocusDirective,\n        MenuItemCustomControlDirective\n    ]\n})\nexport class MenuModule {\n    static forRoot(options: MenuModuleOptions): ModuleWithProviders<MenuModule> {\n        return {\n            ngModule: MenuModule,\n            providers: [\n                { provide: MENU_OPTIONS_TOKEN, useValue: options }\n            ]\n        };\n    }\n\n    /** Support options at a child module level (implementation is the same as `forRoot`) */\n    static forChild(options: MenuModuleOptions): ModuleWithProviders<MenuModule> {\n        return MenuModule.forRoot(options);\n    }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, ExistingProvider, forwardRef, inject, Input, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FocusIndicatorDirective } from '../../directives/accessibility';\nimport { FocusableItemToken } from '../menu';\nimport { FocusableControl } from '../menu/interfaces/focusable-control.interface';\n\nexport const CHECKBOX_VALUE_ACCESSOR: ExistingProvider = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => CheckboxComponent),\n    multi: true\n};\n\nlet uniqueCheckboxId = 0;\n\n@Component({\n    selector: 'ux-checkbox',\n    templateUrl: './checkbox.component.html',\n    providers: [CHECKBOX_VALUE_ACCESSOR, {\n        provide: FocusableItemToken,\n        useExisting: CheckboxComponent\n    }],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CheckboxComponent<T = number> implements ControlValueAccessor, FocusableControl {\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Provide a default unique id value for the checkbox */\n    _checkboxId: string = `ux-checkbox-${++uniqueCheckboxId}`;\n\n    /** Determines if the checkbox should be checked, unchecked or indeterminate. */\n    @Input() id: string = this._checkboxId;\n\n    /** Specifies the form name of the element. */\n    @Input() name: string | null;\n\n    /** Determines if the checkbox should be checked, unchecked or indeterminate. */\n    @Input() value: boolean | T = false;\n\n    /** Specified if this is a required input. */\n    @Input() required: boolean;\n\n    /** Specifies the tabindex of the input. */\n    @Input() tabindex: number = 0;\n\n    /** If set to `true` the checkbox will not toggle state when clicked. */\n    @Input() clickable: boolean = true;\n\n    /** If set to `true` the checkbox will be displayed without a border and background. */\n    @Input() simplified: boolean = false;\n\n    /**\n     * If `value` is set to the indeterminate value specified using this attribute, it will neither\n     * display the checkbox as checked or unchecked, and will instead show the indeterminate variation.\n     */\n    @Input() indeterminateValue: T | number = -1;\n\n    /** Specify if the checkbox should be disabled. */\n    @Input() disabled: boolean = false;\n\n    /** Provide an aria label for the checkbox. */\n    @Input('aria-label') ariaLabel: string = '';\n\n    /** Provide an aria-labelled by property for the checkbox. */\n    @Input('aria-labelledby') ariaLabelledby: string = null;\n\n    /** Emits when `value` has been changed. */\n    @Output() valueChange = new EventEmitter<boolean | T>();\n\n    /** Determine if the underlying input component has been focused with the keyboard */\n    _focused: boolean = false;\n\n    /** Used to inform Angular forms that the component has been touched */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouchedCallback: () => void = () => { };\n\n    /** Used to inform Angular forms that the component value has changed */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChangeCallback: (_: boolean | T) => void = () => { };\n\n    /** Get the focus indicator to set focus */\n    @ViewChild(FocusIndicatorDirective)\n    _focusIndicator?: FocusIndicatorDirective;\n\n    /** Toggle the current state of the checkbox */\n    toggle(): void {\n\n        if (this.disabled || !this.clickable) {\n            return;\n        }\n\n        if (this.value === this.indeterminateValue) {\n            this.value = true;\n        } else {\n            // toggle the checked state\n            this.value = !this.value;\n        }\n\n        // emit the value\n        this.valueChange.emit(this.value);\n\n        // update the value if used within a form control\n        this.onChangeCallback(this.value);\n\n        // mark the component as touched\n        this.onTouchedCallback();\n    }\n\n    // Functions required to update ngModel\n    writeValue(value: boolean | T): void {\n        if (value !== this.value) {\n            this.value = value;\n            this._changeDetector.markForCheck();\n        }\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the input value changes */\n    registerOnChange(fn: (_: boolean | T) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the touched state changes */\n    registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    /** Allow Angular forms to disable the component */\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    /** Focus the input element */\n    focus(origin: FocusOrigin): void {\n        this._focusIndicator.focus(origin);\n    }\n\n    setInputTabIndex(tabindex: number): void {\n        this.tabindex = tabindex;\n        this._changeDetector.markForCheck();\n    }\n}\n","<label [attr.for]=\"(id || _checkboxId) + '-input'\"\n       class=\"ux-checkbox\"\n       [class.ux-checkbox-checked]=\"value === true\"\n       [class.ux-checkbox-indeterminate]=\"value === indeterminateValue\"\n       [class.ux-checkbox-simplified]=\"simplified\"\n       [class.ux-checkbox-disabled]=\"disabled\"\n       [class.ux-checkbox-focused]=\"_focused\">\n\n    <div class=\"ux-checkbox-container\">\n\n        <input #input\n               type=\"checkbox\"\n               uxFocusIndicator\n               class=\"ux-checkbox-input\"\n               [id]=\"(id || _checkboxId) + '-input'\"\n               [required]=\"required\"\n               [checked]=\"value\"\n               [attr.value]=\"value\"\n               [disabled]=\"disabled\"\n               [attr.name]=\"name\"\n               [tabindex]=\"tabindex\"\n               [indeterminate]=\"value === indeterminateValue\"\n               [attr.aria-label]=\"ariaLabel\"\n               [attr.aria-labelledby]=\"ariaLabelledby\"\n               [attr.aria-checked]=\"value === indeterminateValue ? 'mixed' : value\"\n               (indicator)=\"_focused = $event\"\n               (change)=\"$event.stopPropagation()\"\n               (click)=\"toggle()\">\n    </div>\n\n    <span class=\"ux-checkbox-label\">\n        <ng-content></ng-content>\n    </span>\n</label>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        FormsModule\n    ],\n    exports: [\n        CheckboxComponent\n    ],\n    declarations: [\n        CheckboxComponent\n    ]\n})\nexport class CheckboxModule { }\n","import { ThemeColor } from '../../services/color/index';\nimport { ColorPickerInputMode } from './color-picker.type';\n\n/**\n * Type representing a color, including its descriptive name.\n */\nexport class ColorPickerColor {\n\n    /**\n     * Human-readable name of the color.\n     */\n    name: string;\n\n    /**\n     * Hex value of the color, e.g. `#ffffff`.\n     */\n    get hex(): string {\n        return this._originalHexValue ? this._originalHexValue : this._color.toHex();\n    }\n\n    /**\n     * RGBA value of the color, e.g. `rgba(255, 255, 255, 1)`.\n     */\n    get rgba(): string {\n        return this._originalRgbaValue ? this._originalRgbaValue : this._color.toRgba();\n    }\n\n    get r(): number {\n        return parseInt(this._color.getRed());\n    }\n\n    get g(): number {\n        return parseInt(this._color.getGreen());\n    }\n\n    get b(): number {\n        return parseInt(this._color.getBlue());\n    }\n\n    get a(): number {\n        return parseFloat(this._color.getAlpha());\n    }\n\n    private readonly _color: ThemeColor;\n    private readonly _originalHexValue: string;\n    private readonly _originalRgbaValue: string;\n\n    constructor(name: string, value: string, inputMode?: ColorPickerInputMode) {\n        this.name = name;\n        this._color = ThemeColor.parse(value);\n\n        // Preserve the format entered by the user if it's valid\n        if (inputMode === 'hex') {\n            this._originalHexValue = value;\n        } else if (inputMode === 'rgba') {\n            this._originalRgbaValue = value;\n        }\n    }\n\n    toString(): string {\n        return this._color.toRgba();\n    }\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnDestroy, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AnchorAlignment, AnchorPlacement } from '../../common/overlay/index';\n\nlet uniqueTooltipId = 0;\n\n@Component({\n    selector: 'ux-tooltip',\n    templateUrl: './tooltip.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\n \nexport class TooltipComponent<T = any> implements OnDestroy {\n    protected readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    /** Define a unique id for each tooltip */\n    id: string = `ux-tooltip-${ ++uniqueTooltipId }`;\n\n    /** Define the tooltip role */\n    role: string = 'tooltip';\n\n    /** The content of the tooltip, either a string or a TemplateRef for further customization */\n    @Input() content: string | TemplateRef<T>;\n\n    /** Allow the user to supply a context for the tooltip TemplateRef */\n    @Input() context: T;\n\n    /** The position the tooltip should display relative to the associated element */\n    @Input() placement: AnchorPlacement;\n\n    /** The position the callout should display relative to the popover element */\n    @Input() alignment: AnchorAlignment;\n\n    /** Allow a custom class to be added to the tooltip to allow custom styling */\n    customClass: string = '';\n\n    /** Emit when the tooltip need to update it's position */\n    reposition$ = new Subject<void>();\n\n    /** Indicates whether or not the content is a string or a TemplateRef */\n    get isTemplateRef(): boolean {\n        return this.content instanceof TemplateRef;\n    }\n\n    /** The name of the css class to use for the tooltip direction */\n    _positionClass: string = '';\n\n    get positionClass(): string {\n        return this._positionClass;\n    }\n\n    set positionClass(positionClass: string) {\n        this._positionClass = positionClass;\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** Cleanup after the component is destroyed */\n    ngOnDestroy(): void {\n        this.reposition$.complete();\n    }\n\n    /** Inform the parent directive that it needs to recalulate the position */\n    reposition(): void {\n        this.reposition$.next();\n    }\n\n    /** This will update the content of the tooltip and trigger change detection */\n     \n    setContent(content: string | TemplateRef<any>): void {\n        this.content = content;\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** This will update the tooltip placement and trigger change detection */\n    setPlacement(placement: AnchorPlacement) {\n\n        if (!placement) {\n            return;\n        }\n\n        this.placement = placement;\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** This will update the tooltip alignment and trigger change detection */\n    setAlignment(alignment: AnchorAlignment) {\n\n        if (!alignment) {\n            return;\n        }\n\n        this.alignment = alignment;\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** This will set a custom class on the tooltip and trigger change detection */\n    setClass(customClass: string): void {\n\n        if (!customClass) {\n            return;\n        }\n\n        this.customClass = customClass;\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** Updates the context used by the TemplateRef */\n    setContext(context: T): void {\n\n        if (!context) {\n            return;\n        }\n\n        this.context = context;\n        this._changeDetectorRef.markForCheck();\n    }\n\n    /** Specify the tooltip role attribute */\n    setRole(role: string): void {\n\n        if (!role) {\n            return;\n        }\n\n        this.role = role;\n        this._changeDetectorRef.markForCheck();\n    }\n}\n","<div class=\"tooltip in\" [id]=\"id\" [attr.role]=\"role\" [ngClass]=\"[positionClass, customClass]\">\n  <div class=\"tooltip-arrow\"></div>\n  <div class=\"tooltip-inner\" (cdkObserveContent)=\"reposition()\">\n    @if (!isTemplateRef) {\n      {{ content }}\n    }\n    @if (isTemplateRef) {\n      <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\"></ng-container>\n    }\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { TooltipComponent } from './tooltip.component';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class TooltipService {\n    shown$ = new Subject<TooltipComponent>();\n}","import { ConnectionPositionPair, Overlay, OverlayRef, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AnchorAlignment, AnchorPlacement } from '../../common/overlay/index';\nimport { OverlayPlacementService } from '../../services/overlay-placement/index';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipService } from './tooltip.service';\n\n@Directive({\n    selector: '[uxTooltip]',\n    exportAs: 'ux-tooltip'\n})\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\n    protected readonly _elementRef = inject(ElementRef);\n\n    protected readonly _viewContainerRef = inject(ViewContainerRef);\n\n    protected readonly _overlay = inject(Overlay);\n\n    protected readonly _scrollDispatcher = inject(ScrollDispatcher);\n\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _tooltipService = inject(TooltipService);\n\n    private readonly _overlayFallback = inject(OverlayPlacementService);\n\n    /** Contains the content of the tooltip or a TemplateRef for more detailed content */\n     \n    @Input('uxTooltip') content: string | TemplateRef<any>;\n\n    /** Allow the tooltip to be conditionally disabled */\n    @Input('tooltipDisabled') disabled: boolean;\n\n    /** All the user to add a custom class to the tooltip */\n    @Input('tooltipClass') customClass: string = '';\n\n    /** All the user to add a role to the tooltip - default is tooltip */\n    @Input('tooltipRole') role: string = 'tooltip';\n\n    /** Provide the TemplateRef a context object */\n     \n    @Input('tooltipContext') context: any = {};\n\n    /** Delay the showing of the tooltip by a number of miliseconds */\n    @Input('tooltipDelay') delay: number = 0;\n\n    /** Programmatically show and hide the tooltip */\n    @Input() isOpen: boolean = false;\n\n    /** Customize how the tooltip should be positioned relative to the element */\n    @Input() placement: AnchorPlacement = 'top';\n\n    /** Specify the fallback placement if the specified placement cannot be used */\n    @Input() fallbackPlacement: AnchorPlacement;\n\n    /** Customize the position of the callout */\n    @Input() alignment: AnchorAlignment = 'center';\n\n    /** Specify which events should show the tooltip */\n    @Input() showTriggers: OverlayTrigger[] = ['mouseenter', 'focus'];\n\n    /** Specify which events should hide the tooltip */\n    @Input() hideTriggers: OverlayTrigger[] = ['mouseleave', 'blur'];\n\n    /** Emits an event when the tooltip is shown */\n    @Output() shown = new EventEmitter<void>();\n\n    /** Emits a event when the tooltip is hidden */\n    @Output() hidden = new EventEmitter<void>();\n\n    /** Allow two way binding to track the visibility of the tooltip */\n    @Output() isOpenChange = new EventEmitter<boolean>();\n\n    /** Keep track of the tooltip visibility */\n    isVisible: boolean = false;\n\n    /** The name of the css class to use for the tooltip direction */\n    positionClass = this.placement;\n\n    /** Define the overlay class */\n    protected _overlayClass: string = 'ux-tooltip-pane';\n\n    /** A reference to the CDK portal containing the overlay */\n    protected _portal: ComponentPortal<TooltipComponent>;\n\n    /** A reference to the overlay the tooltip will be inserted into */\n    protected _overlayRef: OverlayRef;\n\n    /** A reference to the instance of the tooltip component when created */\n    protected _instance: TooltipComponent;\n\n    /** This will emit when the directive is destroyed allowing us to unsubscribe all subscriptions automatically */\n    protected _onDestroy = new Subject<void>();\n\n    /** Store the timeout interval for cancelation */\n    private _showTimeoutId: number = null;\n\n    /** Internally store the type of this component - usual for distinctions when extending this class */\n    protected _type: string = 'tooltip';\n\n    /** Set up the triggers and bind to the show/hide events to keep visibility in sync */\n    ngOnInit(): void {\n\n        // set up show and hide event triggers\n        fromEvent(this._elementRef.nativeElement, 'click').pipe(takeUntil(this._onDestroy)).subscribe(this.onClick.bind(this));\n        fromEvent(this._elementRef.nativeElement, 'mouseenter').pipe(takeUntil(this._onDestroy)).subscribe(this.onMouseEnter.bind(this));\n        fromEvent(this._elementRef.nativeElement, 'mouseleave').pipe(takeUntil(this._onDestroy)).subscribe(this.onMouseLeave.bind(this));\n        fromEvent(this._elementRef.nativeElement, 'focus').pipe(takeUntil(this._onDestroy)).subscribe(this.onFocus.bind(this));\n        fromEvent(this._elementRef.nativeElement, 'blur').pipe(takeUntil(this._onDestroy)).subscribe(this.onBlur.bind(this));\n\n        // when any other tooltips open hide this one\n        this._tooltipService.shown$.pipe(\n            filter(() => this._type === 'tooltip'),\n            filter(tooltip => tooltip !== this._instance),\n            takeUntil(this._onDestroy)\n        ).subscribe(this.hide.bind(this));\n\n        // if the tooltip should be initially visible then open it\n        if (this.isOpen) {\n            this.show();\n        }\n    }\n\n    /**\n     * We need to send input changes to the tooltip component\n     * We can't use setters as they may trigger before tooltip initialised and can't resend once initialised\n     **/\n    ngOnChanges(changes: SimpleChanges): void {\n\n        // we can ignore the first change as it's handled in ngOnInit\n        if (changes.isOpen && !changes.isOpen.firstChange && changes.isOpen.currentValue !== this.isVisible) {\n            changes.isOpen.currentValue ? this.show() : this.hide();\n        }\n\n        // destroy the overlay ref so a new correctly positioned instance will be created next time\n        if (changes.placement) {\n            this.destroyOverlay();\n        }\n\n        if (this._instance && changes.placement) {\n            this._instance.setPlacement(changes.placement.currentValue);\n        }\n\n        if (this._instance && changes.alignment) {\n            this._instance.setAlignment(changes.alignment.currentValue);\n        }\n\n        if (this._instance && changes.content) {\n            this._instance.setContent(changes.content.currentValue);\n        }\n\n        if (this._instance && changes.customClass) {\n            this._instance.setClass(changes.customClass.currentValue);\n        }\n\n        if (this._instance && changes.context) {\n            this._instance.setContext(changes.context.currentValue);\n        }\n\n        if (this._instance && changes.role) {\n            this._instance.setContext(changes.role.currentValue);\n        }\n    }\n\n    /** Ensure we clean up after ourselves */\n    ngOnDestroy(): void {\n\n        // ensure we close the tooltip when the host is destroyed\n        if (this._overlayRef) {\n            this._overlayRef.dispose();\n            this._instance = null;\n        }\n\n        // clear any pending timeouts\n        this.cancelTooltip();\n\n        // emit this event to automatically unsubscribe from all subscriptions\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Make the tooltip open */\n    show(): void {\n\n        // if the tooltip is disabled then do nothing\n        if (this.disabled || this.isVisible || this._showTimeoutId || !this.content) {\n            return;\n        }\n\n        // delay the show by the delay amount\n        this._showTimeoutId = window.setTimeout(() => {\n\n            // create the tooltip and get the overlay ref\n            const overlayRef = this.createOverlay();\n\n            // create the portal to create the tooltip component\n            this._portal = this.createPortal();\n            this._instance = this.createInstance(overlayRef);\n\n            // watch for any changes to the content\n            this._instance.reposition$.pipe(takeUntil(this._onDestroy)).subscribe(this.reposition.bind(this));\n\n            // store the visible state\n            this.isVisible = true;\n\n            // ensure the overlay has the correct initial position\n            this.reposition();\n\n            // emit the show events\n            this.shown.emit();\n            this.isOpenChange.next(true);\n\n            // clear the interval id\n            this._showTimeoutId = null;\n\n            // emit the show event to close any other tooltips\n            this._tooltipService.shown$.next(this._instance);\n\n            // ensure change detection is run\n            this._changeDetectorRef.detectChanges();\n        }, this.delay);\n\n    }\n\n    /** If a tooltip exists and is visible, hide it */\n    hide(): void {\n\n        // if we are waiting to show a tooltip then cancel the pending timeout\n        if (this._showTimeoutId) {\n            window.clearTimeout(this._showTimeoutId);\n            this._showTimeoutId = null;\n            return;\n        }\n        \n        // if the tooltip is hidden then do nothing\n        if (!this.isVisible) {\n            return;\n        }\n\n        if (this._overlayRef && this._overlayRef.hasAttached()) {\n            this._overlayRef.detach();\n        }\n\n        this.setAriaDescribedBy(null);\n        this._instance = null;\n\n        // store the visible state\n        this.isVisible = false;\n\n        // emit the hide events\n        this.hidden.emit();\n        this.isOpenChange.next(false);\n\n        // ensure change detection is run\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** Toggle the visibility of the tooltip */\n    toggle(): void {\n        this.isVisible ? this.hide() : this.show();\n    }\n\n    /** Recalculate the position of the popover */\n    reposition(): void {\n        if (this.isVisible && this._overlayRef) {\n            this._overlayRef.updatePosition();\n        }\n    }\n\n    /** Create an instance from the overlay ref - allows overriding and additional logic here */\n    protected createInstance(overlayRef: OverlayRef): TooltipComponent {\n        const instance = overlayRef.attach(this._portal).instance as TooltipComponent;\n\n        // supply the tooltip with the correct properties\n        instance.setContent(this.content);\n        instance.setPlacement(this.placement);\n        instance.setAlignment(this.alignment);\n        instance.setClass(this.customClass);\n        instance.setContext(this.context);\n        instance.setRole(this.role);\n\n        // Update the aria-describedby attribute\n        this.setAriaDescribedBy(instance.id);\n\n        return instance;\n    }\n\n    /** Create the component portal - allows overriding to allow other portals eg. popovers */\n     \n    protected createPortal(): ComponentPortal<any> {\n        return this._portal || new ComponentPortal(TooltipComponent, this._viewContainerRef);\n    }\n\n    /** Create the overlay and set up the scroll handling behavior */\n    private createOverlay(): OverlayRef {\n\n        // if the tooltip has already been created then just return the existing instance\n        if (this._overlayRef) {\n            return this._overlayRef;\n        }\n\n        const strategy = this._overlay.position()\n            .flexibleConnectedTo(this._elementRef)\n            .withFlexibleDimensions(false)\n            .withPush(false);\n\n\n        this._overlayRef = this._overlay.create({\n            positionStrategy: strategy,\n            panelClass: this._overlayClass,\n            scrollStrategy: this._overlay.scrollStrategies.reposition({ scrollThrottle: 0 }),\n            hasBackdrop: false\n        });\n\n        this._overlayFallback.updatePosition(this._overlayRef, this.placement, this.alignment, this.fallbackPlacement);\n\n        strategy.positionChanges.subscribe(positionChange => {\n            const currentPosition = positionChange.connectionPair;\n            this.getPositionClass(currentPosition);\n        });\n\n        return this._overlayRef;\n    }\n\n    /** Recreate the overlay ref using the updated origin and overlay positions */\n    private destroyOverlay(): void {\n\n        // destroy the existing overlay\n        if (this._overlayRef && this._overlayRef.hasAttached()) {\n            this._overlayRef.detach();\n        }\n\n        if (this._overlayRef) {\n            this._overlayRef.dispose();\n            this._overlayRef = null;\n        }\n\n        this.isVisible = false;\n    }\n\n    private getPositionClass(currentPosition: ConnectionPositionPair): void {\n\n        let positionClass: AnchorPlacement = this.placement;\n\n        if (currentPosition.originX === 'center') {\n            positionClass = currentPosition.originY === 'top' ? 'top' : 'bottom';\n        } else if (currentPosition.originY === 'center') {\n            positionClass = currentPosition.originX === 'start' ? 'left' : 'right';\n        }\n\n        this._instance.positionClass = positionClass;\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /**\n     * Simple utility method - because IE doesn't support array.includes\n     * And it isn't included in the core-js/es6 polyfills which are the\n     * only ones required by Angular and guaranteed to be there\n     **/\n    protected includes<T>(array: Array<T>, value: T): boolean {\n        return Array.isArray(array) && !!array.find(item => item === value);\n    }\n\n    /** Handle the click event - show or hide accordingly */\n    protected onClick(): void {\n\n        // if its not visible and click is a show trigger open it\n        if (!this.isVisible && this.includes(this.showTriggers, 'click') && this._showTimeoutId === null) {\n            return this.show();\n        }\n\n        // if its visible and click is a hide trigger close it\n        if (this.isVisible && this.includes(this.hideTriggers, 'click') && this._showTimeoutId === null) {\n            return this.hide();\n        }\n\n        // if its not visible and click is a hide trigger close it and there is a pending tooltip\n        if (!this.isVisible && this.includes(this.hideTriggers, 'click') && this._showTimeoutId !== null) {\n            return this.cancelTooltip();\n        }\n\n    }\n\n    /** Handle the mouse enter event - show or hide accordingly */\n    protected onMouseEnter(): void {\n\n        // this is an show only trigger - if already open or it isn't a trigger do nothing\n        if (this.isVisible || !this.includes(this.showTriggers, 'mouseenter')) {\n            return;\n        }\n\n        // otherwise open the tooltip\n        this.show();\n    }\n\n    /** Handle the mouse leave event - show or hide accordingly */\n    protected onMouseLeave(): void {\n\n        // If the tooltip is pending then cancel showing it\n        if (!this.isVisible && this.includes(this.hideTriggers, 'mouseleave') && this._showTimeoutId !== null) {\n            return this.cancelTooltip();\n        }\n\n        // if the tooltip is not visible or mouseleave isn't a hide trigger then do nothing\n        if (!this.isVisible || !this.includes(this.hideTriggers, 'mouseleave')) {\n            return;\n        }\n\n        // otherwise close the tooltip\n        this.hide();\n    }\n\n    /** Handle the focus event - show or hide accordingly */\n    protected onFocus(): void {\n\n        // this is an show only trigger - if already open or it isn't a trigger do nothing\n        if (this.isVisible || !this.includes(this.showTriggers, 'focus')) {\n            return;\n        }\n\n        // otherwise open the tooltip\n        this.show();\n    }\n\n    /** Handle the blur event - show or hide accordingly */\n    protected onBlur(): void {\n\n        // If the tooltip is pending then cancel showing it\n        if (!this.isVisible && this.includes(this.hideTriggers, 'blur') && this._showTimeoutId !== null) {\n            return this.cancelTooltip();\n        }\n\n        // this is an hide only trigger - if not open or it isn't a trigger do nothing\n        if (!this.isVisible || !this.includes(this.hideTriggers, 'blur')) {\n            return;\n        }\n\n        // otherwise close the tooltip\n        this.hide();\n    }\n\n    /** Programmatically update the aria-describedby property */\n    protected setAriaDescribedBy(id: string | null): void {\n        if (id === null) {\n            this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n        } else {\n            this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', id);\n        }\n    }\n\n    /** Cancel any pending tooltip (waiting on delay ellapsing) */\n    private cancelTooltip(): void {\n        if (this._showTimeoutId !== null) {\n            window.clearTimeout(this._showTimeoutId);\n            this._showTimeoutId = null;\n        }\n    }\n\n}\n\nexport type OverlayTrigger = 'click' | 'clickoutside' | 'escape' | 'mouseenter' | 'focus' | 'mouseleave' | 'blur';\n","import { Component, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { BehaviorSubject, Subject, combineLatest } from 'rxjs';\nimport { pairwise, takeUntil } from 'rxjs/operators';\nimport { TabbableListDirective } from '../../directives/accessibility/index';\nimport { ColorPickerColor } from './color-picker-color';\nimport { ColorPickerButtonSize, ColorPickerButtonStyle, ColorPickerInputColors, ColorPickerInputMode } from './color-picker.type';\n\n// Values corresponding to stylesheet\nconst BUTTON_MARGIN = 8;\nconst BUTTON_WIDTHS = {\n    'sm': 26,\n    'md': 32,\n    'lg': 40\n};\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-color-picker',\n    exportAs: 'ux-color-picker',\n    templateUrl: 'color-picker.component.html',\n    host: {\n        'tabindex': '0'\n    }\n})\nexport class ColorPickerComponent implements OnInit, OnDestroy {\n\n    @Input()\n    @HostBinding('attr.id')\n    id: string = `ux-color-picker-${uniqueId++}`;\n\n    /**\n     * The collection of colors to display in the color swatch.\n     *\n     * Colors can be specified either as a string, which is the hex or RGBA value of the color; or as a `ColorPickerColor` object,\n     * which allows a name to be associated with the color. See below for details of the `ColorPickerColor` class.\n     * This property is either a one-dimensional or two-dimensional array. If a two-dimensional array is provided,\n     * the colors will be split into rows, providing more control over the appearance of the swatch.\n     */\n    @Input('colors')\n    set inputColors(colors: ColorPickerInputColors[] | ColorPickerInputColors[][]) {\n\n        let normalizedColors: ColorPickerInputColors[][];\n\n        // If it's a 1d array, convert it to 2d\n        if (colors.length === 0 || !Array.isArray(colors[0])) {\n            normalizedColors = [colors as ColorPickerInputColors[]];\n        } else {\n            normalizedColors = colors as ColorPickerInputColors[][];\n        }\n\n        // Convert any string colors to ColorPickerColor\n        this.colors = normalizedColors.map(row => {\n            return row.map(color => color instanceof ColorPickerColor ? color : new ColorPickerColor(color, color));\n        });\n    }\n\n    /**\n     * The currently selected color. If this is one of the `colors` in the colors collection, it will be visually\n     * highlighted in the swatch. It will also be shown in the input panel, if enabled (see showInput).\n     * Note that this will always be a `ColorPickerColor` object, even if plain strings are provided to the colors property.\n     * See below for details of the `ColorPickerColor` class.\n     */\n    @Input()\n    set selected(selected: ColorPickerColor) {\n        this.selected$.next(selected);\n    }\n\n    /**\n     * The number of columns to display in the color swatch. Set this to -1 if the width should be specified by a stylesheet\n     * instead, e.g. to provide a responsive layout.\n     */\n    @Input()\n    set columns(columns: number) {\n        this.columns$.next(columns);\n    }\n\n    /** The style of the color swatch buttons. */\n    @Input()\n    buttonStyle: ColorPickerButtonStyle = 'circle';\n\n    /** The size of the color swatch buttons. Three size variants are currently supported. */\n    @Input()\n    set buttonSize(buttonSize: ColorPickerButtonSize) {\n        this.buttonSize$.next(buttonSize);\n    }\n\n    /** Whether to show tooltips above the color swatch buttons. These contain the color name if provided; otherwise the color hex/RGBA value. */\n    @Input()\n    showTooltips: boolean = false;\n\n    /** Whether to show the hex/RGBA input panel. */\n    @Input()\n    showInput: boolean = false;\n\n    /** The default input mode to display in the input panel. The user can switch modes using the toggle button. */\n    @Input()\n    inputMode: ColorPickerInputMode = 'hex';\n\n    /** Defines a function that returns an aria-label for ColorPickerColor. */\n    @Input()\n    colorAriaLabel: (color: ColorPickerColor) => string = this.getColorAriaLabel;\n\n    /** Defines a function that returns an aria-label for the button that switches input modes. */\n    @Input()\n    switchModeAriaLabel: (mode: ColorPickerInputMode) => string = this.getSwitchModeAriaLabel;\n\n    /** Define a function that returns an aria-label for the input control. */\n    @Input()\n    inputAriaLabel: (mode: ColorPickerInputMode) => string = this.getInputAriaLabel;\n\n    /** Emitted when the user changes the selected color, either by clicking a color swatch button, or entering a valid color value into the input panel text field. */\n    @Output()\n    selectedChange = new EventEmitter<ColorPickerColor>();\n\n    /** Emitted when the user changes the colour input mode */\n    @Output()\n    inputModeChange = new EventEmitter<ColorPickerInputMode>();\n\n    /** Emitted when the user presses enter in the input panel text field. This can be used to commit a color change and/or close a popup. */\n    @Output()\n    inputSubmit = new EventEmitter<void>();\n\n    @HostBinding('style.width')\n    cssWidth = 'auto';\n\n    colors: ColorPickerColor[][] = [];\n    selected$ = new BehaviorSubject<ColorPickerColor>(null);\n    columns$ = new BehaviorSubject<number>(-1);\n    buttonSize$ = new BehaviorSubject<ColorPickerButtonSize>('md');\n    inputPatterns = {\n        'hex': /^#(?:[\\da-fA-F]{3}){1,2}$/,\n        'rgba': /^(?:rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\))|(?:rgba\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3},\\s*\\d(\\.\\d+)?\\))$/\n    };\n\n    /** Access the ngModel instance of the input field */\n    @ViewChild('inputField', { static: false }) inputFormControl: NgModel;\n    @ViewChild(TabbableListDirective) tabbableList: TabbableListDirective;\n\n    private readonly _onDestroy = new Subject();\n\n    ngOnInit(): void {\n\n        // Skip emitting the initial selectedChange\n        this.selected$.pipe(pairwise(), takeUntil(this._onDestroy)).subscribe(([prev, curr]) => {\n            if (prev) {\n                this.selectedChange.emit(curr);\n            }\n        });\n\n        // Set the width based on column count and button size\n        combineLatest([this.columns$, this.buttonSize$])\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(([columns, buttonSize]) => {\n                if (columns > 0) {\n                    const w = columns * (BUTTON_WIDTHS[buttonSize] + (2 * BUTTON_MARGIN));\n                    this.cssWidth = `${w}px`;\n                } else {\n                    this.cssWidth = 'auto';\n                }\n            });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    @HostListener('focus', ['$event'])\n    onFocus() {\n        // Forward focus to the color grid\n        this.tabbableList.focusTabbableItem();\n    }\n\n    updateColorValue(input: string, mode: ColorPickerInputMode): void {\n        if (this.inputPatterns[mode].test(input)) {\n            this.selected$.next(new ColorPickerColor('Custom', input, mode));\n        }\n    }\n\n    toggleColorEntryType(): void {\n\n        // update the input mode\n        this.inputMode = (this.inputMode === 'hex') ? 'rgba' : 'hex';\n\n        // emit the new input mode\n        this.inputModeChange.emit(this.inputMode);\n\n        // get the current color value if there is one\n        const color = this.selected$.value;\n\n        // if there is no selected color property then skip\n        if (color) {\n\n            // get the new color value\n            const newColor = this.inputMode === 'hex' ? color.hex : color.rgba;\n\n            // update the selected color value based on the input mode\n            this.updateColorValue(newColor, this.inputMode);\n\n            // forcibly update the validation status of ngModel to prevent any\n            // incorrect error states in the underlying form control\n            // (running change detection will not suffice)\n            this.inputFormControl.control.setValue(newColor);\n        }\n\n    }\n\n    private getColorAriaLabel(color: ColorPickerColor): string {\n        return `Select color ${color.name}`;\n    }\n\n    private getSwitchModeAriaLabel(mode: ColorPickerInputMode): string {\n        return `Switch input mode to ${mode === 'hex' ? 'RGBA' : 'hex'}`;\n    }\n\n    private getInputAriaLabel(mode: ColorPickerInputMode): string {\n        return `Edit ${mode} color value`;\n    }\n}\n","<div class=\"ux-color-picker\" uxTabbableList direction=\"horizontal\">\n  <div class=\"ux-color-picker-swatch\">\n    @for (row of colors; track row) {\n      <div class=\"ux-color-picker-swatch-row\">\n        @for (color of row; track color) {\n          <div\n            #colorPickerColor\n            class=\"ux-color-picker-color\"\n            [class.ux-small]=\"(buttonSize$ | async) === 'sm'\"\n            [class.ux-large]=\"(buttonSize$ | async) === 'lg'\"\n            [class.ux-circle]=\"buttonStyle === 'circle'\"\n            [class.ux-selected]=\"color === (selected$ | async)\">\n            <button type=\"button\"\n              uxFocusIndicator\n              [attr.aria-label]=\"colorAriaLabel(color)\"\n              [attr.aria-selected]=\"color === (selected$ | async)\"\n              class=\"btn btn-icon\"\n              [uxColorContrast]=\"color.hex\"\n              [style.background-color]=\"color.rgba\"\n              (click)=\"selected$.next(color)\"\n              uxTabbableListItem\n              [uxTooltip]=\"color.name\"\n              [tooltipDisabled]=\"!showTooltips\">\n              <ux-icon name=\"checkmark\"></ux-icon>\n            </button>\n          </div>\n        }\n      </div>\n    }\n  </div>\n\n  @if (showInput) {\n    <div class=\"ux-color-picker-input-panel\">\n      <div class=\"ux-color-picker-input-header\">\n        <div class=\"ux-color-picker-preview\"\n          [style.background-color]=\"(selected$ | async).rgba\"\n          [class.ux-circle]=\"buttonStyle === 'circle'\">\n        </div>\n        @if (inputMode === 'hex') {\n          <label attr.for=\"{{ id }}-input-field\">HEX</label>\n        }\n        @if (inputMode === 'rgba') {\n          <label attr.for=\"{{ id }}-input-field\">RGBA</label>\n        }\n        <button type=\"button\"\n          [attr.aria-label]=\"switchModeAriaLabel(inputMode)\"\n          class=\"btn btn-link btn-icon button-secondary ux-color-picker-input-toggle\"\n          (click)=\"toggleColorEntryType(); $event.stopPropagation()\">\n          <ux-icon name=\"chevron-right\"></ux-icon>\n        </button>\n      </div>\n      <div class=\"ux-color-picker-input\"\n        [class.has-error]=\"inputField.errors\"\n        [class.has-feedback]=\"inputField.errors\">\n        <input type=\"text\"\n          attr.id=\"{{id}}-input-field\"\n          [attr.aria-description]=\"inputAriaLabel(inputMode)\"\n          class=\"form-control\"\n          #inputField=\"ngModel\"\n          [ngModel]=\"(selected$ | async)[inputMode]\"\n          (ngModelChange)=\"updateColorValue($event, inputMode)\"\n          [pattern]=\"inputPatterns[inputMode].source\"\n          (keyup.enter)=\"inputSubmit.emit()\">\n          <ux-icon class=\"form-control-feedback\" name=\"alert\"></ux-icon>\n        </div>\n      </div>\n    }\n  </div>\n","import { BooleanInput, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  forwardRef,\n  inject,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet uniqueId = 0;\n\nexport const NUMBER_PICKER_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => NumberPickerComponent),\n  multi: true,\n};\n\n@Component({\n  selector: 'ux-number-picker, ux-number-picker-inline',\n  templateUrl: './number-picker.component.html',\n  providers: [NUMBER_PICKER_VALUE_ACCESSOR],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.ux-number-picker-invalid]': '!_valid && !disabled && !_formGroup',\n  },\n})\nexport class NumberPickerComponent implements ControlValueAccessor, OnDestroy, OnChanges {\n  readonly _formGroup = inject(FormGroupDirective, { optional: true });\n\n  private readonly _changeDetector = inject(ChangeDetectorRef);\n\n  private _min: number;\n  private _max: number;\n  private _step: number | ((value: number, direction: StepDirection) => number) = 1;\n  private _disabled: boolean = false;\n  private _value: number = 0;\n  private _lastValue: number;\n  private _focused: boolean = false;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private _propagateChange = (_: number) => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  _touchedChange = () => {};\n\n  /** Sets the id of the number picker. The child input will have this value with a -input suffix as its id. */\n  @Input() id: string = `ux-number-picker-${uniqueId++}`;\n\n  /** Provide an aria label for the number picker. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** Provide an aria labelledby attribute */\n  @Input('aria-labelledby') labelledBy: string;\n\n  /** Define the precision of floating point values */\n  @Input() precision: number = Number.MAX_SAFE_INTEGER.toString().length - 1;\n\n  /** The placeholder text which appears in the text input area when it is empty.*/\n  @Input() placeholder: string;\n\n  /** Specified if this is a required input. */\n  @Input() required: boolean;\n\n  /** Specified if this is a readonly input. */\n  @Input() set readonly(value: boolean) {\n    this._readonly = coerceBooleanProperty(value);\n  }\n\n  get readonly(): boolean {\n    return this._readonly;\n  }\n\n  /** If two way binding is used this value will be updated any time the number picker value changes. */\n  @Output() valueChange = new EventEmitter<number>();\n\n  /** Sets the value displayed in the number picker component. */\n  @Input()\n  get value(): number {\n    return this._value;\n  }\n\n  set value(value: number) {\n    if (this._value !== value) {\n      this._value = value;\n      this._valid = this.isValid();\n    }\n  }\n\n  /** Defines the minimum value the number picker can set. */\n  @Input()\n  get min(): number {\n    return this._min;\n  }\n\n  set min(value) {\n    this._min = coerceNumberProperty(value);\n  }\n\n  /** Defines the maximum value the number picker can set. */\n  @Input()\n  get max(): number {\n    return this._max;\n  }\n\n  set max(value) {\n    this._max = coerceNumberProperty(value);\n  }\n\n  /** Defines the amount the number picker should increase or decrease when the buttons or arrow keys are used. */\n  @Input()\n  set step(value: number | ((value: number, direction: StepDirection) => number)) {\n    if (typeof value === 'function') {\n      this._step = value;\n    } else {\n      this._step = coerceNumberProperty(value);\n    }\n  }\n\n  /** Indicate if the number picker is disabled or not. */\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n\n  set disabled(value) {\n    this._disabled = coerceBooleanProperty(value);\n  }\n\n  get inputId(): string {\n    return this.id + '-input';\n  }\n\n  /** Store the current valid state */\n  _valid: boolean = true;\n\n  /** This is a flag to indicate when the component has been destroyed to avoid change detection being made after the component\n   *  is no longer instantiated. A workaround for Angular Forms bug (https://github.com/angular/angular/issues/27803) */\n  private _isDestroyed: boolean = false;\n  private _readonly: boolean = false;\n\n  ngOnChanges(): void {\n    this._valid = this.isValid();\n  }\n\n  ngOnDestroy(): void {\n    this._isDestroyed = true;\n  }\n\n  getStep(direction: StepDirection): number {\n    return typeof this._step === 'number' ? this._step : this._step(this.value, direction);\n  }\n\n  increment(event?: MouseEvent | KeyboardEvent): void {\n    if (event) {\n      event.preventDefault();\n    }\n\n    if (!this.disabled && !this.readonly) {\n      this.value = Math.max(\n        Math.min(\n          this.value + this.getStep(StepDirection.Increment),\n          this.getMaxValueForComparison()\n        ),\n        this.getMinValueForComparison()\n      );\n\n      // account for javascripts terrible handling of floating point numbers\n      this.value = parseFloat(this.value.toPrecision(this.precision));\n\n      // emit the value to the Output and Angular forms\n      this._emitValueChange(this.value);\n    }\n  }\n\n  decrement(event?: MouseEvent | KeyboardEvent): void {\n    if (event) {\n      event.preventDefault();\n    }\n\n    if (!this.disabled && !this.readonly) {\n      this.value = Math.min(\n        Math.max(\n          this.value - this.getStep(StepDirection.Decrement),\n          this.getMinValueForComparison()\n        ),\n        this.getMaxValueForComparison()\n      );\n\n      // account for javascripts terrible handling of floating point numbers\n      this.value = parseFloat(this.value.toPrecision(this.precision));\n\n      // emit the value to the Output and Angular forms\n      this._emitValueChange(this.value);\n    }\n  }\n\n  isValid(): boolean {\n    return (\n      this.value >= this.getMinValueForComparison() && this.value <= this.getMaxValueForComparison()\n    );\n  }\n\n  onScroll(event: WheelEvent): void {\n    if (!this._focused) {\n      return;\n    }\n    // get the distance scrolled\n\n    const scrollValue = event.deltaY || (event as any).wheelDelta;\n\n    // increment or decrement accordingly\n    scrollValue < 0 ? this.increment(event) : this.decrement(event);\n  }\n\n  writeValue(value: number): void {\n    if (value !== undefined) {\n      this._value = value;\n      this._valid = this.isValid();\n      // if the component is not destroyed then run change detection\n      // workaround for Angular bug (https://portal.digitalsafe.net/browse/EL-3694)\n      if (!this._isDestroyed) {\n        this._changeDetector.detectChanges();\n      }\n    }\n  }\n\n  registerOnChange(fn: (_: number) => void): void {\n    this._propagateChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._touchedChange = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  /** Set the value and emit the change to the output and Angular forms. */\n  _emitValueChange(value: number): void {\n    // This is a workaround for angular bug https://github.com/angular/angular/issues/12540\n    if (value === this._lastValue) {\n      return;\n    }\n    this._lastValue = value;\n    this.valueChange.emit(value);\n    this._propagateChange(value);\n  }\n\n  getMaxValueForComparison(): number {\n    return this.max === undefined || this.max === null ? Infinity : this.max;\n  }\n\n  getMinValueForComparison(): number {\n    return this.min === undefined || this.min === null ? -Infinity : this.min;\n  }\n\n  @HostListener('focusin')\n  onFocusIn(): void {\n    this._focused = true;\n  }\n\n  @HostListener('focusout')\n  onFocusOut(): void {\n    this._focused = false;\n  }\n\n  static ngAcceptInputType_readonly: BooleanInput;\n}\n\nexport enum StepDirection {\n  Increment,\n  Decrement,\n}\n","<input\n    type=\"number\"\n    [id]=\"inputId\"\n    role=\"spinbutton\"\n    class=\"form-control number-picker-input\"\n    [(ngModel)]=\"value\"\n    (ngModelChange)=\"_emitValueChange($event)\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [required]=\"required\"\n    [attr.placeholder]=\"placeholder\"\n    [readonly]=\"readonly\"\n    (blur)=\"_touchedChange()\"\n    (keydown.ArrowDown)=\"decrement($event)\"\n    (keydown.ArrowUp)=\"increment($event)\"\n    (wheel)=\"onScroll($event)\"\n    step=\"any\"\n    [disabled]=\"disabled\"\n    [attr.aria-valuemin]=\"min\"\n    [attr.aria-valuenow]=\"value\"\n    [attr.aria-valuemax]=\"max\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-labelledby]=\"labelledBy\"\n/>\n\n<div class=\"number-picker-controls\">\n    <div\n        class=\"number-picker-control number-picker-control-up\"\n        (click)=\"increment($event); _touchedChange()\"\n        [class.disabled]=\"disabled || value >= max || readonly\"\n    >\n        <ux-icon name=\"up\"></ux-icon>\n    </div>\n\n    <div\n        class=\"number-picker-control number-picker-control-down\"\n        (click)=\"decrement($event); _touchedChange()\"\n        [class.disabled]=\"disabled || value <= min || readonly\"\n    >\n        <ux-icon name=\"down\"></ux-icon>\n    </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { IconModule } from '../icon/index';\nimport { NumberPickerComponent } from './number-picker.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        IconModule,\n        FormsModule\n    ],\n    exports: [NumberPickerComponent],\n    declarations: [NumberPickerComponent]\n})\nexport class NumberPickerModule { }\n","import { ObserversModule } from '@angular/cdk/observers';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\nimport { TooltipService } from './tooltip.service';\n\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        OverlayModule,\r\n        ObserversModule\r\n    ],\r\n    exports: [TooltipDirective, TooltipComponent],\r\n    declarations: [TooltipComponent, TooltipDirective],\r\n    providers: [TooltipService]\r\n})\nexport class TooltipModule { }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/index';\nimport { NumberPickerModule } from '../number-picker/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { ColorPickerComponent } from './color-picker.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FormsModule,\n        NumberPickerModule,\n        TooltipModule,\n        IconModule\n    ],\n    exports: [\n        ColorPickerComponent\n    ],\n    declarations: [\n        ColorPickerComponent\n    ],\n})\nexport class ColorPickerModule { }\n","import { Directive, Input, OnDestroy, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Directive({\n    selector: '[uxColumnSorting]'\n})\nexport class ColumnSortingDirective implements OnDestroy {\n\n    /** If set to true the column will sort by only this column, removing sorting from all others. */\n    @Input() singleSort: boolean;\n\n    /** Provide a custom template for the sort indicator */\n    @Input() sortIndicator: TemplateRef<ColumnSortingIndicatorContext>;\n\n    /** Emit the current sort state for all columns within the table */\n    events = new Subject<ReadonlyArray<ColumnSortingOrder>>();\n\n    /** Store the current sort state for all columns within the table */\n    order: ReadonlyArray<ColumnSortingOrder> = [];\n\n    ngOnDestroy(): void {\n        this.events.complete();\n    }\n\n    /** Toggle the sorting state of a column */\n    toggleColumn(sorting: ColumnSortingOrder): ReadonlyArray<ColumnSortingOrder> {\n\n        // apply sorting based on the single or multiple sort\n        this.order = this.singleSort ? this.toggleSingleColumn(sorting) : this.toggleMultipleColumn(sorting);\n\n        // emit the latest order\n        this.events.next(this.order);\n\n        return this.order;\n    }\n\n    /** Explicitly set the column state */\n    setColumnState(key: string, state: ColumnSortingState): void {\n\n        // check if the sorting has actually changed\n        if (this.order.find(column => column.key === key && column.state === state)) {\n            return;\n        }\n\n        // if only one column can be sorted and the current column has a sort direction remove all others\n        if (this.singleSort && state !== ColumnSortingState.NoSort) {\n            this.order = [];\n        } else {\n            // remove the item from the state if present\n            this.order = this.order.filter(column => column.key !== key);\n        }\n\n        // if the column has active sorting then we should add it to the array again\n        if (state === ColumnSortingState.Ascending || state === ColumnSortingState.Descending) {\n            this.order = [...this.order, { key, state }];\n        }\n    }\n\n    /** Toggle the sorting state of a column when using single select */\n    private toggleSingleColumn(sorting: ColumnSortingOrder): ColumnSortingOrder[] {\n        return sorting.state === ColumnSortingState.NoSort ? [] : [{ key: sorting.key, state: sorting.state }];\n    }\n\n    /** Toggle the sorting state of a column when using multiple select */\n    private toggleMultipleColumn(sorting: ColumnSortingOrder): ColumnSortingOrder[] {\n        // reorder columns here\n        const idx = this.order.findIndex(column => column.key === sorting.key);\n\n        // if wasn't previously selected add to list and it is being sorted\n        if (idx === -1 && sorting.state !== ColumnSortingState.NoSort) {\n            return [...this.order, { key: sorting.key, state: sorting.state }];\n        }\n\n        // if we are sorting it change the sorting order\n        if (sorting.state === ColumnSortingState.Ascending || sorting.state === ColumnSortingState.Descending) {\n            return [...this.order.filter(_column => _column.key !== sorting.key), { key: sorting.key, state: sorting.state }];\n        }\n\n        // Otherwise remove the item\n        return this.order.filter(_column => _column.key !== sorting.key);\n    }\n}\n\nexport interface ColumnSortingOrder {\n    key: string;\n    state: ColumnSortingState;\n}\n\nexport enum ColumnSortingState {\n    Ascending = 'ascending',\n    Descending = 'descending',\n    NoSort = 'none'\n}\n\nexport interface ColumnSortingIndicatorContext {\n    state: ColumnSortingState;\n    order: number;\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ColumnSortingDirective, ColumnSortingIndicatorContext, ColumnSortingOrder, ColumnSortingState } from './column-sorting.directive';\n\n@Component({\n    selector: 'ux-column-sorting',\n    templateUrl: './column-sorting.component.html',\n    exportAs: 'ux-column-sorting',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ColumnSortingComponent implements OnInit, OnChanges, OnDestroy {\n\n    private readonly _sorter = inject(ColumnSortingDirective);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Defines the sorting order of a column: `NoSort`, `Ascending` or `Descending`. */\n    @Input() state: ColumnSortingState = ColumnSortingState.NoSort;\n\n    /** Defines a unique identifier for the column that can be used when sorting. */\n    @Input() key: string;\n\n    /** Store the order of the sorting - used when multiple columns are being sorted at once */\n    @Input() order: number;\n\n    /** Determine if a column can have a `NoSort` state */\n    @Input() allowNoSort: boolean = true;\n\n    /** Specifies name of the ascending icon */\n    @Input() ascendingIcon: string = 'ascend';\n\n    /** Specifies name of the descending icon */\n    @Input() descendingIcon: string = 'descend';\n\n    /**\n     * Changes the state of the sorting on the column between `NoSort`, `Ascending` and `Descending`.\n     * This returns an array of objects for each column being sorted containing `key: string` and `state: ColumnSortingState`.\n     * State can be used to find the current sorting state of the column eg. `(state === ColumnSortingState.Ascending)`.\n     * The `ColumnSortingOrder` interface has been provided for objects in the array.\n     */\n    @Output() stateChange = new EventEmitter<ColumnSortingState>();\n\n    /** Emit whenever the order changes */\n    @Output() orderChange = new EventEmitter<number>();\n\n    /** Expose the sorting state enum to the view */\n    ColumnSortingState = ColumnSortingState;\n\n    /** Access the custom sort indicator if one was provided */\n    get _sortIndicator(): TemplateRef<ColumnSortingIndicatorContext> {\n        return this._sorter.sortIndicator;\n    }\n\n    /** Unsubscribe from all observables on component destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    ngOnInit(): void {\n        // listen for changes triggered by the directive\n        this._sorter.events.pipe(takeUntil(this._onDestroy$))\n            .subscribe(columns => this.updateState(columns));\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // if the state input is changed then apply the change\n        if (changes.state && changes.state.currentValue !== changes.state.previousValue) {\n            this._sorter.setColumnState(this.key, this.state);\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    /** Toggle the sorting state of a column - this is designed to be programmatically called by the consuming component */\n    changeState(): ColumnSortingOrder[] {\n\n        switch (this.state) {\n\n            case ColumnSortingState.Ascending:\n                this.state = ColumnSortingState.Descending;\n                break;\n\n            case ColumnSortingState.Descending:\n                this.state = this.allowNoSort ? ColumnSortingState.NoSort : ColumnSortingState.Ascending;\n                break;\n\n            default:\n                this.state = ColumnSortingState.Ascending;\n        }\n\n        // change detection should be run\n        this._changeDetector.markForCheck();\n\n        // inform parent (internally we use a ReadonlyArray but are returning a standard array to prevent breaking changes to the public API)\n        return this._sorter.toggleColumn({ key: this.key, state: this.state }) as ColumnSortingOrder[];\n    }\n\n    /** Update the state based on column order */\n    private updateState(columns: ReadonlyArray<ColumnSortingOrder>): void {\n        // if we are sorting this column then find the matching data\n        const columnIdx = columns.findIndex(_column => _column.key === this.key);\n\n        // if we are not sorting this column then mark it as NoSort\n        if (columnIdx === -1) {\n            this.state = ColumnSortingState.NoSort;\n        }\n\n        // only store the number if we have 2 or more columns being sorted\n        this.order = columns.length < 2 || columnIdx === -1 ? null : columnIdx + 1;\n\n        // emit the latest order value\n        if (typeof this.order === 'number') {\n            this.orderChange.emit(this.order);\n        }\n\n        // change detection should be run\n        this._changeDetector.markForCheck();\n\n        // Emit the latest change\n        this.stateChange.emit(this.state);\n    }\n}\n","<div class=\"ux-column-sorting\"\n  [class.ux-column-sorting-hidden]=\"state === ColumnSortingState.NoSort\">\n\n  <!-- The default sort indicator -->\n  @if (!_sortIndicator) {\n    <ux-icon\n      class=\"ux-column-sorting-icon\"\n      [class.column-sorting-icon-hidden]=\"state === ColumnSortingState.NoSort\"\n      [name]=\"state === ColumnSortingState.Descending ? descendingIcon : ascendingIcon\">\n    </ux-icon>\n    <p class=\"ux-column-sorting-number\" aria-hidden=\"true\">{{ order }}</p>\n  }\n\n  <!-- Custom sort indicator -->\n  @if (_sortIndicator) {\n    <ng-container\n      [ngTemplateOutlet]=\"_sortIndicator\"\n      [ngTemplateOutletContext]=\"{ state: state, order: order }\">\n    </ng-container>\n  }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IconModule } from '../icon/index';\nimport { ColumnSortingComponent } from './column-sorting.component';\nimport { ColumnSortingDirective } from './column-sorting.directive';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        IconModule\n    ],\n    exports: [\n        ColumnSortingComponent,\n        ColumnSortingDirective\n    ],\n    declarations: [\n        ColumnSortingComponent,\n        ColumnSortingDirective\n    ]\n})\nexport class ColumnSortingModule { }","import { Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\nimport { ConduitZone } from './conduit-zone.service';\nimport { ConduitEvent } from './interfaces/conduit-event';\nimport { ConduitMetadata } from './interfaces/conduit-metadata';\n\nexport class ConduitSubject {\n\n     \n    private readonly _subject: Subject<any>;\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor(public conduit: ConduitMetadata, private readonly _zone: ConduitZone, public zoneId: string) {\n\n        // store the target subject object\n        this._subject = conduit.subject;\n\n        // check if there are any conduits that have supplied an initial value\n        this.getInitialValue();\n\n        // subscribe to changes to the source subject\n        this._subject.pipe(distinctUntilChanged(conduit.changeDetection), takeUntil(this._onDestroy))\n            .subscribe(this.onOutput.bind(this));\n\n        // subscribe to the zone events and root zone events\n        _zone.getEvents().pipe(filter(event => event.conduit.id === conduit.id), takeUntil(this._onDestroy)).subscribe(this.onInput.bind(this));\n    }\n\n    /** Check all allow inputs to see if there is a value we should initially set the conduit to */\n    getInitialValue(): void {\n\n        // if we do not accept inputs then do nothing\n        if (this.conduit.acceptsInput === false) {\n            return;\n        }\n\n        // return all subjects that are 1) Not itself 2) In a zone that is listed in acceptsInput 3) Have a currentValue set\n        const subjects = this._zone.getSubjects().filter(subject => {\n\n            // If this is itself or if it has not value to give us then do nothing\n            // eslint-disable-next-line no-prototype-builtins\n            if (subject === this || subject.conduit.id !== this.conduit.id || !subject.conduit.hasOwnProperty('currentValue')) {\n                return false;\n            }\n\n            // if acceptsInput is true then we return every time\n            if (this.conduit.acceptsInput === true) {\n                return true;\n            }\n\n            if (Array.isArray(this.conduit.acceptsInput)) {\n                return this.conduit.acceptsInput.indexOf(subject.zoneId) !== -1;\n            }\n        });\n\n        // if there are no matches then do nothing\n        if (subjects.length === 0) {\n            return;\n        }\n\n        // otherwise sort by the last modified field\n        subjects.sort((subjectOne, subjectTwo) => subjectOne.conduit.lastModified.getTime() < subjectTwo.conduit.lastModified.getTime() ? 1 : -1);\n\n        // get the most recent value\n        this._subject.next(subjects[0].conduit.currentValue);\n    }\n\n    /** This will be triggered when a conduits value has changed */\n    onInput(event: ConduitEvent): void {\n        // if we dont accept input or we emitted this value then do nothing\n        if (this.conduit.acceptsInput === false || event.conduit === this.conduit) {\n            return;\n        }\n\n        // check if the conduit produces output - if not we only do something if we are in the same zone\n        if (event.conduit.producesOutput === false && event.zoneId !== this.zoneId) {\n            return;\n        }\n\n        // check if we only accept inputs from specific zones\n        if (Array.isArray(this.conduit.acceptsInput)) {\n            // check if the event came from an acceptable zone\n            if (!this.conduit.acceptsInput.find(zone => zone === event.zoneId)) {\n                return;\n            }\n        }\n\n        // if required transform the value\n        const outputValue = this.conduit.map ? this.conduit.map(event.value) : event.value;\n\n        // update the subject\n        this._subject.next(outputValue);\n    }\n\n    /** This will be fired when this conduit emits a new value */\n     \n    onOutput(value: any): void {\n\n        // store the most recent value and when it was modified - can be used for any new conduits to lookup a value\n        this.conduit.currentValue = value;\n        this.conduit.lastModified = new Date();\n\n        // check if this should produce output\n        if (this.conduit.producesOutput) {\n            this._zone.emit({ conduit: this.conduit, zoneId: this.zoneId, value });\n        }\n    }\n\n    /** Unsubscribe once this subject is destroyed */\n    destroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ConduitSubject } from './conduit-subject';\nimport { ConduitEvent } from './interfaces/conduit-event';\nimport { ConduitMetadata } from './interfaces/conduit-metadata';\nimport { ConduitProperties } from './interfaces/conduit-properties';\n\n@Injectable()\nexport class ConduitZone implements OnDestroy {\n    /** Create a global subject store */\n    static subjects: ConduitSubject[] = [];\n\n    /** Expose an event stream of new values */\n    static events = new Subject<ConduitEvent>();\n\n    /** Store the zone name */\n    private _zoneId: string;\n\n    ngOnDestroy(): void {\n        // find all conduit subjects that are part of this zone\n        ConduitZone.subjects\n            .filter(_subject => _subject.zoneId === this._zoneId)\n            .forEach(_subject => this.unregisterConduit(_subject.conduit));\n    }\n\n    /** Store reference to the repository and begin watching for and emitting changes */\n    registerConduit(conduit: ConduitMetadata): void {\n        ConduitZone.subjects.push(new ConduitSubject(conduit, this, this._zoneId));\n    }\n\n    /** Destroy a conduit */\n    unregisterConduit(conduit: ConduitMetadata): void {\n        const subject = this.getConduitSubject(conduit.subject);\n\n        if (subject) {\n            // remove the subject from the internal list of conduit subjects\n            ConduitZone.subjects = ConduitZone.subjects.filter(_subject => _subject !== subject);\n\n            // perform all unsubscriptions\n            subject.destroy();\n        }\n    }\n\n    /** Provide the zone with an ID */\n    setZoneId(zoneId: string): void {\n        this._zoneId = zoneId;\n    }\n\n    /** Emit a value to all zones for checking */\n    emit(event: ConduitEvent): void {\n        ConduitZone.events.next(event);\n    }\n\n    /** Retrieve a conduit subsject object from the rxjs subject */\n    getConduitSubject(subject: Subject<void>): ConduitSubject | null {\n        return ConduitZone.subjects.find(_subject => _subject.conduit.subject === subject);\n    }\n\n    /** Get all subjects from all zones */\n    getSubjects(): ConduitSubject[] {\n        return ConduitZone.subjects;\n    }\n\n    /** Alter the properties of a conduit dynamically */\n    setConduitProperties(subject: Subject<string>, properties: Partial<ConduitProperties>): void {\n        // find the conduit with the matching subject\n        const conduitSubject = this.getSubjects().find(\n            _conduit => _conduit.conduit.subject === subject\n        );\n\n        // if a match was found update the properties\n        if (conduitSubject) {\n            // update each specified property\n            for (const prop in properties) {\n                conduitSubject.conduit[prop] = properties[prop];\n            }\n        }\n    }\n\n    /** Programmatically create a conduit at runtime */\n    createConduit(subject: Subject<void>, properties: ConduitProperties): void {\n        // register the conduit with the zone\n        this.registerConduit({ ...properties, subject });\n    }\n\n    /** Register all conduits in a component */\n     \n    registerConduits(component: any): void {\n        if (Array.isArray(component._conduits)) {\n            component._conduits.forEach((conduit: ConduitMetadata) =>\n                this.registerConduit({ ...conduit, subject: component[conduit.propertyKey] })\n            );\n        }\n    }\n\n    /** Register all conduits in a component */\n     \n    unregisterConduits(component: any): void {\n        if (Array.isArray(component._conduits)) {\n            component._conduits.forEach((conduit: ConduitMetadata) =>\n                this.unregisterConduit(conduit)\n            );\n        }\n    }\n\n    /** Return the global event stream */\n    getEvents(): Subject<ConduitEvent> {\n        return ConduitZone.events;\n    }\n}\n","import { Directive, inject, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ConduitZone } from './conduit-zone.service';\nimport { ConduitProperties } from './interfaces/conduit-properties';\n\n@Directive({\n    selector: 'ux-conduit',\n})\nexport class ConduitComponent implements OnInit, OnDestroy {\n    protected _zone = inject(ConduitZone, { optional: true });\n\n    /** We need to register the conduits with the zone when the component is initialised */\n    ngOnInit(): void {\n        // register the conduit in the zone and ensure it gets the correct instance of the target\n        this._zone.registerConduits(this);\n    }\n\n    /** We need to unregister the conduits when the component is destroyed */\n    ngOnDestroy(): void {\n        this._zone.unregisterConduits(this);\n    }\n\n    /** Alter the properties of a conduit dynamically */\n    setConduitProperties(subject: Subject<string>, properties: Partial<ConduitProperties>): void {\n        this._zone.setConduitProperties(subject, properties);\n    }\n\n    /** Programmatically create a conduit at runtime */\n    createConduit(subject: Subject<void>, properties: ConduitProperties): void {\n        this._zone.createConduit(subject, properties);\n    }\n}\n","import { Directive, OnInit } from '@angular/core';\nimport { ConduitComponent } from './conduit.component';\n\n@Directive({\n    selector: 'ux-conduit-zone'\n})\nexport abstract class ConduitZoneComponent extends ConduitComponent implements OnInit {\n    abstract zoneId: string;\n\n    ngOnInit(): void {\n        this._zone.setZoneId(this.zoneId);\n        super.ngOnInit();\n    }\n}\n","export interface ConduitProperties {\n    id: number | string;\n    acceptsInput?: boolean | string[];\n    producesOutput?: boolean;\n     \n    changeDetection?: (x: any, y: any) => boolean;\n     \n    map?: any;\n}\n\nexport const defaultConduitProps: Partial<ConduitProperties> = {\n    acceptsInput: true,\n    producesOutput: true,\n};\n"," \n/* eslint-disable @typescript-eslint/no-wrapper-object-types */\nimport { ConduitMetadata } from './interfaces/conduit-metadata';\nimport { ConduitProperties, defaultConduitProps } from './interfaces/conduit-properties';\n\n/** Expose the property that conduits will be stored in */\nexport const CONDUITS = '_conduits';\n\ntype PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;\n\n/** Create the conduit property decorator */\nexport function Conduit(properties: ConduitProperties | Function): PropertyDecorator {\n  return (target: Object, propertyKey: string) => {\n    if (typeof properties === 'function') {\n      properties = properties.call(null);\n    }\n\n    // if the target does not already have a conduit list then create one\n    // eslint-disable-next-line no-prototype-builtins\n    if (!target.hasOwnProperty(CONDUITS)) {\n      Object.defineProperty(target, CONDUITS, { value: [] });\n    }\n\n    // add the conduit to the list ensuring all required properties are provided\n    target[CONDUITS].push({\n      ...defaultConduitProps,\n      ...properties,\n      target,\n      propertyKey,\n    } as ConduitMetadata);\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { ConduitZoneComponent } from './conduit-zone.component';\nimport { ConduitComponent } from './conduit.component';\n\n/**\n * This module is not required to be imported but is required\n * by the Angular compiler, otherwise it will complain that\n * ConduitZoneComponent is not part of an NgModule and will\n * fail to build\n */\n@NgModule({\n    declarations: [\n        ConduitComponent,\n         \n        ConduitZoneComponent as any // Any is required as this is an abstract class\n    ]\n})\nexport class ConduitModule { }\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DragService<T = unknown> implements OnDestroy {\n\n    /** Emit when dragging begins */\n    onDragStart = new Subject<UxDragEvent<T>>();\n\n    /** Emit when dragging moves */\n    onDrag = new Subject<UxDragEvent<T>>();\n\n    /** Emit when dragging ends */\n    onDragEnd = new Subject<UxDragEvent<T>>();\n\n    /** Emit when the user is dragging over the drop area */\n    onDropEnter = new Subject<void>();\n\n    /** Emit when the user is dragging out of the drop area */\n    onDropLeave = new Subject<void>();\n\n    /** Emit when a drop occurs */\n    onDrop = new Subject<T>();\n\n    /** Destroy all observables */\n    ngOnDestroy(): void {\n        this.onDragStart.complete();\n        this.onDrag.complete();\n        this.onDragEnd.complete();\n        this.onDrop.complete();\n        this.onDropEnter.complete();\n        this.onDropLeave.complete();\n    }\n\n}\n\nexport type UxDragEvent<T = unknown> = { group?: string, event?: MouseEvent, data?: T };\n","import { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { Directive, ElementRef, EventEmitter, inject, Input, NgZone, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, first, takeUntil } from 'rxjs/operators';\nimport { DragService, UxDragEvent } from './drag.service';\n\nexport interface DragScrollEvent {\n    offsetX: number;\n    offsetY: number;\n}\n\n@Directive({\n    selector: '[uxDrag]'\n})\nexport class DragDirective<T = unknown> implements OnDestroy {\n    private readonly _elementRef = inject<ElementRef<Element>>(ElementRef);\n\n    private readonly _ngZone = inject(NgZone);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _scrollDispatcher = inject(ScrollDispatcher);\n\n    private readonly _drag = inject<DragService<T>>(DragService);\n\n    /** Detemine if we should show a clone when dragging */\n    @Input() clone: boolean = false;\n\n    /** Define the group the drag event belongs to */\n    @Input() group: string;\n\n    /** Associate some data with the drag event */\n    @Input() model: T;\n\n    /** Allow the dragging to be enabled/disabled */\n    @Input() draggable: boolean = true;\n\n    /** Emit an event when dragging starts */\n    @Output() onDragStart = new EventEmitter<MouseEvent>();\n\n    /** Emit an event when the mouse moves while dragging */\n    @Output() onDrag = new EventEmitter<MouseEvent>();\n\n    /** Emit an event when the document scrolls while dragging */\n    @Output() onDragScroll = new EventEmitter<DragScrollEvent>();\n\n    /** Emit an event when the dragging finishes */\n    @Output() onDragEnd = new EventEmitter<void>();\n\n    /** Emit when the user drops an item in a drop area */\n    @Output() onDrop = new EventEmitter<T>();\n\n    /** Emit when the user drags over a drop area */\n    @Output() onDropEnter = new EventEmitter<void>();\n\n    /** Emit when the user drags out of a drop area */\n    @Output() onDropLeave = new EventEmitter<void>();\n\n    /** Store the element we have cloned */\n    private _clone: Element;\n\n    /** Store the dragging state */\n    private _isDragging: boolean = false;\n\n    /** Store the mouse offset for the cloned element position */\n    private _offset: { x: number, y: number };\n\n    /** The nearest scrolling ancestor, populated while dragging */\n    private _scrollParent: Element;\n\n    /** The current scroll position of _scrollParent */\n    private _scrollPosition: { top: number, left: number };\n\n    /** The scroll event listener handle */\n    private _scrollListener: () => void;\n\n    /** The offset in pixels currently being scrolled while dragging */\n    private _scrollOffset: { x: number, y: number } = { x: 0, y: 0 };\n\n    /** The current `setInterval` handle for periodic scrolling */\n    private _scrollIntervalHandle: number;\n\n    /** Create an observable from the mouse down event */\n    private readonly _mousedown$ = fromEvent<MouseEvent>(this._elementRef.nativeElement, 'mousedown');\n\n    /** Create an observable from the mouse move event */\n    private readonly _mousemove$ = fromEvent<MouseEvent>(document, 'mousemove');\n\n    /** Create an observable from the mouse up event */\n    private readonly _mouseup$ = fromEvent<MouseEvent>(document, 'mouseup');\n\n    /** Use an observable to unsubscribe from all subscriptions */\n    protected _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // ensure all mouse down events on the object are captured\n        this._mousedown$.pipe(filter(() => this.draggable), takeUntil(this._onDestroy))\n            .subscribe(this.dragStart.bind(this));\n\n        // emit the outputs when drag events occur\n        this._drag.onDragStart.pipe(filter(() => this._isDragging), takeUntil(this._onDestroy))\n            .subscribe((dragEvent: UxDragEvent<T>) => this.onDragStart.emit(dragEvent.event));\n\n        this._drag.onDrag.pipe(filter(() => this._isDragging), takeUntil(this._onDestroy))\n            .subscribe((dragEvent: UxDragEvent<T>) => this.onDrag.emit(dragEvent.event));\n\n        this._drag.onDragEnd.pipe(filter(event => this._isDragging || (this.model && this.model === event.data)), takeUntil(this._onDestroy))\n            .subscribe(() => this.onDragEnd.emit());\n\n        this._drag.onDrop.pipe(filter(() => this._isDragging), takeUntil(this._onDestroy))\n            .subscribe((event: T) => this.onDrop.emit(event));\n\n        this._drag.onDropEnter.pipe(filter(() => this._isDragging), takeUntil(this._onDestroy))\n            .subscribe(() => this.onDropEnter.emit());\n\n        this._drag.onDropLeave.pipe(filter(() => this._isDragging), takeUntil(this._onDestroy))\n            .subscribe(() => this.onDropLeave.emit());\n    }\n\n    /** Emit events and create clone when drag starts */\n    dragStart(event: MouseEvent): void {\n        event.preventDefault();\n\n        // start listening for scroll events on the nearest scrollable ancestor element\n        this.createScrollEventListener();\n\n        if (this.clone) {\n            // clone the node\n            this.cloneNode(event);\n        }\n\n        // apply a class to the element being dragged\n        this._renderer.addClass(this._elementRef.nativeElement, 'ux-drag-dragging');\n\n        // store the dragging state\n        this._isDragging = true;\n\n        // emit the drag start event\n        this._ngZone.run(() => this._drag.onDragStart.next({ event, group: this.group, data: this.model }));\n\n        this._mousemove$.pipe(takeUntil(this._mouseup$), takeUntil(this._onDestroy))\n            .subscribe(this.dragMove.bind(this));\n\n        // When dragging stops emit the drag end\n        this._mouseup$.pipe(first()).subscribe(this.dragEnd.bind(this));\n    }\n\n    /** Emit event and update clone position when dragging moves */\n    dragMove(event: MouseEvent): void {\n        event.preventDefault();\n\n        // scroll the viewport if needed\n        this.updateScrolling(event);\n\n        if (this._clone) {\n            this.updateNodePosition(event);\n        }\n\n        // emit the drag start event\n        this._ngZone.run(() => this._drag.onDrag.next({ event, group: this.group, data: this.model }));\n    }\n\n    /** Emit event and destroy clone when dragging ends */\n    dragEnd(): void {\n\n        // if the drag ended outside of the viewport, stop the scrolling interval\n        this.stopScrolling();\n\n        this.removeScrollEventListener();\n\n        // if there was a clone, remove it\n        if (this._clone) {\n            this._renderer.removeChild(document.body, this._clone);\n            this._clone = null;\n        }\n\n        // remove the dragging class\n        this._renderer.removeClass(this._elementRef.nativeElement, 'ux-drag-dragging');\n\n        // emit the on drag end output\n        this._ngZone.run(() => this._drag.onDragEnd.next({ group: this.group, data: this.model }));\n\n        // store the dragging state\n        this._isDragging = false;\n    }\n\n    /** Emit the onDragScroll event */\n    scroll(): void {\n        const offsetX = this._scrollParent.scrollLeft - this._scrollPosition.left;\n        const offsetY = this._scrollParent.scrollTop - this._scrollPosition.top;\n\n        this.onDragScroll.emit({ offsetX, offsetY });\n\n        this._scrollPosition = { top: this._scrollParent.scrollTop, left: this._scrollParent.scrollLeft };\n    }\n\n    /** Create an exact clone of an element */\n    cloneNode(event: MouseEvent): void {\n\n        // duplicate the node\n        this._clone = this._elementRef.nativeElement.cloneNode(true) as Element;\n\n        // store the position within the draggable element\n        const { top, left, width } = this._elementRef.nativeElement.getBoundingClientRect();\n        this._offset = { x: event.clientX - left, y: event.clientY - top };\n\n        // inline all styles so it looks identical regardless of its position in the DOM\n        this.inlineStyles(this._elementRef.nativeElement, this._clone);\n\n        // IE doesn't always calculate the correct width value using getComputedStyles... use bounding client value instead\n        this._renderer.setStyle(this._clone, 'width', width + 'px');\n\n        // ensure we can easily position the node an it is above all other elements\n        this._renderer.setAttribute(this._clone, 'aria-hidden', 'true');\n        this._renderer.setStyle(this._clone, 'position', 'absolute');\n        this._renderer.setStyle(this._clone, 'z-index', '99999');\n\n        // apply a class to allow custom styling\n        this._renderer.addClass(this._clone, 'ux-drag-dragging-clone');\n\n        // insert the cloned element\n        this._renderer.appendChild(document.body, this._clone);\n\n        // set the cloned element initial position\n        this.updateNodePosition(event);\n    }\n\n    /** Position the clone relative to the mouse */\n    updateNodePosition(event: MouseEvent): void {\n        this._renderer.setStyle(this._clone, 'left', (event.pageX - this._offset.x) + 'px');\n        this._renderer.setStyle(this._clone, 'top', (event.pageY - this._offset.y) + 'px');\n    }\n\n    /** Inline all styles to ensure styling is consistent regardless of its position in the dom */\n    inlineStyles(source: Element, target: Element): void {\n        // get all the computed styles from the source element\n        const styles = getComputedStyle(source);\n\n        // inline every specified style\n        for (let idx = 0; idx < styles.length; idx++) {\n            const style = styles.item(idx);\n\n            if (style !== undefined) {\n                this._renderer.setStyle(target, styles[idx], styles[style]);\n            }\n        }\n\n        // ensure we dont capture any move events\n        this._renderer.setStyle(target, 'pointer-events', 'none');\n\n        // do the same for all the child elements\n        for (let idx = 0; idx < source.children.length; idx++) {\n            this.inlineStyles(source.children[idx], target.children[idx]);\n        }\n    }\n\n    /** Unsubscribe from all subscriptions */\n    ngOnDestroy(): void {\n        this.stopScrolling();\n        this.removeScrollEventListener();\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    private updateScrolling(event: MouseEvent): void {\n        this._scrollOffset = this.getScrollOffsets(this._scrollParent, event);\n\n        if (this._scrollOffset.x === 0 && this._scrollOffset.y === 0) {\n            this.stopScrolling();\n        } else {\n            this.startScrolling(this._scrollParent);\n        }\n    }\n\n    private getScrollParent(): Element {\n        // Get the nearest ancestor element with the cdkScrollable directive applied\n        const containers = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n        if (containers.length > 0) {\n            return containers[containers.length - 1].getElementRef().nativeElement;\n        }\n\n        return document.documentElement;\n    }\n\n    private createScrollEventListener(): void {\n        // get the nearest scrollable ancestor\n        this._scrollParent = this.getScrollParent();\n\n        // save the current scroll position to allow calculation of the scroll delta\n        this._scrollPosition = { top: this._scrollParent.scrollTop, left: this._scrollParent.scrollLeft };\n\n        // start listening for scroll events\n        const target = this._scrollParent === document.documentElement ? 'document' : this._scrollParent;\n        this._scrollListener = this._renderer.listen(target, 'scroll', this.scroll.bind(this));\n    }\n\n    private removeScrollEventListener(): void {\n        // remove the scroll event listener\n        if (this._scrollListener) {\n            this._scrollListener();\n            this._scrollListener = null;\n        }\n    }\n\n    private getScrollOffsets(scrollElement: Element, event: MouseEvent): { x: number, y: number } {\n        let scrollX = 0;\n        let scrollY = 0;\n\n        // scroll by at least this much so that it still scrolls if the pointer is exactly at the edge of the scroll element\n        const minScroll = 5;\n\n        const isRoot = (scrollElement === document.documentElement);\n\n        const bounds = scrollElement.getBoundingClientRect();\n        const pointerOffsetX = isRoot ? event.clientX : event.clientX - bounds.x;\n        const pointerOffsetY = isRoot ? event.clientY : event.clientY - bounds.y;\n\n        if (pointerOffsetX <= 0 && scrollElement.scrollLeft > 0) {\n            scrollX = Math.min(pointerOffsetX, -minScroll);\n        } else if (pointerOffsetX >= scrollElement.clientWidth && (scrollElement.scrollLeft + scrollElement.clientWidth) < scrollElement.scrollWidth) {\n            scrollX = Math.max(pointerOffsetX - scrollElement.clientWidth, minScroll);\n        }\n\n        if (pointerOffsetY <= 0 && scrollElement.scrollTop > 0) {\n            scrollY = Math.min(pointerOffsetY, -minScroll);\n        } else if (pointerOffsetY >= scrollElement.clientHeight && (scrollElement.scrollTop + scrollElement.clientHeight) < scrollElement.scrollHeight) {\n            scrollY = Math.max(pointerOffsetY - scrollElement.clientHeight, minScroll);\n        }\n\n        return { x: scrollX, y: scrollY };\n    }\n\n    private startScrolling(scrollElement: Element): void {\n        if (!this._scrollIntervalHandle) {\n            this._scrollIntervalHandle = window.setInterval(() => this.performScroll(scrollElement), 100);\n        }\n    }\n\n    private stopScrolling(): void {\n        if (this._scrollIntervalHandle) {\n            clearInterval(this._scrollIntervalHandle);\n            this._scrollIntervalHandle = 0;\n        }\n    }\n\n    private performScroll(scrollElement: Element): void {\n        scrollElement.scrollLeft += this._scrollOffset.x;\n        scrollElement.scrollTop += this._scrollOffset.y;\n    }\n}\n","import { Directive, EventEmitter, HostListener, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { DragService, UxDragEvent } from './drag.service';\n\n@Directive({\n    selector: '[uxDrop]',\n    host: {\n        '[class.ux-drop-hover]': 'isMouseOver && isDragging && !dropDisabled'\n    }\n})\nexport class DropDirective<T = unknown> implements OnDestroy {\n    private readonly _dragService = inject<DragService<T>>(DragService);\n\n    /** Define a specific group of dragged items to listen to */\n    @Input() group: string | string[];\n\n    /** Define whether or not dropping is enabled */\n    @Input() dropDisabled: boolean = false;\n\n    /** Emit the model of the item dropped */\n    @Output() onDrop = new EventEmitter<T>();\n\n    /** Determine whether or not the mouse is within the drop region */\n    isMouseOver: boolean = false;\n\n    /** Determine whether or not we are currently dragging an item */\n    isDragging: boolean = false;\n\n    /** Store the group of the dragged item */\n    private _group: string;\n\n    /** Ensure we destroy all subscriptions */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        // subscribe to drag events\n        this._dragService.onDragStart.pipe(tap(event => this._group = event.group), filter(event => this.isDropAllowed(event.group)), takeUntil(this._onDestroy))\n            .subscribe(this.onDragStart.bind(this));\n\n        this._dragService.onDragEnd.pipe(filter(event => this.isDropAllowed(event.group)), takeUntil(this._onDestroy))\n            .subscribe(this.onDragEnd.bind(this));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Update the mouse over state */\n    @HostListener('mouseenter')\n    onMouseOver(): void {\n        if (this.isDropAllowed(this._group)) {\n            this.isMouseOver = true;\n\n            // emit that we are over a drop area\n            this._dragService.onDropEnter.next();\n        }\n    }\n\n    /** Update the mouse over state */\n    @HostListener('mouseleave')\n    onMouseLeave(): void {\n\n        // always ensure this value is reset\n        this.isMouseOver = false;\n\n        // only emit the dropd leave event when appropriate\n        if (this.isDropAllowed(this._group)) {\n            this._dragService.onDropLeave.next();\n        }\n    }\n\n    /** Update the dragging state */\n    onDragStart(): void {\n        this.isDragging = true;\n    }\n\n    /** Update the dragging state */\n    onDragEnd(event: UxDragEvent<T>): void {\n\n        // update the dragging state\n        this.isDragging = false;\n\n        // clear the cached group\n        this._group = null;\n\n        // if the mouse is over and it is in an allowed group emit the dop event\n        if (this.isMouseOver && this.isDropAllowed(event.group)) {\n            this.onDrop.emit(event.data);\n            this._dragService.onDrop.next(event.data);\n        }\n    }\n\n    /** Determine whether or not the event is part of the specified groups */\n    private isDropAllowed(group: string): boolean {\n\n        // if dropping is disabled then it is never allowed\n        if (this.dropDisabled) {\n            return false;\n        }\n\n        // if no group specified allow all groups\n        if (!this.group) {\n            return true;\n        }\n\n        // if it is an array then ensure it is allowed\n        if (Array.isArray(this.group)) {\n            return !!this.group.find(_group => _group === group);\n        }\n\n        return this.group === group;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { DragDirective } from './drag.directive';\nimport { DropDirective } from './drop.directive';\n\n@NgModule({\n    exports: [DragDirective, DropDirective],\n    declarations: [DragDirective, DropDirective]\n})\nexport class DragModule {}\n","export enum DashboardStackMode {\n    Regular,\n    Stacked,\n    /** Determine the mode automatically based on dashboard width. */\n    Auto\n}","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../common/index';\nimport { DragScrollEvent } from '../../directives/drag/index';\nimport { DashboardOptions } from './dashboard.component';\nimport { DashboardStackMode } from './widget/dashboard-stack-mode.enum';\nimport { DashboardWidgetComponent } from './widget/dashboard-widget.component';\n\n@Injectable()\nexport class DashboardService implements OnDestroy {\n\n    private _widgetOrigin: { column?: number, row?: number, columnSpan?: number, rowSpan?: number };\n    private _actionWidget: DashboardAction;\n    private _rowHeight: number = 0;\n    private _cache: DashboardCache[];\n    private _event: MouseEvent;\n\n    initialized$ = new BehaviorSubject<boolean>(false);\n    widgets$ = new BehaviorSubject<DashboardWidgetComponent[]>([]);\n    options$ = new BehaviorSubject<DashboardOptions>(defaultOptions);\n    dimensions$ = new BehaviorSubject<DashboardDimensions>({});\n    height$: Observable<number> = this.dimensions$.pipe(tick(), map(dimensions => dimensions.height), distinctUntilChanged());\n    placeholder$ = new BehaviorSubject<DashboardPlaceholder>({ visible: false, x: 0, y: 0, width: 0, height: 0 });\n    layout$ = new BehaviorSubject<DashboardLayoutData[]>([]);\n    stacked$ = new BehaviorSubject<boolean>(false);\n    isDragging$ = new BehaviorSubject<DashboardWidgetComponent>(null);\n    isGrabbing$ = new BehaviorSubject<DashboardWidgetComponent>(null);\n    userLayoutChange$ = new Subject<DashboardLayoutData[]>();\n\n    get options(): DashboardOptions {\n        return this.options$.getValue();\n    }\n\n    get widgets(): DashboardWidgetComponent[] {\n        return this.widgets$.getValue();\n    }\n\n    get stacked(): boolean {\n        return this.stacked$.getValue();\n    }\n\n    get dimensions(): DashboardDimensions {\n        return this.dimensions$.getValue();\n    }\n\n    get columnWidth(): number {\n        return this.dimensions.width / this.options.columns;\n    }\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        combineLatest(this.layout$, this.widgets$, this.initialized$)\n            .pipe(\n                tick(),\n                filter(([layout, widgets, initialized]) => layout && widgets.length > 0 && initialized),\n                takeUntil(this._onDestroy)\n            )\n            .subscribe(([layout]) => {\n                this.setLayoutData(layout);\n                this.renderDashboard();\n            });\n\n        this.stacked$\n            .pipe(\n                distinctUntilChanged(),\n                filter(stacked => stacked === true),\n                takeUntil(this._onDestroy)\n            ).subscribe(this.updateWhenStacked.bind(this));\n        this.widgets$.pipe(tick(), takeUntil(this._onDestroy)).subscribe(() => this.renderDashboard());\n        this.dimensions$.pipe(tick(), takeUntil(this._onDestroy)).subscribe(() => this.renderDashboard());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Add a widget to the dashboard\n     * @param widget The widget component to add to the dashboard\n     */\n    addWidget(widget: DashboardWidgetComponent): void {\n        this.widgets$.next([...this.widgets$.getValue(), widget]);\n    }\n\n    /**\n     * Remove a widget from the dashboard\n     * @param widget The widget to remove\n     */\n    removeWidget(widget: DashboardWidgetComponent): void {\n        this.widgets$.next(this.widgets$.getValue().filter(_widget => _widget !== widget));\n    }\n\n    /**\n     * Indicate that the dashboard element has been resized\n     * @param width The width of the dashboard element in px\n     * @param height The height of the dashboard element in px\n     */\n    setDimensions(width: number = this.dimensions.width, height: number = this.dimensions.height): void {\n        if (this.dimensions.width !== width || this.dimensions.height !== height) {\n            this.dimensions$.next({ width, height });\n        }\n    }\n\n    /**\n     * Produce an object containing all the required layout data.\n     * This can be useful for exporting/saving a layout\n     */\n    getLayoutData(): DashboardLayoutData[] {\n        return this.widgets.map(widget => {\n            return {\n                id: widget.id,\n                col: widget.getColumn(),\n                row: widget.getRow(),\n                colSpan: widget.getColumnSpan(),\n                rowSpan: widget.getRowSpan(),\n                minColSpan: widget.minColSpan,\n                minRowSpan: widget.minRowSpan\n            };\n        });\n    }\n\n    /**\n     * Position widgets programatically\n     */\n    setLayoutData(widgets: DashboardLayoutData[]): void {\n\n        // iterate through each widget data and find a match\n        widgets.forEach(widget => {\n\n            // find the matching widget\n            const target = this.widgets.find(_widget => _widget.id === widget.id);\n\n            if (target) {\n                target.setColumn(widget.col);\n                target.setRow(widget.row);\n                target.setColumnSpan(widget.colSpan);\n                target.setRowSpan(widget.rowSpan);\n                target.minColSpan = widget.minColSpan ?? 1;\n                target.minRowSpan = widget.minRowSpan ?? 1;\n            }\n        });\n    }\n\n    /**\n     * Update the positions and sizes of the widgets\n     */\n    renderDashboard(): void {\n\n        // get the dimensions of the dashboard\n        this._rowHeight = this.options.rowHeight || this.columnWidth;\n\n        // ensure the column width is not below the min widths\n        this.stacked$.next(this.columnWidth < this.options.minWidth);\n\n        this.setDashboardLayout();\n\n        // iterate through each widget and set the size - except the one being resized\n        this.widgets.filter(widget => !this._actionWidget || widget !== this._actionWidget.widget)\n            .forEach(widget => widget.render());\n    }\n\n    /**\n     * Determine where widgets should be positioned based on their positions, width and the size of the container\n     */\n    setDashboardLayout(): void {\n        // find any widgets that do not currently have a position set\n        this.widgets.filter(widget => widget.getColumn() === undefined || widget.getRow() === undefined)\n            .forEach(widget => this.setWidgetPosition(widget));\n\n        this.setDashboardHeight();\n    }\n\n    updateWhenStacked(): void {\n        // iterate through each widget set it's stacked state and retain the rowSpan\n        this.getWidgetsByOrder().forEach((widget, idx, widgets) => {\n            const widgetsAbove = widgets.slice(0, idx);\n            const row = widgetsAbove.reduce((currentRow, _widget) => currentRow + _widget.getRowSpan(), 0);\n            widget.setColumn(0);\n            widget.setRow(row);\n        });\n\n    }\n\n    /** Get widgets in the order they visually appear as the widgets array order does not reflect this */\n    getWidgetsByOrder(): DashboardWidgetComponent[] {\n        return [...this.widgets].sort((w1, w2) => {\n\n            const w1Position = w1.getColumn(DashboardStackMode.Regular) + (w1.getRow(DashboardStackMode.Regular) * this.options.columns);\n            const w2Position = w2.getColumn(DashboardStackMode.Regular) + (w2.getRow(DashboardStackMode.Regular) * this.options.columns);\n\n            if (w1Position < w2Position) {\n                return -1;\n            }\n\n            if (w1Position > w2Position) {\n                return 1;\n            }\n\n            return 0;\n\n        });\n    }\n\n    /**\n     * Find a position that a widget can fit in the dashboard\n     * @param widget The widget to try and position\n     */\n    setWidgetPosition(widget: DashboardWidgetComponent): void {\n\n        // find a position for the widget\n        let position = 0;\n        let success = false;\n\n        // repeat until a space is found\n        while (!success) {\n\n            // get a position to try\n            const column = position % this.options.columns;\n            const row = Math.floor(position / this.options.columns);\n\n            // check the current position\n            if (this.getPositionAvailable(column, row, widget.getColumnSpan(), widget.getRowSpan())) {\n                success = true;\n                widget.setColumn(column);\n                widget.setRow(row);\n                return;\n            }\n\n            if (column === 0 && widget.colSpan > this.options.columns) {\n                throw new Error('Dashboard widgets have a colSpan greater than the max number of dashboard columns!');\n            }\n\n            position++;\n        }\n    }\n\n    /**\n     * Check if a position in the dashboard is vacant or not\n     */\n    getPositionAvailable(column: number, row: number, columnSpan: number, rowSpan: number, ignoreWidget?: DashboardWidgetComponent): boolean {\n\n        // get a list of grid spaces that are populated\n        const spaces = this.getOccupiedSpaces();\n\n        // check if the block would still be in bounds\n        if (column + columnSpan > this.options.columns) {\n            return false;\n        }\n\n        // check each required position\n        for (let x = column; x < column + columnSpan; x++) {\n            for (let y = row; y < row + rowSpan; y++) {\n                if (spaces.find(block => block.column === x && block.row === y && block.widget !== ignoreWidget)) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    getOccupiedSpaces(): DashboardSpace[] {\n\n        // find all spaces that are currently occupied\n        return this.widgets.filter(widget => widget.getColumn() !== undefined && widget.getRow() !== undefined)\n            .reduce((value, widget) => {\n\n                this.forEachBlock(widget, (column, row) => value.push({ widget, column, row }));\n\n                return value;\n            }, []);\n    }\n\n    /**\n     * Begin resizing a widget\n     * @param action The the widget to resize\n     */\n    onResizeStart(action: DashboardAction): void {\n        this.cacheWidgets();\n\n        // store the mouse event\n        this._event = action.event;\n        this._actionWidget = action;\n\n        // bring the widget to the font\n        this.bringToFront(action.widget);\n    }\n\n    onResizeDrag(action: DashboardAction): void {\n\n        const mousePosX = this._event.pageX - pageXOffset;\n        const mousePosY = this._event.pageY - pageYOffset;\n\n        // if there was no movement then do nothing\n        if (action.event.x === mousePosX && action.event.y === mousePosY) {\n            return;\n        }\n\n        // update the stored mouse event\n        this._event = action.event;\n\n        // get handle for direction\n        const { handle } = action;\n\n        // get the bounds of the handle\n        const bounds = handle.getBoundingClientRect();\n\n        // get the center of the handle\n        const centerX = bounds.left + (bounds.width / 2);\n        const centerY = bounds.top + (bounds.height / 2);\n\n        // get the current mouse position\n        const mouseX = mousePosX - centerX;\n        const mouseY = mousePosY - centerY;\n\n        // store the new proposed dimensions for the widget\n        const dimensions: DashboardWidgetDimensions = {\n            x: action.widget.x,\n            y: action.widget.y,\n            width: action.widget.width,\n            height: action.widget.height\n        };\n\n        // update widget based on the handle being dragged\n        switch (action.direction) {\n\n            case ActionDirection.Right:\n                dimensions.width += mouseX;\n                break;\n\n            case ActionDirection.Left:\n                dimensions.x += mouseX;\n                dimensions.width -= mouseX;\n\n                if (dimensions.width < this.options.minWidth) {\n                    const difference = this.options.minWidth - dimensions.width;\n                    dimensions.x -= difference;\n                    dimensions.width += difference;\n                }\n\n                break;\n\n            case ActionDirection.Bottom:\n                dimensions.height += mouseY;\n                break;\n\n            case ActionDirection.Top:\n                dimensions.y += mouseY;\n                dimensions.height -= mouseY;\n\n                if (dimensions.height < this.options.minHeight) {\n                    const difference = this.options.minHeight - dimensions.height;\n                    dimensions.y -= difference;\n                    dimensions.height += difference;\n                }\n                break;\n\n            // Support resizing on multiple axis simultaneously\n            case ActionDirection.TopLeft:\n\n                dimensions.x += mouseX;\n                dimensions.width -= mouseX;\n\n                if (dimensions.width < this.options.minWidth) {\n                    const difference = this.options.minWidth - dimensions.width;\n                    dimensions.x -= difference;\n                    dimensions.width += difference;\n                }\n\n                dimensions.y += mouseY;\n                dimensions.height -= mouseY;\n\n                if (dimensions.height < this.options.minHeight) {\n                    const difference = this.options.minHeight - dimensions.height;\n                    dimensions.y -= difference;\n                    dimensions.height += difference;\n                }\n                break;\n\n            case ActionDirection.TopRight:\n                dimensions.width += mouseX;\n                dimensions.y += mouseY;\n                dimensions.height -= mouseY;\n\n                if (dimensions.height < this.options.minHeight) {\n                    const difference = this.options.minHeight - dimensions.height;\n                    dimensions.y -= difference;\n                    dimensions.height += difference;\n                }\n                break;\n\n            case ActionDirection.BottomLeft:\n                dimensions.height += mouseY;\n                dimensions.x += mouseX;\n                dimensions.width -= mouseX;\n\n                if (dimensions.width < this.options.minWidth) {\n                    const difference = this.options.minWidth - dimensions.width;\n                    dimensions.x -= difference;\n                    dimensions.width += difference;\n                }\n                break;\n\n            case ActionDirection.BottomRight:\n                dimensions.height += mouseY;\n                dimensions.width += mouseX;\n                break;\n        }\n\n        const currentWidth = action.widget.x + action.widget.width;\n        const currentHeight = action.widget.y + action.widget.height;\n\n        // ensure values are within the dashboard bounds\n        if (dimensions.x < 0) {\n            dimensions.x = 0;\n            dimensions.width = currentWidth;\n        }\n\n        if (dimensions.y < 0) {\n            dimensions.y = 0;\n            dimensions.height = currentHeight;\n        }\n\n        if ((dimensions.x + dimensions.width) > this.dimensions.width) {\n            dimensions.width = this.dimensions.width - dimensions.x;\n        }\n\n        // if the proposed width is smaller than allowed then reset width to minimum and ignore x changes\n        if (dimensions.width < this.options.minWidth) {\n            dimensions.x = action.widget.x;\n            dimensions.width = this.options.minWidth;\n        }\n\n        // if the proposed height is smaller than allowed then reset height to minimum and ignore y changes\n        if (dimensions.height < this.options.minHeight) {\n            dimensions.y = action.widget.y;\n            dimensions.height = this.options.minHeight;\n        }\n\n        const minWidth = ((this.getColumnWidth() * action.widget.minColSpan) - this.getColumnWidth() / 2) + 1;\n        const isBelowMinWidth = dimensions.width < minWidth;\n\n        if (isBelowMinWidth) {\n            dimensions.x = action.widget.x;\n            dimensions.width = minWidth;\n        }\n\n        const minHeight = ((this.options.rowHeight * action.widget.minRowSpan) - this.options.rowHeight / 2) + 1;\n        const isBelowMinHeight = dimensions.height < minHeight;\n\n        if (isBelowMinHeight) {\n            dimensions.y = action.widget.y;\n            dimensions.height = minHeight;\n        }\n\n        // update the widget actual values\n        action.widget.setBounds(dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // update placeholder position and value\n        this.setPlaceholderBounds(true, dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // show the widget positions if the current positions and sizes were to persist\n        this.updateWidgetPositions(action.widget);\n    }\n\n    onResizeEnd(): void {\n\n        const placeholder = this.placeholder$.getValue();\n\n        // commit resize changes\n        this.commitWidgetChanges();\n\n        // hide placeholder\n        placeholder.visible = false;\n\n        // update the placeholder\n        this.placeholder$.next(placeholder);\n\n        this._actionWidget = null;\n        this._event = null;\n\n        // ensure any vacant upper spaces are filled where required\n        this.shiftWidgetsUp();\n\n        // update dashboard height\n        this.setDashboardHeight();\n\n        // emit information about the layout\n        this.layout$.next(this.getLayoutData());\n\n        this.userLayoutChange$.next(this.getLayoutData());\n    }\n\n    onDragStart(action: DashboardAction): void {\n        this.onResizeStart(action);\n\n        // store the starting placeholder position\n        this.setWidgetOrigin();\n\n        this.cacheWidgets();\n\n        // emit the widget we are dragging\n        this.isDragging$.next(action.widget);\n    }\n\n    onDragEnd(): void {\n        this.onResizeEnd();\n\n        this._widgetOrigin = {};\n\n        this.isDragging$.getValue().sendToBack();\n\n        this.isDragging$.next(null);\n\n        this.userLayoutChange$.next(this.getLayoutData());\n    }\n\n    onDrag(action: DashboardAction): void {\n\n        // if there was no movement then do nothing\n        if (action.event.clientX === this._event.clientX && action.event.clientY === this._event.clientY) {\n            return;\n        }\n\n        // get the current mouse position\n        const mouseX = action.event.clientX - this._event.clientX;\n        const mouseY = action.event.clientY - this._event.clientY;\n\n        // store the latest event\n        this._event = action.event;\n\n        this.moveWidget(action.widget, mouseX, mouseY);\n    }\n\n    onDragScroll(widget: DashboardWidgetComponent, event: DragScrollEvent): void {\n        this.moveWidget(widget, event.offsetX, event.offsetY);\n    }\n\n    getRowHeight(): number {\n        return this._rowHeight;\n    }\n\n    cacheWidgets(): DashboardCache[] {\n        this._cache = this.widgets.map(widget => ({\n            id: widget.id,\n            column: widget.getColumn(),\n            row: widget.getRow(),\n            columnSpan: widget.getColumnSpan(),\n            rowSpan: widget.getRowSpan(),\n        }));\n\n        // return a new array of the cache for custom caching\n        return [...this._cache];\n    }\n\n    restoreWidgets(ignoreActionWidget: boolean = false, cache: DashboardCache[] = this._cache, restoreSize: boolean = false): void {\n        cache.filter(widget => !ignoreActionWidget || widget.id !== this._actionWidget.widget.id).forEach(widget => {\n\n            const match = this.widgets.find(wgt => wgt.id === widget.id);\n\n            if (match) {\n                match.setColumn(widget.column);\n                match.setRow(widget.row);\n\n                if (restoreSize) {\n                    match.setColumnSpan(widget.columnSpan);\n                    match.setRowSpan(widget.rowSpan);\n                }\n            }\n        });\n    }\n\n    /**\n     * Return the set of widgets which overlap the given dashboard region.\n     */\n    getOverlappingWidgets(region: DashboardRegion, actionWidget: DashboardWidgetComponent): DashboardWidgetComponent[] {\n        const widgetsToMove: DashboardWidgetComponent[] = [];\n\n        // check if there are any widgets overlapping widgets\n        for (let row = region.row; row < region.row + region.rowSpan; row++) {\n            for (let column = region.column; column < region.column + region.columnSpan; column++) {\n\n                // store reference to any widgets that need moved\n                this.getOccupiedSpaces()\n                    .filter(space => space.column === column && space.row === row && space.widget !== actionWidget)\n                    .forEach(space => widgetsToMove.push(space.widget));\n            }\n        }\n\n        // remove any duplicates\n        return widgetsToMove.filter((wgt, idx, array) => array.indexOf(wgt) === idx);\n    }\n\n\n    /**\n     * Resolve any overlapping widgets after a widget changes rowSpan/colSpan.\n     */\n    resizeWidget(widget: DashboardWidgetComponent): void {\n\n        // make widget action and origin widget, direction is irrelevant to this function so set to 0\n        this._actionWidget = { widget, direction: 0 };\n        this._widgetOrigin = widget;\n\n        const widgetRegion = {\n            row: widget.row,\n            column: widget.col,\n            rowSpan: widget.rowSpan,\n            columnSpan: widget.colSpan\n        };\n\n        let done = false;\n        const ITERATION_LIMIT = 100;\n\n        for (let i = 0; i <= ITERATION_LIMIT; i++) {\n\n            // Check for overlapping widgets and move them. This may need several iterations.\n            this.shiftWidgetsFromRegion(widgetRegion, widget);\n            done = this.getOverlappingWidgets(widgetRegion, widget).length === 0;\n\n            if (done) {\n                break;\n            }\n        }\n\n        if (!done) {\n            throw new Error('Unable to resolve overlapping widgets!');\n        }\n\n        this.shiftWidgetsUp();\n\n        // clear the action and origin widget once we are done\n        this._actionWidget = undefined;\n        this._widgetOrigin = undefined;\n    }\n\n    /**\n     * Move any widgets which intersect with the given dashboard region.\n     */\n    shiftWidgetsFromRegion(region: DashboardRegion, actionWidget: DashboardWidgetComponent, validatePosition?: (shiftDirection: ActionDirection) => void): void {\n\n        const widgetsToMove = this.getOverlappingWidgets(region, actionWidget);\n\n        // if no widgets need moved then we can stop here\n        if (widgetsToMove.length === 0) {\n            return;\n        }\n\n        // create a duplicate we can use to keep track of which have been moved\n        const unmovedWidgets = widgetsToMove.slice();\n\n        // attempt to move any widgets to the previous widget position\n        widgetsToMove.forEach(widget => {\n\n            // get a grid off all occupied spaces - taking into account the placeholder and ignoring widgets that need moved\n            const grid = this.getOccupiedSpaces().filter(space => !unmovedWidgets.find(wgt => wgt === space.widget));\n\n            // iterate each free block\n            for (let row = this._widgetOrigin.row; row < this._widgetOrigin.row + this._widgetOrigin.rowSpan; row++) {\n                for (let column = this._widgetOrigin.column; column < this._widgetOrigin.column + this._widgetOrigin.columnSpan; column++) {\n\n                    // determine if the block can fit in this space\n                    const requiredSpaces = this.getRequiredSpacesFromPoint(widget, column, row);\n\n                    // check if widget would fit in space\n                    const available = requiredSpaces.every(space => {\n                        return !grid.find(gridSpace => gridSpace.column === space.column && gridSpace.row === space.row) && space.column < this.getColumnCount();\n                    });\n\n                    if (available) {\n                        widget.setColumn(column);\n                        widget.setRow(row);\n                        unmovedWidgets.splice(unmovedWidgets.findIndex(wgt => wgt === widget), 1);\n                        return;\n                    }\n                }\n            }\n\n            // if we get to here then we can't simply swap the positions - next try moving right\n            if (this.canWidgetMoveRight(widget, true)) {\n\n                // after the shift check if placeholder position is still valid\n                validatePosition?.(ActionDirection.Right);\n                return;\n            }\n\n            // next try moving left\n            if (this.canWidgetMoveLeft(widget, true)) {\n\n                // after the shift check if placeholder position is still valid\n                validatePosition?.(ActionDirection.Left);\n                return;\n            }\n\n            // determine the distance that the widget needs to be moved down\n            const distance = (this._actionWidget.widget.getRow() - widget.getRow()) + this._actionWidget.widget.getRowSpan();\n\n            // as a last resort move the widget downwards\n            this.moveWidgetDown(widget, distance);\n        });\n\n    }\n\n    /**\n     * When dragging any widgets that need to be moved should be moved to an appropriate position\n     */\n    shiftWidgets(): void {\n\n        const placeholder = this.placeholder$.getValue();\n\n        this.shiftWidgetsFromRegion(\n            placeholder,\n            this._actionWidget.widget,\n            this.validatePlaceholderPosition.bind(this)\n        );\n    }\n\n    /**\n     * After shifts have taken place we should verify the place holder position is still valid\n     * @param shiftDirection - the position widgets were shifted\n     */\n    validatePlaceholderPosition(shiftDirection: ActionDirection) {\n\n        const placeholder = this.placeholder$.getValue();\n\n        // check if the placeholder is over a widget\n        if (this.getWidgetsAtPosition(placeholder.column, placeholder.row, true).length > 0) {\n\n            // move the placeholder the opposite direction\n            switch (shiftDirection) {\n\n                case ActionDirection.Left:\n                    this.setPlaceholderBounds(placeholder.visible, placeholder.x + this.getColumnWidth(), placeholder.y, placeholder.width, placeholder.height);\n                    break;\n\n                case ActionDirection.Right:\n                    this.setPlaceholderBounds(placeholder.visible, placeholder.x - this.getColumnWidth(), placeholder.y, placeholder.width, placeholder.height);\n                    break;\n            }\n\n            // validate this new position again\n            this.validatePlaceholderPosition(shiftDirection);\n        }\n    }\n\n    /**\n     * Determine if a widget can be moved left - or if it can move the widgets to the right to make space for the widget\n     */\n    canWidgetMoveLeft(widget: DashboardWidgetComponent, performMove: boolean = false, shift: number = 0): boolean {\n\n        const actionWgt = this._widgetOrigin;\n        let colShift = shift;\n\n        // check if the widget is the action widget or occupies the first column\n        if (widget === this._actionWidget.widget || widget.getColumn() === 0) {\n            return false;\n        }\n\n        // if value has been provided skip this step\n        if (colShift === 0) {\n\n            // work out how far the widget is planning to move left\n            if (actionWgt.row !== widget.getRow()) {\n\n                // if the widgets aren't on the same row work out the difference\n                if (actionWgt.column === widget.getColumn()) {\n\n                    // if the widgets occupy the same column then shift the widget of the action widget\n                    colShift = actionWgt.columnSpan;\n                } else {\n\n                    // else work out the exact number of spaces it will move left\n                    const widgetDifference =  actionWgt.column - widget.getColumn();\n                    colShift = widget.getColumnSpan() - widgetDifference;\n                }\n            } else {\n\n                // if they are on the same row then move one row\n                colShift = 1;\n            }\n        }\n\n        if (isNaN(colShift) || colShift === 0) {\n            return;\n        }\n\n        // find the positions required\n        const targetSpaces = this.getOccupiedSpaces().filter(space => space.widget === widget).map(space => {\n            return { column: space.column - colShift, row: space.row, widget: space.widget };\n        });\n\n        // check if any of the target spaces are out of bounds\n        if (targetSpaces.find(space => space.column < 0)) {\n            return false;\n        }\n\n        // check if there are widget in the required positions and if so, can they move right?\n        const moveable = targetSpaces.every(space => this.getWidgetsAtPosition(space.column, space.row).filter(wgt => wgt !== space.widget).every(wgt => this.canWidgetMoveLeft(wgt, false, colShift)));\n\n        if (performMove && moveable) {\n\n            // move all widgets to the left\n            targetSpaces.forEach(space => this.getWidgetsAtPosition(space.column, space.row).filter(wgt => wgt !== space.widget).forEach(wgt => this.canWidgetMoveLeft(wgt, true, colShift)));\n\n            // find the target column\n            const column = targetSpaces.reduce((target, space) => Math.min(target, space.column), Infinity);\n\n            // move current widget to the left\n            if (column !== Infinity) {\n                widget.setColumn(column);\n            }\n        }\n\n        return moveable;\n    }\n\n    /**\n     * Determine if a widget can be moved right - or if it can move the widgets to the right to make space for the widget\n     */\n    canWidgetMoveRight(widget: DashboardWidgetComponent, performMove: boolean = false, shift: number = 0): boolean {\n\n        const actionWgt = this._widgetOrigin;\n        let colShift = shift;\n\n        // check if the widget is the dragging widget or the widget occupies the final column\n        if (widget === this._actionWidget.widget || widget.getColumn() + widget.getColumnSpan() === this.options.columns) {\n            return false;\n        }\n\n        // if value has been provided skip this step\n        if (colShift === 0) {\n\n            // work out how far the widget is planning to move right\n            if (actionWgt.row !== widget.getRow()) {\n\n                // if the widgets aren't on the same row work out the difference\n                if (actionWgt.column === widget.getColumn()) {\n\n                    // if the widgets occupy the same column then shift the widget of the action widget\n                    colShift = actionWgt.columnSpan;\n                } else {\n\n                    // else work out the exact number of spaces it will move right\n                    const widgetDifference = widget.getColumn() - actionWgt.column;\n                    colShift = actionWgt.columnSpan - widgetDifference;\n                }\n            } else {\n\n                // if they are on the same row then move one row\n                colShift = 1;\n            }\n        }\n\n        if (isNaN(colShift) || colShift === 0) {\n            return;\n        }\n\n        // find the positions required\n        const targetSpaces = this.getOccupiedSpaces().filter(space => space.widget === widget).map(space => {\n            return { column: space.column + colShift, row: space.row, widget: space.widget };\n        });\n\n        // check if any of the target spaces are out of bounds\n        if (targetSpaces.find(space => space.column >= this.getColumnCount())) {\n            return false;\n        }\n\n        // check if there are widget in the required positions and if so, can they move right?\n        const moveable = targetSpaces.every(space => this.getWidgetsAtPosition(space.column, space.row)\n            .filter(wgt => wgt !== space.widget)\n            .every(wgt => this.canWidgetMoveRight(wgt, false, colShift))\n        );\n\n        if (performMove && moveable) {\n\n            // move all widgets to the right\n            targetSpaces.forEach(space => this.getWidgetsAtPosition(space.column, space.row).filter(wgt => wgt !== space.widget).forEach(wgt => this.canWidgetMoveRight(wgt, true, colShift)));\n\n            // move current widget to the right\n            widget.setColumn(widget.getColumn() + colShift);\n        }\n\n        return moveable;\n    }\n\n    /**\n     * Store the initial position of the widget being dragged\n     */\n    setWidgetOrigin(): void {\n        this._widgetOrigin = {\n            column: this._actionWidget.widget.getColumn(),\n            row: this._actionWidget.widget.getRow(),\n            columnSpan: this._actionWidget.widget.getColumnSpan(),\n            rowSpan: this._actionWidget.widget.getRowSpan()\n        };\n    }\n\n    /**\n     * Calculate all the required positions is a widget was to be positioned at a particular point\n     */\n    getRequiredSpacesFromPoint(widget: DashboardWidgetComponent, column: number, row: number): DashboardSpace[] {\n        const spaces: DashboardSpace[] = [];\n\n        for (let y = row; y < row + widget.getRowSpan(); y++) {\n            for (let x = column; x < column + widget.getColumnSpan(); x++) {\n                spaces.push({ column: x, row: y, widget });\n            }\n        }\n\n        return spaces;\n    }\n\n    /**\n     * Position widgets based on the position of the placeholder - this is temporary until confirmed\n     */\n    updateWidgetPositions(widget: DashboardWidgetComponent) {\n\n        const placeholder = this.placeholder$.getValue();\n\n        // check all spaces the placeholder will occupy and move any widget currently in them down\n        for (let column = placeholder.column; column < placeholder.column + placeholder.columnSpan; column++) {\n            for (let row = placeholder.row; row < placeholder.row + placeholder.rowSpan; row++) {\n\n                this.getWidgetsAtPosition(column, row, true)\n                    .filter(wgt => wgt !== widget)\n                    .forEach(wgt => this.moveWidgetDown(wgt));\n            }\n        }\n\n        // update the height of the dashboard\n        this.setDashboardHeight();\n\n        // if we arent dragging the top handle then fill spaces\n        if (this._actionWidget.direction !== ActionDirection.Top &&\n            this._actionWidget.direction !== ActionDirection.TopLeft &&\n            this._actionWidget.direction !== ActionDirection.TopRight) {\n            this.shiftWidgetsUp();\n        }\n    }\n\n    /**\n     * Determine if a widget is occupying a specific row and column\n     * @param column The columns to check if occupied\n     * @param row The row to check if occupied\n     * @param ignoreResizing Whether or not to ignore the widget currently being resized\n     */\n    getWidgetsAtPosition(column: number, row: number, ignoreResizing: boolean = false): DashboardWidgetComponent[] {\n        return this.getOccupiedSpaces()\n            .filter(space => space.column === column && space.row === row)\n            .filter(space => this._actionWidget && space.widget !== this._actionWidget.widget || !ignoreResizing)\n            .map(space => space.widget);\n    }\n\n    /**\n     * Update the placeholder visibility, position and size\n     */\n    setPlaceholderBounds(visible: boolean, x: number, y: number, width: number, height: number): void {\n\n        const placeholder = this.placeholder$.getValue();\n\n        placeholder.visible = visible;\n\n        placeholder.column = this.getPlaceholderColumn(x, width);\n        placeholder.row = this.getPlaceholderRow(y, height);\n        placeholder.columnSpan = this.getPlaceholderColumnSpan(width);\n        placeholder.rowSpan = this.getPlaceholderRowSpan(height);\n\n        // calculate the maximum number of rows\n        const rowCount = this.widgets.filter(widget => widget !== this._actionWidget.widget)\n            .reduce((previous, widget) => Math.max(widget.getRow() + widget.getRowSpan(), previous), 0);\n\n        // constrain maximum placeholder row\n        placeholder.row = Math.min(placeholder.row, rowCount);\n\n        placeholder.x = (placeholder.column * this.getColumnWidth()) + this.options.padding;\n        placeholder.y = (placeholder.row * this._rowHeight) + this.options.padding;\n        placeholder.width = (placeholder.columnSpan * this.getColumnWidth()) - (this.options.padding * 2);\n        placeholder.height = (placeholder.rowSpan * this._rowHeight) - (this.options.padding * 2);\n\n        // set the values of the widget to match the values of the placeholder - however do not render the changes\n        this._actionWidget.widget.setColumn(placeholder.column, false);\n        this._actionWidget.widget.setRow(placeholder.row, false);\n        this._actionWidget.widget.setColumnSpan(placeholder.columnSpan, false);\n        this._actionWidget.widget.setRowSpan(placeholder.rowSpan, false);\n\n        // update the placeholder\n        this.placeholder$.next(placeholder);\n    }\n\n    /**\n     * Get the placeholder column position\n     */\n    getPlaceholderColumn(x: number, width: number): number {\n\n        const column = this.getColumnFromPx(x, this._actionWidget.direction === ActionDirection.Move ? Rounding.RoundUpOverHalf : Rounding.RoundDown);\n        const columnSpan = Math.floor(width / this.getColumnWidth());\n        const upperLimit = this.getColumnCount() - columnSpan;\n\n        // if we arent dragging left then just return the column\n        if (this._actionWidget.direction !== ActionDirection.Left &&\n            this._actionWidget.direction !== ActionDirection.TopLeft &&\n            this._actionWidget.direction !== ActionDirection.BottomLeft) {\n            return Math.max(Math.min(column, upperLimit), 0);\n        }\n\n        // get any overflow\n        const overflow = width % this.getColumnWidth();\n\n        return (x <= 0 || overflow === 0 || columnSpan === 0 || overflow > (this.getColumnWidth() / 2)) ?\n            Math.max(Math.min(column, upperLimit), 0) :\n            Math.max(Math.min(column + 1, upperLimit), 0);\n    }\n\n    /**\n     * Get the column span of the placeholder\n     */\n    getPlaceholderColumnSpan(width: number): number {\n\n        const columnSpan = this.getColumnFromPx(width);\n\n        // if we arent dragging right or left then just return the column span\n        if (this._actionWidget.direction !== ActionDirection.Right &&\n            this._actionWidget.direction !== ActionDirection.TopRight &&\n            this._actionWidget.direction !== ActionDirection.BottomRight &&\n            this._actionWidget.direction !== ActionDirection.Left &&\n            this._actionWidget.direction !== ActionDirection.TopLeft &&\n            this._actionWidget.direction !== ActionDirection.BottomLeft) {\n            return this.getColumnFromPx(width, Rounding.RoundUpOverHalf);\n        }\n\n        // get the current column span and any overflow\n        const overflow = width % this.getColumnWidth();\n\n        return (columnSpan > 0 && overflow > (this.getColumnWidth() / 2)) ? Math.max(columnSpan + 1, 1) : Math.max(columnSpan, 1);\n    }\n\n    /**\n     * Get the row position of the placeholder\n     */\n    getPlaceholderRow(y: number, height: number): number {\n\n        const row = this.getRowFromPx(y, this._actionWidget.direction === ActionDirection.Move ? Rounding.RoundUpOverHalf : Rounding.RoundDown);\n        const rowSpan = Math.ceil(height / this._rowHeight);\n\n        // if we arent dragging up then just return the row\n        if (this._actionWidget.direction !== ActionDirection.Top &&\n            this._actionWidget.direction !== ActionDirection.TopLeft &&\n            this._actionWidget.direction !== ActionDirection.TopRight) {\n            return Math.max(row, 0);\n        }\n\n        // get any overflow\n        const overflow = height < this._rowHeight ? 0 : height % this._rowHeight;\n\n        return (y <= 0 || rowSpan === 0 || overflow === 0 || overflow > (this._rowHeight / 2)) ? Math.max(row, 0) : Math.max(row + 1, 0);\n    }\n\n    /**\n     * Get the row span of the placeholder\n     */\n    getPlaceholderRowSpan(height: number): number {\n\n        const rowSpan = this.getRowFromPx(height);\n\n        // if we arent dragging up or down then just return the column span\n        if (this._actionWidget.direction !== ActionDirection.Top &&\n            this._actionWidget.direction !== ActionDirection.TopLeft &&\n            this._actionWidget.direction !== ActionDirection.TopRight &&\n            this._actionWidget.direction !== ActionDirection.Bottom &&\n            this._actionWidget.direction !== ActionDirection.BottomLeft &&\n            this._actionWidget.direction !== ActionDirection.BottomRight) {\n            return Math.max(rowSpan, 1);\n        }\n\n        // get the current column span and any overflow\n        const overflow = height % this._rowHeight;\n\n        return (overflow > (this._rowHeight / 2)) ? Math.max(rowSpan + 1, 1) : Math.max(rowSpan, 1);\n    }\n\n    getColumnFromPx(x: number, rounding: Rounding = Rounding.RoundDown): number {\n\n        const column = Math.floor(x / Math.floor(this.getColumnWidth()));\n        const overflow = (x % Math.floor(this.getColumnWidth()));\n        const half = this.getColumnWidth() / 2;\n\n        switch (rounding) {\n\n            case Rounding.RoundDown:\n                return column;\n\n            case Rounding.RoundDownBelowHalf:\n                return overflow < half ? column : column + 1;\n\n            case Rounding.RoundUpOverHalf:\n                return overflow > half ? column + 1 : column;\n\n            case Rounding.RoundUp:\n                return overflow > 0 ? column + 1 : column;\n        }\n\n    }\n\n    getRowFromPx(y: number, rounding: Rounding = Rounding.RoundDown): number {\n\n        const row = Math.floor(y / Math.floor(this._rowHeight));\n        const overflow = (y % Math.floor(this._rowHeight));\n        const half = this._rowHeight / 2;\n\n        switch (rounding) {\n\n            case Rounding.RoundDown:\n                return row;\n\n            case Rounding.RoundDownBelowHalf:\n                return overflow < half ? row : row + 1;\n\n            case Rounding.RoundUpOverHalf:\n                return overflow > half ? row + 1 : row;\n\n            case Rounding.RoundUp:\n                return overflow > 0 ? row + 1 : row;\n        }\n    }\n\n    commitWidgetChanges(): void {\n\n        const placeholder = this.placeholder$.getValue();\n\n        // check that we have all the values we need\n        if (placeholder.column === undefined || placeholder.row === undefined ||\n            placeholder.columnSpan === undefined || placeholder.rowSpan === undefined) {\n            return;\n        }\n\n        if (this._actionWidget) {\n            this._actionWidget.widget.setColumn(placeholder.column);\n            this._actionWidget.widget.setRow(placeholder.row);\n            this._actionWidget.widget.setColumnSpan(placeholder.columnSpan);\n            this._actionWidget.widget.setRowSpan(placeholder.rowSpan);\n        }\n\n        // reset all placeholder values\n        placeholder.column = undefined;\n        placeholder.row = undefined;\n        placeholder.columnSpan = undefined;\n        placeholder.rowSpan = undefined;\n\n        // emit the new placeholder values\n        this.placeholder$.next(placeholder);\n    }\n\n    /**\n     * Get the current column width\n     */\n    getColumnWidth(): number {\n        return Math.floor(this.columnWidth);\n    }\n\n    /**\n     * Calculate the number of rows populated with widgets\n     */\n    getRowCount(): number {\n        return this.widgets.reduce((previous, widget) => Math.max(widget.getRow() + widget.getRowSpan(), previous), 0);\n    }\n\n    /**\n     * Set the height of the dashboard container element\n     */\n    setDashboardHeight(): void {\n\n        // size the dashboard container to ensure all rows fit\n        let rowCount = this.getRowCount();\n\n        // if we should show an empty row increment the row count by 1\n        if (this.options.emptyRow) {\n            rowCount++;\n        }\n\n        this.setDimensions(undefined, rowCount * this._rowHeight);\n    }\n\n    /**\n     * Orders the z-index of all widgets to move the active one to the front\n     * @param widget The widget that should be brought to the front\n     */\n    bringToFront(widget: DashboardWidgetComponent): void {\n        this.widgets.forEach(_widget => _widget === widget ? _widget.bringToFront() : _widget.sendToBack());\n    }\n\n    /**\n     * Move a widget down - if widgets are in the position below, then move them down further\n     * @param widget The widget to move downwards\n     */\n    moveWidgetDown(widget: DashboardWidgetComponent, distance: number = 1): void {\n\n        // stop if a negative number is passed through\n        if (distance < 0) {\n            return;\n        }\n\n        // move the widget down one position\n        widget.setRow((widget.getRow(DashboardStackMode.Auto)) + distance);\n\n        // check every space the widget occupies for collisions\n        this.forEachBlock(widget, (column, row) =>\n            this.getWidgetsAtPosition(column, row, true)\n                .filter(wgt => wgt !== widget)\n                .forEach(wgt => this.moveWidgetDown(wgt, distance)));\n    }\n\n    /**\n     * Widgets should not be allowed to have a vacant space above them - if there is one they should move upwards to fill it\n     */\n    shiftWidgetsUp(): boolean {\n\n        // check whether or not changes have been made - if so we need to repeat until stable\n        let stable = true;\n\n        // iterate each widget and\n        this.widgets.forEach(widget => {\n            const widgetIsOnTopRow = widget.getRow() === 0;\n            const widgetIsBeingResized = this._actionWidget?.widget === widget;\n            const widgetShouldBeAutoPositioned = widget.autoPositioning || this.stacked;\n            const widgetIsBeingMoved = !widgetShouldBeAutoPositioned && this.isDragging$.value?.id === widget.id;\n\n            if (widgetIsOnTopRow || widgetIsBeingResized || widgetIsBeingMoved || (!widgetShouldBeAutoPositioned && !this._cache)) {\n                return;\n            }\n\n            if (!widgetShouldBeAutoPositioned) {\n                const cachedVersionOfWidget = this._cache.find(cachedWidget => cachedWidget.id === widget.id);\n                const isPreviousPositionAvailable = this.getPositionAvailable(\n                    cachedVersionOfWidget.column,\n                    cachedVersionOfWidget.row,\n                    cachedVersionOfWidget.columnSpan,\n                    cachedVersionOfWidget.rowSpan,\n                    widget\n                );\n\n                if (isPreviousPositionAvailable && widget.row !== cachedVersionOfWidget.row) {\n                    widget.setRow(cachedVersionOfWidget.row);\n                    stable = false;\n                }\n\n                return;\n            }\n\n            if (this.getPositionAvailable(widget.getColumn(), widget.getRow() - 1, widget.getColumnSpan(), 1)) {\n                widget.setRow(widget.getRow() - 1);\n                stable = false;\n            }\n        });\n\n        // if changes occurred then we should repeat the process\n        if (!stable) {\n            this.shiftWidgetsUp();\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Iterate over each space a widget occupied\n     * @param widget The widget to determine spaces\n     * @param callback The function to be called for each space, should expect a column and row argument witht he context being the widget\n     */\n    forEachBlock(widget: DashboardWidgetComponent, callback: (column: number, row: number) => void): void {\n        for (let row = widget.getRow(); row < widget.getRow() + widget.getRowSpan(); row++) {\n            for (let column = widget.getColumn(); column < widget.getColumn() + widget.getColumnSpan(); column++) {\n                callback.call(widget, column, row);\n            }\n        }\n    }\n\n    getWidgetBelow(widget: DashboardWidgetComponent): DashboardWidgetComponent | null {\n        const target = this.getWidgetsAtPosition(widget.getColumn(), widget.getRow() + widget.getRowSpan(), true);\n\n        return target.length > 0 ? target[0] : null;\n    }\n\n    /**\n     * Returns the number of columns available\n     */\n    getColumnCount(): number {\n        return this.stacked ? 1 : this.options.columns;\n    }\n\n    onShiftStart(widget: DashboardWidgetComponent): void {\n        this.onDragStart({ direction: ActionDirection.Move, widget });\n    }\n\n    /** Programmatically move a widget in a given direction */\n    onShift(widget: DashboardWidgetComponent, direction: ActionDirection): void {\n\n        // get the current mouse position\n        let deltaX = 0, deltaY = 0;\n\n        // move based on the direction\n        switch (direction) {\n            case ActionDirection.Top:\n                deltaY = -this.getRowHeight();\n                break;\n            case ActionDirection.Right:\n                deltaX = this.getColumnWidth();\n                break;\n            case ActionDirection.Bottom: {\n                deltaY = this.getRowHeight();\n                break;\n            }\n            case ActionDirection.Left:\n                deltaX = -this.getColumnWidth();\n                break;\n        }\n\n        const dimensions: DashboardWidgetDimensions = {\n            x: widget.x + deltaX,\n            y: widget.y + deltaY,\n            width: widget.width,\n            height: widget.height\n        };\n\n\n        // update placeholder position and value\n        this.setPlaceholderBounds(false, dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // update widget position\n        const { x, y } = this.placeholder$.value;\n\n        // move the widget to the placeholder position\n        widget.setBounds(x - this.options.padding, y - this.options.padding, dimensions.width, dimensions.height);\n\n        // update the height of the dashboard\n        this.setDashboardHeight();\n\n    }\n\n    onShiftEnd(): void {\n        // show the widget positions if the current positions and sizes were to persist\n        this.shiftWidgets();\n\n        // the height of the dashboard may have changed after moving widgets\n        this.setDashboardHeight();\n\n        // reset all properties\n        this.onDragEnd();\n    }\n\n    /** Programmatically resize a widget in a given direction */\n    onResize(widget: DashboardWidgetComponent, direction: ActionDirection): void {\n\n        // perform the resizing\n        let deltaX = 0, deltaY = 0;\n\n        // move based on the direction\n        switch (direction) {\n            case ActionDirection.Top:\n                deltaY = -this.getRowHeight();\n                break;\n            case ActionDirection.Right:\n                deltaX = this.getColumnWidth();\n                break;\n            case ActionDirection.Bottom:\n                deltaY = this.getRowHeight();\n                break;\n            case ActionDirection.Left:\n                deltaX = -this.getColumnWidth();\n                break;\n        }\n\n        const dimensions: DashboardWidgetDimensions = {\n            x: widget.x,\n            y: widget.y,\n            width: widget.width + deltaX,\n            height: widget.height + deltaY\n        };\n\n        const currentWidth = widget.x + widget.width;\n        const currentHeight = widget.y + widget.height;\n\n        // ensure values are within the dashboard bounds\n        if (dimensions.x < 0) {\n            dimensions.x = 0;\n            dimensions.width = currentWidth;\n        }\n\n        if (dimensions.y < 0) {\n            dimensions.y = 0;\n            dimensions.height = currentHeight;\n        }\n\n        if ((dimensions.x + dimensions.width) > this.getColumnWidth() * this.getColumnCount()) {\n            dimensions.width = widget.width;\n        }\n\n        // if the proposed width is smaller than allowed then reset width to minimum and ignore x changes\n        if (dimensions.width < this.getColumnWidth()) {\n            dimensions.x = widget.x;\n            dimensions.width = this.getColumnWidth();\n        }\n\n        // if the proposed height is smaller than allowed then reset height to minimum and ignore y changes\n        if (dimensions.height < this.getRowHeight()) {\n            dimensions.y = widget.y;\n            dimensions.height = this.getRowHeight();\n        }\n\n        const minWidth = this.getColumnWidth() * widget.minColSpan;\n        const isBelowMinWidth = dimensions.width < minWidth;\n\n        if (isBelowMinWidth) {\n            dimensions.x = widget.x;\n            dimensions.width = minWidth;\n        }\n\n        const minHeight = this.options.rowHeight * widget.minRowSpan;\n        const isBelowMinHeight = dimensions.height < minHeight;\n\n        if (isBelowMinHeight) {\n            dimensions.y = widget.y;\n            dimensions.height = minHeight;\n        }\n\n        // move the widget to the placeholder position\n        widget.setBounds(dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // update placeholder position and value\n        this.setPlaceholderBounds(false, dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // the height of the dashboard may have changed after moving widgets\n        this.setDashboardHeight();\n    }\n\n    getSurroundingWidgets(widget: DashboardWidgetComponent, direction: ActionDirection): DashboardWidgetComponent[] {\n        let widgets: DashboardWidgetComponent[] = [];\n\n        for (let column = widget.getColumn(); column < widget.getColumn() + widget.getColumnSpan(); column++) {\n\n            switch (direction) {\n\n                case ActionDirection.Top:\n                    widgets = [...widgets, ...this.getWidgetsAtPosition(column, widget.getRow() - 1)];\n                    break;\n\n                case ActionDirection.Bottom:\n                    widgets = [...widgets, ...this.getWidgetsAtPosition(column, widget.getRow() + widget.getRowSpan())];\n                    break;\n            }\n        }\n\n        return widgets;\n    }\n\n    private moveWidget(widget: DashboardWidgetComponent, offsetX: number, offsetY: number): void {\n\n        const dimensions: DashboardWidgetDimensions = {\n            x: widget.x + offsetX,\n            y: widget.y + offsetY,\n            width: widget.width,\n            height: widget.height\n        };\n\n        this.restoreWidgets(true);\n\n        // update widget position\n        widget.setBounds(dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // update placeholder position and value\n        this.setPlaceholderBounds(true, dimensions.x, dimensions.y, dimensions.width, dimensions.height);\n\n        // show the widget positions if the current positions and sizes were to persist\n        this.shiftWidgets();\n\n        this.setDashboardHeight();\n    }\n}\n\nexport const defaultOptions: DashboardOptions = {\n    columns: 5,\n    padding: 5,\n    minWidth: 100,\n    minHeight: 100,\n    emptyRow: true\n};\n\nexport interface DashboardDimensions {\n    width?: number;\n    height?: number;\n}\n\nexport interface DashboardWidgetDimensions {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n}\n\nexport interface DashboardAction {\n    widget: DashboardWidgetComponent;\n    direction: ActionDirection;\n    event?: MouseEvent;\n    handle?: HTMLElement;\n}\n\nexport interface DashboardSpace {\n    widget: DashboardWidgetComponent;\n    column: number;\n    row: number;\n}\n\nexport interface DashboardRegion {\n    column?: number;\n    row?: number;\n    columnSpan?: number;\n    rowSpan?: number;\n}\n\nexport interface DashboardPlaceholder extends DashboardRegion {\n    visible: boolean;\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n}\n\nexport interface DashboardCache {\n    id: string;\n    column: number;\n    row: number;\n    columnSpan: number;\n    rowSpan: number;\n}\n\nexport interface DashboardLayoutData {\n    id: string;\n    col: number;\n    row: number;\n    colSpan: number;\n    rowSpan: number;\n    minColSpan?: number;\n    minRowSpan?: number;\n}\n\nexport enum ActionDirection {\n    Top = 0,\n    TopRight = 1,\n    Right = 2,\n    BottomRight = 3,\n    Bottom = 4,\n    BottomLeft = 5,\n    Left = 6,\n    TopLeft = 7,\n    Move = 8\n}\n\nexport enum Rounding {\n    RoundDown,\n    RoundDownBelowHalf,\n    RoundUp,\n    RoundUpOverHalf\n}\n","import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { AfterViewInit, Component, HostBinding, inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { ActionDirection, DashboardService } from '../dashboard.service';\nimport { DashboardStackMode } from './dashboard-stack-mode.enum';\n\n@Component({\n    selector: 'ux-dashboard-widget',\n    templateUrl: './dashboard-widget.component.html'\n})\nexport class DashboardWidgetComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\n    readonly dashboardService = inject(DashboardService);\n\n    /** Sets the ID of the widget. Each widget should be given a unique ID. */\n    @Input() id: string;\n\n    /** Defines a name for the widget used for accessibility */\n    @Input() name: string;\n\n    /** Defines the column the widget is placed in */\n    @Input() set col(col: number) {\n        if (col !== null && col !== undefined) {\n            this.setColumn(coerceNumberProperty(col));\n            this.dashboardService.renderDashboard();\n        }\n    }\n\n    get col(): number {\n        return this.getColumn();\n    }\n\n    /** Defines the row the widget is placed in */\n    @Input() set row(row: number) {\n        if (row !== null && row !== undefined) {\n            this.setRow(coerceNumberProperty(row));\n            this.dashboardService.renderDashboard();\n        }\n    }\n\n    get row(): number {\n        return this.getRow();\n    }\n\n    /** Defines the number of columns this widget should occupy. */\n    @Input() get colSpan() {\n        return this.getColumnSpan();\n    }\n\n    set colSpan(colSpan: number) {\n        if (colSpan !== null && colSpan !== undefined) {\n            this.setColumnSpan(coerceNumberProperty(colSpan));\n        }\n    }\n\n    /** Defines the number of rows this widget should occupy. */\n    @Input() get rowSpan() {\n        return this.getRowSpan();\n    }\n\n    set rowSpan(rowSpan: number) {\n        if (rowSpan !== null && rowSpan !== undefined) {\n            this.setRowSpan(coerceNumberProperty(rowSpan));\n        }\n    }\n\n    /** Defines the minimum number of columns this widget should occupy. */\n    @Input() get minColSpan(): number {\n        return this._minColSpan;\n    }\n\n    set minColSpan(minColumns: number) {\n        this._minColSpan = coerceNumberProperty(minColumns);\n    }\n\n    /** Defines the minimum number of rows this widget should occupy. */\n    @Input() get minRowSpan(): number {\n        return this._minRowSpan;\n    }\n\n    set minRowSpan(minRows: number) {\n        this._minRowSpan = coerceNumberProperty(minRows);\n    }\n\n    /** Defines whether or not this widget can be resized. */\n    @Input() resizable: boolean = false;\n\n    /** Defines whether or not this widget will be automatically repositioned */\n    @Input() set autoPositioning(autoPositioning: boolean) {\n        this._autoPositioning = coerceBooleanProperty(autoPositioning);\n    }\n\n    get autoPositioning(): boolean {\n        return this._autoPositioning;\n    }\n\n    /** Defines a function that returns an aria label for the widget */\n    @Input() widgetAriaLabel: (widgets: DashboardWidgetComponent) => string | string = this.getDefaultAriaLabel;\n\n    @HostBinding('style.left.px') x: number = 0;\n    @HostBinding('style.top.px') y: number = 0;\n    @HostBinding('style.width.px') width: number = 100;\n    @HostBinding('style.height.px') height: number = 100;\n    @HostBinding('style.padding.px') padding: number = 0;\n    @HostBinding('style.z-index') zIndex: number = null;\n    @HostBinding('attr.aria-label') ariaLabel: string;\n    @HostBinding('attr.role') @Input() role: string = 'group';\n    @HostBinding('class.dragging') isDragging: boolean = false;\n    @HostBinding('class.grabbing') isGrabbing: boolean = false;\n    @HostBinding('class.resizing') isResizing: boolean = false;\n\n    isDraggable: boolean = false;\n\n    private readonly _column: StackableValue = { regular: undefined, stacked: undefined };\n    private readonly _row: StackableValue = { regular: undefined, stacked: undefined };\n    private readonly _columnSpan: StackableValue = { regular: 1, stacked: 1 };\n    private readonly _rowSpan: StackableValue = { regular: 1, stacked: 1 };\n    private _minColSpan: number = 1;\n    private _minRowSpan: number = 1;\n    private _autoPositioning: boolean = true;\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        // subscribe to option changes\n        this.dashboardService.options$.pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.update());\n\n        // every time the layout changes we want to update the aria label\n        this.dashboardService.layout$.pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.ariaLabel = this.getAriaLabel());\n\n        // allow widget movements to be animated\n        this.dashboardService.isDragging$.pipe(takeUntil(this._onDestroy), map(widget => widget === this))\n            .subscribe(isDragging => this.isDragging = isDragging);\n\n        // allow widget movements to be animated\n        this.dashboardService.isGrabbing$.pipe(takeUntil(this._onDestroy), map(widget => widget === this))\n            .subscribe(isGrabbing => this.isGrabbing = isGrabbing);\n    }\n\n    ngOnInit(): void {\n\n        this._columnSpan.regular = this.colSpan;\n        this._rowSpan.regular = this.rowSpan;\n        this._rowSpan.stacked = this.rowSpan;\n        this._row.regular = this.row;\n        this._row.stacked = this.row;\n        this._column.regular = this.col;\n        this._column.stacked = this.col;\n\n        if (!this.id) {\n            console.warn('Dashboard Widget is missing an ID.');\n\n            // set random id - keeps things working but prevents exporting of positions\n            this.id = Math.floor(Math.random() * 100000).toString();\n        }\n    }\n\n    ngAfterViewInit(): void {\n        // add the widget to the dashboard\n        this.dashboardService.addWidget(this);\n\n        // apply the current options\n        this.update();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (this.hasPosition() && (changes.colSpan || changes.rowSpan)) {\n            this.dashboardService.resizeWidget(this);\n            this.dashboardService.renderDashboard();\n        }\n    }\n\n    /**\n     * If component is removed, then unregister it from the service\n     */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        this.dashboardService.removeWidget(this);\n    }\n\n    /**\n     * Apply the current dashboard options\n     */\n    update(): void {\n\n        // get the current options at the time\n        const { padding, columns } = this.dashboardService.options;\n\n        this.padding = padding;\n        this._columnSpan.stacked = columns;\n    }\n\n    /**\n     * Set the actual position and size values\n     */\n    render(): void {\n        this.x = this.getColumn() * this.dashboardService.getColumnWidth();\n        this.y = this.getRow() * this.dashboardService.getRowHeight();\n        this.width = this.getColumnSpan() * this.dashboardService.getColumnWidth();\n        this.height = this.getRowSpan() * this.dashboardService.getRowHeight();\n    }\n\n    getColumn(mode: DashboardStackMode = DashboardStackMode.Auto): number {\n        switch (mode) {\n            case DashboardStackMode.Auto:\n                return this.getStackableValue(this._column);\n\n            case DashboardStackMode.Regular:\n                return this._column.regular;\n\n            case DashboardStackMode.Stacked:\n                return this._column.stacked;\n        }\n    }\n\n    getRow(mode: DashboardStackMode = DashboardStackMode.Auto): number {\n        switch (mode) {\n            case DashboardStackMode.Auto:\n                return this.getStackableValue(this._row);\n\n            case DashboardStackMode.Regular:\n                return this._row.regular;\n\n            case DashboardStackMode.Stacked:\n                return this._row.stacked;\n        }\n    }\n\n    setColumn(column: number, render: boolean = true): void {\n        this.setStackableValue(this._column, column);\n\n        if (render) {\n            this.render();\n        }\n    }\n\n    setRow(row: number, render: boolean = true): void {\n        this.setStackableValue(this._row, row);\n\n        if (render) {\n            this.render();\n        }\n    }\n\n    getColumnSpan(): number {\n        return this.getStackableValue(this._columnSpan);\n    }\n\n    getRowSpan(): number {\n        return this.getStackableValue(this._rowSpan);\n    }\n\n    setColumnSpan(columnSpan: number, render: boolean = true): void {\n        if (columnSpan >= this.minColSpan) {\n            this.setStackableValue(this._columnSpan, columnSpan);\n\n            if (render) {\n                this.render();\n            }\n        }\n    }\n\n    setRowSpan(rowSpan: number, render: boolean = true): void {\n        if (rowSpan >= this.minRowSpan) {\n            this.setStackableValue(this._rowSpan, rowSpan);\n\n            if (render) {\n                this.render();\n            }\n        }\n    }\n\n    bringToFront(): void {\n        this.zIndex = 1;\n    }\n\n    sendToBack(): void {\n        this.zIndex = null;\n    }\n\n    setBounds(x: number, y: number, width: number, height: number): void {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n    }\n\n    dragstart(handle: HTMLElement, event: MouseEvent, direction: ActionDirection): void {\n        this.isResizing = true;\n        this.dashboardService.isGrabbing$.next(null);\n        this.dashboardService.onResizeStart({ widget: this, direction, event, handle });\n    }\n\n    drag(handle: HTMLElement, event: MouseEvent, direction: ActionDirection): void {\n        this.dashboardService.onResizeDrag({ widget: this, direction, event, handle });\n    }\n\n    dragend(): void {\n        this.isResizing = false;\n        this.dashboardService.onResizeEnd();\n    }\n\n    getAriaLabel(): string {\n        if (this.widgetAriaLabel && typeof this.widgetAriaLabel === 'string') {\n            return this.widgetAriaLabel;\n        } else if (this.widgetAriaLabel && typeof this.widgetAriaLabel === 'function') {\n            return this.widgetAriaLabel(this);\n        }\n\n        return this.ariaLabel;\n    }\n\n    private getDefaultAriaLabel(widget: DashboardWidgetComponent): string {\n\n        let options: string = '';\n\n        if (widget.resizable && widget.isDraggable) {\n            options = 'It can be moved and resized.';\n        } else if (widget.resizable) {\n            options = 'It can be resized.';\n        } else if (widget.isDraggable) {\n            options = 'It can be moved.';\n        }\n\n        return `${widget.name} panel in row ${widget.getRow()}, column ${widget.getColumn()}, is ${widget.getColumnSpan()} columns wide and ${widget.getRowSpan()} rows high. ${options}`;\n    }\n\n    /**\n     * Allows automatic setting of stackable value\n     * @param property The current StackableValue object\n     * @param value The value to set in the appropriate field\n     */\n    private setStackableValue(property: StackableValue, value: number): void {\n\n        if (this.dashboardService.stacked) {\n            property.stacked = value;\n        } else {\n            property.regular = value;\n        }\n    }\n\n    /**\n     * Return the appropriate value from a stackable value\n     * @param property The Stackable value object\n     */\n    private getStackableValue(property: StackableValue): number {\n        return this.dashboardService.stacked ? property.stacked : property.regular;\n    }\n\n    /** Determine if the layout has been performed yet */\n    private hasPosition(): boolean {\n        return this.getColumn() !== undefined && this.getRow() !== undefined;\n    }\n\n    static ngAcceptInputType_autoPositioning: BooleanInput;\n    static ngAcceptInputType_col: NumberInput;\n    static ngAcceptInputType_row: NumberInput;\n    static ngAcceptInputType_colSpan: NumberInput;\n    static ngAcceptInputType_rowSpan: NumberInput;\n    static ngAcceptInputType_minColSpan: NumberInput;\n    static ngAcceptInputType_minRowSpan: NumberInput;\n}\n\nexport interface StackableValue {\n    regular: number;\n    stacked: number;\n}\n","<div class=\"widget-content widget-col-span-{{ getColumnSpan() }} widget-row-span-{{ getRowSpan() }}\">\n    <ng-content></ng-content>\n</div>\n\n<div uxDrag\n     #handleTop\n     class=\"resizer-handle handle-top\"\n     (onDragStart)=\"dragstart(handleTop, $event, 0)\"\n     (onDrag)=\"drag(handleTop, $event, 0)\"\n     (onDragEnd)=\"dragend()\"\n     [style.top.px]=\"padding\"\n     [hidden]=\"!resizable\">\n</div>\n\n<div uxDrag\n     #handleTopRight\n     class=\"resizer-handle handle-top-right\"\n     (onDragStart)=\"dragstart(handleTopRight, $event, 1)\"\n     (onDrag)=\"drag(handleTopRight, $event, 1)\"\n     (onDragEnd)=\"dragend()\"\n     [style.top.px]=\"padding\"\n     [style.right.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>\n\n<div uxDrag\n     #handleRight\n     class=\"resizer-handle handle-right\"\n     (onDragStart)=\"dragstart(handleRight, $event, 2)\"\n     (onDrag)=\"drag(handleRight, $event, 2)\"\n     (onDragEnd)=\"dragend()\"\n     [style.right.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>\n\n<div uxDrag\n     #handleBottomRight\n     class=\"resizer-handle handle-bottom-right\"\n     (onDragStart)=\"dragstart(handleBottomRight, $event, 3)\"\n     (onDrag)=\"drag(handleBottomRight, $event, 3)\"\n     (onDragEnd)=\"dragend()\"\n     [style.bottom.px]=\"padding\"\n     [style.right.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>\n\n<div uxDrag\n     #handleBottom\n     class=\"resizer-handle handle-bottom\"\n     (onDragStart)=\"dragstart(handleBottom, $event, 4)\"\n     (onDrag)=\"drag(handleBottom, $event, 4)\"\n     (onDragEnd)=\"dragend()\"\n     [style.bottom.px]=\"padding\"\n     [hidden]=\"!resizable\">\n</div>\n\n<div uxDrag\n     #handleBottomLeft\n     class=\"resizer-handle handle-bottom-left\"\n     (onDragStart)=\"dragstart(handleBottomLeft, $event, 5)\"\n     (onDrag)=\"drag(handleBottomLeft, $event, 5)\"\n     (onDragEnd)=\"dragend()\"\n     [style.bottom.px]=\"padding\"\n     [style.left.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>\n\n<div uxDrag\n     #handleLeft\n     class=\"resizer-handle handle-left\"\n     (onDragStart)=\"dragstart(handleLeft, $event, 6)\"\n     (onDrag)=\"drag(handleLeft, $event, 6)\"\n     (onDragEnd)=\"dragend()\"\n     [style.left.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>\n\n<div uxDrag\n     #handleTopLeft\n     class=\"resizer-handle handle-top-left\"\n     (onDragStart)=\"dragstart(handleTopLeft, $event, 7)\"\n     (onDrag)=\"drag(handleTopLeft, $event, 7)\"\n     (onDragEnd)=\"dragend()\"\n     [style.top.px]=\"padding\"\n     [style.left.px]=\"padding\"\n     [hidden]=\"!resizable || (dashboardService.stacked$ | async)\">\n</div>","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ActionDirection, DashboardService } from '../dashboard.service';\nimport { DashboardWidgetComponent } from '../widget/dashboard-widget.component';\nimport { DashboardGrabHandleDirective } from './grab-handle.directive';\n\n@Injectable()\nexport class DashboardGrabHandleService implements OnDestroy {\n\n    private readonly _dashboard = inject(DashboardService);\n\n    /** Self-registered drag handles in the dashboard. */\n    private _handles: DashboardGrabHandleDirective[] = [];\n\n    /** Automatically unsubscribe from all observables when destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // if a drag is performed by the mouse we should update the focusable item to be the first again\n        this._dashboard.layout$.pipe(takeUntil(this._onDestroy), filter(() => !this._dashboard.isGrabbing$.value))\n            .subscribe(() => this.setFirstItemFocusable());\n    }\n\n    /** Perform unsubscriptions */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Register a new grab handle. */\n    addHandle(handle: DashboardGrabHandleDirective): void {\n        this._handles = this.getHandlesInOrder([...this._handles, handle]);\n\n        // we want to make the first item focusable (raf to avoid expression changed error)\n        requestAnimationFrame(() => this.ensureFocusable());\n    }\n\n    /** Unregister a removed grab handle. */\n    removeHandle(handle: DashboardGrabHandleDirective): void {\n        this._handles = this._handles.filter(h => h !== handle);\n\n        // Make sure there is still a focusable handle\n        this.ensureFocusable();\n    }\n\n    /** Make the first visual item in the list focusable */\n    setFirstItemFocusable(): void {\n        this.setItemFocus(0, false);\n    }\n\n    /** Set an item at a given index focused */\n    setItemFocus(index: number, focusElement: boolean = true): void {\n\n        // if the list is empty then do nothing\n        if (!this._handles || this._handles.length === 0) {\n            return;\n        }\n\n        // check if the index is out of bounds\n        if (index < 0) {\n            return this.setItemFocus(0);\n        }\n\n        if (index > this._handles.length - 1) {\n            return this.setItemFocus(this._handles.length - 1);\n        }\n\n        // try focusing a specific index\n        this.getHandlesInOrder().forEach((handle, idx) => idx === index ? handle.focus(focusElement) : handle.blur());\n\n        // for safety we want to ensure one of the items is definitely still focusabled\n        this.ensureFocusable();\n    }\n\n    /** Focus the previous grab handle */\n    setPreviousItemFocus(handle: DashboardGrabHandleDirective): void {\n        this.setItemFocus(this.getHandleIndex(handle) - 1);\n    }\n\n    /** Focus the next grab handle */\n    setNextItemFocus(handle: DashboardGrabHandleDirective): void {\n        this.setItemFocus(this.getHandleIndex(handle) + 1);\n    }\n\n    /** Focus the grab handle on the widget above */\n    setSiblingItemFocus(widget: DashboardWidgetComponent, direction: ActionDirection): void {\n\n        // find all widgets that are directly above and have grab handles\n        const target = this._dashboard.getSurroundingWidgets(widget, direction)\n            .map(_widget => this._handles.find(handle => handle.widget === _widget))\n            .filter(handle => !!handle)\n            .reduce((handle, current) => !handle || current.widget.getColumn() > handle.widget.getColumn() ? current : handle, null);\n\n        // ensure we have a target before focusing\n        if (!target) {\n            return;\n        }\n\n        // get the index of the target handle\n        const index = this.getHandleIndex(target);\n\n        // focus the item\n        this.setItemFocus(index);\n    }\n\n    /** Get handles in the order they appear rather than the order they are in the DOM */\n    getHandlesInOrder(handles = this._handles): DashboardGrabHandleDirective[] {\n        const widgets = this._dashboard.getWidgetsByOrder();\n\n        // sort the handles according to the position of the widget it belongs to\n        return handles.sort((handleOne, handleTwo) => widgets.indexOf(handleOne.widget) - widgets.indexOf(handleTwo.widget));\n    }\n\n    private getHandleIndex(handle: DashboardGrabHandleDirective): number {\n        return this.getHandlesInOrder().findIndex(_handle => _handle === handle);\n    }\n\n    /** If the current focusable handle is removed we need to make another one focusable */\n    private ensureFocusable(): void {\n        if (!this._handles.find(handle => handle.tabIndex === 0)) {\n            this.setFirstItemFocusable();\n        }\n    }\n\n}","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport {\n  DOWN_ARROW,\n  ENTER,\n  ESCAPE,\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  SPACE,\n  UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n  Directive,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { ActionDirection, DashboardCache, DashboardService } from '../dashboard.service';\nimport { DashboardWidgetComponent } from '../widget/dashboard-widget.component';\nimport { DashboardGrabHandleService } from './grab-handle.service';\n\n@Directive({\n  selector: '[uxDashboardGrabHandle]',\n  exportAs: 'ux-dashboard-grab-handle',\n})\nexport class DashboardGrabHandleDirective implements OnInit, OnDestroy {\n  readonly widget = inject(DashboardWidgetComponent);\n\n  private readonly _dashboard = inject(DashboardService);\n\n  private readonly _handle = inject(DashboardGrabHandleService);\n\n  private readonly _elementRef = inject(ElementRef);\n\n  private readonly _announcer = inject(LiveAnnouncer);\n\n  /** Specify whether or not this handle can be used to perform moving */\n  @Input() uxGrabAllowMove: boolean = true;\n\n  /** Specify whether or not this handle can be used to perform resizing */\n  @Input() uxGrabAllowResize: boolean = true;\n\n  /** The aria label for the grab handle */\n  @Input() uxGrabAriaLabel: (widget: DashboardWidgetComponent) => string | string =\n    this.getDefaultAriaLabel.bind(this);\n\n  /** Customize the announcement that is made whenever an item has successfully been moved or resized */\n  @Input() uxGrabChangeSuccessAnnouncement: (\n    widget: DashboardWidgetComponent,\n    differences: DashboardLayoutDiff[]\n  ) => string | string = this.getChangeSuccessAnnouncement.bind(this);\n\n  /** Customize the announcement that is made whenever an item enters 'grab' mode */\n  @Input() uxGrabStartAnnouncement: (widget: DashboardWidgetComponent) => string | string =\n    this.getStartAnnouncement.bind(this);\n\n  /** Customize the announcement thqt is made whenever an item cannot be moved */\n  @Input() uxGrabMoveFailAnnouncement: (\n    widget: DashboardWidgetComponent,\n    direction: ActionDirection\n  ) => string | string = this.getMoveFailAnnouncement.bind(this);\n\n  /** Customize the announcement thqt is made whenever an item cannot be resized */\n  @Input() uxGrabResizeFailAnnouncement: (\n    widget: DashboardWidgetComponent,\n    direction: ActionDirection\n  ) => string | string = this.getResizeFailAnnouncement.bind(this);\n\n  /** Customize the announcement made whenever the moving/resizing is commited */\n  @Input() uxGrabConfirmAnnouncement: (widget: DashboardWidgetComponent) => string | string =\n    this.getConfirmAnnouncement.bind(this);\n\n  /** Customize the announcement made whenever the moving/resizing is cancelled */\n  @Input() uxGrabCancelAnnouncement: (widget: DashboardWidgetComponent) => string | string =\n    this.getCancellationAnnouncement.bind(this);\n\n  /** Binding for the grab handle aria label */\n  @HostBinding('attr.aria-label') ariaLabel: string;\n\n  /** We must programmatically control the focus of the drag handles */\n  @HostBinding('tabIndex') tabIndex: number = -1;\n\n  /** Store the current dragging state */\n  isGrabbing: boolean = false;\n\n  /** Store the current layout when we enter 'grab' mode */\n  private _cache: DashboardCache[];\n\n  /** Store the layout after the most recent successful move or resize */\n  private _lastMovement: DashboardCache[];\n\n  /** Emit when the directive is destroyed to unsubscribe from all observables */\n  private readonly _onDestroy = new Subject<void>();\n\n  constructor() {\n    if (!this.widget) {\n      throw new Error('uxDashboardGrabHandle must be used within a dashboard widget');\n    }\n\n    this._handle.addHandle(this);\n\n    // subscribe to changes to the current grab state\n    this._dashboard.isGrabbing$\n      .pipe(\n        takeUntil(this._onDestroy),\n        map(_widget => _widget === this.widget)\n      )\n      .subscribe(isGrabbing => (this.isGrabbing = isGrabbing));\n  }\n\n  /** Set the initial aria label and subscribe to layout changes */\n  ngOnInit(): void {\n    if (!this.widget.name) {\n      console.warn(\n        `Dashboard widget ${this.widget.id} must have a valid 'name' to use uxDashboardGrabHandle`\n      );\n    }\n\n    // set the initial aria label\n    this.ariaLabel = this.getAnnouncement(this.uxGrabAriaLabel);\n\n    // update the aria label when layout changes occur\n    this._dashboard.layout$\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(() => (this.ariaLabel = this.getAnnouncement(this.uxGrabAriaLabel)));\n  }\n\n  /** Unsubscribe from all observables */\n  ngOnDestroy(): void {\n    this._handle.removeHandle(this);\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  /** Begin drag mode and cache initial state */\n  enableDragMode(): void {\n    if (!this.isGrabbing) {\n      // cache the widgets so we can restore when escape is pressed\n      this._cache = this._lastMovement = this._dashboard.cacheWidgets();\n\n      // store the current widget being grabbed\n      this._dashboard.isGrabbing$.next(this.widget);\n\n      this._dashboard.onShiftStart(this.widget);\n\n      // announce the grab start\n      this._announcer.announce(this.getAnnouncement(this.uxGrabStartAnnouncement));\n    }\n  }\n\n  /** Finish drag mode and commit the current state */\n  disableDragMode(): void {\n    if (this.isGrabbing) {\n      this._dashboard.isGrabbing$.next(null);\n      this._lastMovement = null;\n      this._dashboard.onShiftEnd();\n\n      // announce the confirmation\n      this._announcer.announce(this.getAnnouncement(this.uxGrabConfirmAnnouncement));\n    }\n  }\n\n  /** Finish the drag mode and restore the original state */\n  cancelDragMode(): void {\n    if (this.isGrabbing) {\n      this._dashboard.onShiftEnd();\n      this._dashboard.restoreWidgets(false, this._cache, true);\n      this._dashboard.setDashboardHeight();\n      this._dashboard.layout$.next(this._dashboard.getLayoutData());\n      this._dashboard.isGrabbing$.next(null);\n\n      // announce the cancellation\n      this._announcer.announce(this.getAnnouncement(this.uxGrabCancelAnnouncement));\n    }\n  }\n\n  /** Toggle the drag mode state */\n  toggleDragMode(): void {\n    this.isGrabbing ? this.disableDragMode() : this.enableDragMode();\n  }\n\n  /** Set the tab index and optionally focus the DOM element */\n  focus(focusElement: boolean = true): void {\n    this.tabIndex = 0;\n\n    if (focusElement) {\n      this._elementRef.nativeElement.focus();\n    }\n  }\n\n  /** Make this item non-tabbable */\n  blur(): void {\n    this.tabIndex = -1;\n  }\n\n  /** When the grab handle loses focus then exit 'grab' mode */\n  @HostListener('blur')\n  onBlur(): void {\n    this.disableDragMode();\n  }\n\n  /** Handle key events */\n  @HostListener('keydown', ['$event', '$event.which', '$event.ctrlKey'])\n  onKeydown(event: KeyboardEvent, key: number, ctrlKey: boolean): void {\n    switch (key) {\n      case ESCAPE:\n        this.cancelDragMode();\n        break;\n\n      case SPACE:\n      case ENTER:\n        this.toggleDragMode();\n        event.preventDefault();\n        event.stopPropagation();\n        break;\n\n      case UP_ARROW:\n      case RIGHT_ARROW:\n      case DOWN_ARROW:\n      case LEFT_ARROW:\n        if (this.isGrabbing) {\n          ctrlKey ? this.resizeWidget(event, key) : this.moveWidget(event, key);\n        } else {\n          this.moveFocus(event, key);\n        }\n    }\n  }\n\n  /** Get an announcement from the inputs - they may be a string or a function so handle both */\n   \n  getAnnouncement(announcement: Function | string, ...args: any[]): string {\n    return typeof announcement === 'function' ? announcement(this.widget, ...args) : announcement;\n  }\n\n  /** Move the widget in a given direction based on arrow keys */\n  private moveWidget(event: KeyboardEvent, key: number): void {\n    // check if moving is allowed\n    if (!this.widget.isDraggable || !this.uxGrabAllowMove) {\n      return;\n    }\n\n    // attempt to perform the move\n    this._dashboard.onShift(this.widget, this.getDirectionFromKey(key));\n\n    // get the announcable diff\n    const changes = this.getLayoutDiff();\n\n    // if there were changes then announce them\n    if (changes.length > 0) {\n      this._announcer.announce(this.getAnnouncement(this.uxGrabChangeSuccessAnnouncement, changes));\n    } else {\n      this._announcer.announce(\n        this.getAnnouncement(this.uxGrabMoveFailAnnouncement, this.getDirectionFromKey(key))\n      );\n    }\n\n    this._lastMovement = this._dashboard.cacheWidgets();\n\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  /** Resize the widgets accordingly based on the arrow keys */\n  private resizeWidget(event: KeyboardEvent, key: number): void {\n    // check if resizing is allowed\n    if (!this.widget.resizable || !this.uxGrabAllowResize) {\n      return;\n    }\n\n    this._dashboard.onResize(this.widget, this.getDirectionFromKey(key));\n\n    // get the announcable diff\n    const changes = this.getLayoutDiff();\n\n    // if there were changes then announce them\n    if (changes.length > 0) {\n      this._announcer.announce(this.getAnnouncement(this.uxGrabChangeSuccessAnnouncement, changes));\n    } else {\n      this._announcer.announce(\n        this.getAnnouncement(this.uxGrabResizeFailAnnouncement, this.getDirectionFromKey(key))\n      );\n    }\n\n    this._lastMovement = this._dashboard.cacheWidgets();\n\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  /** Shift focus between the variour grab handles */\n  private moveFocus(event: KeyboardEvent, key: number): void {\n    switch (key) {\n      case UP_ARROW:\n        this._handle.setSiblingItemFocus(this.widget, ActionDirection.Top);\n        break;\n\n      case RIGHT_ARROW:\n        this._handle.setNextItemFocus(this);\n        break;\n\n      case DOWN_ARROW:\n        this._handle.setSiblingItemFocus(this.widget, ActionDirection.Bottom);\n        break;\n\n      case LEFT_ARROW:\n        this._handle.setPreviousItemFocus(this);\n        break;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  /** Convert an arrow key code into an ActionDirection enum */\n  private getDirectionFromKey(key: number): ActionDirection {\n    switch (key) {\n      case UP_ARROW:\n        return ActionDirection.Top;\n\n      case RIGHT_ARROW:\n        return ActionDirection.Right;\n\n      case DOWN_ARROW:\n        return ActionDirection.Bottom;\n\n      case LEFT_ARROW:\n        return ActionDirection.Left;\n    }\n  }\n\n  /** Supply the default grab handle aria label based on the provided constraints */\n  private getDefaultAriaLabel(widget: DashboardWidgetComponent): string {\n    if (widget.resizable && this.uxGrabAllowResize && widget.isDraggable && this.uxGrabAllowMove) {\n      return `Press space to move and resize the ${widget.name} panel.`;\n    } else if (widget.resizable && this.uxGrabAllowResize) {\n      return `Press space to resize the ${widget.name} panel.`;\n    } else if (widget.isDraggable && this.uxGrabAllowMove) {\n      return `Press space to move the ${widget.name} panel.`;\n    }\n  }\n\n  /** Get the default announcement whenever a movement or resize was successful */\n  private getChangeSuccessAnnouncement(): string {\n    return `${this.getDiffAnnouncements().join(' ')} Use the cursor keys to continue moving and resizing, enter to commit, or escape to cancel.`;\n  }\n\n  private getDiffAnnouncements(): string[] {\n    // map the differences to strings\n    return this.getLayoutDiff().map(diff => {\n      const changes: string[] = [];\n\n      // Handle movement strings\n      if (diff.isMovedHorizontally && diff.isMovedVertically) {\n        changes.push(`moved to row ${diff.currentRow}, column ${diff.currentColumn}`);\n      } else if (diff.isMovedDown) {\n        changes.push(`moved down to row ${diff.currentRow}, column ${diff.currentColumn}`);\n      } else if (diff.isMovedUp) {\n        changes.push(`moved up to row ${diff.currentRow}, column ${diff.currentColumn}`);\n      } else if (diff.isMovedLeft) {\n        changes.push(`moved left to row ${diff.currentRow}, column ${diff.currentColumn}`);\n      } else if (diff.isMovedRight) {\n        changes.push(`moved right to row ${diff.currentRow}, column ${diff.currentColumn}`);\n      }\n\n      // handle resize strings\n      if (diff.isResized) {\n        changes.push(\n          `resized to ${diff.currentColumnSpan} columns wide and ${diff.currentRowSpan} rows high`\n        );\n      }\n\n      return `${diff.widget.name} panel is ${changes.join(' and ')}.`;\n    });\n  }\n\n  /** Get the default announcement whenever a movement is not possible due to dashboard boundaries */\n  private getMoveFailAnnouncement(\n    widget: DashboardWidgetComponent,\n    direction: ActionDirection\n  ): string {\n    switch (direction) {\n      case ActionDirection.Top:\n        return `Cannot move the ${widget.name} panel up, because it is at the top edge of the dashboard`;\n\n      case ActionDirection.Bottom:\n        return `Cannot move the ${widget.name} panel down, because it is at the bottom edge of the dashboard`;\n\n      case ActionDirection.Right:\n        return `Cannot move the ${widget.name} panel right, because it is at the right edge of the dashboard`;\n\n      case ActionDirection.Left:\n        return `Cannot move the ${widget.name} panel left, because it is at the left edge of the dashboard`;\n    }\n  }\n\n  /** Get the default announcement whenever a resize is not possible due to either widget constraints of dashboard bounds */\n  private getResizeFailAnnouncement(\n    widget: DashboardWidgetComponent,\n    direction: ActionDirection\n  ): string {\n    switch (direction) {\n      case ActionDirection.Top:\n        return `Cannot make the ${widget.name} panel shorter, because it is currently at its minimum height.`;\n\n      case ActionDirection.Bottom:\n        return `Cannot make the ${widget.name} panel taller, because it is currently at its maximum height.`;\n\n      case ActionDirection.Right:\n        return `Cannot make the ${widget.name} panel wider, because it is at the right edge of the dashboard.`;\n\n      case ActionDirection.Left:\n        return `Cannot make the ${widget.name} panel narrower, because it is currently at its minimum width.`;\n    }\n  }\n\n  /** Get the default announcement whenever we enter 'grab' mode */\n  private getStartAnnouncement(widget: DashboardWidgetComponent): string {\n    if (widget.isDraggable && widget.resizable && this.uxGrabAllowMove && this.uxGrabAllowResize) {\n      return `${widget.name} panel is currently on row ${widget.getRow()}, column ${widget.getColumn()} and is ${widget.getColumnSpan()} columns wide and ${widget.getRowSpan()} rows high. Use the cursor keys to move the widget and the cursor keys with the control modifier to resize the widget. Press enter to commit changes and press escape to cancel changes.`;\n    } else if (widget.isDraggable && this.uxGrabAllowMove) {\n      return `${widget.name} panel is currently on row ${widget.getRow()}, column ${widget.getColumn()}. Use the cursor keys to move the widget. Press enter to commit changes and press escape to cancel changes.`;\n    } else if (widget.resizable && this.uxGrabAllowResize) {\n      return `${widget.name} panel is currently on row ${widget.getRow()}, column ${widget.getColumn()} and is ${widget.getColumnSpan()} columns wide and ${widget.getRowSpan()} rows high. Use the cursor keys with the control modifier to resize the widget. Press enter to commit changes and press escape to cancel changes.`;\n    }\n  }\n\n  /** Get the default announcement whenever grab mode is exited after a movement or resize */\n  private getConfirmAnnouncement(widget: DashboardWidgetComponent): string {\n    if (widget.isDraggable && widget.resizable && this.uxGrabAllowMove && this.uxGrabAllowResize) {\n      return `Moving and resizing complete. ${this.getDiffAnnouncements().join(' ')} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    } else if (widget.isDraggable && this.uxGrabAllowMove) {\n      return `Moving complete. ${this.getDiffAnnouncements().join(' ')} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    } else if (widget.resizable && this.uxGrabAllowResize) {\n      return `Resizing complete. ${this.getDiffAnnouncements().join(' ')} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    }\n  }\n\n  /** Get the default announcement whenever grab mode is exited after being cancelled */\n  private getCancellationAnnouncement(widget: DashboardWidgetComponent): string {\n    if (widget.isDraggable && widget.resizable && this.uxGrabAllowMove && this.uxGrabAllowResize) {\n      return `Moving and resizing cancelled. ${this.getDashboardAriaLabel()} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    } else if (widget.isDraggable && this.uxGrabAllowMove) {\n      return `Moving cancelled. ${this.getDashboardAriaLabel()} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    } else if (widget.resizable && this.uxGrabAllowResize) {\n      return `Resizing cancelled. ${this.getDashboardAriaLabel()} ${this.getAnnouncement(this.uxGrabAriaLabel)}`;\n    }\n  }\n\n  /** Get a description of all dashboard widgets, their positions and sizes */\n  private getDashboardAriaLabel(): string {\n    return `Dashboard with ${this._dashboard.options.columns} columns, containing ${this._dashboard.widgets.length} panels. ${this._dashboard.widgets.map(this.getWidgetAriaLabel).join(' ')}`;\n  }\n\n  /** Get a description of a given widget */\n  private getWidgetAriaLabel(widget: DashboardWidgetComponent): string {\n    return `${widget.name} panel in row ${widget.getRow()}, column ${widget.getColumn()}, is ${widget.getColumnSpan()} columns wide and ${widget.getRowSpan()} rows high.`;\n  }\n\n  /** Get an object describing all the changes that have been made to all widgets since the last change */\n  private getLayoutDiff(): DashboardLayoutDiff[] {\n    // find all changes\n    const diffs = this._dashboard.getLayoutData().map(layout => {\n      // get the most recent cache\n      const cache = this._lastMovement || this._cache;\n\n      // get the actual widget\n      const widget = this._dashboard.widgets.find(_widget => _widget.id === layout.id);\n\n      // get previous position\n      const previousLayout = cache.find(_widget => _widget.id === layout.id);\n\n      // ensure they are all numbers\n      layout.row = Number(layout.row);\n      layout.rowSpan = Number(layout.rowSpan);\n      layout.col = Number(layout.col);\n      layout.colSpan = Number(layout.colSpan);\n\n      previousLayout.row = Number(previousLayout.row);\n      previousLayout.rowSpan = Number(previousLayout.rowSpan);\n      previousLayout.column = Number(previousLayout.column);\n      previousLayout.columnSpan = Number(previousLayout.columnSpan);\n\n      return {\n        widget,\n        currentRow: layout.row,\n        currentColumn: layout.col,\n        currentRowSpan: layout.rowSpan,\n        currentColumnSpan: layout.colSpan,\n        previousColumn: previousLayout.column,\n        previousRow: previousLayout.row,\n        previousColumnSpan: previousLayout.columnSpan,\n        previousRowSpan: previousLayout.rowSpan,\n        isMovedLeft: layout.col < previousLayout.column,\n        isMovedRight: layout.col > previousLayout.column,\n        isMovedUp: layout.row < previousLayout.row,\n        isMovedDown: layout.row > previousLayout.row,\n        isMovedHorizontally: layout.col !== previousLayout.column,\n        isMovedVertically: layout.row !== previousLayout.row,\n        isMoved: layout.col !== previousLayout.column || layout.row !== previousLayout.row,\n        isResized:\n          previousLayout.columnSpan !== layout.colSpan || previousLayout.rowSpan !== layout.rowSpan,\n      } as DashboardLayoutDiff;\n    });\n\n    // get the order the widgets appear visually\n    const order = this._handle.getHandlesInOrder().map(handle => handle.widget);\n\n    // only return items that have been repositioned or resized\n    return diffs\n      .filter(diff => diff.isMoved || diff.isResized)\n      .sort((diffOne, diffTwo) => {\n        // sort this so that the item that the user moved is first in the list, and the remainder are in their new order as seen in the dashboard\n        if (diffOne.widget === this.widget) {\n          return -1;\n        }\n\n        if (diffTwo.widget === this.widget) {\n          return 1;\n        }\n\n        // otherwise sort based on their visual order\n        return order.indexOf(diffOne.widget) < order.indexOf(diffTwo.widget) ? -1 : 1;\n      });\n  }\n}\n\nexport interface DashboardLayoutDiff {\n  widget: DashboardWidgetComponent;\n  previousColumn: number;\n  currentColumn: number;\n  previousRow: number;\n  currentRow: number;\n  previousColumnSpan: number;\n  currentColumnSpan: number;\n  previousRowSpan: number;\n  currentRowSpan: number;\n  isMovedLeft: boolean;\n  isMovedRight: boolean;\n  isMovedUp: boolean;\n  isMovedDown: boolean;\n  isMovedHorizontally: boolean;\n  isMovedVertically: boolean;\n  isResized: boolean;\n  isMoved: boolean;\n}\n","import { AfterContentInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, inject, Input, OnChanges, OnDestroy, Output, QueryList, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil, tap } from 'rxjs/operators';\nimport { ResizeDimensions } from '../../directives/resize/resize.service';\nimport { DashboardLayoutData, DashboardService, defaultOptions } from './dashboard.service';\nimport { DashboardGrabHandleDirective } from './grab-handle/grab-handle.directive';\nimport { DashboardGrabHandleService } from './grab-handle/grab-handle.service';\nimport { DashboardWidgetComponent } from './widget/dashboard-widget.component';\n\n@Component({\n    selector: 'ux-dashboard',\n    templateUrl: './dashboard.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        DashboardService,\n        DashboardGrabHandleService\n    ]\n})\nexport class DashboardComponent implements AfterViewInit, AfterContentInit, OnDestroy, OnChanges {\n\n    readonly dashboardService = inject(DashboardService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    isGrabbing: boolean = false;\n\n    @Input('aria-label') customAriaLabel: (widgets: DashboardWidgetComponent[], options: DashboardOptions) => string | string = this.getDefaultAriaLabel;\n\n    /** If defined or changed this will set the positions of the widgets within the dashboard. This is a two way binding that will be updated with the current layout when it changes. */\n    @Input() set layout(layout: DashboardLayoutData[]) {\n        if (layout) {\n            this.dashboardService.layout$.next(layout);\n        }\n    }\n\n    /** Configures the options for the dashboard, if an option is not specified the default value will be used. */\n    @Input() set options(options: DashboardOptions) {\n        this.dashboardService.options$.next({ ...defaultOptions, ...options });\n    }\n\n    /** Emits when layout has been changed. */\n    @Output() layoutChange = new EventEmitter<DashboardLayoutData[]>();\n\n    @HostBinding('attr.aria-label') ariaLabel: string;\n    @HostBinding('attr.role') @Input() role: string = 'region';\n\n    @ViewChild('dashboard', { static: true }) dashboardElement: ElementRef;\n\n    /** Find all grab handles used in the dashboard */\n    @ContentChildren(DashboardGrabHandleDirective, { descendants: true }) handles: QueryList<DashboardGrabHandleDirective>;\n\n    /** Ensure we unsubscribe from all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        this.dashboardService.layout$.pipe(takeUntil(this._onDestroy), tap(() => this.ariaLabel = this.getAriaLabel()))\n            .subscribe(() => this._changeDetector.markForCheck());\n\n            this.dashboardService.userLayoutChange$.pipe(takeUntil(this._onDestroy)).subscribe(data => this.layoutChange.emit(data));\n\n        // subscribe to changes to the grab mode\n        this.dashboardService.isGrabbing$.pipe(takeUntil(this._onDestroy), map(widget => !!widget))\n            .subscribe(isGrabbing => this.isGrabbing = isGrabbing);\n    }\n\n    /**\n     * Set the initial dimensions\n     */\n    ngAfterViewInit(): void {\n        // set the initial dimensions\n        this.dashboardService.setDimensions(this.dashboardElement.nativeElement.offsetWidth, this.dashboardElement.nativeElement.offsetHeight);\n    }\n\n    ngAfterContentInit(): void {\n        this.dashboardService.initialized$.next(true);\n    }\n\n    ngOnChanges(): void {\n        this.dashboardService.renderDashboard();\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    onResize(event: ResizeDimensions): void {\n        this.dashboardService.setDimensions(event.width, event.height);\n    }\n\n    getAriaLabel(): string {\n        if (this.customAriaLabel && typeof this.customAriaLabel === 'string') {\n            return this.customAriaLabel;\n        } else if (this.customAriaLabel && typeof this.customAriaLabel === 'function') {\n            return this.customAriaLabel(this.dashboardService.widgets, this.dashboardService.options);\n        }\n\n        return this.ariaLabel;\n    }\n\n    /** Shift widgets up where possible to fill any available space to optimize the dashboard layout */\n    refreshLayout(): void {\n        const didChangeLayout = this.dashboardService.shiftWidgetsUp();\n\n        if (didChangeLayout) {\n            // if widgets have shifted up the dashboard may no longer occupy the same\n            // height. We should remove any unneeded whitespace below widgets too.\n            this.dashboardService.setDashboardHeight();\n\n            // emit information about the layout\n            this.dashboardService.layout$.next(this.dashboardService.getLayoutData());\n            this.layoutChange.emit(this.dashboardService.layout$.value);\n        }\n    }\n\n    private getDefaultAriaLabel(widgets: DashboardWidgetComponent[], options: DashboardOptions): string {\n        return `Dashboard with ${ options.columns } columns, containing ${ widgets.length } panels. ${ widgets.map(this.getWidgetAriaLabel).join(' ') }`;\n    }\n\n    private getWidgetAriaLabel(widget: DashboardWidgetComponent): string {\n        return `${ widget.name } panel in row ${ widget.getRow() }, column ${ widget.getColumn() }, is ${ widget.getColumnSpan() } columns wide and ${ widget.getRowSpan() } rows high.`;\n    }\n}\n\nexport interface DashboardOptions {\n    columns?: number;\n    padding?: number;\n    minWidth?: number;\n    minHeight?: number;\n    rowHeight?: number;\n    emptyRow?: boolean;\n}\n","<div #dashboard class=\"dashboard-container\" [style.height.px]=\"dashboardService.height$ | async\">\n  <div (uxResize)=\"onResize($event)\" [throttle]=\"16\" class=\"dashboard\">\n    <ng-content></ng-content>\n  </div>\n\n  <!-- Wrap with ngIf so we only have one subscription rather than one for each property -->\n  @if (dashboardService.placeholder$ | async; as placeholder) {\n    @if (placeholder.visible) {\n      <div class=\"position-indicator\"\n        [style.left.px]=\"placeholder.x\"\n        [style.top.px]=\"placeholder.y\"\n        [style.width.px]=\"placeholder.width\"\n        [style.height.px]=\"placeholder.height\">\n      </div>\n    }\n  }\n</div>","import { Directive, inject } from '@angular/core';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { DragDirective, DragScrollEvent } from '../../../directives/drag/drag.directive';\nimport { ActionDirection, DashboardService } from '../dashboard.service';\nimport { DashboardWidgetComponent } from '../widget/dashboard-widget.component';\n\n@Directive({\n    selector: '[uxDashboardWidgetDragHandle], [ux-dashboard-widget-drag-handle]'\n})\nexport class DashboardDragHandleDirective extends DragDirective {\n    readonly widget = inject(DashboardWidgetComponent);\n\n    readonly dashboardService = inject(DashboardService);\n\n    constructor() {\n\n        super();\n\n        // inform the widget that it can be dragged\n        this.widget.isDraggable = true;\n\n        this.onDragStart.pipe(takeUntil(this._onDestroy), tap(() => this.dashboardService.isGrabbing$.next(null)))\n            .subscribe((event: MouseEvent) => this.dashboardService.onDragStart({ widget: this.widget, direction: ActionDirection.Move, event }));\n\n        this.onDrag.pipe(takeUntil(this._onDestroy))\n            .subscribe((event: MouseEvent) => this.dashboardService.onDrag({ widget: this.widget, direction: ActionDirection.Move, event }));\n\n        this.onDragScroll.pipe(takeUntil(this._onDestroy))\n            .subscribe((event: DragScrollEvent) => this.dashboardService.onDragScroll(this.widget, event));\n\n        this.onDragEnd.pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.dashboardService.onDragEnd());\n    }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DragModule } from '../../directives/drag/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { DashboardComponent } from './dashboard.component';\nimport { DashboardService } from './dashboard.service';\nimport { DashboardDragHandleDirective } from './drag-handle/drag-handle.directive';\nimport { DashboardGrabHandleDirective } from './grab-handle/grab-handle.directive';\nimport { DashboardWidgetComponent } from './widget/dashboard-widget.component';\n\nconst DECLARATIONS = [\n    DashboardComponent,\n    DashboardWidgetComponent,\n    DashboardDragHandleDirective,\n    DashboardGrabHandleDirective\n];\n\n@NgModule({\n    imports: [\n        A11yModule,\n        CommonModule,\n        ResizeModule,\n        DragModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS,\n    providers: [DashboardService],\n})\nexport class DashboardModule { }\n","/**\n * Convert a single dimension array to a double dimension array\n * @param items the single dimension array to convert\n * @param columns the number of items each array should have\n */\nexport function gridify<T>(items: T[], columns: number): T[][] {\n\n    // create a copy of array so not to effect the original\n    items = items.slice(0);\n\n    const grid: T[][] = [];\n\n    while (items.length) {\n        grid.push(items.splice(0, columns));\n    }\n\n    return grid;\n}\n\n/**\n * Create an array of numbers between two limits\n * @param start the lower limit\n * @param end the upper limit\n */\nexport function range(start: number, end: number): number[] {\n    const list: number[] = [];\n\n    for (let idx = start; idx <= end; idx++) {\n        list.push(idx);\n    }\n\n    return list;\n}\n\n/**\n * Create an array of dates between two points\n * @param start the date to start the array\n * @param end the date to end the array\n */\nexport function dateRange(start: Date, end: Date): Date[] {\n\n    // don't alter the start date object\n    start = new Date(start);\n\n    const dates: Date[] = [];\n\n    // loop through all the days between the date range\n    while (start <= end) {\n\n        // add the date to the array\n        dates.push(new Date(start));\n\n        // move to the next day\n        start.setDate(start.getDate() + 1);\n    }\n\n    return dates;\n}\n\n/**\n * Compare two dates to see if they are on the same day\n * @param day1 the first date to compare\n * @param day2 the second date to compare\n */\nexport function compareDays(day1: Date, day2: Date): boolean {\n    return day1.getDate() === day2.getDate() &&\n        day1.getMonth() === day2.getMonth() &&\n        day1.getFullYear() === day2.getFullYear();\n}\n\n/**\n * Date comparison for use primarily with distinctUntilChanged\n */\nexport function dateComparator(dateOne: Date, dateTwo: Date): boolean {\n\n    if (!dateOne && dateTwo || dateOne && !dateTwo) {\n        return false;\n    }\n\n    if (!dateOne && !dateTwo) {\n        return true;\n    }\n\n    return dateOne.getTime() === dateTwo.getTime();\n}\n\n/**\n * Calculate the number of days between two dates\n * @param start The start date\n * @param end The end date\n * @param fullDay Whether or not we should take from 00:00 on the start date and 23:59 on the end date\n */\nexport function differenceBetweenDates(start: Date, end: Date, fullDay: boolean = true): number | null {\n    if (!start || !end) {\n        return null;\n    }\n\n    const millisecondsInDay = 86400000;\n    const startDay = new Date(start.getTime() < end.getTime() ? start : end);\n    const endDay = new Date(start.getTime() > end.getTime() ? start : end);\n\n    // get the start of day\n    if (fullDay) {\n        startDay.setHours(0, 0, 0, 0);\n        endDay.setHours(23, 59, 59, 0);\n    }\n\n    return Math.round((endDay.getTime() - startDay.getTime()) / millisecondsInDay);\n}\n\n/**\n * Timezone comparison for use primarily with distinctUntilChanged\n */\nexport function timezoneComparator(zoneOne: DateTimePickerTimezone, zoneTwo: DateTimePickerTimezone): boolean {\n    return zoneOne.name === zoneTwo.name && zoneOne.offset === zoneTwo.offset;\n}\n\n/**\n * Get a date object with the time of the start of the given day\n * @param date The date to get the start of day\n */\nexport function getStartOfDay(date: Date): Date {\n    const startOfDay = new Date(date);\n    startOfDay.setHours(0, 0, 0, 0);\n    return startOfDay;\n}\n\nexport function isDateAfter(date: Date, after: Date, isEqual: boolean = false): boolean {\n    return isEqual ? getStartOfDay(date).getTime() >= getStartOfDay(after).getTime() : getStartOfDay(date).getTime() > getStartOfDay(after).getTime();\n}\n\nexport function isDateBefore(date: Date, before: Date, isEqual: boolean = false): boolean {\n    return isEqual ? getStartOfDay(date).getTime() <= getStartOfDay(before).getTime() : getStartOfDay(date).getTime() < getStartOfDay(before).getTime();\n}\n\n/**\n * Export an array of all the available months\n */\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nexport const monthsShort = getShortMonthNames();\n\nfunction getShortMonthNames(): string[] {\n    return months.map(month => month.substring(0, 3));\n}\n\n/**\n * Export an array of all the available days of the week\n */\nexport const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nexport const weekdaysShort = getShortWeekdayNames();\nexport const meridians = ['AM', 'PM'];\n\nfunction getShortWeekdayNames(): string[] {\n    return weekdays.map(weekday => weekday.substring(0, 3));\n}\n\n/** Export the default set of time zone */\nexport const timezones: DateTimePickerTimezone[] = [\n    { name: 'GMT-11', offset: 660 },\n    { name: 'GMT-10', offset: 600 },\n    { name: 'GMT-9', offset: 540 },\n    { name: 'GMT-8', offset: 480 },\n    { name: 'GMT-7', offset: 420 },\n    { name: 'GMT-6', offset: 360 },\n    { name: 'GMT-5', offset: 300 },\n    { name: 'GMT-4', offset: 240 },\n    { name: 'GMT-3', offset: 180 },\n    { name: 'GMT-2', offset: 120 },\n    { name: 'GMT-1', offset: 60 },\n    { name: 'GMT', offset: 0 },\n    { name: 'GMT+1', offset: -60 },\n    { name: 'GMT+2', offset: -120 },\n    { name: 'GMT+3', offset: -180 },\n    { name: 'GMT+4', offset: -240 },\n    { name: 'GMT+5', offset: -300 },\n    { name: 'GMT+6', offset: -360 },\n    { name: 'GMT+7', offset: -420 },\n    { name: 'GMT+8', offset: -480 },\n    { name: 'GMT+9', offset: -540 },\n    { name: 'GMT+10', offset: -600 },\n    { name: 'GMT+11', offset: -660 },\n    { name: 'GMT+12', offset: -720 }\n];\n\nexport interface DateTimePickerTimezone {\n    name: string;\n    offset: number;\n}\n","import { Subject } from 'rxjs';\nimport { compareDays, isDateAfter, isDateBefore } from '../date-time-picker/date-time-picker.utils';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DateRangeService {\n\n    /** Indicate whether we want to show a date range */\n    isRange: boolean = false;\n\n    /** Specify the direction of the selection */\n    direction: DateRangePicker = DateRangePicker.Start;\n\n    /** Specify the start of the range */\n    start: Date;\n\n    /** Specify the end of the range */\n    end: Date;\n\n    /** Specify the date we are hovering over */\n    hover: Date;\n\n    /** Emit whenever the start date changes */\n    onStartChange = new Subject<Date>();\n\n    /** Emit whenever the end date changes */\n    onEndChange = new Subject<Date>();\n\n    /** Emit whenever the range has changed */\n    onRangeChange = new Subject<void>();\n\n    /** Emit whenever the hover date changes */\n    onHoverChange = new Subject<void>();\n\n    /** Emit whenever the range is cleared */\n    onClear = new Subject<void>();\n\n    /** Indicate if we should show time */\n    showTime: boolean = false;\n\n    /** Defines the aria label for the range start picker */\n    startPickerAriaLabel: string = 'Selecting the start date';\n\n    /** Defines the aria label for the range end picker */\n    endPickerAriaLabel: string = 'Selecting the end date';\n\n    /** Indicate if we are currently changing the time */\n    isChangingTime: boolean = false;\n\n    /** Store the current start time */\n    startTime: DateRangeTime = { hours: 0, minutes: 0, seconds: 0 };\n\n    /** Store the current end time */\n    endTime: DateRangeTime = { hours: 23, minutes: 59, seconds: 59 };\n\n    setStartDate(date: Date | null): void {\n\n        // if the start date is after the end date the clear the end date\n        if (date && this.end && isDateAfter(date, this.end)) {\n            this.clear();\n        }\n\n        this.start = date;\n        this.onStartChange.next(this.start);\n        this.onRangeChange.next();\n    }\n\n    setEndDate(date: Date | null): void {\n\n        // if the end date is before the start date the clear the start date\n        if (date && this.start && isDateBefore(date, this.start)) {\n            this.clear();\n        }\n\n        this.end = date;\n        this.onEndChange.next(this.end);\n        this.onRangeChange.next();\n    }\n\n    clear(): void {\n        this.setStartDate(null);\n        this.setEndDate(null);\n        this.onClear.next();\n    }\n\n    setDateMouseEnter(date: Date | null): void {\n        this.hover = date;\n        this.onHoverChange.next();\n    }\n\n    setDateMouseLeave(date: Date): void {\n        if (date && this.hover && compareDays(date, this.hover)) {\n            this.setDateMouseEnter(null);\n        }\n    }\n}\n\nexport enum DateRangePicker {\n    Start = 'start',\n    End = 'end'\n}\n\nexport interface DateRangeTime {\n    hours: number;\n    minutes: number;\n    seconds: number;\n}\n","/**\n * This directive allows us to pass information down to a specific ux-date-time-picker\n * without having to expose additional inputs to the consuming application.\n *\n * For example, the day picker needs to know if it is the start or end picker\n * as the behavior will be different for each. However we don't want to expose an\n * input on the DateTimePickerComponent as this will appear in Editor Autocomplete Suggestions\n * options if the Angular Language Service is installed, and we don't want these to be public\n * options.\n */\nimport { Directive, inject, Input } from '@angular/core';\nimport { DateRangePicker } from './date-range.service';\n\nexport class DateRangeOptions {\n    picker: DateRangePicker = DateRangePicker.Start;\n}\n\n@Directive({\n    selector: '[uxDateRangePicker]',\n    providers: [DateRangeOptions]\n})\nexport class DateRangePickerDirective {\n\n    private readonly _options = inject(DateRangeOptions, { self: true });\n\n    /** Specify whether this is the start or end picker */\n    @Input() set picker(picker: DateRangePicker) {\n        this._options.picker = picker;\n    }\n}\n","/**\n * Add a config service to allow an application\n * to customize the date time picker default settings\n * across the entire application\n */\n\nimport { Injectable } from '@angular/core';\nimport { DateTimePickerTimezone, meridians, months, monthsShort, timezones, weekdaysShort } from './date-time-picker.utils';\n\n@Injectable()\nexport class DateTimePickerConfig {\n\n    showDate: boolean = true;\n    showTime: boolean = true;\n    showTimezone: boolean = true;\n    showSeconds: boolean = false;\n    showMeridian: boolean = true;\n    showSpinners: boolean = true;\n    showNowBtn: boolean = true;\n    weekdays: string[] = weekdaysShort;\n    nowBtnText: string = 'Today';\n    timezones: DateTimePickerTimezone[] = timezones;\n    months: string[] = months;\n    monthsShort: string[] = monthsShort;\n    meridians: string[] = meridians;\n    min: Date = null;\n    max: Date = null;\n}","import { WeekDay } from '@angular/common';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { DateRangeOptions } from '../date-range-picker/date-range-picker.directive';\nimport { DateRangeService } from '../date-range-picker/date-range.service';\nimport { DateTimePickerConfig } from './date-time-picker.config';\nimport { dateComparator, DateTimePickerTimezone, meridians, months, monthsShort, timezones, weekdaysShort } from './date-time-picker.utils';\n\n@Injectable()\nexport class DateTimePickerService implements OnDestroy {\n\n    private readonly _config = inject(DateTimePickerConfig, { optional: true });\n\n    readonly rangeService = inject(DateRangeService, { optional: true });\n\n    readonly rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    mode$: BehaviorSubject<DatePickerMode> = new BehaviorSubject<DatePickerMode>(DatePickerMode.Day);\n    date$: BehaviorSubject<Date> = new BehaviorSubject<Date>(new Date());\n    timezone$ = new BehaviorSubject<DateTimePickerTimezone>(null);\n    selected$: BehaviorSubject<Date> = new BehaviorSubject<Date>(new Date());\n\n    // the month and year to display in the viewport\n    month$: BehaviorSubject<number> = new BehaviorSubject<number>(new Date().getMonth());\n    year$: BehaviorSubject<number> = new BehaviorSubject<number>(new Date().getFullYear());\n\n    showDate$ = new BehaviorSubject<boolean>(this._config ? this._config.showDate : true);\n    showTime$ = new BehaviorSubject<boolean>(this._config ? this._config.showTime : true);\n    showTimezone$ = new BehaviorSubject<boolean>(this._config ? this._config.showTimezone : true);\n    showSeconds$ = new BehaviorSubject<boolean>(this._config ? this._config.showSeconds : false);\n    showMeridian$ = new BehaviorSubject<boolean>(this._config ? this._config.showMeridian : true);\n    showSpinners$ = new BehaviorSubject<boolean>(this._config ? this._config.showSpinners : true);\n    showNowBtn$ = new BehaviorSubject<boolean>(this._config ? this._config.showNowBtn : true);\n    weekdays$ = new BehaviorSubject<string[]>(this._config ? this._config.weekdays : weekdaysShort);\n    nowBtnText$ = new BehaviorSubject<string>(this._config ? this._config.nowBtnText : 'Today');\n    timezones$ = new BehaviorSubject<DateTimePickerTimezone[]>(this._config ? this._config.timezones : timezones);\n    min$ = new BehaviorSubject<Date>(this._config ? this._config.min : null);\n    max$ = new BehaviorSubject<Date>(this._config ? this._config.max : null);\n\n    header$ = new BehaviorSubject<string>(null);\n    headerEvent$ = new Subject<DatePickerHeaderEvent>();\n    modeDirection: ModeDirection = ModeDirection.None;\n    startOfWeek$ = new BehaviorSubject<WeekDay>(WeekDay.Sunday);\n\n    months: string[] = this._config ? this._config.months : months;\n    monthsShort: string[] = this._config ? this._config.monthsShort : monthsShort;\n    meridians: string[] = this._config ? this._config.meridians : meridians;\n\n    hours: number;\n    minutes: number;\n    seconds: number;\n\n    yearRange: YearRange;\n\n    /**\n     * Store whether or not the component has fully initialised or not. We use this to prevent initial\n     * focus on the end date range picker when the popover is first opened\n     */\n    initialised: boolean = false;\n\n    private readonly _subscription: Subscription;\n\n    constructor() {\n\n        // when the active date changes set the currently selected date\n        this._subscription = this.selected$.subscribe(date => {\n            // the month and year displayed in the viewport should reflect the newly selected items\n            if (date instanceof Date) {\n                this.setViewportMonth(date.getMonth());\n                this.setViewportYear(date.getFullYear());\n            }\n\n            // emit the new date to the component host but only if they are different\n            if (!dateComparator(date, this.date$.value)) {\n                if (this.rangeService) {\n                    if (this.rangeOptions.picker === 'start') {\n                        this.rangeService.setStartDate(date);\n                    } else {\n                        this.rangeService.setEndDate(date);\n                    }\n                } else {\n                    this.date$.next(date);\n                }\n            }\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    setViewportMonth(month: number): void {\n        if (month < 0) {\n            this.month$.next(11);\n            this.year$.next(this.year$.value - 1);\n        } else if (month > 11) {\n            this.month$.next(0);\n            this.year$.next(this.year$.value + 1);\n        } else {\n            this.month$.next(month);\n        }\n    }\n\n    setViewportYear(year: number): void {\n        this.year$.next(year);\n    }\n\n    setDate(day: number, month: number, year: number, hours?: number, minutes?: number, seconds?: number): void {\n        const date = new Date(this.selected$.value);\n\n        date.setFullYear(year);\n        date.setMonth(month, day);\n\n        if (hours !== undefined) {\n            date.setHours(hours);\n        }\n\n        if (minutes !== undefined) {\n            date.setMinutes(minutes);\n        }\n\n        if (seconds !== undefined) {\n            date.setSeconds(seconds);\n        }\n\n        if (this.isInRange(date)) {\n            this.selected$.next(date);\n        }\n    }\n\n    setDateToNow(): void {\n        const now = new Date();\n        if (this.isInRange(now)) {\n            this.selected$.next(now);\n        }\n    }\n\n    setViewportMode(mode: DatePickerMode): void {\n        this.mode$.next(mode);\n    }\n\n    goToChildMode(): void {\n        this.modeDirection = ModeDirection.Descend;\n\n        switch (this.mode$.value) {\n\n            case DatePickerMode.Year:\n                return this.setViewportMode(DatePickerMode.Month);\n\n            case DatePickerMode.Month:\n                return this.setViewportMode(DatePickerMode.Day);\n        }\n    }\n\n    goToParentMode(): void {\n        this.modeDirection = ModeDirection.Ascend;\n\n        switch (this.mode$.value) {\n\n            case DatePickerMode.Day:\n                return this.setViewportMode(DatePickerMode.Month);\n\n            case DatePickerMode.Month:\n                return this.setViewportMode(DatePickerMode.Year);\n        }\n    }\n\n    goToNext(): void {\n        this.headerEvent$.next(DatePickerHeaderEvent.Next);\n    }\n\n    goToPrevious(): void {\n        this.headerEvent$.next(DatePickerHeaderEvent.Previous);\n    }\n\n    setHeader(header: string): void {\n        this.header$.next(header);\n    }\n\n    isTimezoneAvailable(timezone: DateTimePickerTimezone): boolean {\n        if (!timezone || !this.timezones$.value) {\n            return false;\n        }\n\n        return this.timezones$.value.findIndex(_timezone => _timezone.offset === timezone.offset && _timezone.name === timezone.name) !== -1;\n    }\n\n    getDefaultTimezone(): DateTimePickerTimezone {\n        const offset = new Date().getTimezoneOffset();\n        const matchingZone = this.timezones$.value.find(_timezone => _timezone.offset === offset);\n\n        return matchingZone || this.timezones$.value.find(_timezone => _timezone.offset === 0) || { name: 'GMT', offset: 0 };\n    }\n\n    isInRange(date: Date): boolean {\n        return (!this.min$.value || date >= this.min$.value) && (!this.max$.value || date <= this.max$.value);\n    }\n}\n\nexport enum DatePickerMode {\n    Day,\n    Month,\n    Year\n}\n\nexport enum ModeDirection {\n    None,\n    Ascend,\n    Descend\n}\n\nexport enum DatePickerHeaderEvent {\n    Previous,\n    Next\n}\n\nexport interface YearRange {\n    start: number;\n    end: number;\n    range: number[];\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { delay, map, takeUntil } from 'rxjs/operators';\nimport { DateRangeOptions } from '../../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../../date-range-picker/date-range.service';\nimport { DatePickerMode, DateTimePickerService } from '../date-time-picker.service';\n\n@Component({\n    selector: 'ux-date-time-picker-header',\n    templateUrl: './header.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent implements AfterViewInit, OnDestroy {\n    readonly datepicker = inject(DateTimePickerService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true });\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    canAscend$: Observable<boolean> = this.datepicker.mode$.pipe(map(mode => mode !== DatePickerMode.Year));\n\n    mode$: Observable<string> = this.datepicker.mode$.pipe(map(mode => {\n        switch (mode) {\n            case DatePickerMode.Day:\n                return 'Day';\n            case DatePickerMode.Month:\n                return 'Month';\n            case DatePickerMode.Year:\n                return 'Year';\n        }\n    }));\n\n    headerAria$: Observable<string> = this.datepicker.mode$.pipe(map(mode => {\n        switch (mode) {\n            case DatePickerMode.Day:\n                return 'Switch to show months in the year';\n            case DatePickerMode.Month:\n                return 'Switch to show years in the decade';\n            case DatePickerMode.Year:\n                return '';\n        }\n    }));\n\n    previousAria$: Observable<string> = this.datepicker.mode$.pipe(map(mode => {\n        switch (mode) {\n            case DatePickerMode.Day:\n                return 'Previous month';\n            case DatePickerMode.Month:\n                return 'Previous year';\n            case DatePickerMode.Year:\n                return 'Previous decade';\n        }\n    }));\n\n    nextAria$: Observable<string> = this.datepicker.mode$.pipe(map(mode => {\n        switch (mode) {\n            case DatePickerMode.Day:\n                return 'Next month';\n            case DatePickerMode.Month:\n                return 'Next year';\n            case DatePickerMode.Year:\n                return 'Next decade';\n        }\n    }));\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    get _rangeStart(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.start : null;\n    }\n\n    get _rangeEnd(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.end : null;\n    }\n\n    /** Unsubscribe from all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        if (this._rangeService) {\n            // delay required to allow all ui to update elsewhere\n            this._rangeService.onRangeChange.pipe(delay(100), takeUntil(this._onDestroy))\n                .subscribe(() => this._changeDetector.detectChanges());\n        }\n    }\n\n    ngAfterViewInit(): void {\n        // update on min/max changes\n        merge(this.datepicker.min$, this.datepicker.max$).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this._changeDetector.detectChanges());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Navigate to the previous day, month or year */\n    previous(): void {\n        this.datepicker.goToPrevious();\n    }\n\n    /** Navigate to the larger scale, eg. Days -> Months, Months -> Years */\n    ascend(): void {\n        this.datepicker.goToParentMode();\n    }\n\n    /** Navigate to the previous day, month or year */\n    next(): void {\n        this.datepicker.goToNext();\n    }\n\n    /** Determine if the previous button is enabled */\n    isPreviousDisabled(): boolean {\n\n        const min = this.datepicker.min$.value;\n\n        if (min && this._isBeforeView(min)) {\n            return true;\n        }\n\n        // if we are not in range mode or there are no disabled items then we can navigate back\n        if (!this._isRangeMode || this._rangeStart && this._rangeEnd ||\n            !this._rangeStart && !this._rangeEnd || this._isRangeStart\n            || this._isRangeEnd && this._rangeEnd) {\n            return false;\n        }\n\n        if (this._isBeforeView(this._rangeStart)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /** Determine if the previous button is enabled */\n    isNextDisabled(): boolean {\n\n        const max = this.datepicker.max$.value;\n\n        if (max && this._isAfterView(max)) {\n            return true;\n        }\n\n        // if we are not in range mode or there are no disabled items then we can navigate back\n        if (!this._isRangeMode || this._rangeStart && this._rangeEnd ||\n            !this._rangeStart && !this._rangeEnd || this._isRangeStart && this._rangeStart\n            || this._isRangeEnd) {\n            return false;\n        }\n\n        if (this._isAfterView(this._rangeEnd)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    private _isBeforeView(date: Date): boolean {\n\n        const month = this.datepicker.month$.value;\n        const year = this.datepicker.year$.value;\n        const mode = this.datepicker.mode$.value;\n        const yearRange = this.datepicker.yearRange;\n\n        if (mode === DatePickerMode.Day) {\n            return year <= date.getFullYear() && month <= date.getMonth();\n        }\n\n        if (mode === DatePickerMode.Month) {\n            return year <= date.getFullYear();\n        }\n\n        if (mode === DatePickerMode.Year) {\n            return yearRange.start <= date.getFullYear();\n        }\n    }\n\n    private _isAfterView(date: Date): boolean {\n\n        const month = this.datepicker.month$.value;\n        const year = this.datepicker.year$.value;\n        const mode = this.datepicker.mode$.value;\n        const yearRange = this.datepicker.yearRange;\n\n        if (mode === DatePickerMode.Day) {\n            return year >= date.getFullYear() && month >= date.getMonth();\n        }\n\n        if (mode === DatePickerMode.Month) {\n            return year >= date.getFullYear();\n        }\n\n        if (mode === DatePickerMode.Year) {\n            return yearRange.end >= date.getFullYear();\n        }\n    }\n}","<header class=\"header\">\n\n  <button type=\"button\"\n          uxFocusIndicator\n          [disabled]=\"isPreviousDisabled()\"\n          class=\"header-navigation\"\n          (click)=\"previous(); $event.stopPropagation()\"\n          [attr.aria-label]=\"previousAria$ | async\"\n          tabindex=\"0\">\n\n    <ux-icon name=\"previous\" class=\"header-navigation-previous-icon\"></ux-icon>\n  </button>\n\n  <button type=\"button\"\n          uxFocusIndicator\n          class=\"header-title\"\n          [attr.aria-label]=\"headerAria$ | async\"\n          [class.active]=\"canAscend$ | async\"\n          (click)=\"ascend(); $event.stopPropagation()\"\n          [tabindex]=\"(canAscend$ | async) ? 0 : -1\">\n       {{ datepicker.header$ | async }}\n  </button>\n\n  <button type=\"button\"\n          uxFocusIndicator\n          [disabled]=\"isNextDisabled()\"\n          class=\"header-navigation\"\n          (click)=\"next(); $event.stopPropagation()\"\n          [attr.aria-label]=\"nextAria$ | async\"\n          tabindex=\"0\">\n\n    <ux-icon name=\"next\" class=\"header-navigation-next-icon\"></ux-icon>\n  </button>\n</header>","import { WeekDay } from '@angular/common';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Subscription } from 'rxjs';\nimport { DateTimePickerService, ModeDirection } from '../date-time-picker.service';\nimport { compareDays, dateRange, gridify } from '../date-time-picker.utils';\n\n@Injectable()\nexport class DayViewService implements OnDestroy {\n    private readonly _datepicker = inject(DateTimePickerService);\n\n    grid$ = new BehaviorSubject<DayViewItem[][]>([[]]);\n    focused$ = new BehaviorSubject<FocusedDayItem>(null);\n\n    private readonly _subscription: Subscription;\n\n    constructor() {\n        this._subscription = combineLatest(this._datepicker.month$, this._datepicker.year$, this._datepicker.startOfWeek$)\n            .subscribe(([month, year]) => this.createDayGrid(month, year));\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    setFocus(day: number, month: number, year: number): void {\n\n        this.focused$.next({ day, month, year });\n\n        // update the date picker to show the required month and year\n        this._datepicker.setViewportMonth(month);\n        this._datepicker.setViewportYear(year);\n    }\n\n    private createDayGrid(month: number, year: number): void {\n\n        // update the header\n        this._datepicker.setHeader(this._datepicker.months[month] + ' ' + year);\n\n        // find the lower and upper boundaries\n        const start = new Date(year, month, 1);\n        const end = new Date(year, month + 1, 0);\n\n        // ensure the startOfWeek value is between 0-6 to prevent any infinite loop\n        const startOfWeek = Math.min(WeekDay.Saturday, Math.max(WeekDay.Sunday, this._datepicker.startOfWeek$.value));\n\n        // we always want to show from the specified start of week - this may include showing some dates from the previous month\n        while (start.getDay() !== startOfWeek) {\n            start.setDate(start.getDate() - 1);\n        }\n\n        // we also want to make sure that the range ends on a saturday\n        end.setDate(end.getDate() + (6 - end.getDay()));\n\n        // create an array of all the days to display\n        const dates: DayViewItem[] = dateRange(start, end).map(date => ({\n            day: date.getDate(),\n            month: date.getMonth(),\n            year: date.getFullYear(),\n            date,\n            isToday: this.isToday(date),\n            isActive: this.isActive(date),\n            isCurrentMonth: date.getMonth() === month\n        }));\n\n        // turn the dates into a grid\n        const items: DayViewItem[][] = gridify(dates, 7);\n\n        this.grid$.next(items);\n\n        // if no item has yet been focused then focus the first day of the month\n        if ((this._datepicker.modeDirection === ModeDirection.None || this._datepicker.modeDirection === ModeDirection.Descend) && this.focused$.value === null) {\n\n            // check if the selected item is visible\n            const selectedDay = dates.find(day => day.isCurrentMonth && day.isActive);\n\n            if (selectedDay) {\n                this.setFocus(selectedDay.day, selectedDay.month, selectedDay.year);\n            } else {\n\n                // find the first day of the month\n                const first = dates.find(date => date.day === 1);\n\n                // focus the date\n                this.setFocus(first.day, first.month, first.year);\n            }\n\n        }\n    }\n\n    /**\n     * Determine whether or not a specific date is today\n     * @param date The date to check\n     */\n    private isToday(date: Date): boolean {\n        return compareDays(new Date(), date);\n    }\n\n    /**\n     * Determines whether or not a specific date is the selected one\n     * @param date the date to check\n     */\n    private isActive(date: Date): boolean {\n        return this._datepicker.selected$.value ? compareDays(this._datepicker.selected$.value, date) : false;\n    }\n}\n\nexport interface DayViewItem {\n    day: number;\n    month: number;\n    year: number;\n    date: Date;\n    isToday: boolean;\n    isActive: boolean;\n    isCurrentMonth: boolean;\n}\n\nexport interface FocusedDayItem {\n    day: number;\n    month: number;\n    year: number;\n}","import { Directive, ElementRef, inject, Input, OnDestroy } from '@angular/core';\n\n@Directive({\n    selector: '[focusIf]'\n})\nexport class FocusIfDirective implements OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    /** The delay that should ellapse before focussing the element */\n    @Input() focusIfDelay: number = 0;\n\n    /** Determine if we should scroll the element into view when focused */\n    @Input() focusIfScroll: boolean = true;\n\n    /** Focus when the boolean value is true */\n    @Input()\n    set focusIf(focus: boolean) {\n\n        // if a timeout is pending then cancel it\n        if (!focus && this._timeout !== null) {\n            clearTimeout(this._timeout);\n            this._timeout = null;\n        }\n\n        if (focus && this._timeout === null) {\n            this._timeout = window.setTimeout(() => {\n                this._elementRef.nativeElement.focus({ preventScroll: !this.focusIfScroll });\n                this._timeout = null;\n            }, this.focusIfDelay);\n        }\n    }\n\n    private _timeout: number = null;\n\n    ngOnDestroy(): void {\n        if (this._timeout !== null) {\n            clearTimeout(this._timeout);\n        }\n    }\n}","import { WeekDay } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'weekDaySort'\n})\nexport class WeekDaySortPipe implements PipeTransform {\n\n    transform(value: string[], startOfWeek: WeekDay): string[] {\n\n        // ensure start of week is in range\n        startOfWeek = Math.max(WeekDay.Sunday, Math.min(WeekDay.Saturday, startOfWeek));\n\n        // create a new array to avoid altering the original\n        const weekdays = [...value];\n\n        for (let idx = 0; idx < startOfWeek; idx++) {\n            weekdays.push(weekdays.shift());\n        }\n\n        return weekdays;\n    }\n}","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { delay, filter, takeUntil } from 'rxjs/operators';\nimport { FocusIndicatorOriginService } from '../../../directives/accessibility/index';\nimport { DateRangeOptions } from '../../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../../date-range-picker/date-range.service';\nimport { DatePickerHeaderEvent, DateTimePickerService } from '../date-time-picker.service';\nimport { compareDays, isDateAfter, isDateBefore } from '../date-time-picker.utils';\nimport { DayViewItem, DayViewService } from './day-view.service';\n\n@Component({\n    selector: 'ux-date-time-picker-day-view',\n    templateUrl: './day-view.component.html',\n    providers: [DayViewService],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DayViewComponent implements AfterViewInit, OnDestroy {\n    readonly datePicker = inject(DateTimePickerService);\n\n    readonly dayService = inject(DayViewService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _focusOrigin = inject(FocusIndicatorOriginService);\n\n    private readonly _liveAnnouncer = inject(LiveAnnouncer);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true });\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    get _rangeStart(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.start : null;\n    }\n\n    get _rangeEnd(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.end : null;\n    }\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        this.datePicker.headerEvent$.pipe(takeUntil(this._onDestroy))\n            .subscribe(event => event === DatePickerHeaderEvent.Next ? this.next() : this.previous());\n\n        // if we are a range picker then we also want to subscribe to range changes\n        if (this._rangeService) {\n            merge(this._rangeService.onRangeChange, this._rangeService.onHoverChange).pipe(takeUntil(this._onDestroy))\n                .subscribe(() => this._changeDetector.detectChanges());\n\n            // subscribe to changes to the start date\n            this._rangeService.onStartChange\n                .pipe(takeUntil(this._onDestroy), filter(date => !!date && this._isRangeEnd && this.datePicker.initialised), delay(0))\n                .subscribe(date => this.onRangeChange(date));\n\n            // subscribe to changes to the end date\n            this._rangeService.onEndChange\n                .pipe(takeUntil(this._onDestroy), filter(date => !!date && this._isRangeStart && this.datePicker.initialised), delay(0))\n                .subscribe(date => this.onRangeChange(date));\n\n            // when the range is cleared reset the selected date so we can click on the same date again if we want to\n            this._rangeService.onClear.pipe(takeUntil(this._onDestroy)).subscribe(() => this.datePicker.selected$.next(null));\n        }\n    }\n\n    ngAfterViewInit(): void {\n\n        // update when there are changes to the min/max values\n        merge(this.datePicker.min$, this.datePicker.max$).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this._changeDetector.detectChanges());\n\n        // if we open and the range start is already selected, ensure that we move the end picker to a month with options\n        if (!this.datePicker.initialised && this._rangeStart && !this._rangeEnd && this._isRangeEnd) {\n            this.onRangeChange(this._rangeStart);\n        }\n\n        // if we open and the range end is already selected, ensure that we move the start picker to a month with options\n        if (!this.datePicker.initialised && this._rangeEnd && !this._rangeStart && this._isRangeStart) {\n            this.onRangeChange(this._rangeEnd);\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n    /**\n     * Navigate to the previous page of dates\n     */\n    previous(): void {\n        this.datePicker.setViewportMonth(this.datePicker.month$.value - 1);\n    }\n\n    /**\n     * Navigate to the next page of dates\n     */\n    next(): void {\n        this.datePicker.setViewportMonth(this.datePicker.month$.value + 1);\n    }\n\n    /**\n     * Select a particular date\n     * @param date the date to select\n     */\n    select(date: Date): void {\n\n        // if we are the start range picker and we click the already selected day deselect it\n        if (this._isRangeMode && this._isRangeStart && this._rangeStart && compareDays(this._rangeStart, date)) {\n            this._rangeService.setStartDate(null);\n            this.datePicker.selected$.next(null);\n            return;\n        }\n\n        // if we are the end range picker and we click the already selected day deselect it\n        if (this._isRangeMode && this._isRangeEnd && this._rangeEnd && compareDays(this._rangeEnd, date)) {\n            this._rangeService.setEndDate(null);\n            this.datePicker.selected$.next(null);\n            return;\n        }\n\n        // if we are in range mode ensure we include the time from the time picker\n        if (this._isRangeMode) {\n            // update the current date object\n            if (this._isRangeStart && !this._rangeService.showTime) {\n                this.datePicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), 0, 0, 0);\n            } else if (this._isRangeEnd && !this._rangeService.showTime) {\n                this.datePicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), 23, 59, 59);\n            } else {\n                this.datePicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), this.datePicker.hours, this.datePicker.minutes, this.datePicker.seconds);\n            }\n        } else {\n            // update the current date object\n            this.datePicker.setDate(date.getDate(), date.getMonth(), date.getFullYear());\n        }\n\n        // focus the newly selected date\n        this.dayService.setFocus(date.getDate(), date.getMonth(), date.getFullYear());\n\n        // if we select a start date that is after the end date then clear the end date\n        if (this._isRangeMode && this._isRangeStart && this._rangeStart && this._rangeEnd) {\n            if (this._rangeStart.getTime() > this._rangeEnd.getTime()) {\n                this._rangeService.setEndDate(null);\n            }\n        }\n\n        // if we select a end date that is before the start date then clear the start date\n        if (this._isRangeMode && this._isRangeEnd && this._rangeStart && this._rangeEnd) {\n            if (this._rangeEnd.getTime() < this._rangeStart.getTime()) {\n                this._rangeService.setStartDate(null);\n            }\n        }\n    }\n\n    trackWeekByFn(index: number): number {\n        return index;\n    }\n\n    trackDayByFn(_index: number, item: DayViewItem): string {\n        return `${item.day} ${item.month} ${item.year}`;\n    }\n\n    focusDate(item: DayViewItem, dayOffset: number): void {\n\n        // determine the date of the day\n        const target = new Date(item.date.setDate(item.date.getDate() + dayOffset));\n\n        // we should force the origin to be keyboard\n        this._focusOrigin.setOrigin('keyboard');\n\n        // identify which date should be focused\n        this.dayService.setFocus(target.getDate(), target.getMonth(), target.getFullYear());\n    }\n\n    getTabbable(item: DayViewItem): boolean {\n        const focused = this.dayService.focused$.value;\n        const grid = this.dayService.grid$.value;\n        const month = this.datePicker.month$.value;\n\n        // if there is a focused month check if this is it\n        if (focused) {\n\n            // check if the focused day is visible\n            const isFocusedDayVisible = !!grid.find(row => !!row.find(_item => _item.day === focused.day && _item.month === focused.month && _item.year === focused.year && _item.month === month));\n\n            if (isFocusedDayVisible) {\n                return focused.day === item.day && focused.month === item.month && focused.year === item.year;\n            }\n        }\n\n        // if there is no focusable day then check if there is a selected day\n        const isSelectedDayVisible = !!grid.find(row => !!row.find(day => day.isActive));\n\n        if (isSelectedDayVisible) {\n            return item.isActive;\n        }\n\n        // find the first non disabled day that is part of the current month\n        for (const row of grid) {\n            for (const column of row) {\n                if (column === item && column.month === month && !this.getDisabled(column.date)) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    getDisabled(date: Date): boolean {\n\n        // if we are not in range mode then it will always be enabled\n        if (this._isRangeMode) {\n\n            // if we are range start and dates are after the range end then they should also be disabled\n            if (this._isRangeStart && !this._rangeStart && this._rangeEnd && isDateAfter(date, this._rangeEnd)) {\n                return true;\n            }\n\n            // if we are range end and dates are before the range start then they should also be disabled\n            if (this._isRangeEnd && !this._rangeEnd && this._rangeStart && isDateBefore(date, this._rangeStart)) {\n                return true;\n            }\n        }\n\n        if (this.datePicker.min$.value && isDateBefore(date, this.datePicker.min$.value)) {\n            return true;\n        }\n\n        if (this.datePicker.max$.value && isDateAfter(date, this.datePicker.max$.value)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    isRangeStartDate(date: Date): boolean {\n        return this._isRangeMode && this._rangeStart && compareDays(date, this._rangeStart);\n    }\n\n    isRangeEndDate(date: Date): boolean {\n        return this._isRangeMode && this._rangeEnd && compareDays(date, this._rangeEnd);\n    }\n\n    isWithinRange(date: Date): boolean {\n        return this._isRangeMode && this._rangeStart && isDateAfter(date, this._rangeStart) && isDateBefore(date, this._rangeEnd);\n    }\n\n    isDateHovered(date: Date): boolean {\n\n        // if we are not in range mode or both start and end dates are selected then dont show range hover\n        if (!this._isRangeMode || !this._rangeService.hover || this._rangeStart && this._rangeEnd) {\n            return;\n        }\n\n        return this._rangeStart && isDateAfter(date, this._rangeStart) && isDateBefore(date, this._rangeService.hover, true) ||\n            this._rangeEnd && isDateBefore(date, this._rangeEnd) && isDateAfter(date, this._rangeService.hover, true);\n    }\n\n    isItemActive(date: Date, isActive: boolean): boolean {\n        if (!this._isRangeMode) {\n            return isActive;\n        }\n\n        return this._isRangeStart && this._rangeStart && compareDays(this._rangeStart, date) ||\n            this._isRangeEnd && this._rangeEnd && compareDays(this._rangeEnd, date);\n    }\n\n    onRangeMouseEnter(date: Date): void {\n        if (this._isRangeMode) {\n            this._rangeService.setDateMouseEnter(date);\n        }\n    }\n\n    onRangeMouseLeave(date: Date): void {\n        if (this._isRangeMode) {\n            this._rangeService.setDateMouseLeave(date);\n        }\n    }\n\n    /** Announce the date when we focus on a date */\n    announceRangeMode(): void {\n        if (this._isRangeMode) {\n            this._liveAnnouncer.announce(this._isRangeStart ? this._rangeService.startPickerAriaLabel : this._rangeService.endPickerAriaLabel);\n        }\n    }\n\n    /** Determine if we should focus a date */\n    shouldFocus(item: DayViewItem): boolean {\n\n        // if we are opening the popover initially we never want to focus a date in the range end picker\n        if (!this.datePicker.initialised && this._isRangeEnd || this._rangeService && this._rangeService.isChangingTime) {\n            return false;\n        }\n\n        // extract the current focused dates\n        const { day, month, year } = this.dayService.focused$.value;\n\n        // check if the current date is the focused date and it is in the viewport date\n        return day === item.day && month === item.month && year === item.year && item.isCurrentMonth;\n    }\n\n    /** Update the viewport when the range changes to ensure focus is present on a valid item */\n    private onRangeChange(date: Date): void {\n\n        if (!(this._isRangeStart && !this._rangeStart || this._isRangeEnd && !this._rangeEnd)) {\n            return;\n        }\n\n        // get the month showing on the other date range picker\n        const currentDate = new Date(this.datePicker.year$.value, this.datePicker.month$.value);\n\n        // if we are the start date and we are after the end date - ONLY then should be change the visible month the match the end date\n        const startShouldUpdate = this._isRangeStart && !this._rangeStart && (currentDate.getFullYear() > date.getFullYear() || currentDate.getFullYear() === date.getFullYear() && currentDate.getMonth() > date.getMonth());\n\n        // if we are the end date and we are before the start date - ONLY then should be change the visible month the match the start date\n        const endShouldUpdate = this._isRangeEnd && !this._rangeEnd && (currentDate.getFullYear() < date.getFullYear() || currentDate.getFullYear() === date.getFullYear() && currentDate.getMonth() < date.getMonth());\n\n        if (startShouldUpdate || endShouldUpdate) {\n            this.datePicker.setViewportMonth(date.getMonth());\n            this.datePicker.setViewportYear(date.getFullYear());\n            this.dayService.setFocus(date.getDate(), date.getMonth(), date.getFullYear());\n            this._changeDetector.detectChanges();\n        }\n    }\n\n}\n","<table class=\"calendar\">\n  <thead>\n    <tr>\n      @for (\n        day of datePicker.weekdays$ | async | weekDaySort: (datePicker.startOfWeek$ | async);\n        let index = $index;\n        track index\n      ) {\n        <th class=\"weekday\" [attr.aria-label]=\"day\">{{ day }}</th>\n      }\n    </tr>\n  </thead>\n\n  <tbody role=\"grid\">\n    @for (row of dayService.grid$ | async; track trackWeekByFn($index)) {\n      <tr role=\"row\">\n        @for (item of row; track trackDayByFn($index, item)) {\n          <td class=\"date-cell\">\n            <button\n              type=\"button\"\n              uxFocusIndicator\n              uxFocusIndicatorOrigin\n              class=\"date-button\"\n              role=\"gridcell\"\n              [class.range-start]=\"isRangeStartDate(item.date)\"\n              [class.range-between]=\"isWithinRange(item.date) || isDateHovered(item.date)\"\n              [class.range-end]=\"isRangeEndDate(item.date)\"\n              [focusIf]=\"shouldFocus(item)\"\n              [attr.aria-label]=\"item.date | date\"\n              [attr.aria-selected]=\"isItemActive(item.date, item.isActive)\"\n              [attr.aria-hidden]=\"!item.isCurrentMonth\"\n              [class.current]=\"item.isToday\"\n              [class.active]=\"isItemActive(item.date, item.isActive) && !getDisabled(item.date)\"\n              [class.preview]=\"!item.isCurrentMonth\"\n              [tabindex]=\"getTabbable(item) ? 0 : -1\"\n              [disabled]=\"getDisabled(item.date)\"\n              (click)=\"select(item.date); $event.stopPropagation()\"\n              (mouseenter)=\"onRangeMouseEnter(item.date)\"\n              (mouseleave)=\"onRangeMouseLeave(item.date)\"\n              (keydown.ArrowLeft)=\"focusDate(item, -1); $event.preventDefault()\"\n              (keydown.ArrowRight)=\"focusDate(item, 1); $event.preventDefault()\"\n              (keydown.ArrowUp)=\"focusDate(item, -7); $event.preventDefault()\"\n              (keydown.ArrowDown)=\"focusDate(item, 7); $event.preventDefault()\"\n              (focus)=\"announceRangeMode()\"\n            >\n              {{ item.date.getDate() }}\n            </button>\n          </td>\n        }\n      </tr>\n    }\n  </tbody>\n</table>\n","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { DateTimePickerService, ModeDirection } from '../date-time-picker.service';\nimport { gridify, range } from '../date-time-picker.utils';\n\n@Injectable()\nexport class MonthViewService implements OnDestroy {\n    private readonly _datepicker = inject(DateTimePickerService);\n\n    grid$ = new BehaviorSubject<MonthViewItem[][]>([[]]);\n    focused$ = new BehaviorSubject<FocusedMonthItem>(null);\n\n    private readonly _subscription: Subscription;\n\n    constructor() {\n        this._subscription = this._datepicker.year$.subscribe(year => this.createMonthGrid(year));\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    setFocus(month: number, year: number): void {\n        this.focused$.next({ month, year });\n\n        // update the viewport to ensure focused month is visible\n        this._datepicker.setViewportYear(year);\n    }\n\n    private createMonthGrid(year: number): void {\n\n        // update the header\n        this._datepicker.setHeader(year.toString());\n\n        // get the current year and month\n        const currentMonth = new Date().getMonth();\n        const currentYear = new Date().getFullYear();\n\n        // get the currently selected month\n        const activeMonth = this._datepicker.selected$.value ? this._datepicker.selected$.value.getMonth() : null;\n        const activeYear = this._datepicker.selected$.value ? this._datepicker.selected$.value.getFullYear() : null;\n\n        // create a 4x3 grid of month numbers\n        const months: MonthViewItem[] = range(0, 11).map(month => {\n            return {\n                name: this._datepicker.monthsShort[month],\n                month,\n                year,\n                isCurrentMonth: year === currentYear && month === currentMonth,\n                isActiveMonth: year === activeYear && month === activeMonth\n            };\n        });\n\n        // map these to the appropriate format\n        const items: MonthViewItem[][] = gridify(months, 4);\n\n        // update the grid\n        this.grid$.next(items);\n\n        // if there is no focused month select the first one\n        if (this._datepicker.modeDirection === ModeDirection.Descend && this.focused$.value === null) {\n\n            // check if the selected month is in view\n            const selectedMonth = months.find(month => month.isActiveMonth);\n\n            this.setFocus(selectedMonth ? selectedMonth.month : 0, year);\n        }\n    }\n}\n\nexport interface MonthViewItem {\n    name: string;\n    month: number;\n    year: number;\n    isCurrentMonth: boolean;\n    isActiveMonth: boolean;\n}\n\nexport interface FocusedMonthItem {\n    month: number;\n    year: number;\n}","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DateRangeOptions } from '../../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../../date-range-picker/date-range.service';\nimport { DatePickerHeaderEvent, DateTimePickerService } from '../date-time-picker.service';\nimport { isDateAfter, isDateBefore } from '../date-time-picker.utils';\nimport { FocusedMonthItem, MonthViewItem, MonthViewService } from './month-view.service';\n\n@Component({\n    selector: 'ux-date-time-picker-month-view',\n    templateUrl: './month-view.component.html',\n    providers: [MonthViewService],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MonthViewComponent implements AfterViewInit, OnDestroy {\n    readonly monthService = inject(MonthViewService);\n\n    private readonly _datePicker = inject(DateTimePickerService);\n\n    private readonly _liveAnnouncer = inject(LiveAnnouncer);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true});\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true});\n\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    get _rangeStart(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.start : null;\n    }\n\n    get _rangeEnd(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.end : null;\n    }\n\n    get _minMonth(): Date | null {\n        return this._datePicker.min$.value ? new Date(this._datePicker.min$.value.getFullYear(), this._datePicker.min$.value.getMonth()) : null;\n    }\n\n    get _maxMonth(): Date | null {\n        return this._datePicker.max$.value ? new Date(this._datePicker.max$.value.getFullYear(), this._datePicker.max$.value.getMonth()) : null;\n    }\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        this._datePicker.headerEvent$.pipe(takeUntil(this._onDestroy))\n            .subscribe(event => event === DatePickerHeaderEvent.Next ? this.next() : this.previous());\n\n        if (this._rangeService) {\n            this._rangeService.onRangeChange.pipe(takeUntil(this._onDestroy)).subscribe(() => this._changeDetector.detectChanges());\n        }\n\n        // if the currently focused item is disabled then choose a month that isn't disabled\n        if (this.monthService.focused$.value) {\n            if (this.getDisabled(this.monthService.focused$.value)) {\n                for (const row of this.monthService.grid$.value) {\n                    for (const column of row) {\n                        if (!this.getDisabled(column)) {\n                            this.monthService.setFocus(column.month, column.year);\n                            return;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    ngAfterViewInit(): void {\n        // update on min/max changes\n        merge(this._datePicker.min$, this._datePicker.max$).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this._changeDetector.detectChanges());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Get the disabled state of a month */\n    getDisabled(item: MonthViewItem | FocusedMonthItem): boolean {\n\n        const date = new Date(item.year, item.month);\n\n        // if we are not in range mode then it will always be enabled\n        if (this._isRangeMode) {\n\n            // if we are range start and dates are after the range end then they should also be disabled\n            if (this._isRangeStart && !this._rangeStart && this._rangeEnd && isDateAfter(date, new Date(this._rangeEnd.getFullYear(), this._rangeEnd.getMonth()))) {\n                return true;\n            }\n\n            // if we are range end and dates are before the range start then they should also be disabled\n            if (this._isRangeEnd && !this._rangeEnd && this._rangeStart && isDateBefore(date, new Date(this._rangeStart.getFullYear(), this._rangeStart.getMonth()))) {\n                return true;\n            }\n        }\n\n        if (this._minMonth && isDateBefore(date, this._minMonth)) {\n            return true;\n        }\n\n        if (this._maxMonth && isDateAfter(date, this._maxMonth)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Go to the previous year\n     */\n    previous(): void {\n        this._datePicker.setViewportYear(this._datePicker.year$.value - 1);\n    }\n\n    /**\n     * Go to the next year\n     */\n    next(): void {\n        this._datePicker.setViewportYear(this._datePicker.year$.value + 1);\n    }\n\n    /**\n     * Select a month in the calendar\n     * @param month the index of the month to select\n     */\n    select(month: number): void {\n        this._datePicker.setViewportMonth(month);\n\n        // show the day picker\n        this._datePicker.goToChildMode();\n    }\n\n    focusMonth(item: MonthViewItem, monthOffset: number): void {\n        let targetMonth = item.month + monthOffset;\n        let targetYear = item.year;\n\n        if (targetMonth < 0) {\n            targetMonth += 12;\n            targetYear -= 1;\n        }\n\n        if (targetMonth >= 12) {\n            targetMonth -= 12;\n            targetYear += 1;\n        }\n\n        this.monthService.setFocus(targetMonth, targetYear);\n    }\n\n    trackRowByFn(index: number): number {\n        return index;\n    }\n\n    trackMonthByFn(_index: number, item: MonthViewItem): string {\n        return `${item.month} ${item.year}`;\n    }\n\n    getTabbable(item: MonthViewItem): boolean {\n        const focused = this.monthService.focused$.value;\n        const grid = this.monthService.grid$.value;\n\n        // if there is a focused month check if this is it\n        if (focused) {\n\n            // check if the focused month is visible\n            const isFocusedMonthVisible = !!grid.find(row => !!row.find(_item => _item.month === focused.month && _item.year === focused.year));\n\n            if (isFocusedMonthVisible) {\n                return focused.month === item.month && focused.year === item.year;\n            }\n        }\n\n        // if there is no focusable month then check if there is a selected month\n        const isSelectedMonthVisible = !!grid.find(row => !!row.find(month => month.isActiveMonth));\n\n        if (isSelectedMonthVisible) {\n            return item.isActiveMonth;\n        }\n\n        // otherwise find the first non-disabled month\n        for (const row of grid) {\n            for (const column of row) {\n                if (!this.getDisabled(column)) {\n                    return item === column;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    /** Announce the date when we focus on a date */\n    announceRangeMode(): void {\n        if (this._isRangeMode) {\n            this._liveAnnouncer.announce(this._isRangeStart ? this._rangeService.startPickerAriaLabel : this._rangeService.endPickerAriaLabel);\n        }\n    }\n\n    shouldFocus(item: MonthViewItem): boolean {\n        const focused = this.monthService.focused$.value;\n\n        if (focused) {\n            return focused.month === item.month && focused.year === item.year;\n        }\n    }\n}\n","<div class=\"calendar\" role=\"grid\">\n  @for (row of monthService.grid$ | async; track trackRowByFn($index)) {\n    <div class=\"calendar-row\" role=\"row\">\n      @for (item of row; track trackMonthByFn($index, item)) {\n        <button type=\"button\"\n          uxFocusIndicator\n          uxFocusIndicatorOrigin\n          [programmaticFocusIndicator]=\"true\"\n          role=\"gridcell\"\n          class=\"calendar-item\"\n          [focusIf]=\"shouldFocus(item)\"\n          [disabled]=\"getDisabled(item)\"\n          [tabindex]=\"getTabbable(item) ? 0 : -1\"\n          [attr.aria-label]=\"item.name + ' ' + item.year\"\n          [attr.aria-selected]=\"item.isActiveMonth\"\n          [class.active]=\"item.isActiveMonth && !getDisabled(item)\"\n          [class.current]=\"item.isCurrentMonth\"\n          (click)=\"select(item.month); $event.stopPropagation()\"\n          (focus)=\"announceRangeMode()\"\n          (keydown.ArrowLeft)=\"focusMonth(item, -1); $event.preventDefault()\"\n          (keydown.ArrowRight)=\"focusMonth(item, 1); $event.preventDefault()\"\n          (keydown.ArrowUp)=\"focusMonth(item, -4); $event.preventDefault()\"\n          (keydown.ArrowDown)=\"focusMonth(item, 4); $event.preventDefault()\">\n          {{ item.name }}\n        </button>\n      }\n    </div>\n  }\n</div>\n","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { DatePickerHeaderEvent, DateTimePickerService, YearRange } from '../date-time-picker.service';\nimport { gridify, range } from '../date-time-picker.utils';\n\n@Injectable()\nexport class YearViewService implements OnDestroy {\n    private readonly _datepicker = inject(DateTimePickerService);\n\n    grid$ = new BehaviorSubject<YearViewItem[][]>([[]]);\n    focused$ = new BehaviorSubject<number>(null);\n\n    private _year: number = new Date().getFullYear();\n\n    private readonly _subscription = new Subscription();\n\n    constructor() {\n        const year = this._datepicker.year$.subscribe(_year => this.createYearGrid(_year));\n\n        const event = this._datepicker.headerEvent$\n            .subscribe(_event => _event === DatePickerHeaderEvent.Next ? this.goToNextDecade() : this.goToPreviousDecade());\n\n        this._subscription.add(year);\n        this._subscription.add(event);\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    setFocus(year: number): void {\n        this.focused$.next(year);\n        this.createYearGrid(year);\n    }\n\n    goToPreviousDecade(): void {\n        this.createYearGrid(this._year - 10);\n    }\n\n    goToNextDecade(): void {\n        this.createYearGrid(this._year + 10);\n    }\n\n    private createYearGrid(year: number = this._year): void {\n\n        this._year = year;\n\n        // get the years to display\n        const decade = this.getDecade(year);\n\n        const currentYear = new Date().getFullYear();\n\n        // produce items in the correct format\n        const items: YearViewItem[] = decade.range.map(_year => {\n            return {\n                year: _year,\n                isCurrentYear: _year === currentYear,\n                isActiveYear: _year === this._datepicker.year$.value\n            };\n        });\n\n        // update the header text\n        this._datepicker.setHeader(decade.start + ' - ' + decade.end);\n\n        // create the grid\n        this.grid$.next(gridify(items, 4));\n    }\n\n    /**\n     * Get the years in the current decade to display\n     */\n    private getDecade(year: number): YearRange {\n\n        // figure the start and end points\n        const start = (year - (year % 10));\n        const end = start + 9;\n\n        this._datepicker.yearRange = { start, end, range: range(start, end) };\n\n        // create an array containing all the numbers between the start and end points\n        return this._datepicker.yearRange;\n    }\n}\n\nexport interface YearViewItem {\n    year: number;\n    isCurrentYear: boolean;\n    isActiveYear: boolean;\n}","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnDestroy } from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DateRangeOptions } from '../../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../../date-range-picker/date-range.service';\nimport { DateTimePickerService } from '../date-time-picker.service';\nimport { isDateAfter, isDateBefore } from '../date-time-picker.utils';\nimport { YearViewItem, YearViewService } from './year-view.service';\n\n@Component({\n    selector: 'ux-date-time-picker-year-view',\n    templateUrl: './year-view.component.html',\n    providers: [YearViewService],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YearViewComponent implements AfterViewInit, OnDestroy {\n    readonly yearService = inject(YearViewService);\n\n    private readonly _datePicker = inject(DateTimePickerService);\n\n    private readonly _liveAnnouncer = inject(LiveAnnouncer);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true });\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    get _rangeStart(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.start : null;\n    }\n\n    get _rangeEnd(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.end : null;\n    }\n\n    get _minYear(): Date | null {\n        return this._datePicker.min$.value ? new Date(this._datePicker.min$.value.getFullYear(), 0) : null;\n    }\n\n    get _maxYear(): Date | null {\n        return this._datePicker.max$.value ? new Date(this._datePicker.max$.value.getFullYear(), 0) : null;\n    }\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        if (this._rangeService) {\n            this._rangeService.onRangeChange.pipe(takeUntil(this._onDestroy)).subscribe(() => this._changeDetector.detectChanges());\n        }\n    }\n\n    ngAfterViewInit(): void {\n        // update on min/max changes\n        merge(this._datePicker.min$, this._datePicker.max$).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this._changeDetector.detectChanges());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    select(year: number): void {\n        this._datePicker.setViewportYear(year);\n\n        // show the month picker\n        this._datePicker.goToChildMode();\n    }\n\n    /** Get the disabled state of a month */\n    getDisabled(item: YearViewItem): boolean {\n\n        const date = new Date(item.year, 0);\n\n        // if we are not in range mode then it will always be enabled\n        if (this._isRangeMode) {\n\n            // if we are range start and dates are after the range end then they should also be disabled\n            if (this._isRangeStart && !this._rangeStart && this._rangeEnd && isDateAfter(date, new Date(this._rangeEnd.getFullYear(), 0))) {\n                return true;\n            }\n\n            // if we are range end and dates are before the range start then they should also be disabled\n            if (this._isRangeEnd && !this._rangeEnd && this._rangeStart && isDateBefore(date, new Date(this._rangeStart.getFullYear(), 0))) {\n                return true;\n            }\n        }\n\n        if (this._minYear && isDateBefore(date, this._minYear)) {\n            return true;\n        }\n\n        if (this._maxYear && isDateAfter(date, this._maxYear)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    focusYear(item: YearViewItem, yearOffset: number): void {\n        this.yearService.setFocus(item.year + yearOffset);\n    }\n\n    trackRowByFn(index: number): number {\n        return index;\n    }\n\n    trackYearByFn(_index: number, item: YearViewItem): number {\n        return item.year;\n    }\n\n    getTabbable(item: YearViewItem): boolean {\n        const focused = this.yearService.focused$.value;\n        const grid = this.yearService.grid$.value;\n\n        // if there is a focused year check if this is it\n        if (focused) {\n\n            // check if the focused year is visible\n            const isFocusedYearVisible = !!grid.find(row => !!row.find(_item => _item.year === focused));\n\n            if (isFocusedYearVisible) {\n                return focused === item.year;\n            }\n        }\n\n        // if there is no focusable year then check if there is a selected year\n        const isSelectedYearVisible = !!grid.find(row => !!row.find(year => year.isActiveYear));\n\n        if (isSelectedYearVisible) {\n            return item.isActiveYear;\n        }\n\n        // otherwise find the first non-disabled month\n        for (const row of this.yearService.grid$.value) {\n            for (const column of row) {\n                if (!this.getDisabled(column)) {\n                    return item === column;\n                }\n            }\n        }\n\n        // otherwise make the first month tabbable\n        return false;\n    }\n\n    /** Announce the date when we focus on a date */\n    announceRangeMode(): void {\n        if (this._isRangeMode) {\n            this._liveAnnouncer.announce(this._isRangeStart ? this._rangeService.startPickerAriaLabel : this._rangeService.endPickerAriaLabel);\n        }\n    }\n\n}\n","<div class=\"calendar\" role=\"grid\">\n  @for (row of yearService.grid$ | async; track trackRowByFn($index)) {\n    <div class=\"calendar-row\" role=\"row\">\n      @for (item of row; track trackYearByFn($index, item)) {\n        <button\n          uxFocusIndicator\n          uxFocusIndicatorOrigin\n          [programmaticFocusIndicator]=\"true\"\n          type=\"button\"\n          role=\"gridcell\"\n          class=\"calendar-item\"\n          [focusIf]=\"(yearService.focused$ | async) === item.year\"\n          [attr.aria-label]=\"item.year\"\n          [attr.aria-selected]=\"item.isActiveYear\"\n          [class.current]=\"item.isCurrentYear\"\n          [class.active]=\"item.isActiveYear && !getDisabled(item)\"\n          [disabled]=\"getDisabled(item)\"\n          (click)=\"select(item.year); $event.stopPropagation()\"\n          (focus)=\"announceRangeMode()\"\n          (keydown.ArrowLeft)=\"focusYear(item, -1); $event.preventDefault()\"\n          (keydown.ArrowRight)=\"focusYear(item, 1); $event.preventDefault()\"\n          (keydown.ArrowUp)=\"focusYear(item, -4); $event.preventDefault()\"\n          (keydown.ArrowDown)=\"focusYear(item, 4); $event.preventDefault()\"\n          [tabindex]=\"getTabbable(item) ? 0 : -1\">\n          {{ item.year }}\n        </button>\n      }\n    </div>\n  }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const SPIN_BUTTON_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => SpinButtonComponent),\n    multi: true\n};\n\n@Component({\n    selector: 'ux-spin-button',\n    templateUrl: './spin-button.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [SPIN_BUTTON_VALUE_ACCESSOR]\n})\nexport class SpinButtonComponent implements ControlValueAccessor {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    @Input() set value(value: string | number) {\n        this._value = value;\n        this.onChangeCallback(value);\n        this.onTouchedCallback();\n    }\n\n    get value(): string | number {\n        return this._value;\n    }\n\n    @Input() type: string = 'text';\n    @Input() min: number;\n    @Input() max: number;\n    @Input() placeholder: string = '';\n    @Input() disabled: boolean = false;\n    @Input() spinners: boolean = true;\n    @Input() readOnly: boolean = true;\n    @Input() scrolling: boolean = true;\n    @Input() arrowkeys: boolean = true;\n    @Input() maxLength: number = Infinity;\n\n    @Input() incrementAriaLabel: string;\n    @Input() inputAriaLabel: string;\n    @Input() decrementAriaLabel: string;\n\n    @Output() valueChange = new EventEmitter<string | number>();\n\n    @Output() increment = new EventEmitter<void>();\n    @Output() decrement = new EventEmitter<void>();\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouchedCallback: () => void = () => { };\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChangeCallback: (_: string | number) => void = () => { };\n\n    private _value: string | number;\n    private readonly _regexKeypress = RegExp(/^[0-9.,-]+$/);\n    // eslint-disable-next-line no-useless-escape\n    private readonly _regexPaste = RegExp(/^\\-?\\d+(\\.\\d+)?$/);\n\n    scroll(event: WheelEvent): void {\n\n        if (!this.scrolling) {\n            return;\n        }\n\n        if (event.deltaY > 0) {\n            this.triggerDecrement();\n        } else {\n            this.triggerIncrement();\n        }\n\n        event.preventDefault();\n    }\n\n    triggerIncrement(): void {\n        if (!this.disabled) {\n            this.increment.emit();\n        }\n    }\n\n    triggerDecrement(): void {\n        if (!this.disabled) {\n            this.decrement.emit();\n        }\n    }\n\n    writeValue(value: string | number): void {\n        this.value = value;\n        this._changeDetector.markForCheck();\n    }\n\n    registerOnChange(fn: (_: string | number) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    onKeypress(event: KeyboardEvent): boolean {\n\n        // we only need to perform checks if the type is number\n        if (this.type !== 'number') {\n            return;\n        }\n\n        if (!this._regexKeypress.test(event.key)) {\n            return false;\n        }\n\n        return true;\n    }\n\n    onPaste(event: ClipboardEvent): void {\n\n        // we only need to perform checks if the type is number\n        if (this.type !== 'number') {\n            return;\n        }\n\n        // get the value being pasted\n        const value = event.clipboardData.getData('text');\n\n        // check if it contains the character\n        if (!this._regexPaste.test(value)) {\n\n            // inset the numeric value only if there is one\n            const numericValue = parseFloat(value);\n\n            if (!isNaN(numericValue)) {\n                this.value = numericValue;\n            }\n\n            event.stopPropagation();\n            event.preventDefault();\n        }\n    }\n\n    onValueChange(input: HTMLInputElement, value: string): void {\n\n        // ensure the value is not longer than the maxLength (verify value is a string in case it is\n        // null or undefined, before trying to check the length.\n        if (typeof value === 'string' && value.length > this.maxLength) {\n\n            // if the type specified is a number then it may begin with a 0\n            // e.g. \"02\", in which case if we add a second digit we should drop\n            // the leading \"0\" and allow the non-zero number to be added\n            if (this.type === 'number') {\n                value = parseFloat(value).toString();\n            }\n\n            // remove any characters over the max length\n            value = value.substring(0, this.maxLength);\n\n            // We must manually update the input value in this case rather than relying\n            // on Angular, as if value was previously \"11\" and we add an additional digit\n            // e.g. \"112\", after performing the substring, the outputted value would again\n            // be \"11\" which Angular would not recognize as having changed so it will not\n            // update the value displayed in the input.\n            input.value = value;\n        }\n\n        // emit the value after all length checks\n        this.valueChange.emit(value);\n    }\n}\n","@if (spinners) {\n  <button type=\"button\"\n    uxFocusIndicator\n    class=\"spin-button\"\n    tabindex=\"-1\"\n    [disabled]=\"disabled\"\n    [attr.aria-label]=\"incrementAriaLabel\"\n    [attr.aria-disabled]=\"disabled\"\n    (click)=\"triggerIncrement()\">\n    <ux-icon name=\"up\" class=\"spin-button-up-icon\"></ux-icon>\n  </button>\n}\n\n<input #input\n  type=\"text\"\n  role=\"spinbutton\"\n  [min]=\"min\"\n  [max]=\"max\"\n  [tabindex]=\"0\"\n  class=\"form-control\"\n  [placeholder]=\"placeholder\"\n  [readOnly]=\"readOnly\"\n  [disabled]=\"disabled\"\n  [attr.aria-label]=\"inputAriaLabel\"\n  [attr.aria-disabled]=\"disabled\"\n  [attr.aria-valuemin]=\"min\"\n  [attr.aria-valuenow]=\"value\"\n  [attr.aria-valuemax]=\"max\"\n  [attr.aria-readonly]=\"readOnly\"\n  [ngModel]=\"value\"\n  (ngModelChange)=\"onValueChange(input, $event)\"\n  (wheel)=\"scroll($event)\"\n  (keypress)=\"onKeypress($event)\"\n  (paste)=\"onPaste($event)\"\n  (keydown.arrowup)=\"arrowkeys ? triggerIncrement() : null; $event.preventDefault()\"\n  (keydown.arrowdown)=\"arrowkeys ? triggerDecrement() : null; $event.preventDefault()\">\n\n  @if (spinners) {\n    <button type=\"button\"\n      uxFocusIndicator\n      class=\"spin-button\"\n      tabindex=\"-1\"\n      [disabled]=\"disabled\"\n      [attr.aria-label]=\"decrementAriaLabel\"\n      [attr.aria-disabled]=\"disabled\"\n      (click)=\"triggerDecrement()\">\n      <ux-icon name=\"down\" class=\"spin-button-down-icon\"></ux-icon>\n    </button>\n  }\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TIME_PICKER_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => TimePickerComponent),\n    multi: true\n};\n\n@Component({\n    selector: 'ux-time-picker',\n    templateUrl: './time-picker.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [TIME_PICKER_VALUE_ACCESSOR]\n})\nexport class TimePickerComponent implements ControlValueAccessor {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Whether the arrow keys can be used to increment or decrement the selected time component. */\n    @Input() arrowkeys: boolean = true;\n\n    /** Whether the mouse scroll wheel can be used to increment or decrement the selected time component. */\n    @Input() mousewheel: boolean = true;\n\n    /** Whether the control is disabled. */\n    @Input() disabled: boolean = false;\n\n    /** Whether the control is readonly. */\n    @Input() readOnly: boolean = false;\n\n    /** Whether to show the meridian (AM/PM) selector. If this is false, the 24-hour clock will be used. */\n    @Input() showMeridian: boolean = false;\n\n    /** Whether to show the hour selector. */\n    @Input() showHours: boolean = true;\n\n    /** Whether to show the minute selector. */\n    @Input() showMinutes: boolean = true;\n\n    /** Whether to show the second selector. */\n    @Input() showSeconds: boolean = false;\n\n    /** Whether to show increment and decrement buttons in the time picker. */\n    @Input() showSpinners: boolean = true;\n\n    /** The number of hours to increment or decrement by when using the spinner buttons, arrow keys, or mouse scroll wheel. */\n    @Input() hourStep: number = 1;\n\n    /** The number of minutes to increment or decrement by when using the spinner buttons, arrow keys, or mouse scroll wheel. */\n    @Input() minuteStep: number = 1;\n\n    /** The number of seconds to increment or decrement by when using the spinner buttons, arrow keys, or mouse scroll wheel. */\n    @Input() secondStep: number = 1;\n\n    /** The minimum value that the component will allow. */\n    @Input() min: Date;\n\n    /** The maximum value that the component will allow. */\n    @Input() max: Date;\n\n    /** An array containing the labels to show in the meridian selector. */\n    @Input() meridians: string[] = ['AM', 'PM'];\n\n    /** The value to display. */\n    @Input() set value(value: Date) {\n        this._value = new Date(value);\n        this.valueChange.emit(this._value);\n\n        this.onChangeCallback(this._value);\n        this.onTouchedCallback();\n    }\n\n    get value(): Date {\n        return new Date(this._value);\n    }\n\n    get _meridian(): string {\n        return this._value.getHours() < 12 ? this.meridians[0] : this.meridians[1];\n    }\n\n    get _valid(): boolean {\n        return this.checkValidity(this._value);\n    }\n\n    /** Emitted when the `value` changes. */\n    @Output() valueChange = new EventEmitter<Date>();\n\n    /** Emitted when the validity of the control changes. */\n    @Output() isValid = new EventEmitter<boolean>();\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouchedCallback: () => void = () => {};\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChangeCallback: (_: Date) => void = () => {};\n\n    private _value = new Date();\n    private _isValid: boolean = true;\n\n    writeValue(value: Date): void {\n        this.value = value;\n        this._changeDetector.markForCheck();\n    }\n\n    registerOnChange(fn: (_: Date) => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    getMeridianTime(hour: number): number {\n        return hour > 12 ? hour - 12 : hour;\n    }\n\n    setHour(hour: number): void {\n        const date = this.value;\n        date.setHours(hour ? hour : 0);\n\n        this.value = date;\n    }\n\n    setMinute(minute: number): void {\n        const date = this.value;\n        date.setMinutes(minute ? minute : 0);\n\n        this.value = date;\n    }\n\n    setSeconds(seconds: number): void {\n        const date = this.value;\n        date.setSeconds(seconds ? seconds : 0);\n\n        this.value = date;\n    }\n\n    incrementHour(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setHour(this.value.getHours() + this.hourStep);\n    }\n\n    decrementHour(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setHour(this.value.getHours() - this.hourStep);\n    }\n\n    incrementMinute(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setMinute(this.value.getMinutes() + this.minuteStep);\n    }\n\n    decrementMinute(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setMinute(this.value.getMinutes() - this.minuteStep);\n    }\n\n    incrementSecond(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setSeconds(this.value.getSeconds() + this.secondStep);\n    }\n\n    decrementSecond(arrowkey: boolean = false): void {\n        if (this.disabled || arrowkey && !this.arrowkeys) {\n            return;\n        }\n\n        this.setSeconds(this.value.getSeconds() - this.secondStep);\n    }\n\n    selectMeridian(meridian: string): void {\n\n        // get the current time\n        const hour = this.value.getHours();\n\n        // if we have selected AM\n        if (meridian === this.meridians[0]) {\n            if (hour >= 12) {\n                this.setHour(hour - 12);\n            }\n        }\n\n        // if we have selected PM\n        if (meridian === this.meridians[1]) {\n            if (hour < 12) {\n                this.setHour(hour + 12);\n            }\n        }\n    }\n\n    checkValidity(date: Date): boolean {\n        let valid = true;\n\n        // Fix min and max date components in order to compare time only\n        const min = this.normalizeDate(this.min, date);\n        const max = this.normalizeDate(this.max, date);\n\n        if ((min && date.getTime() < min.getTime()) || (max && date.getTime() > max.getTime())) {\n            valid = false;\n        }\n\n        // if the valid state has changed then emit the isValid output\n        if (valid !== this._isValid) {\n            this._isValid = valid;\n            this.isValid.emit(valid);\n        }\n\n        return valid;\n    }\n\n    hourChange(value: string | number): void {\n\n        // if the value is empty then emit nothing\n        if (value && typeof value === 'string' && value.trim() === '') {\n            return;\n        }\n\n        // convert the string to a number\n        let hour = typeof value === 'number' ? value : parseInt(value);\n\n        // ensure the hours is valid\n        if (!isNaN(hour)) {\n            if (hour < 0) {\n                hour = 0;\n            }\n\n            if (hour > (this.showMeridian ? 12 : 23)) {\n                hour = this.showMeridian ? 12 : 23;\n            }\n        }\n\n        const currentHour = this.value.getHours();\n\n        // if the value hasn't changed, do nothing\n        if (hour === currentHour) {\n            return;\n        }\n\n        hour = isNaN(hour) ? currentHour : hour;\n\n        if (this.showMeridian) {\n\n            // if the number is invalid then restore it to the previous value\n            if (this._meridian === this.meridians[0]) {\n                if (hour >= 12) {\n                    hour -= 12;\n                }\n            }\n\n            // if we have selected PM\n            if (this._meridian === this.meridians[1]) {\n                if (hour < 12) {\n                    hour += 12;\n                }\n            }\n        }\n\n        this.setHour(hour);\n    }\n\n    minuteChange(value: string | number): void {\n\n        // convert the string to a number\n        let minute = typeof value === 'number' ? value : parseInt(value);\n        const currentMinute = this.value.getMinutes();\n\n        // if the value hasn't changed, do nothing\n        if (minute === currentMinute) {\n            return;\n        }\n\n        // ensure the hours is valid\n        if (!isNaN(minute)) {\n            if (minute < 0) {\n                minute = 59;\n            }\n\n            if (minute > 59) {\n                minute = 0;\n            }\n        }\n\n        // if the number is invalid then restore it to the previous value\n        this.setMinute(isNaN(minute) ? currentMinute : minute);\n    }\n\n    secondChange(value: string | number): void {\n\n        // convert the string to a number\n        let second = typeof value === 'number' ? value : parseInt(value);\n        const currentSecond = this.value.getSeconds();\n\n        // if the value hasn't changed, do nothing\n        if (second === currentSecond) {\n            return;\n        }\n\n        // ensure the hours is valid\n        if (!isNaN(second)) {\n            if (second < 0) {\n                second = 0;\n            }\n\n            if (second > 59) {\n                second = 59;\n            }\n        }\n\n        // if the number is invalid then restore it to the previous value\n        this.setSeconds(isNaN(second) ? currentSecond : second);\n    }\n\n    /** Normalise a date's year/month/date components. */\n    private normalizeDate(date: Date, reference: Date): Date {\n        if (!date) {\n            return null;\n        }\n\n        const normalized = new Date(date);\n        normalized.setFullYear(reference.getFullYear());\n        normalized.setMonth(reference.getMonth());\n        normalized.setDate(reference.getDate());\n\n        return normalized;\n    }\n}","<div class=\"time-picker\">\n\n  @if (showHours) {\n    <div class=\"time-picker-column time-hours-picker\" [class.has-error]=\"!_valid\">\n      <ux-spin-button\n        type=\"number\"\n        class=\"time-spinner\"\n        placeholder=\"HH\"\n        [maxLength]=\"2\"\n        [min]=\"0\"\n        [max]=\"showMeridian ? 12 : 23\"\n        [value]=\"value | date: showMeridian ? 'h' : 'HH'\"\n        (valueChange)=\"hourChange($event)\"\n        [spinners]=\"showSpinners\"\n        [disabled]=\"disabled\"\n        [readOnly]=\"readOnly\"\n        inputAriaLabel=\"hour\"\n        incrementAriaLabel=\"Increment the hour\"\n        decrementAriaLabel=\"Decrement the hour\"\n        (increment)=\"incrementHour()\"\n        (decrement)=\"decrementHour()\">\n      </ux-spin-button>\n    </div>\n  }\n\n  @if (showMinutes) {\n    <div class=\"time-picker-separator\">:</div>\n  }\n\n  @if (showMinutes) {\n    <div class=\"time-picker-column time-minutes-picker\" [class.has-error]=\"!_valid\">\n      <ux-spin-button\n        type=\"number\"\n        class=\"time-spinner\"\n        placeholder=\"MM\"\n        [maxLength]=\"2\"\n        [min]=\"0\"\n        [max]=\"59\"\n        [value]=\"value | date: 'mm'\"\n        (valueChange)=\"minuteChange($event)\"\n        [spinners]=\"showSpinners\"\n        [disabled]=\"disabled\"\n        [readOnly]=\"readOnly\"\n        inputAriaLabel=\"minute\"\n        incrementAriaLabel=\"Increment the minute\"\n        decrementAriaLabel=\"Decrement the minute\"\n        (increment)=\"incrementMinute()\"\n        (decrement)=\"decrementMinute()\">\n      </ux-spin-button>\n    </div>\n  }\n\n  @if (showSeconds) {\n    <div class=\"time-picker-separator\">:</div>\n  }\n\n  @if (showSeconds) {\n    <div class=\"time-picker-column time-seconds-picker\" [class.has-error]=\"!_valid\">\n      <ux-spin-button\n        type=\"number\"\n        class=\"time-spinner\"\n        placeholder=\"SS\"\n        [maxLength]=\"2\"\n        [min]=\"0\"\n        [max]=\"59\"\n        [value]=\"value | date: 'ss'\"\n        (valueChange)=\"secondChange($event)\"\n        [spinners]=\"showSpinners\"\n        [disabled]=\"disabled\"\n        [readOnly]=\"readOnly\"\n        inputAriaLabel=\"seconds\"\n        incrementAriaLabel=\"Increment the second\"\n        decrementAriaLabel=\"Decrement the second\"\n        (increment)=\"incrementSecond()\"\n        (decrement)=\"decrementSecond()\">\n      </ux-spin-button>\n    </div>\n  }\n</div>\n\n@if (showMeridian) {\n  <div class=\"time-picker-meridian\">\n    <div class=\"btn-group\" role=\"radiogroup\">\n      @for (meridian of meridians; track meridian) {\n        <button type=\"button\"\n          class=\"btn button-toggle-accent\"\n          role=\"radio\"\n          tabindex=\"0\"\n          [disabled]=\"disabled\"\n          (click)=\"selectMeridian(meridian)\"\n          [class.active]=\"meridian === _meridian\"\n          [attr.aria-label]=\"meridian\"\n          [attr.aria-checked]=\"meridian === _meridian\"\n          [attr.aria-disabled]=\"disabled\">\n          {{ meridian }}\n        </button>\n      }\n    </div>\n  </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostListener, inject, OnDestroy, OnInit, Output } from '@angular/core';\nimport { combineLatest, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { DateRangeOptions } from '../../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../../date-range-picker/date-range.service';\nimport { DateTimePickerService } from '../date-time-picker.service';\nimport { compareDays, DateTimePickerTimezone } from '../date-time-picker.utils';\n\n@Component({\n    selector: 'ux-date-time-picker-time-view',\n    templateUrl: './time-view.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TimeViewComponent implements OnInit, OnDestroy {\n    readonly datepicker = inject(DateTimePickerService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true });\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    /** Dont bind directly to the selected date as if it's null we can end up in 1970! */\n    value: Date;\n\n    /** Earliest time permitted on the time picker. */\n    min: Date = null;\n\n    /** Latest time permitted on the time picker. */\n    max: Date = null;\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    get _rangeStart(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.start : null;\n    }\n\n    get _rangeEnd(): Date | null {\n        return this._isRangeMode && this._rangeService ? this._rangeService.end : null;\n    }\n\n    /** Emit when the timezone changes. */\n    @Output() timezoneChange: EventEmitter<DateTimePickerTimezone> = new EventEmitter<DateTimePickerTimezone>();\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // when the date changes we should update the value\n        this.datepicker.date$.pipe(filter(date => date && this.value instanceof Date), takeUntil(this._onDestroy)).subscribe(date => {\n\n            this.value = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\n\n            this._changeDetector.detectChanges();\n        });\n\n        if (!this._isRangeMode) {\n            this.datepicker.selected$.pipe(filter(date => !!date), takeUntil(this._onDestroy))\n                .subscribe(date => this.value = new Date(date));\n        }\n\n        if (this._isRangeMode && this._isRangeStart) {\n            this.value = new Date();\n            if (!this._rangeStart) {\n                this.value.setHours(0, 0, 0, 0);\n            } else {\n                this.value.setHours(this._rangeStart.getHours(), this._rangeStart.getMinutes(), this._rangeStart.getSeconds());\n            }\n        }\n\n        if (this._isRangeMode && this._isRangeEnd) {\n            this.value = new Date();\n            if (!this._rangeEnd) {\n                this.value.setHours(23, 59, 59, 0);\n            } else {\n                this.value.setHours(this._rangeEnd.getHours(), this._rangeEnd.getMinutes(), this._rangeEnd.getSeconds());\n            }\n        }\n    }\n\n    ngOnInit(): void {\n\n        // min should only apply if it's on the same day as the selected date\n        combineLatest(this.datepicker.min$, this.datepicker.date$).pipe(takeUntil(this._onDestroy)).subscribe(([min, date]) => {\n            this.min = (min && date && compareDays(date, min)) ? min : null;\n            this._changeDetector.detectChanges();\n        });\n\n        // max should only apply if it's on the same day as the selected date\n        combineLatest(this.datepicker.max$, this.datepicker.date$).pipe(takeUntil(this._onDestroy)).subscribe(([max, date]) => {\n            this.max = (max && date && compareDays(date, max)) ? max : null;\n            this._changeDetector.detectChanges();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    onTimeChange(time: Date): void {\n\n        if (this._isRangeMode) {\n            this.datepicker.hours = time.getHours();\n            this.datepicker.minutes = time.getMinutes();\n            this.datepicker.seconds = time.getSeconds();\n\n            // update the time in the range picker service\n            if (this._isRangeStart) {\n                this._rangeService.startTime = { hours: time.getHours(), minutes: time.getMinutes(), seconds: time.getSeconds() };\n            } else {\n                this._rangeService.endTime = { hours: time.getHours(), minutes: time.getMinutes(), seconds: time.getSeconds() };\n            }\n\n            // if a date is currently selected we should update it\n            if (this._isRangeStart && this._rangeStart) {\n                const start = new Date(this._rangeStart);\n                start.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n                this._rangeService.setStartDate(start);\n            }\n\n            if (this._isRangeEnd && this._rangeEnd) {\n                const end = new Date(this._rangeEnd);\n                end.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n                this._rangeService.setEndDate(end);\n            }\n\n            return;\n        }\n\n        // if the selected time is null then do nothing\n        if (!this.datepicker.selected$.value) {\n            return;\n        }\n\n        // otherwise set the time\n        const date = new Date(this.datepicker.selected$.value);\n\n        // update the time\n        date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n\n        // emit the time\n        this.datepicker.selected$.next(date);\n    }\n\n    selectTimezone(name: string): void {\n        const timezones = this.datepicker.timezones$.value;\n\n        // find matching timezone\n        const timezone = timezones.find(_timezone => _timezone.name === name);\n\n        if (timezone) {\n            this.timezoneChange.emit(timezone);\n        }\n    }\n\n    incrementTimezone(): void {\n        const timezone = this.datepicker.timezone$.value;\n        const timezones = this.datepicker.timezones$.value;\n\n        const currentZone = timezones.findIndex(zone => zone.name === timezone.name && zone.offset === timezone.offset);\n\n        // try to get the previous zone\n        this.timezoneChange.emit(timezones[currentZone + 1] ? timezones[currentZone + 1] : timezones[currentZone]);\n    }\n\n    decrementTimezone(): void {\n        const timezone = this.datepicker.timezone$.value;\n        const timezones = this.datepicker.timezones$.value;\n\n        const currentZone = timezones.findIndex(zone => zone.name === timezone.name && zone.offset === timezone.offset);\n\n        // try to get the previous zone\n        this.timezoneChange.emit(timezones[currentZone - 1] ? timezones[currentZone - 1] : timezones[currentZone]);\n    }\n\n    @HostListener('focusin')\n    onFocusWithin(): void {\n        if (this._isRangeMode) {\n            this._rangeService.isChangingTime = true;\n        }\n    }\n\n    @HostListener('focusout')\n    onFocusOut(): void {\n        if (this._isRangeMode) {\n            this._rangeService.isChangingTime = false;\n        }\n    }\n}\n","@if (datepicker.showTime$ | async) {\n  <ux-time-picker\n    [value]=\"value\"\n    (valueChange)=\"onTimeChange($event)\"\n    [showSeconds]=\"datepicker.showSeconds$ | async\"\n    [showMeridian]=\"datepicker.showMeridian$ | async\"\n    [showSpinners]=\"datepicker.showSpinners$ | async\"\n    [meridians]=\"datepicker.meridians\"\n    [min]=\"min\"\n    [max]=\"max\">\n  </ux-time-picker>\n}\n\n@if (datepicker.showTimezone$ | async) {\n  @if (datepicker.showSpinners$ | async) {\n    <div class=\"time-zone-picker\">\n      <ux-spin-button\n        class=\"time-zone-spinner\"\n        [value]=\"(datepicker.timezone$ | async)?.name\"\n        [readOnly]=\"true\"\n        (increment)=\"incrementTimezone()\"\n        (decrement)=\"decrementTimezone()\"\n        inputAriaLabel=\"Time Zone\"\n        incrementAriaLabel=\"Switch to the next time zone\"\n        decrementAriaLabel=\"Switch to the previous time zone\">\n      </ux-spin-button>\n    </div>\n  }\n  @if ((datepicker.showSpinners$ | async) === false) {\n    <div class=\"time-zone-picker\">\n      <select class=\"form-control time-zone-select\"\n        tabindex=\"0\"\n        [ngModel]=\"(datepicker.timezone$ | async)?.name\"\n        (ngModelChange)=\"selectTimezone($event)\"\n        aria-label=\"Timezone\"\n        [attr.aria-valuetext]=\"(datepicker.timezone$ | async)?.name\">\n        @for (zone of datepicker.timezones$ | async; track zone) {\n          <option\n            [selected]=\"zone.name === (datepicker.timezone$ | async)?.name\"\n            [value]=\"zone.name\">\n            {{ zone?.name }}\n          </option>\n        }\n      </select>\n    </div>\n  }\n}\n","import { WeekDay } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { DateRangeOptions } from '../date-range-picker/date-range-picker.directive';\nimport { DateRangePicker, DateRangeService } from '../date-range-picker/date-range.service';\nimport { DatePickerMode, DateTimePickerService } from './date-time-picker.service';\nimport { dateComparator, DateTimePickerTimezone, isDateAfter, isDateBefore, timezoneComparator } from './date-time-picker.utils';\n\n@Component({\n    selector: 'ux-date-time-picker',\n    templateUrl: './date-time-picker.component.html',\n    providers: [DateTimePickerService],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DateTimePickerComponent implements OnInit, AfterViewInit, OnDestroy {\n    readonly datepicker = inject(DateTimePickerService);\n\n    private readonly _rangeService = inject(DateRangeService, { optional: true });\n\n    private readonly _rangeOptions = inject(DateRangeOptions, { optional: true });\n\n    /** Defines whether or not the date picker should be visible. */\n    @Input() set showDate(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showDate$.next(value);\n        }\n    }\n\n    /** Defines whether or not the time picker should be visible. */\n    @Input() set showTime(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showTime$.next(value);\n        }\n    }\n\n    /** Defines whether or not the time picker should allow the user to choose a timezone. */\n    @Input() set showTimezone(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showTimezone$.next(value);\n        }\n    }\n\n    /** Defines whether or not the time picker should allow the user to specify seconds. */\n    @Input() set showSeconds(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showSeconds$.next(value);\n        }\n    }\n\n    /** Defines whether or not the time picker should show an AM/PM button, or time should be represented in 24hr format instead. */\n    @Input() set showMeridian(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showMeridian$.next(value);\n        }\n    }\n\n    /** Defines whether or not the time picker should allow the user to select the time using spinners. */\n    @Input() set showSpinners(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showSpinners$.next(value);\n        }\n    }\n\n    /** If defined will override the weekday names displayed. */\n    @Input() set weekdays(value: string[]) {\n        if (value !== undefined) {\n            this.datepicker.weekdays$.next(value);\n        }\n    }\n\n    /** Defines the names of the months. */\n    @Input() set months(months: string[]) {\n        if (months !== undefined) {\n            this.datepicker.months = months;\n        }\n    }\n\n    /** Defines the short names of each month. */\n    @Input() set monthsShort(months: string[]) {\n        if (months !== undefined) {\n            this.datepicker.monthsShort = months;\n        }\n    }\n\n    /** Defines the labels to show in the meridian (AM/PM) selector. */\n    @Input() set meridians(meridians: string[]) {\n        if (meridians !== undefined) {\n            this.datepicker.meridians = meridians;\n        }\n    }\n\n    /** Defines the text to be displayed in the button used to set the selected time to the current time. */\n    @Input() set nowBtnText(value: string) {\n        if (value !== undefined) {\n            this.datepicker.nowBtnText$.next(value);\n        }\n    }\n\n    /** Specify whether or not to show the show now button */\n    @Input() set showNowBtn(value: boolean) {\n        if (value !== undefined) {\n            this.datepicker.showNowBtn$.next(value);\n        }\n    }\n\n    /**\n     * Defines the list of available timezones. The `DateTimePickerTimezone` interface specifies that each timezone should\n     * be an object with a `name` property that represents the timezone, eg. `GMT+2`, and an `offset` property that represents\n     * the number of minutes relative to GMT the timezone is.\n     */\n    @Input() set timezones(value: DateTimePickerTimezone[]) {\n        if (value !== undefined) {\n            this.datepicker.timezones$.next(value);\n        }\n    }\n\n    /** Defines the day of the week that should appear in the first column. `WeekDay` is an enumeration available in `@angular/common`. */\n    @Input() set startOfWeek(startOfWeek: WeekDay) {\n        if (startOfWeek !== undefined) {\n            this.datepicker.startOfWeek$.next(startOfWeek);\n        }\n    }\n\n    /** Define the aria label for the now button */\n    @Input() nowBtnAriaLabel: string = 'Set date to now';\n\n    /** Emits an event when the date is changed using the component. */\n    @Output() dateChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n    /** If not defined the picker will try to use the user's timezone. If that is not available, it will revert to GMT. */\n    @Output() timezoneChange: EventEmitter<DateTimePickerTimezone> = new EventEmitter<DateTimePickerTimezone>();\n\n    /** The selected date to be displayed in the component. */\n    @Input()\n    set date(value: Date) {\n        if (value && !dateComparator(value, this.datepicker.date$.value)) {\n            if (this._isRangeMode) {\n                this.datepicker.date$.next(new Date(value));\n                this.datepicker.selected$.next(new Date(value));\n            } else {\n                this.datepicker.selected$.next(new Date(value));\n            }\n        }\n    }\n\n    /** Will set the selected timezone. */\n    @Input()\n    set timezone(value: DateTimePickerTimezone) {\n        this.setTimezone(value);\n    }\n\n    /** The earliest selectable date. */\n    @Input()\n    set min(value: Date) {\n        this.datepicker.min$.next(value);\n    }\n\n    /** The latest selectable date. */\n    @Input()\n    set max(value: Date) {\n        this.datepicker.max$.next(value);\n    }\n\n    /** Determine if we are in range selection mode */\n    get _isRangeMode(): boolean {\n        return !!this._rangeOptions;\n    }\n\n    /** Determine if this picker is the start picker */\n    get _isRangeStart(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.Start;\n    }\n\n    /** Determine if this picker is the end picker */\n    get _isRangeEnd(): boolean {\n        return this._isRangeMode && this._rangeOptions.picker === DateRangePicker.End;\n    }\n\n    /** Determine if the today button is disabled */\n    get _isTodayDisabled(): boolean {\n        const min = this.datepicker.min$.value;\n        const max = this.datepicker.max$.value;\n\n        if (!min && !max) {\n            return false;\n        }\n\n        if (min && !max) {\n            return isDateBefore(new Date(), min);\n        }\n\n        if (!min && max) {\n            return isDateAfter(new Date(), max);\n        }\n\n        return isDateBefore(new Date(), min) || isDateAfter(new Date(), max);\n    }\n\n    // expose enum to view\n    DatePickerMode = DatePickerMode;\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        this.datepicker.selected$.pipe(distinctUntilChanged(dateComparator), takeUntil(this._onDestroy))\n            .subscribe(date => this.dateChange.emit(date));\n    }\n\n    ngOnInit(): void {\n        this.setTimezone(this.datepicker.timezone$.value);\n    }\n\n    ngAfterViewInit(): void {\n        setTimeout(() => this.datepicker.initialised = true);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Change the date to the current date and time\n     */\n    setToNow(): void {\n        if (this._isRangeMode) {\n            const date = new Date();\n\n            if (this._isRangeStart && !this._rangeService.showTime) {\n                this.datepicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), 0, 0, 0);\n            } else if (this._isRangeEnd && !this._rangeService.showTime) {\n                this.datepicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), 23, 59, 59);\n            } else {\n                this.datepicker.setDate(date.getDate(), date.getMonth(), date.getFullYear(), this.datepicker.hours, this.datepicker.minutes, this.datepicker.seconds);\n            }\n        } else {\n            // set the date to the current moment\n            this.datepicker.setDateToNow();\n        }\n    }\n\n    _onTimezoneChange(timezone: DateTimePickerTimezone): void {\n        if (!timezoneComparator(this.datepicker.timezone$.value, timezone)) {\n            this.timezoneChange.emit(timezone);\n        }\n    }\n\n    /**\n     * Update the service with the new timezone value, falling back on the default if it is undefined or\n     * not present in `timezones`.\n     */\n    private setTimezone(timezone: DateTimePickerTimezone | undefined): void {\n        // if the user does not provide a timezone, set it to the current timezone and emit the change\n        if (!timezone) {\n            this.datepicker.timezone$.next(this.datepicker.getDefaultTimezone());\n            this.timezoneChange.emit(this.datepicker.timezone$.value);\n            return;\n        }\n\n        // Check if the timezone is available in the timezones list; if not, get the default timezone\n        if (this.datepicker.isTimezoneAvailable(timezone)) {\n            this.datepicker.timezone$.next(timezone);\n        } else {\n            // This is probably an unintended state so emit a warning\n            console.warn(`ux-date-time-picker: specified timezone ${JSON.stringify(timezone)} is not present in the timezones array.`);\n\n            // Fall back on the default timezone\n            const defaultTimezone = this.datepicker.getDefaultTimezone();\n            if (!this.datepicker.timezone$.value || !timezoneComparator(defaultTimezone, this.datepicker.timezone$.value)) {\n                this.datepicker.timezone$.next(defaultTimezone);\n                this.timezoneChange.emit(defaultTimezone);\n            }\n        }\n    }\n}\n","<div class=\"calendar-container\">\n\n  <ux-date-time-picker-header></ux-date-time-picker-header>\n\n  @if (datepicker.showDate$ | async) {\n    @switch (datepicker.mode$ | async) {\n      <!-- Display days in the current month -->\n      @case (DatePickerMode.Day) {\n        <ux-date-time-picker-day-view></ux-date-time-picker-day-view>\n      }\n      <!-- Display the months in the current year -->\n      @case (DatePickerMode.Month) {\n        <ux-date-time-picker-month-view></ux-date-time-picker-month-view>\n      }\n      <!-- Display a decade -->\n      @case (DatePickerMode.Year) {\n        <ux-date-time-picker-year-view></ux-date-time-picker-year-view>\n      }\n    }\n  }\n\n  <!-- Display a Time Picker -->\n  @if (datepicker.showTime$ | async) {\n    <ux-date-time-picker-time-view (timezoneChange)=\"_onTimezoneChange($event)\"\n    ></ux-date-time-picker-time-view>\n  }\n\n</div>\n\n@if (datepicker.showNowBtn$ | async) {\n  <button type=\"button\"\n    uxFocusIndicator\n    class=\"now-button\"\n    [attr.aria-label]=\"nowBtnAriaLabel\"\n    [disabled]=\"_isTodayDisabled\"\n    (click)=\"setToNow()\">\n    {{ datepicker.nowBtnText$ | async }}\n  </button>\n}","import { formatDate } from '@angular/common';\nimport { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { DateFormatter } from './date-formatter.type';\n\n@Pipe({\n    name: 'formatDate'\n})\nexport class DateFormatterPipe implements PipeTransform {\n\n    private readonly _locale = inject<string>(LOCALE_ID);\n\n    transform(value: Date, formatter: string | DateFormatter): string {\n\n        // we may not initially have  a value\n        if (!value) {\n            return '';\n        }\n\n        return typeof formatter === 'function' ? formatter(value) : formatDate(value, formatter, this._locale);\n    }\n\n}","import { WeekDay } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { DateFormatter } from '../../pipes/date-formatter/date-formatter.type';\nimport { DateTimePickerTimezone, differenceBetweenDates, timezones as defaultTimezones } from '../date-time-picker/date-time-picker.utils';\nimport { DateRangePicker, DateRangeService } from './date-range.service';\n\n@Component({\n    selector: 'ux-date-range-picker',\n    templateUrl: './date-range-picker.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [DateRangeService]\n})\nexport class DateRangePickerComponent implements OnDestroy {\n\n    readonly rangeService = inject(DateRangeService);\n\n    /** Expose enum to the view */\n    DateRangePicker = DateRangePicker;\n\n    /** The selected start date to be displayed in the component. */\n    @Input() set start(start: Date) {\n        this.rangeService.start = start;\n    }\n\n    /** The selected end date to be displayed in the component. */\n    @Input() set end(end: Date) {\n        this.rangeService.end = end;\n    }\n\n    /** Define the date localization that should be used can be either a string on a function */\n    @Input() dateFormat: string | DateFormatter;\n\n    /** Define the time localization that should be used can be either a string on a function */\n    @Input() timeFormat: string | DateFormatter;\n\n    /** The earliest selectable date. */\n    @Input() min: Date;\n\n    /** The latest selectable date. */\n    @Input() max: Date;\n\n    /** Defines whether or not the time picker should allow the user to choose a timezone. */\n    @Input() showTimezone: boolean;\n\n    /** Defines whether or not the time picker should allow the user to specify seconds. */\n    @Input() showSeconds: boolean = false;\n\n    /** Defines whether or not the time picker should show an AM/PM button, or time should be represented in 24hr format instead. */\n    @Input() showMeridian: boolean = true;\n\n    /** Defines whether or not the time picker should allow the user to select the time using spinners. */\n    @Input() showSpinners: boolean = true;\n\n    /** If defined will override the weekday names displayed. */\n    @Input() weekdays: string[] = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\n    /** Defines the names of the months. */\n    @Input() months: string[];\n\n    /** Defines the short names of each month. */\n    @Input() monthsShort: string[];\n\n    /** Defines the labels to show in the meridian (AM/PM) selector. */\n    @Input() meridians: string[];\n\n    /** Defines the text to be displayed in the button used to set the selected time to the current time. */\n    @Input() nowBtnText: string;\n\n    /** Specify whether or not the show now button should be visible */\n    @Input() showNowBtn: boolean = false;\n\n    /** Defines the title to display above the start picker. */\n    @Input() selectStartTitle: string = 'Select Start Date';\n\n    /** Defines the title to display above the end picker. */\n    @Input() selectEndTitle: string = 'Select End Date';\n\n    /** Define the aria label for the now button */\n    @Input() nowBtnAriaLabel: string = 'Set date to now';\n\n    /** Defines the aria label for the range start picker */\n    @Input() set startPickerAriaLabel(label: string) {\n        this.rangeService.startPickerAriaLabel = label;\n    }\n\n    /** Defines the aria label for the range end picker */\n    @Input() set endPickerAriaLabel(label: string) {\n        this.rangeService.endPickerAriaLabel = label;\n    }\n\n    /** Defines whether or not the time picker should be visible. */\n    @Input() set showTime(showTime: boolean) {\n        this.rangeService.showTime = showTime;\n    }\n\n    get showTime(): boolean {\n        return this.rangeService.showTime;\n    }\n\n    /**\n     * Defines the list of available timezones. The `DateTimePickerTimezone` interface specifies that each timezone should\n     * be an object with a `name` property that represents the timezone, eg. `GMT+2`, and an `offset` property that represents\n     * the number of minutes relative to GMT the timezone is.\n     */\n    @Input() timezones: DateTimePickerTimezone[] = defaultTimezones;\n\n    /** Will set the selected start timezone. */\n    @Input() startTimezone: DateTimePickerTimezone = this.getCurrentTimezone();\n\n    /** Will set the selected end timezone. */\n    @Input() endTimezone: DateTimePickerTimezone = this.getCurrentTimezone();\n\n    /** Defines the day of the week that should appear in the first column. `WeekDay` is an enumeration available in `@angular/common`. */\n    @Input() startOfWeek: WeekDay = WeekDay.Sunday;\n\n    /** Define a function to return the number of days within the selected range */\n    @Input() durationTitle: (days: number) => string = this.getDurationTitle;\n\n    /** Emit when the start date changes */\n    @Output() startChange = new EventEmitter<Date>();\n\n    /** Emit when the end date changes */\n    @Output() endChange = new EventEmitter<Date>();\n\n    /** Emit when the start timezone changes. */\n    @Output() startTimezoneChange: EventEmitter<DateTimePickerTimezone> = new EventEmitter<DateTimePickerTimezone>();\n\n    /** Emit when the end timezone changes. */\n    @Output() endTimezoneChange: EventEmitter<DateTimePickerTimezone> = new EventEmitter<DateTimePickerTimezone>();\n\n    /** Calculate the number of days between the start and end date */\n    get _duration(): number | null {\n        if (this.rangeService.start && this.rangeService.end) {\n            return differenceBetweenDates(this.rangeService.start, this.rangeService.end, false);\n        }\n\n        if (this.rangeService.start && !this.rangeService.end && this.rangeService.hover) {\n            // apply the time from the time picker\n            const hoverDate = new Date(this.rangeService.hover);\n            hoverDate.setHours(this.rangeService.endTime.hours, this.rangeService.endTime.minutes, this.rangeService.endTime.seconds);\n            return this.rangeService.start.getTime() <= hoverDate.getTime() ? differenceBetweenDates(this.rangeService.start, hoverDate, false) : null;\n        }\n\n        // if we only have one selected date and have a hover date\n        if (this.rangeService.end && !this.rangeService.start && this.rangeService.hover) {\n            // apply the time from the time picker\n            const hoverDate = new Date(this.rangeService.hover);\n            hoverDate.setHours(this.rangeService.startTime.hours, this.rangeService.startTime.minutes, this.rangeService.startTime.seconds);\n            return this.rangeService.end.getTime() >= hoverDate.getTime() ? differenceBetweenDates(this.rangeService.end, hoverDate, false) : null;\n        }\n    }\n\n    /** Use an observable to debounce rapid start changes */\n    startChange$ = new Subject<Date>();\n\n    /** Use an observable to debounce rapid end changes */\n    endChange$ = new Subject<Date>();\n\n    /** Unsubscribe from all observables private  */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        this.startChange$.pipe(takeUntil(this._onDestroy), debounceTime(0)).subscribe(date => this.onStartChange(date));\n        this.endChange$.pipe(takeUntil(this._onDestroy), debounceTime(0)).subscribe(date => this.onEndChange(date));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Clear the selected date range */\n    clear(): void {\n        this.rangeService.clear();\n    }\n\n    /** Get the timezone based on the machine timezone */\n    private getCurrentTimezone(): DateTimePickerTimezone {\n        return this.timezones.find(timezone => timezone.offset === new Date().getTimezoneOffset());\n    }\n\n    private onStartChange(date: Date): void {\n        this.rangeService.setStartDate(date);\n        this.startChange.emit(date);\n    }\n\n    private onEndChange(date: Date): void {\n        this.rangeService.setEndDate(date);\n        this.endChange.emit(date);\n    }\n\n    /** Get the text to display to indicate the duration */\n    private getDurationTitle(days: number): string {\n        return days + ' ' + (days > 1 ? 'days' : 'day');\n    }\n}\n","<div class=\"range-header\">\n\n  <div class=\"header-section\">\n    @if (!rangeService.start) {\n      <div class=\"select-header\">{{ selectStartTitle }}</div>\n    }\n    @if (rangeService.start) {\n      <div class=\"date-header\">\n        {{ rangeService.start | formatDate: dateFormat || 'd MMMM y' }}\n      </div>\n    }\n    <div [style.visibility]=\"rangeService.start && showTime ? 'visible' : 'hidden'\" class=\"time-header\">\n      {{ rangeService.start | formatDate: timeFormat || (showMeridian ? 'shortTime' : 'HH:mm') }}\n    </div>\n  </div>\n\n  <div class=\"header-separator\">\n    <ux-icon name=\"link-next\"></ux-icon>\n    <p class=\"duration\"\n      [style.visibility]=\"_duration !== null && _duration !== undefined ? 'visible' : 'hidden'\">\n      {{ durationTitle(_duration || 0) }}\n    </p>\n  </div>\n\n  <div class=\"header-section\">\n    @if (!rangeService.end) {\n      <div class=\"select-header\">{{ selectEndTitle }}</div>\n    }\n    @if (rangeService.end) {\n      <div class=\"date-header\">\n        {{ rangeService.end | formatDate: dateFormat || 'd MMMM y'}}\n      </div>\n    }\n    <div [style.visibility]=\"rangeService.end && showTime ? 'visible' : 'hidden'\" class=\"time-header\">\n      {{ rangeService.end | formatDate: timeFormat || (showMeridian ? 'shortTime' : 'HH:mm') }}\n    </div>\n  </div>\n\n</div>\n\n<div class=\"content\">\n  <ux-date-time-picker\n    uxDateRangePicker\n    [picker]=\"DateRangePicker.Start\"\n    class=\"start-date-picker\"\n    [date]=\"rangeService.start\"\n    (dateChange)=\"startChange$.next($event)\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [weekdays]=\"weekdays\"\n    [startOfWeek]=\"startOfWeek\"\n    [showTime]=\"showTime\"\n    [showTimezone]=\"showTimezone\"\n    [showSeconds]=\"showSeconds\"\n    [showMeridian]=\"showMeridian\"\n    [showSpinners]=\"showSpinners\"\n    [months]=\"months\"\n    [monthsShort]=\"monthsShort\"\n    [meridians]=\"meridians\"\n    [nowBtnText]=\"nowBtnText\"\n    [showNowBtn]=\"showNowBtn\"\n    [nowBtnAriaLabel]=\"nowBtnAriaLabel\"\n    [timezones]=\"timezones\"\n    [(timezone)]=\"startTimezone\"\n    (timezoneChange)=\"startTimezoneChange.emit($event)\">\n  </ux-date-time-picker>\n\n  <ux-date-time-picker\n    uxDateRangePicker\n    [picker]=\"DateRangePicker.End\"\n    class=\"end-date-picker\"\n    [date]=\"rangeService.end\"\n    (dateChange)=\"endChange$.next($event)\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [weekdays]=\"weekdays\"\n    [startOfWeek]=\"startOfWeek\"\n    [showTime]=\"showTime\"\n    [showTimezone]=\"showTimezone\"\n    [showSeconds]=\"showSeconds\"\n    [showMeridian]=\"showMeridian\"\n    [showSpinners]=\"showSpinners\"\n    [months]=\"months\"\n    [monthsShort]=\"monthsShort\"\n    [meridians]=\"meridians\"\n    [nowBtnText]=\"nowBtnText\"\n    [showNowBtn]=\"showNowBtn\"\n    [nowBtnAriaLabel]=\"nowBtnAriaLabel\"\n    [timezones]=\"timezones\"\n    [(timezone)]=\"endTimezone\"\n    (timezoneChange)=\"endTimezoneChange.emit($event)\">\n  </ux-date-time-picker>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { DateFormatterPipe } from './date-formatter.pipe';\n\n@NgModule({\n    exports: [DateFormatterPipe],\n    declarations: [DateFormatterPipe]\n})\nexport class DateFormatterPipeModule { }\n","import { NgModule } from '@angular/core';\nimport { FocusIfDirective } from './focus-if.directive';\n\n\n@NgModule({\n    exports: [FocusIfDirective],\n    declarations: [FocusIfDirective]\n})\nexport class FocusIfModule { }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/index';\nimport { SpinButtonComponent } from './spin-button.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FormsModule,\n        IconModule,\n    ],\n    exports: [SpinButtonComponent],\n    declarations: [SpinButtonComponent]\n})\nexport class SpinButtonModule { }","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { SpinButtonModule } from '../spin-button/index';\nimport { TimePickerComponent } from './time-picker.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FormsModule,\n        SpinButtonModule\n    ],\n    exports: [TimePickerComponent],\n    declarations: [TimePickerComponent],\n})\nexport class TimePickerModule { }","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/index';\nimport { IconModule } from '../icon/index';\nimport { SpinButtonModule } from '../spin-button/index';\nimport { TimePickerModule } from '../time-picker/index';\nimport { DateTimePickerComponent } from './date-time-picker.component';\nimport { DateTimePickerConfig } from './date-time-picker.config';\nimport { DayViewComponent } from './day-view/day-view.component';\nimport { HeaderComponent } from './header/header.component';\nimport { MonthViewComponent } from './month-view/month-view.component';\nimport { WeekDaySortPipe } from './pipes/weekday-sort.pipe';\nimport { TimeViewComponent } from './time-view/time-view.component';\nimport { YearViewComponent } from './year-view/year-view.component';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        CommonModule,\n        FocusIfModule,\n        FormsModule,\n        IconModule,\n        SpinButtonModule,\n        TimePickerModule,\n    ],\n    exports: [DateTimePickerComponent],\n    declarations: [\n        DateTimePickerComponent,\n        HeaderComponent,\n        DayViewComponent,\n        MonthViewComponent,\n        YearViewComponent,\n        TimeViewComponent,\n        WeekDaySortPipe\n    ]\n})\nexport class DateTimePickerModule {\n    static forRoot(): ModuleWithProviders<DateTimePickerModule> {\n        return {\n            ngModule: DateTimePickerModule,\n            providers: [\n                DateTimePickerConfig\n            ]\n        };\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DateFormatterPipeModule } from '../../pipes/date-formatter/index';\nimport { DateTimePickerModule } from '../date-time-picker/index';\nimport { IconModule } from '../icon/index';\nimport { DateRangePickerComponent } from './date-range-picker.component';\nimport { DateRangePickerDirective } from './date-range-picker.directive';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        DateTimePickerModule,\n        IconModule,\n        DateFormatterPipeModule\n    ],\n    declarations: [\n        DateRangePickerComponent,\n        DateRangePickerDirective,\n    ],\n    exports: [\n        DateRangePickerComponent\n    ]\n})\nexport class DateRangePickerModule { }\n","import { ChangeDetectionStrategy, Component, Directive } from '@angular/core';\n\n@Component({\n    selector: 'ux-ebox',\n    templateUrl: './ebox.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EboxComponent { }\n\n@Directive({\n    selector: 'ux-ebox-header'\n})\nexport class EboxHeaderDirective { }\n\n@Directive({\n    selector: 'ux-ebox-content'\n})\nexport class EboxContentDirective { }\n","<div class=\"ux-ebox-header\">\n    <ng-content select=\"ux-ebox-header\"></ng-content>\n</div>\n\n<div class=\"ux-ebox-content\">\n    <ng-content select=\"ux-ebox-content\"></ng-content>\n</div>","import { NgModule } from '@angular/core';\n\nimport { EboxComponent, EboxContentDirective, EboxHeaderDirective } from './ebox.component';\n\n@NgModule({\n    exports: [EboxComponent, EboxContentDirective, EboxHeaderDirective],\n    declarations: [EboxComponent, EboxContentDirective, EboxHeaderDirective]\n})\nexport class EboxModule { }\n","import { Component, ElementRef, EventEmitter, HostBinding, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { FocusIndicator, FocusIndicatorService } from '../../../../directives/accessibility/index';\n\n@Component({\n    selector: 'ux-facet-header',\n    templateUrl: './facet-header.component.html',\n    host: {\n        'role': 'button',\n        'tabindex': '0',\n        '(click)': 'toggleExpand()',\n        '(keyup.enter)': 'toggleExpand()',\n        '[attr.aria-expanded]': 'expanded',\n        '[attr.aria-label]': 'header + \\' Facet: Activate to \\' + (expanded ? \\'collapse\\' : \\'expand\\')'\n    }\n})\nexport class FacetHeaderComponent implements OnDestroy {\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n    readonly elementRef = inject(ElementRef);\n\n    /** Defines the text to display in the header. */\n    @Input() header: string;\n\n    /** Defines whether or not clicking on the header will toggle the expanded state. */\n    @Input() canExpand: boolean = true;\n\n    /** Can be used to set the initial expanded state. */\n    @Input() @HostBinding('class.expanded') expanded: boolean = true;\n\n    /** If two-way binding is used it will be updated when the expanded state changes. */\n    @Output() expandedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Store Focus Indicator instance */\n    private readonly _focusIndicator: FocusIndicator;\n\n    constructor() {\n        this._focusIndicator = this.focusIndicatorService.monitor(this.elementRef.nativeElement);\n    }\n\n    ngOnDestroy(): void {\n        this._focusIndicator.destroy();\n    }\n\n    toggleExpand(): void {\n\n        // if not expandable then do nothing\n        if (this.canExpand) {\n            this.expanded = !this.expanded;\n            this.expandedChange.emit(this.expanded);\n        }\n    }\n}","<span class=\"facet-header-title\">{{ header }}</span>\n@if (canExpand) {\n  <ux-icon [name]=\"expanded ? 'down' : 'previous'\" class=\"facet-header-icon\"></ux-icon>\n}\n","import { Facet } from './models/facet';\n\nexport class FacetSelect {\n    constructor(public facet: Facet) {}\n}\n\nexport class FacetDeselect {\n    constructor(public facet: Facet) {}\n}\n\nexport class FacetDeselectAll {}\n\nexport type FacetEvent = FacetSelect | FacetDeselect | FacetDeselectAll;","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { FacetDeselect, FacetDeselectAll, FacetEvent, FacetSelect } from './facet-events';\nimport { Facet } from './models/facet';\n\n@Injectable()\nexport class FacetService {\n\n    /** The list of active facets */\n    facets$ = new BehaviorSubject<Facet[]>([]);\n\n    /** Emit all the events when they occur */\n    events$ = new Subject<FacetEvent>();\n\n    select(facet: Facet): void {\n\n        // if the facet is already selected or disabled then do nothing\n        if (this.isSelected(facet) || facet.disabled) {\n            return;\n        }\n\n        // update the list of active facets\n        this.facets$.next([...this.facets$.value, facet]);\n\n        // emit the event\n        this.events$.next(new FacetSelect(facet));\n    }\n\n    deselect(facet: Facet): void {\n\n        // if the facet is not selected then do nothing\n        if (!this.isSelected(facet)) {\n            return;\n        }\n\n        // update the list of active facets\n        this.facets$.next(this.facets$.value.filter(_selectedFacet => !this.isFacetMatch(_selectedFacet, facet)));\n\n        // emit the event\n        this.events$.next(new FacetDeselect(facet));\n    }\n\n    deselectAll(): void {\n\n        // empty the list of active facets\n        this.facets$.next([]);\n\n        // emit the event\n        this.events$.next(new FacetDeselectAll());\n    }\n\n    toggle(facet: Facet): void {\n        this.isSelected(facet) ? this.deselect(facet) : this.select(facet);\n    }\n\n    isSelected(facet: Facet): boolean {\n        return !!this.facets$.value.find((_selectedFacet) => this.isFacetMatch(_selectedFacet, facet));\n    }\n\n    private isFacetMatch(facet1: Facet, facet2: Facet): boolean {\n        if (facet1.id === undefined || facet2.id === undefined) {\n            return facet1 === facet2;\n        }\n\n        return facet1.id === facet2.id;\n    }\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';\nimport { Facet } from '../../models/facet';\n\n@Component({\n    selector: 'ux-facet-check-list-item',\n    templateUrl: './facet-check-list-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false\n})\nexport class FacetCheckListItemComponent implements FocusableOption {\n\n    @Input() @HostBinding()\n    id: string;\n\n    @Input() facet: Facet = null;\n    @Input() selected: boolean = false;\n    @Input() tabbable: boolean = false;\n    @Input() simplified: boolean = false;\n    @Output() selectedChange = new EventEmitter<Facet>();\n    @Output() itemFocus = new EventEmitter<void>();\n    @Output() itemBlur = new EventEmitter<void>();\n    @ViewChild('option', { static: true }) option: ElementRef;\n\n    get disabled(): boolean {\n        return this.facet && this.facet.disabled;\n    }\n\n    getLabel(): string {\n        return this.facet ? this.facet.title : '';\n    }\n\n    focus(): void {\n        this.option.nativeElement.focus();\n    }\n}\n","<div #option\n  uxFocusIndicator\n  class=\"facet-check-list-item\"\n  [class.facet-active]=\"selected\"\n  [attr.aria-checked]=\"selected\"\n  role=\"option\"\n  [tabindex]=\"tabbable ? 0 : -1\"\n  (focus)=\"itemFocus.emit()\"\n  (blur)=\"itemBlur.emit()\"\n  (click)=\"selectedChange.emit(facet)\"\n  (keydown.enter)=\"selectedChange.emit(facet)\"\n  (keydown.space)=\"selectedChange.emit(facet); $event.preventDefault()\"\n  (keydown.spacebar)=\"selectedChange.emit(facet); $event.preventDefault()\"\n  [class.disabled]=\"facet?.disabled\">\n\n  <!-- Show check icon to indicate the state -->\n  <ux-checkbox [clickable]=\"false\" [value]=\"selected\" [simplified]=\"simplified\" [tabindex]=\"-1\" [disabled]=\"disabled\" [id]=\"id + '-checkbox'\">\n    <span class=\"facet-check-list-item-title\">{{ facet?.title }}</span>\n    @if (facet?.count !== undefined) {\n      <span class=\"facet-check-list-item-count\">({{ facet?.count }})</span>\n    }\n  </ux-checkbox>\n</div>","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { AfterViewInit, Component, EventEmitter, HostBinding, inject, Input, OnDestroy, Output, QueryList, ViewChildren } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FacetDeselect, FacetDeselectAll, FacetEvent, FacetSelect } from '../facet-events';\nimport { FacetService } from '../facet.service';\nimport { Facet } from '../models/facet';\nimport { FacetCheckListItemComponent } from './check-list-item/facet-check-list-item.component';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-facet-check-list',\n    templateUrl: './facet-check-list.component.html'\n})\nexport class FacetCheckListComponent implements AfterViewInit, OnDestroy {\n    readonly facetService = inject(FacetService);\n\n    @Input() @HostBinding()\n    id: string = `ux-facet-check-list-${uniqueId++}`;\n\n    /** This will allow you to define an initial set of selected facets. */\n    @Input() set selected(selection: Facet[]) {\n        if (Array.isArray(selection)) {\n            selection.forEach(facet => this.facetService.select(facet));\n        }\n    }\n\n    /** Defines the complete list of facets that can be selected. */\n    @Input() facets: Facet[] = [];\n\n    /** Defines the text displayed at the top of the Facet Check List. */\n    @Input() header: string;\n\n    /** If `false` the list will grow to display all possible facets. If `true` a scrollbar will appear to prevent the list from growing too large. */\n    @Input() scrollbar: boolean = true;\n\n    /** Defines whether or not the checkboxes will appear in simplified form. */\n    @Input() simplified: boolean = false;\n\n    /** Defines whether or not the Facet Check List should be initially expanded or not. */\n    @Input() expanded: boolean = true;\n\n    /**\n     * This will be triggered when a facet is selected, deselected or all facets are deselected.\n     * The event will be an instance of either `FacetSelect`, `FacetDeselect` or `FacetDeselectAll` and\n     * will contain the facet being selected or deselected in a `facet` property (deselect all will not contain affected facets).\n     */\n    @Output() events: Subject<FacetEvent> = new Subject<FacetEvent>();\n\n    /** If two-way binding is used this array will get updated any time the selected facets change. */\n    @Output() selectedChange: EventEmitter<Facet[]> = new EventEmitter<Facet[]>();\n\n    @ViewChildren(FacetCheckListItemComponent) options: QueryList<FacetCheckListItemComponent>;\n\n    isFocused: boolean = false;\n    activeIndex: number = 0;\n\n    private readonly _onDestroy = new Subject<void>();\n    private _focusKeyManager: FocusKeyManager<FacetCheckListItemComponent>;\n\n    constructor() {\n\n        this.facetService.events$.pipe(takeUntil(this._onDestroy)).subscribe(event => {\n\n            // deselect all events should always be emitted\n            if (event instanceof FacetDeselectAll) {\n                this.events.next(event);\n                this.selectedChange.next([]);\n            }\n\n            // selection and deselection events should only be emitted when the facet belongs to this component\n            if ((event instanceof FacetSelect || event instanceof FacetDeselect) && this.isOwnFacet(event.facet)) {\n                this.events.next(event);\n                this.selectedChange.next(this.getSelectedFacets());\n            }\n        });\n    }\n\n    ngAfterViewInit(): void {\n        this._focusKeyManager = new FocusKeyManager(this.options)\n            .withVerticalOrientation();\n\n        this._focusKeyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(index => this.activeIndex = index);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    onFocus(index: number): void {\n        if (this._focusKeyManager.activeItemIndex === -1) {\n            this._focusKeyManager.setActiveItem(index);\n        }\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        this._focusKeyManager.onKeydown(event);\n    }\n\n    toggleFacet(index: number, facet: Facet): void {\n        this.facetService.toggle(facet);\n        this._focusKeyManager.setActiveItem(index);\n    }\n\n    private getSelectedFacets(): Facet[] {\n        return this.facetService.facets$.value.filter(facet => this.isOwnFacet(facet));\n    }\n\n    private isOwnFacet(facet: Facet): boolean {\n        return this.facets.indexOf(facet) !== -1;\n    }\n}\n","<ux-facet-header [header]=\"header\" [(expanded)]=\"expanded\"></ux-facet-header>\n\n<!-- Create a container which will show when section is expanded -->\n@if (expanded) {\n  <div class=\"facet-check-list-container\"\n    tabindex=\"-1\"\n    role=\"listbox\"\n    [class.facet-check-list-scrollbar]=\"scrollbar\"\n    [class.facet-check-list-scrollbar-focused]=\"isFocused\"\n    >\n    <!-- Iterate through each possible facet -->\n    @for (facet of facets; track facet; let index = $index) {\n      <ux-facet-check-list-item\n        [id]=\"id + '-check-list-item-' + index\"\n        [facet]=\"facet\"\n        [simplified]=\"simplified\"\n        [tabbable]=\"activeIndex === index\"\n        [selected]=\"facetService.isSelected(facet)\"\n        (selectedChange)=\"toggleFacet(index, facet)\"\n        (keydown)=\"onKeydown($event)\"\n        (itemFocus)=\"isFocused = true; onFocus(index)\"\n        (itemBlur)=\"isFocused = false\">\n      </ux-facet-check-list-item>\n    }\n  </div>\n}","import { Directive } from '@angular/core';\n\n@Directive({\n  selector: '[uxFacetClearButton]'\n})\nexport class FacetClearButtonDirective {}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { AfterViewInit, Component, ContentChild, EventEmitter, inject, Input, OnDestroy, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { ReorderEvent } from '../../directives/reorderable/index';\nimport { FacetClearButtonDirective } from './facet-clear-button/facet-clear-button.directive';\nimport { FacetDeselect, FacetEvent } from './facet-events';\nimport { FacetService } from './facet.service';\nimport { Facet } from './models/facet';\nimport { CdkDragEnter, CdkDropList, DragRef, moveItemInArray } from '@angular/cdk/drag-drop';\n\n@Component({\n    selector: 'ux-facet-container',\n    templateUrl: './facet-container.component.html',\n    providers: [FacetService],\n    preserveWhitespaces: false\n})\nexport class FacetContainerComponent implements OnDestroy, AfterViewInit {\n    readonly facetService = inject(FacetService);\n    private readonly _announcer = inject(LiveAnnouncer);\n\n    /** Defines the text displayed at the top of the Facet Container. */\n    @Input() header: string = 'Selected';\n\n    /** Defines the text to display in the tooltip when hovering over the clear all button. */\n    @Input() clearTooltip: string = 'Clear All';\n\n    /** Defines the text to display when there are no selected facets. */\n    @Input() emptyText: string = 'No Items';\n\n    /** Determines if the facets can be reordered. */\n    @Input() facetsReorderable: boolean = false;\n\n    /** Allows a predefined set of Facets to be displayed. */\n    @Input() set facets(facets: Facet[]) {\n        this.facetService.facets$.next(facets);\n    }\n\n    get facets(): Facet[] {\n        return this.facetService.facets$.value;\n    }\n\n    /** Defines the aria-label for the clear all button. */\n    @Input() clearAriaLabel: string = 'Clear All';\n\n    /** Defines the aria-label for the deselect facet button.. */\n    @Input() deselectFacetAriaLabel: string = 'Deselect Facet';\n\n    /** If using two-way binding this array will update when the selected facets change. */\n    @Output() facetsChange: EventEmitter<Facet[]> = new EventEmitter<Facet[]>();\n\n    /**\n     * This will be triggered when a facet is selected, deselected or all facets are deselected.\n     * The event will be an instance of either `FacetSelect`, `FacetDeselect` or `FacetDeselectAll` and\n     * will contain the facet being selected or deselected in a `facet` property\n     * (deselect all will not contain affected facets). */\n    @Output() events: EventEmitter<FacetEvent> = new EventEmitter<FacetEvent>();\n\n    /** Allow a custom clear button */\n    @ContentChild(FacetClearButtonDirective, { read: TemplateRef, static: false }) clearButton: TemplateRef<FacetClearButtonDirective>;\n\n    @ViewChild(CdkDropList) placeholder: CdkDropList;\n\n    private target: CdkDropList = null;\n    private targetIndex: number;\n    private source: CdkDropList = null;\n    private sourceIndex: number;\n    private dragRef: DragRef = null;\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        this.facetService.facets$.subscribe(facets => this.facetsChange.next(facets));\n        this.facetService.events$.subscribe(event => this.triggerEvent(event));\n\n        // announce deselection\n        this.facetService.events$.pipe(filter<FacetDeselect>(event => event instanceof FacetDeselect))\n            .subscribe(event => this._announcer.announce(`Option ${event.facet.title} deselected.`, 'assertive'));\n    }\n\n    ngAfterViewInit() {\n        const placeholderElement = this.placeholder.element.nativeElement;\n        placeholderElement.style.display = 'none';\n        placeholderElement.parentNode.removeChild(placeholderElement);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    onDropListDropped() {\n        if (!this.target) {\n            return;\n        }\n        const placeholderElement: HTMLElement = this.placeholder.element.nativeElement;\n        const placeholderParentElement: HTMLElement = placeholderElement.parentElement;\n        placeholderElement.style.display = 'none';\n\n        placeholderParentElement.removeChild(placeholderElement);\n        placeholderParentElement.appendChild(placeholderElement);\n        placeholderParentElement.insertBefore(\n            this.source.element.nativeElement,\n            placeholderParentElement.children[this.sourceIndex]\n        );\n\n        if (this.placeholder._dropListRef.isDragging()) {\n            this.placeholder._dropListRef.exit(this.dragRef);\n        }\n\n        this.target = null;\n        this.source = null;\n        this.dragRef = null;\n\n        if (this.sourceIndex !== this.targetIndex) {\n            moveItemInArray(this.facets, this.sourceIndex, this.targetIndex);\n        }\n    }\n\n    onDropListEntered({ item, container }: CdkDragEnter) {\n        if (container == this.placeholder) {\n            return;\n        }\n        const placeholderElement: HTMLElement = this.placeholder.element.nativeElement;\n        const sourceElement: HTMLElement = item.dropContainer.element.nativeElement;\n        const dropElement: HTMLElement = container.element.nativeElement;\n        \n        const dragIndex: number = Array.prototype.indexOf.call(\n            dropElement.parentElement.children,\n            this.source ? placeholderElement : sourceElement\n        );\n        const dropIndex: number = Array.prototype.indexOf.call(\n            dropElement.parentElement.children,\n            dropElement\n        );\n\n        if (!this.source) {\n            this.sourceIndex = dragIndex;\n            this.source = item.dropContainer;\n            sourceElement.parentElement.removeChild(sourceElement);\n        }\n\n        this.targetIndex = dropIndex;\n        this.target = container;\n        this.dragRef = item._dragRef;\n        placeholderElement.style.display = '';\n\n        dropElement.parentElement.insertBefore(\n            placeholderElement,\n            dropIndex > dragIndex ? dropElement.nextSibling : dropElement\n        );\n\n        this.placeholder._dropListRef.enter(\n            item._dragRef,\n            item.element.nativeElement.offsetLeft,\n            item.element.nativeElement.offsetTop,\n        );\n    }\n\n    selectFacet(facet: Facet): void {\n        this.facetService.select(facet);\n    }\n\n    deselectFacet(facet: Facet, tag?: HTMLElement): void {\n\n        // find the index of the item in the selected array\n        const idx = this.facets.findIndex(selectedFacet => facet === selectedFacet);\n\n        // if match there was no match then finish\n        if (idx === -1) {\n            return;\n        }\n\n        // remove the last item\n        this.facetService.deselect(facet);\n\n        // announce the facet removal\n        this._announcer.announce(`Option ${facet.title} deselected.`, 'assertive');\n\n        // focus another tag if there is one\n        if (tag) {\n            const sibling = tag.previousElementSibling || tag.nextElementSibling;\n\n            // if there is a sibling then focus it\n            if (sibling) {\n                (sibling as HTMLElement).focus();\n            }\n        }\n    }\n\n    deselectAllFacets(): void {\n\n        // empty the selected array\n        this.facetService.deselectAll();\n\n        // announce the facet removal\n        this._announcer.announce('All options deselected.', 'assertive');\n    }\n\n    trackBy(_index: number, facet: Facet): string | number {\n        return facet.id || facet.title;\n    }\n\n    shiftRight(facet: Facet, element: HTMLElement): void {\n        // only move the item if reordering is allowed\n        if (this.facetsReorderable === false) {\n            return;\n        }\n\n        // perform the movement\n        this.shiftFacet(facet, 1);\n\n        // the item may become unfocused during the reorder so we should refocus it\n        requestAnimationFrame(() => element.focus());\n\n        // announce the move\n        this._announcer.announce(`Option ${facet.title} moved down.`);\n    }\n\n    shiftLeft(facet: Facet, element: HTMLElement): void {\n        // only move the item if reordering is allowed\n        if (this.facetsReorderable === false) {\n            return;\n        }\n\n        // perform the movement\n        this.shiftFacet(facet, -1);\n\n        // the item may become unfocused during the reorder so we should refocus it\n        requestAnimationFrame(() => element.focus());\n\n        // announce the move\n        this._announcer.announce(`Option ${facet.title} moved up.`);\n    }\n\n    private shiftFacet(facet: Facet, distance: number) {\n        const index = this.facets.indexOf(facet);\n        const target = index + distance;\n\n        // Ensure the move is valid\n        if (target < 0 || target === this.facets.length) {\n            return;\n        }\n\n        // Perform the move\n        this.facets.splice(index, 1);\n        this.facets.splice(target, 0, facet);\n    }\n\n    private triggerEvent(event: FacetEvent) {\n        this.events.next(event);\n    }\n}\n\nexport interface FacetReorderEvent extends ReorderEvent {\n    index: number;\n}\n","<!-- Display Any Selected Facets -->\n<div class=\"facets-selected-container\">\n\n  <!-- Display Title an Clear Button -->\n  <div class=\"facets-selected-header-container\">\n\n    <!-- Show The Selected Text -->\n    <span class=\"facets-selected-header-label\">{{ header }}</span>\n\n    <!-- Add a Clear Button -->\n    @if ((facetService.facets$ | async).length > 0) {\n      <ng-container [ngTemplateOutlet]=\"clearButton || clearButtonDefault\"></ng-container>\n    }\n\n  </div>\n\n  <!-- Display Tags For Selected Items -->\n  <div class=\"facets-selected-list\"\n    cdkDropListGroup\n    role=\"list\">\n\n    <div\n      cdkDropList\n      (cdkDropListEntered)=\"onDropListEntered($event)\"\n      (cdkDropListDropped)=\"onDropListDropped()\"\n    ></div>\n\n    <!-- Show Selected Tags -->\n    @for (facet of (facetService.facets$ | async); track trackBy($index, facet)) {\n      <div #tag\n        class=\"facet-selected-tag\"\n        role=\"listitem\"\n        tabindex=\"0\"\n        cdkDropList\n        (cdkDropListEntered)=\"onDropListEntered($event)\"\n        (cdkDropListDropped)=\"onDropListDropped()\"\n        [attr.aria-label]=\"facet.title\"\n        (mousedown)=\"tag.focus()\"\n        (touchmove)=\"$event.preventDefault()\"\n        (keydown.ArrowRight)=\"shiftRight(facet, tag)\"\n        (keydown.ArrowLeft)=\"shiftLeft(facet, tag)\">\n        @if (facetsReorderable) {\n          <div class=\"facet-drag-item\" cdkDrag>\n            <!-- Display Label -->\n            <span class=\"facet-selected-tag-label\">{{ facet.title }}</span>\n            <!-- Display Remove Icon -->\n            <button type=\"button\"\n              uxFocusIndicator\n              class=\"facet-selected-remove-btn\"\n              [attr.aria-label]=\"deselectFacetAriaLabel\"\n              (click)=\"deselectFacet(facet, tag)\">\n              <ux-icon name=\"close\"></ux-icon>\n            </button>\n          </div>\n        } @else {\n          <span class=\"facet-selected-tag-label\">{{ facet.title }}</span>\n          <button type=\"button\"\n            uxFocusIndicator\n            class=\"facet-selected-remove-btn\"\n            [attr.aria-label]=\"deselectFacetAriaLabel\"\n            (click)=\"deselectFacet(facet, tag)\">\n            <ux-icon name=\"close\"></ux-icon>\n          </button>\n        }\n      </div>\n    }\n\n  </div>\n\n  <!-- Show Message Here if No Facets Selected -->\n  @if (emptyText && (facetService.facets$ | async).length === 0) {\n    <p class=\"facets-selected-none-label\">{{ emptyText }}</p>\n  }\n\n</div>\n\n<!-- Any Facet Elements Should be Added Here By User -->\n<div class=\"facets-region\">\n  <ng-content></ng-content>\n</div>\n\n<ng-template #clearButtonDefault>\n  <button type=\"button\"\n    class=\"btn btn-link btn-icon button-secondary\"\n    tabindex=\"0\"\n    [attr.aria-label]=\"clearAriaLabel\"\n    [uxTooltip]=\"clearTooltip\"\n    placement=\"left\"\n    (click)=\"deselectAllFacets()\">\n\n    <svg class=\"facets-selected-clear-graphic\" focusable=\"false\" viewBox=\"0 0 19 12\" shape-rendering=\"geometricPrecision\">\n      <rect class=\"light-grey\" x=\"0\" y=\"2\" width=\"7\" height=\"2\"></rect>\n      <rect class=\"dark-grey\" x=\"0\" y=\"5\" width=\"9\" height=\"2\"></rect>\n      <rect class=\"light-grey\" x=\"0\" y=\"8\" width=\"7\" height=\"2\"></rect>\n      <path class=\"dark-grey\" d=\"M9,1 h1 l9,9 v1 h-1 l-9,-9 v-1 Z\"></path>\n      <path class=\"dark-grey\" d=\"M9,11 v-1 l9,-9 h1 v1 l-9,9 h-1 Z\"></path>\n    </svg>\n  </button>\n</ng-template>\n","import { FocusOrigin } from '@angular/cdk/a11y';\n\n \nexport class TypeaheadOptionEvent<T = any> {\n    constructor(public option: T, public origin?: FocusOrigin) { }\n}","import { DOWN_ARROW, ENTER, ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Injectable } from '@angular/core';\nimport { TypeaheadComponent } from './typeahead.component';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TypeaheadKeyService<T = unknown> {\n\n    handleKey(event: KeyboardEvent, typeahead: TypeaheadComponent<T>): void {\n\n        if (!typeahead) {\n            return;\n        }\n\n        switch (event.keyCode) {\n\n            case UP_ARROW:\n                if (!typeahead.open) {\n                    typeahead.open = true;\n                } else {\n                    typeahead.moveHighlight(-1);\n                }\n                event.preventDefault();\n                break;\n\n            case DOWN_ARROW:\n                if (!typeahead.open) {\n                    typeahead.open = true;\n                } else {\n                    typeahead.moveHighlight(1);\n                }\n                event.preventDefault();\n                break;\n\n            case ESCAPE:\n                typeahead.open = false;\n                break;\n\n            case ENTER:\n                if (typeahead.selectOnEnter) {\n                    typeahead.selectHighlighted();\n                }\n        }\n    }\n}\n","import { Directive, inject, Input, Output, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Directive({\n    selector: '[uxInfiniteScrollLoadButton]'\n})\nexport class InfiniteScrollLoadButtonDirective {\n    private readonly _template = inject<TemplateRef<void>>(TemplateRef);\n\n    private readonly _viewContainer = inject(ViewContainerRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    @Input('uxInfiniteScrollLoadButton')\n    get visible() {\n        return this._visible;\n    }\n    set visible(value: boolean) {\n        if (value !== this._visible) {\n            if (value) {\n                const viewRef = this._viewContainer.createEmbeddedView(this._template);\n                this._renderer.listen(viewRef.rootNodes[0], 'click', this.onClick.bind(this));\n            } else {\n                this._viewContainer.clear();\n            }\n        }\n\n        this._visible = value;\n    }\n\n    @Output() loading: Observable<Event>;\n\n    private _visible: boolean = false;\n    private readonly _load = new Subject();\n\n    constructor() {\n        this.loading = this._load.asObservable() as Observable<Event>;\n    }\n\n    private onClick(event: MouseEvent) {\n        this._load.next(event);\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n    selector: '[uxInfiniteScrollLoading]'\n})\nexport class InfiniteScrollLoadingDirective {\n    private readonly _templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n    private readonly _viewContainer = inject(ViewContainerRef);\n\n    @Input('uxInfiniteScrollLoading')\n    get visible() {\n        return this._visible;\n    }\n    set visible(value: boolean | string) {\n        value = coerceBooleanProperty(value);\n\n        if (value !== this._visible) {\n            if (value) {\n                this._viewContainer.createEmbeddedView(this._templateRef);\n            } else {\n                this._viewContainer.clear();\n            }\n        }\n\n        this._visible = value;\n    }\n\n    private _visible: boolean = false;\n}\n","import { AfterContentInit, ContentChildren, Directive, ElementRef, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, QueryList, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, from, fromEvent, Observable, of, Subject, Subscription } from 'rxjs';\nimport { auditTime, combineLatest, filter as filterOperator, first, takeUntil } from 'rxjs/operators';\nimport { InfiniteScrollLoadButtonDirective } from './infinite-scroll-load-button.directive';\nimport { InfiniteScrollLoadingDirective } from './infinite-scroll-loading.directive';\n\n@Directive({\n    selector: '[uxInfiniteScroll]',\n    exportAs: 'uxInfiniteScroll'\n})\nexport class InfiniteScrollDirective<T = unknown> implements OnInit, AfterContentInit, OnChanges, OnDestroy {\n    private readonly _element = inject(ElementRef);\n\n    @Input('uxInfiniteScroll') load: InfiniteScrollLoadFunction<T>;\n\n    @Input('collection') _collection: T[] = [];\n    get collection() {\n        return this._collection;\n    }\n    set collection(value: T[]) {\n        this.collectionChange.emit(value);\n        this._collection = value;\n    }\n\n\n    @Input() set scrollElement(element: ElementRef | HTMLElement) {\n        this._scrollElement = element instanceof ElementRef ? element : new ElementRef(element);\n    }\n\n    @Input() enabled: boolean = true;\n     \n    @Input() filter: any;\n    @Input() loadOnInit: boolean = true;\n    @Input() loadOnScroll: boolean = true;\n    @Input() pageSize: number = 20;\n\n    @Output() collectionChange = new EventEmitter<T[]>();\n\n    @Output('loading')\n    loadingEvent = new EventEmitter<InfiniteScrollLoadingEvent>();\n\n    @Output('loaded')\n    loadedEvent = new EventEmitter<InfiniteScrollLoadedEvent>();\n\n    @Output('loadError')\n    loadErrorEvent = new EventEmitter<InfiniteScrollLoadErrorEvent>();\n\n    @ContentChildren(InfiniteScrollLoadButtonDirective)\n    private readonly _loadButtonQuery: QueryList<InfiniteScrollLoadButtonDirective>;\n\n    @ContentChildren(InfiniteScrollLoadingDirective)\n    private readonly _loadingIndicatorQuery: QueryList<InfiniteScrollLoadingDirective>;\n\n    private _pages: T[][];\n    private _nextPageNum = 0;\n    private _domObserver: MutationObserver;\n    private _scrollEventSub: Subscription;\n    private readonly _updateRequests = new Subject<InfiniteScrollRequest<T>>();\n\n    private readonly _isLoading = new BehaviorSubject<boolean>(false);\n    private readonly _isExhausted = new BehaviorSubject<boolean>(false);\n    private readonly _loadButtonEnabled = new BehaviorSubject<boolean>(false);\n    private readonly _canLoadManually: Observable<boolean>;\n\n    private _scrollElement: ElementRef;\n    private _subscriptions: Subscription[] = [];\n    private _loadButtonSubscriptions: Subscription[] = [];\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        this._canLoadManually = this._isLoading.pipe(combineLatest(\n            this._isExhausted,\n            this._loadButtonEnabled,\n            (isLoading, isExhausted, loadButtonEnabled) => {\n                return !isLoading && !isExhausted && loadButtonEnabled;\n            }\n        ));\n    }\n\n    ngOnInit(): void {\n        if (!this._scrollElement) {\n            this._scrollElement = this._element;\n        }\n\n        this._loadButtonEnabled.next(!this.loadOnScroll);\n    }\n\n    ngAfterContentInit(): void {\n\n        // There are two kinds of update requests: check and load.\n        // Check requests are throttled and will only cause an update if more data is required\n        // to fill the scrolling view, and it isn't already loading some.\n        // Load requests are not throttled and always request a page of data.\n        this._updateRequests.pipe(filterOperator(request => request.check), auditTime(200), takeUntil(this._onDestroy)).subscribe(this.doRequest.bind(this));\n        this._updateRequests.pipe(filterOperator(request => !request.check), takeUntil(this._onDestroy)).subscribe(this.doRequest.bind(this));\n\n        if (this.enabled) {\n            // Subscribe to scroll events and DOM changes.\n            this.attachEventHandlers();\n        }\n\n        // Connect the Load More button visible state.\n        this._canLoadManually.pipe(takeUntil(this._onDestroy)).subscribe(canLoad => {\n            this._loadButtonQuery.forEach(loadButton => {\n                loadButton.visible = canLoad;\n            });\n        });\n\n        // Connect the loading indicator visible state.\n        this._isLoading.pipe(takeUntil(this._onDestroy)).subscribe(isLoading => {\n            this._loadingIndicatorQuery.forEach(loading => {\n                loading.visible = isLoading;\n            });\n        });\n\n        // Link the Load More button click event to trigger an update.\n        this.attachLoadButtonEvents();\n        this._loadButtonQuery.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            this.attachLoadButtonEvents();\n        });\n\n        // Initial update.\n        if (this.loadOnInit) {\n            this.loadNextPage();\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        let check = true;\n\n        if (changes.enabled && changes.enabled.currentValue !== changes.enabled.previousValue) {\n            if (changes.enabled.currentValue) {\n                this.attachEventHandlers();\n                this.reset();\n                check = false;\n            } else {\n                this.detachEventHandlers();\n            }\n        }\n\n        if (this.enabled) {\n\n            if (changes.filter && this.coerceFilter(changes.filter.currentValue) !== this.coerceFilter(changes.filter.previousValue)) {\n                this.reset();\n                check = false;\n            }\n\n            if (changes.loadOnScroll) {\n                this._loadButtonEnabled.next(\n                    !changes.loadOnScroll.currentValue\n                );\n            }\n\n            if (changes.pageSize && changes.pageSize.currentValue !== changes.pageSize.previousValue) {\n                this.reset();\n                check = false;\n            }\n\n            this._updateRequests.next({\n                check,\n                pageNumber: this._nextPageNum,\n                pageSize: this.pageSize,\n                filter: this.coerceFilter(this.filter) as T\n            });\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.detachEventHandlers();\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Request an additional page of data.\n     */\n    loadNextPage(): void {\n        if (!this.enabled) {\n            return;\n        }\n\n        this._updateRequests.next({\n            check: false,\n            pageNumber: this._nextPageNum,\n            pageSize: this.pageSize,\n            filter: this.coerceFilter(this.filter) as T\n        });\n    }\n\n    /**\n     * Request a check for whether an additional page of data is required. This is throttled.\n     */\n    check(): void {\n        if (!this.enabled) {\n            return;\n        }\n\n        this._updateRequests.next({\n            check: true,\n            pageNumber: this._nextPageNum,\n            pageSize: this.pageSize,\n            filter: this.coerceFilter(this.filter) as T\n        });\n    }\n\n    /**\n     * Clear the collection. Future requests will load from page 0.\n     */\n    reset(clearSubscriptions: boolean = true): void {\n        if (!this.enabled) {\n            return;\n        }\n\n        // Reset the page counter.\n        this._nextPageNum = 0;\n\n        // Clear the collection (without changing the reference).\n        if (this.collection) {\n            this.collection.length = 0;\n        }\n\n        if (this._subscriptions && clearSubscriptions) {\n            this._pages = [];\n\n            // Reset the exhausted flag, allowing the Load More button to appear.\n            this._isExhausted.next(false);\n\n            // reset the loading state\n            this._isLoading.next(false);\n\n            // Cancel any pending requests\n            this._subscriptions.forEach(request => request.unsubscribe());\n        }\n    }\n\n    /**\n     * Reload the data without clearing the view.\n     */\n    reload(): void {\n        this._pages?.forEach((page, i) => this.reloadPage(i));\n    }\n\n    /**\n     * Reload the data in a specific page without clearing the view.\n     * @param pageNum Page number\n     */\n    reloadPage(pageNum: number): void {\n        if (!this.enabled) {\n            return;\n        }\n\n        this._updateRequests.next({\n            check: false,\n            pageNumber: pageNum,\n            pageSize: this.pageSize,\n            filter: this.coerceFilter(this.filter) as T,\n            reload: true\n        });\n    }\n\n    /** A filter value of null or undefined should be considered the same as an empty string */\n    private coerceFilter(value: T | null | undefined): T | string {\n        return value === undefined || value === null ? '' : value;\n    }\n\n    /**\n     * Attach scroll event handler and DOM observer.\n     */\n    private attachEventHandlers(): void {\n\n        // if the scrollElement is documentElement we must watch for a scroll event on the document\n        const target = this._scrollElement.nativeElement instanceof HTMLHtmlElement ? document : this._scrollElement.nativeElement;\n\n        // Subscribe to the scroll event on the target element.\n        this._scrollEventSub = fromEvent(target, 'scroll').subscribe(this.check.bind(this));\n\n        // Subscribe to child DOM changes. The main effect of this is to check whether even more data is\n        // required after the initial load.\n        this._domObserver = new MutationObserver(this.check.bind(this));\n        this._domObserver.observe(this._scrollElement.nativeElement, {\n            childList: true,\n            subtree: true\n        });\n    }\n\n    /**\n     * Detach scroll event handler and DOM observer.\n     */\n    private detachEventHandlers(): void {\n        if (this._scrollEventSub) {\n            this._scrollEventSub.unsubscribe();\n            this._scrollEventSub = null;\n        }\n\n        if (this._domObserver) {\n            this._domObserver.disconnect();\n            this._domObserver = null;\n        }\n    }\n\n    /**\n     * Remove any existing event subscriptions for the load button `loading` event, then attach\n     * subscriptions\n     * for any in the query.\n     */\n    private attachLoadButtonEvents(): void {\n        this._loadButtonSubscriptions.forEach(s => s.unsubscribe());\n        this._loadButtonSubscriptions = this._loadButtonQuery.map(\n            loadButton => loadButton.loading.subscribe(this.loadNextPage.bind(this))\n        );\n    }\n\n    /**\n     * Conditionally loads a page into the collection based on directive state and request parameters.\n     */\n    private doRequest(request: InfiniteScrollRequest<T>): void {\n\n        // Load a new page if the scroll position is beyond the threshhold and if the client code did not\n        // cancel.\n        if (this.needsData(request) && this.beginLoading(request)) {\n\n            // Invoke the callback load function, which returns a promose or plain data.\n            const loadResult = this.load(request.pageNumber, request.pageSize, request.filter);\n\n            if (loadResult === null) {\n                return;\n            }\n\n            const observable = Array.isArray(loadResult) ? of(loadResult) : from(loadResult);\n\n            let completed: boolean = false;\n\n            // subscription needs to be a let here if subscription completes right away the complete function can be called\n            // before the assignment. While browsers will ignore this currently as we transpile\n            // all const/let statements to var, when this is no longer the case (or we are running in a test environment)\n            // const will be used and this can throw an error if we try to access a const variable before it is assigned\n            const subscription = observable.pipe(first()).subscribe(\n                items => {\n                    // Make sure that the parameters have not changed since the load started;\n                    // otherwise discard the results.\n                    if (request.filter === this.coerceFilter(this.filter) && request.pageSize === this.pageSize) {\n                        if (items && items.length) {\n                            this.setPageItems(request.pageNumber, items);\n                        }\n\n                        // Emit the loaded event\n                        this.endLoading(request, items);\n                    }\n                },\n                 \n                (reason: any) => {\n                    // Emit the loadError event\n                    this.endLoadingWithError(request, reason);\n                },\n                () => {\n                    // remove this request from the list\n                    this._subscriptions = this._subscriptions.filter(s => s !== subscription);\n\n                    completed = true;\n                }\n            );\n\n            // only add the subscription to the list of requests if it isnt complete.\n            if (!completed) {\n                this._subscriptions.push(subscription);\n            }\n\n        }\n    }\n\n    /**\n     * Returns true if the request should be fulfilled.\n     */\n    private needsData(request: InfiniteScrollRequest<T>): boolean {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Always load for a load request\n        if (!request.check) {\n            return true;\n        }\n\n        // Ignore a check request when the end of data has been detected, or if data is currently loading.\n        if (this._isExhausted.getValue() || this._isLoading.getValue()) {\n            return false;\n        }\n\n        // Load if the remaining scroll area is <= the element height.\n        if (this._scrollElement && this.loadOnScroll) {\n\n            const element = this._scrollElement.nativeElement;\n            const remainingScroll = element.scrollHeight - (element.scrollTop + element.clientHeight);\n            const isVisible = element.scrollHeight > 0;\n\n            return isVisible && remainingScroll <= element.clientHeight;\n        }\n\n        return false;\n    }\n\n    /**\n     * Updates state for the beginning of a load. Returns false if the `loading` event was cancelled.\n     */\n    private beginLoading(request: InfiniteScrollRequest<T>): boolean {\n\n        const event = new InfiniteScrollLoadingEvent(\n            request.pageNumber,\n            request.pageSize,\n            request.filter\n        );\n        this.loadingEvent.emit(event);\n\n        this._isLoading.next(!event.defaultPrevented());\n\n        return !event.defaultPrevented();\n    }\n\n    private setPageItems(pageNum: number, items: T[]) {\n        this._pages[pageNum] = items;\n        this.collection = this._pages.reduce((previous, current) => previous.concat(current), []);\n    }\n\n    /**\n     * Updates state from a successful load. Raises the `loaded` event.\n     */\n     \n    private endLoading(request: InfiniteScrollRequest<T>, data?: any): void {\n        this._isLoading.next(false);\n\n        const isExhausted = !!(data && data.length < this.pageSize);\n        this._isExhausted.next(isExhausted);\n\n        this.loadedEvent.emit(\n            new InfiniteScrollLoadedEvent(\n                request.pageNumber,\n                request.pageSize,\n                request.filter,\n                data,\n                isExhausted\n            )\n        );\n\n        if (!request.reload) {\n            this._nextPageNum += 1;\n        }\n    }\n\n    /**\n     * Updates state from a failed load. Raises the `loadError` event.\n     */\n     \n    private endLoadingWithError(request: InfiniteScrollRequest<T>, error: any): void {\n        this._isLoading.next(false);\n\n        this.loadErrorEvent.emit(\n            new InfiniteScrollLoadErrorEvent<T>(\n                request.pageNumber,\n                request.pageSize,\n                request.filter,\n                error\n            )\n        );\n    }\n}\n\n/**\n * The internal data associated with a load/check request.\n */\n \nclass InfiniteScrollRequest<S = any> {\n    check: boolean;\n    pageNumber: number;\n    pageSize: number;\n    filter: S;\n    reload?: boolean;\n}\n\n \nexport type InfiniteScrollLoadFunction<T = any, S = any> = (\n    pageNum: number,\n    pageSize: number,\n    filter: S\n) => T[] | Promise<T[]>;\n\n/**\n * Event raised before the `loading` function is called.\n */\n \nexport class InfiniteScrollLoadingEvent<S = any> {\n    private _defaultPrevented = false;\n\n    constructor(\n        /**\n         * The index of the requested page, starting from 0.\n         */\n        public pageNumber: number,\n        /**\n         * The number of items requested.\n         */\n        public pageSize: number,\n        /**\n         * The filter details as provided via the `filter` binding.\n         */\n        public filter: S\n    ) { }\n\n    /**\n     * Prevents the default behaviour of the `loading` event (loading function will not be called).\n     */\n    preventDefault(): void {\n        this._defaultPrevented = true;\n    }\n\n    defaultPrevented(): boolean {\n        return this._defaultPrevented;\n    }\n}\n\n/**\n * Event raised when the loading function result has been resolved and added to the collection.\n */\n \nexport class InfiniteScrollLoadedEvent<T = any, S = any> {\n    constructor(\n        /**\n         * The index of the requested page, starting from 0.\n         */\n        public pageNumber: number,\n        /**\n         * The number of items requested.\n         */\n        public pageSize: number,\n        /**\n         * The filter details as provided via the `filter` binding.\n         */\n        public filter: S,\n        /**\n         * The result of the promise returned from the loading function.\n         */\n        public data: T[],\n        /**\n         * True if the data is considered exhausted (number of items returned less than `pageSize`).\n         */\n        public exhausted: boolean\n    ) { }\n}\n\n/**\n * Event raised if the loading function returns a rejected promise.\n */\n \nexport class InfiniteScrollLoadErrorEvent<S = any> {\n    constructor(\n        /**\n         * The index of the requested page, starting from 0.\n         */\n        public pageNumber: number,\n        /**\n         * The number of items requested.\n         */\n        public pageSize: number,\n        /**\n         * The filter details as provided via the `filter` binding.\n         */\n        public filter: S,\n        /**\n         * The object provided when rejecting the promise.\n         */\n         \n        public error: any\n    ) { }\n}\n","import { InfiniteScrollLoadButtonDirective } from './infinite-scroll-load-button.directive';\nimport { InfiniteScrollLoadingDirective } from './infinite-scroll-loading.directive';\nimport { InfiniteScrollDirective } from './infinite-scroll.directive';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n    imports: [],\n    exports: [\n        InfiniteScrollDirective,\n        InfiniteScrollLoadButtonDirective,\n        InfiniteScrollLoadingDirective\n    ],\n    declarations: [\n        InfiniteScrollDirective,\n        InfiniteScrollLoadButtonDirective,\n        InfiniteScrollLoadingDirective\n    ],\n    providers: [],\n})\nexport class InfiniteScrollModule { }\n","import { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ElementRef, inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../../directives/resize/index';\n\n@Injectable()\nexport class PopoverOrientationService {\n    private readonly _resizeService = inject(ResizeService);\n\n    private readonly _viewportRuler = inject(ViewportRuler);\n\n    public createPopoverOrientationListener(\n        element: ElementRef | HTMLElement,\n        parentElement?: ElementRef | HTMLElement): PopoverOrientationListener {\n\n        const nativeElement = element instanceof ElementRef ? element.nativeElement : element;\n\n        const nativeElementParent = parentElement instanceof ElementRef ? parentElement.nativeElement : element;\n\n        return new PopoverOrientationListener(nativeElement, nativeElementParent, this._resizeService, this._viewportRuler);\n    }\n\n}\n\nexport class PopoverOrientationListener {\n\n    /** Allow subscribing to state changes */\n    orientation$ = new BehaviorSubject<PopoverOrientation>(1);\n\n    /** Max value the height of the dropdown can be */\n    maxHeight: number = 250;\n\n    /** Store the last known position and size */\n    private _rect: ClientRect;\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor(private readonly _element: HTMLElement,\n                private readonly _elementParent: HTMLElement,\n                private readonly _resizeService: ResizeService,\n                private readonly _viewportRuler: ViewportRuler) {\n\n        // watch for changes to the typeahead size\n        this._resizeService.addResizeListener(this._element).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => {\n                this.onScrollOrResize();\n            });\n\n        // watch for changes to the typeahead position when scrolling or resizing\n        fromEvent(window, 'scroll', { passive: true }).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.onScrollOrResize());\n        fromEvent(window, 'resize', { passive: true }).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.onScrollOrResize());\n\n    }\n\n    destroy(): void {\n        this.orientation$.complete();\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        this._resizeService.removeResizeListener(this._element);\n    }\n\n    private onScrollOrResize() {\n        this._rect = this._elementParent ? this._elementParent.parentElement.getBoundingClientRect() : this._element.parentElement.getBoundingClientRect();\n        // use the maxHeight input value if the element does not exist yet to prevent the direction from immediately changing when opened\n        const itemHeight = this._element.offsetHeight || this.maxHeight;\n        const viewportSize = this._viewportRuler.getViewportSize();\n        const bottomSpaceAvailable = viewportSize.height - this._rect.bottom - itemHeight;\n\n        this.orientation$.next(bottomSpaceAvailable <= 0 ? PopoverOrientation.Up : PopoverOrientation.Down);\n    }\n}\n\nexport const enum PopoverOrientation {\n    Up,\n    Down\n}\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class TypeaheadService {\r\n\r\n    open$ = new BehaviorSubject<boolean>(false);\r\n\r\n    highlightedElement$ = new BehaviorSubject<HTMLElement>(null);\r\n}","import { Directive, HostBinding, Input, SecurityContext, inject } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Directive({\n  standalone: true,\n  selector: '[uxSafeInnerHtml]',\n})\nexport class SafeInnerHtmlDirective {\n  private readonly _sanitizer = inject(DomSanitizer);\n\n  @HostBinding('innerHtml')\n  protected safeHtml?: SafeHtml;\n\n  @Input('uxSafeInnerHtml') set safeInnerHtml(value: string) {\n    // Angular's DomSanitizer allows anchor tags, however it does remove any dangerous attributes. That being said\n    // we still want to escape any anchor tags regardless.\n    value = value.replace(/<a/g, '&lt;a').replace(/<\\/a>/g, '&lt;/a&gt;');\n\n    this.safeHtml = this._sanitizer.sanitize(SecurityContext.HTML, value);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ScrollIntoViewService {\n\n    scrollIntoView(elem: HTMLElement, scrollParent: HTMLElement) {\n        const offsetTop = (elem.getBoundingClientRect().top + scrollParent.scrollTop) - scrollParent.getBoundingClientRect().top;\n        if (offsetTop < scrollParent.scrollTop) {\n            scrollParent.scrollTop = offsetTop;\n        } else {\n            const offsetBottom = offsetTop + elem.offsetHeight;\n            if (offsetBottom > (scrollParent.scrollTop + scrollParent.clientHeight)) {\n                scrollParent.scrollTop = offsetBottom - scrollParent.clientHeight;\n            }\n        }\n    }\n}","import { Directive, ElementRef, inject, Input, OnChanges } from '@angular/core';\nimport { ScrollIntoViewService } from './scroll-into-view.service';\n\n@Directive({\n    selector: '[uxScrollIntoViewIf]',\n    providers: [ScrollIntoViewService]\n })\nexport class ScrollIntoViewIfDirective implements OnChanges {\n    private readonly _element = inject(ElementRef);\n\n    private readonly _scrollIntoViewService = inject(ScrollIntoViewService);\n\n    @Input('uxScrollIntoViewIf') condition = false;\n    @Input() scrollParent: HTMLElement;\n\n    ngOnChanges() {\n        if (this.condition) {\n            setTimeout(() => this._scrollIntoViewService.scrollIntoView(this._element.nativeElement, this.scrollParent));\n        }\n    }\n}","import { Directive, ElementRef, inject, Input } from '@angular/core';\r\nimport { TypeaheadService } from './typeahead.service';\r\n\r\n@Directive({\r\n    selector: '[uxTypeaheadHighlight]'\r\n})\r\nexport class TypeaheadHighlightDirective {\r\n    private readonly _service = inject(TypeaheadService);\r\n\r\n    private readonly _elementRef = inject(ElementRef);\r\n\r\n    @Input('uxTypeaheadHighlight')\r\n    set highlight(value: boolean) {\r\n        if (value) {\r\n            this._service.highlightedElement$.next(this._elementRef.nativeElement);\r\n        }\r\n    }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { TypeaheadOptionApi } from './typeahead-option-api';\nimport { TypeaheadOptionContext } from './typeahead-option-context';\nimport { TypeaheadVisibleOption } from './typeahead-visible-option';\n\n@Component({\n    selector: 'ux-typeahead-options-list',\n    templateUrl: 'typeahead-options-list.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TypeaheadOptionsListComponent<T> {\n\n    @Input()\n    id: string;\n\n    @Input()\n    startIndex: number = 0;\n\n    @Input()\n    options: TypeaheadVisibleOption<T>[];\n\n    @Input()\n    highlighted: TypeaheadVisibleOption<T>;\n\n    @Input()\n    activeKey: string;\n\n    @Input()\n    disabledOptions: T[];\n\n    @Input()\n    isMultiselectable: boolean = false;\n\n    @Input()\n    optionTemplate: TemplateRef<TypeaheadOptionContext<T>>;\n\n    @Input()\n    optionApi: TypeaheadOptionApi;\n\n    @Input()\n    typeaheadElement: ElementRef<HTMLElement>;\n\n    @Input()\n    ariaLabel: string;\n\n    @Output()\n    optionMouseover = new EventEmitter<TypeaheadOptionDomEvent<T, MouseEvent>>();\n\n    @Output()\n    optionMousedown = new EventEmitter<TypeaheadOptionDomEvent<T, MouseEvent>>();\n\n    @Output()\n    optionClick = new EventEmitter<TypeaheadOptionDomEvent<T, MouseEvent>>();\n\n    trackByFn(_: number, option: TypeaheadVisibleOption<T>): string {\n        return option.key;\n    }\n}\n\nexport interface TypeaheadOptionDomEvent<T, E extends Event> {\n    option: TypeaheadVisibleOption<T>;\n    event: E;\n}\n","<ol\n  role=\"listbox\"\n  [attr.aria-label]=\"ariaLabel\"\n  [attr.aria-multiselectable]=\"isMultiselectable\">\n\n  @for (option of options; track trackByFn(i, option); let i = $index) {\n    <li\n      [attr.id]=\"id + '-option-' + (i + startIndex)\"\n      [class.disabled]=\"optionApi.getDisabled(option.value)\"\n      [class.highlighted]=\"highlighted?.key === option.key && highlighted?.isRecentOption === option.isRecentOption\"\n      [class.active]=\"activeKey === option.key && !option.isRecentOption\"\n      [uxTypeaheadHighlight]=\"highlighted?.key === option.key && highlighted?.isRecentOption === option.isRecentOption\"\n      [uxScrollIntoViewIf]=\"highlighted?.key === option.key && highlighted?.isRecentOption === option.isRecentOption\"\n      role=\"option\"\n      [attr.aria-selected]=\"isMultiselectable ? optionApi.getDisabled(option.value) : (activeKey === option.key ? true : null)\"\n      [scrollParent]=\"typeaheadElement.nativeElement\"\n      (mouseover)=\"optionMouseover.emit({ option: option, event: $event })\"\n      (mousedown)=\"optionMousedown.emit({ option: option, event: $event })\"\n      (click)=\"optionClick.emit({ option: option, event: $event })\">\n      <ng-container [ngTemplateOutlet]=\"optionTemplate\"\n        [ngTemplateOutletContext]=\"{option: option.value, api: optionApi}\">\n      </ng-container>\n    </li>\n  }\n\n</ol>\n","import { FocusOrigin } from '@angular/cdk/a11y';\r\nimport { coerceArray } from '@angular/cdk/coercion';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostBinding,\r\n  HostListener,\r\n  inject,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, Subject } from 'rxjs';\r\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport {\r\n  InfiniteScrollDirective,\r\n  InfiniteScrollLoadedEvent,\r\n  InfiniteScrollLoadFunction,\r\n} from '../../directives/infinite-scroll/index';\r\nimport {\r\n  PopoverOrientation,\r\n  PopoverOrientationListener,\r\n  PopoverOrientationService,\r\n} from '../../services/popover-orientation/popover-orientation.service';\r\nimport { TypeaheadOptionEvent } from './typeahead-event';\r\nimport { TypeaheadOptionApi } from './typeahead-option-api';\r\nimport { TypeaheadOptionContext } from './typeahead-option-context';\r\nimport { TypeaheadVisibleOption } from './typeahead-visible-option';\r\nimport { TypeaheadService } from './typeahead.service';\r\n\r\nlet uniqueId = 0;\r\n\r\n@Component({\r\n  selector: 'ux-typeahead',\r\n  templateUrl: 'typeahead.component.html',\r\n  providers: [TypeaheadService, PopoverOrientationService],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  host: {\r\n    '[class.open]': 'open',\r\n    '[style.maxHeight]': 'maxHeight',\r\n  },\r\n})\r\n \r\nexport class TypeaheadComponent<T = any> implements OnChanges, OnDestroy {\r\n  readonly typeaheadElement = inject(ElementRef);\r\n\r\n  readonly popoverOrientation = inject(PopoverOrientationService);\r\n\r\n  private readonly _changeDetector = inject(ChangeDetectorRef);\r\n\r\n  private readonly _service = inject(TypeaheadService);\r\n\r\n  @ViewChild(InfiniteScrollDirective) infiniteScroll: InfiniteScrollDirective;\r\n\r\n  /** Define a unique id for the typeahead */\r\n  @Input() @HostBinding('attr.id') id: string = `ux-typeahead-${++uniqueId}`;\r\n\r\n  /** Define the options or infinite load function */\r\n  @Input() options: T[] | InfiniteScrollLoadFunction;\r\n\r\n  /** Define the filter text */\r\n  @Input() filter: string;\r\n\r\n  /** Specify if the typeahead is open */\r\n  @Input()\r\n  get open() {\r\n    return this._service.open$.getValue();\r\n  }\r\n  set open(value: boolean) {\r\n    this._service.open$.next(value);\r\n  }\r\n\r\n  /** Extract the test to display from an option */\r\n  @Input() display: ((option: T) => string) | string;\r\n\r\n  /** Extract the key from an option */\r\n  @Input() key: ((option: T) => string) | string;\r\n\r\n  /** Specify which options are disabled */\r\n  @Input() set disabledOptions(options: T | T[]) {\r\n    this._disabledOptions = coerceArray(options);\r\n  }\r\n\r\n  get disabledOptions(): T | T[] {\r\n    return this._disabledOptions;\r\n  }\r\n\r\n  _disabledOptions: T[] = [];\r\n\r\n  /** Specify the drop direction */\r\n  @Input() dropDirection: 'auto' | 'up' | 'down' = 'down';\r\n\r\n  /** Specify the max height of the dropdown */\r\n  @Input()\r\n  get maxHeight(): string {\r\n    return this._maxHeight;\r\n  }\r\n\r\n  set maxHeight(maxHeight: string) {\r\n    this._maxHeight = maxHeight;\r\n    if (this.maxHeight.endsWith('px')) {\r\n      this._popoverOrientationListener.maxHeight = Number(this.maxHeight.slice(0, -2));\r\n    }\r\n  }\r\n\r\n  /** Specify the aria multi selectable attribute value */\r\n  @Input()\r\n  multiselectable: boolean = false;\r\n\r\n  /** Specify the aria label for the listbox */\r\n  @Input()\r\n  ariaLabel: string;\r\n\r\n  /** Specify if the dropdown should appear when the filter appears */\r\n  @Input() openOnFilterChange: boolean = true;\r\n\r\n  /** Specify the page size */\r\n  @Input() pageSize: number = 20;\r\n\r\n  /** Specify if we should select the first item by default */\r\n  @Input() selectFirst: boolean = true;\r\n\r\n  /** Specify if we should select an item on enter key press */\r\n  @Input() selectOnEnter: boolean = false;\r\n\r\n  /** Specify the loading state */\r\n  @Input() loading = false;\r\n\r\n  /** Specify a custom loading template */\r\n  @Input() loadingTemplate: TemplateRef<void>;\r\n\r\n  /** Specify a custom option template */\r\n  @Input() optionTemplate: TemplateRef<TypeaheadOptionContext<T>>;\r\n\r\n  /** Specify a custom template to display when there are no options */\r\n  @Input() noOptionsTemplate: TemplateRef<void>;\r\n\r\n  /** Specify the currently active item */\r\n  @Input() set active(item: T) {\r\n    this.activeKey = this.getKey(item);\r\n  }\r\n\r\n  /**\r\n   * An initial list of recently selected options, to be presented above the full list of options.\r\n   * Bind an empty array to `recentOptions` to enable this feature without providing an initial set.\r\n   */\r\n  @Input() recentOptions: ReadonlyArray<T>;\r\n\r\n  /** Maximum number of displayed recently selected options. */\r\n  @Input() recentOptionsMaxCount: number = 5;\r\n\r\n  @Input() recentOptionsHeadingTemplate: TemplateRef<void>;\r\n\r\n  @Input() optionsHeadingTemplate: TemplateRef<void>;\r\n\r\n  /** Emit when the open state changes */\r\n  @Output() openChange = new EventEmitter<boolean>();\r\n\r\n  /** Emit when an option is selected */\r\n  @Output() optionSelected = new EventEmitter<TypeaheadOptionEvent<T>>();\r\n\r\n  /** Emit whenever a highlighted item changes */\r\n  @Output() highlightedChange = new EventEmitter<T>();\r\n\r\n  /** Emit the highlighted element when it changes */\r\n  @Output() highlightedElementChange = new EventEmitter<HTMLElement>();\r\n\r\n  /** Emits when recently selected options change.*/\r\n  @Output() recentOptionsChange = new EventEmitter<ReadonlyArray<T>>();\r\n\r\n  activeKey: string = null;\r\n  clicking = false;\r\n  hasBeenOpened = false;\r\n  highlighted$ = new BehaviorSubject<TypeaheadVisibleOption<T>>(null);\r\n  loadOptionsCallback: InfiniteScrollLoadFunction;\r\n  visibleOptions$ = new BehaviorSubject<TypeaheadVisibleOption<T>[]>([]);\r\n  visibleRecentOptions$ = new BehaviorSubject<TypeaheadVisibleOption<T>[]>([]);\r\n  allVisibleOptions: TypeaheadVisibleOption<T>[] = [];\r\n\r\n  get highlighted(): T {\r\n    const value = this.highlighted$.getValue();\r\n    return value ? value.value : null;\r\n  }\r\n\r\n  /** Store the list of recent items */\r\n  private _recentOptions: T[];\r\n\r\n  private readonly _onDestroy = new Subject<void>();\r\n\r\n  private readonly _popoverOrientationListener: PopoverOrientationListener;\r\n\r\n  private _maxHeight = '250px';\r\n\r\n  @HostBinding('class.drop-up')\r\n  dropUp: boolean;\r\n\r\n  optionApi: TypeaheadOptionApi<T> = {\r\n    getKey: this.getKey.bind(this),\r\n    getDisplay: this.getDisplay.bind(this),\r\n    getDisplayHtml: this.getDisplayHtml.bind(this),\r\n    getDisabled: this.isDisabled.bind(this),\r\n  };\r\n\r\n  constructor() {\r\n    this.loadOptionsCallback = (pageNum: number, pageSize: number, filter: unknown) => {\r\n      if (typeof this.options === 'function') {\r\n        // Invoke the callback which may return an array or a promise.\r\n        const arrayOrPromise = this.options(pageNum, pageSize, filter);\r\n\r\n        // Map the results to an array of TypeaheadVisibleOption.\r\n        return Promise.resolve(arrayOrPromise).then(newOptions => {\r\n          if (!Array.isArray(newOptions)) {\r\n            return newOptions;\r\n          }\r\n\r\n          return this.getVisibleOptions(newOptions, '');\r\n        });\r\n      }\r\n      return null;\r\n    };\r\n\r\n    this._service.open$\r\n      .pipe(distinctUntilChanged(), takeUntil(this._onDestroy))\r\n      .subscribe(isOpen => {\r\n        this.openChange.emit(isOpen);\r\n\r\n        if (isOpen) {\r\n          this.hasBeenOpened = true;\r\n          this.initOptions();\r\n        }\r\n      });\r\n\r\n    this._popoverOrientationListener = this.popoverOrientation.createPopoverOrientationListener(\r\n      this.typeaheadElement.nativeElement,\r\n      this.typeaheadElement.nativeElement.parentElement\r\n    );\r\n\r\n    this._popoverOrientationListener.orientation$\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe(direction => {\r\n        if (this.dropDirection === 'auto') {\r\n          this.dropUp = direction === PopoverOrientation.Up;\r\n        }\r\n      });\r\n\r\n    this.highlighted$.pipe(takeUntil(this._onDestroy)).subscribe(next => {\r\n      this.highlightedChange.emit(next ? next.value : null);\r\n    });\r\n\r\n    combineLatest([this.visibleOptions$, this.visibleRecentOptions$])\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe(([visibleOptions, visibleRecentOptions]) => {\r\n        this.allVisibleOptions = [...visibleRecentOptions, ...visibleOptions];\r\n      });\r\n\r\n    combineLatest([this._service.open$, this._service.highlightedElement$, this.visibleOptions$])\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe(([open, highlightedElement, visibleOptions]) => {\r\n        this.highlightedElementChange.emit(\r\n          open && visibleOptions.length > 0 ? highlightedElement : null\r\n        );\r\n      });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    // Open the dropdown if the filter value updates\r\n    if (changes.filter) {\r\n      if (\r\n        this.openOnFilterChange &&\r\n        changes.filter.currentValue &&\r\n        changes.filter.currentValue.length > 0\r\n      ) {\r\n        // if the dropdown item was just selected, and we set the filter value to match the\r\n        // selected value then open will have also just been set to `false`, in which case we do\r\n        // not want to set open to `true`\r\n        if (\r\n          changes.open &&\r\n          changes.open.previousValue === true &&\r\n          changes.open.currentValue === false\r\n        ) {\r\n          return;\r\n        }\r\n\r\n        // show the dropdown\r\n        this.open = true;\r\n      }\r\n    }\r\n\r\n    // Cut off recentOptions at recentOptionsMaxCount\r\n    if (changes.recentOptions || changes.recentOptionsMaxCount) {\r\n      this._recentOptions = this.recentOptions\r\n        ? this.recentOptions.slice(0, this.recentOptionsMaxCount)\r\n        : undefined;\r\n\r\n      if (changes.recentOptionsMaxCount) {\r\n        // Avoid ExpressionChangedAfterChecked error\r\n        setTimeout(() => {\r\n          this.recentOptionsChange.emit(this._recentOptions);\r\n        });\r\n      }\r\n    }\r\n\r\n    if (changes.dropDirection) {\r\n      if (changes.dropDirection.currentValue === 'auto') {\r\n        this.dropUp =\r\n          this._popoverOrientationListener.orientation$.getValue() === PopoverOrientation.Up;\r\n      } else {\r\n        this.dropUp = changes.dropDirection.currentValue === 'up';\r\n      }\r\n    }\r\n\r\n    if (changes.options && changes.options.firstChange === false) {\r\n      this.infiniteScroll.reset(false);\r\n      this.infiniteScroll.reload();\r\n    }\r\n\r\n    // Re-filter visibleOptions\r\n    this.updateOptions();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._onDestroy.next();\r\n    this._onDestroy.complete();\r\n    this._popoverOrientationListener.destroy();\r\n  }\r\n\r\n  @HostListener('mousedown', ['$event', '$event.target'])\r\n  mousedownHandler(event: MouseEvent, target: HTMLElement): void {\r\n    this.clicking = true;\r\n\r\n    /**\r\n     * Chrome Bug Workaround: (https://bugs.chromium.org/p/chromium/issues/detail?id=6759)\r\n     * In Chrome, if the typeahead is within a tabbable element, e.g. it has a parent with\r\n     * `tabindex=\"0\"` like our side panel has, then clicking on a scrollbar will remove\r\n     * focus from the input element.\r\n     *\r\n     * To avoid this we can determine if the mousedown event occurred within the scrollbar\r\n     * region of the typeahead and if so preventDefault which will stop the input\r\n     * from losing focus\r\n     */\r\n    if (event.clientX >= target.clientWidth || event.clientY >= target.clientHeight) {\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseup')\r\n  mouseupHandler(): void {\r\n    this.clicking = false;\r\n  }\r\n\r\n  optionMousedownHandler(event: MouseEvent): void {\r\n    // Workaround to prevent focus changing when an option is clicked\r\n    event.preventDefault();\r\n  }\r\n\r\n  optionClickHandler(_event: MouseEvent, option: TypeaheadVisibleOption<T>): void {\r\n    this.select(option, 'mouse');\r\n  }\r\n\r\n  /**\r\n   * Returns the unique key value of the given option.\r\n   */\r\n  getKey(option: T): string {\r\n    if (typeof this.key === 'function') {\r\n      return this.key(option);\r\n    }\r\n    // eslint-disable-next-line no-prototype-builtins\r\n    if (typeof this.key === 'string' && option && option.hasOwnProperty(this.key)) {\r\n      return option[this.key];\r\n    }\r\n    return this.getDisplay(option);\r\n  }\r\n\r\n  /**\r\n   * Returns the display value of the given option.\r\n   */\r\n  getDisplay(option: T): string | undefined {\r\n    if (typeof this.display === 'function') {\r\n      return this.display(option);\r\n    }\r\n\r\n    // eslint-disable-next-line no-prototype-builtins\r\n    if (typeof this.display === 'string' && option && option.hasOwnProperty(this.display)) {\r\n      return option[this.display];\r\n    }\r\n\r\n    if (typeof option === 'string') {\r\n      return option;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the display value of the given option with HTML markup added to highlight the part which matches the current filter value.\r\n   * @param option\r\n   */\r\n  getDisplayHtml(option: T): string {\r\n    const displayText = this.getDisplay(option);\r\n\r\n    // getDisplay may return undefined in certain cases\r\n    if (!displayText) {\r\n      return '';\r\n    }\r\n\r\n    let displayHtml = displayText\r\n      .replace(/&/g, '&amp;')\r\n      .replace(/</g, '&lt;')\r\n      .replace(/>/g, '&gt;');\r\n\r\n    if (this.filter) {\r\n      const length = this.filter.length;\r\n      const matchIndex = displayText.toLowerCase().indexOf(this.filter.toLowerCase());\r\n      if (matchIndex >= 0) {\r\n        const highlight = `<span class=\"ux-filter-match\">${displayText.substr(\r\n          matchIndex,\r\n          length\r\n        )}</span>`;\r\n        displayHtml =\r\n          displayText.substr(0, matchIndex) + highlight + displayText.substr(matchIndex + length);\r\n      }\r\n    }\r\n    return displayHtml;\r\n  }\r\n\r\n  /**\r\n   * Returns true if the infinite scroll component should load\r\n   */\r\n  isInfiniteScroll(): boolean {\r\n    return typeof this.options === 'function';\r\n  }\r\n\r\n  /**\r\n   * Selects the given option, emitting the optionSelected event and closing the dropdown.\r\n   */\r\n  select(option: TypeaheadVisibleOption<T>, origin?: FocusOrigin): void {\r\n    if (!this.isDisabled(option.value)) {\r\n      this.optionSelected.emit(new TypeaheadOptionEvent(option.value, origin));\r\n      this.highlighted$.next(null);\r\n      this.open = false;\r\n      this.addToRecentOptions(option.value);\r\n    }\r\n  }\r\n\r\n  addToRecentOptions(value: T) {\r\n    if (this._recentOptions) {\r\n      this._recentOptions = [\r\n        value,\r\n        ...this._recentOptions.filter(recentOption => recentOption !== value),\r\n      ].slice(0, this.recentOptionsMaxCount);\r\n\r\n      this.recentOptionsChange.emit(this._recentOptions);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if the given option is part of the disabledOptions array.\r\n   */\r\n  isDisabled(option: T): boolean {\r\n    return Array.isArray(this.disabledOptions)\r\n      ? this.disabledOptions.some(\r\n          selectedOption => this.getKey(selectedOption) === this.getKey(option)\r\n        )\r\n      : false;\r\n  }\r\n\r\n  /**\r\n   * Set the given option as the current highlighted option, available in the highlightedOption parameter.\r\n   */\r\n  highlight(option: TypeaheadVisibleOption<T>): void {\r\n    if (!this.isDisabled(option.value)) {\r\n      this.highlighted$.next(option);\r\n      this._changeDetector.detectChanges();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Increment or decrement the highlighted option in the list. Disabled options are skipped.\r\n   * @param d Value to be added to the index of the highlighted option, i.e. -1 to move backwards, +1 to move forwards.\r\n   */\r\n  moveHighlight(d: -1 | 1): T {\r\n    const highlightIndex = this.indexOfVisibleOption(this.highlighted$.getValue());\r\n    let newIndex = highlightIndex;\r\n    let disabled = true;\r\n    let inBounds = true;\r\n    do {\r\n      newIndex = newIndex + d;\r\n      inBounds = newIndex >= 0 && newIndex < this.allVisibleOptions.length;\r\n      disabled = inBounds && this.isDisabled(this.allVisibleOptions[newIndex].value);\r\n    } while (inBounds && disabled);\r\n\r\n    if (!disabled && inBounds) {\r\n      this.highlight(this.allVisibleOptions[newIndex]);\r\n    }\r\n\r\n    return this.highlighted;\r\n  }\r\n\r\n  selectHighlighted(): void {\r\n    if (this.highlighted$.getValue()) {\r\n      this.select(this.highlighted$.getValue(), 'keyboard');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set up the options before the dropdown is displayed.\r\n   */\r\n  initOptions(): void {\r\n    // Clear previous highlight\r\n    this.highlighted$.next(null);\r\n    if (this.selectFirst) {\r\n      // This will highlight the first non-disabled option.\r\n      this.moveHighlight(1);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Display the first item as highlighted when there are several pages\r\n   */\r\n  onLoadedHighlight(event: InfiniteScrollLoadedEvent): void {\r\n    if (this.selectFirst && this.options && event.pageNumber === 0) {\r\n      // This will highlight the first non-disabled option.\r\n      this.moveHighlight(1);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update the visibleOptions and visibleRecentOptions arrays with the current filter.\r\n   */\r\n  updateOptions(): void {\r\n    const normalisedInput = (this.filter || '').toLowerCase();\r\n\r\n    // Create new visibleOptions only if `options` is not a function\r\n    if (typeof this.options === 'object') {\r\n      this.visibleOptions$.next(this.getVisibleOptions(this.options, normalisedInput));\r\n    }\r\n\r\n    this.visibleRecentOptions$.next(\r\n      this.getVisibleOptions(this._recentOptions, normalisedInput, true)\r\n    );\r\n\r\n    this.initOptions();\r\n\r\n    this._changeDetector.detectChanges();\r\n  }\r\n\r\n  /**\r\n   * Convert a set of raw options into a filtered list of `TypeaheadVisibleOption` objects.\r\n   * @param options Set of raw options\r\n   * @param filter The filter expression\r\n   * @param isRecentOptions Whether `options` is a set of recent options\r\n   */\r\n  private getVisibleOptions(\r\n    options: T[],\r\n    filter: string = '',\r\n    isRecentOptions: boolean = false\r\n  ): TypeaheadVisibleOption<T>[] {\r\n    if (options) {\r\n      return options\r\n        .filter(option => this.getDisplay(option).toLowerCase().indexOf(filter) >= 0)\r\n        .map(value => ({\r\n          value,\r\n          key: this.getKey(value),\r\n          isRecentOption: isRecentOptions,\r\n        }));\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * Return the index of the given option in the allVisibleOptions array.\r\n   * Returns -1 if the option is not currently visible.\r\n   */\r\n  private indexOfVisibleOption(option: TypeaheadVisibleOption<T>): number {\r\n    if (option) {\r\n      return this.allVisibleOptions.findIndex(el => {\r\n        return el.key === option.key && el.isRecentOption === option.isRecentOption;\r\n      });\r\n    }\r\n\r\n    return -1;\r\n  }\r\n}\r\n","<div\n  class=\"ux-typeahead-options\"\n  [uxInfiniteScroll]=\"loadOptionsCallback\"\n  [collection]=\"visibleOptions$ | async\"\n  (collectionChange)=\"visibleOptions$.next($event)\"\n  [enabled]=\"hasBeenOpened && isInfiniteScroll()\"\n  [filter]=\"filter\"\n  [loadOnScroll]=\"true\"\n  [pageSize]=\"pageSize\"\n  [scrollElement]=\"typeaheadElement\"\n  (loading)=\"loading = true\"\n  (loaded)=\"loading = false; onLoadedHighlight($event)\"\n  >\n  @if ((visibleRecentOptions$ | async).length > 0) {\n    <div>\n      <ng-container [ngTemplateOutlet]=\"recentOptionsHeadingTemplate\"></ng-container>\n    </div>\n  }\n\n  <!-- Recent options -->\n  @if ((visibleRecentOptions$ | async).length > 0) {\n    <ux-typeahead-options-list\n      class=\"ux-typeahead-recent-options\"\n      [id]=\"id\"\n      [options]=\"visibleRecentOptions$ | async\"\n      [highlighted]=\"highlighted$ | async\"\n      [activeKey]=\"activeKey\"\n      [disabledOptions]=\"_disabledOptions\"\n      [isMultiselectable]=\"multiselectable\"\n      [optionTemplate]=\"optionTemplate || defaultOptionTemplate\"\n      [optionApi]=\"optionApi\"\n      [typeaheadElement]=\"typeaheadElement\"\n      (optionMouseover)=\"highlight($event.option)\"\n      (optionMousedown)=\"optionMousedownHandler($event.event)\"\n      (optionClick)=\"optionClickHandler($event.event, $event.option)\"\n      >\n    </ux-typeahead-options-list>\n  }\n\n  <ng-container [ngTemplateOutlet]=\"optionsHeadingTemplate\"></ng-container>\n\n  <!-- All options -->\n  @if ((visibleOptions$ | async).length > 0) {\n    <ux-typeahead-options-list\n      class=\"ux-typeahead-all-options\"\n      [id]=\"id\"\n      [ariaLabel]=\"ariaLabel\"\n      [startIndex]=\"(visibleRecentOptions$ | async).length\"\n      [options]=\"visibleOptions$ | async\"\n      [highlighted]=\"highlighted$ | async\"\n      [activeKey]=\"activeKey\"\n      [disabledOptions]=\"_disabledOptions\"\n      [isMultiselectable]=\"multiselectable\"\n      [optionTemplate]=\"optionTemplate || defaultOptionTemplate\"\n      [optionApi]=\"optionApi\"\n      [typeaheadElement]=\"typeaheadElement\"\n      (optionMouseover)=\"highlight($event.option)\"\n      (optionMousedown)=\"optionMousedownHandler($event.event)\"\n      (optionClick)=\"optionClickHandler($event.event, $event.option)\"\n      >\n    </ux-typeahead-options-list>\n  }\n\n  <div *uxInfiniteScrollLoading>\n    <ng-container [ngTemplateOutlet]=\"loadingTemplate || defaultLoadingTemplate\"></ng-container>\n  </div>\n\n  @if (isInfiniteScroll() === false && (visibleOptions$ | async).length === 0 && loading) {\n    <div>\n      <ng-container [ngTemplateOutlet]=\"loadingTemplate || defaultLoadingTemplate\"></ng-container>\n    </div>\n  }\n</div>\n@if ((visibleOptions$ | async).length === 0 && !loading) {\n  <div>\n    <ng-container [ngTemplateOutlet]=\"noOptionsTemplate || defaultNoOptionsTemplate\"> </ng-container>\n  </div>\n}\n\n<ng-template #defaultLoadingTemplate>\n  <div class=\"ux-typeahead-loading\">\n    <div class=\"spinner spinner-accent spinner-bounce-middle\"></div>\n    <div>Loading...</div>\n  </div>\n</ng-template>\n\n<ng-template #defaultOptionTemplate let-option=\"option\" let-api=\"api\">\n  <span class=\"ux-typeahead-option\" [uxSafeInnerHtml]=\"api.getDisplayHtml(option)\"></span>\n</ng-template>\n\n<ng-template #defaultNoOptionsTemplate>\n  <span class=\"ux-typeahead-no-options\">No results</span>\n</ng-template>\n","import { AfterViewInit, Directive, ElementRef, inject, Input } from '@angular/core';\n\n@Directive({\n    selector: '[uxScrollIntoView]'\n})\nexport class ScrollIntoViewDirective implements AfterViewInit {\n    readonly _elementRef = inject(ElementRef);\n\n    /** Allow a condition around whether or not this should scroll into view */\n    @Input() uxScrollIntoView: boolean = true;\n\n    /** Allow user to provide the browser supported options */\n    @Input() scrollIntoViewOptions: ScrollIntoViewOptions | boolean = true;\n\n    ngAfterViewInit(): void {\n        if (this.uxScrollIntoView) {\n            this._elementRef.nativeElement.scrollIntoView(this.scrollIntoViewOptions);\n        }\n    }\n}","import { NgModule } from '@angular/core';\nimport { ScrollIntoViewIfDirective } from './scroll-into-view-if.directive';\nimport { ScrollIntoViewDirective } from './scroll-into-view.directive';\n\n\n@NgModule({\n    exports: [ScrollIntoViewIfDirective, ScrollIntoViewDirective],\n    declarations: [ScrollIntoViewIfDirective, ScrollIntoViewDirective]\n})\nexport class ScrollModule { }","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { InfiniteScrollModule } from '../../directives/infinite-scroll/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { SafeInnerHtmlDirective } from '../../directives/safe-inner-html/safe-inner-html.directive';\nimport { ScrollModule } from '../../directives/scroll/index';\nimport { PopoverOrientationService } from '../../services/popover-orientation/popover-orientation.service';\nimport { TypeaheadHighlightDirective } from './typeahead-highlight.directive';\nimport { TypeaheadOptionsListComponent } from './typeahead-options-list.component';\nimport { TypeaheadComponent } from './typeahead.component';\n\n@NgModule({\n  imports: [CommonModule, InfiniteScrollModule, ResizeModule, ScrollModule, SafeInnerHtmlDirective],\n  exports: [TypeaheadComponent],\n  declarations: [TypeaheadComponent, TypeaheadHighlightDirective, TypeaheadOptionsListComponent],\n  providers: [PopoverOrientationService],\n})\nexport class TypeaheadModule {}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { Facet } from '../../models/facet';\n\n@Component({\n    selector: 'ux-facet-typeahead-list-item',\n    templateUrl: './facet-typeahead-list-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false\n})\nexport class FacetTypeaheadListItemComponent implements FocusableOption {\n\n    @Input() facet: Facet;\n    @Input() selected: boolean = false;\n    @Input() simplified: boolean = false;\n    @Input() tabbable: boolean = false;\n\n    @Output() itemFocus = new EventEmitter<void>();\n    @Output() selectedChange = new EventEmitter<Facet>();\n\n    @ViewChild('option', { static: true }) option: ElementRef;\n\n    get disabled(): boolean {\n        return this.facet && this.facet.disabled;\n    }\n\n    getLabel(): string {\n        return this.facet ? this.facet.title : null;\n    }\n\n    focus(): void {\n        this.option.nativeElement.focus();\n    }\n}\n","<div #option\n  uxFocusIndicator\n  role=\"option\"\n  class=\"facet-typeahead-list-selected-option\"\n  [attr.aria-checked]=\"selected\"\n  [tabindex]=\"tabbable ? 0 : -1\"\n  (focus)=\"itemFocus.emit()\"\n  (click)=\"selectedChange.emit(facet)\"\n  (keydown.enter)=\"selectedChange.emit(facet)\"\n  (keydown.space)=\"selectedChange.emit(facet); $event.preventDefault()\"\n  (keydown.spacebar)=\"selectedChange.emit(facet); $event.preventDefault()\">\n\n  <ux-checkbox [clickable]=\"false\" [value]=\"selected\" [simplified]=\"simplified\" [tabindex]=\"-1\" [disabled]=\"disabled\">\n    <span class=\"facet-typeahead-list-selected-option-title\">{{ facet?.title }}</span>\n    @if (facet?.count !== undefined) {\n      <span class=\"facet-typeahead-list-selected-option-count\">({{ facet?.count }})</span>\n    }\n  </ux-checkbox>\n\n</div>","import { FocusKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { AfterViewInit, Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output, Pipe, PipeTransform, QueryList, ViewChildren } from '@angular/core';\nimport { BehaviorSubject, isObservable, Observable, of, Subject } from 'rxjs';\nimport { distinctUntilChanged, first, map, mergeMap, takeUntil, tap } from 'rxjs/operators';\nimport { tick } from '../../../common/index';\nimport { TypeaheadKeyService, TypeaheadOptionEvent } from '../../typeahead/index';\nimport { FacetDeselect, FacetDeselectAll, FacetEvent, FacetSelect } from '../facet-events';\nimport { FacetService } from '../facet.service';\nimport { Facet } from '../models/facet';\nimport { FacetTypeaheadListItemComponent } from './typeahead-list-item/facet-typeahead-list-item.component';\n\nlet uniqueId = 1;\n\n@Component({\n    selector: 'ux-facet-typeahead-list',\n    templateUrl: './facet-typeahead-list.component.html'\n})\nexport class FacetTypeaheadListComponent implements AfterViewInit, OnInit, OnDestroy {\n    readonly typeaheadKeyService = inject(TypeaheadKeyService);\n\n    readonly facetService = inject(FacetService);\n\n    private readonly _announcer = inject(LiveAnnouncer);\n\n    /** This will allow you to define an initial set of selected facets. */\n    @Input() set selected(selection: Facet[]) {\n        if (Array.isArray(selection)) {\n            selection.forEach(facet => this.facetService.select(facet));\n        }\n    }\n\n    /** Defines the complete list of facets that can be selected. Alternatively an observable can be used to allow values to be fetched dynamically. */\n    @Input() facets: Facet[] | Observable<Facet[]>;\n\n    /** Defines the text displayed at the top of the Facet Typeahead List. */\n    @Input() header: string;\n\n    /** Defines whether or not the Facet Typeahead List should be initially expanded or not. */\n    @Input() expanded: boolean = true;\n\n    /** Defines a list of facets which will be displayed above the typeahead to allow the user to quickly select some facets. */\n    @Input() suggestions: Facet[] = [];\n\n    /** Defines whether or not the checkboxes displayed alongside suggestions will appear in simplified form. */\n    @Input() simplified: boolean = true;\n\n    /** Defines the query displayed in the input field. */\n    @Input() set query(query: string) {\n        if (query !== this.query$.value) {\n            this.query$.next(query);\n        }\n    }\n\n    /** Emits the current query when the value of the input field changes. */\n    @Output() queryChange = new EventEmitter<string>();\n\n    /**\n     * This will be triggered when a facet is selected, deselected or all facets are deselected.\n     * The event will be an instance of either `FacetSelect`, `FacetDeselect` or `FacetDeselectAll` and\n     * will contain the facet being selected or deselected in a `facet` property (deselect all will not contain affected facets).\n     */\n    @Output() events: Subject<FacetEvent> = new Subject<FacetEvent>();\n\n    /** If two-way binding is used this array will get updated any time the selected facets change. */\n    @Output() selectedChange: EventEmitter<Facet[]> = new EventEmitter<Facet[]>();\n\n    /**\n     * Allows configuration of the typeahead control. The possible values are:\n     * - `placeholder` - **string** - Sets the placeholder of the typeahead.\n     * - `minCharacters` - **number** - Defines the minimum number of characters that are required before results will be shown. **Default**: `1`.\n     * - `maxResults` - **number** - Sets the maximum number of results to display. **Default**: `50`.\n     * - `delay` - **number** - Defines the number of milliseconds to wait before the results are filtered. **Default**: `0`.\n     */\n    @Input()\n    set typeaheadConfig(config: FacetTypeaheadListConfig) {\n        this._config = { placeholder: '', maxResults: 50, minCharacters: 1, ...config };\n    }\n\n    get typeaheadConfig(): FacetTypeaheadListConfig {\n        return this._config;\n    }\n\n    @ViewChildren(FacetTypeaheadListItemComponent) options: QueryList<FacetTypeaheadListItemComponent>;\n\n    query$ = new BehaviorSubject<string>('');\n    loading: boolean = false;\n    activeIndex: number = 0;\n    typeaheadId: string = `ux-facet-typeahead-${uniqueId++}`;\n    typeaheadOpen: boolean = false;\n    typeaheadOptions: Facet[] = [];\n    highlightedElement: HTMLElement;\n\n    private _facets: Facet[] = [];\n    private _selected: Facet[] = [];\n    private readonly _onDestroy = new Subject<void>();\n    private _config: FacetTypeaheadListConfig = { placeholder: '', maxResults: 50, minCharacters: 1 };\n    private _focusKeyManager: FocusKeyManager<FacetTypeaheadListItemComponent>;\n\n    ngOnInit(): void {\n\n        this.facetService.events$.pipe(takeUntil(this._onDestroy)).subscribe(event => {\n\n            // deselect all events should always be emitted\n            if (event instanceof FacetDeselectAll) {\n                this.events.next(event);\n                this._selected = [];\n                this.selectedChange.next(this._selected);\n            }\n\n            // if deselected remove the facet from our internal list of selected facets\n            if (event instanceof FacetDeselect && this.isOwnFacet(event.facet)) {\n                if (this._selected.indexOf(event.facet) !== -1) {\n                    this.events.next(event);\n                    this._selected = this._selected.filter(_facet => _facet !== event.facet);\n                    this.selectedChange.next(this._selected);\n                }\n            }\n\n            // selection and deselection events should only be emitted when the facet belongs to this component\n            if (event instanceof FacetSelect && this.isOwnFacet(event.facet)) {\n                if (this._selected.indexOf(event.facet) === -1) {\n                    this.events.next(event);\n                    this._selected = [...this._selected, event.facet];\n                    this.selectedChange.next(this._selected);\n                }\n            }\n        });\n\n        // store the original list of all possible facets\n        this.getFacetObservable().pipe(first()).subscribe(facets => this._facets = facets);\n    }\n\n    ngAfterViewInit(): void {\n\n        // emit the latest query whenever it changes\n        this.query$.pipe(takeUntil(this._onDestroy), distinctUntilChanged())\n            .subscribe(query => this.queryChange.emit(query));\n\n        // set up search query subscription\n        this.query$.pipe(\n            takeUntil(this._onDestroy),\n            tick(),\n            tap(() => {\n                this.loading = true;\n                this.typeaheadOptions = [];\n            }),\n            mergeMap(() => this.getFacetObservable().pipe(map(facets => {\n                return facets.filter(facet => !facet.disabled && !this.facetService.facets$.value.find(selectedFacet => selectedFacet === facet))\n                    .slice(0, this._config.maxResults);\n            })))\n        ).subscribe(facets => {\n            this.loading = false;\n            this.typeaheadOptions = facets;\n        });\n\n        this._focusKeyManager = new FocusKeyManager(this.options).withVerticalOrientation();\n        this._focusKeyManager.change.pipe(takeUntil(this._onDestroy)).subscribe(index => this.activeIndex = index);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        this._focusKeyManager.onKeydown(event);\n    }\n\n    onFocus(index: number): void {\n        if (this._focusKeyManager.activeItemIndex === -1) {\n            this._focusKeyManager.setActiveItem(index);\n        }\n    }\n\n    toggleFacet(index: number, facet: Facet): void {\n        // toggle selection\n        this.facetService.isSelected(facet) ? this.facetService.deselect(facet) : this.facetService.select(facet);\n\n        // focus the correct item\n        this._focusKeyManager.setActiveItem(index);\n    }\n\n    /** Only show typeahead if we have enough characters */\n    updateTypeahead(query: string = ''): void {\n        this.typeaheadOpen = query.length >= this._config.minCharacters;\n    }\n\n    getFacetObservable(): Observable<Facet[]> {\n        return isObservable(this.facets) ? this.facets : of(this.facets);\n    }\n\n    select(event: TypeaheadOptionEvent) {\n\n        // check to make sure that the item is not currently selected\n        if (this.facetService.isSelected(event.option)) {\n            return;\n        }\n\n        // select the facet\n        this.facetService.select(event.option);\n\n        // clear the typeahead\n        this.query$.next('');\n\n        // announce the selected facet\n        this._announcer.announce(`${(event.option as Facet).title} selected.`);\n    }\n\n    private isOwnFacet(facet: Facet): boolean {\n        return this._facets ? this._facets.indexOf(facet) !== -1 : false;\n    }\n}\n\nexport interface FacetTypeaheadListConfig {\n    placeholder?: string;\n    minCharacters?: number;\n    maxResults?: number;\n    delay?: number;\n}\n\n@Pipe({\n    name: 'facetTypeaheadHighlight'\n})\nexport class FacetTypeaheadHighlight implements PipeTransform {\n    transform(value: string, searchQuery: string): string {\n        const regex = new RegExp(searchQuery, 'i');\n        return value.replace(regex, `<b class=\"facet-typeahead-highlighted\">${value.match(regex)}</b>`);\n    }\n}\n","<ux-facet-header [header]=\"header\" [(expanded)]=\"expanded\"></ux-facet-header>\n\n@if (expanded) {\n  <div class=\"facet-typeahead-list-container\" role=\"listbox\">\n    @if (suggestions?.length > 0) {\n      <div\n        class=\"facet-typeahead-list-selected-container\"\n        tabindex=\"-1\"\n        >\n        @for (facet of suggestions; track facet; let index = $index) {\n          <ux-facet-typeahead-list-item\n            [facet]=\"facet\"\n            [tabbable]=\"activeIndex === index\"\n            [selected]=\"facetService.isSelected(facet)\"\n            (selectedChange)=\"toggleFacet(index, facet)\"\n            (keydown)=\"onKeydown($event)\"\n            (itemFocus)=\"onFocus(index)\"\n            >\n          </ux-facet-typeahead-list-item>\n        }\n      </div>\n    }\n    <div class=\"facet-typeahead-list-control\">\n      <!-- Create Typeahead Control -->\n      <input\n        type=\"text\"\n        class=\"form-control\"\n        [placeholder]=\"typeaheadConfig?.placeholder\"\n        [attr.aria-activedescendant]=\"highlightedElement?.id\"\n        aria-autocomplete=\"list\"\n        aria-multiline=\"false\"\n        [attr.aria-controls]=\"typeaheadId\"\n        [ngModel]=\"query$ | async\"\n        (ngModelChange)=\"query$.next($event); updateTypeahead($event)\"\n        (keydown)=\"typeaheadKeyService.handleKey($event, typeahead)\"\n        (blur)=\"typeaheadOpen = false\"\n        />\n        <ux-typeahead\n          #typeahead\n          [id]=\"typeaheadId\"\n          [(open)]=\"typeaheadOpen\"\n          [loading]=\"loading\"\n          display=\"title\"\n          [options]=\"typeaheadOptions\"\n          [optionTemplate]=\"facetOptionTemplate\"\n          [selectOnEnter]=\"true\"\n          (optionSelected)=\"select($event)\"\n          (highlightedElementChange)=\"highlightedElement = $event\"\n          >\n        </ux-typeahead>\n      </div>\n    </div>\n  }\n\n  <ng-template #facetOptionTemplate let-option=\"option\" let-api=\"api\">\n    <p class=\"facet-typeahead-list-option\" [attr.aria-label]=\"option.title\">\n      <span [uxSafeInnerHtml]=\"option.title | facetTypeaheadHighlight : (query$ | async)\"></span>\n      @if (option.count) {\n        <span class=\"facet-typeahead-list-option-count\">\n          ({{ option.count }})\n        </span>\n      }\n    </p>\n  </ng-template>\n","import { CdkDragHandle, CDK_DRAG_HANDLE } from '@angular/cdk/drag-drop';\nimport { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxReorderableHandle]',\n    providers: [{ provide: CDK_DRAG_HANDLE, useExisting: ReorderableHandleDirective }],\n})\nexport class ReorderableHandleDirective extends CdkDragHandle {}\n","import { CDK_DRAG_PARENT, CdkDrag, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ReorderableDirective } from './reorderable.directive';\n\n@Directive({\n    selector: '[uxReorderableModel]',\n    providers: [{ provide: CDK_DRAG_PARENT, useExisting: ReorderableModelDirective }],\n    host: {\n        '[class.ux-reorderable-moving]': '_dragRef.isDragging()',\n    },\n})\nexport class ReorderableModelDirective<T> extends CdkDrag implements OnInit, OnDestroy {\n    // allow the user to specify a model for the item - allows use with ngFor\n    @Input() set uxReorderableModel(model: T) {\n        this.data = model;\n    }\n\n    /** Apply the dragula preview class to avoid backwards compatibility issues */\n    previewClass = 'gu-mirror';\n\n    /** Preserve the column widths */\n    private readonly _widths = new Map<number, string>();\n\n    /** Unsubscribe on destroy */\n    private readonly _destroy$ = new Subject<void>();\n\n    ngOnInit(): void {\n        // cast the drop container as we have replaced it with our directive\n        const dropContainer = this.dropContainer as ReorderableDirective<T>;\n\n        this._dragRef.beforeStarted\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(() => this.captureTableCellStyles());\n\n        this.started.pipe(takeUntil(this._destroy$)).subscribe(() => {\n            dropContainer.reorderStart.emit({\n                element: this.element.nativeElement,\n                model: this.data,\n            });\n            this.setTableCellWidths();\n        });\n\n        this.dropped.pipe(takeUntil(this._destroy$)).subscribe((dragEvent: CdkDragDrop<T>) => {\n            if (\n                dragEvent.container === dragEvent.previousContainer &&\n                dragEvent.currentIndex === dragEvent.previousIndex\n            ) {\n                dropContainer.reorderCancel.emit({\n                    element: this.element.nativeElement,\n                    model: this.data,\n                });\n            } else {\n                dropContainer.reorderEnd.emit({\n                    element: this.element.nativeElement,\n                    model: this.data,\n                });\n            }\n        });\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /**\n     * When table elements are being dragged they are hoisted to the document level\n     * when dragged they lose the sizing and spacing provided when they are used inside a table.\n     *\n     * This function will capture the styles so we can inline them to preseve the styling.\n     */\n    private captureTableCellStyles(): void {\n        // if it is not a table row then skip this\n        if (this.element.nativeElement.tagName !== 'TR') {\n            return;\n        }\n\n        // iterate each cell and store the styles and enforce the width by using a minWidth\n        Array.from(this.element.nativeElement.children).forEach((cell, index) => {\n            this._widths.set(index, getComputedStyle(cell).getPropertyValue('width'));\n        });\n    }\n\n    private setTableCellWidths(): void {\n        // if it is not a table row then skip this\n        if (this.element.nativeElement.tagName !== 'TR') {\n            return;\n        }\n\n        // access the preview element, this is private but there is no public way to access\n        // it and the UI is incorrect when draggingtable rows without this.\n         \n        const previewElement = (this._dragRef as any)._preview as HTMLElement;\n\n        // re-apply all the stored styles\n        Array.from(previewElement.children).forEach(\n            (cell: HTMLElement, index) => (cell.style.minWidth = this._widths.get(index))\n        );\n    }\n}\n","import {\n    CdkDragDrop,\n    CdkDropList,\n    CDK_DROP_LIST,\n    moveItemInArray,\n    transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n    selector: '[uxReorderable]',\n    providers: [{ provide: CDK_DROP_LIST, useExisting: ReorderableDirective }],\n})\nexport class ReorderableDirective<T> extends CdkDropList<T> implements OnInit, OnDestroy {\n    /**\n     * This property can be used to provide the `uxReorderable` directive with a dataset that represents the items that can be reordered.\n     * This can used as a two way binding which will ensure the dataset always reflects the current order of items in the list.\n     * Each list item should have a `uxReorderableModel` directive applied, with a value indicating which item in the dataset it represents.\n     *\n     * If the list is generated using `ngFor` this property should be bound to the same dataset.\n     * If there is no dataset representing the items then this property is not required.\n     */\n    @Input() reorderableModel: Array<T>;\n\n    /**\n     * The name of the reorderable group which this container belongs to `uxReorderable` elements which belong to\n     * the same group can have items dragged between them. Only required if multiple drop containers are being created.\n     */\n    @Input() set reorderableGroup(group: string) {\n        const groups = ReorderableDirective._groups$.value;\n        this._reorderableGroup = group;\n\n        ReorderableDirective._groups$.next({\n            ...groups,\n            [group]: [...(groups[group] ?? []), this.id],\n        });\n    }\n\n    get reorderableGroup(): string {\n        return this._reorderableGroup;\n    }\n\n    private _reorderableGroup: string;\n\n    /** Determines if reordering is disabled. */\n    @Input() set reorderingDisabled(isDisabled: boolean) {\n        this.disabled = isDisabled;\n    }\n\n    /**\n     * This event will be triggered when the order changes and will contain an updated dataset containing the items\n     * in their current order. This should be used when the list of items is generated using ngFor to ensure the\n     * data remains in the same order for both the `uxReorderable` and `ngFor` directives.\n     */\n    @Output() reorderableModelChange = new EventEmitter<Array<T>>();\n\n    /** This event is triggered when a user begins dragging an item. The event will contain the element being moved. */\n    @Output() reorderStart = new EventEmitter<ReorderEvent<T>>();\n\n    /** This event is triggered when the item being dragged is returned to the same location as it began. The event will contain the element that was being moved. */\n    @Output() reorderCancel = new EventEmitter<ReorderEvent<T>>();\n\n    /** This event is triggered when a user has relocated an item. The event will contain the element that was moved. */\n    @Output() reorderEnd = new EventEmitter<ReorderEvent<T>>();\n\n    /** Store all the group ids so we can identify which lists can interact */\n    private static readonly _groups$ = new BehaviorSubject<Record<string, string[]>>({});\n\n    private readonly _destroy$ = new Subject<void>();\n\n    ngOnInit(): void {\n        this.dropped.pipe(takeUntil(this._destroy$)).subscribe((dropEvent: CdkDragDrop<T>) => {\n            if (dropEvent.previousContainer === dropEvent.container) {\n                moveItemInArray(\n                    this.reorderableModel,\n                    dropEvent.previousIndex,\n                    dropEvent.currentIndex\n                );\n            } else {\n                const previousContainer = dropEvent.previousContainer as ReorderableDirective<T>;\n                const currentContainer = dropEvent.container as ReorderableDirective<T>;\n\n                transferArrayItem(\n                    previousContainer.reorderableModel,\n                    currentContainer.reorderableModel,\n                    dropEvent.previousIndex,\n                    dropEvent.currentIndex\n                );\n            }\n\n            this.reorderableModelChange.emit(this.reorderableModel);\n        });\n\n        // if the available groups are updated we need to update the lists we can drag to\n        ReorderableDirective._groups$\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(\n                groups =>\n                    (this.connectedTo = (groups[this.reorderableGroup] ?? []).filter(\n                        group => group !== this.id\n                    ))\n            );\n    }\n\n    ngOnDestroy(): void {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n}\n\nexport interface ReorderEvent<T = unknown> {\n    element: Element;\n    model: T;\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReorderableHandleDirective } from './reorderable-handle.directive';\nimport { ReorderableModelDirective } from './reorderable-model.directive';\nimport { ReorderableDirective } from './reorderable.directive';\n\n\n@NgModule({\n    imports: [\n        CommonModule,\n        DragDropModule\n    ],\n    declarations: [\n        ReorderableDirective,\n        ReorderableHandleDirective,\n        ReorderableModelDirective\n    ],\n    exports: [\n        ReorderableDirective,\n        ReorderableHandleDirective,\n        ReorderableModelDirective\n    ]\n})\nexport class ReorderableModule { }\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { SafeInnerHtmlDirective } from '../../directives/safe-inner-html/safe-inner-html.directive';\nimport { CheckboxModule } from '../checkbox/index';\nimport { IconModule } from '../icon/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { TypeaheadModule } from '../typeahead/index';\nimport { ReorderableModule } from './../../directives/reorderable/reorderable.module';\nimport { FacetHeaderComponent } from './base/facet-header/facet-header.component';\nimport { FacetCheckListItemComponent } from './facet-check-list/check-list-item/facet-check-list-item.component';\nimport { FacetCheckListComponent } from './facet-check-list/facet-check-list.component';\nimport { FacetClearButtonDirective } from './facet-clear-button/facet-clear-button.directive';\nimport { FacetContainerComponent } from './facet-container.component';\nimport {\n  FacetTypeaheadHighlight,\n  FacetTypeaheadListComponent,\n} from './facet-typeahead-list/facet-typeahead-list.component';\nimport { FacetTypeaheadListItemComponent } from './facet-typeahead-list/typeahead-list-item/facet-typeahead-list-item.component';\n\nconst DECLARATIONS = [\n  FacetContainerComponent,\n  FacetHeaderComponent,\n  FacetCheckListComponent,\n  FacetCheckListItemComponent,\n  FacetTypeaheadListComponent,\n  FacetTypeaheadListItemComponent,\n  FacetTypeaheadHighlight,\n  FacetClearButtonDirective,\n];\n\n@NgModule({\n  imports: [\n    A11yModule,\n    AccessibilityModule,\n    CheckboxModule,\n    CommonModule,\n    FormsModule,\n    IconModule,\n    ReorderableModule,\n    TooltipModule,\n    TypeaheadModule,\n    DragDropModule,\n    SafeInnerHtmlDirective,\n  ],\n  exports: DECLARATIONS,\n  declarations: DECLARATIONS,\n})\nexport class FacetsModule {}\n","export class Facet {\n\n    constructor(\n        public title: string,\n         \n        public data: any = {},\n        public count?: number,\n        public disabled: boolean = false,\n        public id?: string | number\n    ) { }\n}","import { Filter } from '../interfaces/filter.interface';\n\nexport class FilterAddEvent {\n    constructor(public filter: Filter) {}\n}","export class FilterRemoveAllEvent {}","import { Filter } from '../interfaces/filter.interface';\n\nexport class FilterRemoveEvent {\n    constructor(public filter: Filter) {}\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { FilterAddEvent } from './events/filter-add-event';\nimport { FilterEvent } from './events/filter-event';\nimport { FilterRemoveAllEvent } from './events/filter-remove-all-event';\nimport { FilterRemoveEvent } from './events/filter-remove-event';\nimport { Filter } from './interfaces/filter.interface';\n\n@Injectable()\nexport class FilterService {\n\n    /** The list of active filters */\n    filters$ = new BehaviorSubject<Filter[]>([]);\n\n    /** Emit all the events when they occur */\n    events$ = new Subject<FilterEvent>();\n\n    add(filter: Filter): void {\n\n        // if the filter is already selected or it is the intial filter then do nothing\n        if (this.isSelected(filter) || filter.initial) {\n            return;\n        }\n\n        // update the list of active filters\n        this.filters$.next([...this.filters$.value, filter]);\n\n        // emit the event\n        this.events$.next(new FilterAddEvent(filter));\n    }\n\n    remove(filter: Filter): void {\n\n        // if the filter is not selected then do nothing\n        if (!this.isSelected(filter)) {\n            return;\n        }\n\n        // update the list of active filters\n        this.filters$.next(this.filters$.value.filter(_filter => _filter !== filter));\n\n        // emit the event\n        this.events$.next(new FilterRemoveEvent(filter));\n    }\n\n    removeAll(): void {\n\n        // empty the list of active filters\n        this.filters$.next([]);\n\n        // emit the event\n        this.events$.next(new FilterRemoveAllEvent());\n    }\n\n    isSelected(filter: Filter): boolean {\n        return this.filters$.value.indexOf(filter) > -1;\n    }\n}","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, inject, Input, OnDestroy, Output, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { FilterEvent } from './events/filter-event';\nimport { FilterService } from './filter.service';\nimport { Filter } from './interfaces/filter.interface';\n\n@Component({\n    selector: 'ux-filter-container',\n    templateUrl: './filter-container.component.html',\n    providers: [FilterService],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterContainerComponent implements OnDestroy {\n    readonly filterService = inject(FilterService);\n\n    /** Allow filters to set from outside the component */\n    @Input() set filters(filters: Filter[]) {\n        this.filterService.filters$.next(filters);\n    }\n\n    /** Define the tooltip text */\n    @Input() clearTooltip: string;\n\n    /** Defines the aria-label for the clear all button */\n    @Input() clearAriaLabel: string = 'Clear All Filters';\n\n    /** Emit when the active filters chance */\n    @Output() filtersChange = new EventEmitter<Filter[]>();\n\n    /** Emit when a specific event occurs */\n    @Output() events = new EventEmitter<FilterEvent>();\n\n    /** Allow the content of the clear all button to be customized */\n    @ContentChild('clearAllTemplate', { static: false }) clearAllTemplate: TemplateRef<void>;\n\n    /** Unsubscribe from the subscriptions on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // subscribe to changes to the active filters\n        this.filterService.filters$.pipe(distinctUntilChanged(), takeUntil(this._onDestroy))\n            .subscribe(filters => this.filtersChange.emit(filters));\n\n        // relay any events to the event emitter\n        this.filterService.events$.pipe(takeUntil(this._onDestroy))\n            .subscribe(event => this.events.emit(event));\n    }\n\n    /** Destroy all subscriptions */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","<ng-content></ng-content>\n\n<!-- Add a Clear Button -->\n@if ((filterService.filters$ | async).length > 0) {\n  <button type=\"button\"\n    class=\"btn btn-link btn-secondary m-l-xs\"\n    [class.table-filter-clear]=\"clearAllTemplate\"\n    [class.btn-icon]=\"!clearAllTemplate\"\n    tabindex=\"0\"\n    [attr.aria-label]=\"clearAriaLabel\"\n    [uxTooltip]=\"clearTooltip || 'Clear All'\"\n    (click)=\"filterService.removeAll()\">\n    <ng-container [ngTemplateOutlet]=\"clearAllTemplate || defaultClearAllTemplate\">\n    </ng-container>\n  </button>\n}\n\n<ng-template #defaultClearAllTemplate>\n  <svg class=\"filter-selected-clear-graphic\" width=\"100%\" viewBox=\"0 0 19 12\" shape-rendering=\"geometricPrecision\">\n    <rect class=\"light-grey\" x=\"0\" y=\"2\" width=\"7\" height=\"2\"></rect>\n    <rect class=\"dark-grey\" x=\"0\" y=\"5\" width=\"9\" height=\"2\"></rect>\n    <rect class=\"light-grey\" x=\"0\" y=\"8\" width=\"7\" height=\"2\"></rect>\n    <path class=\"dark-grey\" d=\"M9,1 h1 l9,9 v1 h-1 l-9,-9 v-1 Z\"></path>\n    <path class=\"dark-grey\" d=\"M9,11 v-1 l9,-9 h1 v1 l-9,9 h-1 Z\"></path>\n  </svg>\n</ng-template>\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter as rxFilter, takeUntil } from 'rxjs/operators';\nimport { FilterRemoveAllEvent } from '../events/filter-remove-all-event';\nimport { FilterService } from '../filter.service';\nimport { Filter } from '../interfaces/filter.interface';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-filter-dropdown',\n    templateUrl: './filter-dropdown.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterDropdownComponent implements OnInit, OnDestroy {\n    private readonly _filterService = inject(FilterService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Store the unique id so we only increment the counter once per instance */\n    private readonly _uniqueId: number = uniqueId++;\n\n    /** Define the input for the component */\n    @Input() id: string;\n\n    /** The list of items to display in the dropdown */\n    @Input() filters: Filter[] = [];\n\n    /** Define an initial item to select */\n    @Input() initial: Filter;\n\n    /** Defined the closeOnBlur state for the ux-menu trigger */\n    @Input() set closeOnBlur(value: boolean) {\n        this._closeOnBlur = coerceBooleanProperty(value);\n    }\n\n    get closeOnBlur(): boolean {\n        return this._closeOnBlur;\n    }\n\n    /** Emit when the filter menu is closed */\n    @Output() readonly closed = new EventEmitter<void>();\n\n    selected: Filter;\n\n    get filterId(): string {\n        return this.id ?? `ux-filter-dropdown-${ this._uniqueId }`;\n    }\n\n    private readonly _onDestroy = new Subject<void>();\n    private _closeOnBlur: boolean = false;\n\n    constructor() {\n\n        this._filterService.events$.pipe(rxFilter(event => event instanceof FilterRemoveAllEvent), takeUntil(this._onDestroy))\n            .subscribe(() => this.removeFilter());\n\n        // ensure that the current selected filter is still selected when the active filters change\n        this._filterService.filters$.pipe(takeUntil(this._onDestroy)).subscribe(filters => {\n            if (this.selected && filters.indexOf(this.selected) === -1) {\n                this.removeFilter();\n            }\n        });\n    }\n\n    ngOnInit(): void {\n        this.selected = this.initial;\n\n        // check to see if any of the filters have been preselected or changes to selected filters\n        this._filterService.filters$.pipe(takeUntil(this._onDestroy)).subscribe(filters => {\n            filters.forEach(filter => {\n                if (this.filters.indexOf(filter) !== -1) {\n                    this.selected = filter;\n                }\n            });\n\n            this._changeDetector.markForCheck();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    selectFilter(filter: Filter, event: Event) {\n        this.removeFilter();\n        this.selected = filter;\n        this._filterService.add(this.selected);\n\n        event.stopPropagation();\n        event.preventDefault();\n    }\n\n    removeFilter(): void {\n        this._filterService.remove(this.selected);\n        this.selected = this.initial;\n        this._changeDetector.markForCheck();\n    }\n\n    static ngAcceptInputType_closeOnBlur: BooleanInput;\n}","<div class=\"btn-group\">\n  <button\n    type=\"button\"\n    class=\"filter-dropdown btn dropdown-toggle\"\n    [id]=\"filterId + '-trigger'\"\n    [class.active]=\"selected !== initial\"\n    [uxMenuTriggerFor]=\"menu\"\n    [closeOnBlur]=\"closeOnBlur\"\n    (closed)=\"closed.emit()\">\n    {{ selected?.group }}\n    @if (selected !== initial) {\n      <span class=\"filter-header\">\n        ({{ selected?.name }})\n      </span>\n    }\n    <ux-icon name=\"down\"></ux-icon>\n  </button>\n\n  <ux-menu #menu menuClass=\"ux-filter-menu\">\n    @for (filter of filters; track filter; let index = $index) {\n      <button\n        type=\"button\"\n        uxMenuItem\n        [id]=\"filter.id || filterId + '-item-' + index\"\n        [attr.aria-selected]=\"filter === selected\"\n        (click)=\"selectFilter(filter, $event)\"\n        (keydown.enter)=\"selectFilter(filter, $event)\">\n        <ux-icon\n          name=\"checkmark\"\n          [style.visibility]=\"filter === selected ? 'visible' : 'hidden'\">\n        </ux-icon>\n        <span class=\"filter-dropdown-title\">{{ filter.name }}</span>\n      </button>\n    }\n  </ux-menu>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'filterTypeaheadHighlight'\n})\nexport class FilterTypeaheadHighlight implements PipeTransform {\n    transform(value: string, searchQuery: string): string {\n        const regex = new RegExp(searchQuery, 'i');\n        return value.replace(regex, `<b class=\"filter-typeahead-highlighted\">${value.match(regex)}</b>`);\n    }\n}","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter as rxFilter, takeUntil } from 'rxjs/operators';\nimport { TypeaheadKeyService, TypeaheadOptionEvent } from '../../typeahead/index';\nimport { FilterRemoveAllEvent } from '../events/filter-remove-all-event';\nimport { FilterService } from '../filter.service';\nimport { FilterDynamicListConfig } from '../interfaces/filter-dynamic-list-config.interface';\nimport { Filter } from '../interfaces/filter.interface';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-filter-dynamic',\n    templateUrl: './filter-dynamic.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterDynamicComponent implements OnInit, OnDestroy {\n    readonly typeaheadKeyService = inject(TypeaheadKeyService);\n\n    private readonly _filterService = inject(FilterService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** The unique id is used multiple times - this is to ensure we only increment it once per instance */\n    private readonly _uniqueId: number = uniqueId++;\n\n    /** Define the input for the component */\n    @Input() id: string;\n\n    /** The list of possible filter options */\n    @Input() filters: Filter[] = [];\n\n    /** Specify if there should be an initially selected filter */\n    @Input() initial: Filter;\n\n    /** Defined the closeOnBlur state for the ux-menu trigger */\n    @Input() set closeOnBlur(value: boolean) {\n        this._closeOnBlur = coerceBooleanProperty(value);\n    }\n\n    get closeOnBlur(): boolean {\n        return this._closeOnBlur;\n    }\n\n    /** Specify the typeahead options */\n    @Input() set options(options: FilterDynamicListConfig) {\n        this._options = options;\n    }\n\n    /** Get the options with the defaults for any missing options */\n    get options(): FilterDynamicListConfig {\n        return { ...this._defaultOptions, ...this._options };\n    }\n\n    /** Emit when the filter menu is closed */\n    @Output() readonly closed = new EventEmitter<void>();\n\n    /** Generate a unique id for the typeahead */\n    typeaheadId: string = `ux-filter-dynamic-typeahead-${ this._uniqueId }`;\n\n    /** Store the current search query */\n    query$ = new BehaviorSubject<string>('');\n\n    /** Store the selected filter */\n    selected: Filter;\n\n    /** Indicate whether or not the typeahead should be shown */\n    showTypeahead: boolean = true;\n\n    /** Store the items that should be displayed in the typeahead */\n    typeaheadItems: string[] = [];\n\n    /** Store the currently highlighted element */\n    highlightedElement: HTMLElement;\n\n    /** Store the open state of the typeahead */\n    typeaheadOpen: boolean = false;\n\n    /** Get the user provided id or fallback to a default ID */\n    get filterId(): string {\n        return this.id ?? `ux-filter-dynamic-${ this._uniqueId }`;\n    }\n\n    /** The default options */\n    private readonly _defaultOptions: FilterDynamicListConfig = { placeholder: '', minCharacters: 3, maxResults: Infinity };\n\n    /** Store the user specified typeahead options */\n    private _options: FilterDynamicListConfig = { ...this._defaultOptions };\n\n    /** Unsubscribe from all subscriptions */\n    private readonly _onDestroy = new Subject<void>();\n    private _closeOnBlur: boolean = false;\n\n    constructor() {\n        // listen for remove all events in which case we should deselect event initial filters\n        this._filterService.events$.pipe(rxFilter(event => event instanceof FilterRemoveAllEvent), takeUntil(this._onDestroy))\n            .subscribe(() => this.removeFilter());\n\n        // ensure that the current selected filter is still selected when the active filters change\n        this._filterService.filters$.pipe(takeUntil(this._onDestroy)).subscribe(filters => {\n            if (this.selected && filters.indexOf(this.selected) === -1) {\n                this.removeFilter();\n            }\n        });\n    }\n\n    /** Set up the initial conditions */\n    ngOnInit(): void {\n\n        // The initially selected item should be set the the specified initial item\n        this.selected = this.initial;\n\n        // watch for changes to the selected filters\n        this._filterService.filters$.pipe(takeUntil(this._onDestroy)).subscribe(filters => {\n            filters.forEach(filter => {\n                if (this.filters.indexOf(filter) !== -1) {\n                    this.selected = filter;\n                }\n            });\n\n            this._changeDetector.markForCheck();\n        });\n\n        // get the items to be displayed in the typeahead\n        this.typeaheadItems = this.getItems();\n\n        // hide the typeahead if the number of filters always visible equals or exceeds the\n        // total number of filters as there would be no additional filters to display in the typeahead\n        const shouldHideTypeahead = this.options?.maxIndividualItems + 1 >= this.filters.length;\n\n        if (shouldHideTypeahead) {\n            this.showTypeahead = false;\n        }\n    }\n\n    /** Cleanup all subscriptions */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Get the items to display in the typeahead based on the search query */\n    getItems(): string[] {\n        const query = this.query$.value.toLowerCase();\n\n        return this.filters.filter(item => item !== this.initial && item.name.toLowerCase().indexOf(query) !== -1)\n            .map(item => item.name)\n            .slice(0, this._options.maxResults);\n    }\n\n    /** When the dropdown is closed clear the query */\n    onClose(): void {\n        this.query$.next('');\n    }\n\n    /** If a filter needs removed, and is not the initial filter then remove it */\n    removeFilter(): void {\n\n        // check if the filter we want to remove is the initial filter\n        if (this.selected !== this.initial) {\n            this._filterService.remove(this.selected);\n            this.selected = this.initial;\n        }\n\n        // clear the search query\n        this.query$.next('');\n\n        this._changeDetector.markForCheck();\n    }\n\n    /** Select a specific filter */\n    selectFilter(filter: Filter): void {\n\n        // clear any current filters\n        this.removeFilter();\n\n        // store the newly selected filter\n        this.selected = filter;\n\n        // store the filter in the service\n        this._filterService.add(this.selected);\n    }\n\n    /** Update typeahead items and visibility */\n    updateTypeahead(query: string): void {\n        this.typeaheadOpen = query.length >= this._options.minCharacters;\n        this.typeaheadItems = this.getItems();\n    }\n\n    /** Select a filter from a typeahead item */\n    select(event: TypeaheadOptionEvent): void {\n        // find the filter with the matching name\n        const filter = this.filters.find(_filter => _filter.name === event.option);\n\n        if (filter) {\n            this.selectFilter(filter);\n        }\n    }\n\n    static ngAcceptInputType_closeOnBlur: BooleanInput;\n}\n","<div class=\"btn-group ux-dynamic-filter\">\n  <button\n    type=\"button\"\n    [class.active]=\"selected !== initial\"\n    class=\"filter-dropdown btn dropdown-toggle\"\n    [id]=\"filterId + '-trigger'\"\n    [uxMenuTriggerFor]=\"menu\"\n    [closeOnBlur]=\"closeOnBlur\"\n    (closed)=\"closed.emit()\"\n    #trigger=\"ux-menu-trigger\"\n    >\n    {{ selected?.group }}\n    @if (selected !== initial) {\n      <span class=\"filter-header\"> ({{ selected?.name }}) </span>\n    }\n    <ux-icon name=\"down\"></ux-icon>\n  </button>\n\n  <ux-menu #menu menuClass=\"ux-dynamic-filter-menu\" (closed)=\"onClose()\">\n    <!-- Initial Option -->\n    @if (showTypeahead) {\n      <button\n        uxMenuItem\n        [id]=\"initial.id || filterId + '-initial-option'\"\n        (click)=\"removeFilter()\"\n        (keydown.enter)=\"removeFilter()\"\n        >\n        <ux-icon name=\"checkmark\" [style.visibility]=\"initial === selected ? 'visible' : 'hidden'\">\n        </ux-icon>\n        <span class=\"filter-dropdown-title\">\n          {{ initial.name }}\n        </span>\n      </button>\n    }\n\n    <!-- Selected Options -->\n    @if (selected !== initial && showTypeahead) {\n      <button\n        uxMenuItem\n        [id]=\"selected.id || filterId + '-selection'\"\n        >\n        <ux-icon name=\"checkmark\"></ux-icon>\n        <span class=\"filter-dropdown-title\">{{ selected.name }}</span>\n      </button>\n    }\n\n    @if (showTypeahead) {\n      <ux-menu-divider></ux-menu-divider>\n    }\n\n    @if (showTypeahead) {\n      <div class=\"typeahead-box\" role=\"none\">\n        <input\n          type=\"text\"\n          class=\"form-control\"\n          [placeholder]=\"options?.placeholder\"\n          [attr.aria-activedescendant]=\"highlightedElement?.id\"\n          [attr.aria-controls]=\"typeaheadId\"\n          aria-autocomplete=\"list\"\n          aria-multiline=\"false\"\n          [ngModel]=\"query$ | async\"\n          (ngModelChange)=\"query$.next($event); updateTypeahead($event)\"\n          (keydown)=\"typeaheadKeyService.handleKey($event, typeahead); $event.stopPropagation()\"\n          (keydown.enter)=\"$event.preventDefault()\"\n          (blur)=\"typeaheadOpen = false\"\n          (click)=\"$event.stopPropagation()\"\n          />\n          <ux-typeahead\n            #typeahead\n            [id]=\"typeaheadId\"\n            [(open)]=\"typeaheadOpen\"\n            display=\"title\"\n            [selectOnEnter]=\"true\"\n            [options]=\"typeaheadItems\"\n            [optionTemplate]=\"filterOptionTemplate\"\n            (optionSelected)=\"select($event); trigger.closeMenu($event.origin)\"\n            (highlightedElementChange)=\"highlightedElement = $event\"\n            >\n          </ux-typeahead>\n        </div>\n      }\n\n      @if (!showTypeahead) {\n        @for (filter of filters; track filter; let index = $index) {\n          <button\n            type=\"button\"\n            uxMenuItem\n            [id]=\"filter.id || filterId + '-item-' + index\"\n            (click)=\"selectFilter(filter); trigger.closeMenu('mouse')\"\n            (keydown.enter)=\"selectFilter(filter); trigger.closeMenu('keyboard')\"\n            >\n            <ux-icon name=\"checkmark\" [style.visibility]=\"filter === selected ? 'visible' : 'hidden'\">\n            </ux-icon>\n            <span class=\"filter-dropdown-title\">{{ filter.name }}</span>\n          </button>\n        }\n      }\n    </ux-menu>\n  </div>\n\n  <ng-template #filterOptionTemplate let-option=\"option\" let-api=\"api\">\n    <span\n      [attr.aria-label]=\"option\"\n      [uxSafeInnerHtml]=\"option | filterTypeaheadHighlight : (query$ | async)\"\n    ></span>\n  </ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { SafeInnerHtmlDirective } from '../../directives/safe-inner-html/safe-inner-html.directive';\nimport { IconModule } from '../icon/index';\nimport { MenuModule } from '../menu/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { TypeaheadModule } from '../typeahead/index';\nimport { FilterContainerComponent } from './filter-container.component';\nimport { FilterDropdownComponent } from './filter-dropdown/filter-dropdown.component';\nimport { FilterDynamicComponent } from './filter-dynamic/filter-dynamic.component';\nimport { FilterTypeaheadHighlight } from './filter-dynamic/filter-typeahead-highlight.pipe';\n\nconst DECLARATIONS = [\n  FilterContainerComponent,\n  FilterDropdownComponent,\n  FilterDynamicComponent,\n  FilterTypeaheadHighlight,\n];\n\n@NgModule({\n  imports: [\n    A11yModule,\n    AccessibilityModule,\n    CommonModule,\n    FormsModule,\n    IconModule,\n    MenuModule,\n    TooltipModule,\n    TypeaheadModule,\n    SafeInnerHtmlDirective,\n  ],\n  exports: DECLARATIONS,\n  declarations: DECLARATIONS,\n})\nexport class FilterModule {}\n","import { ChangeDetectionStrategy, Component, Directive, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { FocusIndicator, FocusIndicatorService } from '../../directives/accessibility/index';\n\n@Component({\n    selector: 'ux-flippable-card',\n    templateUrl: './flippable-card.component.html',\n    host: {\n        'tabindex': '0',\n        '[class.horizontal]': 'direction === \"horizontal\"',\n        '[class.vertical]': 'direction === \"vertical\"'\n    },\n    exportAs: 'ux-flippable-card',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlippableCardComponent implements OnDestroy {\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n\n    readonly elementRef = inject(ElementRef);\n\n    /** Determines whether the card should flip horizontally or vertically. */\n    @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n    /**\n     * Determines when the card should flip. Possible options are `click`, `hover` and `manual`.\n     * The manual option should be used if you want complete control over when the card should flip.\n     */\n    @Input() trigger: 'click' | 'hover' | 'manual' = 'hover';\n\n    /** Sets the width (in pixels) of the card. */\n    @Input() width: number = 280;\n\n    /** Sets the height (in pixels) of the card. */\n    @Input() height: number = 200;\n\n    /** Determines whether or not the card is flipped. */\n    @Input() flipped: boolean = false;\n\n    /** If two way binding is used this value will be updated when the state of the card changes. */\n    @Output() flippedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Focus Indicator instance */\n    private readonly _focusIndicator: FocusIndicator;\n\n    constructor() {\n        this._focusIndicator = this.focusIndicatorService.monitor(this.elementRef.nativeElement);\n    }\n\n    ngOnDestroy(): void {\n        this._focusIndicator.destroy();\n    }\n\n    setFlipped(state: boolean): void {\n        this.flipped = state;\n        this.flippedChange.emit(this.flipped);\n    }\n\n    toggleFlipped(): void {\n        this.setFlipped(!this.flipped);\n    }\n\n    @HostListener('click')\n    clickTrigger(): void {\n\n        // add or remove the class depending on whether or not the card has been flipped\n        if (this.trigger === 'click') {\n            this.toggleFlipped();\n        }\n    }\n\n    @HostListener('mouseenter')\n    hoverEnter(): void {\n        // if the trigger is hover then begin to flip\n        if (this.trigger === 'hover') {\n            this.setFlipped(true);\n        }\n    }\n\n    @HostListener('mouseleave')\n    hoverExit(): void {\n        if (this.trigger === 'hover') {\n            this.setFlipped(false);\n        }\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    @HostListener('keydown.space', ['$event'])\n    @HostListener('keydown.spacebar', ['$event']) // IE uses different naming\n    onKeyDown(event: KeyboardEvent): void {\n        if (this.trigger !== 'manual') {\n            this.toggleFlipped();\n            event.preventDefault();\n        }\n    }\n}\n\n@Directive({\n    selector: 'ux-flippable-card-front'\n})\nexport class FlippableCardFrontDirective { }\n\n@Directive({\n    selector: 'ux-flippable-card-back'\n})\nexport class FlippableCardBackDirective { }","<div class=\"ux-flipper\"\n     [class.ux-flip-card]=\"flipped\"\n     [style.width.px]=\"width\"\n     [style.height.px]=\"height\">\n\n    <div class=\"ux-flippable-card-front\"\n         [style.width.px]=\"width\"\n         [style.height.px]=\"height\"\n         [attr.aria-hidden]=\"flipped\">\n\n        <ng-content select=\"ux-flippable-card-front\"></ng-content>\n    </div>\n\n    <div class=\"ux-flippable-card-back\"\n         [style.width.px]=\"width\"\n         [style.height.px]=\"height\"\n         [attr.aria-hidden]=\"!flipped\">\n\n        <ng-content select=\"ux-flippable-card-back\"></ng-content>\n    </div>\n</div>","import { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FlippableCardBackDirective, FlippableCardComponent, FlippableCardFrontDirective } from './flippable-card.component';\n\n\n@NgModule({\n    imports: [\n        AccessibilityModule\n    ],\n    exports: [\n        FlippableCardComponent,\n        FlippableCardBackDirective,\n        FlippableCardFrontDirective\n    ],\n    declarations: [\n        FlippableCardComponent,\n        FlippableCardBackDirective,\n        FlippableCardFrontDirective\n    ]\n})\nexport class FlippableCardModule { }\n","import { Injectable, QueryList } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { AnchorPlacement } from '../../common/overlay/index';\nimport { FloatingActionButtonComponent } from './floating-action-button.component';\n\nexport type FloatingActionButtonDirection = AnchorPlacement;\n\n@Injectable()\nexport class FloatingActionButtonsService {\n\n    open$ = new BehaviorSubject<boolean>(false);\n    direction$ = new BehaviorSubject<FloatingActionButtonDirection>('top');\n\n    private _buttons: QueryList<FloatingActionButtonComponent>;\n\n    open(): void {\n        this.open$.next(true);\n    }\n\n    toggle(): void {\n        this.open$.next(!this.open$.getValue());\n    }\n\n    close(): void {\n        this.open$.next(false);\n\n        // make the first button tabbable again\n        this.setPrimaryButtonFocusable();\n    }\n\n    isHorizontal(): boolean {\n        return this.direction$.value === 'left' || this.direction$.value === 'right';\n    }\n\n    isVertical(): boolean {\n        return this.direction$.value === 'top' || this.direction$.value === 'bottom';\n    }\n\n    setButtons(buttons: QueryList<FloatingActionButtonComponent>): void {\n        this._buttons = buttons;\n\n        // make the first button tabbable (after a delay to prevent expression changed error)\n        requestAnimationFrame(() => this.setPrimaryButtonFocusable());\n    }\n\n    /** Make only the first button tabbable */\n    setPrimaryButtonFocusable(): void {\n        this._buttons.forEach(btn => btn.tabindex$.next(btn.primary ? 0 : -1));\n    }\n\n    focusPrimaryButton(): void {\n        this.focus(this._buttons.find(btn => btn.primary));\n    }\n\n    focus(button: FloatingActionButtonComponent): void {\n\n        // if the button is not defined then do nothing\n        if (!button) {\n            return;\n        }\n\n        // set the button tab index\n        this._buttons.forEach(btn => btn.tabindex$.next(button === btn ? 0 : -1));\n\n        // apply the focus\n        button.focus();\n    }\n\n    focusSibling(next: boolean): void {\n\n        // if the buttons are not visible then do nothing\n        if (this.open$.value === false) {\n            return;\n        }\n\n        // get the current focused item\n        const button = this.getFocusedButton();\n\n        if (next && button === this._buttons.last) {\n            return this.focus(this._buttons.first);\n        } else if (!next && button === this._buttons.first) {\n            return this.focus(this._buttons.last);\n        }\n\n        // find the sibling button\n        const sibling = this._buttons.toArray()[this.getButtonIndex(button) + (next ? 1 : -1)];\n\n        // focus the next button\n        this.focus(sibling);\n    }\n\n    private getFocusedButton(): FloatingActionButtonComponent {\n        return this._buttons.find(btn => btn.tabindex$.value === 0);\n    }\n\n    private getButtonIndex(button: FloatingActionButtonComponent): number {\n        return this._buttons.toArray().findIndex(btn => btn === button);\n    }\n}\n","import { DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { AfterViewInit, Attribute, ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { TooltipDirective } from '../tooltip/index';\nimport { FloatingActionButtonsService } from './floating-action-buttons.service';\n\n@Component({\n    selector: 'ux-floating-action-button',\n    templateUrl: './floating-action-button.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false\n})\nexport class FloatingActionButtonComponent implements AfterViewInit, OnDestroy {\n    readonly fab = inject(FloatingActionButtonsService);\n\n    private readonly _tooltip = inject(TooltipDirective, { optional : true});\n\n    /** Define the aria label for the button */\n    @Input('aria-label') ariaLabel: string;\n\n    /** Access the element ref of the button element */\n    @ViewChild('button', { static: true }) button: ElementRef;\n\n    /** Determine if this is the primary button in the set */\n    primary: boolean = false;\n\n    /** Store the tabindex */\n    tabindex$ = new BehaviorSubject<number>(-1);\n\n    /** Unsubscribe from all observables on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor(@Attribute('fab-primary') primary: string) {\n        this.primary = primary !== null;\n    }\n\n    ngAfterViewInit(): void {\n\n        if (this._tooltip) {\n            // ensure the tooltip gets hidden when the button is hidden\n            this.fab.open$.pipe(takeUntil(this._onDestroy), filter(isOpen => !isOpen && !this.primary))\n                .subscribe(() => this._tooltip.hide());\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    focus(): void {\n        this.button.nativeElement.focus();\n    }\n\n    onFocus(): void {\n        // ensure the tooltip gets shown\n        if (this._tooltip) {\n            this._tooltip.show();\n        }\n    }\n\n    onBlur(): void {\n        // ensure the tooltip gets hidden\n        if (this._tooltip) {\n            this._tooltip.hide();\n        }\n    }\n\n    close(): void {\n        this.fab.close();\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeydown(event: KeyboardEvent): void {\n\n        switch (event.which) {\n\n            case UP_ARROW:\n                if (this.fab.isVertical()) {\n                    this.fab.focusSibling(this.fab.direction$.value !== 'bottom');\n                    event.preventDefault();\n                }\n                break;\n\n            case DOWN_ARROW:\n                if (this.fab.isVertical()) {\n                    this.fab.focusSibling(this.fab.direction$.value === 'bottom');\n                    event.preventDefault();\n                }\n                break;\n\n            case LEFT_ARROW:\n                if (this.fab.isHorizontal()) {\n                    this.fab.focusSibling(this.fab.direction$.value !== 'right');\n                    event.preventDefault();\n                }\n                break;\n\n            case RIGHT_ARROW:\n                if (this.fab.isHorizontal()) {\n                    this.fab.focusSibling(this.fab.direction$.value === 'right');\n                    event.preventDefault();\n                }\n                break;\n\n            case ENTER:\n                this.fab.focusPrimaryButton();\n                break;\n\n            case ESCAPE:\n                this.fab.focusPrimaryButton();\n                this.fab.close();\n                break;\n\n        }\n\n    }\n}\n","<button #button\n        uxFocusIndicator\n        [programmaticFocusIndicator]=\"true\"\n        type=\"button\"\n        class=\"btn floating-action-button\"\n        [class.button-primary]=\"primary\"\n        [class.button-secondary]=\"!primary\"\n        [attr.aria-label]=\"ariaLabel\"\n        [tabIndex]=\"tabindex$ | async\"\n        (focus)=\"onFocus()\"\n        (blur)=\"onBlur()\"\n        (click)=\"primary ? fab.toggle() : close()\">\n\n    <ng-content></ng-content>\n\n</button>","import { animate, query, stagger, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output, QueryList } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FloatingActionButtonComponent } from './floating-action-button.component';\nimport { FloatingActionButtonDirection, FloatingActionButtonsService } from './floating-action-buttons.service';\n\n@Component({\n    selector: 'ux-floating-action-buttons',\n    templateUrl: './floating-action-buttons.component.html',\n    providers: [FloatingActionButtonsService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false,\n    animations: [\n        trigger('fabAnimation', [\n            transition('void => true', [\n                query('ux-floating-action-button', style({ opacity: 0 })),\n                query('ux-floating-action-button', stagger(50, animate(250, style({ opacity: 1 }))))\n            ]),\n            transition('true => void', [\n                query('ux-floating-action-button', stagger(-50, animate(250, style({ opacity: 0 }))))\n            ])\n        ])\n    ]\n})\nexport class FloatingActionButtonsComponent implements AfterViewInit, OnDestroy {\n    readonly fab = inject(FloatingActionButtonsService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    /** Specify the direction that the FAB should display */\n    @Input() set direction(direction: FloatingActionButtonDirection) { this.fab.direction$.next(direction); }\n\n    /** Emit whenever the open state changes */\n    @Output() openChange = new EventEmitter<boolean>();\n\n    /** Get all child FAB buttons */\n    @ContentChildren(FloatingActionButtonComponent) buttons: QueryList<FloatingActionButtonComponent>;\n\n    private readonly _subscription: Subscription = new Subscription();\n\n    constructor() {\n        this._subscription.add(this.fab.open$.subscribe(value => this.openChange.emit(value)));\n    }\n\n    ngAfterViewInit(): void {\n        this.fab.setButtons(this.buttons);\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n    }\n\n    /*\n     * Detect any clicks to trigger close of the menu\n     */\n    @HostListener('document:click', ['$event.target']) close(target: HTMLElement): void {\n        if (!this._elementRef.nativeElement.contains(target)) {\n            this.fab.close();\n        }\n    }\n}\n","<ng-content select=\"[fab-primary]\"></ng-content>\n\n@if (fab.open$ | async) {\n  <div class=\"floating-action-button-list\" [@fabAnimation]=\"fab.open$ | async\" [ngClass]=\"fab.direction$ | async\">\n    <ng-content></ng-content>\n  </div>\n}","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/index';\nimport { FloatingActionButtonComponent } from './floating-action-button.component';\nimport { FloatingActionButtonsComponent } from './floating-action-buttons.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        IconModule\n    ],\n    exports: [\n        FloatingActionButtonsComponent,\n        FloatingActionButtonComponent\n    ],\n    declarations: [\n        FloatingActionButtonsComponent,\n        FloatingActionButtonComponent\n    ]\n})\nexport class FloatingActionButtonsModule { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxHierarchyBarNodeIcon]',\n})\nexport class HierarchyBarNodeIconDirective { }","import { Injectable, TemplateRef } from '@angular/core';\nimport { BehaviorSubject, Observable, Observer, Subject, isObservable, of } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { OverlayTrigger } from '../tooltip/index';\nimport { HierarchyBarNodeChildren } from './interfaces/hierarchy-bar-node-children.interface';\nimport { HierarchyBarIconContext } from './interfaces/hierarchy-bar-node-icon-context.interface';\nimport { HierarchyBarNode } from './interfaces/hierarchy-bar-node.interface';\n\n@Injectable()\nexport class HierarchyBarService {\n\n    /** Define the list of selected nodes */\n    nodes$ = new BehaviorSubject<HierarchyBarNode[]>([]);\n\n    /** Define a custom loading indicator */\n    loadingIndicator: TemplateRef<void>;\n\n    /** Define a custom overflow template */\n    overflowTemplate: TemplateRef<void>;\n\n    /** Define the events that show the popover when interacting with the arrows */\n    popoverShowTriggers: OverlayTrigger[] = ['click'];\n\n    /** Define the events that hide the popover when interacting with the arrows */\n    popoverHideTriggers: OverlayTrigger[] = ['click', 'clickoutside', 'escape'];\n\n    /** Emit the selected node when it changes */\n    selection$ = new Subject<HierarchyBarNode>();\n\n    /** Define the aria label for the show siblings popover button */\n    showSiblingsAriaLabel: string = 'Show Siblings';\n\n    /** Allow a custom icon template to be specified */\n    icon: TemplateRef<HierarchyBarIconContext>;\n\n    /** Store the root node */\n    private _root: HierarchyBarNode;\n\n    /** Store nodes as a flattened list */\n    private _nodes: HierarchyBarNode[] = [];\n\n    /**\n     * Store the root node of the hierarchy tree\n     */\n    setRootNode(root: HierarchyBarNode) {\n\n        // if the node is null or undefined then do nothing\n        if (!root) {\n            return;\n        }\n\n        // store the root node\n        this._root = root;\n\n        // create a flat structure of nodes\n        this._nodes = this.getNodeList(root);\n\n        // flatten the array - based on the selected node\n        this.nodes$.next(this.getSelectedChildren(root));\n    }\n\n    /**\n     * Select a node. This causes all nodes to be\n     * deselected and the path to the selected node\n     * to be selected\n     */\n    selectNode(node: HierarchyBarNode): void {\n\n        // deselect all nodes\n        this.deselectAll();\n\n        // if the node is undefined then do nothing\n        if (!node) {\n            return;\n        }\n\n        // ensure the current node is selected and its parents\n        this.select(node);\n\n        // emit a new node list to trigger change detection\n        this.nodes$.next(this.getSelectedChildren(this._root));\n\n        // emit the new selection\n        this.selection$.next(node);\n    }\n\n    /**\n     * Handles getting children with support for both arrays and observables\n     */\n    getChildren(node: HierarchyBarNode): Observable<HierarchyBarNodeChildren> {\n\n        if (Array.isArray(node.children)) {\n            return of({ loading: false, children: node.children });\n        }\n\n        const children$: Observable<HierarchyBarNode[]> = node.children;\n\n        // if it is an observable then handle loading\n        return Observable.create((observer: Observer<HierarchyBarNodeChildren>) => {\n            // emit initial value\n            observer.next({ loading: true, children: [] });\n\n            // now wait until the children observable completes\n            children$.pipe(first()).subscribe(children => {\n\n                // replace the observable with an array for future loading\n                node.children = children;\n\n                // rebuild the node tree\n                this.setRootNode(this._root);\n\n                // emit the latest value\n                observer.next({ loading: false, children });\n\n                // close the observable stream\n                observer.complete();\n            });\n        });\n    }\n\n    /**\n     * Utility function to get the sibling nodes, taking into account that\n     * a node may be a root node and may not have a parent.\n     */\n    getSiblings(node: HierarchyBarNode): Observable<HierarchyBarNodeChildren> {\n        return node.parent ? this.getChildren(node.parent) : of({ loading: false, children: [] });\n    }\n\n    /**\n     * Traverses all the parents to ensure they are selected\n     */\n    private select(node: HierarchyBarNode): void {\n        node.selected = true;\n\n        if (node.parent) {\n            this.select(node.parent);\n        }\n    }\n\n    /**\n     * Deselects all nodes\n     */\n    private deselectAll(): void {\n        this._nodes.forEach(node => node.selected = false);\n    }\n\n    /**\n     * Gets all the nodes in the tree as a flat array.\n     * It also stores the parent node in a parent property\n     * on the node for easy traversal in both directions\n     */\n    private getNodeList(node: HierarchyBarNode): HierarchyBarNode[] {\n\n        // if there are no children then return only itself\n        if (!node.children || isObservable(node.children) || node.children.length === 0) {\n            return [node];\n        }\n\n        // store the parent property\n        node.children.forEach(child => child.parent = node);\n\n        // get all descendants of this node\n        const descendants = node.children.reduce<HierarchyBarNode[]>((nodes, current) => [...nodes, ...this.getNodeList(current)], []);\n\n        return [node, ...descendants];\n    }\n\n    /**\n     * Gets all selected nodes from the parent node.\n     */\n    private getSelectedChildren(node: HierarchyBarNode): HierarchyBarNode[] {\n\n        if (isObservable(node.children)) {\n            return [node];\n        }\n\n        // get the children - and account for when there is none\n        const children = node.children || [];\n\n        // check if any child is selected\n        const child = children.find(_child => _child.selected);\n\n        // return the remaining chain of selected items\n        return child ? [node, ...this.getSelectedChildren(child)] : [node];\n    }\n}","import { Directive, ElementRef, EventEmitter, HostListener, inject, Output } from '@angular/core';\n\n@Directive({\n    selector: '[uxClickOutside]'\n})\nexport class ClickOutsideDirective {\n    private readonly _elementRef = inject(ElementRef);\n\n    @Output() uxClickOutside = new EventEmitter<MouseEvent>();\n\n    /** Often a click event makes the element appear - if so we can end up closing it immediately */\n    private _initialised: boolean = false;\n\n    constructor() {\n        setTimeout(() => this._initialised = true);\n    }\n\n    @HostListener('document:click', ['$event'])\n    click(event: MouseEvent): void {\n        if (this._initialised && this._elementRef.nativeElement !== event.target && !this._elementRef.nativeElement.contains(event.target)) {\n            this.uxClickOutside.emit(event);\n        }\n    }\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TooltipComponent } from '../tooltip/index';\n\nlet uniquePopoverId = 0;\n\n@Component({\n  selector: 'ux-popover',\n  templateUrl: './popover.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverComponent extends TooltipComponent {\n\n  /** Define a unique id for each popover */\n  id: string = `ux-popover-${++uniquePopoverId}`;\n\n  /** If specified allows the popover to show a title */\n  title: string;\n\n  /** This will emit an event any time the user clicks outside the popover */\n  clickOutside$ = new Subject<MouseEvent>();\n\n  constructor() {\n    super();\n  }\n\n  /** This will update the title of the popover and trigger change detection */\n  setTitle(title: string): void {\n    this.title = title;\n    this._changeDetectorRef.markForCheck();\n  }\n}","<div class=\"popover show\" [ngClass]=\"[positionClass, 'popover-align-' + alignment, customClass]\" [id]=\"id\" [attr.role]=\"role\" (uxClickOutside)=\"clickOutside$.next($event)\">\n  <div class=\"arrow\"></div>\n  @if (title) {\n    <h3 class=\"popover-title\">{{ title }}</h3>\n  }\n  <div class=\"popover-content\" (uxResize)=\"reposition()\">\n    @if (!isTemplateRef) {\n      {{ content }}\n    }\n    @if (isTemplateRef) {\n      <ng-container [ngTemplateOutlet]=\"$any(content)\" [ngTemplateOutletContext]=\"context\"></ng-container>\n    }\n  </div>\n</div>\n","import { ESCAPE } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Directive, HostBinding, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { OverlayTrigger, TooltipDirective } from '../tooltip/index';\nimport { PopoverComponent } from './popover.component';\n\n@Directive({\n    selector: '[uxPopover]',\n    exportAs: 'ux-popover'\n})\nexport class PopoverDirective extends TooltipDirective implements OnInit, OnChanges {\n\n    /** Contains the content of the popover or a TemplateRef for more detailed content */\n    @Input('uxPopover') content: string | TemplateRef<void>;\n\n    /** Optionally display a title in the popover */\n    @Input('popoverTitle') title: string;\n\n    /** Allow the popover to be conditionally disabled */\n    @Input('popoverDisabled') disabled: boolean;\n\n    /** All the user to add a custom class to the popover */\n    @Input('popoverClass') customClass: string = '';\n\n    /** All the user to add a role to the popover - default is tooltip */\n    @Input('popoverRole') role: string = 'tooltip';\n\n    /** Provide the TemplateRef a context object */\n     \n    @Input('popoverContext') context: any = {};\n\n    /** Delay the showing of the popover by a number of miliseconds */\n    @Input('popoverDelay') delay: number = 0;\n\n    /** Specify which events should show the popover */\n    @Input() showTriggers: OverlayTrigger[] = ['click'];\n\n    /** Specify which events should hide the popover */\n    @Input() hideTriggers: OverlayTrigger[] = ['click', 'clickoutside', 'escape'];\n\n    /** Keep track of the tooltip visibility and update aria-expanded attribute */\n    @HostBinding('attr.aria-expanded') isVisible: boolean = false;\n\n    /** Define the overlay class */\n    protected _overlayClass: string = 'ux-overlay-pane';\n\n    /** A reference to the CDK portal containing the overlay */\n    protected _portal: ComponentPortal<PopoverComponent>;\n\n    /** A reference to the instance of the popover component when created */\n    protected _instance: PopoverComponent;\n\n    /** Determine whether or not an aria-describedby property originally existed on the element */\n    private _ariaDescribedBy: boolean;\n\n    /** Internally store the type of this component - usual for distinctions when extending the tooltip class */\n    protected _type: string = 'popover';\n\n    constructor() {\n        super();\n    }\n\n    /** Set up the triggers and bind to the show/hide events to keep visibility in sync */\n    ngOnInit(): void {\n\n        // set up the event triggers\n        fromEvent(document, 'keydown').pipe(takeUntil(this._onDestroy)).subscribe(this.onKeyDown.bind(this));\n\n        // check if there is an aria-described by attribute\n        this._ariaDescribedBy = this._elementRef.nativeElement.hasAttribute('aria-describedby');\n\n        // set up the default event triggers\n        super.ngOnInit();\n    }\n\n    /**\n     * We need to send input changes to the popover component\n     * We can't use setters as they may trigger before popover initialised and can't resend once initialised\n     **/\n    ngOnChanges(changes: SimpleChanges): void {\n        super.ngOnChanges(changes);\n\n        if (this._instance && changes.title) {\n            this._instance.setTitle(changes.title.currentValue);\n        }\n    }\n\n    protected createInstance(overlayRef: OverlayRef): PopoverComponent {\n        const instance = overlayRef.attach(this._portal).instance as PopoverComponent;\n\n        // supply the tooltip with the correct properties\n        instance.setTitle(this.title);\n        instance.setContent(this.content);\n        instance.setPlacement(this.placement);\n        instance.setAlignment(this.alignment);\n        instance.setClass(this.customClass);\n        instance.setContext(this.context);\n        instance.setRole(this.role);\n\n        // Update the aria-describedby attribute\n        this.setAriaDescribedBy(instance.id);\n\n        // subscribe to the outside click event\n        instance.clickOutside$.pipe(takeUntil(this._onDestroy)).subscribe(this.onClickOutside.bind(this));\n\n        return instance;\n    }\n\n    protected createPortal(): ComponentPortal<PopoverComponent> {\n        return this._portal || new ComponentPortal(PopoverComponent, this._viewContainerRef);\n    }\n\n    private onKeyDown(event: KeyboardEvent): void {\n\n        // if visible and the escape key is pressed and it is one of the hide triggers\n        if (this.isVisible && event.keyCode === ESCAPE && this.includes(this.hideTriggers, 'escape')) {\n            this.hide();\n        }\n    }\n\n    private onClickOutside(): void {\n        // if visible and it is one of the hide triggers\n        if (this.isVisible && this.includes(this.hideTriggers, 'clickoutside')) {\n            this.hide();\n        }\n    }\n\n    /** Programmatically update the aria-describedby property */\n    protected setAriaDescribedBy(id: string | null): void {\n\n        // we only want to set the aria-describedby attr when the content is a string and there was no user defined attribute already\n        if (this._ariaDescribedBy === false && typeof this.content === 'string') {\n            super.setAriaDescribedBy(id);\n        }\n    }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, inject, Input, Output, TemplateRef } from '@angular/core';\nimport { HierarchyBarService } from '../hierarchy-bar.service';\nimport { HierarchyBarNode } from '../interfaces/hierarchy-bar-node.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar-node',\n    templateUrl: './hierarchy-bar-node.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[style.visibility]': 'visible ? \"visible\" : \"hidden\"',\n    },\n})\nexport class HierarchyBarNodeComponent {\n    readonly hierarchyBar = inject(HierarchyBarService);\n    private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    /** Specify the node data */\n    @Input() node: HierarchyBarNode;\n\n    /** Define the template for the popover */\n    @Input() popoverTemplate: TemplateRef<void>;\n\n    /** Determine the mode of the hierarchy bar */\n    @Input() mode: string;\n\n    /** Determine read only state */\n    @Input() readonly: boolean;\n\n    /** Optionally define the horizontal offset */\n    @Input() offset: number = 0;\n\n    /** Emit when the node is selected */\n    @Output() selected = new EventEmitter<HierarchyBarNode>();\n\n    /** Determine if this node should be hidden due to overflow */\n    visible: boolean = true;\n\n    /** Get the width of the element */\n    get width(): number {\n        return this._elementRef.nativeElement.offsetWidth;\n    }\n}\n","<div class=\"hierarchy-bar-node\"\n  [class.hierarchy-bar-node-readonly]=\"readonly\"\n  [class.hierarchy-bar-node-child-indicator]=\"node.children\"\n  [style.transform]=\"offset ? 'translateX(' + offset + 'px)' : null\">\n\n  @if (mode === 'dropdown') {\n    <button type=\"button\"\n      uxFocusIndicator\n      uxFocusIndicatorOrigin\n      #popover=\"ux-popover\"\n      aria-label=\"Show children\"\n      class=\"hierarchy-bar-node-content\"\n      [disabled]=\"readonly\"\n      [uxPopover]=\"popoverTemplate\"\n      [popoverContext]=\"{ node: node, popover: popover }\"\n      placement=\"bottom\"\n      popoverClass=\"hierarchy-bar-popover\"\n      [showTriggers]=\"node.children ? hierarchyBar.popoverShowTriggers : []\"\n      [hideTriggers]=\"node.children ? hierarchyBar.popoverHideTriggers : []\"\n      tabindex=\"0\"\n      [attr.aria-label]=\"node.title\">\n      <!-- Show a custom icon if specified -->\n      @if (hierarchyBar.icon) {\n        <div class=\"hierarchy-bar-node-icon\">\n          <ng-container [ngTemplateOutlet]=\"hierarchyBar.icon\" [ngTemplateOutletContext]=\"{ node: node, $implicit: node }\"></ng-container>\n        </div>\n      }\n      <!-- Show an icon if specified -->\n      @if (node.icon && !hierarchyBar.icon) {\n        <img class=\"hierarchy-bar-node-icon\" [src]=\"node.icon\" alt=\"Hierarchy Bar Icon\">\n      }\n      <!-- Show the name of the current node -->\n      <span class=\"hierarchy-bar-node-title\">{{ node.title }}</span>\n      <!-- Show a dropdown arrow if there are children -->\n      <div [class.readonly-arrow]=\"readonly\" class=\"hierarchy-bar-node-arrow-icon-dropdown\">\n        @if (node.children) {\n          <ux-icon name=\"next\"\n            class=\"hierarchy-bar-node-arrow-icon\">\n          </ux-icon>\n        }\n      </div>\n    </button>\n  } @else {\n    <button type=\"button\"\n      uxFocusIndicator\n      class=\"hierarchy-bar-node-content\"\n      [disabled]=\"readonly\"\n      [attr.aria-label]=\"node.title\"\n      (click)=\"selected.emit(node)\">\n      <!-- Show a custom icon if specified -->\n      @if (hierarchyBar.icon) {\n        <div class=\"hierarchy-bar-node-icon\">\n          <ng-container [ngTemplateOutlet]=\"hierarchyBar.icon\" [ngTemplateOutletContext]=\"{ node: node, $implicit: node }\"></ng-container>\n        </div>\n      }\n      <!-- Show an icon if specified -->\n      @if (node.icon && !hierarchyBar.icon) {\n        <img class=\"hierarchy-bar-node-icon\" [src]=\"node.icon\" alt=\"Hierarchy Bar Icon\">\n      }\n      <!-- Show the name of the current node -->\n      <span class=\"hierarchy-bar-node-title\">{{ node.title }}</span>\n    </button>\n    <!-- Show a dropdown arrow if there are children -->\n    @if (node.children) {\n      <button type=\"button\"\n        uxFocusIndicator\n        uxFocusIndicatorOrigin\n        #popover=\"ux-popover\"\n        aria-label=\"Show children\"\n        role=\"button\"\n        class=\"hierarchy-bar-node-arrow\"\n        [disabled]=\"readonly\"\n        [uxPopover]=\"popoverTemplate\"\n        [popoverContext]=\"{ node: node, popover: popover }\"\n        placement=\"bottom\"\n        popoverClass=\"hierarchy-bar-popover\"\n        [showTriggers]=\"hierarchyBar.popoverShowTriggers\"\n        [hideTriggers]=\"hierarchyBar.popoverHideTriggers\"\n        tabindex=\"0\">\n        <ux-icon name=\"next\"\n          class=\"hierarchy-bar-node-arrow-icon\">\n        </ux-icon>\n      </button>\n    }\n  }\n\n</div>\n\n\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { FocusIndicatorOrigin, FocusIndicatorOriginService } from '../../../directives/accessibility/index';\nimport { HierarchyBarService } from '../hierarchy-bar.service';\nimport { HierarchyBarNode } from '../interfaces/hierarchy-bar-node.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar-popover-item',\n    templateUrl: './hierarchy-bar-popover-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HierarchyBarPopoverItemComponent implements OnDestroy {\n    readonly focusOriginService = inject(FocusIndicatorOriginService);\n\n    readonly elementRef = inject(ElementRef);\n\n    readonly renderer = inject(Renderer2);\n\n    readonly hierarchyBar = inject(HierarchyBarService);\n\n    /** Specify the node to display */\n    @Input() node: HierarchyBarNode;\n\n    /**\n     * Emit when a click or enter key press occurs.\n     * Note this is an `async` EventEmitter to ensure that\n     * the event handlers in the `FocusIndicatorOrigin` set\n     * the origin before we emit the select event, otherwise\n     * the item may not get a focus ring when the keyboard is used.\n     */\n    @Output() selected = new EventEmitter<HierarchyBarNode>(true);\n\n    /** Allow this to control the focus origin */\n    private readonly _focusOrigin: FocusIndicatorOrigin;\n\n    constructor() {\n        this._focusOrigin = new FocusIndicatorOrigin(this.focusOriginService, this.elementRef, this.renderer);\n    }\n\n    ngOnDestroy(): void {\n        this._focusOrigin.destroy();\n    }\n\n    @HostListener('click')\n    @HostListener('keydown.enter')\n    onSelect(): void {\n        this.selected.emit(this.node);\n    }\n\n}\n","<!-- Show an icon if specified -->\n@if (!hierarchyBar.icon && node?.icon) {\n  <img class=\"hierarchy-bar-node-icon\" [src]=\"node.icon\" alt=\"Hierarchy Bar Icon\">\n}\n\n<!-- Show a custom icon if specified -->\n@if (hierarchyBar.icon) {\n  <div class=\"hierarchy-bar-node-icon\">\n    <ng-container\n      [ngTemplateOutlet]=\"hierarchyBar.icon\"\n      [ngTemplateOutletContext]=\"{ node: node, $implicit: node }\">\n    </ng-container>\n  </div>\n}\n\n<!-- Show the name of the current node -->\n<span class=\"hierarchy-bar-node-title\">{{ node?.title }}</span>\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { HierarchyBarService } from '../hierarchy-bar.service';\nimport { HierarchyBarNode } from '../interfaces/hierarchy-bar-node.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar-popover',\n    templateUrl: './hierarchy-bar-popover.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HierarchyBarPopoverComponent {\n    readonly hierarchyBar = inject(HierarchyBarService);\n\n    /** Define the nodes to display */\n    @Input() nodes: HierarchyBarNode[] = [];\n\n    /** Define the loading state */\n    @Input() loading: boolean;\n\n    /** Defines if dropdown items should have separators between them to distinguish if nodes are siblings or ancestors */\n    @Input() separator: boolean = false;\n\n    /** Emit a select event when an item ahs been clicked or enter key pressed */\n    @Output() selected = new EventEmitter<HierarchyBarNode>();\n\n}\n","<!-- Loading Indicator -->\n@if (loading) {\n  <ul class=\"hierarchy-bar-node-list\">\n    <li class=\"hierarchy-bar-loading-indicator\">\n      <ng-container [ngTemplateOutlet]=\"hierarchyBar.loadingIndicator || defaultLoadingIndicator\"></ng-container>\n    </li>\n  </ul>\n}\n\n<!-- List of children -->\n@if (!loading) {\n  <div class=\"hierarchy-bar-node-list\"\n    [class.hierarchy-bar-node-list-separator]=\"separator\"\n    uxTabbableList\n    [returnFocus]=\"true\">\n    @for (node of nodes; track node; let first = $first) {\n      <ux-hierarchy-bar-popover-item\n        uxFocusIndicator\n        [node]=\"node\"\n        [focusIf]=\"first\"\n        uxTabbableListItem\n        (selected)=\"selected.emit($event)\">\n      </ux-hierarchy-bar-popover-item>\n    }\n  </div>\n}\n\n<!-- Loading Indicator Template -->\n<ng-template #defaultLoadingIndicator>\n  <div class=\"hierarchy-bar-loading-icon\" alt=\"Hierarchy Bar Loading Indicator\">\n    <div class=\"spinner spinner-accent spinner-bounce-middle\"></div>\n  </div>\n\n  <!-- Show the name of the current node -->\n  <span class=\"hierarchy-bar-loading-title\">Loading...</span>\n</ng-template>","import { ChangeDetectionStrategy, Component, ElementRef, inject, Input, OnDestroy, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { HierarchyBarNodeComponent } from '../hierarchy-bar-node/hierarchy-bar-node.component';\nimport { HierarchyBarService } from '../hierarchy-bar.service';\nimport { HierarchyBarNode } from '../interfaces/hierarchy-bar-node.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar-standard',\n    templateUrl: './hierarchy-bar-standard.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HierarchyBarStandardComponent implements OnDestroy {\n    readonly hierarchyBar = inject(HierarchyBarService);\n\n    /** Determine the mode of the hierarchy bar */\n    @Input() mode: string;\n\n    /** Determine read only state */\n    @Input() readonly: boolean;\n\n    /** Get the elementRef of the node list */\n    @ViewChild('nodelist', { static: true }) nodelist: ElementRef<HTMLDivElement>;\n\n    /** Get elementRefs for all the nodes */\n    @ViewChildren(HierarchyBarNodeComponent, { read: ElementRef }) nodes: QueryList<ElementRef>;\n\n    /** Get instances for all the nodes */\n    @ViewChildren(HierarchyBarNodeComponent) nodeInstances: QueryList<HierarchyBarNodeComponent>;\n\n    @ViewChildren('barNodes', { read: ElementRef }) barNodes: QueryList<ElementRef>;\n\n    /** Value in pixels to translate the visible nodes by to fill the empty space occupied by hidden nodes */\n    overflowTranslateOffset = 0;\n\n    /** Identify which nodes are overflowing */\n    overflow$ = new BehaviorSubject<HierarchyBarNode[]>([]);\n\n    /** Determine if there is any overflow */\n    isOverflowing$ = new BehaviorSubject<boolean>(false);\n\n    /** Unsubscribe from all subscriptions when component is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        // subscribe to changes in the selected node - update the UI after the render\n        this.hierarchyBar.nodes$\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(() => requestAnimationFrame(this.scrollIntoView.bind(this)));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * When there is overflow ensure that the rightmost\n     * node remains in view at all times. The nodes no longer\n     * visible should be displayed in a popover available on the\n     * overflow indicator\n     */\n    scrollIntoView(): void {\n        if (!this.nodelist) {\n            return;\n        }\n\n        // get the native element\n        const { nativeElement } = this.nodelist;\n        const isOverflowing = nativeElement.scrollWidth > nativeElement.offsetWidth;\n\n        // emit whether we are overflowing or not\n        this.isOverflowing$.next(isOverflowing);\n\n        // we don't need to do anything else if there is no overflow\n        if (!isOverflowing) {\n            this.nodeInstances.forEach((node) => (node.visible = true));\n            this.overflowTranslateOffset = 0;\n            return;\n        }\n\n        let isFull: boolean = false;\n\n        // find the nodes that should be visible (we start at the rightmost node)\n        const nodes = this.nodeInstances.toArray().reduceRight<HierarchyBarNodeComponent[]>((visibleNodes, node) => {\n            // there must always be one visible node\n            if (visibleNodes.length === 0) {\n                return [node];\n            }\n\n            // if the hierarchy bar is already occupying the available space then we can skip calculations\n            if (isFull) {\n                // hide the node\n                node.visible = false;\n                return visibleNodes;\n            }\n\n            // get the cumulative width of all the visible nodes\n            const consumedWidth = visibleNodes.reduce((totalWidth, visibleNode) => totalWidth + visibleNode.width, 0);\n\n            // get the width that would be consumed if this node was included\n            const width = node.width + consumedWidth;\n            isFull = width > nativeElement.offsetWidth;\n            node.visible = !isFull;\n\n            if (isFull) {\n                this.overflowTranslateOffset = this.nodelist.nativeElement.clientWidth - consumedWidth;\n            }\n\n            return isFull ? visibleNodes : [...visibleNodes, node];\n        }, []);\n\n        if (nodes.length === 1 && this.nodelist.nativeElement.offsetWidth < nodes[0].width) {\n            this.overflowTranslateOffset = 0;\n        }\n\n        // move the scroll position to always show the last item\n        this.nodelist.nativeElement.scrollLeft = nativeElement.scrollWidth - nativeElement.offsetWidth;\n\n        // determine which nodes should be hidden\n        const nodesHidden = this.nodeInstances.filter(node => {\n            return !node.visible;\n        });\n        this.overflow$.next(nodesHidden.map(node => node.node));\n    }\n}\n","<!-- Allow content to be placed on the left of the items -->\n<div class=\"hierarchy-bar-addons\">\n  @if (isOverflowing$ | async) {\n    <div\n      #popover=\"ux-popover\"\n      class=\"hierarchy-bar-overflow-indicator\"\n      [uxPopover]=\"overflow\"\n      [showTriggers]=\"hierarchyBar.popoverShowTriggers\"\n      [hideTriggers]=\"hierarchyBar.popoverHideTriggers\"\n      [popoverContext]=\"{ popover: popover }\"\n      placement=\"bottom\"\n      popoverClass=\"hierarchy-bar-popover\">\n      <ng-container\n        [ngTemplateOutlet]=\"hierarchyBar.overflowTemplate || defaultOverflowTemplate\"\n        [ngTemplateOutletContext]=\"{ $implicit: overflow$ | async }\">\n      </ng-container>\n      <button\n        [attr.aria-label]=\"hierarchyBar.showSiblingsAriaLabel\"\n        uxFocusIndicator\n        uxFocusIndicatorOrigin\n        class=\"hierarchy-bar-node-arrow\"\n        placement=\"bottom\"\n        [uxPopover]=\"nodeList\"\n        popoverClass=\"hierarchy-bar-popover\"\n        role=\"button\"\n        tabindex=\"0\"\n        [disabled]=\"readonly\"\n        #popover=\"ux-popover\"\n        [popoverContext]=\"{ popover: popover }\"\n        [showTriggers]=\"hierarchyBar.popoverShowTriggers\"\n        [hideTriggers]=\"hierarchyBar.popoverHideTriggers\"\n        type=\"button\">\n        <ux-icon name=\"next\" class=\"hierarchy-bar-node-arrow-icon\"></ux-icon>\n      </button>\n    </div>\n  }\n  <ng-content select=\"left-addons\"></ng-content>\n</div>\n\n<div #nodelist class=\"hierarchy-bar-nodes\" (uxResize)=\"scrollIntoView()\">\n  @for (node of hierarchyBar.nodes$ | async; track node; let i = $index; let last = $last) {\n    <ux-hierarchy-bar-node\n      #barNodes\n      [mode]=\"mode\"\n      [readonly]=\"readonly\"\n      [node]=\"node\"\n      [popoverTemplate]=\"content\"\n      (selected)=\"hierarchyBar.selectNode(node)\"\n      [offset]=\"-overflowTranslateOffset\"\n      [style.max-width.px]=\"(isOverflowing$ | async) && last ? nodelist.offsetWidth : null\">\n    </ux-hierarchy-bar-node>\n  }\n\n  <!-- Allow content to be placed after the last node -->\n  <div class=\"hierarchy-bar-addons\">\n    <ng-content select=\"trailing-addons\"></ng-content>\n  </div>\n</div>\n\n<!-- Allow content to be placed on the right of the items -->\n<div class=\"hierarchy-bar-addons\">\n  <ng-content select=\"right-addons\"></ng-content>\n</div>\n\n<!-- Template for the popover list -->\n<ng-template #content let-node=\"node\" let-popover=\"popover\">\n  <ux-hierarchy-bar-popover\n    [loading]=\"(hierarchyBar.getChildren(node) | async)?.loading\"\n    [nodes]=\"(hierarchyBar.getChildren(node) | async)?.children\"\n    (selected)=\"hierarchyBar.selectNode($event); popover.hide()\">\n  </ux-hierarchy-bar-popover>\n</ng-template>\n\n<!-- Template for the popover list -->\n<ng-template #nodeList let-node=\"node\" let-popover=\"popover\">\n  <ux-hierarchy-bar-popover\n    [nodes]=\"node\"\n    (selected)=\"hierarchyBar.selectNode($event); popover.hide()\">\n  </ux-hierarchy-bar-popover>\n</ng-template>\n\n<!-- Template for the overflow popover list -->\n<ng-template #overflow let-popover=\"popover\">\n  <div uxTabbableList [returnFocus]=\"true\">\n    @for (child of overflow$ | async; track child; let first = $first) {\n      <ux-hierarchy-bar-popover-item\n        uxFocusIndicator\n        [node]=\"child\"\n        [focusIf]=\"first\"\n        uxTabbableListItem\n        (selected)=\"hierarchyBar.selectNode(child); popover.hide()\">\n      </ux-hierarchy-bar-popover-item>\n    }\n  </div>\n</ng-template>\n\n<!-- Default Overflow Template -->\n<ng-template #defaultOverflowTemplate>\n  <button\n    uxFocusIndicator\n    uxFocusIndicatorOrigin\n    [disabled]=\"readonly\"\n    class=\"overflow-button\"\n    aria-label=\"Show parents\"\n    role=\"button\"\n    type=\"button\">\n    <ux-icon name=\"more\"></ux-icon>\n  </button>\n</ng-template>\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, Renderer2, ViewChild } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../../../directives/resize/index';\nimport { HierarchyBarService } from '../hierarchy-bar.service';\nimport { HierarchyBarNodeChildren } from '../interfaces/hierarchy-bar-node-children.interface';\nimport { HierarchyBarNode } from '../interfaces/hierarchy-bar-node.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar-collapsed',\n    templateUrl: './hierarchy-bar-collapsed.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HierarchyBarCollapsedComponent implements AfterViewInit, OnDestroy {\n    readonly hierarchyBar = inject(HierarchyBarService);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _resizeService = inject(ResizeService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Determine read only state */\n    @Input() readonly: boolean;\n\n    /** Get the first node to display */\n    _first: HierarchyBarNode;\n\n    /** Get the last node to display */\n    _last: HierarchyBarNode;\n\n    /** Get all the sibling nodes */\n    get _siblings(): Observable<HierarchyBarNodeChildren> {\n        return this.hierarchyBar.getSiblings(this._last);\n    }\n\n    /** Get all the nodes between the first and last nodes */\n    get _parents(): HierarchyBarNode[] {\n        return this._nodes.filter(node => node !== this._first && node !== this._last);\n    }\n\n    /** Get the nodes as an array */\n    private get _nodes(): HierarchyBarNode[] {\n        return this.hierarchyBar.nodes$.value;\n    }\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Access the node container */\n    @ViewChild('nodes', { static: true }) nodeContainer: ElementRef;\n\n    ngAfterViewInit(): void {\n        // Update the UI when the selected nodes change\n        this.hierarchyBar.nodes$.pipe(takeUntil(this._onDestroy)).subscribe(this.update.bind(this));\n\n        // watch for the host element size changing\n        this._resizeService.addResizeListener(this._elementRef.nativeElement).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.updateOverflow());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        // remove the resize event listener\n        this._resizeService.removeResizeListener(this._elementRef.nativeElement);\n    }\n\n    private update(nodes: HierarchyBarNode[]): void {\n        this._first = nodes[0];\n        this._last = nodes.length > 1 ? nodes[nodes.length - 1] : null;\n        this.updateOverflow();\n\n        this._changeDetector.detectChanges();\n    }\n\n    updateOverflow(): void {\n\n        // remove the class if it is present\n        this._renderer.removeClass(this.nodeContainer.nativeElement, 'hierarchy-bar-nodes-overflow');\n\n        // check if there is overflow\n        if (this.nodeContainer.nativeElement.scrollWidth > this.nodeContainer.nativeElement.offsetWidth) {\n            this._renderer.addClass(this.nodeContainer.nativeElement, 'hierarchy-bar-nodes-overflow');\n        }\n    }\n}\n","<!-- Allow content to be placed on the left of the items -->\n<div class=\"hierarchy-bar-addons\">\n  <ng-content select=\"left-addons\"></ng-content>\n</div>\n\n<div #nodes class=\"hierarchy-bar-nodes\">\n\n  @if (_first) {\n    <ux-hierarchy-bar-node\n      [readonly]=\"readonly\"\n      [popoverTemplate]=\"content\"\n      [node]=\"_first\"\n      (selected)=\"hierarchyBar.selectNode($event)\">\n    </ux-hierarchy-bar-node>\n  }\n\n  @if (_parents.length > 0) {\n    <div class=\"hierarchy-bar-overflow\">\n      <div class=\"hierarchy-bar-overflow-container\">\n        <ng-container [ngTemplateOutlet]=\"hierarchyBar.overflowTemplate || defaultOverflowTemplate\"\n          [ngTemplateOutletContext]=\"{ $implicit: _parents }\">\n        </ng-container>\n      </div>\n      <button [attr.aria-label]=\"hierarchyBar.showSiblingsAriaLabel\"\n        uxFocusIndicator\n        uxFocusIndicatorOrigin\n        class=\"hierarchy-bar-node-arrow\"\n        placement=\"bottom\"\n        [uxPopover]=\"siblingsTemplate\"\n        popoverClass=\"hierarchy-bar-popover\"\n        role=\"button\"\n        tabindex=\"0\"\n        [disabled]=\"readonly\"\n        #popover=\"ux-popover\"\n        [popoverContext]=\"{ popover: popover }\"\n        [showTriggers]=\"hierarchyBar.popoverShowTriggers\"\n        [hideTriggers]=\"hierarchyBar.popoverHideTriggers\"\n        type=\"button\">\n        <ux-icon name=\"next\" class=\"hierarchy-bar-node-arrow-icon\"></ux-icon>\n      </button>\n    </div>\n  }\n\n\n  @if (_last) {\n    <ux-hierarchy-bar-node\n      [readonly]=\"readonly\"\n      [popoverTemplate]=\"content\"\n      [node]=\"_last\"\n      (selected)=\"hierarchyBar.selectNode($event)\">\n    </ux-hierarchy-bar-node>\n  }\n\n  <!-- Allow content to be placed after the last node -->\n  <div class=\"hierarchy-bar-addons\">\n    <ng-content select=\"trailing-addons\"></ng-content>\n  </div>\n\n</div>\n\n<!-- Allow content to be placed on the right of the items -->\n<div class=\"hierarchy-bar-addons\">\n  <ng-content select=\"right-addons\"></ng-content>\n</div>\n\n<!-- Template for the popover list -->\n<ng-template #content let-node=\"node\" let-popover=\"popover\">\n  <ux-hierarchy-bar-popover\n    [loading]=\"(hierarchyBar.getChildren(node) | async)?.loading\"\n    [nodes]=\"(hierarchyBar.getChildren(node) | async)?.children\"\n    (selected)=\"hierarchyBar.selectNode($event); popover.hide()\">\n  </ux-hierarchy-bar-popover>\n</ng-template>\n\n<!-- Template for the siblings popover list -->\n<ng-template #siblingsTemplate let-popover=\"popover\">\n  <ux-hierarchy-bar-popover\n    [nodes]=\"(_siblings | async)?.children\"\n    [loading]=\"(_siblings | async)?.loading\"\n    (selected)=\"hierarchyBar.selectNode($event); popover.hide()\">\n  </ux-hierarchy-bar-popover>\n</ng-template>\n\n<!-- Template for the parents popover list -->\n<ng-template #parentsTemplate let-popover=\"popover\">\n  <ux-hierarchy-bar-popover\n    [nodes]=\"_parents\"\n    [separator]=\"true\"\n    (selected)=\"hierarchyBar.selectNode($event); popover.hide()\">\n  </ux-hierarchy-bar-popover>\n</ng-template>\n\n<!-- Default Overflow Template -->\n<ng-template #defaultOverflowTemplate>\n  <button uxFocusIndicator\n    uxFocusIndicatorOrigin\n    [disabled]=\"readonly\"\n    class=\"overflow-button\"\n    aria-label=\"Show parents\"\n    [uxPopover]=\"parentsTemplate\"\n    popoverClass=\"hierarchy-bar-popover\"\n    role=\"button\"\n    tabindex=\"0\"\n    #popover=\"ux-popover\"\n    [popoverContext]=\"{ popover: popover }\"\n    [showTriggers]=\"hierarchyBar.popoverShowTriggers\"\n    [hideTriggers]=\"hierarchyBar.popoverHideTriggers\"\n    placement=\"bottom\"\n    type=\"button\">\n    <ux-icon name=\"more\"></ux-icon>\n  </button>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, inject, Input, OnDestroy, Output, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { OverlayTrigger } from '../tooltip/index';\nimport { HierarchyBarNodeIconDirective } from './hierarchy-bar-node/hierarchy-bar-node-icon.directive';\nimport { HierarchyBarService } from './hierarchy-bar.service';\nimport { HierarchyBarIconContext } from './interfaces/hierarchy-bar-node-icon-context.interface';\nimport { HierarchyBarNode } from './interfaces/hierarchy-bar-node.interface';\nimport { HierarchyBarMode, IHierachyBarComponent } from './interfaces/hierarchy-bar.interface';\n\n@Component({\n    selector: 'ux-hierarchy-bar',\n    templateUrl: './hierarchy-bar.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [HierarchyBarService]\n})\nexport class HierarchyBarComponent implements IHierachyBarComponent, OnDestroy {\n    private readonly _hierarchyBar = inject(HierarchyBarService);\n\n    /** Define which presentational mode we should display */\n    @Input() mode: HierarchyBarMode = 'standard';\n\n    /** hierarchy bar as being readonly - default false */\n    @Input() readonly: boolean = false;\n\n    /** Define the root node of the hierarchy bar */\n    @Input() set root(node: HierarchyBarNode) {\n        this._hierarchyBar.setRootNode(node);\n    }\n\n    /** Define the selected node in the hierarchy bar */\n    @Input() set selected(node: HierarchyBarNode) {\n        this._hierarchyBar.selectNode(node);\n    }\n\n    /** Provide a custom loading indicator */\n    @Input() set loadingIndicator(loadingIndicator: TemplateRef<void>) {\n        this._hierarchyBar.loadingIndicator = loadingIndicator;\n    }\n\n    /** Provide a custom overflow template */\n    @Input() set overflowTemplate(overflowTemplate: TemplateRef<void>) {\n        this._hierarchyBar.overflowTemplate = overflowTemplate;\n    }\n\n    /** Define the events that show the popover when interacting with the arrows */\n    @Input() set popoverShowTriggers(popoverShowTriggers: OverlayTrigger[]) {\n        this._hierarchyBar.popoverShowTriggers = popoverShowTriggers;\n    }\n\n    /** Define the events that hide the popover when interacting with the arrows */\n    @Input() set popoverHideTriggers(popoverHideTriggers: OverlayTrigger[]) {\n        this._hierarchyBar.popoverHideTriggers = popoverHideTriggers;\n    }\n\n    /** Define the aria label for the show siblings popover button */\n    @Input() set showSiblingsAriaLabel(label: string) {\n        this._hierarchyBar.showSiblingsAriaLabel = label;\n    }\n\n    /** Emit when the selected node changes */\n    @Output() selectedChange = new EventEmitter<HierarchyBarNode>();\n\n    /** Allow a custom icon to be specified */\n    @ContentChild(HierarchyBarNodeIconDirective, { read: TemplateRef, static: false })\n    set icon(icon: TemplateRef<HierarchyBarIconContext>) {\n        this._hierarchyBar.icon = icon;\n    }\n\n    /** Unsubscribe from all subscriptions when component is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // emit the latest selection value\n        this._hierarchyBar.selection$.pipe(takeUntil(this._onDestroy))\n            .subscribe(selection => this.selectedChange.next(selection));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","<!-- Hierarchy Bar - Standard Layout -->\n@if (mode !== 'collapsed') {\n  <ux-hierarchy-bar-standard [readonly]=\"readonly\" [mode]=\"mode\">\n    <!-- Forward the content to the correct layout -->\n    <ng-container ngProjectAs=\"left-addons\" [ngTemplateOutlet]=\"leftAddons\"></ng-container>\n    <ng-container ngProjectAs=\"trailing-addons\" [ngTemplateOutlet]=\"trailingAddons\"></ng-container>\n    <ng-container ngProjectAs=\"right-addons\" [ngTemplateOutlet]=\"rightAddons\"></ng-container>\n  </ux-hierarchy-bar-standard>\n}\n\n<!-- Hierarchy Bar - Collapsed Layout -->\n@if (mode === 'collapsed') {\n  <ux-hierarchy-bar-collapsed [readonly]=\"readonly\">\n    <!-- Forward the content to the correct layout -->\n    <ng-container ngProjectAs=\"left-addons\" [ngTemplateOutlet]=\"leftAddons\"></ng-container>\n    <ng-container ngProjectAs=\"trailing-addons\" [ngTemplateOutlet]=\"trailingAddons\"></ng-container>\n    <ng-container ngProjectAs=\"right-addons\" [ngTemplateOutlet]=\"rightAddons\"></ng-container>\n  </ux-hierarchy-bar-collapsed>\n}\n\n<!-- We can only have one ng-content so this allows us to use it more than once -->\n<ng-template #leftAddons>\n  <ng-content select=\"[uxHierarchyBarLeftAddon]\"></ng-content>\n</ng-template>\n\n<ng-template #trailingAddons>\n  <ng-content select=\"[uxHierarchyBarTrailingAddon]\"></ng-content>\n</ng-template>\n\n<ng-template #rightAddons>\n  <ng-content select=\"[uxHierarchyBarRightAddon]\"></ng-content>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { ClickOutsideDirective } from './click-outside.directive';\n\n\n@NgModule({\n    exports: [ClickOutsideDirective],\n    declarations: [ClickOutsideDirective]\n})\nexport class ClickOutsideModule { }\n","import { ObserversModule } from '@angular/cdk/observers';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ClickOutsideModule } from '../../directives/click-outside/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { PopoverComponent } from './popover.component';\nimport { PopoverDirective } from './popover.directive';\n\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        OverlayModule,\r\n        ObserversModule,\r\n        ClickOutsideModule,\r\n        TooltipModule\r\n    ],\r\n    exports: [PopoverDirective],\r\n    declarations: [PopoverComponent, PopoverDirective]\r\n})\nexport class PopoverModule {\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { IconModule } from '../icon/index';\nimport { PopoverModule } from '../popover/index';\nimport { HierarchyBarCollapsedComponent } from './hierarchy-bar-collapsed/hierarchy-bar-collapsed.component';\nimport { HierarchyBarNodeIconDirective } from './hierarchy-bar-node/hierarchy-bar-node-icon.directive';\nimport { HierarchyBarNodeComponent } from './hierarchy-bar-node/hierarchy-bar-node.component';\nimport { HierarchyBarPopoverItemComponent } from './hierarchy-bar-popover-item/hierarchy-bar-popover-item.component';\nimport { HierarchyBarPopoverComponent } from './hierarchy-bar-popover/hierarchy-bar-popover.component';\nimport { HierarchyBarStandardComponent } from './hierarchy-bar-standard/hierarchy-bar-standard.component';\nimport { HierarchyBarComponent } from './hierarchy-bar.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FocusIfModule,\n        IconModule,\n        PopoverModule,\n        ResizeModule,\n    ],\n    exports: [\n        HierarchyBarComponent,\n        HierarchyBarStandardComponent,\n        HierarchyBarCollapsedComponent,\n        HierarchyBarNodeIconDirective\n    ],\n    declarations: [\n        HierarchyBarComponent,\n        HierarchyBarStandardComponent,\n        HierarchyBarCollapsedComponent,\n        HierarchyBarNodeComponent,\n        HierarchyBarPopoverComponent,\n        HierarchyBarPopoverItemComponent,\n        HierarchyBarNodeIconDirective\n    ],\n})\nexport class HierarchyBarModule { }\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, inject, Input, OnChanges, OnDestroy, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { MenuTriggerDirective } from '../menu/menu-trigger/menu-trigger.directive';\n\n@Component({\n    selector: 'ux-input-dropdown',\n    templateUrl: './input-dropdown.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: forwardRef(() => InputDropdownComponent)\n        }\n    ],\n    host: {\n        '[class.ux-select-disabled]': 'disabled',\n        '[attr.aria-label]': 'null'\n    }\n})\nexport class InputDropdownComponent<T> implements ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Define the selected item */\n    @Input() selected: T;\n\n    /** Filter text */\n    @Input() filter: string = '';\n\n    /** Hide the filter input */\n    @Input() hideFilter: boolean;\n\n    /** Define the max height of the dropdown */\n    @Input() set maxHeight(value: string | number) {\n        this._maxHeight = coerceCssPixelValue(value);\n    }\n\n    /** Controls the disabled state of the input-dropdown. */\n    @Input() disabled: boolean = false;\n\n    /** Define if null values are allowed */\n    @Input() allowNull: boolean;\n\n    /** Define the placeholder for the filter input */\n    @Input() placeholder: string = 'Type to filter...';\n\n    /** Aria label of the filter field. If not specified, the placeholder will be used. */\n    @Input('aria-label') ariaLabel: string = '';\n\n    /** ID of the element which serves as a label for the filter field. */\n    @Input() ariaLabelledby: string;\n\n    /** Aria label of the search button icon. */\n    @Input() searchFilterButtonAriaLabel: string = 'Search';\n\n    /** Aria label of the clear button icon. */\n    @Input() clearFilterButtonAriaLabel: string = 'Clear';\n\n    /** Emit when the selected item is changed */\n    @Output() selectedChange = new EventEmitter<T>();\n\n    /** Emit when the filter text is changed */\n    @Output() filterChange = new EventEmitter<string>();\n\n    /** Emits when `dropdownOpen` changes. */\n    @Output() dropdownOpenChange = new EventEmitter<boolean>();\n\n    /** The status of the dropdown. */\n    @Input() dropdownOpen: boolean = false;\n\n    /** Access the display content template if specified */\n    @ContentChild('displayContent', { static: false }) displayContentRef: TemplateRef<void>;\n\n    /** Access the dropdown menu trigger directive */\n    @ViewChild(MenuTriggerDirective, { static: false }) menuTrigger: MenuTriggerDirective;\n\n    /** Access the filter text input element */\n    @ViewChild('filterInput', { static: false }) filterInputElement: ElementRef<HTMLInputElement>;\n\n    /** Store the max height */\n    _maxHeight: string;\n\n    /** Store the filter button aria label */\n    _filterButtonAriaLabel: string = this.searchFilterButtonAriaLabel;\n\n    /** Store the change callback provided by Angular Forms */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChange: (_: T) => void = () => { };\n\n    /** Store the touched callback provided by Angular Forms */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouched: () => void = () => { };\n\n    /** Unsubscribe from all observables on component destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    ngOnChanges(changes: SimpleChanges): void {\n\n        // if the dropdownOpen state changes via the input we should show or hide the input accordingly\n        if (changes.dropdownOpen && !changes.dropdownOpen.firstChange && changes.dropdownOpen.currentValue !== changes.dropdownOpen.previousValue) {\n            changes.dropdownOpen.currentValue ? this.menuTrigger.openMenu() : this.menuTrigger.closeMenu();\n        }\n\n        if (changes.selected) {\n\n            // if an item is programmatically selected we should close the menu if it is open\n            if (this.menuTrigger && !changes.selected.firstChange) {\n                this.menuTrigger.closeMenu();\n            }\n\n            this.resetFilter();\n            this.selectedChange.emit(changes.selected.currentValue);\n            this.onChange(changes.selected.currentValue);\n            this.onTouched();\n        }\n\n        if (changes.filter) {\n            this.setFilterButtonAriaLabel();\n        }\n    }\n\n    ngAfterViewInit(): void {\n\n        // if the user has initially set the dropdownOpen input to true we should open the menu\n        // once we have access to the ViewChild menu trigger directive\n        if (this.dropdownOpen) {\n            // trigger menu open on the next tick to avoid expression changed issues)\n            Promise.resolve().then(() => this.menuTrigger.openMenu());\n        }\n\n        this._changeDetector.detectChanges();\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    resetFilter(): void {\n        this.filter = '';\n        this.filterChange.emit(this.filter);\n        this._focusFilter();\n    }\n\n    registerOnChange(onChange: (value: T) => void): void {\n        this.onChange = onChange;\n    }\n\n    registerOnTouched(onTouched: () => void): void {\n        this.onTouched = onTouched;\n    }\n\n    writeValue(value: T): void {\n        this.selected = value;\n        this._changeDetector.markForCheck();\n    }\n\n    resetValue(event: Event): void {\n        if (this.disabled) {\n            return;\n        }\n        this.writeValue(undefined);\n        this.selectedChange.emit(undefined);\n        event.stopPropagation();\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    onMenuOpen(): void {\n        if (this.dropdownOpen !== true) {\n            this.dropdownOpen = true;\n            this.dropdownOpenChange.emit(this.dropdownOpen);\n            this._focusFilter();\n        }\n    }\n\n    onMenuClose(): void {\n        if (this.dropdownOpen !== false) {\n            this.dropdownOpen = false;\n            this.dropdownOpenChange.emit(this.dropdownOpen);\n        }\n    }\n\n    _focusFilter(): void {\n        if (this.filterInputElement) {\n            this.filterInputElement.nativeElement.focus();\n        }\n    }\n\n    inputFocusHandler(): void {\n        if (!this.dropdownOpen) {\n            this.dropdownOpen = true;\n            this.dropdownOpenChange.emit(this.dropdownOpen);\n        }\n    }\n\n    toggleMenu(): void {\n        if (this.disabled) {\n            return;\n        }\n        this.dropdownOpen = !this.dropdownOpen;\n        this.dropdownOpenChange.emit(this.dropdownOpen);\n        this.menuTrigger.toggleMenu();\n    }\n\n    setFilterButtonAriaLabel() {\n        this._filterButtonAriaLabel = this.filter === ''\n            ? this.searchFilterButtonAriaLabel : this.clearFilterButtonAriaLabel;\n    }\n}\n","<div class=\"ux-select-container\">\n  <button #button type=\"button\" class=\"form-control\"\n    [uxMenuTriggerFor]=\"menu\"\n    [disabled]=\"disabled\">\n    <ng-template #defaultDisplayContent>{{selected ? (selected | json) : '-'}}</ng-template>\n    <ng-container [ngTemplateOutlet]=\"displayContentRef || defaultDisplayContent\"></ng-container>\n  </button>\n  <div class=\"ux-select-icons\">\n    @if (allowNull && selected) {\n      <ux-icon name=\"close\"\n        uxFocusIndicator\n        class=\"ux-select-icon ux-select-clear-icon\"\n        (click)=\"resetValue($event)\"\n        (keydown.enter)=\"resetValue($event)\"\n        tabindex=\"0\">\n      </ux-icon>\n    }\n    <ux-icon name=\"chevron-down\"\n      class=\"ux-select-icon ux-select-chevron-icon\"\n      (click)=\"toggleMenu(); $event.stopPropagation()\">\n    </ux-icon>\n  </div>\n</div>\n\n<ux-menu #menu menuClass=\"select-menu\"\n  (opened)=\"onMenuOpen()\"\n  (closed)=\"onMenuClose()\">\n\n  <div [style.max-height]=\"_maxHeight\"\n    [style.width.px]=\"button.offsetWidth\">\n\n    @if (!hideFilter) {\n      <div\n        class=\"filter-container\">\n        <input #filterInput\n          type=\"text\"\n          [placeholder]=\"placeholder\"\n          class=\"form-control\"\n          [(ngModel)]=\"filter\"\n          (input)=\"filterChange.emit(filter)\"\n          (click)=\"$event.stopPropagation()\"\n          [attr.aria-label]=\"ariaLabel || placeholder\"\n          [attr.aria-labelledby]=\"ariaLabelledby\"\n          (focus)=\"inputFocusHandler()\">\n          <button type=\"button\"\n            class=\"btn btn-flat filter-button\"\n            [attr.aria-label]=\"_filterButtonAriaLabel\"\n            (click)=\"resetFilter(); $event.stopPropagation();\"\n            [tabindex]=\"filter.length > 0 ? 0 : -1\">\n            <ux-icon [name]=\"filter.length === 0 ? 'search' : 'close'\"></ux-icon>\n          </button>\n        </div>\n      }\n\n      <ng-content></ng-content>\n\n    </div>\n  </ux-menu>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/icon.module';\nimport { MenuModule } from '../menu/menu.module';\nimport { InputDropdownComponent } from './input-dropdown.component';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, IconModule, MenuModule, AccessibilityModule],\n  declarations: [\n    InputDropdownComponent\n  ],\n  exports: [\n    InputDropdownComponent\n    ]\n})\nexport class InputDropdownModule { }\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport enum SidePanelAnimationState {\n    Closed = 'closed',\n    Open = 'open',\n    OpenImmediate = 'openImmediate'\n}\n\nexport const sidePanelStateAnimation: AnimationTriggerMetadata = trigger('panelState', [\n    state(\n        SidePanelAnimationState.Closed,\n        style({ visibility: 'hidden' })\n    ),\n    state(\n        `${SidePanelAnimationState.Open}, ${SidePanelAnimationState.OpenImmediate}`,\n        style({ visibility: 'visible', transform: 'none' })\n    ),\n    transition(\n        `void <=> ${SidePanelAnimationState.Open}`,\n        animate('0.2s cubic-bezier(0.49, 1, 0.38, 0.98)')\n    ),\n    transition(\n        `void <=> ${SidePanelAnimationState.OpenImmediate}`,\n        animate('0s')\n    )\n]);\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class SidePanelService {\n\n    /** Emit the open state when it changes */\n    open$ = new BehaviorSubject<boolean>(false);\n\n    open(): void {\n        this.open$.next(true);\n    }\n\n    close(): void {\n        this.open$.next(false);\n    }\n}","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, skip, takeUntil } from 'rxjs/operators';\nimport { FocusIndicatorOriginService } from '../../directives/accessibility/index';\nimport { SidePanelAnimationState, sidePanelStateAnimation } from './side-panel-animations';\nimport { SidePanelService } from './side-panel.service';\n\n@Component({\n    selector: 'ux-side-panel',\n    exportAs: 'ux-side-panel',\n    templateUrl: 'side-panel.component.html',\n    providers: [SidePanelService],\n    animations: [sidePanelStateAnimation],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'ux-side-panel'\n    }\n})\nexport class SidePanelComponent implements OnInit, OnDestroy {\n    protected readonly service = inject(SidePanelService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _focusOrigin = inject(FocusIndicatorOriginService);\n\n    @Input()\n    @HostBinding('class.open')\n    get open(): boolean {\n        return this.service.open$.value;\n    }\n\n    set open(value: boolean) {\n        this.service.open$.next(value);\n    }\n\n    @Input()\n    @HostBinding('class.inline')\n    inline = false;\n\n    @Input()\n    attachTo: 'window' | 'container' = 'window';\n\n    @Input()\n    width: string | number = '50%';\n\n    @Input()\n    minWidth: string | number;\n\n    @Input()\n    maxWidth: string | number;\n\n    @Input()\n    top: string | number = '0';\n\n    @Input()\n    @HostBinding('attr.aria-modal')\n    modal = false;\n\n    @Input()\n    @HostBinding('class.animate')\n    animate = false;\n\n    @Input()\n    closeOnExternalClick = false;\n\n    @Input()\n    focusOnShow: boolean = false;\n\n    @Output()\n    openChange = new EventEmitter<boolean>();\n\n    @Input()\n    closeOnEscape: boolean = true;\n\n    get position(): string {\n        if (this.inline) {\n            return 'static';\n        }\n        if (this.attachTo === 'container') {\n            return 'absolute';\n        }\n        return 'fixed';\n    }\n\n    get cssWidth(): string {\n        return this.getCssValue(this.width);\n    }\n\n    get cssTop(): string {\n        return this.getCssValue(this.top);\n    }\n\n    get cssMinWidth(): string {\n        return this.getCssValue(this.minWidth);\n    }\n\n    get cssMaxWidth(): string {\n        return this.getCssValue(this.maxWidth);\n    }\n\n    @HostBinding('style.width')\n    get componentWidth(): string {\n        if (this.inline) {\n            return this.open ? this.cssWidth : '0';\n        }\n        return null;\n    }\n\n    get hostWidth(): string {\n        return this.inline ? '100%' : this.cssWidth;\n    }\n\n    get hostMinWidth(): string {\n        return this.inline ? undefined : this.cssMinWidth;\n    }\n\n    get hostMaxWidth(): string {\n        return this.inline ? undefined : this.cssMaxWidth;\n    }\n\n    animationPanelState: SidePanelAnimationState = SidePanelAnimationState.Closed;\n\n    protected _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n\n        this.service.open$.pipe(skip(1), distinctUntilChanged(), takeUntil(this._onDestroy))\n            .subscribe(isOpen => this.openChange.emit(isOpen));\n\n        this.service.open$.pipe(distinctUntilChanged(), takeUntil(this._onDestroy)).subscribe(isOpen => {\n            this.animationPanelState = isOpen\n                ? this.animate\n                    ? SidePanelAnimationState.Open\n                    : SidePanelAnimationState.OpenImmediate\n                : SidePanelAnimationState.Closed;\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    openPanel(): void {\n        this.service.open();\n    }\n\n    closePanel(): void {\n        this.service.close();\n    }\n\n    @HostListener('document:keyup.escape')\n    _onDocumentEscape(): void {\n        if (this.open && this.closeOnEscape) {\n            this._focusOrigin.setOrigin('keyboard');\n            this.closePanel();\n        }\n    }\n\n    @HostListener('document:click', ['$event.target'])\n    _onDocumentClick(target: HTMLElement): void {\n        if (!this.open || !this.closeOnExternalClick) {\n            return;\n        }\n\n        if (!this._elementRef.nativeElement.contains(target) || (target && target.classList.contains('modal-backdrop'))) {\n            this.closePanel();\n        }\n    }\n\n    private getCssValue(value: number | string): string {\n        if (typeof value === 'number') {\n            return value === 0 ? '0' : value + 'px';\n        }\n        return value;\n    }\n}\n","@if (modal && open) {\n  <div class=\"modal-backdrop\"\n    [style.position]=\"position\"\n  [style.top]=\"cssTop\"></div>\n}\n\n@if (open) {\n  <div class=\"ux-side-panel-host\"\n    [class.modal-panel]=\"modal\"\n    [style.position]=\"position\"\n    [style.width]=\"hostWidth\"\n    [style.min-width]=\"hostMinWidth\"\n    [style.max-width]=\"hostMaxWidth\"\n    [style.top]=\"cssTop\"\n    [tabindex]=\"open ? 0 : -1\"\n    [@panelState]=\"animationPanelState\"\n    [focusIf]=\"open && focusOnShow\"\n    [focusIfScroll]=\"false\"\n    [cdkTrapFocus]=\"open && modal\"\n    >\n    <ng-content></ng-content>\n  </div>\n}\n","import { Component, ContentChild, Directive, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { sidePanelStateAnimation } from '../side-panel/side-panel-animations';\nimport { SidePanelComponent } from '../side-panel/side-panel.component';\nimport { SidePanelService } from '../side-panel/side-panel.service';\n\n@Directive({\n    selector: '[uxItemDisplayPanelContent]'\n})\nexport class ItemDisplayPanelContentDirective { }\n\n@Directive({\n    selector: '[uxItemDisplayPanelFooter]'\n})\nexport class ItemDisplayPanelFooterDirective { }\n\n@Component({\n    selector: 'ux-item-display-panel',\n    templateUrl: './item-display-panel.component.html',\n    providers: [SidePanelService],\n    animations: [sidePanelStateAnimation],\n    host: {\n        'class': 'ux-side-panel ux-item-display-panel'\n    }\n})\nexport class ItemDisplayPanelComponent extends SidePanelComponent implements OnInit {\n\n    @Input() header: string;\n\n    @Input() boxShadow: boolean = true;\n\n    @Input() closeVisible: boolean = true;\n\n    get preventClose(): boolean {\n        return !this.closeOnExternalClick;\n    }\n\n    @Input()\n    set preventClose(value: boolean) {\n        this.closeOnExternalClick = !value;\n    }\n\n    /** Defines the aria-label for the close button */\n    @Input() closeAriaLabel: string = 'Close';\n\n    @Input() shadow: boolean = false;\n\n    @Output() visibleChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    @ContentChild(ItemDisplayPanelFooterDirective, { static: false }) footer: ItemDisplayPanelFooterDirective;\n\n    @ViewChild('panel', { static: true }) panel: ElementRef;\n\n    @Input()\n    set visible(visible: boolean) {\n        this.open = visible;\n    }\n\n    get visible() {\n        return this.open;\n    }\n\n    constructor() {\n        super();\n\n        this.animate = false;\n        this.closeOnExternalClick = true;\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.service.open$.pipe(distinctUntilChanged(), takeUntil(this._onDestroy)).subscribe(isVisible => this.visibleChange.emit(isVisible));\n    }\n\n    focus(): void {\n        if (this.panel) {\n            this.panel.nativeElement.focus();\n        }\n    }\n}","@if (open) {\n  <div class=\"ux-side-panel-host ux-item-display-panel\" #panel\n    [class.box-shadow]=\"boxShadow\"\n    [style.position]=\"position\"\n    [style.width]=\"hostWidth\"\n    [style.top]=\"cssTop\"\n    [@panelState]=\"animationPanelState\"\n    [tabindex]=\"open ? 0 : -1\"\n    [focusIf]=\"open && focusOnShow\"\n    >\n    <div class=\"ux-side-panel-header\" [class.item-display-panel-shadow]=\"shadow\">\n      <h3>{{ header }}</h3>\n      @if (closeVisible) {\n        <button\n          uxFocusIndicator\n          [attr.aria-label]=\"closeAriaLabel\"\n          type=\"button\"\n          class=\"btn btn-lg btn-link btn-icon button-secondary\"\n          (click)=\"visible = false\">\n          <ux-icon name=\"close\"></ux-icon>\n        </button>\n      }\n    </div>\n    <div class=\"ux-side-panel-content\">\n      <ng-content select=\"[uxItemDisplayPanelContent]\"></ng-content>\n    </div>\n    @if (footer) {\n      <div class=\"ux-side-panel-footer\">\n        <ng-content select=\"[uxItemDisplayPanelFooter]\"></ng-content>\n      </div>\n    }\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/focus-if.module';\nimport { IconModule } from '../icon/index';\nimport { ItemDisplayPanelComponent, ItemDisplayPanelContentDirective, ItemDisplayPanelFooterDirective } from './item-display-panel.component';\n\nconst DECLARATIONS = [\n    ItemDisplayPanelComponent,\n    ItemDisplayPanelContentDirective,\n    ItemDisplayPanelFooterDirective\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FocusIfModule,\n        IconModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS\n})\nexport class ItemDisplayPanelModule { }","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxMarqueeWizardStepIcon]',\n})\nexport class MarqueeWizardStepIconDirective { }","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * This service is required to provide a form of communication\n * between the marquee wizard steps and the containing marquee wizard.\n * We cannot inject the Host due to the steps being content children\n * rather than view children.\n */\n@Injectable()\nexport class WizardService<TWizardStep> {\n    validChange$ = new Subject<WizardValidEvent<TWizardStep>>();\n}\n\nexport interface WizardValidEvent<TWizardStep> {\n    step: TWizardStep;\n    valid: boolean;\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { WizardService } from './wizard.service';\n\n\n@Component({\n    selector: 'ux-wizard-step',\n    templateUrl: './wizard-step.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        'role': 'tabpanel'\n    }\n})\nexport class WizardStepComponent {\n    private readonly _wizardService = inject<WizardService<WizardStepComponent>>(WizardService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** The text to be displayed in the wizard step tab. */\n    @Input() header: string;\n\n    /**\n     * If set to `true` the 'Next' or 'Finish' button will become disabled when the current step is invalid.\n     * This will override the value set on the `ux-wizard`.\n     */\n    @Input() disableNextWhenInvalid: boolean | undefined;\n\n    /**\n     * Defines whether a step is valid. The user will not be able to proceed to the next step if this property has a value of false.\n     * If the new value is false is will also set the visited value to false.\n     */\n    _valid: boolean = true;\n\n    @Input()\n    set valid(value: boolean) {\n        this.setValid(value);\n    }\n\n    get valid(): boolean {\n        return this._valid;\n    }\n\n    /**\n     * A custom function which returns the validation status for the step. This function will be called when 'Next' or\n     * 'Finish' is clicked. A promise may be returned if asynchronous validation is required. If using this property,\n     * ensure that `disableNextWhenInvalid` is false.\n     */\n    @Input() validator: () => boolean | Promise<boolean>;\n\n    /**\n     * Defines whether or not this step has previously been visited.\n     * A visited step can be clicked on and jumped to at any time.\n     * By default, steps will become 'visited' when the user navigates to a step for the first time.\n     */\n    @Input() visited: boolean = false;\n\n    /** Emits when visited changes. */\n    @Output() visitedChange = new EventEmitter<boolean>();\n\n    set active(value: boolean) {\n\n        const active = coerceBooleanProperty(value);\n\n        // store the active state of the step\n        this._active = active;\n\n        // if the value is true then the step should also be marked as visited\n        if (active && !this.visited) {\n            this.setVisitedAndEmitChangeEvent(true);\n        }\n\n        // mark for change detection\n        this._changeDetector.markForCheck();\n    }\n\n    get active(): boolean {\n        return this._active;\n    }\n\n    /**\n     * Defines the currently visible step.\n     */\n    _active: boolean = false;\n\n    setVisitedAndEmitChangeEvent(value: boolean): void {\n        if (value === this.visited) {\n            return;\n        }\n\n        this.visited = value;\n        this.visitedChange.emit(value);\n    }\n\n    protected setValid(value: boolean): void {\n        if (this._valid === value) {\n            return;\n        }\n\n        this._valid = value;\n        this._wizardService.validChange$.next({ step: this, valid: value });\n    }\n}\n","@if (active) {\n  <ng-content></ng-content>\n}","import { AfterContentInit, Component, ContentChild, ContentChildren, EventEmitter, inject, Input, OnDestroy, OnInit, Output, QueryList, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../common/index';\nimport { WizardStepComponent } from './wizard-step.component';\nimport { WizardService, WizardValidEvent } from './wizard.service';\n\nlet uniqueId: number = 0;\n\n@Component({\n    selector: 'ux-wizard',\n    templateUrl: './wizard.component.html',\n    providers: [WizardService],\n    host: {\n        '[class]': 'orientation'\n    }\n})\nexport class WizardComponent implements OnInit, AfterContentInit, OnDestroy {\n    protected readonly _wizardService = inject<WizardService<WizardStepComponent>>(WizardService);\n\n    /** Defines whether or not the wizard should be displayed in a `horizontal` or `vertical` layout. */\n    @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n    /** Defines the text displayed in the 'Next' button. */\n    @Input() nextText: string = 'Next';\n\n    /** Defines the text displayed in the 'Previous' button. */\n    @Input() previousText: string = 'Previous';\n\n    /** Defines the text displayed in the 'Cancel' button. */\n    @Input() cancelText: string = 'Cancel';\n\n    /** Defines the text displayed in the 'Finish' button. */\n    @Input() finishText: string = 'Finish';\n\n    /** Defines the text displayed in the tooltip when the 'Next' button is hovered. */\n    @Input() nextTooltip: string = 'Go to the next step';\n\n    /** Defines the text displayed in the tooltip when the 'Previous' button is hovered. */\n    @Input() previousTooltip: string = 'Go to the previous step';\n\n    /** Defines the text displayed in the tooltip when the 'Cancel' button is hovered. */\n    @Input() cancelTooltip: string = 'Cancel the wizard';\n\n    /** Defines the text displayed in the tooltip when the 'Finish' button is hovered. */\n    @Input() finishTooltip: string = 'Finish the wizard';\n\n    /** Defines the text for the aria label on the 'Next' button. */\n    @Input() nextAriaLabel: string = 'Go to the next step';\n\n    /** Defines the text for the aria label on the 'Previous' button. */\n    @Input() previousAriaLabel: string = 'Go to the previous step';\n\n    /** Defines the text for the aria label on the 'Cancel' button. */\n    @Input() cancelAriaLabel: string = 'Cancel the wizard';\n\n    /** Defines the text for the aria label on the 'Finish' button. */\n    @Input() finishAriaLabel: string = 'Finish the wizard';\n\n    /** If set to `true` the 'Next' button will appear disabled and will not respond to clicks. */\n    @Input() nextDisabled: boolean = false;\n\n    /** If set to `true` the 'Previous' button will appear disabled and will not respond to clicks. */\n    @Input() previousDisabled: boolean = false;\n\n    /** If set to `true` the 'Cancel' button will appear disabled and will not respond to clicks. */\n    @Input() cancelDisabled: boolean = false;\n\n    /** If set to `true` the 'Finish' button will appear disabled and will not respond to clicks. */\n    @Input() finishDisabled: boolean = false;\n\n    /** If set to `false` the 'Next' button will be hidden. */\n    @Input() nextVisible: boolean = true;\n\n    /** If set to `false` the 'Previous' button will be hidden. */\n    @Input() previousVisible: boolean = true;\n\n    /** If set to `false` the 'Cancel' button will be hidden. */\n    @Input() cancelVisible: boolean = true;\n\n    /** If set to false the 'Finish' button will be hidden. */\n    @Input() finishVisible: boolean = true;\n\n    /** If set to `true` the 'Cancel' button will be visible even on the last step. By default it will be hidden on the final step. */\n    @Input() cancelAlwaysVisible: boolean = false;\n\n    /** If set to `true` the 'Finish' button will be visible on all steps of the wizard. By default this button will only be visible on the final step of the wizard. */\n    @Input() finishAlwaysVisible: boolean = false;\n\n    /** If set to `true` the 'Next' or 'Finish' button will become disabled when the current step is invalid. */\n    @Input() disableNextWhenInvalid: boolean = false;\n\n    /** Whether to set `visited` to false on subsequent steps after a validation fault. */\n    @Input() resetVisitedOnValidationError: boolean = false;\n\n    /** If set to false it will allow users to navigate to every step */\n    @Input() sequential: boolean = true;\n\n    /** Emits when the wizard has moved to the next step. It will receive the current step index as a parameter. */\n    @Output() onNext = new EventEmitter<number>();\n\n    /** Emits when the wizard has moved to the previous step. It will receive the current step index as a parameter. */\n    @Output() onPrevious = new EventEmitter<number>();\n\n    /** Emits when the 'Cancel' button has been pressed. */\n    @Output() onCancel = new EventEmitter<void>();\n\n    /** Emits when the 'Finish' button is clicked, but before the finish event fires. This fires regardless of the validity of the final step. */\n    @Output() onFinishing = new EventEmitter<void>();\n\n    /** Emits when the 'Finish' button has been pressed and the final step is valid. */\n    @Output() onFinish = new EventEmitter<void>();\n\n    /** Emits before the current step changes. The event contains the current step index in the `from` property, and the requested step index in the `to` property. */\n    @Output() stepChanging = new EventEmitter<StepChangingEvent>();\n\n    /** Emits when the current step has changed. */\n    @Output() stepChange = new EventEmitter<number>();\n\n    /** Emits when the user tries to continue but the current step is invalid. */\n    @Output() stepError = new EventEmitter<number>();\n\n    @ContentChildren(WizardStepComponent) steps = new QueryList<WizardStepComponent>();\n\n    @ContentChild('footerTemplate', { static: false }) footerTemplate: TemplateRef<WizardFooterContext>;\n\n    id: string = `ux-wizard-${ uniqueId++ }`;\n    invalidIndicator: boolean = false;\n\n    /**\n     * The current active step. When the step changes an event will be emitted containing the index of the newly active step.\n     * If this is not specified the wizard will start on the first step.\n     */\n    @Input()\n    get step() {\n        return this._step;\n    }\n\n    set step(value: number) {\n\n        // only accept numbers as valid options\n        if (typeof value === 'number') {\n\n            // store the active step\n            this._step = value;\n\n            // update which steps should be active\n            this.update();\n\n            // reset the invalid state\n            this.invalidIndicator = false;\n        }\n    }\n\n    private _step: number = 0;\n    protected readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        // initially set the correct visibility of the steps\n        setTimeout(this.update.bind(this));\n\n        // watch for changes to valid subject\n        this._wizardService.validChange$.pipe(\n            filter((event: WizardValidEvent<WizardStepComponent>) => !event.valid),\n            takeUntil(this._onDestroy)\n        ).subscribe((event: WizardValidEvent<WizardStepComponent>) => this.setFutureStepsUnvisited(event.step));\n    }\n\n    ngAfterContentInit(): void {\n        this.steps.changes.pipe(tick(), takeUntil(this._onDestroy)).subscribe(this.update.bind(this));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Navigate to the next step\n     */\n    async next(): Promise<void> {\n\n        this.stepChanging.next(new StepChangingEvent(this.step, this.step + 1));\n\n        const step = this.getCurrentStep();\n\n        // Disable the button while waiting on validation\n        this.nextDisabled = true;\n\n        try {\n            // Fetch validation status\n            const validationResult = this.isStepValid();\n            step.valid = validationResult instanceof Promise ? await validationResult : validationResult;\n        } finally {\n            // Re-enable button\n            this.nextDisabled = false;\n        }\n\n        // check if current step is invalid\n        if (!step.valid) {\n            this.invalidIndicator = true;\n            this.stepError.next(this.step);\n            return;\n        }\n\n        // check if we are currently on the last step\n        if ((this.step + 1) < this.steps.length) {\n            this.step++;\n            this.stepChange.emit(this.step);\n\n            // emit the current step\n            this.onNext.next(this.step);\n        }\n    }\n\n    /**\n     * Whether the Next or Finish button should be disabled.\n     */\n    isNextDisabled(): boolean {\n        const step = this.getCurrentStep();\n\n        // ensure the step is not null before we try to access its properties. It may be null if an ngFor is being\n        // used and the steps haven't rendered yet\n        if (!step) {\n            return false;\n        }\n\n        // Use the `disableNextWhenInvalid` setting to determine whether to disable the Next/Finish button\n        // based on validation.\n        // If not defined on the WizardStepComponent, use the value from WizardComponent.\n        return (step.disableNextWhenInvalid === undefined ? this.disableNextWhenInvalid : step.disableNextWhenInvalid) && !step.valid;\n    }\n\n    /**\n     * Navigate to the previous step\n     */\n    previous(): void {\n\n        this.stepChanging.next(new StepChangingEvent(this.step, this.step - 1));\n\n        // check if we are currently on the last step\n        if (this.step > 0) {\n            this.step--;\n            this.stepChange.emit(this.step);\n\n            // emit the current step\n            this.onPrevious.next(this.step);\n        }\n    }\n\n    /**\n     * Perform actions when the finish button is clicked\n     */\n    async finish(): Promise<void> {\n\n        // fires when the finish button is clicked always\n        this.onFinishing.next();\n\n        // Disable the button while waiting on validation\n        this.finishDisabled = true;\n\n        try {\n            // Fetch validation status\n            const validationResult = this.isStepValid();\n            this.getCurrentStep().valid = validationResult instanceof Promise ? await validationResult : validationResult;\n        } finally {\n            // Re-enable button\n            this.finishDisabled = false;\n        }\n\n        /**\n         * This is required because we need to ensure change detection has run\n         * to determine whether or not we have the latest value for the 'valid' input\n         * on the current step. Unfortunately we can't use ChangeDetectorRef as we are looking to run\n         * on content children, and we cant use ApplicationRef.tick() as this does not work in a hybrid app, eg. our docs\n         */\n        return new Promise<void>(resolve => {\n            setTimeout(() => {\n\n                // only fires when the finish button is clicked and the step is valid\n                if (this.getCurrentStep().valid) {\n                    this.onFinish.emit();\n                } else {\n                    this.stepError.next(this.step);\n                }\n\n                resolve();\n            });\n        });\n    }\n\n    /**\n     * Perform actions when the cancel button is clicked\n     */\n    cancel(): void {\n        this.onCancel.next();\n    }\n\n    /**\n     * Update the active state of each step\n     */\n    update(): void {\n        // update which steps should be active\n        this.steps.forEach((step, idx) => step.active = idx === this.step);\n    }\n\n    /**\n     * Jump to a specific step only if the step has previously been visited\n     */\n    gotoStep(step: WizardStepComponent): void {\n        if (step.visited || !this.sequential) {\n\n            const stepIndex = this.steps.toArray().findIndex(stp => stp === step);\n\n            this.stepChanging.next(new StepChangingEvent(this.step, stepIndex));\n\n            this.step = stepIndex;\n            this.stepChange.emit(this.step);\n        }\n    }\n\n    /**\n     * Determine if the current step is the last step\n     */\n    isLastStep(): boolean {\n        return this.step === (this.steps.length - 1);\n    }\n\n    /**\n     * Reset the wizard - goes to first step and resets visited state\n     */\n    reset(): void {\n\n        // mark all steps as not visited\n        this.steps.forEach(step => step.setVisitedAndEmitChangeEvent(false));\n\n        // go to the first step\n        this.step = 0;\n        this.stepChange.emit(this.step);\n    }\n\n    /**\n     * Get the step at the current index\n     */\n    getCurrentStep(): WizardStepComponent {\n        return this.getStepAtIndex(this.step);\n    }\n\n    /**\n     * Return a step at a specific index\n     */\n    getStepAtIndex(index: number): WizardStepComponent {\n        return this.steps.toArray()[index];\n    }\n\n    /**\n     * If a step in the wizard becomes invalid, all steps sequentially after\n     * it should become unvisited\n     */\n    protected setFutureStepsUnvisited(currentStep: WizardStepComponent): void {\n        if (!this.resetVisitedOnValidationError) {\n            return;\n        }\n\n        this.getFutureSteps(currentStep).forEach(step => {\n            step.setVisitedAndEmitChangeEvent(false);\n        });\n    }\n\n    /**\n     * Get the currently active step and all steps beyond it\n     */\n    protected getFutureSteps(currentStep: WizardStepComponent): WizardStepComponent[] {\n        const currentIndex = this.steps.toArray().indexOf(currentStep);\n        return this.steps.toArray().slice(currentIndex + 1);\n    }\n\n    /**\n     * Returns the valid status of the current step, including the `validation` function (if provided).\n     */\n    private isStepValid(): boolean | Promise<boolean> {\n\n        // get the current active step\n        const currentStep = this.getCurrentStep();\n\n        // if there is no validator then return the valid state\n        if (!currentStep.validator) {\n            return currentStep.valid;\n        }\n\n        // get the validator result\n        return currentStep.validator();\n    }\n}\n\nexport class StepChangingEvent {\n    constructor(public from: number, public to: number) {\n    }\n}\n\nexport interface WizardFooterContext {\n    step: number;\n}\n","<div class=\"wizard-body\">\n\n  <div class=\"wizard-steps\"\n    uxTabbableList\n    [direction]=\"orientation\"\n    role=\"tablist\"\n    [attr.aria-orientation]=\"orientation\">\n\n    @for (stp of steps; track stp; let index = $index) {\n      <div\n        role=\"tab\"\n        class=\"wizard-step\"\n        [class.active]=\"stp._active\"\n        [class.visited]=\"stp.visited\"\n        [class.invalid]=\"!stp._valid && stp.visited\"\n        [attr.aria-posinset]=\"index + 1\"\n        [attr.aria-setsize]=\"steps.length\"\n        [attr.aria-selected]=\"stp._active\"\n        [attr.aria-controls]=\"id + '-step-' + index\"\n        [attr.aria-labelledby]=\"id + '-step-' + index + '-label'\"\n        [attr.aria-expanded]=\"stp._active\"\n        [id]=\"id + '-step-' + index + '-label'\"\n        uxFocusIndicator\n        [programmaticFocusIndicator]=\"true\"\n        uxTabbableListItem\n        [disabled]=\"index !== 0 && (!stp.visited || !sequential)\"\n        (click)=\"gotoStep(stp)\"\n        (keydown.enter)=\"gotoStep(stp)\">\n        <span class=\"wizard-step-text\">{{ stp.header }}</span>\n        @if (stp.visited && !stp._active) {\n          <ux-icon class=\"wizard-step-icon\" name=\"checkmark\"></ux-icon>\n        }\n      </div>\n    }\n\n  </div>\n\n  <div class=\"wizard-content\">\n    <ng-content></ng-content>\n  </div>\n\n</div>\n\n<div class=\"wizard-footer\">\n\n  @if (footerTemplate) {\n    <ng-container\n      [ngTemplateOutlet]=\"footerTemplate\"\n      [ngTemplateOutletContext]=\"{ step: step }\">\n    </ng-container>\n  }\n\n  @if (previousVisible) {\n    <button #tip=\"ux-tooltip\"\n      type=\"button\"\n      class=\"btn button-secondary\"\n      [uxTooltip]=\"previousTooltip\"\n      [disabled]=\"previousDisabled || step === 0\"\n      [attr.aria-label]=\"previousAriaLabel\"\n      (click)=\"previous(); tip.hide()\">\n      {{ previousText }}\n    </button>\n  }\n\n  @if (nextVisible && !isLastStep()) {\n    <button #tip=\"ux-tooltip\"\n      type=\"button\"\n      class=\"btn button-primary\"\n      [uxTooltip]=\"nextTooltip\"\n      [disabled]=\"nextDisabled || isNextDisabled()\"\n      [attr.aria-label]=\"nextAriaLabel\"\n      (click)=\"next(); tip.hide()\">\n      {{ nextText }}\n    </button>\n  }\n\n  @if (finishVisible && isLastStep() || finishAlwaysVisible) {\n    <button #tip=\"ux-tooltip\"\n      type=\"button\"\n      class=\"btn button-primary\"\n      [uxTooltip]=\"finishTooltip\"\n      [disabled]=\"finishDisabled || isNextDisabled()\"\n      [attr.aria-label]=\"finishAriaLabel\"\n      (click)=\"finish(); tip.hide()\">\n      {{ finishText }}\n    </button>\n  }\n\n  @if (cancelVisible && !isLastStep() || cancelAlwaysVisible) {\n    <button #tip=\"ux-tooltip\"\n      type=\"button\"\n      class=\"btn button-secondary\"\n      [uxTooltip]=\"cancelTooltip\"\n      [disabled]=\"cancelDisabled\"\n      [attr.aria-label]=\"cancelAriaLabel\"\n      (click)=\"cancel(); tip.hide()\">\n      {{ cancelText }}\n    </button>\n  }\n\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/accessibility.module';\nimport { IconModule } from '../icon/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { WizardStepComponent } from './wizard-step.component';\nimport { WizardComponent } from './wizard.component';\n\nconst DECLARATIONS = [\n    WizardComponent,\n    WizardStepComponent\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        IconModule,\n        TooltipModule,\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS\n})\nexport class WizardModule { }\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { WizardStepComponent } from '../wizard/index';\nimport { MarqueeWizardStepIconDirective } from './marquee-wizard-step-icon.directive';\n\n@Component({\n    selector: 'ux-marquee-wizard-step',\n    templateUrl: './marquee-wizard-step.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarqueeWizardStepComponent<TContext = unknown> extends WizardStepComponent {\n\n    /** Define additional data that will be available within the stepTemplate context */\n    @Input() context: TContext;\n\n    /** Determine the completed state of this step */\n    @Input() completed: boolean = false;\n\n    /** Emit when the completed step changes */\n    @Output() completedChange = new EventEmitter<boolean>();\n\n    /** Detect if an icon has been defined using the directive */\n    @ContentChild(MarqueeWizardStepIconDirective, { read: TemplateRef, static: false }) _iconTemplate: TemplateRef<void>;\n\n    /**\n     * Update the completed state and emit the latest value\n     * @param completed whether or not the step is completed\n     */\n    setCompleted(completed: boolean): void {\n        this.completed = completed;\n        this.completedChange.emit(completed);\n    }\n}\n","@if (active) {\n  <ng-content></ng-content>\n}","import { AfterViewChecked, Component, ContentChildren, ElementRef, EventEmitter, inject, Input, OnDestroy, Output, QueryList, TemplateRef, ViewChild } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { TabbableListDirective } from '../../directives/accessibility';\nimport { ResizeDimensions, ResizeService } from '../../directives/resize/index';\nimport { WizardComponent, WizardService, WizardStepComponent } from '../wizard/index';\nimport { MarqueeWizardStepComponent } from './marquee-wizard-step.component';\n\n@Component({\n    selector: 'ux-marquee-wizard',\n    templateUrl: './marquee-wizard.component.html',\n    providers: [WizardService],\n    preserveWhitespaces: false\n})\nexport class MarqueeWizardComponent<TStepContext = unknown> extends WizardComponent implements OnDestroy, AfterViewChecked {\n    readonly wizardService = inject<WizardService<MarqueeWizardStepComponent>>(WizardService);\n\n    private readonly _resizeService = inject(ResizeService);\n\n    private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    @ViewChild(TabbableListDirective)\n    tabbableList: TabbableListDirective;\n\n    /** Provide a custom template for the description in the left panel */\n    @Input() description: string | TemplateRef<void>;\n\n    /** Provide a custom template for the step in the left panel */\n    @Input() stepTemplate: TemplateRef<MarqueeWizardStepContext<TStepContext>>;\n\n    /** Initial set to default width to match 240px on left but can be changed with a percentage value */\n    @Input() sidePanelWidth: number = 25;\n\n    /** Width of the splitter - default is 10 */\n    @Input() gutterSize: number = 10;\n\n    /** If set to true the resizable splitter will be enabled and set to the default width **/\n    @Input() resizable: boolean = false;\n\n    /** Emit the current width of the splitter*/\n    @Output() sidePanelWidthChange = new EventEmitter<number>();\n\n    /** Access each step content component */\n    @ContentChildren(MarqueeWizardStepComponent) steps = new QueryList<MarqueeWizardStepComponent>();\n\n    /**\n     * If the wizard is in a modal it may initially have a size of 0 until the modal displays\n     * in which case if we are using the splitter it will not render correctly. We use this\n     * variable to only initialise the splitter when the content has a width.\n     */\n    _isInitialised: boolean = false;\n\n    get isTemplate(): boolean {\n        return this.description && this.description instanceof TemplateRef;\n    }\n\n    constructor() {\n        super();\n\n        // set to true as default for Marquee Wizard only\n        this.resetVisitedOnValidationError = true;\n\n        // watch for changes to the size\n        this._resizeService.addResizeListener(this._elementRef.nativeElement)\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(this.onResize.bind(this));\n    }\n\n    ngAfterViewChecked(): void {\n        this.tabbableList?.setFirstItemTabbable();\n    }\n\n    ngOnDestroy(): void {\n        super.ngOnDestroy();\n        this._resizeService.removeResizeListener(this._elementRef.nativeElement);\n    }\n\n    /**\n     * If the current step is valid, mark it as\n     * complete and go to the next step\n     */\n    async next(): Promise<void> {\n        // get the current step\n        const step = this.getCurrentStep() as MarqueeWizardStepComponent;\n\n        await super.next();\n\n        if (step && step.valid) {\n            // mark this step as completed\n            step.setCompleted(true);\n        } else {\n            this.stepError.next(this.step);\n        }\n    }\n\n    /**\n     * Emit the onFinishing event and if valid the onFinish event.\n     * Also mark the final step as completed if it is valid\n     */\n    async finish(): Promise<void> {\n\n        // get the current step\n        const step = this.getCurrentStep() as MarqueeWizardStepComponent;\n\n        await super.finish();\n\n        // if the step is valid indicate that it is now complete\n        if (step.valid) {\n            step.setCompleted(true);\n        } else {\n            this.stepError.next(this.step);\n        }\n    }\n\n    onResize(event: ResizeDimensions): void {\n        if (event.width !== 0 && event.height !== 0) {\n            this._isInitialised = true;\n        }\n    }\n\n    /** Whenever the drag event ends, update the internal value and emit the new size */\n    onDragEnd({ sizes }: SplitDragEndEvent): void {\n        // we need to only get the size of the first panel which will be the side panel\n        this.sidePanelWidth = sizes[0] as number;\n        this.sidePanelWidthChange.emit(this.sidePanelWidth);\n    }\n\n    gotoStep(step: WizardStepComponent): void {\n        const currentStep = this.getCurrentStep() as MarqueeWizardStepComponent;\n\n        if (currentStep !== step) {\n            if (!this.sequential) {\n                currentStep.setCompleted(true);\n            }\n            super.gotoStep(step);\n        }\n    }\n\n    protected setFutureStepsUnvisited(currentStep: MarqueeWizardStepComponent): void {\n        super.setFutureStepsUnvisited(currentStep);\n\n        // Marquee wizard steps have an additional completed property which must also be changed.\n        // The base class implementation only changes the visited state\n        this.getFutureSteps(currentStep).forEach((step: MarqueeWizardStepComponent) => step.completed = false);\n    }\n}\n\n/** Angular Split does not export a type for this so we created our own */\ninterface SplitDragEndEvent {\n    gutterNum: number;\n    sizes: (number | '*')[];\n}\n\nexport interface MarqueeWizardStepContext<T> {\n    $implicit: MarqueeWizardStepComponent<T>;\n    index: number;\n    context: T;\n}\n","@if (resizable && _isInitialised) {\n  <as-split direction=\"horizontal\"\n    [gutterSize]=\"gutterSize\"\n    (dragEnd)=\"onDragEnd($event)\">\n    <as-split-area [size]=\"sidePanelWidth\">\n      <ng-container [ngTemplateOutlet]=\"sidePanel\"></ng-container>\n    </as-split-area>\n    <as-split-area [size]=\"100 - sidePanelWidth\">\n      <ng-container [ngTemplateOutlet]=\"mainContentPanel\"></ng-container>\n    </as-split-area>\n  </as-split>\n}\n\n@if (!resizable) {\n  <ng-container [ngTemplateOutlet]=\"sidePanel\"></ng-container>\n  <ng-container [ngTemplateOutlet]=\"mainContentPanel\"></ng-container>\n}\n\n<ng-template #sidePanel>\n  <div class=\"marquee-wizard-side-panel\" [class.marquee-wizard-side-panel-resize]=\"resizable\">\n\n    @if (description) {\n      <div class=\"marquee-wizard-description-container\">\n        <!-- If a template was provided display it -->\n        @if (isTemplate) {\n          <ng-container [ngTemplateOutlet]=\"$any(description)\"></ng-container>\n        }\n        <!-- Otherwise simply display the string -->\n        @if (!isTemplate) {\n          <p>{{ description }}</p>\n        }\n      </div>\n    }\n\n    <ul class=\"marquee-wizard-steps\"\n      uxTabbableList\n      direction=\"vertical\"\n      role=\"tablist\"\n      aria-orientation=\"vertical\">\n\n      @for (step of steps; track step; let index = $index) {\n        <li\n          role=\"tab\"\n          class=\"marquee-wizard-step\"\n          [class.active]=\"step.active\"\n          [class.visited]=\"step.visited\"\n          [class.invalid]=\"!step.valid\"\n          [attr.aria-posinset]=\"index + 1\"\n          [attr.aria-setsize]=\"steps.length\"\n          [attr.aria-selected]=\"step.active\"\n          [attr.aria-controls]=\"id + '-step-' + index\"\n          [attr.aria-labelledby]=\"id + '-step-' + index + '-label'\"\n          [attr.aria-expanded]=\"step._active\"\n          [id]=\"id + '-step-' + index + '-label'\"\n          uxFocusIndicator\n          [programmaticFocusIndicator]=\"true\"\n          uxTabbableListItem\n          [disabled]=\"!step.visited\"\n          (click)=\"gotoStep(step)\"\n          (keydown.enter)=\"gotoStep(step)\">\n          <ng-container [ngTemplateOutlet]=\"stepTemplate || defaultStepTemplate\"\n          [ngTemplateOutletContext]=\"{ $implicit: step, index: index, context: step.context }\"></ng-container>\n        </li>\n      }\n\n    </ul>\n  </div>\n</ng-template>\n\n\n<ng-template #mainContentPanel>\n  <div class=\"marquee-wizard-content-panel\" [class.marquee-wizard-content-panel-resize]=\"resizable\">\n    <div class=\"marquee-wizard-content\">\n      <ng-content></ng-content>\n    </div>\n\n    <div class=\"modal-footer\">\n\n      @if (footerTemplate) {\n        <ng-container\n          [ngTemplateOutlet]=\"footerTemplate\"\n          [ngTemplateOutletContext]=\"{ step: step }\">\n        </ng-container>\n      }\n\n      @if (previousVisible) {\n        <button #tip=\"ux-tooltip\"\n          type=\"button\"\n          class=\"btn button-secondary marquee-wizard-previous-button\"\n          [uxTooltip]=\"previousTooltip\"\n          [attr.aria-label]=\"previousAriaLabel\"\n          container=\"body\"\n          [disabled]=\"previousDisabled || step === 0\"\n          (click)=\"previous(); tip.hide()\">\n          {{ previousText }}\n        </button>\n      }\n\n      @if (nextVisible && !isLastStep()) {\n        <button #tip=\"ux-tooltip\"\n          type=\"button\"\n          class=\"btn button-primary marquee-wizard-next-button\"\n          [uxTooltip]=\"nextTooltip\"\n          [attr.aria-label]=\"nextAriaLabel\"\n          container=\"body\"\n          [disabled]=\"nextDisabled || isNextDisabled()\"\n          (click)=\"next(); tip.hide()\">\n          {{ nextText }}\n        </button>\n      }\n\n      @if (finishVisible && isLastStep() || finishAlwaysVisible) {\n        <button #tip=\"ux-tooltip\"\n          type=\"button\"\n          class=\"btn button-primary marquee-wizard-finish-button\"\n          [uxTooltip]=\"finishTooltip\"\n          [attr.aria-label]=\"finishAriaLabel\"\n          container=\"body\"\n          [disabled]=\"finishDisabled || isNextDisabled()\"\n          (click)=\"finish(); tip.hide()\">\n          {{ finishText }}\n        </button>\n      }\n\n      @if (cancelVisible && !isLastStep() || cancelAlwaysVisible) {\n        <button #tip=\"ux-tooltip\"\n          type=\"button\"\n          class=\"btn button-secondary marquee-wizard-cancel-button\"\n          [uxTooltip]=\"cancelTooltip\"\n          [attr.aria-label]=\"cancelAriaLabel\"\n          container=\"body\"\n          [disabled]=\"cancelDisabled\"\n          (click)=\"cancel(); tip.hide()\">\n          {{ cancelText }}\n        </button>\n      }\n    </div>\n  </div>\n</ng-template>\n\n<ng-template #defaultStepTemplate let-step>\n\n  <!-- Insert the icon -->\n  @if (step._iconTemplate) {\n    <div class=\"marquee-wizard-step-icon\">\n      <ng-container [ngTemplateOutlet]=\"step._iconTemplate\"></ng-container>\n    </div>\n  }\n\n  <span class=\"marquee-wizard-step-title\">{{ step.header }}</span>\n  @if (step.completed && step.valid) {\n    <ux-icon class=\"marquee-wizard-step-status\" name=\"checkmark\"></ux-icon>\n  }\n  @if (!step.valid) {\n    <ux-icon class=\"marquee-wizard-step-status\" name=\"close\"></ux-icon>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AngularSplitModule } from 'angular-split';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { IconModule } from '../icon/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { WizardModule } from '../wizard/index';\nimport { MarqueeWizardStepIconDirective } from './marquee-wizard-step-icon.directive';\nimport { MarqueeWizardStepComponent } from './marquee-wizard-step.component';\nimport { MarqueeWizardComponent } from './marquee-wizard.component';\n\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        IconModule,\n        TooltipModule,\n        WizardModule,\n        AngularSplitModule,\n        ResizeModule\n    ],\n    exports: [\n        MarqueeWizardComponent,\n        MarqueeWizardStepComponent,\n        MarqueeWizardStepIconDirective\n    ],\n    declarations: [\n        MarqueeWizardComponent,\n        MarqueeWizardStepComponent,\n        MarqueeWizardStepIconDirective\n    ]\n})\nexport class MarqueeWizardModule { }\n","import { Injectable } from '@angular/core';\nimport { concat, fromEvent, Observable, Observer } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FrameExtractionService {\n\n    private createVideoPlayer(source: string): HTMLVideoElement {\n        const videoPlayer = document.createElement('video');\n        videoPlayer.preload = 'auto';\n        videoPlayer.src = source;\n        return videoPlayer;\n    }\n\n    private createCanvas(width: number, height: number): HTMLCanvasElement {\n        const canvas = document.createElement('canvas');\n        canvas.width = width;\n        canvas.height = height;\n        return canvas;\n    }\n\n    private goToFrame(videoPlayer: HTMLVideoElement, time: number): Observable<Event> {\n        videoPlayer.currentTime = time;\n        return fromEvent(videoPlayer, time === 0 ? 'loadeddata' : 'seeked');\n    }\n\n    private getThumbnail(videoPlayer: HTMLVideoElement, canvas: HTMLCanvasElement, time: number, width: number = 160, height: number = 90): Observable<ExtractedFrame> {\n\n        return Observable.create((observer: Observer<ExtractedFrame>) => {\n\n            // go to specified frame\n            const subscription = this.goToFrame(videoPlayer, time).subscribe(() => {\n                // create image from current frame\n                canvas.getContext('2d').drawImage(videoPlayer, 0, 0, width, height);\n                observer.next({ image: canvas.toDataURL(), width, height, time });\n                observer.complete();\n                subscription.unsubscribe();\n            });\n        });\n    }\n\n    getFrameThumbnail(source: string, width: number, height: number, time: number): Observable<ExtractedFrame> {\n\n        // create required elements\n        let videoPlayer = this.createVideoPlayer(source);\n        let canvas = this.createCanvas(width, height);\n\n        const frameSubscription = this.getThumbnail(videoPlayer, canvas, time, width, height);\n\n        // ensure we release memory after we are finished\n        frameSubscription.subscribe(null, null, () => {\n            videoPlayer = null;\n            canvas = null;\n        });\n\n        return frameSubscription;\n    }\n\n    getFrameThumbnails(source: string, width: number, height: number, start: number, end: number, skip: number = 5): Observable<ExtractedFrame> {\n\n        // create required elements\n        let videoPlayer = this.createVideoPlayer(source);\n        let canvas = this.createCanvas(width, height);\n\n        return Observable.create((observer: Observer<ExtractedFrame>) => {\n\n            fromEvent(videoPlayer, 'loadedmetadata').subscribe(() => {\n\n                // calculate the frames required\n                const frames = [];\n\n                for (let idx = start; idx < end; idx += skip) {\n                    frames.push(this.getThumbnail(videoPlayer, canvas, idx, width, height));\n                }\n\n                concat(...frames).subscribe((frame: ExtractedFrame) => observer.next(frame), null, () => {\n                    videoPlayer = null;\n                    canvas = null;\n                    observer.complete();\n                });\n            });\n\n        });\n    }\n\n}\n\nexport interface ExtractedFrame {\n    image: string;\n    width: number;\n    height: number;\n    time: number;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, from, Observable, Observer, ReplaySubject, Subject } from 'rxjs';\nimport { ExtractedFrame, FrameExtractionService } from '../../services/frame-extraction/index';\nimport type { MediaPlayerType } from './media-player.component';\n\n@Injectable()\nexport class MediaPlayerService {\n    private readonly _frameExtractionService = inject(FrameExtractionService);\n\n    source: string;\n    type: MediaPlayerType = 'video';\n    loaded: boolean = false;\n\n    /** Aria Labels */\n    muteAriaLabel: (volume: number) => string = this.getMuteAriaLabel;\n    playAriaLabel: (isPlaying: boolean) => string = this.getPlayAriaLabel;\n    fullscreenAriaLabel: (isFullscreen: boolean) => string = this.getFullscreenAriaLabel;\n    selectSubtitlesAriaLabel: (track: string) => string = this.getSubtitlesAriaLabel;\n    goToStartAriaLabel: string = 'Go to start';\n    goToEndAriaLabel: string = 'Go to end';\n    subtitlesTitleAriaLabel: string = 'Subtitles';\n    subtitlesOffAriaLabel: string = 'Subtitles Off';\n    noSubtitlesAriaLabel: string = 'No subtitles';\n    mediaPlayerAriaLabel: string = 'Media Player';\n    seekAriaLabel: string = 'Seek Slider';\n\n    /*\n        Create observables for media player events\n    */\n    playing: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    initEvent: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n    abortEvent: Subject<void> = new Subject<void>();\n    canPlayEvent: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    canPlayThroughEvent: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    durationChangeEvent: Subject<number> = new Subject<number>();\n    endedEvent: Subject<void> = new Subject<void>();\n    errorEvent: Subject<void> = new Subject<void>();\n    loadedDataEvent: Subject<void> = new Subject<void>();\n    loadedMetadataEvent: Subject<void> = new Subject<void>();\n    loadStartEvent: Subject<void> = new Subject<void>();\n    pauseEvent: Subject<void> = new Subject<void>();\n    playEvent: Subject<void> = new Subject<void>();\n    playingEvent: Subject<boolean> = new Subject<boolean>();\n    rateChangeEvent: Subject<number> = new Subject<number>();\n    seekedEvent: Subject<number> = new Subject<number>();\n    seekingEvent: Subject<number> = new Subject<number>();\n    stalledEvent: Subject<void> = new Subject<void>();\n    suspendEvent: Subject<void> = new Subject<void>();\n    timeUpdateEvent: Subject<number> = new Subject<number>();\n    volumeChangeEvent: Subject<number> = new Subject<number>();\n    waitingEvent: Subject<void> = new Subject<void>();\n    mediaClickEvent: Subject<MouseEvent> = new Subject<MouseEvent>();\n    fullscreenEvent: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    quietModeEvent: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    progressEvent: Observable<TimeRanges> = Observable.create((observer: Observer<TimeRanges>) => {\n\n        // repeat until the whole video has fully loaded\n        const interval = setInterval(() => {\n\n            const buffered = this._mediaPlayer.buffered as TimeRanges;\n            observer.next(buffered);\n\n            if (buffered.length === 1 && buffered.start(0) === 0 && buffered.end(0) === this.duration) {\n                observer.complete();\n                clearInterval(interval);\n            }\n        }, 1000);\n    });\n\n    private _mediaPlayer: HTMLMediaElement;\n    private _hostElement: HTMLElement;\n    private _fullscreen: boolean = false;\n    private _quietMode: boolean;\n\n\n    /*\n        Create all the getters and setters the can be used by media player extensions\n    */\n    get mediaPlayer(): HTMLMediaElement {\n        return this._mediaPlayer;\n    }\n\n    get quietMode(): boolean {\n        return this._quietMode;\n    }\n\n    set quietMode(value: boolean) {\n\n        // quiet mode cannot be enabled on audio player\n        if (this.type === 'audio') {\n            value = false;\n        }\n\n        this._quietMode = value;\n        this.quietModeEvent.next(value);\n    }\n\n    get mediaPlayerWidth(): number {\n        return this._mediaPlayer ? this._mediaPlayer.offsetWidth : 0;\n    }\n\n    get mediaPlayerHeight(): number {\n        return this._mediaPlayer ? this._mediaPlayer.offsetHeight : 0;\n    }\n\n    get autoplay(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.autoplay : false;\n    }\n    set autoplay(value: boolean) {\n        this._mediaPlayer.autoplay = value;\n    }\n\n    get buffered(): TimeRanges {\n        return this._mediaPlayer ? this._mediaPlayer.buffered : new TimeRanges();\n    }\n\n    get crossOrigin(): string {\n        return this._mediaPlayer ? this._mediaPlayer.crossOrigin : null;\n    }\n    set crossOrigin(value: string) {\n        this._mediaPlayer.crossOrigin = value;\n    }\n\n    get currentSrc(): string {\n        return this._mediaPlayer ? this._mediaPlayer.currentSrc : null;\n    }\n\n    get currentTime(): number {\n        return this._mediaPlayer ? this._mediaPlayer.currentTime : 0;\n    }\n    set currentTime(value: number) {\n        this._mediaPlayer.currentTime = value;\n    }\n\n    get defaultMuted(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.defaultMuted : false;\n    }\n    set defaultMuted(value: boolean) {\n        this._mediaPlayer.defaultMuted = value;\n    }\n\n    get defaultPlaybackRate(): number {\n        return this._mediaPlayer ? this._mediaPlayer.defaultPlaybackRate : 1;\n    }\n    set defaultPlaybackRate(value: number) {\n        this._mediaPlayer.defaultPlaybackRate = value;\n    }\n\n    get duration(): number {\n        return this._mediaPlayer && !isNaN(this.mediaPlayer.duration) ? this._mediaPlayer.duration : 0;\n    }\n\n    get ended(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.ended : false;\n    }\n\n    get loop(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.loop : false;\n    }\n    set loop(value: boolean) {\n        this._mediaPlayer.loop = value;\n    }\n\n    get muted(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.muted : false;\n    }\n    set muted(value: boolean) {\n        this._mediaPlayer.muted = value;\n    }\n\n    get networkState(): number {\n        return this._mediaPlayer.networkState;\n    }\n\n    get paused(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.paused : true;\n    }\n\n    get playbackRate(): number {\n        return this._mediaPlayer ? this._mediaPlayer.playbackRate : 1;\n    }\n    set playbackRate(value: number) {\n        this._mediaPlayer.playbackRate = value;\n    }\n\n    get played(): TimeRanges {\n        return this._mediaPlayer ? this._mediaPlayer.played : new TimeRanges();\n    }\n\n    get preload(): '' | 'auto' | 'metadata' | 'none' {\n        return this._mediaPlayer ? this._mediaPlayer.preload : 'auto';\n    }\n    set preload(value: '' | 'auto' | 'metadata' | 'none') {\n        this._mediaPlayer.preload = value;\n    }\n\n    get readyState(): number {\n        return this._mediaPlayer ? this._mediaPlayer.readyState : 0;\n    }\n\n    get seekable(): TimeRanges {\n        return this._mediaPlayer ? this._mediaPlayer.seekable : new TimeRanges();\n    }\n\n    get seeking(): boolean {\n        return this._mediaPlayer ? this._mediaPlayer.seeking : false;\n    }\n\n    get src(): string {\n        return this._mediaPlayer ? this._mediaPlayer.src : '';\n    }\n    set src(value: string) {\n        this._mediaPlayer.src = value;\n    }\n\n    get textTracks(): Array<TextTrack> {\n        return this._mediaPlayer ? Array.from(this._mediaPlayer.textTracks) : [];\n    }\n\n    get volume(): number {\n        return this._mediaPlayer ? this._mediaPlayer.volume : 1;\n    }\n    set volume(value: number) {\n        if (this._mediaPlayer) {\n            this._mediaPlayer.volume = value;\n        }\n    }\n\n    get fullscreen(): boolean {\n        return this._mediaPlayer ? this._fullscreen : false;\n    }\n    set fullscreen(value: boolean) {\n        this._fullscreen = value;\n        this.fullscreenEvent.next(value);\n    }\n\n    setMediaPlayer(hostElement: HTMLElement, mediaPlayer: HTMLMediaElement): void {\n        this._hostElement = hostElement;\n        this._mediaPlayer = mediaPlayer;\n\n        this.initEvent.next(true);\n    }\n\n    /**\n     * Toggle playing state\n     */\n    togglePlay(): void {\n\n        // prevent any action is not loaded\n        if (this.loaded === false) {\n            return;\n        }\n\n        if (this.paused) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Starts playing the audio/video\n     */\n    play(): void {\n        this._mediaPlayer.play();\n    }\n\n    /**\n     * Pauses the currently playing audio/video\n     */\n    pause(): void {\n        this._mediaPlayer.pause();\n    }\n\n    /**\n     * Re-loads the audio/video element\n     */\n    load(): void {\n        this._mediaPlayer.load();\n    }\n\n    /**\n     * Checks if the browser can play the specified audio/video type\n     */\n    canPlayType(type: string): string {\n        return this._mediaPlayer.canPlayType(type);\n    }\n\n    /**\n     * Adds a new text track to the audio/video\n     */\n    addTextTrack(kind: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata', label: string, language: string): TextTrack {\n        return this._mediaPlayer.addTextTrack(kind, label, language);\n    }\n\n    /**\n     * Attempt to display media in fullscreen mode\n     */\n    requestFullscreen(): void {\n\n        // get the host element (we need to do some browser specific checks and typescript complains)\n         \n        const host = this._hostElement as any;\n        const requestFullscreen = host.requestFullscreen || host.webkitRequestFullscreen || host.msRequestFullscreen || host.mozRequestFullScreen;\n\n        // if we can perform the action then perform it and update the state\n        if (requestFullscreen) {\n            requestFullscreen.call(host);\n\n            // update the internal state\n            this.fullscreen = true;\n        }\n    }\n\n    /**\n     * Exit full screen mode\n     */\n    exitFullscreen(): void {\n\n        // get the document element (we need to do some browser specific checks and typescript complains)\n         \n        const host = document as any;\n        const exitFullscreen = host.exitFullscreen || host.webkitExitFullscreen || host.msExitFullscreen || host.mozCancelFullScreen;\n\n        // if we can perform the action then perform it and update the state\n        if (exitFullscreen) {\n            exitFullscreen.call(host);\n\n            // update the internal state\n            this.fullscreen = false;\n        }\n    }\n\n    /**\n     * Toggle Fullscreen State\n     */\n    toggleFullscreen(): void {\n        if (this.fullscreen) {\n            this.exitFullscreen();\n        } else {\n            this.requestFullscreen();\n        }\n    }\n\n    fullscreenChange(): void {\n        // get the document element (we need to do some browser specific checks and typescript complains)\n         \n        const host = document as any;\n\n        // set the fullscreen state (this also emits the event)\n        this.fullscreen = host.fullscreen || host.webkitIsFullScreen || host.mozFullScreen || host.msFullscreenElement !== null && host.msFullscreenElement !== undefined;\n    }\n\n    /**\n     * Extract the frames from the video\n     */\n    getFrames(width: number, height: number): Observable<ExtractedFrame> {\n\n        if (this.type === 'video') {\n            return this._frameExtractionService.getFrameThumbnails(this.source, width, height, 0, this.duration, 10);\n        }\n\n        return from([]);\n    }\n\n    hideSubtitleTracks(): void {\n        for (let index = 0; index < this.textTracks.length; index++) {\n            this.textTracks[index].mode = 'hidden';\n        }\n    }\n\n    private getMuteAriaLabel(volume: number): string {\n        return volume === 0 ? 'Unmute' : 'Mute';\n    }\n\n    private getPlayAriaLabel(isPlaying: boolean): string {\n        return isPlaying ? 'Pause' : 'Play';\n    }\n\n    private getFullscreenAriaLabel(isFullscreen: boolean): string {\n        return isFullscreen ? 'Exit full screen' : 'Full screen';\n    }\n\n    private getSubtitlesAriaLabel(track: string): string {\n        return `Select subtitles, ${track} currently selected.`;\n    }\n}\n","import { Directive, inject } from '@angular/core';\nimport { MediaPlayerService } from '../media-player.service';\n\n@Directive({\n    selector: '[mediaPlayerBaseExtension]'\n})\nexport class MediaPlayerBaseExtensionDirective {\n    readonly mediaPlayerService = inject(MediaPlayerService);\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, EventEmitter, inject, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ColorService } from '../../services/color/index';\n\n@Component({\n    selector: 'ux-slider',\n    templateUrl: './slider.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[class.disabled]': 'disabled',\n    }\n})\nexport class SliderComponent implements OnInit, AfterViewInit, DoCheck {\n    readonly colorService = inject(ColorService);\n\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    /** A single number or a SliderValue object, depending on the slider type specified. */\n    @Input() value: SliderValue | number = 0;\n\n    /** A set of options to customize the appearance and behavior of the slider. */\n    @Input() set options(options: SliderOptions) {\n        this._options = options;\n        this.updateOptions();\n    }\n\n    /** Whether the slider is disabled. */\n    @Input() set disabled(disabled: boolean) {\n        this._disabled = coerceBooleanProperty(disabled);\n    }\n\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    get options(): SliderOptions {\n        return this._options;\n    }\n\n    /** Emits when the `value` changes. */\n    @Output() valueChange: EventEmitter<SliderValue | number> = new EventEmitter<SliderValue | number>();\n\n    @ViewChild('lowerTooltip', { static: true }) lowerTooltip: ElementRef;\n    @ViewChild('upperTooltip', { static: true }) upperTooltip: ElementRef;\n    @ViewChild('track', { static: true }) track: ElementRef;\n\n    // store current values for deep change detection\n    private _value: SliderValue | number;\n    private _disabled: boolean = false;\n\n    _options: SliderOptions;\n\n    // expose enums to Angular view\n    sliderType = SliderType;\n    sliderStyle = SliderStyle;\n    sliderSize = SliderSize;\n    sliderSnap = SliderSnap;\n    sliderThumb = SliderThumb;\n    sliderTickType = SliderTickType;\n    sliderThumbEvent = SliderThumbEvent;\n    sliderCalloutTrigger = SliderCalloutTrigger;\n\n    tracks = {\n        lower: {\n            size: 0,\n            color: ''\n        },\n        middle: {\n            size: 0,\n            color: ''\n        },\n        upper: {\n            size: 0,\n            color: ''\n        }\n    };\n\n    tooltips = {\n        lower: {\n            visible: false,\n            position: 0,\n            label: ''\n        },\n        upper: {\n            visible: false,\n            position: 0,\n            label: ''\n        }\n    };\n\n    thumbs = {\n        lower: {\n            hover: false,\n            drag: false,\n            position: 0,\n            order: 100,\n            value: null as number\n        },\n        upper: {\n            hover: false,\n            drag: false,\n            position: 0,\n            order: 101,\n            value: null as number\n        }\n    };\n\n    // store all the ticks to display\n    ticks: SliderTick[] = [];\n    defaultOptions: SliderOptions;\n\n    constructor() {\n        // setup default options\n        this.defaultOptions = {\n            type: SliderType.Value,\n            handles: {\n                style: SliderStyle.Button,\n                callout: {\n                    trigger: SliderCalloutTrigger.None,\n                    background: this.colorService.getColor('grey2').toHex(),\n                    color: '#fff',\n                    formatter: (value: number): string | number => value\n                },\n                keyboard: {\n                    major: 5,\n                    minor: 1\n                },\n                aria: {\n                    thumb: 'Slider value',\n                    lowerThumb: 'Slider lower value',\n                    upperThumb: 'Slider upper value'\n                }\n            },\n            track: {\n                height: SliderSize.Wide,\n                min: 0,\n                max: 100,\n                ticks: {\n                    snap: SliderSnap.None,\n                    major: {\n                        show: true,\n                        steps: 10,\n                        labels: true,\n                        formatter: (value: number): string | number => value\n                    },\n                    minor: {\n                        show: true,\n                        steps: 5,\n                        labels: false,\n                        formatter: (value: number): string | number => value\n                    }\n                },\n                colors: {}\n            }\n        };\n    }\n\n    ngOnInit(): void {\n\n        this.updateValues();\n\n        this.setThumbState(SliderThumb.Lower, false, false);\n        this.setThumbState(SliderThumb.Upper, false, false);\n\n        // emit the initial value\n        this.valueChange.next(this.clone(this.value));\n    }\n\n    ngDoCheck(): void {\n\n        if (this.detectValueChange(this.value, this._value)) {\n            this.updateValues();\n            this._value = this.clone(this.value);\n        }\n    }\n\n    ngAfterViewInit(): void {\n        // persistent tooltips will need positioned correctly at this stage\n        setTimeout(() => {\n            this.updateTooltipPosition(SliderThumb.Lower);\n            this.updateTooltipPosition(SliderThumb.Upper);\n\n            // mark as dirty\n            this._changeDetectorRef.markForCheck();\n        });\n\n        this.updateOrder();\n    }\n\n    snapToNearestTick(thumb: SliderThumb, snapTarget: SliderSnap, forwards: boolean): void {\n\n        if (this.disabled) {\n            return;\n        }\n\n        // get the value for the thumb\n        const { value } = this.getThumbState(thumb);\n\n        // get the closest ticks - remove any tick if we are currently on it\n        const closest = this.getTickDistances(value, thumb, snapTarget)\n            .filter(tick => tick.value !== value)\n            .find(tick => forwards ? tick.value > value : tick.value < value);\n\n        // If we have no ticks then move by a predefined amount\n        if (closest) {\n            return this.setThumbValue(thumb, this.validateValue(thumb, closest.value));\n        }\n\n        const step = snapTarget === SliderSnap.Major ? this.options.handles.keyboard.major : this.options.handles.keyboard.minor;\n\n        this.setThumbValue(thumb, this.validateValue(thumb, value + (forwards ? step : -step)));\n\n    }\n\n    snapToEnd(thumb: SliderThumb, forwards: boolean): void {\n        this.setThumbValue(thumb, this.validateValue(thumb, forwards ? this.options.track.max : this.options.track.min));\n    }\n\n    getThumbValue(thumb: SliderThumb): number {\n        return this.getThumbState(thumb).value;\n    }\n\n    getFormattedValue(thumb: SliderThumb): string | number {\n        return this.options.handles.callout.formatter(this.getThumbState(thumb).value);\n    }\n\n    private getThumbState(thumb: SliderThumb) {\n        return thumb === SliderThumb.Lower ? this.thumbs.lower : this.thumbs.upper;\n    }\n\n    private setThumbState(thumb: SliderThumb, hover: boolean, drag: boolean) {\n\n        if (thumb === SliderThumb.Lower) {\n            this.thumbs.lower.hover = hover;\n            this.thumbs.lower.drag = drag;\n        } else {\n            this.thumbs.upper.hover = hover;\n            this.thumbs.upper.drag = drag;\n        }\n\n        // update the visibility of the tooltips\n        this.updateTooltips(thumb);\n    }\n\n    thumbEvent(thumb: SliderThumb, event: SliderThumbEvent): void {\n\n        if (this.disabled) {\n            return;\n        }\n\n        // get the current thumb state\n        const state = this.getThumbState(thumb);\n\n        // update based upon event\n        switch (event) {\n\n            case SliderThumbEvent.DragStart:\n                state.drag = true;\n                break;\n\n            case SliderThumbEvent.DragEnd:\n                state.drag = false;\n                break;\n\n            case SliderThumbEvent.MouseOver:\n                state.hover = true;\n                break;\n\n            case SliderThumbEvent.MouseLeave:\n                state.hover = false;\n                break;\n\n            case SliderThumbEvent.None:\n                state.drag = false;\n                state.hover = false;\n                break;\n        }\n\n        // update the thumb state\n        this.setThumbState(thumb, state.hover, state.drag);\n        this.updateOrder();\n    }\n\n    getAriaValueText(thumb: SliderThumb): string | number {\n        // get the current thumb value\n        const value = this.getThumbValue(thumb);\n\n        // get all the ticks\n        const tick = this.ticks.find(_tick => _tick.value === value);\n\n        if (tick && tick.label) {\n            return tick.label;\n        }\n\n        // otherwise simply display the formatted value\n        return this.getFormattedValue(thumb);\n    }\n\n    private updateTooltips(thumb: SliderThumb): void {\n\n        let visible = false;\n        const state = this.getThumbState(thumb);\n\n        switch (this.options.handles.callout.trigger) {\n\n            case SliderCalloutTrigger.Persistent:\n                visible = true;\n                break;\n\n            case SliderCalloutTrigger.Drag:\n                visible = state.drag;\n                break;\n\n            case SliderCalloutTrigger.Hover:\n                visible = state.hover || state.drag;\n                break;\n\n            case SliderCalloutTrigger.Dynamic:\n                visible = true;\n                break;\n        }\n\n        // update the state for the corresponding thumb\n        this.getTooltip(thumb).visible = visible;\n\n        // update the tooltip text\n        this.updateTooltipText(thumb);\n\n        // update the tooltip positions\n        this.updateTooltipPosition(thumb);\n    }\n\n    private updateTooltipText(thumb: SliderThumb) {\n\n        // get the thumb value\n        const tooltip = this.getTooltip(thumb);\n\n        // store the formatted label\n        tooltip.label = this.getFormattedValue(thumb).toString();\n    }\n\n    private getTooltipElement(thumb: SliderThumb): ElementRef {\n        return thumb === SliderThumb.Lower ? this.lowerTooltip : this.upperTooltip;\n    }\n\n    private getTooltip(thumb: SliderThumb) {\n        return thumb === SliderThumb.Lower ? this.tooltips.lower : this.tooltips.upper;\n    }\n\n    private updateTooltipPosition(thumb: SliderThumb): void {\n\n        const tooltip = this.getTooltip(thumb);\n\n        // if tooltip is not visible then stop here\n        if (tooltip.visible === false) {\n            return;\n        }\n\n        const tooltipElement = this.getTooltipElement(thumb);\n\n        // get the element widths\n        let thumbWidth: number;\n\n        if (this._options.handles.style === SliderStyle.Button) {\n            thumbWidth = this._options.track.height === SliderSize.Narrow ? 16 : 24;\n        } else {\n            thumbWidth = 2;\n        }\n\n        const tooltipWidth = tooltipElement.nativeElement.offsetWidth;\n\n        // calculate the tooltips new position\n        const tooltipPosition = Math.ceil((tooltipWidth - thumbWidth) / 2);\n\n        // update tooltip position\n        tooltip.position = -tooltipPosition;\n\n        if (this._options.type === SliderType.Range && this._options.handles.callout.trigger === SliderCalloutTrigger.Dynamic) {\n            this.preventTooltipOverlap(tooltip);\n        }\n    }\n\n    private preventTooltipOverlap(tooltip): void {\n        const trackWidth = this.track.nativeElement.offsetWidth;\n\n        const lower = (trackWidth / 100) * this.thumbs.lower.position;\n        const upper = (trackWidth / 100) * this.thumbs.upper.position;\n\n        const lowerWidth = this.lowerTooltip.nativeElement.offsetWidth / 2;\n        const upperWidth = this.upperTooltip.nativeElement.offsetWidth / 2;\n\n        const diff = (lower + lowerWidth) - (upper - upperWidth);\n\n        // if the tooltips are closer than 16px then adjust so the dont move any close\n        if (diff > 0) {\n            if (tooltip === this.tooltips.lower && this.thumbs.lower.drag === false) {\n                tooltip.position -= (diff / 2);\n            } else if (tooltip === this.tooltips.upper && this.thumbs.upper.drag === false) {\n                tooltip.position += (diff / 2);\n            }\n        }\n    }\n\n    private clamp(value: number, min: number, max: number): number {\n        return Math.min(Math.max(value, min), max);\n    }\n\n    updateThumbPosition(event: MouseEvent | TouchEvent, thumb: SliderThumb): void {\n\n        if (this.disabled) {\n            return;\n        }\n        // get event position - either mouse or touch\n        const eventPosition = event instanceof MouseEvent ? event.clientX : event.touches && event.touches.length > 0 ? event.touches[0].clientX : null;\n\n        // if event position is null do nothing\n        if (eventPosition === null) {\n            return;\n        }\n\n        // get mouse position\n        const mouseX = window.pageXOffset + eventPosition;\n\n        // get track size and position\n        const trackBounds = this.track.nativeElement.getBoundingClientRect();\n\n        // restrict the value within the range size\n        const position = this.clamp(mouseX - trackBounds.left, 0, trackBounds.width);\n\n        // get fraction representation of location within the track\n        const fraction = (position / trackBounds.width);\n\n        // convert to value within the range\n        let value = ((this._options.track.max - this._options.track.min) * fraction) + this._options.track.min;\n\n        // ensure value is valid\n        value = this.validateValue(thumb, value);\n\n        // snap to a tick if required\n        value = this.snapToTick(value, thumb);\n\n        // update the value accordingly\n        this.setThumbValue(thumb, value);\n\n        this.updateOrderOnDrag(thumb);\n        this.updateValues();\n\n        // update tooltip text & position\n        this.updateTooltipText(thumb);\n\n        // update the position of all visible tooltips\n        this.updateTooltipPosition(SliderThumb.Lower);\n        this.updateTooltipPosition(SliderThumb.Upper);\n\n        // mark as dirty for change detection\n        this._changeDetectorRef.markForCheck();\n\n    }\n\n    private updateOrderOnDrag(thumb: SliderThumb): void {\n\n        const lower = thumb === SliderThumb.Lower ? 101 : 100;\n        const upper = thumb === SliderThumb.Lower ? 100 : 101;\n\n        // Ensure currently dragged thumb is on top\n        this.thumbs.lower.order = lower;\n        this.thumbs.upper.order = upper;\n    }\n\n    private updateOrder(): void {\n\n        const isDragged = this.thumbs.lower.drag || this.thumbs.upper.drag;\n\n        if (this._options && !isDragged) {\n\n            const lowerValue = this.getThumbValue(this.sliderThumb.Lower);\n            const upperValue = this.getThumbValue(this.sliderThumb.Upper);\n\n            const max = this._options.track.max;\n            const min = this._options.track.min;\n            const range = max - min;\n            const median = (range / 100 * 50) + min;\n\n            if (upperValue <= median) {\n                this.thumbs.lower.order = 100;\n                this.thumbs.upper.order = 101;\n            }\n\n            if (lowerValue > median) {\n                this.thumbs.lower.order = 101;\n                this.thumbs.upper.order = 100;\n            }\n        }\n    }\n\n    private getTickDistances(value: number, thumb: SliderThumb, snapTarget: SliderSnap): SliderTick[] {\n\n        // if snap target is none then return original value\n        if (snapTarget === SliderSnap.None) {\n            return [];\n        }\n\n        // get filtered ticks\n        let ticks: SliderTick[];\n\n        switch (snapTarget) {\n\n            case SliderSnap.Minor:\n                ticks = this.ticks.filter(tick => tick.type === SliderTickType.Minor);\n                break;\n\n            case SliderSnap.Major:\n                ticks = this.ticks.filter(tick => tick.type === SliderTickType.Major);\n                break;\n\n            default:\n                ticks = this.ticks.slice(0);\n        }\n\n        // get the track limit\n        let lowerLimit = this._options.track.min;\n        let upperLimit = this._options.track.max;\n\n        if (this._options.type === SliderType.Range && thumb === SliderThumb.Lower) {\n            upperLimit = this.thumbs.upper.value;\n        }\n\n        if (this._options.type === SliderType.Range && thumb === SliderThumb.Upper) {\n            lowerLimit = this.thumbs.lower.value;\n        }\n\n        // Find the closest tick to the current position\n        const range = ticks.filter(tick => tick.value >= lowerLimit && tick.value <= upperLimit);\n\n        // If there are no close ticks in the valid range then dont snap\n        if (range.length === 0) {\n            return [];\n        }\n\n        return range.sort((tickOne, tickTwo) => {\n\n            const tickOneDelta = Math.max(tickOne.value, value) - Math.min(tickOne.value, value);\n            const tickTwoDelta = Math.max(tickTwo.value, value) - Math.min(tickTwo.value, value);\n\n            return tickOneDelta - tickTwoDelta;\n        });\n    }\n\n    private snapToTick(value: number, thumb: SliderThumb): number {\n\n        const tickDistances = this.getTickDistances(value, thumb, this._options.track.ticks.snap);\n\n        // if there are no ticks return the current value\n        if (tickDistances.length === 0) {\n            return value;\n        }\n\n        // get the closest tick\n        return tickDistances[0].value;\n    }\n\n    private validateValue(thumb: SliderThumb, value: number): number {\n\n        // if slider is not a range value is always valid providing it is within the chart min and max values\n        if (this._options.type === SliderType.Value) {\n            return Math.max(Math.min(value, this._options.track.max), this._options.track.min);\n        }\n\n        // check if value is with chart ranges\n        if (value > this._options.track.max) {\n            return thumb === SliderThumb.Lower ? Math.min(this._options.track.max, this.thumbs.upper.value) : this._options.track.max;\n        }\n\n        if (value < this._options.track.min) {\n            return thumb === SliderThumb.Upper ? Math.max(this._options.track.min, this.thumbs.lower.value) : this._options.track.min;\n        }\n\n        // otherwise we need to check to make sure lower thumb cannot go above higher and vice versa\n        if (thumb === SliderThumb.Lower) {\n\n            if (this.thumbs.upper.value === null) {\n                return value;\n            }\n\n            return value <= this.thumbs.upper.value ? value : this.thumbs.upper.value;\n        }\n\n        if (thumb === SliderThumb.Upper) {\n\n            if (this.thumbs.lower.value === null) {\n                return value;\n            }\n\n            return value >= this.thumbs.lower.value ? value : this.thumbs.lower.value;\n        }\n    }\n\n    private updateOptions(): void {\n\n        // add in the default options that user hasn't specified\n        this._options = this.deepMerge(this._options || {}, this.defaultOptions);\n\n        this.updateTrackColors();\n        this.updateTicks();\n        this.updateValues();\n    }\n\n    private updateValues(): void {\n\n        if (this.value === undefined || this.value === null) {\n            this.value = 0;\n        }\n\n        let lowerValue = typeof this.value === 'number' ? this.value : this.value.low;\n        let upperValue = typeof this.value === 'number' ? this.value : this.value.high;\n\n        // validate values\n        lowerValue = this.validateValue(SliderThumb.Lower, Number(lowerValue.toFixed(4)));\n        upperValue = this.validateValue(SliderThumb.Upper, Number(upperValue.toFixed(4)));\n\n        // calculate the positions as percentages\n        const lowerPosition = (((lowerValue - this._options.track.min) / (this._options.track.max - this._options.track.min)) * 100);\n        const upperPosition = (((upperValue - this._options.track.min) / (this._options.track.max - this._options.track.min)) * 100);\n\n        // update thumb positions\n        this.thumbs.lower.position = lowerPosition;\n        this.thumbs.upper.position = upperPosition;\n\n        // calculate the track sizes\n        this.tracks.lower.size = lowerPosition;\n        this.tracks.middle.size = upperPosition - lowerPosition;\n        this.tracks.upper.size = this._options.type === SliderType.Value ? 100 - lowerPosition : 100 - upperPosition;\n\n        // update the value input\n        this.setValue(lowerValue, upperValue);\n    }\n\n    private setValue(low: number, high?: number): void {\n\n        this.thumbs.lower.value = low;\n        this.thumbs.upper.value = high;\n\n        const previousValue = this.clone(this._value);\n\n        this.value = this._options.type === SliderType.Value ? low : { low, high };\n\n        // call the event emitter if changes occured\n        if (this.detectValueChange(this.value, previousValue)) {\n            this.valueChange.emit(this.clone(this.value));\n\n            this.updateTooltipText(SliderThumb.Lower);\n            this.updateTooltipText(SliderThumb.Upper);\n        } else {\n            this.valueChange.emit(this.clone(this.value));\n        }\n    }\n\n    private setThumbValue(thumb: SliderThumb, value: number): void {\n\n        // update the thumb value\n        this.getThumbState(thumb).value = value;\n\n        // forward these changes to the value\n        this.setValue(this.thumbs.lower.value, this.thumbs.upper.value);\n    }\n\n    private updateTicks(): void {\n\n        // get tick options\n        const majorOptions = this._options.track.ticks.major;\n        const minorOptions = this._options.track.ticks.minor;\n\n        // check if we should show ticks\n        if (majorOptions.show === false && minorOptions.show === false) {\n            this.ticks = [];\n        }\n\n        // create ticks for both major and minor - only get the ones to be shown\n        const majorTicks = this.getTicks(majorOptions, SliderTickType.Major).filter(tick => tick.showTicks);\n        const minorTicks = this.getTicks(minorOptions, SliderTickType.Minor).filter(tick => tick.showTicks);\n\n        // remove any minor ticks that are on a major interval\n        this.ticks = this.unionTicks(majorTicks, minorTicks);\n    }\n\n    private updateTrackColors(): void {\n\n        // get colors for each part of the track\n        const { lower, range, higher } = this._options.track.colors;\n\n        // update the controller value\n        this.tracks.lower.color = this.getTrackColorStyle(lower);\n        this.tracks.middle.color = this.getTrackColorStyle(range);\n        this.tracks.upper.color = this.getTrackColorStyle(higher);\n    }\n\n    /** Map the color value to the correct CSS color value */\n    private getTrackColorStyle(color: string | string[] | undefined): string | undefined {\n        return Array.isArray(color) ? `linear-gradient(to right, ${color.join(', ')})` : color;\n    }\n\n    private getSteps(steps: number | number[]): number[] {\n\n        // if they are already an array just return it\n        if (steps instanceof Array) {\n            return steps;\n        }\n\n        const output: number[] = [];\n\n        // otherwise calculate the steps\n        for (let idx = this._options.track.min; idx <= this._options.track.max; idx += steps) {\n            output.push(idx);\n        }\n\n        return output;\n    }\n\n    private getTicks(options: SliderTickOptions, type: SliderTickType): SliderTick[] {\n\n        // create an array to store the ticks and step points\n        const steps = this.getSteps(options.steps);\n\n        // get some chart options\n        const min = this._options.track.min;\n        const max = this._options.track.max;\n\n        // convert each step to a slider tick and remove invalid ticks\n        return steps.map(step => {\n            return {\n                showTicks: options.show,\n                showLabels: options.labels,\n                type,\n                position: ((step - min) / (max - min)) * 100,\n                value: step,\n                label: options.formatter(step)\n            };\n        }).filter(tick => tick.position >= 0 && tick.position <= 100);\n    }\n\n    private unionTicks(majorTicks: SliderTick[], minorTicks: SliderTick[]): SliderTick[] {\n\n        // get all ticks combined removing any minor ticks with the same value as major ticks\n        return majorTicks.concat(minorTicks)\n            .filter((tick, index, array) => tick.type === SliderTickType.Major || !array.find(tk => tk.type === SliderTickType.Major && tk.position === tick.position))\n            .sort((t1, t2) => t1.value - t2.value);\n    }\n\n    private deepMerge<T>(destination: T, source: T): T {\n\n        // loop though all of the properties in the source object\n        for (const prop in source) {\n\n            // check if the destination object has the property\n            // eslint-disable-next-line no-prototype-builtins\n            if (!destination.hasOwnProperty(prop)) {\n                // copy the property across\n                destination[prop] = source[prop];\n                continue;\n            }\n\n            // if the property exists and is not an object then skip\n            if (typeof destination[prop] !== 'object') {\n                continue;\n            }\n\n            // check if property is an array\n            if (destination[prop] instanceof Array) {\n                continue;\n            }\n\n            // if it is an object then perform a recursive check\n            destination[prop] = this.deepMerge(destination[prop], source[prop]);\n        }\n\n        return destination;\n    }\n\n    private detectValueChange(value1: number | SliderValue, value2: number | SliderValue): boolean {\n\n        // compare two slider values\n        if (this.isSliderValue(value1) && this.isSliderValue(value2)) {\n\n            // references to the objects in the correct types\n            const obj1 = value1 as SliderValue;\n            const obj2 = value2 as SliderValue;\n\n            return obj1.low !== obj2.low || obj1.high !== obj2.high;\n        }\n\n        // if not a slider value - should be number of nullable type - compare normally\n        return value1 !== value2;\n    }\n\n    /**\n     * Determines whether or not an object conforms to the\n     * SliderValue interface.\n     * @param value - The object to check - this must be type any\n     */\n    private isSliderValue(value: number | SliderValue): boolean {\n\n        // check if is an object\n        if (typeof value !== 'object') {\n            return false;\n        }\n\n        // next check if it contains the necessary properties\n        return 'low' in value && 'high' in value;\n    }\n\n    private clone(value: number | SliderValue): number | SliderValue {\n\n        // if it is not an object simply return the value\n        if (typeof value !== 'object') {\n            return value;\n        }\n\n        // create a new object from the existing one\n        const instance = { ...value };\n\n        // delete remove the value from the old object\n        value = undefined;\n\n        // return the new instance of the object\n        return instance;\n    }\n\n    static ngAcceptInputType_disabled: boolean | string;\n\n}\n\nexport enum SliderType {\n    Value,\n    Range\n}\n\nexport enum SliderStyle {\n    Button,\n    Line\n}\n\nexport enum SliderSize {\n    Narrow,\n    Wide\n}\n\nexport enum SliderCalloutTrigger {\n    None,\n    Hover,\n    Drag,\n    Persistent,\n    Dynamic\n}\n\nexport interface SliderValue {\n    low: number;\n    high: number;\n}\n\nexport enum SliderSnap {\n    None,\n    Minor,\n    Major,\n    All\n}\n\nexport enum SliderTickType {\n    Minor,\n    Major\n}\n\nexport interface SliderOptions {\n    type?: SliderType;\n    handles?: SliderHandleOptions;\n    track?: SliderTrackOptions;\n}\n\nexport interface SliderHandleOptions {\n    style?: SliderStyle;\n    callout?: SliderCallout;\n    keyboard?: SliderKeyboardOptions;\n    aria?: SliderAriaOptions;\n}\n\nexport interface SliderAriaOptions {\n    thumb?: string;\n    lowerThumb?: string;\n    upperThumb?: string;\n}\n\nexport interface SliderKeyboardOptions {\n    major?: number;\n    minor?: number;\n}\n\nexport interface SliderTrackOptions {\n    height?: SliderSize;\n    min?: number;\n    max?: number;\n    ticks?: SliderTicksOptions;\n    colors?: SliderTrackColors;\n}\n\nexport interface SliderTicksOptions {\n    snap?: SliderSnap;\n    major?: SliderTickOptions;\n    minor?: SliderTickOptions;\n}\n\nexport interface SliderTickOptions {\n    show?: boolean;\n    steps?: number | number[];\n    labels?: boolean;\n    formatter?: (value: number) => string | number;\n}\n\nexport interface SliderTick {\n    showTicks: boolean;\n    showLabels: boolean;\n    type: SliderTickType;\n    position: number;\n    value: number;\n    label: string | number;\n}\n\nexport interface SliderTrackColors {\n    lower?: string | string[];\n    range?: string | string[];\n    higher?: string | string[];\n}\n\nexport interface SliderCallout {\n    trigger?: SliderCalloutTrigger;\n    background?: string;\n    color?: string;\n    formatter?: (value: number) => string | number;\n}\n\nexport enum SliderThumbEvent {\n    None,\n    MouseOver,\n    MouseLeave,\n    DragStart,\n    DragEnd\n}\n\nexport enum SliderThumb {\n    Lower,\n    Upper\n}\n","<div class=\"track\"\n  #track\n  [class.narrow]=\"_options.track.height === sliderSize.Narrow\"\n  [class.wide]=\"_options.track.height === sliderSize.Wide\"\n  [class.range]=\"_options.type === sliderType.Range\">\n\n  <!-- Section Beneath Lower Thumb -->\n  <div class=\"track-section track-lower\" [style.flex-grow]=\"tracks.lower.size\" [style.background]=\"this.disabled ? null : tracks.lower.color\"></div>\n\n  <!-- Lower Thumb Button / Line -->\n  <div class=\"thumb lower\"\n    uxDrag\n    uxFocusIndicator\n    role=\"slider\"\n    [tabindex]=\"disabled ? -1 : 0\"\n    #lowerthumb\n        [attr.aria-label]=\"_options.type === sliderType.Range ? _options.handles.aria.lowerThumb :\n        _options.handles.aria.thumb\"\n    [attr.aria-valuemin]=\"_options?.track?.min\"\n        [attr.aria-valuemax]=\"_options.type === sliderType.Range ? getThumbValue(sliderThumb.Upper) :\n        _options?.track?.max\"\n    [attr.aria-valuenow]=\"getThumbValue(sliderThumb.Lower)\"\n    [attr.aria-valuetext]=\"getAriaValueText(sliderThumb.Lower)\"\n    [style.left.%]=\"thumbs.lower.position\"\n    [class.active]=\"thumbs.lower.drag\"\n    [style.z-index]=\"thumbs.lower.order\"\n    [class.button]=\"_options.handles.style === sliderStyle.Button\"\n    [class.line]=\"_options.handles.style === sliderStyle.Line\"\n    [class.narrow]=\"_options.track.height === sliderSize.Narrow\"\n    [class.wide]=\"_options.track.height === sliderSize.Wide\"\n    (onDragStart)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.DragStart); lowerthumb.focus()\"\n    (onDrag)=\"updateThumbPosition($event, sliderThumb.Lower)\"\n    (onDragEnd)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.DragEnd)\"\n    (mouseenter)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.MouseOver)\"\n    (mouseleave)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.MouseLeave)\"\n    (focus)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.MouseOver)\"\n    (blur)=\"thumbEvent(sliderThumb.Lower, sliderThumbEvent.MouseLeave)\"\n    (keydown.ArrowLeft)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.All, false); $event.preventDefault()\"\n    (keydown.ArrowRight)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.All, true); $event.preventDefault()\"\n    (keydown.ArrowUp)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.All, false); $event.preventDefault()\"\n    (keydown.ArrowDown)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.All, true); $event.preventDefault()\"\n    (keydown.PageDown)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.Major, false); $event.preventDefault()\"\n    (keydown.PageUp)=\"snapToNearestTick(sliderThumb.Lower, sliderSnap.Major, true); $event.preventDefault()\"\n    (keydown.Home)=\"snapToEnd(sliderThumb.Lower, false); $event.preventDefault()\"\n    (keydown.End)=\"snapToEnd(sliderThumb.Lower, true); $event.preventDefault()\">\n\n    <!-- Lower Thumb Callout -->\n    <div class=\"tooltip top tooltip-lower\" #lowerTooltip\n            [class.tooltip-dynamic]=\"_options.handles.callout.trigger === sliderCalloutTrigger.Dynamic &&\n             thumbs.lower.drag === false\"\n      [style.opacity]=\"tooltips.lower.visible ? 1 : 0\"\n      [style.left.px]=\"tooltips.lower.position\">\n\n      <div class=\"tooltip-arrow\" [style.border-top-color]=\"_options.handles.callout.background\"></div>\n\n      <div class=\"tooltip-inner\"\n        [style.background-color]=\"_options.handles.callout.background\"\n        [style.color]=\"_options.handles.callout.color\">\n        {{ tooltips.lower.label }}\n      </div>\n    </div>\n\n  </div>\n\n  <!-- Section of Track Between Lower and Upper Thumbs -->\n  @if (_options.type === sliderType.Range) {\n    <div class=\"track-section track-range\"\n      [style.flex-grow]=\"tracks.middle.size\" [style.background]=\"this.disabled ? null : tracks.middle.color\">\n    </div>\n  }\n\n  <!-- Upper Thumb Button / Line -->\n  <div class=\"thumb upper\"\n    uxDrag\n    uxFocusIndicator\n    role=\"slider\"\n    [tabindex]=\"disabled ? -1 : 0\"\n    #upperthumb\n    [attr.aria-label]=\"_options.handles.aria.upperThumb\"\n    [attr.aria-valuemin]=\"getThumbValue(sliderThumb.Lower) || _options?.track?.min\"\n    [attr.aria-valuemax]=\"_options?.track?.max\"\n    [attr.aria-valuenow]=\"getThumbValue(sliderThumb.Upper)\"\n    [attr.aria-valuetext]=\"getAriaValueText(sliderThumb.Upper)\"\n    [hidden]=\"_options.type !== sliderType.Range\"\n    [class.active]=\"thumbs.upper.drag\"\n    [style.left.%]=\"thumbs.upper.position\"\n    [style.z-index]=\"thumbs.upper.order\"\n    [class.button]=\"_options.handles.style === sliderStyle.Button\"\n    [class.line]=\"_options.handles.style === sliderStyle.Line\"\n    [class.narrow]=\"_options.track.height === sliderSize.Narrow\"\n    [class.wide]=\"_options.track.height === sliderSize.Wide\"\n    (onDragStart)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.DragStart); upperthumb.focus()\"\n    (onDrag)=\"updateThumbPosition($event, sliderThumb.Upper)\"\n    (onDragEnd)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.DragEnd)\"\n    (mouseenter)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.MouseOver)\"\n    (mouseleave)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.MouseLeave)\"\n    (focus)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.MouseOver)\"\n    (blur)=\"thumbEvent(sliderThumb.Upper, sliderThumbEvent.MouseLeave)\"\n    (keydown.ArrowLeft)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.All, false); $event.preventDefault()\"\n    (keydown.ArrowRight)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.All, true); $event.preventDefault()\"\n    (keydown.ArrowUp)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.All, false); $event.preventDefault()\"\n    (keydown.ArrowDown)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.All, true); $event.preventDefault()\"\n    (keydown.PageDown)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.Major, false); $event.preventDefault()\"\n    (keydown.PageUp)=\"snapToNearestTick(sliderThumb.Upper, sliderSnap.Major, true); $event.preventDefault()\"\n    (keydown.Home)=\"snapToEnd(sliderThumb.Upper, false); $event.preventDefault()\"\n    (keydown.End)=\"snapToEnd(sliderThumb.Upper, true); $event.preventDefault()\">\n\n    <!-- Upper Thumb Callout -->\n    <div class=\"tooltip top tooltip-upper\" #upperTooltip\n            [class.tooltip-dynamic]=\"_options.handles.callout.trigger === sliderCalloutTrigger.Dynamic &&\n             thumbs.upper.drag === false\"\n      [style.opacity]=\"tooltips.upper.visible ? 1 : 0\"\n      [style.left.px]=\"tooltips.upper.position\">\n\n      <div class=\"tooltip-arrow\" [style.border-top-color]=\"_options.handles.callout.background\"></div>\n\n      @if (_options.type === sliderType.Range) {\n        <div class=\"tooltip-inner\"\n          [style.background-color]=\"_options.handles.callout.background\"\n          [style.color]=\"_options.handles.callout.color\">\n          {{ tooltips.upper.label }}\n        </div>\n      }\n    </div>\n  </div>\n\n  <!-- Section of Track Abover Upper Thumb -->\n  <div class=\"track-section track-higher\" [style.flex-grow]=\"tracks.upper.size\" [style.background]=\"this.disabled ? null : tracks.upper.color\"></div>\n\n</div>\n\n<!-- Chart Ticks and Tick Labels -->\n@if ((_options.track.ticks.major.show || _options.track.ticks.minor.show) &&\n  _options.handles.callout.trigger !== sliderCalloutTrigger.Dynamic) {\n  <div class=\"tick-container\"\n    role=\"presentation\"\n    [class.show-labels]=\"_options.track.ticks.major.labels || _options.track.ticks.minor.labels\">\n    @for (tick of ticks; track tick) {\n      <div class=\"tick\"\n        [class.major]=\"tick.type === sliderTickType.Major\"\n        [class.minor]=\"tick.type === sliderTickType.Minor\"\n        [style.left.%]=\"tick.position\"\n        [hidden]=\"!tick.showTicks\">\n        <div class=\"tick-indicator\"></div>\n        <div class=\"tick-label\" aria-hidden=\"true\" [hidden]=\"!tick.showLabels\">{{ tick.label }}</div>\n      </div>\n    }\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { DragModule } from '../../directives/drag/index';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { SliderComponent } from './slider.component';\n\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        ColorServiceModule,\n        DragModule\n    ],\n    exports: [\n        SliderComponent\n    ],\n    declarations: [\n        SliderComponent\n    ]\n})\nexport class SliderModule { }","import { ChangeDetectionStrategy, Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { Subject, timer } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { SliderOptions, SliderSize } from '../../../slider/index';\nimport { MediaPlayerService } from '../../media-player.service';\n\nlet uniqueId: number = 1;\n\n@Component({\n    selector: 'ux-media-player-controls',\n    templateUrl: './controls.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[class.quiet]': 'mediaPlayerService.quietMode || mediaPlayerService.fullscreen'\n    }\n})\nexport class MediaPlayerControlsExtensionComponent implements OnInit, OnDestroy {\n    readonly mediaPlayerService = inject(MediaPlayerService);\n\n    volumeActive: boolean = false;\n    volumeFocus: boolean = false;\n    returnFocus: boolean = true;\n    subtitlesId: string = `ux-media-player-subtitle-popover-${uniqueId++}`;\n    subtitlesOpen: boolean = false;\n    mouseEnterVolume = new Subject<void>();\n    mouseLeaveVolume = new Subject<void>();\n\n    options: SliderOptions = {\n        handles: {\n            aria: {\n                thumb: 'Volume'\n            }\n        },\n        track: {\n            colors: {\n                lower: '#666'\n            },\n            height: SliderSize.Narrow,\n            ticks: {\n                major: {\n                    show: false\n                },\n                minor: {\n                    show: false\n                }\n            }\n        }\n    };\n\n    private _volume: number = 100;\n    private _previousVolume = 100;\n    private readonly _onDestroy = new Subject<void>();\n\n\n    get volume(): number {\n        return this._volume;\n    }\n\n    set volume(value: number) {\n\n        if (value === 0 && this._volume !== 0) {\n            this._previousVolume = this._volume;\n        }\n\n        this._volume = Math.min(Math.max(value, 0), 100);\n        this.mediaPlayerService.volume = this._volume / 100;\n    }\n\n    ngOnInit(): void {\n        this.mediaPlayerService.volumeChangeEvent.pipe(takeUntil(this._onDestroy)).subscribe(volume => this.volume = volume * 100);\n        this.mediaPlayerService.initEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => this.volume = this.mediaPlayerService.volume * 100);\n\n        this.mouseEnterVolume.pipe(takeUntil(this._onDestroy)).subscribe(() => this.volumeActive = true);\n        this.mouseLeaveVolume.pipe(\n            switchMap(() => timer(1500).pipe(takeUntil(this.mouseEnterVolume))), takeUntil(this._onDestroy)\n        ).subscribe(() => this.volumeActive = false);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    toggleMute(): void {\n        this.volume = this.volume === 0 ? this._previousVolume : 0;\n    }\n\n    goToStart(): void {\n        this.mediaPlayerService.currentTime = 0;\n    }\n\n    goToEnd(): void {\n        this.mediaPlayerService.currentTime = this.mediaPlayerService.duration;\n    }\n\n    isSubtitleActive(): boolean {\n        for (let idx = 0; idx < this.mediaPlayerService.textTracks.length; idx++) {\n            if (this.mediaPlayerService.textTracks[idx].mode === 'showing') {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    setSubtitleTrack(track: TextTrack): void {\n        // hide all tracks\n        this.mediaPlayerService.hideSubtitleTracks();\n\n        // set the position of the subtitle track\n        for (let idx = 0; idx < track.cues.length; idx++) {\n             \n            const cue: any = track.cues[idx];\n            cue.line = -3;\n        }\n\n        // activate the selected one\n        track.mode = 'showing';\n\n    }\n\n    getSubtitleTrack(): string {\n        for (let idx = 0; idx < this.mediaPlayerService.textTracks.length; idx++) {\n            if (this.mediaPlayerService.textTracks[idx].mode === 'showing') {\n                return this.mediaPlayerService.textTracks[idx].label;\n            }\n        }\n\n        return this.mediaPlayerService.noSubtitlesAriaLabel;\n    }\n\n}\n","<div class=\"volume-container\">\n\n  <div class=\"volume-slider-container\"\n    #volumeContainer\n    [class.active]=\"volumeActive || volumeFocus\"\n    (mouseenter)=\"mouseEnterVolume.next()\"\n    (mouseleave)=\"mouseLeaveVolume.next()\"\n    (uxFocusWithin)=\"volumeFocus = true\"\n    (uxBlurWithin)=\"volumeFocus = false\">\n\n    <button #volumeIcon\n      uxFocusIndicator\n      type=\"button\"\n      class=\"volume-slider-icon\"\n      [attr.aria-label]=\"mediaPlayerService.muteAriaLabel(volume)\"\n      [uxTooltip]=\"muteTooltip\"\n      [showTriggers]=\"['mouseenter']\"\n      [hideTriggers]=\"['mouseleave']\"\n      (click)=\"toggleMute()\"\n      (mouseup)=\"volumeIcon.blur()\">\n\n      @if (volume === 0) {\n        <ux-icon name=\"volume-mute\"></ux-icon>\n      }\n      @if (volume > 0 && volume <= 70) {\n        <ux-icon name=\"volume-low\"></ux-icon>\n      }\n      @if (volume > 70) {\n        <ux-icon name=\"volume\"></ux-icon>\n      }\n    </button>\n\n    <div class=\"volume-slider-node\">\n      <ux-slider [value]=\"volume\" (valueChange)=\"volume = $any($event)\" [options]=\"options\"></ux-slider>\n    </div>\n  </div>\n</div>\n\n<button #startButton\n  uxFocusIndicator\n  type=\"button\"\n  class=\"control-button\"\n  (click)=\"goToStart()\"\n  (mouseup)=\"startButton.blur()\"\n  [attr.aria-label]=\"mediaPlayerService.goToStartAriaLabel\">\n\n  <svg viewBox=\"0 0 51.5 64\" width=\"14\" height=\"17\" focusable=\"false\">\n    <rect x=\"0\" y=\"0\" width=\"7.5\" height=\"64\" />\n    <polygon points=\"51.5,64 51.5,0 7.4,32 \" />\n  </svg>\n</button>\n\n<button #playButton\n  uxFocusIndicator\n  type=\"button\"\n  class=\"control-button\"\n  [attr.aria-label]=\"mediaPlayerService.playAriaLabel(mediaPlayerService.playing | async)\"\n  (click)=\"mediaPlayerService.togglePlay()\"\n  (mouseup)=\"playButton.blur()\">\n\n  @if ((mediaPlayerService.playing | async) === false) {\n    <svg viewBox=\"0 0 45 64\" width=\"20\" height=\"29\" focusable=\"false\">\n      <polygon points=\"0.4,0 0.4,64 44.6,32\" />\n    </svg>\n  }\n  @if (mediaPlayerService.playing | async) {\n    <svg viewBox=\"0 0 43 56.9\" width=\"20\" height=\"29\" focusable=\"false\">\n      <rect y=\"0.1\" width=\"15.7\" height=\"56.9\" />\n      <rect x=\"27.3\" y=\"0.1\" width=\"15.7\" height=\"56.9\" />\n    </svg>\n  }\n</button>\n\n<button #endButton\n  uxFocusIndicator\n  type=\"button\"\n  class=\"control-button\"\n  (click)=\"goToEnd()\"\n  (mouseup)=\"endButton.blur()\"\n  [attr.aria-label]=\"mediaPlayerService.goToEndAriaLabel\">\n\n  <svg viewBox=\"0 0 51.5 64\" width=\"14\" height=\"17\" focusable=\"false\">\n    <rect x=\"44.1\" y=\"0\" width=\"7.5\" height=\"64\" />\n    <polygon points=\"0,64 0,0 44.1,32\" />\n  </svg>\n</button>\n\n<div class=\"actions-list\">\n\n  <ng-content></ng-content>\n\n  @if (mediaPlayerService.textTracks.length > 0 && mediaPlayerService.type === 'video') {\n    <div class=\"action-button-container\">\n      <button #subtitlesButton\n        uxFocusIndicator\n        type=\"button\"\n        class=\"action-button\"\n        (keydown)=\"returnFocus = true\"\n        (click)=\"subtitlesOpen = !subtitlesOpen\"\n        (mouseup)=\"subtitlesButton.blur(); returnFocus = false\"\n        [attr.aria-label]=\"mediaPlayerService.selectSubtitlesAriaLabel(getSubtitleTrack())\"\n        [attr.aria-expanded]=\"subtitlesOpen\"\n        [attr.aria-describedby]=\"subtitlesId\"\n        aria-haspopup=\"true\">\n        <ux-icon name=\"subtitles\"></ux-icon>\n      </button>\n      @if (subtitlesOpen) {\n        <div #subtitles\n          [style.top.px]=\"-subtitles.offsetHeight\"\n          class=\"popover top media-player-subtitles-popover show\"\n          [id]=\"subtitlesId\"\n          (keydown.escape)=\"subtitlesOpen = false\"\n          (uxClickOutside)=\"subtitlesOpen = false\"\n          >\n          <div class=\"arrow\"></div>\n          <h3 class=\"popover-title\">{{ mediaPlayerService.subtitlesTitleAriaLabel }}</h3>\n          <div class=\"popover-content\">\n            <ul class=\"subtitles-list\" uxTabbableList [focusOnShow]=\"returnFocus\" [returnFocus]=\"returnFocus\">\n              <li uxTabbableListItem\n                tabindex=\"0\"\n                class=\"subtitles-list-item\"\n                [class.active]=\"!isSubtitleActive()\"\n                [attr.aria-selected]=\"isSubtitleActive()\"\n                (click)=\"mediaPlayerService.hideSubtitleTracks(); subtitlesOpen = false\"\n                (keydown.enter)=\"mediaPlayerService.hideSubtitleTracks(); subtitlesOpen = false; returnFocus = true\">\n                <ux-icon name=\"checkmark\" class=\"subtitles-list-item-checkmark\"></ux-icon>\n                <span>{{ mediaPlayerService.subtitlesOffAriaLabel }}</span>\n              </li>\n              @for (track of mediaPlayerService.textTracks; track track) {\n                <li uxTabbableListItem\n                  class=\"subtitles-list-item\"\n                  [class.active]=\"track.mode === 'showing'\"\n                  [attr.aria-selected]=\"isSubtitleActive()\"\n                  (click)=\"setSubtitleTrack(track); subtitlesOpen = false\"\n                  (keydown.enter)=\"setSubtitleTrack(track); subtitlesOpen = false; returnFocus = true\">\n                  <ux-icon name=\"checkmark\" class=\"subtitles-list-item-checkmark\"></ux-icon>\n                  <span>{{ track.label }}</span>\n                </li>\n              }\n            </ul>\n          </div>\n        </div>\n      }\n    </div>\n  }\n\n  <div class=\"action-button-container\">\n    @if (mediaPlayerService.type !== 'audio') {\n      <button #fullscreenButton\n        uxFocusIndicator\n        type=\"button\"\n        class=\"action-button\"\n        [attr.aria-label]=\"mediaPlayerService.fullscreenAriaLabel(mediaPlayerService.fullscreen)\"\n        (click)=\"mediaPlayerService.toggleFullscreen()\"\n        (mouseup)=\"fullscreenButton.blur()\">\n        <ux-icon [name]=\"mediaPlayerService.fullscreen ? 'contract' : 'expand'\"></ux-icon>\n      </button>\n    }\n  </div>\n</div>\n\n\n\n<ng-template #muteTooltip>\n  <span aria-hidden=\"true\">{{ volume === 0 ? 'Unmute' : 'Mute' }}</span>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxMediaPlayerCustomControl]',\n})\nexport class MediaPlayerCustomControlDirective {}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'duration'\n})\nexport class DurationPipe implements PipeTransform {\n    transform(seconds: number): string {\n\n        let minutes = Math.floor(seconds / 60);\n        let hours = Math.floor(minutes / 60);\n        const days = Math.floor(hours / 24);\n\n        hours = hours - (days * 24);\n        minutes = minutes - (days * 24 * 60) - (hours * 60);\n        seconds = Math.floor(seconds - (days * 24 * 60 * 60) - (hours * 60 * 60) - (minutes * 60));\n\n        if (hours > 0) {\n            return `${this.pad(hours)}:${this.pad(minutes)}:${this.pad(seconds)}`;\n        } else {\n            return `${this.pad(minutes)}:${this.pad(seconds)}`;\n        }\n    }\n\n    pad(value: number): string {\n        if (value < 10) {\n            return `0${value}`;\n        }\n\n        return value.toString();\n    }\n}","import { AfterViewInit, Component, ElementRef, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nimport { MediaPlayerService } from '../../media-player.service';\n\n\n@Component({\n    selector: 'ux-media-player-timeline',\n    templateUrl: './timeline.component.html',\n    host: {\n        '(document:mouseup)': 'mouseDown = false',\n        '[class.quiet]': 'mediaPlayerService.quietMode || mediaPlayerService.fullscreen'\n    }\n})\nexport class MediaPlayerTimelineExtensionComponent implements OnInit, AfterViewInit, OnDestroy {\n    readonly mediaPlayerService = inject(MediaPlayerService);\n\n    @ViewChild('progressThumb', { static: true }) thumb: ElementRef;\n    @ViewChild('timeline', { static: true }) timelineRef: ElementRef;\n\n    current: number = 0;\n    position: number = 0;\n    buffered: MediaPlayerBuffered[] = [];\n    mouseDown: boolean = false;\n    scrub = { visible: false, position: 0, time: 0 };\n\n    private readonly _onDestroy = new Subject<void>();\n\n\n    ngOnInit(): void {\n\n        // watch for changes to the current time\n        this.mediaPlayerService.fullscreenEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            this.scrub.position = 0;\n        });\n\n        this.mediaPlayerService.timeUpdateEvent.pipe(takeUntil(this._onDestroy)).subscribe(current => {\n            this.current = current;\n            this.position = (this.current / this.mediaPlayerService.duration) * 100;\n        });\n\n        this.mediaPlayerService.progressEvent.pipe(takeUntil(this._onDestroy)).subscribe((buffered: TimeRanges) => {\n            this.buffered = [];\n\n            for (let idx = 0; idx < buffered.length; idx++) {\n                this.buffered.push({\n                    start: (buffered.start(idx) / this.mediaPlayerService.duration) * 100,\n                    end: (buffered.end(idx) / this.mediaPlayerService.duration) * 100\n                });\n            }\n        });\n    }\n\n    ngAfterViewInit(): void {\n        const mousedown$ = fromEvent(this.thumb.nativeElement, 'mousedown');\n        const mousemove$ = fromEvent(document, 'mousemove');\n        const mouseup$ = fromEvent(document, 'mouseup');\n\n        mousedown$.pipe(\n            switchMap(() => mousemove$.pipe(takeUntil(mouseup$))),\n            takeUntil(this._onDestroy)\n        ).subscribe(() => this.scrub.visible = false);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    updateScrub(event: MouseEvent): void {\n\n        const target = event.target as HTMLElement;\n\n        if (target.classList.contains('media-progress-bar-thumb')) {\n            return;\n        }\n\n        const timeline = this.timelineRef.nativeElement as HTMLDivElement;\n        const bounds = timeline.getBoundingClientRect();\n\n        this.scrub.position = event.offsetX;\n        this.scrub.time = (event.offsetX / bounds.width) * this.mediaPlayerService.duration;\n\n        if (this.mouseDown) {\n            this.mediaPlayerService.pause();\n            this.mediaPlayerService.currentTime = this.scrub.time;\n        }\n    }\n\n    /** Skip a number of seconds in any direction */\n    skip(seconds: number): void {\n        let target = this.current + seconds;\n\n        // ensure that the target position is within the bounds of the clip\n        if (target < 0) {\n            target = 0;\n        }\n\n        if (target > this.mediaPlayerService.duration) {\n            target = this.mediaPlayerService.duration;\n        }\n\n        this.mediaPlayerService.currentTime = target;\n    }\n}\n\nexport interface MediaPlayerBuffered {\n    start: number;\n    end: number;\n}\n","<p class=\"current-time\">{{ current | duration }}</p>\n\n<div #timeline\n  class=\"timeline-bar\"\n  tabindex=\"0\"\n  role=\"slider\"\n  [attr.aria-label]=\"mediaPlayerService.seekAriaLabel\"\n  aria-valuemin=\"0\"\n  [attr.aria-valuemax]=\"mediaPlayerService.duration | number: '0.0-0'\"\n  [attr.aria-valuenow]=\"mediaPlayerService.currentTime | number: '0.0-0'\"\n  attr.aria-valuetext=\"{{ mediaPlayerService.currentTime | duration }} of {{ mediaPlayerService.duration | duration }}\"\n  (keydown.ArrowLeft)=\"skip(-5)\"\n  (keydown.ArrowRight)=\"skip(5)\"\n  (mouseenter)=\"scrub.visible = true; tooltip.show()\"\n  (mouseleave)=\"scrub.visible = false; tooltip.hide()\"\n  (mousemove)=\"updateScrub($event); tooltip.reposition()\"\n  (mouseup)=\"updateScrub($event)\"\n  (mousedown)=\"mouseDown = true; $event.preventDefault()\">\n\n  @for (buffer of buffered; track buffer) {\n    <div class=\"buffered-bar\"\n      [style.left.%]=\"buffer.start\"\n      [style.width.%]=\"buffer.end - buffer.start\">\n    </div>\n  }\n\n  <div class=\"media-progress-bar\" [style.width.%]=\"position\">\n    <div #progressThumb\n      class=\"media-progress-bar-thumb\"\n      (mouseenter)=\"scrub.visible = false; tooltip.hide(); $event.stopPropagation()\"\n      (mouseleave)=\"scrub.visible = true; tooltip.show(); $event.stopPropagation()\">\n    </div>\n  </div>\n\n  <div #tooltip=\"ux-tooltip\"\n    class=\"scrub-handle\"\n    [class.scrub-handle-hidden]=\"!scrub.visible\"\n    [style.left.px]=\"scrub.position\"\n    [uxTooltip]=\"popTemplate\"\n    tooltipClass=\"ux-media-player-timeline-tooltip\"\n    placement=\"top\"\n    [showTriggers]=\"[]\"\n    [hideTriggers]=\"[]\"\n    [tooltipDelay]=\"100\"\n  [tooltipDisabled]=\"mediaPlayerService.duration === 0\"></div>\n</div>\n\n<p class=\"duration-time\">{{ mediaPlayerService.duration | duration }}</p>\n\n<ng-template #popTemplate>\n  <span>{{ scrub.time | duration }}</span>\n</ng-template>","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, Observer, of } from 'rxjs';\n\n@Injectable()\nexport class AudioService {\n    private readonly _http = inject(HttpClient);\n\n    private _audioBuffer: AudioBuffer;\n    private _audioBufferSource: AudioBufferSourceNode;\n    private _audioContext: AudioContext;\n    private _gainNode: GainNode;\n    private _analyserNode: AnalyserNode;\n\n    getAudioFileMetadata(mediaElement: HTMLMediaElement): Observable<AudioMetadata> {\n        return Observable.create((observer: Observer<AudioMetadata>) => {\n            this._http.get(mediaElement.src, { responseType: 'blob' }).subscribe(response => {\n\n                let description;\n                const extension = mediaElement.src.substring(mediaElement.src.lastIndexOf('.') + 1).toLowerCase();\n                const filename = mediaElement.src.indexOf('base64') !== -1 ? '' : mediaElement.src.substring(mediaElement.src.lastIndexOf('/') + 1);\n\n                switch (extension) {\n                    case 'mp3':\n                        description = 'MPEG audio layer 3 file';\n                        break;\n\n                    case 'wma':\n                        description = 'Windows media audio file';\n                        break;\n\n                    case 'wav':\n                        description = 'WAVE audio file';\n                        break;\n\n                    case 'ogg':\n                        description = 'Ogg Vorbis file';\n                        break;\n\n                    case 'aac':\n                        description = 'Advanced audio coding file';\n                        break;\n\n                    case 'midi':\n                        description = 'Musical instrument digital interface file';\n                        break;\n\n                    default:\n                        description = 'Audio file';\n                        break;\n                }\n\n                observer.next({\n                    filename,\n                    extension,\n                    description,\n                    size: response.size\n                });\n            });\n        });\n    }\n\n    getWaveformFromUrl(url: string): Observable<Float32Array[]> {\n\n        // if audio context is not support return a stream of empty data\n        if (!window.AudioContext) {\n            return of<Float32Array[]>([new Float32Array(0)]);\n        }\n\n        this._audioContext = new AudioContext();\n        this.createVolumeNode();\n        this.createAnalyserNode();\n\n        return Observable.create((observer: Observer<Float32Array[]>) => {\n\n            // load the media from the URL provided\n            this._http.get(url, { responseType: 'arraybuffer' }).subscribe(response => {\n                this.getAudioBuffer(response).subscribe(audioBuffer => {\n\n                    // create the buffer source\n                    this.createBufferSource(audioBuffer);\n\n                    let dataPoints: Float32Array[] = [];\n                    const channels = this._audioBuffer.numberOfChannels;\n\n                    // extract the data from each channel\n                    for (let channelIdx = 0; channelIdx < channels; channelIdx++) {\n                        dataPoints[channelIdx] = this._audioBuffer.getChannelData(channelIdx);\n                    }\n\n                    observer.next(dataPoints);\n                    observer.complete();\n\n                    // cleanup after ourselves\n                    dataPoints = null;\n                }, (error) => observer.error(error));\n            }, (error) => observer.error(error));\n        });\n    }\n\n    getWaveformPoints(channels: Float32Array[] = [], skip: number = 1000): WaveformPoint[] {\n\n        const waveform: WaveformPoint[] = [];\n        const duration = channels.length > 0 ? channels[0].length : 0;\n\n        // convert each channel data to a series of waveform points\n        for (let idx = 0; idx < duration; idx += skip) {\n\n            // get all the channel data for a specific point\n            const points = channels.map(channel => channel[idx]);\n\n            // find the minimum point and maximum points at each position across all channels\n            waveform.push({\n                min: points.reduce((previous, current) => current < previous ? current : previous),\n                max: points.reduce((previous, current) => current > previous ? current : previous)\n            });\n        }\n\n        return waveform;\n    }\n\n    private getAudioBuffer(arrayBuffer: ArrayBuffer): Observable<AudioBuffer> {\n        return Observable.create((observer: Observer<AudioBuffer>) => {\n            this.getOfflineAudioContext().decodeAudioData(arrayBuffer, (audioBuffer: AudioBuffer) => {\n                observer.next(audioBuffer);\n                observer.complete();\n            }, (error) => observer.error(error));\n        });\n    }\n\n    private getOfflineAudioContext(): OfflineAudioContext {\n        return new OfflineAudioContext(1, 2, this._audioContext.sampleRate || 44100);\n    }\n\n    private createBufferSource(audioBuffer: AudioBuffer): void {\n        this.disconnectSource();\n\n        this._audioBuffer = audioBuffer;\n        this._audioBufferSource = this._audioContext.createBufferSource();\n        this._audioBufferSource.buffer = this._audioBuffer;\n        this._audioBufferSource.connect(this._analyserNode);\n    }\n\n    private createVolumeNode(): void {\n        this._gainNode = this._audioContext.createGain();\n        this._gainNode.connect(this._audioContext.destination);\n    }\n\n    private createAnalyserNode(): void {\n        this._analyserNode = this._audioContext.createAnalyser();\n        this._analyserNode.connect(this._gainNode);\n    }\n\n    private disconnectSource(): void {\n        if (this._audioBufferSource) {\n            this._audioBufferSource.disconnect();\n        }\n    }\n}\n\nexport interface WaveformPoint {\n    min: number;\n    max: number;\n}\n\nexport interface AudioMetadata {\n    filename: string;\n    extension: string;\n    description: string;\n    size: number;\n}\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AudioService } from './audio.service';\n\n@NgModule({ imports: [], providers: [AudioService, provideHttpClient(withInterceptorsFromDi())] })\nexport class AudioServiceModule { }\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'fileSize'\n})\nexport class FileSizePipe implements PipeTransform {\n\n    transform(value: number): string | number {\n\n        // allow for async values\n        if (!value) {\n            return value;\n        }\n\n        const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n\n        // calculate the which unit bracket the values should be a part of\n        const idx = Math.floor(Math.log(value) / Math.log(1024));\n        const formattedValue = value / Math.pow(1024, idx);\n\n        return `${formattedValue.toFixed(2)} ${units[idx]}`;\n    }\n}","import { AfterViewInit, Component, ElementRef, inject, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { AudioMetadata, AudioService } from '../../services/audio/index';\nimport { MediaPlayerService } from './media-player.service';\n\n@Component({\n    selector: 'ux-media-player',\n    templateUrl: './media-player.component.html',\n    providers: [MediaPlayerService],\n    host: {\n        '(keydown.Space)': 'mediaPlayerService.togglePlay(); $event.preventDefault()',\n        '[class.standard]': '!mediaPlayerService.fullscreen',\n        '[class.fullscreen]': 'mediaPlayerService.fullscreen',\n        '[class.quiet]': 'quietMode && type === \"video\" || mediaPlayerService.fullscreen',\n        '[class.hover]': 'hovering || focused',\n        '[class.video]': 'type === \"video\"',\n        '[class.audio]': 'type === \"audio\"',\n        '(mouseenter)': 'hovering = true',\n        '(mouseleave)': 'hovering = false',\n        '(document:fullscreenchange)': 'mediaPlayerService.fullscreenChange()',\n        '(document:webkitfullscreenchange)': 'mediaPlayerService.fullscreenChange()',\n        '(document:mozfullscreenchange)': 'mediaPlayerService.fullscreenChange()',\n        '(document:MSFullscreenChange)': 'mediaPlayerService.fullscreenChange()'\n    }\n})\nexport class MediaPlayerComponent implements AfterViewInit, OnDestroy {\n    readonly mediaPlayerService = inject(MediaPlayerService);\n\n    private readonly _audioService = inject(AudioService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    @ViewChild('player', { static: false }) private readonly _playerRef: ElementRef;\n\n    hovering: boolean = false;\n    focused: boolean = false;\n    audioMetadata: Observable<AudioMetadata>;\n\n    /** The `anonymous` keyword means that there will be no exchange of user credentials when the media source is fetched. */\n    @Input() crossorigin: 'use-credentials' | 'anonymous' = 'use-credentials';\n\n    /** Overwrite the filename displayed in the audio media player */\n    @Input()\n    filename: string;\n\n    get source(): string {\n        return this.mediaPlayerService.source;\n    }\n\n    /** The url to the media file to be loaded by the media player. */\n    @Input()\n    set source(value: string) {\n        this.mediaPlayerService.source = value;\n    }\n\n    get type(): MediaPlayerType {\n        return this.mediaPlayerService.type;\n    }\n\n    /**\n     * Defines the appearance of the media player. The two possible values are `video` and `audio`.\n     * The media player will adapt it's appearance to best suit the type specified.\n     */\n    @Input()\n    set type(value: MediaPlayerType) {\n        this.mediaPlayerService.type = value;\n    }\n\n    get quietMode(): boolean {\n        return this.mediaPlayerService.quietMode;\n    }\n\n    /**\n     * If enabled, the controls in the media player will be hidden unless the mouse is over the player and will appear in a darker style.\n     * Dark mode is automatically enabled in full screen mode. Quiet mode is only available for videos.\n     */\n    @Input()\n    set quietMode(value: boolean) {\n        this.mediaPlayerService.quietMode = value;\n    }\n\n    /**\n     * If specified the function will be called passing the current volume as an argument.\n     * It should return an appropriate aria-label for the mute/unmute button.\n     */\n    @Input()\n    set muteAriaLabel(fn: (volume: number) => string) {\n        this.mediaPlayerService.muteAriaLabel = fn;\n    }\n\n    /**\n     * If specified the function will be called passing the current playing state as an argument.\n     * It should return an appropriate aria-label for the play/pause button.\n     */\n    @Input()\n    set playAriaLabel(fn: (isPlaying: boolean) => string) {\n        this.mediaPlayerService.playAriaLabel = fn;\n    }\n\n    /**\n     * If specified the function will be called passing the current fullscreen state as an argument.\n     * It should return an appropriate aria-label for the fullscreen toggle button.\n     */\n    @Input()\n    set fullscreenAriaLabel(fn: (isFullscreen: boolean) => string) {\n        this.mediaPlayerService.fullscreenAriaLabel = fn;\n    }\n\n    /**\n     * If specified the function will be called passing the current track as an argument.\n     * It should return an appropriate aria-label for the subtitle selection button.\n     */\n    @Input()\n    set selectSubtitlesAriaLabel(fn: (track: string) => string) {\n        this.mediaPlayerService.selectSubtitlesAriaLabel = fn;\n    }\n\n    /** Defines an aria-label for the go to start button. */\n    @Input()\n    set goToStartAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.goToStartAriaLabel = ariaLabel;\n    }\n\n    /** Defines an aria-label for the go to end button. */\n    @Input()\n    set goToEndAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.goToEndAriaLabel = ariaLabel;\n    }\n\n    /** Defines an aria-label for the title displayed in the subtitle selection popover. */\n    @Input()\n    set subtitlesTitleAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.subtitlesTitleAriaLabel = ariaLabel;\n    }\n\n    /** Defines an aria-label to indicate subtitle are not currently enabled. */\n    @Input()\n    set subtitlesOffAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.subtitlesOffAriaLabel = ariaLabel;\n    }\n\n    /** Define an aria-label to indicate there are no subtitles available. */\n    @Input()\n    set noSubtitlesAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.noSubtitlesAriaLabel = ariaLabel;\n    }\n\n    /** Define an aria-label for the media player. */\n    @Input()\n    set mediaPlayerAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.mediaPlayerAriaLabel = ariaLabel;\n    }\n\n    /** Define an aria-label for the the seek element. */\n    @Input()\n    set seekAriaLabel(ariaLabel: string) {\n        this.mediaPlayerService.seekAriaLabel = ariaLabel;\n    }\n\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // show controls when hovering and in quiet mode\n        fromEvent(this._elementRef.nativeElement, 'mousemove').pipe(\n            tap(() => this.hovering = true),\n            debounceTime(2000),\n            takeUntil(this._onDestroy)\n        ).subscribe(() => this.hovering = false);\n    }\n\n    ngAfterViewInit(): void {\n        this.mediaPlayerService.setMediaPlayer(this._elementRef.nativeElement, this._playerRef.nativeElement);\n\n        this.audioMetadata = this._audioService.getAudioFileMetadata(this._playerRef.nativeElement);\n        this.mediaPlayerService.playingEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => this.mediaPlayerService.playing.next(true));\n        this.mediaPlayerService.pauseEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => this.mediaPlayerService.playing.next(false));\n        this.mediaPlayerService.mediaClickEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => this.mediaPlayerService.togglePlay());\n        this.mediaPlayerService.loadedMetadataEvent.pipe(takeUntil(this._onDestroy)).subscribe(() => this.mediaPlayerService.loaded = true);\n\n        // initially hide all text tracks\n        this.mediaPlayerService.hideSubtitleTracks();\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n\nexport type MediaPlayerType = 'video' | 'audio';\n\nexport interface MediaPlayerBuffer {\n    start: number;\n    end: number;\n}\n","<div class=\"player-container\"\n  uxFocusIndicator\n  tabindex=\"0\"\n  [attr.aria-label]=\"mediaPlayerService.mediaPlayerAriaLabel\"\n  [cdkTrapFocus]=\"mediaPlayerService.fullscreen\">\n\n  @if (type === 'video') {\n    <div class=\"video-player-container\">\n      <video class=\"video-player\"\n        #player\n        tabindex=\"-1\"\n        [src]=\"source\"\n        [crossOrigin]=\"crossorigin\"\n        (abort)=\"mediaPlayerService.abortEvent.next()\"\n        (canplay)=\"mediaPlayerService.canPlayEvent.next(true)\"\n        (canplaythrough)=\"mediaPlayerService.canPlayThroughEvent.next(true)\"\n        (durationchange)=\"mediaPlayerService.durationChangeEvent.next(player.duration)\"\n        (ended)=\"mediaPlayerService.endedEvent.next()\"\n        (error)=\"mediaPlayerService.errorEvent.next($event)\"\n        (loadeddata)=\"mediaPlayerService.loadedDataEvent.next($event)\"\n        (loadedmetadata)=\"mediaPlayerService.loadedMetadataEvent.next($event)\"\n        (loadstart)=\"mediaPlayerService.loadStartEvent.next()\"\n        (pause)=\"mediaPlayerService.pauseEvent.next()\"\n        (play)=\"mediaPlayerService.playEvent.next()\"\n        (playing)=\"mediaPlayerService.playingEvent.next(!player.paused)\"\n        (ratechange)=\"mediaPlayerService.rateChangeEvent.next(player.playbackRate)\"\n        (seeked)=\"mediaPlayerService.seekedEvent.next(player.currentTime)\"\n        (seeking)=\"mediaPlayerService.seekingEvent.next(player.currentTime)\"\n        (stalled)=\"mediaPlayerService.stalledEvent.next()\"\n        (suspend)=\"mediaPlayerService.suspendEvent.next()\"\n        (timeupdate)=\"mediaPlayerService.timeUpdateEvent.next(player.currentTime)\"\n        (volumechange)=\"mediaPlayerService.volumeChangeEvent.next(player.volume)\"\n        (waiting)=\"mediaPlayerService.waitingEvent.next()\"\n        (click)=\"mediaPlayerService.mediaClickEvent.next($event)\">\n        <ng-content select=\"track\"></ng-content>\n      </video>\n      <div class=\"video-overlay\" [class.playing]=\"mediaPlayerService.playing | async\">\n        <svg class=\"play-graphic\" x=\"0px\" y=\"0px\" viewBox=\"0 0 64 64\">\n          <circle class=\"play-circle\" cx=\"32.2\" cy=\"31.8\" r=\"31.8\" />\n          <polygon class=\"play-triangle\" points=\"23,14.1 23,50.8 48.3,32.5\" />\n        </svg>\n      </div>\n    </div>\n  }\n\n  @if (type === 'audio') {\n    <div class=\"audio-player\">\n      <svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\">\n        <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n          <g transform=\"translate(-98.000000, -458.000000)\">\n            <g transform=\"translate(98.000000, 458.000000)\">\n              <path d=\"M4.5,0.5 L18.0435308,0.5 L23.5,6.22251502 L23.5,23.5 L4.5,23.5 L4.5,0.5 Z\" fill=\"#CCEAE2\"></path>\n              <path d=\"M4.5,8 L4.5,0.5 L18,0.5 L23.5,6 L23.5,23.5 L18,23.5\" stroke=\"#60798D\" fill=\"#CCEAE2\"></path>\n              <path d=\"M4,13.5 L0.5,13.5 L0.5,18.5 L4,18.5 L9.5,22.5 L9.5,9.5 L4,13.5 Z\" stroke=\"#60798D\" fill=\"#85D2BE\"></path>\n              <path d=\"M11.5,12.5137939 C13.7576225,12.5137939 14.5,14.3709236 14.5,16 C14.5,17.6849236 13.7089152,19.5420532 11.5,19.5420532\"\n              stroke=\"#60798D\"></path>\n              <path d=\"M11.5,9 C15.8037643,9.04168701 18.5,11.6604805 18.5,16 C18.5,20.3395195 15.8804302,23.0079956 11.5,23\" stroke=\"#60798D\"></path>\n              <path d=\"M17.5219116,0.761413574 L17.5219116,6 L23,6\" stroke=\"#60798D\" fill=\"#85D2BE\"></path>\n            </g>\n          </g>\n        </g>\n      </svg>\n      <p class=\"audio-file-name\">{{ this.filename ? this.filename :  (audioMetadata | async)?.filename }}</p>\n      <p class=\"audio-file-format\">{{ (audioMetadata | async)?.description }}</p>\n      <p class=\"audio-file-size\">{{ (audioMetadata | async)?.size | fileSize }}</p>\n      <audio #player\n        [src]=\"source\"\n        (abort)=\"mediaPlayerService.abortEvent.next()\"\n        (canplay)=\"mediaPlayerService.canPlayEvent.next(true)\"\n        (canplaythrough)=\"mediaPlayerService.canPlayThroughEvent.next(true)\"\n        (durationchange)=\"mediaPlayerService.durationChangeEvent.next(player.duration)\"\n        (ended)=\"mediaPlayerService.endedEvent.next()\"\n        (error)=\"mediaPlayerService.errorEvent.next($event)\"\n        (loadeddata)=\"mediaPlayerService.loadedDataEvent.next($event)\"\n        (loadedmetadata)=\"mediaPlayerService.loadedMetadataEvent.next($event)\"\n        (loadstart)=\"mediaPlayerService.loadStartEvent.next()\"\n        (pause)=\"mediaPlayerService.pauseEvent.next()\"\n        (play)=\"mediaPlayerService.playEvent.next()\"\n        (playing)=\"mediaPlayerService.playingEvent.next(!player.paused)\"\n        (ratechange)=\"mediaPlayerService.rateChangeEvent.next(player.playbackRate)\"\n        (seeked)=\"mediaPlayerService.seekedEvent.next(player.currentTime)\"\n        (seeking)=\"mediaPlayerService.seekingEvent.next(player.currentTime)\"\n        (stalled)=\"mediaPlayerService.stalledEvent.next()\"\n        (suspend)=\"mediaPlayerService.suspendEvent.next()\"\n        (timeupdate)=\"mediaPlayerService.timeUpdateEvent.next(player.currentTime)\"\n        (volumechange)=\"mediaPlayerService.volumeChangeEvent.next(player.volume)\"\n        (waiting)=\"mediaPlayerService.waitingEvent.next()\"\n        (click)=\"mediaPlayerService.mediaClickEvent.next($event)\">\n      </audio>\n    </div>\n  }\n\n  <div class=\"control-bar\"\n    (uxFocusWithin)=\"focused = true\"\n    (uxBlurWithin)=\"focused = false\">\n\n    <ux-media-player-timeline></ux-media-player-timeline>\n    <ux-media-player-controls>\n      <ng-content select=\"[uxMediaPlayerCustomControl]\"></ng-content>\n    </ux-media-player-controls>\n  </div>\n</div>","import { NgModule } from '@angular/core';\n\nimport { DurationPipe } from './duration.pipe';\n\n@NgModule({\n    exports: [DurationPipe],\n    declarations: [DurationPipe]\n})\nexport class DurationPipeModule { }\n","import { NgModule } from '@angular/core';\n\nimport { FileSizePipe } from './file-size.pipe';\n\n@NgModule({\n    exports: [FileSizePipe],\n    declarations: [FileSizePipe]\n})\nexport class FileSizePipeModule { }\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ClickOutsideModule } from '../../directives/click-outside/index';\nimport { DurationPipeModule } from '../../pipes/duration/index';\nimport { FileSizePipeModule } from '../../pipes/file-size/index';\nimport { AudioServiceModule } from '../../services/audio/index';\nimport { IconModule } from '../icon/index';\nimport { SliderModule } from '../slider/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { MediaPlayerBaseExtensionDirective } from './extensions/base-extension.directive';\nimport { MediaPlayerControlsExtensionComponent } from './extensions/controls/controls.component';\nimport { MediaPlayerCustomControlDirective } from './extensions/controls/custom-control/custom-control.directive';\nimport { MediaPlayerTimelineExtensionComponent } from './extensions/timeline/timeline.component';\nimport { MediaPlayerComponent } from './media-player.component';\n\nconst DECLARATIONS = [\n    MediaPlayerComponent,\n    MediaPlayerTimelineExtensionComponent,\n    MediaPlayerBaseExtensionDirective,\n    MediaPlayerControlsExtensionComponent,\n    MediaPlayerCustomControlDirective\n];\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        AudioServiceModule,\n        ClickOutsideModule,\n        CommonModule,\n        DurationPipeModule,\n        FileSizePipeModule,\n        IconModule,\n        SliderModule,\n        TooltipModule,\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS\n})\nexport class MediaPlayerModule { }\n","import { AfterContentInit, AfterViewInit, Component, ContentChildren, ElementRef, inject, Input, OnDestroy, QueryList, Renderer2 } from '@angular/core';\nimport { NavigationEnd, Router, UrlTree } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\n@Component({\n    selector: '[ux-navigation-item]',\n    templateUrl: './navigation-item.component.html',\n    host: {\n        '[class.active]': 'active',\n        '[class.selected]': 'expanded',\n    }\n})\nexport class NavigationItemComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _router = inject(Router);\n\n    private readonly _parent = inject(NavigationItemComponent, { optional: true, skipSelf: true });\n\n    /** The text to display in the navigation menu item. */\n    @Input() header: string;\n\n    /** The name of an icon from the UX Aspects icon set, to be displayed to the left of the title. */\n    @Input() icon: string;\n\n    /** Whether the navigation item is expanded, displaying the items from the `children` array. */\n    @Input() expanded: boolean = false;\n\n    /** The link that will be navigated to if this item is selected */\n    @Input() link: string;\n\n    /** Get the active state of this item from the router */\n    get active(): boolean {\n        return this.link ? this._router.isActive(this.link, true) : false;\n    }\n\n    /** Indicate the depth of the item */\n    _level: number;\n\n    /** Indicate whether the indentation should include the arrow */\n    _indentWithoutArrow: boolean = true;\n\n    @ContentChildren(NavigationItemComponent, { descendants: true })\n    private readonly _children: QueryList<NavigationItemComponent>;\n\n    get children(): NavigationItemComponent[] {\n        return this._children.filter(item => item !== this);\n    }\n\n    /** Automatically unsubscribe when the component is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        this._level = this._parent ? this._parent._level + 1 : 1;\n\n        // Expand this component if it or a descendant is active.\n        this._router.events.pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._onDestroy)).subscribe(() => {\n            this.expanded = this.hasActiveLink(this.link);\n        });\n    }\n\n    ngAfterViewInit(): void {\n        // Add classes to parent for styling\n        const parentListElement = this._elementRef.nativeElement.parentElement;\n        if (parentListElement) {\n            const levelClass: string = this.getLevelClass();\n            if (levelClass.length > 0) {\n                this._renderer.addClass(parentListElement, 'nav');\n                this._renderer.addClass(parentListElement, levelClass);\n            }\n        }\n    }\n\n    ngAfterContentInit(): void {\n        // Set 'indentWithoutArrow'\n        this.setIndentWithoutArrow();\n\n        // Update 'indentWithoutArrow' in response to changes to children\n        this._children.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => this.setIndentWithoutArrow());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Check if this item or any children are active */\n    private hasActiveLink(link: string | UrlTree): boolean {\n        // If this component has a link, check if it is active.\n        if (link && this._router.isActive(link, true)) {\n            return true;\n        }\n\n        // If this component has children, check if any of them, or their descendants, are active.\n        return this.children.some(item => item.hasActiveLink(item.link));\n    }\n\n    private getLevelClass(): string {\n        switch (this._level) {\n            case 2:\n                return 'nav-second-level';\n            case 3:\n                return 'nav-third-level';\n            case 4:\n                return 'nav-fourth-level';\n            case 5:\n                return 'nav-fifth-level';\n        }\n\n        return '';\n    }\n\n    private setIndentWithoutArrow(): void {\n        if (this.children.length > 0) {\n            // If this element has children it will be indented and will have an arrow\n            this._indentWithoutArrow = false;\n        } else if (this._parent) {\n            // If this element has a parent, indent it if any of its siblings have children\n            this._indentWithoutArrow = !this._parent.children.every((item) => item.children.length === 0);\n        } else {\n            // Top-level elements should be indented\n            this._indentWithoutArrow = true;\n        }\n    }\n}\n","@if (link) {\n  <a\n    [class.has-arrow]=\"children.length > 0\"\n    [class.no-arrow]=\"_indentWithoutArrow\"\n    [routerLink]=\"link\"\n    >\n    <span>{{ header }}</span>\n  </a>\n}\n\n@if (!link) {\n  <a\n    (click)=\"expanded = !expanded\"\n    [class.has-arrow]=\"children.length > 0\"\n    [class.no-arrow]=\"_indentWithoutArrow\"\n    >\n    <span>{{ header }}</span>\n  </a>\n}\n\n<ng-content></ng-content>\n","import { InjectionToken } from '@angular/core';\nimport { NavigationItemRouterOptions } from './navigation-item.interface';\n\nexport interface NavigationModuleOptions {\n    routerOptions: NavigationItemRouterOptions;\n}\n\nexport const NAVIGATION_MODULE_OPTIONS = new InjectionToken<NavigationModuleOptions>('NAVIGATION_MODULE_OPTIONS');\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NavigationItem } from './navigation-item.interface';\n\n@Injectable()\nexport class NavigationService implements OnDestroy {\n\n    /** The navigation items to populate the menu with */\n    items: NavigationItem[];\n\n    /** Whether to collapse other menu items when expanding a menu item. */\n    autoCollapse: boolean = true;\n\n    /** Emit when the expanded state has changed */\n    expanded$ = new Subject<void>();\n\n    ngOnDestroy(): void {\n        this.expanded$.complete();\n    }\n\n    /** Set the expanded state of an item */\n    setExpanded(source: NavigationItem, expanded: boolean): void {\n        if (expanded && this.autoCollapse) {\n            this.collapseSiblings(source);\n            this.expanded$.next();\n        }\n    }\n\n    /** Collapse all siblings nodes */\n    private collapseSiblings(source: NavigationItem): void {\n        let siblings = this.items;\n\n        for (const item of this.items) {\n            const parent = this.getParent(source, item);\n            if (parent) {\n                siblings = parent.children;\n                break;\n            }\n        }\n\n        // collapse every sibling\n        siblings.filter(item => item !== source).forEach(item => this.collapseAll(item));\n    }\n\n    /** Collapse an item and all its children */\n    private collapseAll(item: NavigationItem): void {\n        item.expanded = false;\n        if (item.children) {\n            item.children.forEach(child => this.collapseAll(child));\n        }\n    }\n\n    /** Get a nodes parent if it has one */\n    private getParent(target: NavigationItem, item: NavigationItem): NavigationItem | null {\n        return (item.children || []).find(child => child === target) ? item : null;\n    }\n}\n","import { LocationStrategy } from '@angular/common';\nimport { ChangeDetectorRef, Directive, HostBinding, HostListener, inject, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../../common/index';\nimport { NavigationItem, NavigationItemRouterOptions } from '../navigation-item.interface';\nimport { NAVIGATION_MODULE_OPTIONS } from '../navigation-options';\nimport { NavigationService } from '../navigation.service';\n\n@Directive({\n    selector: '[uxNavigationLink]',\n    exportAs: 'uxNavigationLink'\n})\nexport class NavigationLinkDirective implements OnInit, OnChanges, OnDestroy {\n    private readonly _router = inject(Router);\n\n    private readonly _locationStrategy = inject(LocationStrategy);\n\n    private readonly _navigationService = inject(NavigationService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _route = inject(ActivatedRoute);\n\n    private readonly _options = inject(NAVIGATION_MODULE_OPTIONS, { optional: true });\n\n    /** The NavigationItem this element represents */\n    @Input() navigationItem: NavigationItem;\n\n    /** The expaned state of this item */\n    @Input() set expanded(value: boolean) { this._expanded$.next(value); }\n\n    /** Determine if this item can be expanded */\n    @Input() canExpand: boolean;\n\n    /** Determine if this item should be indented */\n    @Input() @HostBinding('class.indent') indent: boolean;\n\n    /** Determine the href of this element */\n    @HostBinding('attr.href') href: string;\n\n    /** Determine the role of this element */\n    @HostBinding('attr.role') role: string;\n\n    /** Update the aria-expanded attribute of this element */\n    @HostBinding('attr.aria-expanded') ariaExpanded: boolean;\n\n    /** Store the active state of the item */\n    isActive: boolean;\n\n    /** Store the indendation state of the children */\n    indentChildren: boolean;\n\n    /** Emit with the current expaned state */\n    private readonly _expanded$ = new Subject<boolean>();\n\n    /** Unsubscribe from all observables when this directive is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n\n    ngOnInit(): void {\n\n        // any time expanded state anywhere change we should run change detection in case we should collapse\n        this._navigationService.expanded$.pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this._changeDetector.markForCheck());\n\n        this._expanded$.pipe(tick(), takeUntil(this._onDestroy)).subscribe(expanded => {\n            if (this.navigationItem.children && this.navigationItem.children.length > 0) {\n                this.ariaExpanded = expanded;\n                this._navigationService.setExpanded(this.navigationItem, expanded);\n            }\n        });\n\n        this._router.events\n            .pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._onDestroy))\n            .subscribe(this.updateNavigationState.bind(this));\n\n        this.updateNavigationState();\n\n        this.updateAttributes();\n    }\n\n    ngOnChanges(): void {\n        this.updateAttributes();\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    @HostListener('click', ['$event'])\n    @HostListener('keydown.enter', ['$event'])\n    activated(event: Event): boolean {\n\n        if (this.navigationItem.disabled) {\n            return false;\n        }\n\n        if (this.navigationItem.routerLink) {\n            const commands = Array.isArray(this.navigationItem.routerLink) ? this.navigationItem.routerLink : [this.navigationItem.routerLink];\n            this._router.navigate(commands, this.navigationItem.routerExtras);\n        }\n\n        // Toggle expanded state (relevant only if it has children)\n        this.navigationItem.expanded = !this.navigationItem.expanded;\n\n        // Invoke the custom click handler if specified\n        if (this.navigationItem.click) {\n            this.navigationItem.click(event, this.navigationItem);\n        }\n\n        return false;\n    }\n\n    private updateNavigationState(): void {\n        this.isActive = this.isActiveItem(this.navigationItem);\n\n        if (this.navigationItem.children) {\n            const activeChild = this.navigationItem.children.find(child => this.isActiveItem(child));\n            if (activeChild) {\n                this.navigationItem.expanded = true;\n            }\n        }\n\n        this._changeDetector.markForCheck();\n    }\n\n    private updateAttributes(): void {\n\n        this.href = this.getHref();\n        this.role = (this.navigationItem.children && this.navigationItem.children.length > 0) ? 'button' : 'treeitem';\n\n        this.indentChildren = this.navigationItem.children && this.navigationItem.children.some(item => item.children && item.children.length > 0);\n    }\n\n    private getHref(): string {\n\n        if (this.navigationItem.disabled) {\n            return null;\n        }\n\n        if (this.navigationItem.routerLink) {\n            const commands = Array.isArray(this.navigationItem.routerLink) ? this.navigationItem.routerLink : [this.navigationItem.routerLink];\n            const urlTree = this._router.createUrlTree(commands, this.navigationItem.routerExtras);\n            return this._locationStrategy.prepareExternalUrl(this._router.serializeUrl(urlTree));\n        }\n\n        return null;\n    }\n\n    private isActiveItem(item: NavigationItem): boolean {\n\n        const { exact, ignoreQueryParams } = this.getRouterOptions(item);\n\n        if (item.routerLink) {\n\n            let routerExtras = item.routerExtras;\n\n            // if we are to ignore the query params we must remove them\n            if (ignoreQueryParams) {\n                // get the current actual query params\n                const { queryParams } = this._route.snapshot;\n\n                // override the provided query params with the actual query params so they will alway match\n                routerExtras = { ...routerExtras, queryParams };\n            }\n\n            const commands = Array.isArray(item.routerLink) ? item.routerLink : [item.routerLink];\n            const urlTree = this._router.createUrlTree(commands, routerExtras);\n\n            return this._router.isActive(urlTree, exact);\n        }\n\n        return false;\n    }\n\n    /** Get the router options with defaults for missing properties */\n    private getRouterOptions(item: NavigationItem): NavigationItemRouterOptions {\n\n        // get the default options based on the ones provided in `forRoot`\n        const defaultOptions = { exact: true, ignoreQueryParams: false, ...(this._options ? this._options.routerOptions : {}) };\n\n        // if there are item specific router options they should take precendence\n        return { ...defaultOptions, ...item.routerOptions };\n    }\n}","import { ChangeDetectionStrategy, Component, ContentChild, inject, Input, TemplateRef } from '@angular/core';\nimport { getIconType } from '../../common/index';\nimport { NavigationItem } from './navigation-item.interface';\nimport { NavigationService } from './navigation.service';\n\n@Component({\n    selector: 'ux-navigation',\n    templateUrl: './navigation.component.html',\n    providers: [NavigationService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false\n})\nexport class NavigationComponent {\n    private readonly _navigationService = inject(NavigationService);\n\n    /** The navigation items to populate the menu with. */\n    @Input()\n    set items(items: NavigationItem[]) {\n        this._navigationService.items = items;\n    }\n    get items(): NavigationItem[] {\n        return this._navigationService.items;\n    }\n\n    /** Whether to present the menu as a hierarchical tree. */\n    @Input() tree: boolean = true;\n\n    /** Whether to collapse other menu items when expanding a menu item. */\n    @Input()\n    set autoCollapse(autoCollapse: boolean) {\n        this._navigationService.autoCollapse = autoCollapse;\n    }\n\n    /** Access a custom navigation item template if provided */\n    @ContentChild('uxNavigationItem', { static: false }) navigationItemTemplate: TemplateRef<void>;\n\n    /** The classes to be added to each different level */\n    _hierarchyClasses = [\n        '',\n        'nav-second-level',\n        'nav-third-level',\n        'nav-fourth-level',\n        'nav-fifth-level',\n    ];\n\n    get _depthLimit(): number {\n        return this.tree ? this._hierarchyClasses.length : 2;\n    }\n\n    /**\n     * Returns true if the sets of items needs to be indented to make room for one or more expander.\n     */\n    _needsIndent(items: NavigationItem[]): boolean {\n        return items && items.some(item => item.children && item.children.length > 0);\n    }\n\n    /** Determine the type of icon to display. We support `ux-icon` or `component` */\n    _getIconType(item: NavigationItem): string {\n        return getIconType(item.icon);\n    }\n}\n","<nav class=\"ux-side-nav\" [class.tree]=\"tree\" role=\"navigation\">\n\n  @if (items) {\n    <ol role=\"tree\" class=\"nav\" uxTabbableList [hierarchy]=\"true\">\n      @for (item of items; track item; let rank = $index) {\n        <ng-container\n          [ngTemplateOutlet]=\"navigationNode\"\n          [ngTemplateOutletContext]=\"{ item: item, level: 1, rank: rank, indent: _needsIndent(items) }\">\n        </ng-container>\n      }\n      <ng-template #navigationNode let-item=\"item\" let-parent=\"parent\" let-level=\"level\" let-rank=\"rank\" let-indent=\"indent\">\n        <li [attr.role]=\"(item.children && item.children.length > 0) ? 'treeitem' : 'none'\"\n          [attr.aria-expanded]=\"(item.children && item.children.length > 0) ? item.expanded : null\"\n          [class.selected]=\"item.expanded\"\n          [class.disabled]=\"item.disabled\"\n          [class.active]=\"navigationLink.isActive\">\n          <a uxNavigationLink\n            #navigationLink=\"uxNavigationLink\"\n            #tli=\"ux-tabbable-list-item\"\n            [navigationItem]=\"item\"\n            [expanded]=\"item.expanded\"\n            [canExpand]=\"level < _depthLimit\"\n            [indent]=\"indent\"\n            uxTabbableListItem\n            [disabled]=\"item.disabled\"\n            [parent]=\"parent\"\n            [rank]=\"rank\"\n            [(expanded)]=\"item.expanded\">\n            @if (!navigationItemTemplate && item.children && item.children.length > 0 && level < _depthLimit) {\n              <span\n                aria-hidden=\"true\"\n                class=\"nav-expander\"\n                (click)=\"item.expanded = !item.expanded; $event.stopPropagation(); $event.preventDefault()\">\n              </span>\n            }\n            <!-- Support UX Icons and Icon Component -->\n            @if (!navigationItemTemplate && item.icon && !tree) {\n              @if (_getIconType(item) !== 'component') {\n                <span\n                  class=\"nav-icon\"\n                  [ngClass]=\"[_getIconType(item), item.icon]\">\n                </span>\n              }\n              @if (_getIconType(item) === 'component') {\n                <ux-icon\n                  class=\"nav-icon\"\n                  [name]=\"item.icon\">\n                </ux-icon>\n              }\n            }\n            @if (!navigationItemTemplate && item.iconUrl && !tree) {\n              <img class=\"nav-icon\" [src]=\"item.iconUrl\" alt=\"item.iconLabel\">\n            }\n            @if (!navigationItemTemplate) {\n              <span class=\"nav-title\">{{ item.title }}</span>\n            }\n            <ng-container\n              [ngTemplateOutlet]=\"navigationItemTemplate\"\n              [ngTemplateOutletContext]=\"{ item: item, level: level }\">\n            </ng-container>\n          </a>\n          @if (item.children && item.expanded && level < _depthLimit) {\n            <ol\n              role=\"group\"\n              class=\"nav\"\n              [ngClass]=\"_hierarchyClasses[level]\">\n              @for (child of item.children; track child; let rank = $index) {\n                <ng-container\n                  [ngTemplateOutlet]=\"navigationNode\"\n                  [ngTemplateOutletContext]=\"{ item: child, parent: tli, level: level + 1, rank: rank, indent: navigationLink.indentChildren }\">\n                </ng-container>\n              }\n            </ol>\n          }\n        </li>\n      </ng-template>\n    </ol>\n  }\n\n  <!-- Backward compatibility with the original ux-navigation -->\n  @if (!items) {\n    <ol role=\"tree\" class=\"nav\">\n      <ng-content></ng-content>\n    </ol>\n  }\n\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { IconModule } from '../icon/index';\nimport { NavigationItemComponent } from './navigation-item/navigation-item.component';\nimport { NavigationLinkDirective } from './navigation-link/navigation-link.directive';\nimport { NAVIGATION_MODULE_OPTIONS, NavigationModuleOptions } from './navigation-options';\nimport { NavigationComponent } from './navigation.component';\n\n@NgModule({\n    imports: [AccessibilityModule, CommonModule, IconModule, RouterModule],\n    exports: [NavigationComponent, NavigationItemComponent],\n    declarations: [NavigationComponent, NavigationItemComponent, NavigationLinkDirective],\n})\nexport class NavigationModule {\n    // allow options to be specified globally\n    static forRoot(options: NavigationModuleOptions): ModuleWithProviders<NavigationModule> {\n        return {\n            ngModule: NavigationModule,\n            providers: [{ provide: NAVIGATION_MODULE_OPTIONS, useValue: options }],\n        };\n    }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { arc, Arc, BaseType, easeCubic, interpolate, pointer, select, Selection, transition } from 'd3';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Color } from '../../common/colors/index';\nimport { AnchorPlacement } from '../../common/overlay/index';\nimport { ResizeService } from '../../directives/resize/index';\nimport { ColorService, ThemeColor } from '../../services/color/index';\n\n@Component({\n    selector: 'ux-nested-donut-chart',\n    templateUrl: './nested-donut-chart.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NestedDonutChartComponent implements OnInit, OnChanges, OnDestroy {\n    private readonly _colorService = inject(ColorService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _resizeService = inject(ResizeService);\n\n    /** Define a the dataset to display */\n    @Input() dataset: ReadonlyArray<NestedDonutChartData>;\n\n    /** Define the maximum range of the arcs */\n    @Input() max: number = 100;\n\n    /** Define the thickness of each arc */\n    @Input() thickness: number = 8;\n\n    /** Define the spacing of each arc */\n    @Input() spacing: number = 8;\n\n    /** Define the track color */\n    @Input() trackColor: string | ThemeColor;\n\n    /** Determine if we should show the hover effect */\n    @Input() disableHover: boolean = false;\n\n    /** Determine if we should show a tooltip on arc hover */\n    @Input() disableTooltip: boolean = false;\n\n    /** Determine the position of the tooltip */\n    @Input() tooltipPlacement: AnchorPlacement = 'top';\n\n    /** Set the duration of the animation */\n    @Input() animationDuration: number = 750;\n\n    /** Emit whenever an arc is clicked */\n    @Output() itemClick = new EventEmitter<NestedDonutChartData>();\n\n    /** Access the SVG element */\n    @ViewChild('chart', { static: true }) _chartElement: ElementRef;\n\n    /** Allow custom tooltip template */\n    @ContentChild('tooltip', { static: false }) _customTooltip: TemplateRef<NestedDonutChartData>;\n\n    /** Indicate if the tooltip should be visible */\n    _tooltipVisible: boolean = false;\n\n    /** Store the tooltip x position */\n    _tooltipX: number;\n\n    /** Store the tooltip y position */\n    _tooltipY: number;\n\n    /** Store the context to provide to the tooltip */\n    _tooltipContext: NestedDonutChartData;\n\n    /** Determine the radius of the chart based on the specified size */\n    get _radius(): number {\n        return this._size / 2;\n    }\n\n    /**\n     * Get the size of the chart. The chart will always be square to\n     * the size will be the smaller of the width/height properties\n     */\n    get _size(): number {\n        return Math.min(this._elementRef.nativeElement.offsetWidth, this._elementRef.nativeElement.offsetHeight);\n    }\n\n    /** Store the selection when the arcs will be drawn */\n    private _arcLayer: Selection<BaseType, NestedDonutChartData, HTMLElement, NestedDonutChartData>;\n\n    /** Store the selection when the tracks will be drawn */\n    private _trackLayer: Selection<BaseType, NestedDonutChartData, HTMLElement, NestedDonutChartData>;\n\n    /** Store the arc selection */\n    private _arcs: Selection<BaseType, NestedDonutChartArc, BaseType, NestedDonutChartData>;\n\n    /** Store the tracks selection */\n    private _tracks: Selection<BaseType, NestedDonutChartArc, BaseType, NestedDonutChartData>;\n\n    /** Store the previously processed data */\n    private _arcData: NestedDonutChartArc[] = [];\n\n    /** Determine if the intial render has taken place */\n    private _isInitialized: boolean = false;\n\n    /** Unsubscribe from all observables automatically */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Perform the initial render */\n    ngOnInit(): void {\n        // create the selection where we will draw the tracks\n        this._trackLayer = select<SVGElement, NestedDonutChartData>(this._chartElement.nativeElement)\n            .append('g');\n\n        // create the selection where we will draw the arcs\n        this._arcLayer = select<SVGElement, NestedDonutChartData>(this._chartElement.nativeElement)\n            .append('g');\n\n        // create the arcs representing the data\n        this.render();\n\n        // mark the component as initialized\n        this._isInitialized = true;\n\n        // listen for any resizing - skip the first emission as it always emits on first subscribe\n        this._resizeService.addResizeListener(this._elementRef.nativeElement)\n            .pipe(takeUntil(this._onDestroy)).subscribe(() => {\n                this.render();\n                this._changeDetector.markForCheck();\n            });\n    }\n\n    /** Any time an input changes we must re-render the chart */\n    ngOnChanges(): void {\n        if (this._isInitialized) {\n            this.render();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._resizeService.removeResizeListener(this._elementRef.nativeElement);\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Inset the content so it never overlaps the arcs */\n    _getContentInset(): number {\n        return this.dataset.length * (this.spacing + this.thickness);\n    }\n\n\n    /** Get the dimensions of the content area */\n    _getContentSize(): number {\n        return this._size - (this._getContentInset() * 2);\n    }\n\n    /** Get the dataset formated in an accessible manner */\n    _getAriaLabel(): string {\n        return this.dataset.map(data => `${data.value} ${data.name}`).join('. ');\n    }\n\n    /**\n     * Display the tracks and arcs defined by the dataset.\n     * We also provide the transition configuration so anytime the dataset\n     * changes we will animate the update.\n     */\n    private render(): void {\n\n        // update the transform of the layers\n        this._trackLayer.attr('transform', `translate(${this._radius}, ${this._radius})`);\n        this._arcLayer.attr('transform', `translate(${this._radius}, ${this._radius})`);\n\n        // create the arcs based on the dataset\n        this._arcs = this._arcLayer.selectAll('path')\n            .data(this.getChartData());\n\n        // create the default transition based on the specified duration\n        const arcTransition = transition('nestedDonutArcTransition').ease(easeCubic).duration(this.animationDuration);\n\n        // create the tracks based on the dataset\n        this._tracks = this._trackLayer.selectAll('path')\n            .data(this.getChartData())\n            .enter()\n            .append('path')\n            .attr('class', 'ux-nested-donut-chart-track');\n\n        // set the track color on each render in case the input has changed\n        this._trackLayer.selectAll('path')\n            .attr('d', this.getTrackArc())\n            .style('fill', () => this.getTrackColor());\n\n        // if an arc is removed then also remove the track\n        this._tracks.exit().remove();\n\n        // When a new arc is added we should create the element\n        // size it and provide the background color and begin the\n        // animation until it reaches its final angle\n        this._arcs.enter()\n            .append('path')\n            .attr('class', 'ux-nested-donut-chart-arc')\n            .style('fill', data => this.getColor(data.color))\n            .attr('opacity', 1)\n            .on('click', data => this.itemClick.emit(data))\n            .on('mouseenter', (event, node) => this.onArcMouseEnter(event.srcElement, node))\n            .on('mousemove', (event) => this.onArcMouseMove(pointer(event, this._chartElement.nativeElement)))\n            .on('mouseleave', (event) => this.onArcMouseLeave(event.srcElement))\n            .transition(arcTransition)\n            .attrTween('d', this.getArcTween.bind(this));\n\n        // any time an existing dataset value changes\n        // we should update the angle with an animation\n        // we also animate any color changes also.\n        this._arcs.transition(arcTransition)\n            .style('fill', data => this.getColor(data.color))\n            .attrTween('d', this.getArcTween.bind(this));\n\n        // when a dataset it removed animate the arc out\n        // and then remove the associated DOM element\n        this._arcs.exit().transition(arcTransition)\n            .attrTween('d', this.getArcTween.bind(this))\n            .remove();\n    }\n\n    /** Get the interpolation function based on the new and previous angle */\n    private getArcTween(data: NestedDonutChartArc) {\n\n        // create a new interpolation function with a new endAngle\n        const interpolation = interpolate({ ...data, endAngle: data.previousEndAngle }, data);\n\n        // return the function that will produce the interpolation\n        return (delta: number) => this.getArc()(interpolation(delta));\n    }\n\n    /** Get the arc layout for a specific item in the dataset */\n     \n    private getArc(): Arc<any, NestedDonutChartArc> {\n        return arc<NestedDonutChartArc>()\n            .innerRadius(data => this.getArcRadius(data.index))\n            .outerRadius(data => this.getArcRadius(data.index) + this.thickness)\n            .startAngle(data => data.startAngle)\n            .endAngle(data => data.endAngle);\n    }\n\n    /**\n     * Get the track arc layout for a specific item in the dataset.\n     * This will match the arc of that represents the actual data\n     * however the endAngle will always be a complete circle\n     */\n     \n    private getTrackArc(): Arc<any, NestedDonutChartArc> {\n        return this.getArc().endAngle(() => Math.PI * 2);\n    }\n\n    /**\n     * Get the radius of an arc. This is calculated\n     * based on the chart radius that has been defined,\n     * minus the thickness defined, then taking into account\n     * the depth of the arc and the spacing between each arc.\n     */\n    private getArcRadius(index: number): number {\n        return (this._radius - this.thickness) - (index * (this.thickness + this.spacing));\n    }\n\n    /**\n     * Map the dataset to the NestedDonutChartArc interface\n     */\n    private getChartData(): NestedDonutChartArc[] {\n        const dataset = this.dataset.map((data, index) => {\n\n            let previousEndAngle: number = 0;\n\n            // check if there was a previous dataset at this index\n            if (this._arcData && this._arcData[index]) {\n                previousEndAngle = this._arcData[index].endAngle;\n            }\n\n            return { ...data, index, startAngle: 0, endAngle: this.getAngle(data), previousEndAngle };\n        });\n\n        // store the latest processed arc data\n        this._arcData = dataset;\n\n        return dataset;\n    }\n\n    /** Convert the data value to radians */\n    private getAngle(data: NestedDonutChartData): number {\n        const fraction = data.value / this.max;\n        const degrees = fraction * 360.0;\n        return degrees * (Math.PI / 180);\n    }\n\n    /**\n     * Get the color of the arc, this may be a CSS color value, the name of a color\n     * from the color set or a ThemeColor object. We return this as a rgba color to\n     * support the alpha channel\n     */\n    private getColor(color: string | ThemeColor): string {\n        return ThemeColor.isInstanceOf(color) ? (color as ThemeColor).toRgba() : this._colorService.resolve(color as string);\n    }\n\n    /** If no track color is specified then default to a specific color based on the active colorset */\n    private getTrackColor(): string {\n        if (this.trackColor) {\n            return this.getColor(this.trackColor);\n        }\n\n        // otherwise default to a color based on the colorset (note we can't use the Color enum from MF package)\n        if (this._colorService.colorExists(Color.Grey6)) {\n            return this.getColor(Color.Grey6);\n        }\n\n        if (this._colorService.colorExists('bright-gray')) {\n            return this.getColor('bright-gray');\n        }\n    }\n\n    /** Define the on hover event */\n    private onArcMouseEnter(target: BaseType, data: NestedDonutChartData): void {\n\n        // update the hover effect if it is enabled\n        if (this.disableHover === false) {\n            select(target).transition().duration(250).attr('opacity', 0.5);\n        }\n\n        // update the tooltip context\n        this._tooltipContext = { ...data, color: this.getColor(data.color) };\n\n        // update the tooltip visibility\n        this._tooltipVisible = true;\n\n        // run change detection to ensure the visibility is updated\n        this._changeDetector.detectChanges();\n    }\n\n    /** Update the tooltip position on mouse move */\n    private onArcMouseMove([x, y]: [number, number]): void {\n        this._tooltipX = x;\n        this._tooltipY = y - 2; // subtract 2 so that it appears slightly above the cursor\n\n        // run change detection to update the element position\n        this._changeDetector.detectChanges();\n    }\n\n    /** Define the on hover out event */\n    private onArcMouseLeave(target: BaseType): void {\n\n        // update the hover effect if it is enabled\n        if (this.disableHover === false) {\n            select(target).transition().duration(250).attr('opacity', 1);\n        }\n\n        // clear the tooltip context\n        this._tooltipContext = null;\n\n        // update the tooltip visibility\n        this._tooltipVisible = false;\n\n        // run change detection to ensure the visibility is updated\n        this._changeDetector.detectChanges();\n    }\n}\n\nexport interface NestedDonutChartData {\n    name: string;\n    value: number;\n    color: ThemeColor | string;\n    data?: { [key: string]: unknown };\n}\n\nexport interface NestedDonutChartArc extends NestedDonutChartData {\n    index: number;\n    startAngle: number;\n    endAngle: number;\n    previousEndAngle: number;\n}\n","<svg #chart\n  class=\"ux-nested-donut-chart\"\n  [attr.focusable]=\"false\"\n  [attr.width]=\"_size\"\n  [attr.height]=\"_size\"\n  [attr.aria-label]=\"_getAriaLabel()\">\n</svg>\n\n<!-- Custom content in center of the chart -->\n<div class=\"ux-nested-donut-chart-content\"\n  [style.top.px]=\"_getContentInset()\"\n  [style.right.px]=\"_getContentInset()\"\n  [style.bottom.px]=\"_getContentInset()\"\n  [style.left.px]=\"_getContentInset()\"\n  [style.width.px]=\"_getContentSize()\"\n  [style.height.px]=\"_getContentSize()\">\n  <ng-content></ng-content>\n</div>\n\n<!-- Tooltip to appear on arc hover -->\n@if (_tooltipVisible && !disableTooltip) {\n  <div class=\"ux-nested-donut-chart-tooltip\">\n    <ux-tooltip\n      [placement]=\"tooltipPlacement\"\n      [content]=\"_customTooltip || tooltip\"\n      [context]=\"_tooltipContext\"\n      [style.top.px]=\"_tooltipY\"\n      [style.left.px]=\"_tooltipX\">\n    </ux-tooltip>\n  </div>\n}\n\n<!-- Default tooltip template -->\n<ng-template #tooltip let-name=\"name\" let-value=\"value\">\n  <span class=\"ux-nested-donut-chart-tooltip-content\">\n    {{ name }}: {{ value }}\n  </span>\n</ng-template>\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { NestedDonutChartComponent } from './nested-donut-chart.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ColorServiceModule,\n        TooltipModule,\n        ResizeModule\n    ],\n    declarations: [\n        NestedDonutChartComponent\n    ],\n    exports: [\n        NestedDonutChartComponent\n    ]\n})\nexport class NestedDonutChartModule { }\n","import { inject, Injectable, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ColorService } from '../../services/color/index';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NotificationService {\n    private readonly _colorService = inject(ColorService);\n\n    /**\n     *  Sets the order in which notifications are displayed:\n        `above` - newer notifications will appear above older ones.\n        `below` - newer notifications will appear below older ones.\n     */\n    direction: NotificationListDirection = 'above';\n\n    /**\n     * The list of notifications including notifications that have been dismissed\n     */\n    notifications$: BehaviorSubject<NotificationRef[]> = new BehaviorSubject<NotificationRef[]>([]);\n\n    /**\n     * Access the list of notifications as an array\n     */\n    get notifications(): NotificationRef[] {\n        return this.notifications$.value;\n    }\n\n    /**\n     * Define the default set of notification options\n     */\n    options: NotificationOptions = {\n        duration: 4,\n        backgroundColor: this._colorService.getColor('accent').toHex(),\n        iconColor: this._colorService.getColor('accent').toHex()\n    };\n\n    /**\n     * This function should be called to show a notification.\n     * It should be given a TemplateRef containing the content to be displayed.\n     * @param templateRef - A TemplateRef containing the content to be displayed\n     * @param options - The properties to configure the notification.\n     * @param context - The context passed to the notification TemplateRef. This can be accessed by adding a let-data=\"data\" to the ng-template element.\n     */\n    show(templateRef: TemplateRef<void>, options: NotificationOptions = this.options, context: { [key: string]: unknown } = {}): NotificationRef {\n\n        // populate the specified options with the default values for any missing properties\n        options = { ...this.options, ...options };\n\n        // create the notificationRef based on the options and context specified\n        const notificationRef: NotificationRef = {\n            templateRef,\n            duration: options.duration,\n            date: new Date(),\n            visible: true,\n            height: options.height,\n            spacing: options.spacing,\n            backgroundColor: options.backgroundColor,\n            iconColor: options.iconColor,\n            data: context\n        };\n\n        // add the new notification to the list (either above or below based on direction)\n        this.direction === 'above' ? this.notifications.unshift(notificationRef) : this.notifications.push(notificationRef);\n\n        // update the notifications list\n        this.notifications$.next(this.notifications);\n\n        // remove notification after delay\n        if (options.duration !== 0) {\n            setTimeout(() => this.dismiss(notificationRef), options.duration * 1000);\n        }\n\n        return notificationRef;\n    }\n\n    /**\n     * This function will return a list of all the notifications that have been shown.\n     */\n    getHistory(): NotificationRef[] {\n        return this.notifications;\n    }\n\n    /**\n     * This function can be called to dismiss a notification. It should be passed the object to dismiss.\n     * @param notificationRef - The notification that should be dismissed\n     */\n    dismiss(notificationRef: NotificationRef): void {\n        notificationRef.visible = false;\n        this.notifications$.next(this.notifications);\n    }\n\n    /**\n     * This function will dismiss any currently visible notifications.\n     */\n    dismissAll(): void {\n        this.notifications.forEach(notificationRef => notificationRef.visible = false);\n        this.notifications$.next(this.notifications);\n    }\n\n    /** Remove the notification from the screen and from the notification history */\n    remove(notificationRef: NotificationRef): void {\n        this.notifications$.next(this.notifications.filter(_notificationRef => _notificationRef !== notificationRef));\n    }\n\n    /** Remove all notifications from the screen and from the notification history */\n    removeAll(): void {\n        this.notifications$.next([]);\n    }\n}\n\nexport interface NotificationRef extends NotificationOptions {\n    /** The content to display in the notification */\n    templateRef: TemplateRef<void>;\n    /** The datestamp to display in the notification */\n    date: Date;\n    /** Indicated whether or not the notification has been dismissed or not */\n    visible?: boolean;\n    /** Additional data passed as template context to the notification */\n    data: { [key: string]: unknown };\n}\n\nexport interface NotificationOptions {\n    /** The duration the notification should display for before it is automatically dismissed */\n    duration: number;\n    /** The height of the notification */\n    height?: number;\n    /** The spacing between each notification */\n    spacing?: number;\n    /** The background color of the notification */\n    backgroundColor?: string;\n    /** The color of the notification icon */\n    iconColor?: string;\n}\n\nexport type NotificationListDirection = 'above' | 'below';\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, inject, Input, OnChanges, OnDestroy, QueryList, Renderer2, ViewChildren } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { map, takeUntil, withLatestFrom } from 'rxjs/operators';\nimport { tick } from '../../common/index';\nimport { NotificationListDirection, NotificationRef, NotificationService } from './notification.service';\n\n@Component({\n    selector: 'ux-notification-list',\n    templateUrl: './notification-list.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [\n        trigger('notificationState', [\n            state('in', style({ transform: 'translateY(0)', opacity: 0.9 })),\n            transition(':enter', [\n                style({ transform: 'translateY(-50px)', opacity: 0 }),\n                animate(500)\n            ]),\n            transition(':leave', [\n                animate(500, style({ transform: 'translateY(50px)', opacity: 0 }))\n            ])\n        ])\n    ]\n})\nexport class NotificationListComponent implements AfterViewInit, OnChanges, OnDestroy {\n    private readonly _notificationService = inject(NotificationService);\n\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    /**\n     *  Sets the order in which notifications are displayed:\n        `above` - newer notifications will appear above older ones.\n        `below` - newer notifications will appear below older ones.\n     */\n    @Input()\n    set direction(direction: NotificationListDirection) {\n        this._notificationService.direction = direction;\n    }\n\n    /** Sets the position of the list of notifications within the browser window. */\n    @Input()\n    @HostBinding('class')\n    position: NotificationListPostion = 'bottom-right';\n\n    /** The list of notifications that have not been dismissed */\n    notifications$: Observable<NotificationRef[]> = this._notificationService.notifications$.pipe(map(() => this._notifications));\n\n    /** Store the bottom position of the notification list */\n    @HostBinding('style.bottom.px')\n    _bottom: number;\n\n    /** Store a list of all element refs */\n    @ViewChildren('notification') _elements: QueryList<ElementRef>;\n\n    /** Filter out any hidden notifications */\n    private get _notifications(): NotificationRef[] {\n        return this._notificationService.notifications.filter(notification => notification.visible);\n    }\n\n    /** Unsubscribe from all subscriptions on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngAfterViewInit(): void {\n\n        // whenever the notifications change we want to recalculate the positions and height\n        this._elements.changes.pipe(\n            takeUntil(this._onDestroy),\n            tick(),\n            map(changes => changes.toArray() as ElementRef[]),\n            withLatestFrom(this.notifications$)\n        ).subscribe(([elements, notifications]) => {\n\n            // Set the `top` style property of each element\n            this.applyElementPositions(elements, notifications);\n\n            this.updateListPosition(elements, notifications);\n\n            this._changeDetectorRef.markForCheck();\n        });\n    }\n\n    ngOnChanges(): void {\n        if (this._elements) {\n            this.updateListPosition(this._elements.toArray(), this._notifications);\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    private applyElementPositions(elements: ElementRef[], notifications: NotificationRef[]): void {\n        let top = 0;\n        for (let i = 0; i < elements.length; i += 1) {\n            const element = elements[i].nativeElement;\n            const notification = notifications[i];\n            this._renderer.setStyle(element, 'top', `${top}px`);\n            top = top + this.getNotificationHeightInPixels(notification, elements[i]);\n        }\n    }\n\n    private updateListPosition(elements: ElementRef[], notifications: NotificationRef[]): void {\n        if (this.position === 'bottom-left' || this.position === 'bottom-right') {\n            this._bottom = notifications.reduce((totalHeight, notification, index) =>\n                totalHeight + this.getNotificationHeightInPixels(notification, elements[index]), 0);\n        } else {\n\n            // In a top position, bottom should be unset.\n            this._bottom = undefined;\n        }\n    }\n\n    /** Get the height of the notification, including spacing if configured. */\n    private getNotificationHeightInPixels(notification: NotificationRef, elementRef: ElementRef): number {\n        if (notification.spacing === undefined) {\n            return this.getElementOuterHeightInPixels(elementRef);\n        }\n\n        return elementRef.nativeElement.offsetHeight + notification.spacing;\n    }\n\n    /** Get the total height of the element including margins. */\n    private getElementOuterHeightInPixels(elementRef: ElementRef): number {\n        const element = elementRef.nativeElement;\n        const { marginTop, marginBottom } = getComputedStyle(element);\n\n        return element.offsetHeight + parseInt(marginTop) + parseInt(marginBottom);\n    }\n}\n\nexport type NotificationListPostion = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n","@for (notificationRef of notifications$ | async; track notificationRef; let index = $index) {\n  <div #notification\n    class=\"notification\"\n    [style.height.px]=\"notificationRef.height\"\n    [style.background-color]=\"notificationRef.backgroundColor\"\n    [@notificationState]>\n    <!-- Notification Content -->\n    <ng-container\n      [ngTemplateOutlet]=\"notificationRef.templateRef\"\n      [ngTemplateOutletContext]=\"{ $implicit: notificationRef, data: notificationRef.data }\">\n    </ng-container>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ColorServiceModule } from '../../services/color/index';\r\nimport { NotificationListComponent } from './notification-list.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        ColorServiceModule\r\n    ],\r\n    exports: [\r\n        NotificationListComponent\r\n    ],\r\n    declarations: [\r\n        NotificationListComponent\r\n    ]\r\n})\r\nexport class NotificationModule { }\r\n","/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport {\n  AfterViewInit,\n  ApplicationRef,\n  ChangeDetectionStrategy,\n  Component,\n  ComponentFactoryResolver,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Injector,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  inject,\n} from '@angular/core';\nimport {\n  HierarchyPointLink,\n  HierarchyPointNode,\n  Selection,\n  ZoomBehavior,\n  ZoomTransform,\n  hierarchy,\n  interpolate,\n  linkVertical,\n  select,\n  transition,\n  tree,\n  zoom,\n  zoomTransform,\n} from 'd3';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { FocusIndicator, FocusIndicatorService } from '../../directives/accessibility/index';\nimport { ResizeDimensions, ResizeService } from '../../directives/resize/index';\n\n@Component({\n  selector: 'ux-organization-chart',\n  templateUrl: './organization-chart.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OrganizationChartComponent<T> implements AfterViewInit, OnChanges, OnDestroy {\n  private readonly _resizeService = inject(ResizeService);\n\n  private readonly _componentFactoryResolver = inject(ComponentFactoryResolver);\n\n  private readonly _injector = inject(Injector);\n\n  private readonly _elementRef = inject(ElementRef);\n\n  private readonly _appRef = inject(ApplicationRef);\n\n  private readonly _viewContainerRef = inject(ViewContainerRef);\n\n  private readonly _renderer = inject(Renderer2);\n\n  private readonly _focusIndicator = inject(FocusIndicatorService);\n\n  private readonly _ngZone = inject(NgZone);\n\n  /** Define the root node of the chart */\n  @Input() dataset: OrganizationChartNode<T>;\n\n  /** Define the presentation of the connectors */\n  @Input() connector: OrganizationChartConnector = 'elbow';\n\n  /** Define the width of a node */\n  @Input() nodeWidth: number;\n\n  /** Define the height of a node */\n  @Input() nodeHeight: number;\n\n  /** Define the duration of the transition animations */\n  @Input() duration: number = 750;\n\n  /** Define the vertical space between nodes */\n  @Input() verticalSpacing: number;\n\n  /** Define whether or not we can reveal additional parents */\n  @Input() showReveal: boolean = false;\n\n  /** Define the aria label for the reveal button */\n  @Input() revealAriaLabel: string = 'Reveal More';\n\n  /** Defines whether nodes can be toggled or not */\n  @Input() set toggleNodesOnClick(toggleNodesOnClick: boolean) {\n    this._toggleNodesOnClick = coerceBooleanProperty(toggleNodesOnClick);\n  }\n\n  get toggleNodesOnClick(): boolean {\n    return this._toggleNodesOnClick;\n  }\n\n  /** Programmatically select an item */\n  @Input() set selected(selected: OrganizationChartNode<T>) {\n    if (this.selected === selected || !selected) {\n      return;\n    }\n\n    if (this._isInitialised) {\n      this.select(selected);\n      this.centerNode(selected);\n    } else {\n      this._pendingSelection = selected;\n    }\n  }\n\n  /** Emit whenever a node is selected */\n  @Output() selectedChange = new EventEmitter<OrganizationChartNode<T>>(true);\n\n  /** Emit whenever the reveal button is pressed */\n  @Output() reveal = new EventEmitter<void>();\n\n  /** Emit when the transition ends */\n  @Output() transitionEnd = new EventEmitter<void>();\n\n  /** Get the template for the node content */\n  @ContentChild('revealTemplate', { static: false }) revealTemplate: TemplateRef<void>;\n\n  /** Get the template for the node content */\n  @ContentChild('nodeTemplate', { static: false }) nodeTemplate: TemplateRef<\n    OrganizationChartNodeContext<T>\n  >;\n\n  /** Access the reveal button element */\n  @ViewChild('revealElement', { static: true }) revealElement: ElementRef;\n\n  /** Access the container element for the links */\n  @ViewChild('links', { static: true }) linksContainer: ElementRef;\n\n  /** Access the container element for the nodes */\n  @ViewChild('nodes', { static: true }) nodesContainer: ElementRef;\n\n  private _toggleNodesOnClick: boolean = true;\n\n  /** Store the internal selected node */\n  private _selected: OrganizationChartNode<T>;\n\n  /** Store a flattened array of nodes */\n  private _nodeLayout: HierarchyPointNode<OrganizationChartNode<T>>[] = [];\n\n  /** Store a flattened array of links */\n  private _linkLayout: HierarchyPointLink<OrganizationChartNode<T>>[] = [];\n\n  /** Store the links selection */\n  private _linksContainer: Selection<SVGElement, {}, null, undefined>;\n\n  /** Store the links selection */\n  private _nodesContainer: Selection<HTMLDivElement, {}, null, undefined>;\n\n  /** Store all the node elements */\n  private _nodes: Selection<\n    HTMLDivElement,\n    HierarchyPointNode<OrganizationChartNode<T>>,\n    HTMLDivElement,\n    HierarchyPointNode<OrganizationChartNode<T>>\n  >;\n\n  /** Store all the link paths */\n  private _links: Selection<\n    SVGElement,\n    HierarchyPointLink<OrganizationChartNode<T>>,\n    SVGElement,\n    HierarchyPointLink<OrganizationChartNode<T>>\n  >;\n\n  /** Store the zoom behavior */\n  private _zoom: ZoomBehavior<Element, {}>;\n\n  /** Store the current layout */\n  private _layout: HierarchyPointNode<OrganizationChartNode<T>>;\n\n  /** Store the current width of the chart */\n  private _width: number;\n\n  /** Store the current height of the chart */\n  private _height: number;\n\n  /** Store the portal/outlets associated with some data */\n  private readonly _portals = new Map<OrganizationChartNode<T>, OrganizationChartPortalRef>();\n\n  /** Store the focus indicators associated with nodes */\n  private readonly _indicators = new Map<OrganizationChartNode<T>, FocusIndicator>();\n\n  /** Store whether or not a transition is in progress */\n  private _isTransitioning: boolean = false;\n\n  /** Store whether or not a camera pan is in progress */\n  private _isPanning: boolean = false;\n\n  /** Determine if the component is initialised */\n  private _isInitialised: boolean = false;\n\n  /** Determine if the connector type has changed since the last render */\n  private _hasConnectorChanged: boolean = false;\n\n  /** Store the currently focused node if there is one */\n  private _focused: OrganizationChartNode<T>;\n\n  /** Store any selection made before the chart is initialised */\n  private _pendingSelection: OrganizationChartNode<T>;\n\n  /** Automatically unsubscribe from all subscriptions on destroy */\n  private readonly _onDestroy = new Subject<void>();\n\n  ngAfterViewInit(): void {\n    // before we do anything ensure they have provided a template\n    if (!this.nodeTemplate) {\n      throw new Error('Organization Chart - You must provide a node template!');\n    }\n\n    if (!this.nodeWidth || !this.nodeHeight) {\n      throw new Error('Organization Chart - You must specify a nodeWidth and nodeHeight');\n    }\n\n    // create the zoom drag listener\n    this._zoom = zoom()\n      .scaleExtent([1, 1])\n      .interpolate(interpolate)\n      .on('zoom', this.applyCameraPosition.bind(this))\n      .on('end', () => {\n        if (!this._isPanning) {\n          this.ensureNodesAreVisible();\n        }\n      });\n\n    // set up the selections\n    this._linksContainer = select(this.linksContainer.nativeElement);\n    this._nodesContainer = select(this.nodesContainer.nativeElement);\n\n    // setup the zoom on the node layer\n    this._ngZone.runOutsideAngular(() => this._nodesContainer.call(this._zoom));\n\n    // perform the initial render\n    this.render();\n\n    // ensure we set the initial chart size\n    this._width = this._elementRef.nativeElement.offsetWidth;\n    this._height = this._elementRef.nativeElement.offsetHeight;\n\n    // watch for any resizing of the chart\n    const resize$ = this._resizeService.addResizeListener(this._elementRef.nativeElement);\n\n    // on size change immediate update the width and height measurements\n    resize$.pipe(takeUntil(this._onDestroy)).subscribe(this.onResize.bind(this));\n\n    // after a debounce ensure nodes are visible\n    resize$\n      .pipe(takeUntil(this._onDestroy), debounceTime(this.duration))\n      .subscribe(this.ensureNodesAreVisible.bind(this));\n\n    // initially horizontally center the root node\n    this.centerNode(this.dataset, OrganizationChartAxis.Horizontal, false);\n\n    // initally move the camera down slightly so the root node does not appear at the very top of the chart\n    this.moveCamera(0, 150, false);\n\n    // mark this component as initialised\n    this._isInitialised = true;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.connector && !changes.connector.firstChange) {\n      this._hasConnectorChanged = true;\n    }\n\n    // if only the selected property has changed then don't re-render as this is handled by the setter\n    if (Object.keys(changes).length === 1 && changes.selected) {\n      return;\n    }\n\n    if (this._isInitialised) {\n      this.render();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n\n    // correctly dispose all portals and outlets\n    this._portals.forEach(node => {\n      node.portal.detach();\n      node.outlet.dispose();\n    });\n  }\n\n  /** Perform the actual rendering of the chart */\n  render(): void {\n    // perform the layout algorithm on the current dataset\n    this.updateLayout();\n\n    // select all the existing links and nodes\n    this.updateSelections();\n\n    // create a d3 transition based in the specified transition time\n    const defaultTransition = transition('organizationChartDefaultTransition')\n      .duration(this.duration)\n      .on('start', () => (this._isTransitioning = true))\n      .on('end', () => {\n        this._isTransitioning = false;\n        this.transitionEnd.emit();\n      });\n\n    // render the links when they are first added to the DOM\n    this._links\n      .enter()\n      .insert('path')\n      .attr('class', 'ux-organization-chart-link')\n      .attr('d', link => this.getLinkPath(link))\n      .attr('opacity', -2)\n      .transition(defaultTransition)\n      .attr('d', link => this.getLinkPath(link))\n      .attr('opacity', 1);\n\n    // define the standard transition while the link is 'alive'\n    this._links\n      .transition()\n      .duration(this._hasConnectorChanged ? 0 : this.duration)\n      .attr('d', link => this.getLinkPath(link));\n\n    // apply transitions when removing nodes\n    this._links\n      .exit()\n      .transition(defaultTransition)\n      .attr('d', (link: HierarchyPointLink<OrganizationChartNode<T>>) =>\n        this.getCollapsedLinkPath(link)\n      )\n      .attr('opacity', 0)\n      .remove();\n\n    // when a node is first added to the DOM position it\n    this._nodes\n      .enter()\n      .append('div')\n      .attr('class', 'ux-organization-chart-node')\n      .style('width', this.nodeWidth + 'px')\n      .style('height', this.nodeHeight + 'px')\n      .style('left', node => (node.parent ? node.parent.x : node.x) + 'px')\n      .style('top', node => (node.parent ? node.parent.y : node.y) + 'px')\n      .style('opacity', 0)\n      .on('keydown', (event, node) => this.onKeydown(event, node))\n      .on('focus', (event, node) => this.onFocus(node))\n      .on('click', (event, node) => this.onClick(node))\n      .each(this.renderNodeTemplate.bind(this))\n      .each((node, index, group) => this.monitorFocus(group[index], node))\n      .transition(defaultTransition)\n      .style('left', node => node.x + 'px')\n      .style('top', node => node.y + 'px')\n      .style('opacity', 1);\n\n    // apply any movements while nodes are 'alive'\n    this._nodes\n      .transition(defaultTransition)\n      .style('left', node => node.x + 'px')\n      .style('top', node => node.y + 'px');\n\n    // apply transitions when removing nodes\n    this._nodes\n      .exit()\n      .transition(defaultTransition)\n      .style(\n        'left',\n        (node: HierarchyPointNode<OrganizationChartNode<T>>) =>\n          (node.parent ? node.parent.x : node.x) + 'px'\n      )\n      .style('opacity', 0)\n      .remove()\n      .on('end', (node: HierarchyPointNode<OrganizationChartNode<T>>) => this.destroyNode(node));\n\n    // update the position of the reveal button\n    select(this.revealElement.nativeElement)\n      .style('left', this.nodeWidth / 2 - this.revealElement.nativeElement.offsetWidth / 2 + 'px')\n      .style(\n        'top',\n        -(this.nodeHeight / 2 + this.revealElement.nativeElement.offsetHeight / 2) + 'px'\n      );\n\n    // after any new links and nodes have been created or removed we should update the selections\n    this.updateSelections();\n\n    // update the selected classes - ensure there is always a selected node\n    if (!this._selected) {\n      this.select(this._pendingSelection || this.dataset);\n      this._pendingSelection = null;\n    }\n\n    // set the tab indexes and aria labels for any newly added items\n    this.setNodeAttributes();\n\n    // apply the current camera position to any new nodes/links\n    this.applyCameraPosition();\n\n    // reset the connector changed status\n    this._hasConnectorChanged = false;\n  }\n\n  /** Select a specified node */\n  select(node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>): void {\n    // get the node in the desired format\n    node = this.coerceDataNode(node) as OrganizationChartNode<T>;\n\n    // check if the node is already selected\n    if (this._selected === node) {\n      return;\n    }\n\n    // ensure all parents are expanded\n    this.expandParents(node);\n\n    // deselect any current node\n    this.deselect(false);\n\n    // if the selected item has changed then store the latest selection\n    this._selected = node;\n\n    // emit the latest selection\n    this.selectedChange.emit(this._selected);\n\n    // show reveal any nodes that may previously have been hidden but are now visible due to selection\n    if (this._isInitialised) {\n      this.render();\n    }\n\n    // add the styling to the selected node\n    this._renderer.addClass(\n      this.getNodeElement(this._selected),\n      'ux-organization-chart-node-selected'\n    );\n\n    // update the styling and tabindexes\n    this.setNodeAttributes();\n  }\n\n  /** Deselect the currently selected node */\n  private deselect(emit: boolean = true): void {\n    if (this._nodes) {\n      this._nodes\n        .nodes()\n        .forEach(element =>\n          this._renderer.removeClass(element, 'ux-organization-chart-node-selected')\n        );\n    }\n\n    if (emit && !!this._selected) {\n      this._selected = null;\n      this.selectedChange.next(null);\n\n      // update the tab indexes and aria labels\n      this.setNodeAttributes();\n    }\n  }\n\n  /** Toggle the collapsed state of a node */\n  toggle(node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (this._isTransitioning) {\n      return;\n    }\n\n    // get the node in the desired format\n    node = this.coercePointNode(node) as HierarchyPointNode<OrganizationChartNode<T>>;\n\n    // ensure the clicked node is selected\n    this.select(node);\n\n    // apply the appropriate action\n    this.isExpanded(node) ? this.collapse(node) : this.expand(node);\n  }\n\n  /** Expand a node */\n  expand(node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (this._isTransitioning || !this.toggleNodesOnClick) {\n      return;\n    }\n\n    // get the node in the desired format\n    node = this.coercePointNode(node) as HierarchyPointNode<OrganizationChartNode<T>>;\n\n    // ensure this node and all parent nodes are expanded\n    node.ancestors().forEach(_node => (_node.data.expanded = true));\n\n    // re-render the nodes\n    this.render();\n\n    // if the node has children then we want to move the camera to a child node\n    if (Array.isArray(node.data.children) && node.data.children.length > 0) {\n      // center on the middle child\n      this.centerNode(node.data.children[Math.floor(node.data.children.length / 2)]);\n    } else {\n      this.centerNode(node);\n    }\n  }\n\n  /** Collapse a node */\n  collapse(node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>): void {\n    // do nothing if a transition is currently in progress\n    if (this._isTransitioning) {\n      return;\n    }\n\n    // get the node in the desired format\n    node = this.coercePointNode(node) as HierarchyPointNode<OrganizationChartNode<T>>;\n\n    // ensure this node and all child nodes are collapse\n    node.descendants().forEach(_node => (_node.data.expanded = false));\n\n    // re-render the nodes\n    this.render();\n\n    // center the node that has just been collapsed\n    this.centerNode(node);\n  }\n\n  /** Move a specific node to the center of the screen */\n  centerNode(\n    node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>,\n    axis: OrganizationChartAxis = OrganizationChartAxis.Both,\n    animate: boolean = true\n  ): void {\n    // get the node in the desired format\n    node = this.coercePointNode(node) as HierarchyPointNode<OrganizationChartNode<T>>;\n\n    // get the current camera position\n    const camera = this.getCameraPosition();\n\n    const x =\n      axis === OrganizationChartAxis.Vertical\n        ? camera.x\n        : this._width / 2 - (node.x + this.nodeWidth / 2);\n    const y =\n      axis === OrganizationChartAxis.Horizontal\n        ? camera.y\n        : this._height / 2 - (node.y + this.nodeHeight / 2);\n\n    // update the camera position\n    this.setCameraPosition(x, y, animate);\n  }\n\n  /** Explicity set the position of the camera */\n  setCameraPosition(x: number, y: number, animate: boolean = true): void {\n    // get the current transform\n    let camera = zoomTransform(this._nodesContainer.node());\n\n    // do nothing if the co-orindates have not changed\n    if (camera.x === x && camera.y === y) {\n      return;\n    }\n\n    // update the camera position\n    camera = camera.translate(x - camera.x, y - camera.y);\n\n    // indicate that the camera is panning programmatically\n    this._isPanning = true;\n\n    if (animate) {\n      this._nodesContainer\n        .transition()\n        .duration(this.duration)\n        .call(this._zoom.transform, camera)\n        .on('end interrupt cancel', () => (this._isPanning = false));\n    } else {\n      this._nodesContainer.call(this._zoom.transform, camera);\n      this._isPanning = false;\n    }\n  }\n\n  /** Move the camera an amount from its current position */\n  moveCamera(x: number, y: number, animate: boolean = true): void {\n    // get the current camera position\n    const camera = this.getCameraPosition();\n\n    this.setCameraPosition(camera.x + x, camera.y + y, animate);\n  }\n\n  /** Focus a given node */\n  focus(node: OrganizationChartNode<T>): void {\n    this.focusNode(this.coercePointNode(node));\n  }\n\n  /** Focus the root node */\n  _focusRootNode(): void {\n    this.focusNode(this.coercePointNode(this.dataset));\n  }\n\n  /** Destroy the outlet and portal associated with a node */\n  private destroyNode(\n    node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>\n  ): void {\n    // get the node in a consistent format\n    node = this.coercePointNode(node);\n\n    // remove focus monitoring\n    if (this._indicators.has(node.data)) {\n      // remove the focus monitoring\n      this._indicators.get(node.data).destroy();\n\n      // remove the indicator from the list of indicators\n      this._indicators.delete(node.data);\n    }\n\n    // if there is not portal/outlets associated with this node then do nothing\n    if (!this._portals.has(node.data)) {\n      return;\n    }\n\n    // get the portal and outlet from the map\n    const portalRef = this._portals.get(node.data);\n\n    // perform the cleanup\n    portalRef.portal.detach();\n    portalRef.outlet.dispose();\n\n    // remove this entry from the map\n    this._portals.delete(node.data);\n  }\n\n  // update the data structure for the node and link layouts\n  private updateLayout(): void {\n    this._layout = this.getLayout();\n    this._nodeLayout = this._layout.descendants();\n    this._linkLayout = this._layout.links();\n  }\n\n  /** Ensure the selections stay in sync with the view */\n  private updateSelections(): void {\n    // select all the newly added dom nodes and associate the dataset\n    this._nodes = this._nodesContainer\n      .selectAll('.ux-organization-chart-node')\n      .data(this._nodeLayout, (node: HierarchyPointNode<OrganizationChartNode<T>>) =>\n        node.data.id.toString()\n      ) as Selection<\n      HTMLDivElement,\n      HierarchyPointNode<OrganizationChartNode<T>>,\n      HTMLDivElement,\n      HierarchyPointNode<OrganizationChartNode<T>>\n    >;\n\n    // select all the newly added path nodes\n    this._links = this._linksContainer\n      .selectAll('.ux-organization-chart-link')\n      .data(this._linkLayout, (link: HierarchyPointLink<OrganizationChartNode<T>>) => {\n        return `${link.source.data.id}-${link.target.data.id}`;\n      }) as Selection<\n      SVGElement,\n      HierarchyPointLink<OrganizationChartNode<T>>,\n      SVGElement,\n      HierarchyPointLink<OrganizationChartNode<T>>\n    >;\n  }\n\n  /** Render the content of the node based on the template provided */\n  private renderNodeTemplate(\n    node: HierarchyPointNode<OrganizationChartNode<T>>,\n    index: number,\n    group: HTMLElement[]\n  ) {\n    // create the context for the node\n    const context: OrganizationChartNodeContext<T> = {\n      data: node.data.data,\n      node: node.data,\n      focused: false,\n    };\n\n    // the focused state should be a getter\n    Object.defineProperty(context, 'focused', {\n      get: () => this._focused === node.data,\n    });\n\n    // create the outlet to insert the Template and the portal from the TemplateRef\n    const outlet = this.createPortalOutlet(group[index]);\n    const portal = new TemplatePortal<OrganizationChartNodeContext<T>>(\n      this.nodeTemplate,\n      this._viewContainerRef,\n      context\n    );\n\n    // insert the TemplateRef into the specified region\n    portal.attach(outlet);\n\n    // store the portal and outlet so we can correctly dispose of the nodes\n    this._portals.set(node.data, { portal, outlet });\n  }\n\n  /** Handle any zoom events (we use zoom for panning behaviour) */\n  private applyCameraPosition(): void {\n    // get the new x and y position\n    let { x, y } = zoomTransform(this._nodesContainer.node());\n\n    // round the precision to integers to prevent any anti-aliasing\n    x = Math.round(x);\n    y = Math.round(y);\n\n    // transform the position of the reveal button\n    this._renderer.setStyle(\n      this.revealElement.nativeElement,\n      'transform',\n      `translate(${x}px, ${y}px)`\n    );\n\n    // transform the position of the nodes\n    this._nodesContainer\n      .selectAll('.ux-organization-chart-node')\n      .style('transform', `translate(${x}px, ${y}px)`);\n\n    // transform the position of the links\n    this._linksContainer\n      .selectAll('.ux-organization-chart-link')\n      .attr('transform', `translate(${x} ${y})`);\n  }\n\n  /** Get the data in with the required layout information */\n  private getLayout(): HierarchyPointNode<OrganizationChartNode<T>> {\n    // create a hierarchical representation of the data - don't include collapsed nodes\n    const treeHierarchy = hierarchy(this.dataset, node =>\n      Array.isArray(node.children) && node.expanded ? node.children : []\n    );\n\n    // create our layout\n    const layout = tree<OrganizationChartNode<T>>()\n      .nodeSize([this.nodeWidth, this.nodeHeight])\n      .separation(this.getNodeSpacing.bind(this));\n\n    // process the data with the layout\n    const treeLayout = layout(treeHierarchy);\n\n    // calculate the vertical spacing\n    const verticalSpacing =\n      this.verticalSpacing === undefined ? this.nodeHeight : this.verticalSpacing;\n\n    // set the vertical spacing\n    treeLayout.each(data => (data.y = data.depth * (this.nodeHeight + verticalSpacing)));\n\n    return treeLayout;\n  }\n\n  /** Determine how much horizontal spacing should be between nodes */\n  private getNodeSpacing(\n    nodeOne: HierarchyPointNode<OrganizationChartNode<T>>,\n    nodeTwo: HierarchyPointNode<OrganizationChartNode<T>>\n  ): number {\n    // if the nodes are not siblings then space further apart\n    if (nodeOne.parent !== nodeTwo.parent) {\n      return 2;\n    }\n\n    // if they are siblings they should be closer together\n    return 1.5;\n  }\n\n  /** Ensure we consistently use the HierarchyPoint data structure */\n  private coercePointNode(\n    node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>\n  ): HierarchyPointNode<OrganizationChartNode<T>> {\n    // determine if this is a raw data node or a hierarchy point\n    // eslint-disable-next-line no-prototype-builtins\n    if (node.hasOwnProperty('depth') && node.hasOwnProperty('x') && node.hasOwnProperty('y')) {\n      return node as HierarchyPointNode<OrganizationChartNode<T>>;\n    }\n\n    // otherwise find the matching node\n    const match = this._nodeLayout.find(_node => _node.data === node);\n\n    // if the data does not exist in the hierarchy throw an exception\n    if (!match) {\n      throw new Error('The node does not exist in the hierarchy');\n    }\n\n    return match;\n  }\n\n  private coerceDataNode(\n    node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>\n  ): OrganizationChartNode<T> {\n    // eslint-disable-next-line no-prototype-builtins\n    if (node.hasOwnProperty('depth') && node.hasOwnProperty('x') && node.hasOwnProperty('y')) {\n      return (node as HierarchyPointNode<OrganizationChartNode<T>>).data;\n    }\n\n    return node as OrganizationChartNode<T>;\n  }\n\n  /** Handle chart resize events */\n  private onResize({ width, height }: ResizeDimensions): void {\n    this._width = width;\n    this._height = height;\n  }\n\n  /** Deteremine if a node is expanded or collapsed */\n  private isExpanded(node: HierarchyPointNode<OrganizationChartNode<T>>): boolean {\n    return !!node.data.expanded;\n  }\n\n  /** Get the current position of the camera */\n  private getCameraPosition(): ZoomTransform {\n    return zoomTransform(this._nodesContainer.node());\n  }\n\n  /** Get the SVG line definition for each link */\n  private getLinkPath(pointLink: HierarchyPointLink<OrganizationChartNode<T>>): string {\n    if (this.connector === 'elbow') {\n      const source = {\n        x: pointLink.source.x + this.nodeWidth / 2,\n        y: pointLink.source.y + this.nodeHeight,\n      };\n      const target = { x: pointLink.target.x + this.nodeWidth / 2, y: pointLink.target.y };\n\n      return (\n        'M' +\n        source.x +\n        ',' +\n        source.y +\n        'v' +\n        (target.y - source.y) / 2 +\n        'h' +\n        (target.x - source.x) +\n        'v' +\n        (target.y - source.y) / 2\n      );\n    } else {\n      const source = {\n        x: pointLink.source.x + this.nodeWidth / 2,\n        y: pointLink.source.y + this.nodeHeight / 2,\n      };\n      const target = {\n        x: pointLink.target.x + this.nodeWidth / 2,\n        y: pointLink.target.y + this.nodeHeight / 2,\n      };\n\n      return linkVertical()({ source: [source.x, source.y], target: [target.x, target.y] });\n    }\n  }\n\n  /** Get the link path line defintion when the link is collapsing */\n  private getCollapsedLinkPath(pointLink: HierarchyPointLink<OrganizationChartNode<T>>): string {\n    return this.getLinkPath({ source: pointLink.source, target: pointLink.source });\n  }\n\n  /** Create a dynamic region that Angular can insert into */\n  private createPortalOutlet(element: HTMLElement): DomPortalOutlet {\n    return new DomPortalOutlet(\n      element,\n      this._componentFactoryResolver,\n      this._appRef,\n      this._injector\n    );\n  }\n\n  /** Make the appropriate node tabbable and update aria attributes */\n  private setNodeAttributes(): void {\n    for (const element of this._nodes.nodes()) {\n      // intially the tab index of all items to -1\n      this._renderer.setAttribute(element, 'tabindex', '-1');\n\n      // set the expanded aria attribute\n      this._renderer.setAttribute(\n        element,\n        'aria-expanded',\n        this.getNodeData(element).data.expanded ? 'true' : 'false'\n      );\n    }\n\n    // if there is a selected item then it should be tabbable otherwise make the root tabbable\n    if (this._selected) {\n      this._renderer.setAttribute(this.getNodeElement(this._selected), 'tabindex', '0');\n    }\n  }\n\n  /** Get the element that represents a given node */\n  private getNodeElement(\n    node: OrganizationChartNode<T> | HierarchyPointNode<OrganizationChartNode<T>>\n  ): HTMLDivElement {\n    node = this.coercePointNode(node);\n\n    // find the element that matches the node data\n    const index = this._nodes.data().indexOf(node);\n\n    return this._nodes.nodes()[index];\n  }\n\n  /** Get the element that represents a given node */\n  private getNodeData(node: HTMLDivElement): HierarchyPointNode<OrganizationChartNode<T>> {\n    // find the element that matches the node element\n    const index = this._nodes.nodes().indexOf(node);\n\n    return this._nodes.data()[index];\n  }\n\n  /** Handle click events */\n  private onClick(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (!this.toggleNodesOnClick) {\n      return;\n    }\n\n    this.toggle(node);\n  }\n\n  /** Handle keyboard events */\n  private onKeydown(\n    event: KeyboardEvent,\n    node: HierarchyPointNode<OrganizationChartNode<T>>\n  ): void {\n    if (!this.toggleNodesOnClick) {\n      return;\n    }\n\n    switch (event.keyCode) {\n      case DOWN_ARROW:\n        event.preventDefault();\n        // if the node is collapsed and has children expand\n        if (\n          !node.data.expanded &&\n          Array.isArray(node.data.children) &&\n          node.data.children.length > 0\n        ) {\n          return this.expand(node);\n        }\n        return this.focusChild(node);\n\n      case RIGHT_ARROW:\n        event.preventDefault();\n        return this.focusNextSibling(node);\n\n      case UP_ARROW:\n        event.preventDefault();\n        return this.focusParent(node);\n\n      case LEFT_ARROW:\n        event.preventDefault();\n        return this.focusPreviousSibling(node);\n\n      case ENTER:\n        return this.toggle(node);\n    }\n  }\n\n  /** When a node receives focus */\n  private onFocus(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (!this.isNodeInViewport(node, this._width * 0.1, this._height * 0.1)) {\n      this.centerNode(node);\n    }\n  }\n\n  /** Move focus to the parent node */\n  private focusParent(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (node.parent) {\n      this.focusNode(node.parent);\n    } else if (this.revealElement) {\n      this.revealElement.nativeElement.focus();\n      // center the root node to ensure the reveal button is in view\n      this.centerNode(this.dataset);\n    }\n  }\n\n  /** Move focus to the child node */\n  private focusChild(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (Array.isArray(node.children) && node.children.length > 0) {\n      this.focusNode(node.children[Math.floor(node.children.length / 2)]);\n    }\n  }\n\n  /** Move focus to the sibling on the left */\n  private focusPreviousSibling(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (node.parent) {\n      this.focusNode(node.parent.children[node.parent.children.indexOf(node) - 1]);\n    }\n  }\n\n  /** Move focus to the sibling on the right */\n  private focusNextSibling(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (node.parent) {\n      this.focusNode(node.parent.children[node.parent.children.indexOf(node) + 1]);\n    }\n  }\n\n  /** Focus a given node */\n  private focusNode(node: HierarchyPointNode<OrganizationChartNode<T>>): void {\n    if (node) {\n      this.getNodeElement(node).focus({ preventScroll: true });\n\n      // ensure we don't perform scrolling if the node is not in view (we rely on preventScroll as IE doesn't support it)\n      this.nodesContainer.nativeElement.scrollTop = 0;\n      this.nodesContainer.nativeElement.scrollLeft = 0;\n    }\n  }\n\n  /** Determine if a node is fully visible within the viewport */\n  private isNodeInViewport(\n    node: HierarchyPointNode<OrganizationChartNode<T>>,\n    insetX: number = 0,\n    insetY: number = 0\n  ): boolean {\n    const { x, y } = this.getCameraPosition();\n\n    const left = node.x + x;\n    const top = node.y + y;\n    const right = node.x + x + this.nodeWidth;\n    const bottom = node.y + y + this.nodeHeight;\n\n    return (\n      left >= insetX &&\n      top >= insetY &&\n      right <= this._width - insetX &&\n      bottom <= this._height - insetY\n    );\n  }\n\n  /** Determine if a node is fully outside of the viewport */\n  private isNodeOutsideViewport(\n    node: HierarchyPointNode<OrganizationChartNode<T>>,\n    insetX: number = 0,\n    insetY: number = 0\n  ): boolean {\n    const { x, y } = this.getCameraPosition();\n\n    const left = node.x + x + this.nodeWidth;\n    const top = node.y + y + this.nodeHeight;\n    const right = node.x + x;\n    const bottom = node.y + y;\n\n    return (\n      left < insetX ||\n      top < insetY ||\n      right > this._width - insetX ||\n      bottom > this._height - insetY\n    );\n  }\n\n  /** Determine how far a node is from being within the viewport */\n  private getDistanceFromViewport(\n    node: HierarchyPointNode<OrganizationChartNode<T>>,\n    insetX: number = 0,\n    insetY: number = 0\n  ): [number, number] {\n    // if the node is in the viewport then it will always be 0, 0\n    if (!this.isNodeOutsideViewport(node, insetX, insetY)) {\n      return [0, 0];\n    }\n\n    const { x, y } = this.getCameraPosition();\n\n    const left = insetX - (node.x + x + this.nodeWidth);\n    const top = insetY - (node.y + y + this.nodeHeight);\n    const right = node.x + x - (this._width - insetX);\n    const bottom = node.y + y - (this._height - insetY);\n\n    let horizontal: number = 0;\n    let vertical: number = 0;\n\n    if (left > 0 && left > right) {\n      horizontal = left;\n    }\n\n    if (right > 0 && left < right) {\n      horizontal = -right;\n    }\n\n    if (top > 0 && top > bottom) {\n      vertical = top;\n    }\n\n    if (bottom > 0 && top < bottom) {\n      vertical = -bottom;\n    }\n\n    // calculate the distances on both axis\n    return [horizontal, vertical];\n  }\n\n  /** Begin monitoring the element focus so we only show styling when navigated by keyboard */\n  private monitorFocus(\n    element: HTMLDivElement,\n    node: HierarchyPointNode<OrganizationChartNode<T>>\n  ): void {\n    // create the focus indicator\n    const indicator = this._focusIndicator.monitor(element, {\n      checkChildren: false,\n      programmaticFocusIndicator: true,\n    });\n\n    // store the currently selected node as an instance variable\n    indicator.isFocused$.pipe(takeUntil(this._onDestroy)).subscribe(isFocused => {\n      // by default the CDK runs this outside of NgZone however we need it to run inside NgZone to update the node template\n      this._ngZone.run(() => {\n        if (isFocused) {\n          this._focused = node.data;\n        } else if (node.data === this._focused) {\n          this._focused = null;\n        }\n      });\n    });\n\n    // store the focus indicator reference\n    this._indicators.set(node.data, indicator);\n  }\n\n  // ensure that there are at least some nodes visible\n  private ensureNodesAreVisible(): void {\n    // determine how many nodes are currently visible\n    const visibleCount = this._nodes.filter(node => !this.isNodeOutsideViewport(node)).size();\n\n    if (visibleCount > 0) {\n      return;\n    }\n\n    // get the distance each node is from being within the viewport\n    const distances = this._nodes\n      .data()\n      .map(node =>\n        this.getDistanceFromViewport(node, this.nodeWidth * 1.25, this.nodeHeight * 1.5)\n      );\n\n    // find the closest node\n    const [x, y] = distances.reduce((previous, current) => {\n      const [previousX, previousY] = previous;\n      const [currentX, currentY] = current;\n\n      return Math.abs(previousX) + Math.abs(previousY) < Math.abs(currentX) + Math.abs(currentY)\n        ? previous\n        : current;\n    });\n\n    // move the camera by the required amount\n    this.moveCamera(x, y);\n  }\n\n  /** Expand all parent nodes */\n  private expandParents(node: OrganizationChartNode<T>): void {\n    // get the parent node\n    let parent = this.getParent(node);\n\n    while (parent) {\n      parent.expanded = true;\n      parent = this.getParent(parent);\n    }\n  }\n\n  /** Get the parent of a given node */\n  private getParent(node: OrganizationChartNode<T>): OrganizationChartNode<T> | null {\n    return [this.coerceDataNode(this.dataset), ...this.getAllChildren(this.dataset)].find(_node => {\n      if (!Array.isArray(_node.children)) {\n        return false;\n      }\n\n      return _node.children.find((child: OrganizationChartNode<T>) => child.id === node.id);\n    });\n  }\n\n  /** Get a flat array of all the nodes childrent */\n  private getAllChildren(node: OrganizationChartNode<T>): OrganizationChartNode<T>[] {\n    const children = node.children || [];\n\n    // check for any children on the children\n    return [\n      ...children,\n      ...children.reduce(\n        (accumulation, child) => [...accumulation, ...this.getAllChildren(child)],\n        []\n      ),\n    ].map(child => this.coerceDataNode(child));\n  }\n\n  static ngAcceptInputType_toggleNodesOnClick: BooleanInput;\n}\n\nexport interface OrganizationChartNode<T> {\n  id: number | string;\n  data?: T;\n  children?: ReadonlyArray<OrganizationChartNode<T>>;\n  expanded?: boolean;\n}\n\nexport interface OrganizationChartNodeContext<T> {\n  data: T;\n  node: OrganizationChartNode<T>;\n  focused: boolean;\n}\n\nexport interface OrganizationChartPortalRef {\n  outlet: DomPortalOutlet;\n  portal: TemplatePortal;\n}\n\nexport type OrganizationChartConnector = 'elbow' | 'curved';\n\nexport enum OrganizationChartAxis {\n  Horizontal,\n  Vertical,\n  Both,\n}\n","<!-- Add a button above the root node to load additional parent items -->\n<button #revealElement\n    uxFocusIndicatorOrigin\n    class=\"ux-organization-chart-reveal\"\n    tabindex=\"-1\"\n    [attr.aria-label]=\"revealAriaLabel\"\n    [hidden]=\"!showReveal\"\n    (click)=\"reveal.emit(); _focusRootNode()\"\n    (keydown.ArrowDown)=\"_focusRootNode(); $event.preventDefault()\">\n\n    <!-- Display Reveal Template -->\n    <ng-container [ngTemplateOutlet]=\"revealTemplate || defaultRevealTemplate\"></ng-container>\n</button>\n\n<!-- Show the links connecting each node -->\n<svg #links class=\"ux-organization-chart-links\"></svg>\n\n<!-- Show the nodes containing information about each item -->\n<div #nodes class=\"ux-organization-chart-nodes\"></div>\n\n<!-- Provide a default reveal template -->\n<ng-template #defaultRevealTemplate>\n    <ux-icon name=\"tab-up\"></ux-icon>\n</ng-template>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { IconModule } from '../icon/index';\nimport { OrganizationChartComponent } from './organization-chart.component';\n\n@NgModule({\n    declarations: [\n        OrganizationChartComponent\n    ],\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        IconModule,\n        ResizeModule,\n    ],\n    exports: [\n        OrganizationChartComponent\n    ]\n})\nexport class OrganizationChartModule { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxTabHeading]'\n})\nexport class TabHeadingDirective { }","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { TabComponent } from './tab/tab.component';\n\n@Injectable()\nexport class TabsetService {\n\n    /** Store the list of tabs */\n    tabs: ReadonlyArray<TabComponent> = [];\n\n    activeTab$ = new BehaviorSubject<TabComponent>(null);\n\n    /** Store the manual state */\n    manual: boolean = false;\n\n    /** Update the array of tabs - required to preserve order */\n    update(tabs: TabComponent[]): void {\n        this.tabs = [...tabs];\n    }\n\n    /** Select a tab (from user input) */\n    select(tab: TabComponent): void {\n        if (tab.disabled) {\n            return;\n        }\n\n        if (this.manual) {\n            // In manual mode, emit the activated/deactivated events.\n            // The application is responsible for updating the active state on each tab, which will then update the UI.\n            this.tabs.forEach(_tab => _tab === tab ? _tab.activate() : _tab.deactivate());\n        } else {\n            this.activeTab$.next(tab);\n        }\n    }\n\n    /** Set tab active state */\n    setTabActive(tab: TabComponent): void {\n        if (!tab.disabled) {\n            this.activeTab$.next(tab);\n        }\n    }\n\n    /** Determine if there is a selected tab */\n    isTabActive(): boolean {\n        return this.activeTab$.getValue() !== null;\n    }\n\n    /** Select the first non-disabled tab */\n    selectFirstTab(): void {\n        // find the index of the first non-disabled tab\n        const tab = this.tabs.find(_tab => !_tab.disabled);\n\n        if (tab) {\n            this.select(tab);\n        }\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { TabsetComponent } from './tabset.component';\n\n/**\n * This token is used to avoid circular dependency\n */\nexport const TabsetToken = new InjectionToken<TabsetComponent>('Tabset');","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\nimport { NavigationExtras } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../../common';\nimport { TabsetService } from '../tabset.service';\nimport { TabsetToken } from '../tabset.token';\nimport { TabHeadingDirective } from './tab-heading.directive';\n\nlet uniqueTabId = 0;\n\n@Component({\n    selector: 'ux-tab',\n    templateUrl: './tab.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent implements OnInit, OnDestroy, OnChanges {\n    private readonly _tabsetService = inject(TabsetService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _tabset = inject(TabsetToken);\n\n    /** Define the tab unique id */\n    @Input()\n    set id(id: string) {\n        if (id) {\n            this._id = id;\n        }\n    }\n\n    get id() {\n        return this._id;\n    }\n\n    /** Define the active state of this tab */\n    @Input()\n    set active(active: boolean) {\n        if (active) {\n            this._tabsetService.setTabActive(this);\n        }\n    }\n\n    /** Define if this tab is disabled */\n    @Input() disabled: boolean = false;\n\n    /** Define the tab heading */\n    @Input() heading: string;\n\n    /** Define the tab router path */\n    @Input() route: string | unknown[];\n\n    /** Define the tab router additional parameters */\n    @Input() routerLinkExtras: NavigationExtras;\n\n    /** provide a custom class for the tab */\n    @Input() customClass: string;\n\n    /** Emits when the active state changes. */\n    @Output() activeChange = new EventEmitter<boolean>();\n\n    /** Emit when this tab is selected */\n    @Output() activated = new EventEmitter<void>();\n\n    /** Emit when this tab is deselected */\n    @Output() deactivated = new EventEmitter<void>();\n\n    /** Store a custom header templateRef */\n    @ContentChild(TabHeadingDirective, { read: TemplateRef, static: false }) headingRef: TemplateRef<void>;\n\n    // Active state of the tab, for use in the template\n    _active = false;\n\n    // Id of tab, for use in the template\n    _id: string = `ux-tab-${++uniqueTabId}`;\n\n    /** Unsubscribe from all subscriptions when component is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        this._tabsetService.activeTab$.pipe(tick(), distinctUntilChanged(), takeUntil(this._onDestroy)).subscribe(activeTab => {\n            const isActive = (activeTab === this);\n            if (this._active !== isActive) {\n                this.setActive(isActive);\n            }\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.disabled && changes.disabled.previousValue !== changes.disabled.currentValue) {\n            this._tabset.markForCheck();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    activate(): void {\n        this.activated.emit();\n    }\n\n    deactivate(): void {\n        this.deactivated.emit();\n    }\n\n    /**\n     * Update the internal active state and emit appropriate events.\n     */\n    private setActive(active: boolean): void {\n        this._active = active;\n        this.activeChange.emit(active);\n\n        if (!this._tabsetService.manual) {\n            if (active) {\n                this.activate();\n            } else {\n                this.deactivate();\n            }\n        }\n\n        this._changeDetector.detectChanges();\n    }\n}\n","<div\n    role=\"tabpanel\"\n    class=\"tab-pane\"\n    [style.display]=\"_active ? 'block' : 'none'\"\n    [id]=\"id + '-panel'\"\n    [attr.aria-labelledby]=\"id\"\n    [attr.aria-hidden]=\"!_active\"\n>\n    <ng-content></ng-content>\n</div>\n","import { SPACE } from '@angular/cdk/keycodes';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, forwardRef, inject, Input, OnDestroy, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TabComponent } from './tab/tab.component';\nimport { TabsetService } from './tabset.service';\nimport { TabsetToken } from './tabset.token';\n\n@Component({\n    selector: 'ux-tabset',\n    templateUrl: './tabset.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        TabsetService,\n        {\n            provide: TabsetToken,\n            useExisting: forwardRef(() => TabsetComponent),\n        }\n    ],\n    host: {\n        '[class.tabs-left]': 'stacked === \"left\"',\n        '[class.tabs-right]': 'stacked === \"right\"',\n    }\n})\nexport class TabsetComponent implements AfterViewInit, OnDestroy {\n    readonly _tabset = inject(TabsetService);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Determine if the appearance of the tabset */\n    @Input() minimal: boolean = true;\n\n    /** Determine if the tabset should appear stacked */\n    @Input() stacked: 'left' | 'right' | 'none' = 'none';\n\n    /** Determine if we want to manually update the active state */\n    @Input() set manual(manual: boolean) {\n        this._tabset.manual = manual;\n    }\n\n    /** Provide am aria label for the tabset */\n    @Input('aria-label') ariaLabel: string;\n\n    /** Access all the children */\n    @ContentChildren(TabComponent) _tabs: QueryList<TabComponent>;\n\n    /** Remove subscriptions on destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    ngAfterViewInit(): void {\n\n        // provide the service with the initial array of items\n        this._tabset.update(this._tabs.toArray());\n\n        // Make sure a tab is selected\n        if (!this._tabset.isTabActive()) {\n            this._tabset.selectFirstTab();\n        }\n\n        // run change detection once we have setup the tabs\n        this._changeDetector.detectChanges();\n\n        // watch for any future changes\n        this._tabs.changes.pipe(takeUntil(this._onDestroy$)).subscribe(tabs => {\n\n            // update the internal list of tabs\n            this._tabset.update(tabs);\n\n            // run change detection\n            this._changeDetector.detectChanges();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    selectTab(tab: number | TabComponent): void {\n\n        // pass tab to select method\n        this._tabset.select(tab instanceof TabComponent ? tab : this._tabs.toArray()[tab]);\n\n        // run change detection\n        this._changeDetector.detectChanges();\n    }\n\n    handleKeyDown(event: KeyboardEvent, tab: HTMLElement): void {\n        if (event.keyCode === SPACE) {\n            event.preventDefault();\n            tab.click();\n        }\n    }\n\n    markForCheck(): void {\n        this._changeDetector.detectChanges();\n    }\n}\n","<!-- Nav tabs -->\n<ul\n  role=\"tablist\"\n  uxTabbableList\n  [direction]=\"stacked === 'none' ? 'horizontal' : 'vertical'\"\n  [allowBoundaryKeys]=\"true\"\n  class=\"nav nav-tabs\"\n  [class.minimal-tab]=\"minimal\"\n  [attr.aria-label]=\"ariaLabel\"\n  [attr.aria-orientation]=\"stacked === 'none' ? 'horizontal' : 'vertical'\"\n  >\n  @for (tab of _tabset.tabs; track tab; let index = $index) {\n    <li\n      role=\"presentation\"\n      class=\"nav-item\"\n      [class.active]=\"(_tabset.activeTab$ | async) === tab\"\n      [class.disabled]=\"tab.disabled\"\n      [ngClass]=\"tab.customClass\"\n      >\n      <ng-template #tabDetails>\n        @if (!tab.headingRef) {\n          <span>{{ tab.heading }}</span>\n        }\n        @if (tab.headingRef) {\n          <ng-container [ngTemplateOutlet]=\"tab.headingRef\"></ng-container>\n        }\n      </ng-template>\n      @if (tab.route) {\n        <a\n          class=\"nav-link\"\n          [attr.id]=\"tab.id\"\n          role=\"tab\"\n          #anchorTab\n          uxTabbableListItem\n          uxFocusIndicator\n          [attr.aria-controls]=\"tab.id\"\n          [attr.aria-selected]=\"(_tabset.activeTab$ | async) === tab\"\n          [attr.aria-disabled]=\"tab.disabled\"\n          [routerLink]=\"tab.route\"\n          [fragment]=\"tab.routerLinkExtras?.fragment\"\n          [queryParams]=\"tab.routerLinkExtras?.queryParams\"\n          [queryParamsHandling]=\"tab.routerLinkExtras?.queryParamsHandling\"\n          [preserveFragment]=\"tab.routerLinkExtras?.preserveFragment\"\n          [skipLocationChange]=\"tab.routerLinkExtras?.skipLocationChange\"\n          [replaceUrl]=\"tab.routerLinkExtras?.replaceUrl\"\n          [state]=\"tab.routerLinkExtras?.state\"\n          (keydown)=\"handleKeyDown($event, anchorTab)\"\n          >\n          <ng-container [ngTemplateOutlet]=\"tabDetails\"> </ng-container>\n        </a>\n      }\n      @if (!tab.route) {\n        <a\n          class=\"nav-link\"\n          [attr.id]=\"tab.id\"\n          role=\"tab\"\n          uxTabbableListItem\n          uxFocusIndicator\n          (mousedown)=\"_tabset.select(tab)\"\n          (activated)=\"_tabset.select(tab)\"\n          [attr.aria-controls]=\"tab.id\"\n          [attr.aria-selected]=\"(_tabset.activeTab$ | async) === tab\"\n          [attr.aria-disabled]=\"tab.disabled\"\n          >\n          <ng-container [ngTemplateOutlet]=\"tabDetails\"> </ng-container>\n        </a>\n      }\n    </li>\n  }\n</ul>\n\n<!-- Tab panes -->\n<div class=\"tab-content\">\n  <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { TabHeadingDirective } from './tab/tab-heading.directive';\nimport { TabComponent } from './tab/tab.component';\nimport { TabsetComponent } from './tabset.component';\n\n@NgModule({\n    imports: [AccessibilityModule, CommonModule, RouterModule],\n    exports: [TabsetComponent, TabComponent, TabHeadingDirective],\n    declarations: [TabsetComponent, TabComponent, TabHeadingDirective],\n})\nexport class TabsetModule {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxPageHeaderCustomMenu], [uxPageHeaderCustomItem]'\n})\nexport class PageHeaderCustomMenuDirective { }","import { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { getIconType } from '../../../common/index';\nimport { PageHeaderIconMenu, PageHeaderIconMenuDropdownItem } from '../interfaces';\n\n@Component({\n    selector: 'ux-page-header-icon-menu',\n    templateUrl: './icon-menu.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PageHeaderIconMenuComponent {\n\n    /** Get the data for this icon menu */\n    @Input() menu: PageHeaderIconMenu;\n\n    select(item: PageHeaderIconMenu | PageHeaderIconMenuDropdownItem): void {\n        if (item.select) {\n            item.select.call(item, item);\n        }\n    }\n\n    keydownHandler(item: PageHeaderIconMenu | PageHeaderIconMenuDropdownItem, event: KeyboardEvent): void {\n        switch (event.keyCode) {\n            case ENTER:\n            case SPACE:\n                this.select(item);\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n\n    _getIconType(identifier: string): string {\n        return identifier ? getIconType(identifier) : '';\n    }\n}","<div class=\"page-header-icon-menu\">\n  <button\n    type=\"button\"\n    class=\"page-header-icon-menu-button\"\n    [attr.aria-label]=\"menu.label\"\n    [uxMenuTriggerFor]=\"iconMenu\"\n    (click)=\"select(menu)\">\n\n    <!-- Support all icon types -->\n    @if (_getIconType(menu.icon) !== 'component') {\n      <i\n        [ngClass]=\"[_getIconType(menu.icon), menu.icon]\">\n      </i>\n    }\n\n    @if (_getIconType(menu.icon) === 'component') {\n      <ux-icon\n        [name]=\"menu.icon\">\n      </ux-icon>\n    }\n\n    @if (menu?.badge) {\n      <span class=\"label label-primary\" aria-hidden=\"true\">{{ menu.badge }}</span>\n    }\n  </button>\n\n  <ux-menu #iconMenu alignment=\"end\" menuClass=\"ux-page-header-icon-menu\">\n    @for (dropdown of menu?.dropdown; track dropdown) {\n      @if (dropdown.header) {\n        <div class=\"dropdown-header\">\n          <span class=\"font-bold\">{{ dropdown.title }}</span>\n        </div>\n      }\n      @if (!dropdown.header) {\n        <button\n          type=\"button\"\n          uxMenuItem\n          (click)=\"select(dropdown)\"\n          (keydown)=\"keydownHandler(dropdown, $event)\">\n          <span class=\"dropdown-item-title\">\n            <!-- Support all icon types -->\n            @if (_getIconType(dropdown.icon) !== 'component') {\n              <i\n                class=\"ux-fw\"\n                [ngClass]=\"[_getIconType(dropdown.icon) || 'ux-icon', dropdown.icon || '']\">\n              </i>\n            }\n            @if (_getIconType(dropdown.icon) === 'component') {\n              <ux-icon\n                class=\"m-r-xs\"\n                [name]=\"dropdown.icon\">\n              </ux-icon>\n            }\n            {{ dropdown.title }}\n          </span>\n          @if (dropdown.subtitle) {\n            <span class=\"dropdown-item-subtitle\">{{ dropdown.subtitle }}</span>\n          }\n        </button>\n      }\n      @if (dropdown.divider) {\n        <ux-menu-divider></ux-menu-divider>\n      }\n    }\n  </ux-menu>\n</div>\n","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, Router } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport type { PageHeaderNavigationDropdownItem, PageHeaderNavigationItem } from './navigation/navigation.component';\n\n@Injectable()\nexport class PageHeaderService implements OnDestroy {\n    private readonly _router = inject(Router);\n\n    items$ = new BehaviorSubject<PageHeaderNavigationItem[]>([]);\n    selected$ = new BehaviorSubject<PageHeaderNavigationItem>(null);\n    selectedRoot$ = new BehaviorSubject<PageHeaderNavigationItem>(null);\n    secondary$ = new BehaviorSubject<boolean>(false);\n    secondaryNavigationAutoselect = false;\n\n    private readonly _onDestroy = new Subject();\n\n    constructor() {\n\n        this.selected$\n            .pipe(takeUntil(this._onDestroy), map(selected => this.getRoot(selected)))\n            .subscribe(root => this.selectedRoot$.next(root));\n\n        this._router.events.pipe(\n            filter(event => event instanceof NavigationEnd || event instanceof NavigationCancel || event instanceof NavigationError),\n            takeUntil(this._onDestroy)\n        ).subscribe(() => this.updateItemsWithActiveRoute());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    select(item: PageHeaderNavigationItem, navigate: boolean = true): void {\n\n        if (!item) {\n            return;\n        }\n\n        if (item.routerLink && navigate) {\n\n            // Trigger router navigation\n            const routerLink = Array.isArray(item.routerLink) ? item.routerLink : [item.routerLink];\n            this._router.navigate(routerLink, item.routerExtras);\n\n        } else if (this.secondaryNavigationAutoselect && item.children && item.children.length > 0) {\n\n            // check to see if there is a child that is already marked as selected\n            const selectedChild = item.children.find(child => child.selected);\n\n            if (selectedChild) {\n                this.select(selectedChild);\n                this.selected$.next(selectedChild);\n                return;\n            }\n\n            // Select the first child that isn't disabled in secondaryNavigationAutoselect mode\n            const firstChild = item.children.find(_item => !_item.disabled);\n\n            if (firstChild) {\n                this.select(firstChild);\n            }\n\n        } else {\n\n            // if we are in secondary navigation mode and we click a parent - dont deselect the child\n            if (this.secondary$.getValue() === true && this.isParentOf(this.selected$.getValue(), item)) {\n                return;\n            }\n\n            // Otherwise select the given item\n            this.selected$.next(item);\n        }\n    }\n\n    deselect(item: PageHeaderNavigationItem | PageHeaderNavigationDropdownItem): void {\n        // deselect the current item\n        item.selected = false;\n\n        // iterate any children and deselect them\n        if (item.children) {\n            item.children.forEach(_item => this.deselect(_item));\n        }\n    }\n\n    deselectAll(): void {\n        this.items$.getValue().forEach(item => this.deselect(item));\n    }\n\n    updateItem(item: PageHeaderNavigationItem, selected: PageHeaderNavigationItem): void {\n        // Item is selected if it is the selected item, or one of the selected item's ancestors.\n        item.selected = item === selected || this.isParentOf(selected, item);\n\n        if (item === selected) {\n            // call the select function if present\n            if (item.select) {\n                item.select.call(item, item);\n            }\n        }\n    }\n\n    setItems(items: PageHeaderNavigationItem[] = []): void {\n        // identify all parent elements\n        items.forEach(item => this.setParent(item));\n\n        this.items$.next(items);\n\n        // Set up the initially selected item\n        // If nothing is set as selected, using the initial route\n        const initialSelectedItem = items.find(item => item.selected === true);\n        if (initialSelectedItem) {\n            this.select(initialSelectedItem);\n        } else {\n            this.updateItemsWithActiveRoute();\n        }\n    }\n\n    setSecondaryNavigation(enabled: boolean): void {\n        this.secondary$.next(enabled);\n    }\n\n    private getRoot(item: PageHeaderNavigation): PageHeaderNavigation {\n        return item && item.parent ? this.getRoot(item.parent) : item;\n    }\n\n    private setParent(item: PageHeaderNavigation, parent?: PageHeaderNavigation | null): void {\n\n        // set the parent field\n        item.parent = parent;\n\n        // call this function recursively on all children\n        if (item.children) {\n            item.children.forEach(child => this.setParent(child, item));\n        }\n    }\n\n    private isParentOf(node: PageHeaderNavigation, parent: PageHeaderNavigation): boolean {\n\n        // if there are no parents return false\n        if (!node || !node.parent) {\n            return false;\n        }\n\n        // if the parent is the match we are looking for return true\n        if (node.parent === parent) {\n            return true;\n        }\n\n        // if there are potentially grandparents then check them too\n        return this.isParentOf(node.parent, parent);\n    }\n\n    private updateItemsWithActiveRoute(): void {\n        const activeItem = new PageHeaderActiveNavigationItem();\n        for (const item of this.items$.getValue()) {\n            this.findActiveItem(item, activeItem);\n            if (activeItem.exact) {\n                break;\n            }\n        }\n\n        if (activeItem.item) {\n            this.selected$.next(activeItem.item);\n        }\n    }\n\n    private findActiveItem(item: PageHeaderNavigationItem, activeItem: PageHeaderActiveNavigationItem): void {\n\n        if (item.routerLink) {\n\n            const routerLink = Array.isArray(item.routerLink) ? item.routerLink : [item.routerLink];\n            const urlTree = this._router.createUrlTree(routerLink, item.routerExtras);\n\n            if (this._router.isActive(urlTree, true) && !activeItem.exact) {\n\n                // When the item route is an exact match, no need to look any further\n                activeItem.item = item;\n                activeItem.exact = true;\n\n                return;\n            }\n\n            if (this._router.isActive(urlTree, false)) {\n\n                // Store an inexact match and continue looking\n                activeItem.item = item;\n                activeItem.exact = false;\n            }\n        }\n\n        if (item.children) {\n            for (const childItem of item.children) {\n                this.findActiveItem(childItem, activeItem);\n                if (activeItem.exact) {\n                    return;\n                }\n            }\n        }\n    }\n}\n\nexport type PageHeaderNavigation = PageHeaderNavigationItem | PageHeaderNavigationDropdownItem;\n\nclass PageHeaderActiveNavigationItem {\n    item: PageHeaderNavigationItem;\n    exact: boolean;\n}\n","import { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { Component, inject, Input } from '@angular/core';\nimport { PageHeaderService } from '../../page-header.service';\nimport type { PageHeaderNavigationDropdownItem } from '../navigation.component';\n\n@Component({\n    selector: 'ux-page-header-horizontal-navigation-dropdown-item',\n    exportAs: 'ux-page-header-horizontal-navigation-dropdown-item',\n    templateUrl: './navigation-dropdown-item.component.html'\n})\nexport class PageHeaderNavigationDropdownItemComponent {\n    private readonly _pageHeaderService = inject(PageHeaderService);\n\n    /** Access the data for this item */\n    @Input() item: PageHeaderNavigationDropdownItem;\n\n    select(item: PageHeaderNavigationDropdownItem): void {\n\n        // clicking on an item that is disabled or with children then return\n        if (item.disabled || item.children) {\n            return;\n        }\n\n        // emit the selected item in an event\n        this._pageHeaderService.select(item);\n    }\n\n    keydownHandler(event: KeyboardEvent, item: PageHeaderNavigationDropdownItem): void {\n\n        switch (event.keyCode) {\n            case ENTER:\n            case SPACE:\n                this.select(item);\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n        }\n    }\n}\n","@if (item.children && item.children.length > 0) {\n  <div>\n    <button\n      type=\"button\"\n      uxMenuItem\n      [attr.id]=\"item.id\"\n      [disabled]=\"item.disabled\"\n      [class.selected]=\"item.selected\"\n      [attr.aria-selected]=\"item.selected\"\n      [uxMenuTriggerFor]=\"menu\">\n      <span class=\"dropdown-item-title\">{{ item.title }}</span>\n      <ux-icon class=\"dropdown-item-icon\" name=\"next\"></ux-icon>\n    </button>\n    <ux-menu #menu placement=\"right\" menuClass=\"horizontal-navigation-dropdown-submenu\">\n      @for (subItem of item.children; track subItem) {\n        <button\n          type=\"button\"\n          uxMenuItem\n          [attr.id]=\"subItem.id\"\n          [disabled]=\"subItem.disabled\"\n          [class.selected]=\"subItem.selected\"\n          [attr.aria-selected]=\"subItem.selected\"\n          (click)=\"select(subItem)\"\n          (keydown)=\"keydownHandler($event, subItem)\">\n          <span class=\"dropdown-item-title\">{{ subItem.title }}</span>\n        </button>\n      }\n    </ux-menu>\n  </div>\n}\n\n@if (!item.children || item.children.length === 0) {\n  <div>\n    <button\n      type=\"button\"\n      uxMenuItem\n      [attr.id]=\"item.id\"\n      [disabled]=\"item.disabled\"\n      [class.selected]=\"item.selected\"\n      [attr.aria-selected]=\"item.selected\"\n      (click)=\"select(item)\"\n      (keydown)=\"keydownHandler($event, item)\">\n      <span class=\"dropdown-item-title\">{{ item.title }}</span>\n    </button>\n  </div>\n}","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Injectable, OnDestroy, QueryList } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../../common/operators/index';\nimport { PageHeaderNavigationItemComponent } from './navigation-item/navigation-item.component';\n\n@Injectable()\nexport class PageHeaderNavigationService implements OnDestroy {\n\n    /** Store an instance of the focus key manager */\n    private _focusManager: FocusKeyManager<PageHeaderNavigationItemComponent>;\n\n    /** Store the query list */\n    private _items: QueryList<PageHeaderNavigationItemComponent>;\n\n    /**\n     * Emit when focus changes. We can't directly use the FocusKeyManager\n     * `change` observable as it cannot be instantiate until after the view\n     * has been instantiated.\n     */\n    private readonly _onChange = new Subject<void>();\n\n    /** Unsubscribe on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Make menu items navigable using arrow keys */\n    initialize(items: QueryList<PageHeaderNavigationItemComponent>): void {\n\n        // store the query list for future lookups\n        this._items = items;\n\n        // create new focus key manager with horizontal orientation\n        this._focusManager = new FocusKeyManager<PageHeaderNavigationItemComponent>(items)\n            .withHorizontalOrientation('ltr');\n\n        // listen for changes to the focused item\n        this._focusManager.change.pipe(takeUntil(this._onDestroy)).subscribe(() => this._onChange.next());\n\n        // make the first item tabbable initially\n        this._focusManager.updateActiveItem(0);\n\n        // on changes ensure there is always an active item\n        this._items.changes.subscribe(() => {\n            if (this._items.length > 0 && this._items.toArray().indexOf(this._focusManager.activeItem) === -1) {\n                this._focusManager.updateActiveItem(0);\n            }\n        });\n\n        // emit the initial change\n        this._onChange.next();\n    }\n\n    /** Listen for keyboard events */\n    onKeydown(event: KeyboardEvent): void {\n        this._focusManager.onKeydown(event);\n    }\n\n    /** Get the tab index for this item as an observable */\n    getTabIndex(item: PageHeaderNavigationItemComponent): Observable<number> {\n        return this._onChange.pipe(map(() => this.getItemTabIndex(item)), tick(), takeUntil(this._onDestroy));\n    }\n\n    /** Determine the tab index of a given item */\n    private getItemTabIndex(item: PageHeaderNavigationItemComponent): number {\n\n        // until the focus key manager is set up make everything tabbable\n        if (!this._items) {\n            return 0;\n        }\n\n        // get the index within the query list\n        const index = this._items.toArray().indexOf(item);\n\n        // if it is the current active element then it is tabbable\n        return index === this._focusManager.activeItemIndex ? 0 : -1;\n    }\n\n}","import { FocusableOption } from '@angular/cdk/a11y';\nimport { LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { AfterViewInit, Component, ElementRef, HostListener, inject, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { getIconType, IconType } from '../../../../common/index';\nimport { tick } from '../../../../common/operators/index';\nimport { PageHeaderService } from '../../page-header.service';\nimport type { PageHeaderNavigationItem } from '../navigation.component';\nimport { PageHeaderNavigationService } from '../navigation.service';\n\n@Component({\n    selector: 'ux-page-header-horizontal-navigation-item',\n    templateUrl: './navigation-item.component.html'\n})\nexport class PageHeaderNavigationItemComponent implements AfterViewInit, OnDestroy, FocusableOption {\n    readonly elementRef = inject(ElementRef);\n\n    private readonly _pageHeaderService = inject(PageHeaderService);\n\n    private readonly _navigationService = inject(PageHeaderNavigationService);\n\n    /** Access the data for this dropdown item */\n    @Input() set item(item: PageHeaderNavigationItem) {\n        this._item = item;\n        this._iconType = getIconType(item.icon);\n    }\n\n    get item(): PageHeaderNavigationItem {\n        return this._item;\n    }\n\n    /** Store the secondary state */\n    secondary$: BehaviorSubject<boolean> = this._pageHeaderService.secondary$;\n\n    /** Store the open state of the item dropdown */\n    isOpen: boolean;\n\n    /** Store the item data */\n    _item: PageHeaderNavigationItem;\n\n    /** Store the icon type */\n    _iconType: IconType;\n\n    /** Update the tabindex based on keyboard input */\n    _tabindex: Observable<number> = this._navigationService.getTabIndex(this);\n\n    /** Access the navigation button element */\n    @ViewChild('navigationBtn', { static: false }) navigationBtn: ElementRef;\n\n    /** Unsubscribe when the component is destroyed */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngAfterViewInit(): void {\n        this._pageHeaderService.selected$.pipe(tick(), takeUntil(this._onDestroy)).subscribe(selectedItem => {\n\n            // Update selected state for this item\n            this._pageHeaderService.updateItem(this.item, selectedItem);\n\n            if (selectedItem && this.isOpen) {\n                this.isOpen = false;\n            }\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    focus(): void {\n        this.navigationBtn.nativeElement.focus();\n    }\n\n    select(): void {\n\n        // if the item is disabled or has children then do nothing at this stage\n        if (this.item.disabled || (this.item.children && this._pageHeaderService.secondary$.getValue() === false)) {\n            return;\n        }\n\n        // if autoselect is enabled the first child should be selected when we click on the parent item (this element).\n        // We should remove the selected state on all children as the service will perform the selection\n        // of the first item and handle any routing etc..\n        if (this._pageHeaderService.secondaryNavigationAutoselect && Array.isArray(this.item.children)) {\n            this.item.children.forEach(item => item.selected = false);\n        }\n\n        // otherwise select the current item\n        this._pageHeaderService.select(this.item);\n    }\n\n    @HostListener('keydown', ['$event', '$event.target'])\n    onKeydown(event: KeyboardEvent, target: HTMLElement): void {\n        if (event.keyCode === LEFT_ARROW || event.keyCode === RIGHT_ARROW) {\n            this._navigationService.onKeydown(event);\n        }\n\n        if (event.keyCode === SPACE) {\n            event.preventDefault();\n            target.click();\n        }\n    }\n}\n","@if (_item.children && _item.children.length > 0 && (secondary$ | async) === false) {\n  <div>\n    <button\n      #navigationBtn\n      type=\"button\"\n      [attr.id]=\"_item.id\"\n      [tabindex]=\"_tabindex | async\"\n      [uxMenuTriggerFor]=\"menu\"\n      [disabled]=\"_item.disabled\"\n      role=\"menuitem\"\n      class=\"horizontal-navigation-button\"\n      [class.disabled]=\"_item.disabled\"\n      [class.selected]=\"_item.selected\"\n      [class.open]=\"isOpen\"\n      >\n      <ng-container [ngTemplateOutlet]=\"navigationItemContent\"> </ng-container>\n      <ux-icon class=\"navigation-item-dropdown-icon\" name=\"down\"></ux-icon>\n    </button>\n    <ux-menu\n      #menu\n      menuClass=\"horizontal-navigation-dropdown-menu\"\n      (opened)=\"isOpen = true\"\n      (closed)=\"isOpen = false\"\n      >\n      @for (item of _item?.children; track item) {\n        <ux-page-header-horizontal-navigation-dropdown-item\n          [item]=\"item\"\n          >\n        </ux-page-header-horizontal-navigation-dropdown-item>\n      }\n    </ux-menu>\n  </div>\n}\n\n@if (!_item.children || _item.children.length === 0 || (secondary$ | async)) {\n  @if (_item.routerLink) {\n    <a\n      uxFocusIndicator\n      #navigationBtn\n      [tabindex]=\"_tabindex | async\"\n      [attr.id]=\"_item.id\"\n      role=\"menuitem\"\n      class=\"horizontal-navigation-button\"\n      [class.disabled]=\"_item.disabled\"\n      [class.selected]=\"_item.selected\"\n      [routerLink]=\"_item.routerLink\"\n      [fragment]=\"_item.routerExtras?.fragment\"\n      [queryParams]=\"_item.routerExtras?.queryParams\"\n      [queryParamsHandling]=\"_item.routerExtras?.queryParamsHandling\"\n      [preserveFragment]=\"_item.routerExtras?.preserveFragment\"\n      [skipLocationChange]=\"_item.routerExtras?.skipLocationChange\"\n      [replaceUrl]=\"_item.routerExtras?.replaceUrl\"\n      [state]=\"_item.routerExtras?.state\"\n      >\n      <ng-container [ngTemplateOutlet]=\"navigationItemContent\"> </ng-container>\n    </a>\n  }\n  @if (!_item.routerLink) {\n    <button\n      uxFocusIndicator\n      #navigationBtn\n      type=\"button\"\n      [tabindex]=\"_tabindex | async\"\n      [attr.id]=\"_item.id\"\n      role=\"menuitem\"\n      class=\"horizontal-navigation-button\"\n      [class.disabled]=\"_item.disabled\"\n      [class.selected]=\"_item.selected\"\n      (click)=\"select()\"\n      [disabled]=\"_item.disabled\"\n      >\n      <ng-container [ngTemplateOutlet]=\"navigationItemContent\"> </ng-container>\n    </button>\n  }\n}\n\n<!-- Support all icon types -->\n<ng-template #navigationItemContent>\n  @if (_item.icon) {\n    @if (_iconType !== 'component') {\n      <i\n        class=\"navigation-item-icon\"\n        [ngClass]=\"[_iconType, _item.icon]\"\n        >\n      </i>\n    }\n    @if (_iconType === 'component') {\n      <ux-icon class=\"navigation-item-icon\" [name]=\"_item.icon\">\n      </ux-icon>\n    }\n  }\n\n  <span class=\"navigation-item-label\">{{ _item?.title }}</span>\n</ng-template>\n","import { Directive, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { delay, takeUntil } from 'rxjs/operators';\r\nimport { PageHeaderService } from '../../page-header.service';\r\nimport { PageHeaderNavigationItem } from '../navigation.component';\r\n\r\n@Directive({\r\n    selector: '[uxPageHeaderNavigationSecondaryItem]'\r\n})\r\nexport class PageHeaderNavigationSecondaryItemDirective implements OnInit, OnDestroy {\r\n    private readonly _pageHeaderService = inject(PageHeaderService);\r\n\r\n    @Input('uxPageHeaderNavigationSecondaryItem')\r\n    item: PageHeaderNavigationItem;\r\n\r\n    private readonly _onDestroy = new Subject<void>();\r\n\r\n    ngOnInit() {\r\n\r\n        this._pageHeaderService.selected$.pipe(delay(0), takeUntil(this._onDestroy)).subscribe(next => {\r\n\r\n            // Update selected state for this item\r\n            this._pageHeaderService.updateItem(this.item, next);\r\n\r\n        });\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._onDestroy.next();\r\n        this._onDestroy.complete();\r\n    }\r\n}\r\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  inject,\n  OnDestroy,\n  QueryList,\n  ViewChildren,\n} from '@angular/core';\nimport { NavigationExtras } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, startWith, takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../../../directives/resize/index';\nimport { PageHeaderNavigation, PageHeaderService } from '../page-header.service';\nimport { PageHeaderNavigationItemComponent } from './navigation-item/navigation-item.component';\nimport { PageHeaderNavigationService } from './navigation.service';\n\n@Component({\n  selector: 'ux-page-header-horizontal-navigation',\n  templateUrl: './navigation.component.html',\n  providers: [PageHeaderNavigationService],\n})\nexport class PageHeaderNavigationComponent implements AfterViewInit, OnDestroy {\n  readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  readonly resizeService = inject(ResizeService);\n\n  private readonly _navigationService = inject(PageHeaderNavigationService);\n\n  private readonly _pageHeaderService = inject(PageHeaderService);\n\n  private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n  @ViewChildren(PageHeaderNavigationItemComponent)\n  menuItems: QueryList<PageHeaderNavigationItemComponent>;\n\n  items$: BehaviorSubject<PageHeaderNavigationItem[]> = this._pageHeaderService.items$;\n  indicatorVisible: boolean = false;\n  indicatorX: number = 0;\n  indicatorWidth: number = 0;\n\n  private readonly _onDestroy = new Subject();\n\n  constructor() {\n    this.resizeService\n      .addResizeListener(this.elementRef.nativeElement)\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(this.updateSelectedIndicator.bind(this));\n    this._pageHeaderService.selected$\n      .pipe(takeUntil(this._onDestroy), distinctUntilChanged())\n      .subscribe(this.updateSelectedIndicator.bind(this));\n    this._pageHeaderService.secondary$\n      .pipe(takeUntil(this._onDestroy), distinctUntilChanged())\n      .subscribe(this.updateSelectedIndicator.bind(this));\n  }\n\n  ngAfterViewInit(): void {\n    this.updateSelectedIndicator();\n\n    // setup the page focus key manager\n    this._navigationService.initialize(this.menuItems);\n\n    // add or remove the menubar role if there are not menuitems to remove accessibility errors\n    this.menuItems?.changes\n      .pipe(startWith(this.menuItems.toArray()), takeUntil(this._onDestroy))\n      .subscribe(() => {\n        if (this.menuItems.length > 0) {\n          this.elementRef.nativeElement.setAttribute('role', 'menubar');\n        } else {\n          this.elementRef.nativeElement.removeAttribute('role');\n        }\n      });\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  updateSelectedIndicator(): void {\n    setTimeout(() => {\n      // find the selected item\n      const selected = this.menuItems.find(item => item.item.selected);\n\n      // determine whether or not to show the indicator\n      this.indicatorVisible = !!selected;\n\n      // set the width of the indicator to match the width of the navigation item\n      if (selected) {\n        const styles = getComputedStyle(selected.elementRef.nativeElement);\n\n        this.indicatorX = selected.elementRef.nativeElement.offsetLeft;\n        this.indicatorWidth = parseInt(styles.getPropertyValue('width'));\n      }\n    });\n  }\n}\n\nexport interface PageHeaderNavigationItem {\n  icon?: string;\n  title: string;\n  selected?: boolean;\n  routerLink?: string | unknown[];\n  routerExtras?: NavigationExtras;\n  select?: (item: PageHeaderNavigationItem) => void;\n  children?: PageHeaderNavigationDropdownItem[];\n  parent?: PageHeaderNavigation;\n  disabled?: boolean;\n  id?: string;\n}\n\nexport interface PageHeaderNavigationDropdownItem {\n  title: string;\n  selected?: boolean;\n  routerLink?: string | unknown[];\n  routerExtras?: NavigationExtras;\n  select?: (item: PageHeaderNavigationDropdownItem) => void;\n  children?: PageHeaderNavigationDropdownItem[];\n  parent?: PageHeaderNavigation;\n  disabled?: boolean;\n  id?: string;\n}\n\n// This is an alias for MF use as \"DropdownItem\" doesn't make sense in context with how it is used\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PageHeaderSecondaryNavigationItem extends PageHeaderNavigationDropdownItem {}\n","@for (item of items$ | async; track item) {\n  <ux-page-header-horizontal-navigation-item\n    [item]=\"item\">\n  </ux-page-header-horizontal-navigation-item>\n}\n\n<div class=\"selected-indicator\"\n  [style.opacity]=\"indicatorVisible ? 1 : 0\"\n  [style.margin-left.px]=\"indicatorX\"\n  [style.width.px]=\"indicatorWidth\">\n</div>","import { Component, ContentChild, ContentChildren, EventEmitter, inject, Input, Output, QueryList, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ColorService } from '../../services/color/index';\nimport { Breadcrumb } from '../breadcrumbs/index';\nimport { PageHeaderCustomMenuDirective } from './custom-menu/custom-menu.directive';\nimport { PageHeaderIconMenu } from './interfaces';\nimport { PageHeaderNavigationItem } from './navigation/navigation.component';\nimport { PageHeaderNavigation, PageHeaderService } from './page-header.service';\n\nexport type PageHeaderNavigationAlignment = 'left' | 'right' | 'center';\n\n@Component({\n    selector: 'ux-page-header',\n    exportAs: 'ux-page-header',\n    templateUrl: 'page-header.component.html',\n    providers: [PageHeaderService]\n})\nexport class PageHeaderComponent {\n    private readonly _colorService = inject(ColorService);\n\n    private readonly _pageHeaderService = inject(PageHeaderService);\n\n    /** The path to an image to display as the product logo in the left corner. */\n    @Input() logo: string;\n\n    /** The product acronym to display in the left corner. This will only be displayed if logo is unset; otherwise it will be used as the alt text for the logo. */\n    @Input() header: string;\n\n    /** The optional header to display on the left side of the masthead. */\n    @Input() subheader: string;\n\n    /** The alignment of the primary navigation tabs. */\n    @Input() alignment: PageHeaderNavigationAlignment = 'center';\n\n    /** Determines whether or not to display the page header in the regular or condensed form. */\n    @Input() condensed: boolean = false;\n\n    /** The list of icon menus to display in the top right area of the page header. */\n    @Input() iconMenus: PageHeaderIconMenu[];\n\n    /** Determines whether or not a back button should be visible in the page header. */\n    @Input() backVisible: boolean = true;\n\n    /** The alignment of the secondary navigation tabs. */\n    @Input() secondaryNavigationAlignment: PageHeaderNavigationAlignment = 'center';\n\n    /** If set, the first child item will get selected when the parent item is selected. */\n    @Input()\n    set secondaryNavigationAutoselect(value: boolean) {\n        this._pageHeaderService.secondaryNavigationAutoselect = value;\n    }\n\n    get secondaryNavigationAutoselect(): boolean {\n        return this._pageHeaderService.secondaryNavigationAutoselect;\n    }\n\n    /** The primary navigation tabs. Use the children property in combination with [secondaryNavigation]=\"true\" to include secondary navigation tabs. */\n    @Input()\n    set items(items: PageHeaderNavigationItem[]) {\n        this._pageHeaderService.setItems(items);\n    }\n\n    /** Whether to show a second level of navigation for any items with children. */\n    @Input()\n    set secondaryNavigation(enabled: boolean) {\n        this._pageHeaderService.setSecondaryNavigation(enabled);\n    }\n\n    get secondaryNavigation(): boolean {\n        return this._pageHeaderService.secondary$.getValue();\n    }\n\n    /** The optional set of breadcrumbs to display on the left side of the masthead. */\n    @Input()\n    set crumbs(crumbs: Breadcrumb[]) {\n        this._crumbs = crumbs;\n    }\n\n    get crumbs(): Breadcrumb[] {\n        return this.condensed ? [...this._crumbs, { title: this.header }] : this._crumbs;\n    }\n\n    /**\n     * The style of the breadcrumbs.\n     *   - standard: The breadcrumbs use the same styling as the navigation tabs.\n     *   - small: The breadcrumbs use a smaller font, and case is not adjusted.\n     */\n    @Input() crumbsStyle: 'standard' | 'small' = 'standard';\n\n    /** The logo background color. This can either be the name of a color from the color palette, or a CSS color value. */\n    @Input()\n    set logoBackground(color: string) {\n        this._logoBackground = this._colorService.resolve(color);\n    }\n\n    get logoBackground(): string {\n        return this._logoBackground;\n    }\n\n    /** The logo text color, when a product acronym is specified via header. This can either be the name of a color from the color palette, or a CSS color value. */\n    @Input()\n    set logoForeground(color: string) {\n        this._logoForeground = this._colorService.resolve(color);\n    }\n\n    get logoForeground(): string {\n        return this._logoForeground;\n    }\n\n    get _hasLogoClick(): boolean {\n        return this.logoClick.observers.length > 0;\n    }\n\n    /** Emit whenever the back button is clicked */\n    @Output() backClick = new EventEmitter<MouseEvent>();\n\n    /** Emit whenever the product logo in the left corner is clicked. */\n    @Output() logoClick = new EventEmitter<Event>();\n\n    /** Access a custom subheader template */\n    @ContentChild('subheader', { static: false }) subheaderTemplate: TemplateRef<void>;\n\n    /** Define a custom logo template  */\n    @ContentChild('logoTemplate', { static: false }) logoTemplate: TemplateRef<void>;\n\n    /** Define a leading content secondary navigation template */\n    @ContentChild('secondaryNavigationLeadingContent', { static: false }) secondaryNavigationLeadingContentTemplate: TemplateRef<void>;\n\n    /** Define a trailing content secondary navigation template */\n    @ContentChild('secondaryNavigationTrailingContent', { static: false }) secondaryNavigationTrailingContentTemplate: TemplateRef<void>;\n\n    /** Access all the custom menu TemplateRefs */\n    @ContentChildren(PageHeaderCustomMenuDirective, { read: TemplateRef }) customMenus: QueryList<TemplateRef<void>>;\n\n    /** The currently selected page header item */\n    selected$: BehaviorSubject<PageHeaderNavigationItem> = this._pageHeaderService.selected$;\n\n    /** The currently selected root menu item - this may be different from selected$ if a child menu item is selected */\n    selectedRoot$: BehaviorSubject<PageHeaderNavigationItem> = this._pageHeaderService.selectedRoot$;\n\n    private _crumbs: Breadcrumb[] = [];\n    private _logoBackground: string;\n    private _logoForeground: string;\n\n    select(item: PageHeaderNavigation, navigate: boolean): void {\n        this._pageHeaderService.select(item, navigate);\n    }\n}\n","<div class=\"ux-page-header\" [class.page-header-condensed]=\"condensed\" role=\"banner\">\n\n  @if (!condensed) {\n    <div class=\"page-header-content\">\n      <!-- Logo/product acronym -->\n      <div uxFocusIndicator (keydown.enter)=\"logoClick.emit($event)\" [attr.tabindex]=\"_hasLogoClick ? 0: -1\"\n        [class.page-header-logo-template]=\"logoTemplate\" [class.clickable]=\"_hasLogoClick\"\n        class=\"page-header-logo-container\"\n        role=\"presentation\" [style.backgroundColor]=\"logoBackground\" [style.color]=\"logoForeground\" (click)=\"logoClick.emit($event)\">\n        @if (logo && !logoTemplate) {\n          <img [attr.src]=\"logo\" [alt]=\"header\" class=\"page-header-logo\">\n        }\n        @if (header && !logo && !logoTemplate) {\n          <h1 class=\"page-header-acronym\">{{header}}</h1>\n        }\n        @if (logoTemplate) {\n          <ng-container [ngTemplateOutlet]=\"logoTemplate\"></ng-container>\n        }\n      </div>\n      <!-- Sub-title -->\n      @if (subheader || subheaderTemplate) {\n        <div class=\"page-header-subtitle-container\">\n          @if (subheader) {\n            <span class=\"page-header-subtitle\">{{subheader}}</span>\n          }\n          <ng-container [ngTemplateOutlet]=\"subheaderTemplate\"></ng-container>\n        </div>\n      }\n      <div class=\"page-header-state-container\" role=\"navigation\">\n        <!-- Back button -->\n        @if (backVisible === true) {\n          <button uxFocusIndicator type=\"button\" class=\"page-header-back-button\" (click)=\"backClick.emit($event)\" aria-label=\"Go Back\">\n            <ux-icon name=\"previous\" class=\"text-primary\"></ux-icon>\n          </button>\n        }\n        <!-- Breadcrumbs and header -->\n        <div class=\"page-header-title-container\">\n          @if (crumbs && crumbs.length > 0) {\n            <ux-breadcrumbs\n              [class.ux-breadcrumbs-small]=\"crumbsStyle === 'small'\"\n            [crumbs]=\"crumbs\"></ux-breadcrumbs>\n          }\n          <h1 class=\"page-header-title\">{{header}}</h1>\n        </div>\n      </div>\n      <!-- Primary navigation -->\n      <div class=\"page-header-navigation\" [ngClass]=\"alignment\" role=\"navigation\" aria-label=\"Primary Navigation\">\n        <ux-page-header-horizontal-navigation></ux-page-header-horizontal-navigation>\n      </div>\n      <!-- Icon menus -->\n      <div class=\"page-header-icon-menus\" role=\"toolbar\">\n        @for (menu of customMenus; track menu) {\n          <ng-container [ngTemplateOutlet]=\"menu\"></ng-container>\n        }\n        @for (menu of iconMenus; track menu) {\n          <ux-page-header-icon-menu [menu]=\"menu\"></ux-page-header-icon-menu>\n        }\n      </div>\n    </div>\n  }\n\n  <!-- Display This Section Optimized for Condensed Mode -->\n  @if (condensed) {\n    <div class=\"page-header-condensed-content\">\n      <div class=\"page-header-breadcrumbs\" role=\"navigation\">\n        <ux-breadcrumbs [crumbs]=\"crumbs\"></ux-breadcrumbs>\n      </div>\n      <div class=\"page-header-navigation\" [ngClass]=\"alignment\" role=\"navigation\" aria-label=\"Primary Navigation\">\n        <!-- The Top Navigation Options -->\n        <ux-page-header-horizontal-navigation></ux-page-header-horizontal-navigation>\n      </div>\n      <div class=\"page-header-icon-menus\" role=\"toolbar\">\n        @for (menu of customMenus; track menu) {\n          <ng-container [ngTemplateOutlet]=\"menu\"></ng-container>\n        }\n        @for (menu of iconMenus; track menu) {\n          <ux-page-header-icon-menu [menu]=\"menu\"></ux-page-header-icon-menu>\n        }\n      </div>\n    </div>\n  }\n\n</div>\n\n<!-- Secondary Header Section -->\n@if (secondaryNavigation && ((selectedRoot$ | async) !== (selected$ | async))) {\n  <div class=\"ux-page-header-secondary\">\n    <!-- Secondary Navigation Leading Content -->\n    @if (secondaryNavigationLeadingContentTemplate || secondaryNavigationTrailingContentTemplate) {\n      <div class=\"page-header-secondary-leading-content\">\n        <ng-container [ngTemplateOutlet]=\"secondaryNavigationLeadingContentTemplate\"></ng-container>\n      </div>\n    }\n    <!-- Secondary Navigation (children of top level items) -->\n    <div [ngClass]=\"['page-header-navigation', secondaryNavigationAlignment]\" role=\"navigation\">\n      @if ((selectedRoot$ | async)?.children; as children) {\n        <ux-tabset [manual]=\"true\">\n          @for (child of children; track child) {\n            <ux-tab\n              [heading]=\"child.title\"\n              [route]=\"child.routerLink\"\n              [id]=\"child.id\"\n              [routerLinkExtras]=\"child.routerExtras\"\n              [active]=\"child === (selected$ | async)\"\n              (activated)=\"select(child, false)\"\n              [uxPageHeaderNavigationSecondaryItem]=\"child\"\n              [disabled]=\"child.disabled\">\n            </ux-tab>\n          }\n        </ux-tabset>\n      }\n    </div>\n    <!-- Secondary Navigation Trialing Content -->\n    @if (secondaryNavigationTrailingContentTemplate) {\n      <div class=\"page-header-secondary-trailing-content\">\n        <ng-container [ngTemplateOutlet]=\"secondaryNavigationTrailingContentTemplate\"></ng-container>\n      </div>\n    }\n  </div>\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { BreadcrumbsModule } from '../breadcrumbs/index';\nimport { IconModule } from '../icon/index';\nimport { MenuModule } from '../menu/index';\nimport { TabsetModule } from '../tabset/index';\nimport { PageHeaderCustomMenuDirective } from './custom-menu/custom-menu.directive';\nimport { PageHeaderIconMenuComponent } from './icon-menu/icon-menu.component';\nimport { PageHeaderNavigationDropdownItemComponent } from './navigation/navigation-dropdown-item/navigation-dropdown-item.component';\nimport { PageHeaderNavigationItemComponent } from './navigation/navigation-item/navigation-item.component';\nimport { PageHeaderNavigationSecondaryItemDirective } from './navigation/navigation-secondary-item/navigation-secondary-item.directive';\nimport { PageHeaderNavigationComponent } from './navigation/navigation.component';\nimport { PageHeaderComponent } from './page-header.component';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        BreadcrumbsModule,\n        ColorServiceModule,\n        CommonModule,\n        IconModule,\n        MenuModule,\n        ResizeModule,\n        TabsetModule,\n        RouterModule\n    ],\n    exports: [PageHeaderComponent, PageHeaderCustomMenuDirective],\n    declarations: [\n        PageHeaderComponent,\n        PageHeaderIconMenuComponent,\n        PageHeaderCustomMenuDirective,\n        PageHeaderNavigationComponent,\n        PageHeaderNavigationItemComponent,\n        PageHeaderNavigationDropdownItemComponent,\n        PageHeaderNavigationSecondaryItemDirective,\n    ],\n})\nexport class PageHeaderModule {}\n"," \nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const PAGINATION_CONTROL_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => PaginationComponent),\n  multi: true,\n};\n\n@Component({\n  selector: 'ux-pagination',\n  templateUrl: './pagination.component.html',\n  providers: [PAGINATION_CONTROL_VALUE_ACCESSOR],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginationComponent implements OnInit, ControlValueAccessor {\n  private readonly _changeDetector = inject(ChangeDetectorRef);\n\n  /** Specify if we should show the next and previous buttons */\n  @Input() directionButtons: boolean = true;\n\n  /** Limit the number of pages shown at any given time */\n  @Input() maxSize: number = 5;\n\n  /** Specify if the component should be disabled */\n  @Input() disabled: boolean = false;\n\n  /** Apply classes to the bootstrap pagination element */\n  @Input('class') classes: string;\n\n  /** Allow custom class to be added to page buttons */\n  @Input() pageBtnClass: string;\n\n  /** Aria Label for the component navigation */\n  @Input('aria-label') ariaLabel: string = 'Pagination Navigation';\n\n  /** Aria label for the previous button */\n  @Input() previousAriaLabel: string = 'Navigate to the previous page';\n\n  /** Aria label for the next button */\n  @Input() nextAriaLabel: string = 'Navigate to the next page';\n\n  /** Specify the index of the active page */\n  @Input() set page(page: number) {\n    // do nothing if the page has not changed\n    if (page === this._page) {\n      return;\n    }\n\n    this._page = page;\n    this.pages = this.getPages();\n\n    // mark this component as changed\n    this.onChange(this.page);\n  }\n\n  get page(): number {\n    return this._page;\n  }\n\n  /** Define a custom template for the previous button */\n  @Input() previousBtnTemplate: TemplateRef<void>;\n\n  /** Define a custom template for the next button */\n  @Input() nextBtnTemplate: TemplateRef<void>;\n\n  /** Specify the page size */\n  @Input() set itemsPerPage(pagesize: number) {\n    this._pagesize = pagesize;\n    this.pages = this.getPages();\n  }\n\n  /** Specify how many items there are in total */\n  @Input() set totalItems(total: number) {\n    this._total = total;\n    this.pages = this.getPages();\n  }\n\n  /** Emit the current page number */\n  @Output() pageChange = new EventEmitter<number>();\n\n  /** Emit the total number of pages */\n  @Output() numPages = new EventEmitter<number>();\n\n  /** Store a list of pages to display in the UI */\n  pages: ReadonlyArray<Page> = [];\n\n  /** ControlValueAccessor functions */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched: Function = () => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange: Function = () => {};\n\n  isKeyboardEvent: boolean = false;\n\n  private _page: number = 1;\n  private _total: number = 100;\n  private _pagesize: number = 10;\n\n  get pageCount(): number {\n    return Math.ceil(this._total / this._pagesize);\n  }\n\n  ngOnInit(): void {\n    this.pages = this.getPages();\n  }\n\n  select(index: number): void {\n    // find the page we want to go to\n    const target = this.pages.find(page => page.index === index);\n\n    // if the page is out of bounds then do nothing\n    if (!target) {\n      return;\n    }\n\n    // mark this component as touched\n    this.onTouched();\n\n    // set this as the current page\n    this.page = target.index;\n\n    // update the visible pages\n    this.pages = this.getPages();\n\n    // emit the current page\n    this.pageChange.emit(this.page);\n  }\n\n  trackByFn(_index: number, item: Page): number {\n    return item.index;\n  }\n\n  registerOnChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this._changeDetector.markForCheck();\n  }\n\n  writeValue(page: number): void {\n    this.page = page;\n    this._changeDetector.markForCheck();\n  }\n\n  private getPages(): Page[] {\n    // create a new array to store the pages\n    const pages: Page[] = [];\n\n    // create all possible pages\n    for (let index = 1; index <= this.pageCount; index++) {\n      pages.push({ index, visible: this.isPageVisible(index) });\n    }\n\n    // emit the number of pages\n    this.numPages.emit(this.pageCount);\n\n    return pages;\n  }\n\n  private isPageVisible(index: number): boolean {\n    // if we do not have a max size specified or the number of pages is less than the max size then it is always visible\n    if (!this.maxSize || this.pageCount <= this.maxSize) {\n      return true;\n    }\n\n    // find the starting position\n    let start = Math.max(1, Math.ceil(this.page - this.maxSize / 2));\n    const end = Math.min(start + this.maxSize, this.pageCount + 1);\n\n    // if the range is less than the max size we need to adjust the starting point\n    const range = end - start;\n\n    if (range < this.maxSize) {\n      start = start - (this.maxSize - range);\n    }\n\n    // if the item equals the start position or is less than the end position then show it\n    return index >= start && index < end;\n  }\n}\n\nexport interface Page {\n  index: number;\n  visible: boolean;\n}\n","<nav role=\"navigation\" [attr.aria-label]=\"ariaLabel\">\n  <ul #container class=\"pagination\"\n    [ngClass]=\"classes\"\n    direction=\"horizontal\"\n    (blur)=\"isKeyboardEvent = false\"\n    (keydown.ArrowLeft)=\"select(page - 1); isKeyboardEvent = true\"\n    (keydown.ArrowRight)=\"select(page + 1); isKeyboardEvent = true\"\n    (keydown.Home)=\"select(1); isKeyboardEvent = true; $event.preventDefault()\"\n    (keydown.End)=\"select(pageCount); isKeyboardEvent = true; $event.preventDefault()\">\n\n    @if (directionButtons) {\n      <li class=\"pagination-prev page-item\"\n        uxFocusIndicator\n        [programmaticFocusIndicator]=\"true\"\n        [checkChildren]=\"true\"\n        [class.disabled]=\"page === 1 || disabled\">\n        <button class=\"page-link\"\n          [tabindex]=\"page === 1 || disabled ? -1 : 0\"\n          [attr.aria-label]=\"previousAriaLabel\"\n          [ngClass]=\"pageBtnClass\"\n          (click)=\"select(page - 1)\"\n          (keydown.enter)=\"select(page - 1)\">\n          <ng-container [ngTemplateOutlet]=\"previousBtnTemplate || defaultPreviousBtnTemplate\"></ng-container>\n        </button>\n      </li>\n    }\n\n    @for (pg of pages; track trackByFn($index, pg)) {\n      @if (pg.visible) {\n        <li\n          uxFocusIndicator\n          [programmaticFocusIndicator]=\"true\"\n          [checkChildren]=\"true\"\n          [class.disabled]=\"disabled\"\n          [attr.aria-setsize]=\"pageCount\"\n          [attr.aria-posinset]=\"pg.index\"\n          [class.active]=\"page === pg.index\"\n          class=\"pagination-page page-item\">\n          <button class=\"page-link\"\n            tabindex=\"0\"\n            [ngClass]=\"pageBtnClass\"\n            [focusIf]=\"isKeyboardEvent && page === pg.index\"\n            [attr.aria-current]=\"page === pg.index\"\n            (click)=\"select(pg.index)\"\n            (keydown.enter)=\"select(pg.index)\">\n            {{ pg.index }}\n          </button>\n        </li>\n      }\n    }\n\n    @if (directionButtons) {\n      <li class=\"pagination-next page-item\"\n        uxFocusIndicator\n        [programmaticFocusIndicator]=\"true\"\n        [checkChildren]=\"true\"\n        [class.disabled]=\"page === pageCount || disabled\">\n        <button class=\"page-link\"\n          [tabindex]=\"page === pageCount || disabled ? -1 : 0\"\n          [attr.aria-label]=\"nextAriaLabel\"\n          [ngClass]=\"pageBtnClass\"\n          (click)=\"select(page + 1)\"\n          (keydown.enter)=\"select(page + 1)\">\n          <ng-container [ngTemplateOutlet]=\"nextBtnTemplate || defaultNextBtnTemplate\"></ng-container>\n        </button>\n      </li>\n    }\n  </ul>\n</nav>\n\n<ng-template #defaultPreviousBtnTemplate>\n  <ux-icon class=\"pagination-prev-icon-default\" name=\"previous\"></ux-icon>\n</ng-template>\n\n<ng-template #defaultNextBtnTemplate>\n  <ux-icon class=\"pagination-next-icon-default\" name=\"next\"></ux-icon>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/index';\nimport { IconModule } from '../icon/index';\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        CommonModule,\n        FocusIfModule,\n        IconModule,\n    ],\n    declarations: [\n        PaginationComponent\n    ],\n    exports: [\n        PaginationComponent\n    ]\n})\nexport class PaginationModule { }\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, inject, OnDestroy, Output } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n    selector: '[segmentFocus],[segmentBlur]',\n})\nexport class PartitionMapSegmentEventsDirective implements AfterViewInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    /** Emit when the segment receives focus */\n    @Output() segmentFocus = new EventEmitter<FocusEvent>();\n\n    /** Emit when the segment is blurred */\n    @Output() segmentBlur = new EventEmitter<FocusEvent>();\n\n    /** Unsubscribe from observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngAfterViewInit(): void {\n        // Get the parent segment element\n        // Note we cannot use DI to get the element as this is a template\n        // and the context has no knowledge of the partition map template\n        const segment = this.getSegmentElement();\n\n        if (segment) {\n            fromEvent<FocusEvent>(segment, 'focus')\n                .pipe(takeUntil(this._onDestroy))\n                .subscribe(event => this.segmentFocus.emit(event));\n\n            fromEvent<FocusEvent>(segment, 'blur')\n                .pipe(takeUntil(this._onDestroy))\n                .subscribe(event => this.segmentBlur.emit(event));\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Find the parent element that is a partition map segment\n     */\n    private getSegmentElement(): HTMLElement {\n        let ancestor = (this._elementRef.nativeElement as HTMLElement).parentElement;\n\n        while (ancestor !== null) {\n            if (ancestor.classList.contains('partition-map-segment')) {\n                return ancestor;\n            }\n            ancestor = ancestor.parentElement;\n        }\n    }\n}","/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n} from '@angular/core';\nimport {\n  hierarchy,\n  HierarchyRectangularNode,\n  partition,\n  scaleLinear,\n  select,\n  Selection,\n  transition,\n} from 'd3';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ContrastService, FocusIndicatorOriginService } from '../../directives/accessibility/index';\nimport { ResizeService } from '../../directives/resize/index';\nimport { ColorService, ThemeColor } from '../../services/color/index';\n\ninterface SegmentCacheData {\n  x?: number;\n  width?: number;\n}\n\n@Component({\n  selector: 'ux-partition-map',\n  templateUrl: './partition-map.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: 'tree',\n    'aria-orientation': 'vertical',\n  },\n})\nexport class PartitionMapComponent implements OnInit, OnDestroy {\n  private readonly _colorService = inject(ColorService);\n\n  private readonly _elementRef = inject(ElementRef);\n\n  private readonly _changeDetector = inject(ChangeDetectorRef);\n\n  private readonly _ngZone = inject(NgZone);\n\n  private readonly _focusOrigin = inject(FocusIndicatorOriginService);\n\n  private readonly _contrastRatio = inject(ContrastService);\n\n  private readonly _liveAnnouncer = inject(LiveAnnouncer);\n\n  private readonly _resizeService = inject(ResizeService);\n\n  private _segmentCache = new WeakMap<PartitionMapSegment, SegmentCacheData>();\n\n  /** Define the colors to be used for each row and the order they should appear. */\n  @Input() set colors(colors: (string | ThemeColor)[][]) {\n    this._colors = colors;\n\n    // clear the save color mappings\n    this._segmentColors.clear();\n  }\n\n  /** Determine the pixel height of collapsed segments. */\n  @Input() collapsedHeight: number = 40;\n\n  /** Define a minimum desired pixel width for a segment. */\n  @Input() minSegmentWidth: number = 5;\n\n  /** Define the dataset to display in the chart. */\n  @Input() set dataset(dataset: Readonly<PartitionMapSegment>) {\n    // store the current dataset\n    this._dataset = dataset;\n\n    // clear any existing color assignments\n    this._segmentColors.clear();\n\n    // update the segment layout\n    this.setDataset(dataset);\n  }\n\n  get dataset(): Readonly<PartitionMapSegment> {\n    return this._dataset;\n  }\n\n  /** Define the currently selected item. */\n  @Input() set selected(selected: PartitionMapSegment) {\n    // if this is set before the dataset is process then store it to be selected later\n    if (this._segments.length === 0) {\n      this._awaitingSelection = selected;\n      return;\n    }\n\n    // perform the selection\n    this.select(this.getHierarchyNodeFromSegment(selected));\n  }\n\n  /** Define the function that will return the aria announcement for a given segment. */\n  @Input() segmentAnnouncement: (info: PartitionMapSegmentAnnouncementInfo) => string =\n    this.defaultSegmentAnnouncement;\n\n  /** Emits whenever a segment is selected. */\n  @Output() selectedChange = new EventEmitter<PartitionMapSegment>();\n\n  /** Access a if provided custom template */\n  @ContentChild('partitionMapSegment', { static: false })\n  segmentTemplate: TemplateRef<PartitionMapCustomSegmentContext>;\n\n  /** Store the processed segments */\n  _segments: HierarchyRectangularNode<PartitionMapSegment>[] = [];\n\n  /** Store the current dataset */\n  private _dataset: Readonly<PartitionMapSegment>;\n\n  /** Store the specified color sequences */\n  private _colors: (string | ThemeColor)[][] = [[]];\n\n  /** Store the currently selected segment */\n  private _selected: HierarchyRectangularNode<PartitionMapSegment>;\n\n  /** Store the assigned colors for each segment */\n  private readonly _segmentColors = new Map<string, string>();\n\n  /** Store the visible x scale */\n  private readonly _x = scaleLinear().range([0, 100]);\n\n  /** Store the visible y scale */\n  private readonly _y = scaleLinear().range([0, 100]);\n\n  /** Store the visible d3 segments */\n  private _segmentsSelection: Selection<\n    HTMLDivElement,\n    HierarchyRectangularNode<PartitionMapSegment>,\n    HTMLElement,\n    {}\n  >;\n\n  /** Store the current focusable segment */\n  private _focusableSegment: HierarchyRectangularNode<PartitionMapSegment>;\n\n  /** Store an item awaiting selection */\n  private _awaitingSelection: PartitionMapSegment;\n\n  /** Store the width of the chart on resize to avoid any reflow */\n  private _width: number = this._elementRef.nativeElement.offsetWidth;\n\n  /** Store the height of the chart on resize to avoid any reflow */\n  private _height: number = this._elementRef.nativeElement.offsetHeight;\n\n  /** Flag to determine when the inputs have all been bound */\n  private _initialized = false;\n\n  /** Unsubscribe from any observables on destroy */\n  private readonly _onDestroy = new Subject<void>();\n\n  ngOnInit(): void {\n    this._resizeService\n      .addResizeListener(this._elementRef.nativeElement)\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(dimensions => {\n        this._width = dimensions.width;\n        this._height = dimensions.height;\n        this._changeDetector.detectChanges();\n\n        // set our new ranges\n        if (this._selected) {\n          this._x.domain([\n            this.getSegmentX(this._selected),\n            this.getSegmentX(this._selected) + this.getSegmentWidth(this._selected),\n          ]);\n          this._y.domain([this._selected.y0, 1]).range([this.getTotalCollapsedHeight(), 100]);\n        }\n\n        // render the chart to ensure positions and sizes are correct\n        this.updateSegments();\n      });\n\n    this._initialized = true;\n\n    // Run again so that the colors get applied\n    this._changeDetector.detectChanges();\n  }\n\n  ngOnDestroy(): void {\n    this._resizeService.removeResizeListener(this._elementRef.nativeElement);\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  /** Handle segment clicks */\n  _onSegmentSelect(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if the clicked node is already selected, navigate to the parent node\n    this.select(this._isSelected(segment) && segment.parent ? segment.parent : segment);\n  }\n\n  /** Get the background color for a given segment */\n  _getBackgroundColor(segment: HierarchyRectangularNode<PartitionMapSegment>): string {\n    // This can be called before `colors` is initialized, in which case return the default color\n    if (!this._initialized) {\n      return '#fff';\n    }\n\n    // each segment has a determinable color key based on the name and depth\n    const key = `${segment.data.name} - ${segment.depth}`;\n\n    // check if a segment with the same name (and depth) has previously\n    if (this._segmentColors.has(key)) {\n      return this._segmentColors.get(key);\n    }\n\n    // get the corresponding row of colors\n    const sequence = this.getColorSequence(segment.depth);\n\n    // if the sequence has not been specified return a default of white\n    if (!sequence || sequence.length === 0) {\n      return '#fff';\n    }\n\n    // get siblings\n    const siblings = this.getAllSiblings(segment);\n\n    // get the previous sibling if there is one\n    const sibling = siblings[siblings.indexOf(segment) - 1];\n\n    // if there is a previous sibling then get its color and use the next one in the sequence\n    if (sibling) {\n      const index = sequence.indexOf(this._getBackgroundColor(sibling));\n      const color = sequence[(index + 1) % sequence.length];\n\n      // store the color by key\n      this._segmentColors.set(key, color);\n\n      return color;\n    }\n\n    // store the color by key\n    this._segmentColors.set(key, sequence[0]);\n\n    // if there is no previous sibling then simply return the first color in the sequence\n    return sequence[0];\n  }\n\n  /** Get the tab index of a segment */\n  _getTabIndex(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    return segment === this._focusableSegment ? 0 : -1;\n  }\n\n  /** Shift focus to the parent segment */\n  _focusParent(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if there is no parent (ie, we are the root segment) then retain focus\n    if (!segment.parent) {\n      return;\n    }\n\n    // otherwise focus the parent\n    this.focusSegment(segment.parent);\n  }\n\n  /** Shift focus to the child segment */\n  _focusChild(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if there are no children (ie, we are a leaf segment) then retain focus\n    if (!segment.children) {\n      return;\n    }\n\n    // find the first visible child\n    const child = segment.children.find(_segment => this.isVisible(_segment));\n\n    // otherwise focus the first visible child\n    if (child) {\n      this.focusSegment(child);\n    }\n  }\n\n  /** Shift focus to the sibling segment */\n  _focusSibling(segment: HierarchyRectangularNode<PartitionMapSegment>, delta: number): void {\n    // if we are the root node then do nothing\n    if (!segment.parent) {\n      return;\n    }\n\n    // get a list of all the siblings (at the same row regardless of the same parent)\n    const siblings = this.getAllSiblings(segment);\n\n    // get the index of the segment in the list of siblings\n    const index = siblings.indexOf(segment);\n\n    // get the target sibling\n    const sibling = siblings[index + delta];\n\n    // ensure the sibling is visible otherwise we can't select it\n    if (!sibling || !this.isVisible(sibling)) {\n      return;\n    }\n\n    // otherwise focus the sibling\n    this.focusSegment(sibling);\n  }\n\n  _focusFirstSibling(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if we are the root node then do nothing\n    if (!segment.parent) {\n      return;\n    }\n\n    // get a list of all the siblings (at the same row regardless of the same parent)\n    const siblings = this.getAllSiblings(segment);\n\n    // find the first visible sibling\n    const sibling = siblings.find(_sibling => this.isVisible(_sibling));\n\n    // ensure there is a sibling\n    if (!sibling) {\n      return;\n    }\n\n    // otherwise focus the sibling\n    this.focusSegment(sibling);\n  }\n\n  _focusLastSibling(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if we are the root node then do nothing\n    if (!segment.parent) {\n      return;\n    }\n\n    // get a list of all the siblings (at the same row regardless of the same parent)\n    const siblings = this.getAllSiblings(segment);\n\n    // find the last visible sibling\n    const sibling = siblings.reverse().find(_sibling => this.isVisible(_sibling));\n\n    // ensure there is a sibling\n    if (!sibling) {\n      return;\n    }\n\n    // otherwise focus the sibling\n    this.focusSegment(sibling);\n  }\n\n  /** Determine if a given segment is currently collapsed */\n  _isCollapsed(segment: HierarchyRectangularNode<PartitionMapSegment>): boolean {\n    return this._selected && segment.depth < this._selected.depth;\n  }\n\n  /** Determine if a given segment is currently selected */\n  _isSelected(segment: HierarchyRectangularNode<PartitionMapSegment>): boolean {\n    return this._selected === segment;\n  }\n\n  /** Get the contast color class for the segment */\n  _getContrastColor(segment: HierarchyRectangularNode<PartitionMapSegment>): string {\n    const backgroundColor = this._getBackgroundColor(segment);\n    const lightColor = ThemeColor.parse('#fff');\n    const darkColor = ThemeColor.parse('#000');\n    const color = this._contrastRatio.getContrastColor(\n      ThemeColor.parse(backgroundColor),\n      lightColor,\n      darkColor\n    );\n\n    return color === lightColor ? 'partition-map-segment-light' : 'partition-map-segment-dark';\n  }\n\n  /** Provide an aria announcement when the node is focused */\n  _onFocus(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // get all ancestors\n    const ancestors = segment.ancestors().map(ancestor => ancestor.data);\n\n    // get the current node and the parent nodes\n    const [item, ...parents] = ancestors;\n\n    // get the hierarchy node data from the item\n    const hierarchichalItem = this.getHierarchyNodeFromSegment(item);\n\n    // get the function that creates the announcement\n    const announcement = this.segmentAnnouncement({\n      item,\n      parents,\n      value: this._getSegmentValue(segment.data),\n      collapsed: this._isCollapsed(hierarchichalItem),\n      selected: this._isSelected(hierarchichalItem),\n    });\n\n    // make aria announcement\n    this._liveAnnouncer.announce(announcement);\n  }\n\n  /** Determine if the content is smaller than the width of an ellipsis */\n  _getSegmentContentHidden(segment: HierarchyRectangularNode<PartitionMapSegment>): boolean {\n    // get the width of the segment as a pixel value\n    const width = (this._width / 100) * this.getNormalizedSegmentWidth(segment);\n\n    // if the width is less than 50 px hide the content\n    return width < 50;\n  }\n\n  /** Get the value of a segment based on the accumulation of all child values */\n  _getSegmentValue(segment: PartitionMapSegment): number {\n    // it it has a value then return the value\n    // eslint-disable-next-line no-prototype-builtins\n    if (segment.hasOwnProperty('value')) {\n      return (segment as PartitionMapSegmentWithValue).value;\n    }\n\n    return (segment as PartitionMapSegmentWithChildren).children.reduce(\n      (value, child) => value + this._getSegmentValue(child),\n      0\n    );\n  }\n\n  _getContext(\n    segment: HierarchyRectangularNode<PartitionMapSegment>\n  ): PartitionMapCustomSegmentContext {\n    const context: PartitionMapCustomSegmentContext = {\n      segment: segment.data,\n      value: this._getSegmentValue(segment.data),\n      color: this._getBackgroundColor(segment),\n      expanded: !this._isCollapsed(segment),\n      depth: segment.depth,\n      children: [],\n    };\n\n    // map the children to their contexts\n    if (segment.children) {\n      context.children = segment.children.map(this._getContext.bind(this));\n    }\n\n    return context;\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  /** Convert the public facing data structure into the layout format we require */\n  private setDataset(dataset: Readonly<PartitionMapSegment>): void {\n    // convert the segments to a hierarchichal structure\n    const segmentHierarchy = hierarchy(dataset).sum(this.getSegmentValue); // calculate segment values based on their children\n\n    // store the processed segments\n    const root = partition()(segmentHierarchy) as HierarchyRectangularNode<PartitionMapSegment>;\n\n    // store the flattened form of the segments\n    this._segments = root.descendants();\n\n    // mark the root node as focusable\n    this._focusableSegment = root;\n\n    // we need to run change detection here so the `*ngFor` will update and add all the segments to the DOM\n    this._changeDetector.detectChanges();\n\n    // select all the segments within the chart\n    this._segmentsSelection = select(this._elementRef.nativeElement)\n      .selectAll('.partition-map-segment')\n      .data(this._segments) as Selection<\n      HTMLDivElement,\n      HierarchyRectangularNode<PartitionMapSegment>,\n      HTMLElement,\n      {}\n    >;\n\n    // set the correct sizing and position of the segments\n    this.updateSegments();\n\n    // if there is an item waiting to be selected then select it\n    if (this._awaitingSelection) {\n      // select the desired segment\n      this.select(this.getHierarchyNodeFromSegment(this._awaitingSelection));\n\n      // clear the pending selection in case the dataset changes we don't want to attempt another selection\n      this._awaitingSelection = null;\n    }\n  }\n\n  /** Update the size and position of the segments */\n  private updateSegments(): void {\n    // if the chart has not yet been initialised do nothing\n    if (!this._segmentsSelection) {\n      return;\n    }\n\n    // clear the segment cache\n    this._segmentCache = new WeakMap();\n\n    // perform the chart positioning and sizing\n    this._segmentsSelection\n      .style('left', data => this.getNormalizedSegmentX(data) + '%')\n      .style('top', data => this.getNormalizedSegmentY(data) + '%')\n      .style('width', data => this.getNormalizedSegmentWidth(data) + 0.01 + '%')\n      .style('height', data => this.getNormalizedSegmentHeight(data) + '%')\n      .style('padding-right', data => this.getSegmentPaddingRight(data) + '%')\n      .style('padding-left', data => this.getSegmentPaddingLeft(data) + '%');\n  }\n\n  private cacheSegment(segment: PartitionMapSegment, data: SegmentCacheData): void {\n    // get any existing cache data\n    const existing = this._segmentCache.get(segment) ?? {};\n\n    // store the new data\n    this._segmentCache.set(segment, { ...existing, ...data });\n  }\n\n  private getSegmentCache(\n    segment: PartitionMapSegment,\n    key: keyof SegmentCacheData\n  ): number | null {\n    return this._segmentCache.get(segment)?.[key];\n  }\n\n  /**\n   * Get the X position of a given segment. The X position can be determined\n   * by calculating the width of every sibling segment to the left of it\n   */\n  private getSegmentX(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // if root node then return the position\n    if (!segment.parent) {\n      return segment.x0;\n    }\n\n    const cachedX = this.getSegmentCache(segment.data, 'x');\n\n    if (cachedX !== undefined) {\n      return cachedX;\n    }\n\n    // set initial start position equal to that of the parent\n    let accumulation = this.getSegmentX(segment.parent);\n\n    // iterate each previous sibling to accumulate the widths\n    for (const sibling of segment.parent.children) {\n      // if we have reached the current node then return all previous widths\n      if (sibling === segment) {\n        this.cacheSegment(segment.data, { x: accumulation });\n        return accumulation;\n      }\n\n      // keep a tally of all the widths of previous siblings\n      accumulation += this.getSegmentWidth(sibling);\n    }\n  }\n\n  /** Calculate width based of each segment */\n  private getSegmentWidth(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // if root node then return 1 always\n    if (!segment.parent) {\n      return 1;\n    }\n\n    const cachedWidth = this.getSegmentCache(segment.data, 'width');\n\n    if (cachedWidth !== undefined) {\n      return cachedWidth;\n    }\n\n    // get width of parent\n    const parentOffset =\n      this.getSegmentWidth(segment.parent) / (segment.parent.x1 - segment.parent.x0);\n\n    // get the original width of the segment\n    const width = segment.x1 - segment.x0;\n\n    // if the item is a descendant of the selected item then apply the modifier\n    if (this.isDescendantOfSelected(segment)) {\n      // we want to try an ensure that children are at least the specified minimum width\n      // however it may not always be possible, but we should be able to at least distribute the widths better\n      // even if we cannot meet the minimum desired width.\n      const modifier = this.getDistributionModifier(segment);\n\n      // return the width of the current node relative to the parent\n      const result = width * modifier * parentOffset;\n\n      // store the result in the cache\n      this.cacheSegment(segment.data, { width: result });\n\n      return result;\n    }\n\n    const result = width * parentOffset;\n\n    // store the result in the cache\n    this.cacheSegment(segment.data, { width: result });\n\n    return result;\n  }\n\n  /** Return the X position of the segment in a normalized form based on the specifiec domain */\n  private getNormalizedSegmentX(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    return this._x(this.getSegmentX(segment));\n  }\n\n  /** Return the Y position of the segment in a normalized form based on the specifiec domain */\n  private getNormalizedSegmentY(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // if there is a selected node we should take into account any collapsed nodes\n    if (this._isCollapsed(segment)) {\n      return segment.depth * this.getCollapsedHeight();\n    }\n\n    // otherwise simply return the normalized value\n    return this._y(segment.y0);\n  }\n\n  /** Return the width of the segment in a normalized form based on the specifiec domain */\n  private getNormalizedSegmentWidth(\n    segment: HierarchyRectangularNode<PartitionMapSegment>\n  ): number {\n    return (\n      this._x(this.getSegmentX(segment) + this.getSegmentWidth(segment)) -\n      this._x(this.getSegmentX(segment))\n    );\n  }\n\n  /** Return the height of the segment in a normalized form based on the specifiec domain */\n  private getNormalizedSegmentHeight(\n    segment: HierarchyRectangularNode<PartitionMapSegment>\n  ): number {\n    // if there is a selected node we should take into account any collapsed nodes\n    if (this._isCollapsed(segment)) {\n      return this.getCollapsedHeight();\n    }\n\n    // otherwise simply return the normalized value\n    return this._y(segment.y0 + (segment.y1 - segment.y0)) - this._y(segment.y0);\n  }\n\n  /**\n   * As parent segments collapse they increase in size, as the content is centered this can\n   * cause the content to appear either mis-aligned or off screen. We can calculate the padding\n   * required to always ensure the content appears visibly centered within the node.\n   */\n  private getSegmentPaddingRight(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // non-collapsed node do not require any padding\n    if (!this._isCollapsed(segment)) {\n      return 0;\n    }\n\n    return (\n      this.getNormalizedSegmentWidth(segment) -\n      this.getSegmentPaddingLeft(segment) -\n      this.getNormalizedSegmentWidth(this._selected)\n    );\n  }\n\n  private getSegmentPaddingLeft(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // non-collapsed node do not require any padding\n    if (!this._isCollapsed(segment)) {\n      return 0;\n    }\n\n    return Math.abs(this.getNormalizedSegmentX(segment));\n  }\n\n  /**\n   * This function returns the value for each segment. Leaf segments will have a value property which we can simply return, however\n   * non-leaf segments should get their values based on the leaf segments that are children, in which case we can return 0\n   */\n  private getSegmentValue(segment: PartitionMapSegment): number {\n    // eslint-disable-next-line no-prototype-builtins\n    if (segment.hasOwnProperty('value')) {\n      const value = (segment as PartitionMapSegmentWithValue).value;\n\n      // we must ensure that a leaf node never has no width otherwise things can get weird\n      return Math.max(value, 1);\n    }\n\n    // if it has children then return 0 to base the value of the width of the children\n    return 0;\n  }\n\n  /** Get the total height of all the collapse rows */\n  private getTotalCollapsedHeight(): number {\n    return this._selected ? this._selected.depth * this.getCollapsedHeight() : 0;\n  }\n\n  /** Get the collapsed height in percentage format */\n  private getCollapsedHeight(): number {\n    return parseFloat(((this.collapsedHeight / this._height) * 100).toPrecision(3));\n  }\n\n  /** Determine if a given segment is currently visible based on the selected segment */\n  private isVisible(segment: HierarchyRectangularNode<PartitionMapSegment>): boolean {\n    // if no segment is selected then all segments are visible\n    if (!this._selected) {\n      return true;\n    }\n\n    // if there is a selected node then it should be a direct ancestor or descendant to be visible\n    return !![...this._selected.ancestors(), ...this._selected.descendants()].find(\n      _segment => _segment === segment\n    );\n  }\n\n  /** Update the focusable item and perform a focus */\n  private focusSegment(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // get the segment element from the data\n    const element = this._segmentsSelection\n      .nodes()\n      .find(node => select(node).data()[0] === segment);\n\n    // if for some reason an element isn't found then stop here\n    if (!element) {\n      return;\n    }\n\n    // update the focusable segment\n    this._focusableSegment = segment;\n\n    // set the focus origin as a keyboard event\n    this._focusOrigin.setOrigin('keyboard');\n\n    // focus the element\n    element.focus();\n\n    // ensure we do not change scroll position when focusing\n    (this._elementRef.nativeElement as HTMLElement).scrollLeft = 0;\n    (this._elementRef.nativeElement as HTMLElement).scrollTop = 0;\n  }\n\n  /** Get all the segments at a given depth */\n  private getAllSiblings(\n    segment: HierarchyRectangularNode<PartitionMapSegment>\n  ): HierarchyRectangularNode<PartitionMapSegment>[] {\n    return this._segments.filter(_segment => _segment.depth === segment.depth);\n  }\n\n  private getHierarchyNodeFromSegment(\n    segment: PartitionMapSegment\n  ): HierarchyRectangularNode<PartitionMapSegment> | null {\n    return this._segments.find(_segment => _segment.data === segment);\n  }\n\n  /** Select a specified segment */\n  private select(segment: HierarchyRectangularNode<PartitionMapSegment>): void {\n    // if no segment is specified or it is already selected then do nothing\n    if (!segment || this._isSelected(segment)) {\n      return;\n    }\n\n    // clear the segment cache\n    this._segmentCache = new WeakMap();\n\n    // emit the selection\n    this.selectedChange.emit(segment.data);\n\n    // store the selected segment\n    this._selected = segment;\n\n    // update the focusable segment\n    this._focusableSegment = segment;\n\n    // set our new ranges\n    this._x.domain([\n      this.getSegmentX(segment),\n      this.getSegmentX(segment) + this.getSegmentWidth(segment),\n    ]);\n    this._y.domain([segment.y0, 1]).range([this.getTotalCollapsedHeight(), 100]);\n\n    // create the transition\n    const segmentTransition = transition('organizationChartSegmentTransition').duration(500);\n\n    // update the segment sizes - outside angular zone as there is lots of `requestAnimationFrames` triggering lots of change detection\n    this._ngZone.runOutsideAngular(() => {\n      this._segmentsSelection\n        .transition(segmentTransition)\n        .style('left', data => this.getNormalizedSegmentX(data) + '%')\n        .style('top', data => this.getNormalizedSegmentY(data) + '%')\n        .style('width', data => this.getNormalizedSegmentWidth(data) + 0.01 + '%')\n        .style('height', data => this.getNormalizedSegmentHeight(data) + '%')\n        .style('padding-right', data => this.getSegmentPaddingRight(data) + '%')\n        .style('padding-left', data => this.getSegmentPaddingLeft(data) + '%');\n    });\n  }\n\n  /** Normalize the available colors to a string[][] from portentially a ThemeColor[][] */\n  private getColorSequence(depth: number): string[] {\n    // get the target row\n    const colorSet = this._colors[depth];\n\n    // if no color set available throw an error\n    if (!colorSet) {\n      throw new Error(\n        'Partition Map: Please provide a color sequence for items with a depth of ' + depth\n      );\n    }\n\n    // convert this row to an array of strings\n    return colorSet.map(color =>\n      ThemeColor.isInstanceOf(color as ThemeColor)\n        ? (color as ThemeColor).toRgba()\n        : this._colorService.resolve(color as string)\n    );\n  }\n\n  /** Determine if a segment is a descendant of the currently selected item */\n  private isDescendantOfSelected(segment: HierarchyRectangularNode<PartitionMapSegment>): boolean {\n    // if there are no segments selected then return true\n    if (!this._selected) {\n      return true;\n    }\n\n    // if the segment is the selected segment then it is not a descendant\n    if (this._selected === segment) {\n      return false;\n    }\n\n    return !!this._selected.descendants().find(_segment => _segment === segment);\n  }\n\n  /**\n   * We have an option to allow a minimum desired width for items. This will\n   * allow us to attempt to determine the size a segment would be accounting for very\n   * small segments that have their widths artifically increased to make them more visible\n   */\n  private getDistributionModifier(segment: HierarchyRectangularNode<PartitionMapSegment>): number {\n    // calculate the desired number of pixels as a percentage\n    const minSegmentWidth = (this.minSegmentWidth / this._width) * 100;\n\n    // map to a segment width pair\n    const siblings = segment.parent.children.map(_segment => {\n      return { segment: _segment, width: this._x(_segment.x1 - _segment.x0) };\n    });\n\n    // a simple closure to check if we now have acceptable sizes\n    const isAcceptable = (\n      segments: { segment: HierarchyRectangularNode<PartitionMapSegment>; width: number }[]\n    ) =>\n      !segments.find(_segment => _segment.width < minSegmentWidth) ||\n      segments.filter(_segment => _segment.width < minSegmentWidth).length === siblings.length;\n\n    // if all segments are above or below the desired width then we can stop here\n    if (isAcceptable(siblings)) {\n      return 1;\n    }\n\n    // find the total amount we need to reclaim for other segments\n    let amountToReclaim = siblings.reduce(\n      (accumulation, _segment) =>\n        accumulation + (_segment.width < minSegmentWidth ? minSegmentWidth - _segment.width : 0),\n      0\n    );\n\n    // loop through adjusting the segments until we either make all acceptable sizes or cannot resize any further\n    while (!isAcceptable(siblings) && amountToReclaim !== 0) {\n      // determine which segments can shrink\n      const shrinkableSiblings = siblings.filter(sibling => sibling.width > minSegmentWidth);\n\n      // determine which segments need to grow\n      const growableSiblings = siblings.filter(sibling => sibling.width < minSegmentWidth);\n\n      // if there are no items that can be shrunk/grown then do nothing\n      if (shrinkableSiblings.length === 0 || growableSiblings.length === 0) {\n        break;\n      }\n\n      // determine the target amount to remove from each segment\n      const shrinkTarget = amountToReclaim / shrinkableSiblings.length;\n\n      // store the amount we have reclaimed in this pass\n      let reclaimed = 0;\n\n      // iterate each segment and subtract accordingly\n      for (const sibling of shrinkableSiblings) {\n        // determine how much we can actually subtract - as subtracting the target may bring the width down below the\n        // minimum which we don't want, so instead determine if we can subtract the target amount, otherwise figure out\n        // how much we can subtract without bringing the width below the desired minimum\n        const subtractAmount =\n          sibling.width - shrinkTarget > minSegmentWidth\n            ? shrinkTarget\n            : sibling.width - minSegmentWidth;\n\n        // update the amount to reclaim with the new value\n        reclaimed += subtractAmount;\n\n        // update the sibling width\n        sibling.width -= subtractAmount;\n      }\n\n      // update the amount left to reclaim\n      amountToReclaim -= reclaimed;\n\n      // determine the target amount to add to each segment\n      const growTarget = reclaimed / growableSiblings.length;\n\n      // add the available reclaimed amount to the segment that need to grow\n      for (const sibling of growableSiblings) {\n        // determine the amount we need to add. The target amount may be larger than the amount we need\n        // to add so ensure we only add the amount we need and no more.\n        const addAmount =\n          sibling.width + growTarget < minSegmentWidth\n            ? growTarget\n            : minSegmentWidth - sibling.width;\n\n        // update the sibling width\n        sibling.width += addAmount;\n      }\n    }\n\n    // identify the current widget from all the siblings\n    const matchingSegment = siblings.find(sibling => sibling.segment === segment);\n\n    // check if we are the last sibling\n    const isLast =\n      siblings.findIndex(sibling => sibling.segment === segment) === siblings.length - 1;\n\n    // if we are the last and somehow we are smaller than the parent node, we want to bump up the size of the last node\n    if (isLast) {\n      // get the total parent width\n      const parentWidth = this._x(segment.parent.x1 - segment.parent.x0);\n\n      // get the total width of all the children\n      const width = siblings.reduce((total, sibling) => total + sibling.width, 0);\n\n      // check if need to expand the last node\n      if (parentWidth !== width) {\n        return (\n          (matchingSegment.width + (parentWidth - width)) /\n          this._x(matchingSegment.segment.x1 - matchingSegment.segment.x0)\n        );\n      }\n    }\n\n    // determine the amount the size has changed\n    return matchingSegment.width / this._x(matchingSegment.segment.x1 - matchingSegment.segment.x0);\n  }\n\n  /** Get the default announcement when a segment is focused */\n  private defaultSegmentAnnouncement(info: PartitionMapSegmentAnnouncementInfo): string {\n    // create the announcement\n    if (info.parents.length === 0) {\n      return `This is the root segment. It has a value of ${info.value}.`;\n    }\n\n    // otherwise inform the user of the parent hierarchy\n    return `${info.item.name} has a value of ${info.value} and is a ${info.parents.map(parent => `descendant of ${parent.name}`).join(' and a ')}`;\n  }\n}\n\nexport interface PartitionMapSegmentBase {\n  name: string;\n   \n  data?: { [key: string]: any };\n}\n\nexport interface PartitionMapSegmentWithChildren extends PartitionMapSegmentBase {\n  children: ReadonlyArray<PartitionMapSegment>;\n}\n\nexport interface PartitionMapSegmentWithValue extends PartitionMapSegmentBase {\n  value: number;\n}\n\n/** This union type allows us to ensure that a partition map segment has either children or a value */\nexport type PartitionMapSegment = PartitionMapSegmentWithChildren | PartitionMapSegmentWithValue;\n\n/** Partition map custom segment template context */\nexport interface PartitionMapCustomSegmentContext {\n  segment: PartitionMapSegment;\n  color: string;\n  value: number;\n  expanded: boolean;\n  depth: number;\n  children: PartitionMapCustomSegmentContext[];\n}\n\n/** An object of this interface is passed to the announcer function */\nexport interface PartitionMapSegmentAnnouncementInfo {\n  item: PartitionMapSegment;\n  value: number;\n  parents: PartitionMapSegment[];\n  collapsed: boolean;\n  selected: boolean;\n}\n","@for (segment of _segments; track trackByIndex($index)) {\n  <div class=\"partition-map-segment\"\n    uxFocusIndicator\n    [ngClass]=\"_getContrastColor(segment)\"\n    [style.background-color]=\"_getBackgroundColor(segment)\"\n    [tabIndex]=\"_getTabIndex(segment)\"\n    (click)=\"_onSegmentSelect(segment)\"\n    (focus)=\"_onFocus(segment)\"\n    role=\"treeitem\"\n    [attr.aria-expanded]=\"!_isCollapsed(segment)\"\n    [attr.aria-selected]=\"_isSelected(segment)\"\n    [attr.aria-level]=\"segment.depth + 1\"\n    [attr.aria-label]=\"segment.data.name\"\n    (keydown.Enter)=\"_onSegmentSelect(segment)\"\n    (keydown.ArrowUp)=\"_focusParent(segment); $event.preventDefault()\"\n    (keydown.ArrowDown)=\"_focusChild(segment); $event.preventDefault()\"\n    (keydown.ArrowLeft)=\"_focusSibling(segment, -1); $event.preventDefault()\"\n    (keydown.ArrowRight)=\"_focusSibling(segment, 1); $event.preventDefault()\"\n    (keydown.Home)=\"_focusFirstSibling(segment); $event.preventDefault()\"\n    (keydown.End)=\"_focusLastSibling(segment); $event.preventDefault()\">\n    <div class=\"partition-map-segment-content\" [class.partition-map-segment-content-hidden]=\"_getSegmentContentHidden(segment)\">\n      <!-- Show default template if provided -->\n      @if (!segmentTemplate) {\n        <span class=\"partition-map-segment-label\">\n          {{ segment.data.name }}\n        </span>\n      }\n      <!-- Show custom template if provided -->\n      @if (segmentTemplate) {\n        <ng-container\n          [ngTemplateOutlet]=\"segmentTemplate\"\n          [ngTemplateOutletContext]=\"_getContext(segment)\">\n        </ng-container>\n      }\n    </div>\n  </div>\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { PartitionMapSegmentEventsDirective } from './events/partition-map-segment-events.directive';\nimport { PartitionMapComponent } from './partition-map.component';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        CommonModule,\n        ColorServiceModule,\n        ResizeModule\n    ],\n    declarations: [\n        PartitionMapComponent,\n        PartitionMapSegmentEventsDirective\n    ],\n    exports: [\n        PartitionMapComponent,\n        PartitionMapSegmentEventsDirective\n    ]\n})\nexport class PartitionMapModule { }\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n    selector: 'ux-progress-bar',\n    templateUrl: './progress-bar.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        role: 'progressbar'\n    }\n})\nexport class ProgressBarComponent {\n    @Input() value: number = 0;\n    @Input() @HostBinding('attr.aria-valuemin') min: number = 0;\n    @Input() @HostBinding('attr.aria-valuemax') max: number = 100;\n    @Input() indeterminate: boolean = false;\n    @Input() trackColor: string;\n    @Input() barColor: string;\n\n    /** When indeteminate we should omit the valuenow label */\n    @HostBinding('attr.aria-valuenow') get valueNow() {\n        return this.indeterminate ? null : this.value;\n    }\n}\n","@if (!indeterminate) {\n  <div class=\"progressbar-track\" [style.width.%]=\"((value - min) / (max - min)) * 100\" [style.backgroundColor]=\"barColor\">\n    <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n  </div>\n}\n@if (indeterminate) {\n  <div class=\"progressbar-track indeterminate\" [style.backgroundColor]=\"barColor\">\n    <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n  </div>\n}\n\n<!-- Workaround for Multiple ng-content tags issue: https://github.com/angular/angular/issues/22972 -->\n<ng-template #content><ng-content></ng-content></ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ProgressBarComponent } from './progress-bar.component';\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    exports: [ProgressBarComponent],\n    declarations: [ProgressBarComponent]\n})\nexport class ProgressBarModule { }\n","import { AfterContentInit, ChangeDetectorRef, ContentChildren, Directive, EventEmitter, ExistingProvider, forwardRef, inject, Input, OnDestroy, Output, QueryList } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { RadioButtonComponent } from '../radiobutton.component';\n\nexport const RADIO_GROUP_CONTROL_VALUE_ACCESSOR: ExistingProvider = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => RadioButtonGroupDirective),\n    multi: true\n};\n\n@Directive({\n    selector: 'ux-radio-button-group, [uxRadioButtonGroup]',\n    providers: [\n        RADIO_GROUP_CONTROL_VALUE_ACCESSOR\n    ],\n    host: {\n        'role': 'radiogroup'\n    }\n})\nexport class RadioButtonGroupDirective<T = unknown> implements ControlValueAccessor, AfterContentInit, OnDestroy  {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Define the current selected value within the group */\n    @Input() set value(value: T) {\n        this._value = value;\n        this.updateSelectedRadioButton();\n    }\n\n    /** Return the currently selected value */\n    get value(): T {\n        return this._value;\n    }\n\n    /** Emit when the currently selected value changes */\n    @Output() valueChange = new EventEmitter<T>();\n\n    /** Used to inform Angular forms that the component has been touched */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouched: () => void = () => {};\n\n    /** Used to inform Angular forms that the component value has changed */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChange: (value: any) => void = () => {};\n\n    @ContentChildren(forwardRef(() => RadioButtonComponent), { descendants: true }) _radioButtons: QueryList<RadioButtonComponent>;\n\n    /** Unsubscribe from all subscriptions on destroy */\n    private readonly _onDestroy$ = new Subject<void>();\n\n    /** Internally store the current value */\n    private _value: T = null;\n\n    ngAfterContentInit(): void {\n        this.updateSelectedRadioButton();\n\n        // update the selected items any time new ones are added\n        this._radioButtons.changes.pipe(takeUntil(this._onDestroy$))\n            .subscribe(() => this.updateSelectedRadioButton());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy$.next();\n        this._onDestroy$.complete();\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the input value changes */\n     \n    registerOnChange(fn: (value: any) => void): void {\n        this.onChange = fn;\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the touched state changes */\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    /** Allow Angular forms to give us the current value */\n     \n    writeValue(value: any): void {\n        this.value = value;\n        this._changeDetector.markForCheck();\n    }\n\n    /** Allow Angular forms to disable the component */\n    setDisabledState(isDisabled: boolean): void {\n        if (this._radioButtons) {\n            this._radioButtons.forEach(radio => radio.setDisabledState(isDisabled));\n            this._changeDetector.markForCheck();\n        }\n    }\n\n    /** Emit the currently selected value */\n    emitChange(value: T): void {\n        this.valueChange.next(value);\n        this.onChange(value);\n        this.onTouched();\n    }\n\n    /** Determine and set the correct internal tabindex */\n    determineAndSetInternalTabIndex() {\n\n        const firstEnabled = this._radioButtons.find(radio => {\n            return radio.disabled === false;\n        });\n\n        this._radioButtons.forEach(radio => {\n\n            if (this._value !== undefined) {\n                radio.setInternalTabindex(radio.option === this._value ? 0 : -1);\n            } else {\n                radio.setInternalTabindex(firstEnabled === radio ? 0 : -1);\n            }\n        });\n    }\n\n    /** Inform all child radio buttons of the latest value */\n    private updateSelectedRadioButton(): void {\n        // update the selected value in all radio buttons\n        if (this._radioButtons) {\n            this.determineAndSetInternalTabIndex();\n            this._radioButtons.forEach(radio => radio.writeValue(this._value));\n        }\n\n    }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FocusIndicatorDirective } from '../../directives/accessibility';\nimport { FocusableItemToken } from '../menu';\nimport { FocusableControl } from '../menu/interfaces/focusable-control.interface';\nimport { RadioButtonGroupDirective } from './radio-button-group/radio-button-group.directive';\n\nexport const RADIOBUTTON_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => RadioButtonComponent),\n    multi: true\n};\n\nlet uniqueRadioId = 0;\n\n@Component({\n    selector: 'ux-radio-button',\n    templateUrl: './radiobutton.component.html',\n    providers: [RADIOBUTTON_VALUE_ACCESSOR, {\n        provide: FocusableItemToken,\n        useExisting: RadioButtonComponent\n    }],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RadioButtonComponent<T = unknown> implements ControlValueAccessor, OnChanges, FocusableControl {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _group = inject(RadioButtonGroupDirective, { optional: true });\n\n    /** Provide a default unique id value for the radiobutton */\n    _radioButtonId: string = `ux-radio-button-${++uniqueRadioId}`;\n\n    /** Specify a unique Id for this component */\n    @Input() id: string = this._radioButtonId;\n\n    /** Specify a form name for the input element */\n    @Input() name: string | null;\n\n    /** Specify the role of the input element. */\n    @Input() inputRole: string;\n\n    /** This should be a two way binding and will store the currently selected option. Each radio button in the same group should have the same value variable. */\n    @Input() value: T;\n\n    /** Specify if this is a required input */\n    @Input() required: boolean;\n\n    /** Specify the tabindex */\n    @Input() tabindex: number;\n\n    /** If set to `true` the radio button will not change state when clicked. */\n    @Input() clickable: boolean = true;\n\n    /** If this value is set to `true` then the radio button will be disabled */\n    @Input() disabled: boolean = false;\n\n    /** If set to `true` the checkbox will be displayed without a border and background. */\n    @Input() simplified: boolean = false;\n\n    /**\n     * This should contain the value that this radio button represents. This will be stored in the value variable when the radio button is selected.\n     * No two radio buttons should have the same option value within the same group of radio buttons.\n     */\n    @Input() option: T;\n\n    /** Specify an aria label for the input element */\n    @Input('aria-label') ariaLabel: string = '';\n\n    /** Specify an aria labelledby property for the input element */\n    @Input('aria-labelledby') ariaLabelledby: string = null;\n\n    /** Specify an aria describedby property for the input element */\n    @Input('aria-describedby') ariaDescribedby: string = null;\n\n    /** Emits when the value has been changed. */\n    @Output() valueChange: EventEmitter<T> = new EventEmitter<T>();\n\n    /** Get the focus indicator to set focus */\n    @ViewChild(FocusIndicatorDirective)\n    _focusIndicator?: FocusIndicatorDirective;\n\n    /** Determine if the underlying input component has been focused with the keyboard */\n    _focused: boolean = false;\n\n    /** Internally store the current tabindex */\n    _internalTabindex: number = null;\n\n    /** Used to inform Angular forms that the component has been touched */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouchedCallback: () => void = () => { };\n\n    /** Used to inform Angular forms that the component value has changed */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChangeCallback: (_: any) => void = () => { };\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.disabled && this._group && !changes.disabled.firstChange) {\n            this._group.determineAndSetInternalTabIndex();\n        }\n    }\n\n    /** Select the current option */\n    select(): void {\n\n        if (this.disabled || !this.clickable) {\n            return;\n        }\n\n        // toggle the checked state\n        this.value = this.option;\n\n        // if there is a group set the selected value\n        if (this._group) {\n            this._group.value = this.option;\n            this._group.emitChange(this.option);\n        }\n\n        // emit the value\n        this.valueChange.emit(this.value);\n\n        // update the value if used within a form control\n        this.onChangeCallback(this.value);\n\n        // mark the component as touched\n        this.onTouchedCallback();\n    }\n\n    // Functions required to update ng-model\n    writeValue(value: T): void {\n        if (value !== this.value) {\n            this.value = value;\n            this._changeDetector.detectChanges();\n        }\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the input value changes */\n\n    registerOnChange(fn: () => void): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** Allow Angular forms for provide us with a callback for when the touched state changes */\n    registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    /** Allow Angular forms to disable the component */\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    /** Set the internal tab index of the radio button */\n    setInternalTabindex(tabIndex): void {\n        this._internalTabindex = tabIndex;\n        this._changeDetector.detectChanges();\n    }\n\n    /** Focus the input element */\n    focus(origin: FocusOrigin): void {\n        this._focusIndicator.focus(origin);\n    }\n\n    setInputTabIndex(tabindex: number): void {\n        this.tabindex = tabindex;\n        this._changeDetector.detectChanges();\n    }\n}\n","<label\n    [attr.for]=\"(id || _radioButtonId) + '-input'\"\n    class=\"ux-radio-button\"\n    [class.ux-radio-button-checked]=\"value === option\"\n    [class.ux-radio-button-simplified]=\"simplified\"\n    [class.ux-radio-button-disabled]=\"disabled\"\n    [class.ux-radio-button-focused]=\"_focused\"\n>\n    <div class=\"ux-radio-button-container\">\n        <input\n            #input\n            class=\"ux-radio-button-input\"\n            uxFocusIndicator\n            type=\"radio\"\n            [id]=\"(id || _radioButtonId) + '-input'\"\n            [attr.role]=\"inputRole\"\n            [checked]=\"value === option\"\n            [disabled]=\"disabled\"\n            [tabindex]=\"tabindex ?? _internalTabindex\"\n            [attr.name]=\"name\"\n            [required]=\"required\"\n            [attr.aria-label]=\"ariaLabel\"\n            [attr.aria-labelledby]=\"ariaLabelledby\"\n            [attr.aria-describedby]=\"ariaDescribedby\"\n            [attr.aria-checked]=\"value === option\"\n            (indicator)=\"_focused = $event\"\n            (change)=\"select()\"\n            (click)=\"$event.stopPropagation()\"\n        />\n    </div>\n\n    <span class=\"ux-radio-button-label\">\n        <ng-content></ng-content>\n    </span>\n\n</label>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { RadioButtonComponent } from './radiobutton.component';\nimport { RadioButtonGroupDirective } from './radio-button-group/radio-button-group.directive';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        FormsModule\n    ],\n    exports: [\n        RadioButtonComponent,\n        RadioButtonGroupDirective\n    ],\n    declarations: [\n        RadioButtonComponent,\n        RadioButtonGroupDirective\n    ]\n})\nexport class RadioButtonModule { }","import { sum } from 'd3';\nimport { SankeyLink, SankeyLinkPlot } from './interfaces/link.interface';\nimport { SankeyNodeLink } from './interfaces/node-link.interface';\nimport { SankeyNode } from './interfaces/node.interface';\n\nexport class SankeyChart<T> {\n\n    /** Define the nodes in the chart */\n    private _nodes: ReadonlyArray<SankeyNode<T>> = [];\n\n    /** Define the links in the chart */\n    private _links: ReadonlyArray<SankeyLink> = [];\n\n    /** Store the node-links */\n    private _nodeLinks: ReadonlyArray<SankeyNodeLink<T>> = [];\n\n    /** Define the minimum width of the nodes */\n    private _minWidth: number = 0;\n\n    /** Define the maximum width of the nodes */\n    private _maxWidth: number = Infinity;\n\n    /** The minimum height of a node. */\n    private _minHeight: number;\n\n    /** Define the width of the chart */\n    private _width: number;\n\n    /** Define the height of the chart */\n    private _height: number;\n\n    /** Define the vertical padding between nodes */\n    private _spacing: number;\n\n    /** Define the minimum distance from the edge of the chart */\n    private readonly _padding: number = 24;\n\n    /** Define the spacing of the chart */\n    spacing(spacing: number): this {\n        this._spacing = spacing;\n        return this;\n    }\n\n    /** Define the width of the chart */\n    width(width: number): this {\n        this._width = width;\n        return this;\n    }\n\n    /** Define the height of the chart */\n    height(height: number): this {\n        this._height = height;\n        return this;\n    }\n\n    /** Define the nodes */\n    nodes(nodes: ReadonlyArray<SankeyNode<T>>): this {\n        this._nodes = nodes;\n        return this;\n    }\n\n    /** Define the links */\n    links(links: ReadonlyArray<SankeyLink>): this {\n        this._links = links;\n        return this;\n    }\n\n    /** Define the minimum and maximum size of the nodes */\n    size(minWidth: number, maxWidth: number, minHeight: number): this {\n        this._minWidth = minWidth;\n        this._maxWidth = maxWidth;\n        this._minHeight = minHeight;\n        return this;\n    }\n\n    /** Get the sizes of each column */\n    columns(): number[] {\n\n        // get the number of columns - we use this a lot so avoid multiple function calls\n        const columnCount = this.getColumnCount();\n\n        // get the amount of padding there should be on each side of a node\n        const padding = this.getColumnPadding();\n\n        const columnWidths: number[] = [];\n\n        for (let idx = 0; idx < columnCount; idx++) {\n            columnWidths[idx] = this.getNodeWidth() + (padding * 2);\n\n            // do no have the default padding on the left of the start node\n            // or right of the last node, instead have a default padding\n            if (idx === 0 || idx === columnCount - 1) {\n                columnWidths[idx] -= (padding - this._padding);\n            }\n        }\n\n        return columnWidths;\n    }\n\n    /**\n     * Perform the various stages of the layout\n     * in the correct order as some steps are dependant\n     * on the previous layout stages.\n     */\n    layout(): ReadonlyArray<SankeyNodeLink<T>> {\n        this.getNodeLinks();\n        this.getNodeValues();\n        this.getNodeColumns();\n        this.getNodeWidths();\n        this.getNodeHeights();\n        this.getNodePositions();\n        this.getLinkPlots();\n        return this._nodeLinks;\n    }\n\n    /** The curve equation for links */\n    link(link: SankeyLink & SankeyLinkPlot): string {\n\n        // const dist = chart.blockSpacing / 2;\n        const { topLeft, topRight, bottomLeft, bottomRight } = link;\n        const dist = (topRight[0] - topLeft[0]) / 2;\n\n        const topLeftCurve = [topLeft[0] + dist, topLeft[1]];\n        const topRightCurve = [topRight[0] - dist, topRight[1]];\n        const bottomLeftCurve = [bottomLeft[0] + dist, bottomLeft[1]];\n        const bottomRightCurve = [bottomRight[0] - dist, bottomRight[1]];\n\n        return 'M' + topLeft[0] + ',' + topLeft[1] +\n            'C' + topLeftCurve[0] + ',' + topLeftCurve[1] +\n            ' ' + topRightCurve[0] + ',' + topRightCurve[1] +\n            ' ' + topRight[0] + ',' + topRight[1] +\n            'L' + bottomRight[0] + ',' + bottomRight[1] +\n            'C' + bottomRightCurve[0] + ',' + bottomRightCurve[1] +\n            ' ' + bottomLeftCurve[0] + ',' + bottomLeftCurve[1] +\n            ' ' + bottomLeft[0] + ',' + bottomLeft[1] +\n            'L' + topLeft[0] + ',' + topLeft[1];\n    }\n\n    getFalloffPath(nodeLink: SankeyNodeLink<T>): string {\n        const x = (nodeLink.x + nodeLink.width);\n        const y = nodeLink.outputs.reduce((bottom, output) => Math.max(bottom, output.bottomLeft[1]), 0);\n        const width = 20;\n        const radius = 6;\n        const height = (nodeLink.y + nodeLink.height - y) + (this._spacing / 2);\n\n        return 'M' + x + ',' + y +\n            'h ' + (width - radius) +\n            'a' + radius + ',' + radius + ' 0 0,1' +\n            (radius) + ',' + (radius) + ' ' +\n            'v' + Math.max(radius, height) + 'h-' + width + 'Z';\n    }\n\n    /**\n     * Get a `SankeyNodeLink` object from the id of a node\n     */\n    getNodeLink(id: string | number): SankeyNodeLink<T> {\n        return this._nodeLinks.find(nodeLink => nodeLink.node.id === id);\n    }\n\n    /** Replace the node ids with actual references */\n    private getNodeLinks(): void {\n        this._nodeLinks = this._nodes.map(node => {\n            // get all the links that input into and output from this node\n            const inputs = this._links.filter(link => link.target === node.id);\n            const outputs = this._links.filter(link => link.source === node.id);\n\n            return { node, inputs, outputs, value: 0, column: 0, x: 0, y: 0, width: 0, height: 0, naturalHeight: 0, falloff: 0, active: false, focus: false } as SankeyNodeLink<T>;\n        });\n    }\n\n    /** Get the value for the node based on all its inputs and outputs */\n    private getNodeValues(): void {\n        for (const node of this._nodeLinks) {\n            // the node value can be determined by the total values from all inputs\n            // however the first column of nodes have no inputs so must be based of their outputs.\n            // We should take the maximum value based on the inputs and outputs as nodes that are\n            // not in the first column may not output all of the amount the receive from inputs,\n            // for example in the case of falloff etc..\n            node.value = Math.max(\n                sum(node.inputs, input => input.value),\n                sum(node.outputs, output => output.value)\n            );\n        }\n    }\n\n    /**\n     * We need to determine which column the node should\n     * be placed in. This is determined by taking the input\n     * and adding one.\n     */\n    private getNodeColumns(nodeLinks: SankeyNodeLink<T>[] = this._nodeLinks.filter(node => node.inputs.length === 0), column: number = 0): void {\n        for (const nodeLink of nodeLinks) {\n            nodeLink.column = column;\n\n            // call this function to all output links\n            this.getNodeColumns(nodeLink.outputs.map(output => this.getNodeLink(output.target)), column + 1);\n        }\n    }\n\n    /** Get the width of each node */\n    private getNodeWidths(): void {\n        this._nodeLinks.forEach(node => node.width = this.getNodeWidth());\n    }\n\n    /**\n     * Scale the nodes height based on the value the represent\n     */\n    private getNodeHeights(): void {\n\n        // get columns by group\n        const groups = this.getColumnGroups();\n        const groupList = Object.keys(groups).map<SankeyNodeLink<T>[]>(group => groups[group]);\n\n        // get the column with the largest total value\n        const total = groupList.reduce(\n            (count, nodes) => Math.max(count, nodes.reduce((accumulation, node) => accumulation + node.value, 0)),\n            0\n        );\n\n        // Calculate node heights\n        for (const nodeLinks of groupList) {\n\n            // get the proportional size of each node based on the available space\n            for (const nodeLink of nodeLinks) {\n                nodeLink.naturalHeight = ((nodeLink.value / total) * this._height) - this._spacing;\n                nodeLink.height = Math.max(nodeLink.naturalHeight, this._minHeight);\n            }\n        }\n\n        // If minHeight is defined, it might cause some columns to exceed the height of the chart following the\n        // initial height calculation.\n        if (this._minHeight > 0) {\n\n            try {\n                // Recalculate node heights until they fit (if possible)\n                this.adjustNodeHeightsToFit(groupList);\n            } catch (error) {\n                // If the above recalculation fails, give up and use the naturalHeight (ignore minHeight)\n                this.setNodesToNaturalHeight(groupList);\n            }\n        }\n    }\n\n    /**\n     * Recalculate node heights within height limits until they fit (if possible).\n     * @throws If it is not possible to fit all nodes in the chart due to `minHeight`.\n     */\n    private adjustNodeHeightsToFit(groupList: SankeyNodeLink<T>[][]) {\n\n        let largestColumn = this.getLargestColumn(groupList);\n\n        while (largestColumn.height > this._height) {\n\n            // Get the list of nodes whose height cannot be reduced\n            const fixedNodes = largestColumn.nodes.filter(nodeLink => nodeLink.height <= this._minHeight);\n\n            // Get the total height in the column which cannot shrink (including spacing)\n            const fixedHeight = fixedNodes.length * this._minHeight + largestColumn.nodes.length * this._spacing;\n\n            // If the unshrinkable height is greater than the available height, we can't continue\n            if (fixedHeight > this._height) {\n                throw new Error(`Cannot fit data into chart with minHeight = ${this._minHeight}px (need ${fixedHeight}px; ${this._height}px available)`);\n            }\n\n            // Find the amount of height which can potentially be reduced\n            const flexibleHeight = largestColumn.height - fixedHeight;\n\n            // Find the amount of height that the above needs to fit into\n            const availableHeight = this._height - fixedHeight;\n\n            // Get the multiplier to reduce the nodes in order to fit the available height\n            const ratio = availableHeight / flexibleHeight;\n\n            // Adjust the nodes and reapply the minHeight\n            for (const group of groupList) {\n                for (const nodeLink of group) {\n                    if (nodeLink.height > this._minHeight) {\n                        nodeLink.height *= ratio;\n                    }\n                    if (nodeLink.height < this._minHeight) {\n                        nodeLink.height = this._minHeight;\n                    }\n                }\n            }\n\n            largestColumn = this.getLargestColumn(groupList);\n        }\n    }\n\n    /** Set all nodes height to be the same as the naturalHeight. */\n    private setNodesToNaturalHeight(groupList: SankeyNodeLink<T>[][]) {\n        for (const group of groupList) {\n            for (const nodeLink of group) {\n                nodeLink.height = nodeLink.naturalHeight;\n            }\n        }\n    }\n\n    /**\n     * Get all nodes grouped in their corresponding columns\n     */\n    private getColumnGroups(): { [key: number]: SankeyNodeLink<T>[] } {\n        // group nodes by columns\n        return this._nodeLinks.reduce<{ [key: number]: SankeyNodeLink<T>[] }>((collection, nodeLink) => {\n            collection[nodeLink.column] = collection[nodeLink.column] || [];\n            collection[nodeLink.column].push(nodeLink);\n            return collection;\n        }, {});\n    }\n\n    /**\n     * Get the number of columns\n     */\n    private getColumnCount(): number {\n        return this._nodeLinks.reduce((column, nodeLink) => Math.max(nodeLink.column + 1, column), 0);\n    }\n\n    /**\n     * Position the nodes in their corresponding x and y positions\n     */\n    private getNodePositions(): void {\n\n        // get all nodes by group\n        const groups = this.getColumnGroups();\n\n        // get the amount of padding required between each item\n        const padding = this.getColumnPadding();\n\n        for (const nodeLink of this._nodeLinks) {\n            // get the x position based on the column\n            nodeLink.x = this.getColumnPosition(nodeLink.column) + padding;\n\n            if (nodeLink.column === 0) {\n                nodeLink.x = this._padding;\n            }\n\n            // get the y position based on the accumulative height of the nodes above it\n            nodeLink.y = groups[nodeLink.column]\n                .slice(0, groups[nodeLink.column].indexOf(nodeLink))\n                .reduce((top, _node) => top + _node.height, 0) + (this._spacing * groups[nodeLink.column].indexOf(nodeLink));\n        }\n    }\n\n    private getColumnPadding(): number {\n        // get the number of columns - we use this a lot so avoid multiple function calls\n        const columnCount = this.getColumnCount();\n\n        // get the chart width minus the width of the nodes\n        const width = (this._width - (columnCount * this.getNodeWidth())) - (this._padding * 2);\n\n        // get the total amount of places requiring padding (the first and last columns only have padding on one side)\n        const paddingCount = Math.max(((columnCount * 2) - 2), 0);\n\n        // get the actual size of the padding\n        return width / paddingCount;\n    }\n\n    private getLinkPlots(): void {\n\n        for (const nodeLink of this._nodeLinks) {\n\n            let inputY: number = nodeLink.y;\n\n            // process each input link\n            for (const link of nodeLink.inputs) {\n                link.topRight = [nodeLink.x, inputY];\n                inputY += ((link.value / nodeLink.value) * nodeLink.height);\n                link.bottomRight = [nodeLink.x, inputY];\n            }\n\n            let outputValue: number = 0;\n            let outputY: number = nodeLink.y;\n\n            // process each output link\n            for (const link of nodeLink.outputs) {\n                link.topLeft = [nodeLink.x + nodeLink.width, outputY];\n                outputY += ((link.value / nodeLink.value) * nodeLink.height);\n                link.bottomLeft = [nodeLink.x + nodeLink.width, outputY];\n\n                outputValue += link.value;\n            }\n\n            // determine how much falloff there is\n            nodeLink.falloff = nodeLink.value - outputValue;\n        }\n    }\n\n    /** Determine the position at which a column starts */\n    private getColumnPosition(column: number): number {\n        // the position is the acculation of the widths of all previous columns\n        return this.columns().splice(0, column).reduce((total, width) => total + width, 0);\n    }\n\n    /** Get the pixel width of a node */\n    private getNodeWidth(): number {\n        const width = (this._width - (this._padding * 2)) / ((this.getColumnCount() * 2) - 1);\n        return Math.min(this._maxWidth, Math.max(this._minWidth, width));\n    }\n\n    /** Get the column with the greatest height (along with its height) */\n    private getLargestColumn(groupList: SankeyNodeLink<T>[][]): ColumnWithHeight<T> {\n\n        let largestColumn = null;\n        let largestColumnHeight = 0;\n\n        for (const group of groupList) {\n            const totalHeight = group.reduce((acc, node) => acc += node.height, 0) + group.length * this._spacing;\n            if (totalHeight > largestColumnHeight) {\n                largestColumnHeight = totalHeight;\n                largestColumn = group;\n            }\n        }\n\n        return {\n            nodes: largestColumn,\n            height: largestColumnHeight\n        };\n    }\n}\n\ninterface ColumnWithHeight<T> {\n    nodes: SankeyNodeLink<T>[];\n    height: number;\n}\n","import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { SankeyNodeLink } from './interfaces/node-link.interface';\n\n@Injectable()\nexport class SankeyFocusManager<T> implements OnDestroy {\n\n    /** Store the node that can currently be tabbed to */\n    active$ = new BehaviorSubject<SankeyNodeLink<T>>(null);\n\n    /** Emit whenever an item should receive focus */\n    focused$ = new Subject<SankeyNodeLink<T>>();\n\n    /** Store the nodes  */\n    private _nodes: ReadonlyArray<SankeyNodeLink<T>> = [];\n\n    /** Get the current active item */\n    private get _active(): SankeyNodeLink<T> {\n        return this.active$.value;\n    }\n\n    ngOnDestroy(): void {\n        this.active$.complete();\n        this.focused$.complete();\n    }\n\n    /** Update the list of possible nodes */\n    setNodes(nodes: ReadonlyArray<SankeyNodeLink<T>>): void {\n        this._nodes = nodes;\n\n        // check if there is currently a tabbable node, if not we should make the first node tabbable\n        if (!this.hasActiveNode()) {\n            this.setActiveItem(this._nodes[0]);\n        }\n    }\n\n    /** Set the current active item */\n    setActiveItem(node: SankeyNodeLink<T>): void {\n        this.active$.next(node);\n    }\n\n    /** Handle keyboard input from nodes */\n    onKeydown(event: KeyboardEvent): void {\n\n        switch (event.which) {\n            case UP_ARROW:\n                this.shiftFocusVertically(-1);\n                event.preventDefault();\n                break;\n\n            case DOWN_ARROW:\n                this.shiftFocusVertically(1);\n                event.preventDefault();\n                break;\n\n            case LEFT_ARROW:\n                this.shiftFocusHorizontally(-1);\n                event.preventDefault();\n                break;\n\n            case RIGHT_ARROW:\n                this.shiftFocusHorizontally(1);\n                event.preventDefault();\n                break;\n        }\n    }\n\n    private setFocusedItem(item: SankeyNodeLink<T>): void {\n        this.setActiveItem(item);\n        this.focused$.next(item);\n    }\n\n    private shiftFocusVertically(delta: number): void {\n        const nodes = this.getNodesInColumn(this._active.column);\n\n        // get the node below or above the active node\n        const target = nodes[nodes.findIndex(node => node.node.id === this._active.node.id) + delta];\n\n        if (target) {\n            this.setFocusedItem(target);\n        }\n    }\n\n    /** Shift the focus to a node in a sibling column */\n    private shiftFocusHorizontally(delta: number): void {\n\n        // get nodes in the sibling column in the desired direction\n        const nodes = this.getNodesInColumn(this._active.column + delta);\n\n        // if there are no nodes then do nothing as we cannot reduce an empty array\n        if (nodes.length === 0) {\n            return;\n        }\n\n        // get the node with the most similar y position\n        const target = nodes.reduce((closest, node) => {\n            const closestDiff = Math.max(closest.y, this._active.y) - Math.min(closest.y, this._active.y);\n            const currentDiff = Math.max(node.y, this._active.y) - Math.min(node.y, this._active.y);\n            return closestDiff < currentDiff ? closest : node;\n        });\n\n        if (target) {\n            this.setFocusedItem(target);\n        }\n    }\n\n    /** Get a list of nodes that are in a given column */\n    private getNodesInColumn(column: number): ReadonlyArray<SankeyNodeLink<T>> {\n        return this.getNodesInOrder(this._nodes.filter(node => node.column === column));\n    }\n\n    /** Sort the nodes based on the Y position */\n    private getNodesInOrder(nodes: ReadonlyArray<SankeyNodeLink<T>>): ReadonlyArray<SankeyNodeLink<T>> {\n        return [...nodes].sort((nodeOne, nodeTwo) => nodeOne.y - nodeTwo.y);\n    }\n\n    /** Determine whether or not there is a not that is tabbable */\n    private hasActiveNode(): boolean {\n        return !!this.active$.value && !!this._nodes.find(node => node.node.id === this.active$.value.node.id);\n    }\n\n}\n","import { Directive, ElementRef, HostBinding, HostListener, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport { SankeyNodeLink } from './interfaces/node-link.interface';\nimport { SankeyFocusManager } from './sankey-focus-manager';\n\n@Directive({\n  selector: '[uxSankeyNode]',\n})\nexport class SankeyNodeDirective<T> implements OnInit, OnDestroy {\n  private readonly _focusManager = inject<SankeyFocusManager<T>>(SankeyFocusManager);\n  private readonly _elementRef = inject(ElementRef);\n\n  /** Access the node data */\n  @Input('uxSankeyNode') node: SankeyNodeLink<T>;\n\n  /** Specify the tab index of the current item */\n  @HostBinding() tabIndex: number = -1;\n\n  /** Unsubscribe from all observables on destroy */\n  private readonly _onDestroy = new Subject<void>();\n\n  ngOnInit(): void {\n    // Update the tabindex based on the current active item\n    this._focusManager.active$.pipe(map(item => item && item.node.id === this.node.node.id), takeUntil(this._onDestroy))\n      .subscribe(isActive => this.tabIndex = isActive ? 0 : -1);\n\n    // If this element should be focused perform the focus\n    this._focusManager.focused$.pipe(filter(node => node.node.id === this.node.node.id), takeUntil(this._onDestroy))\n      .subscribe(() => this._elementRef.nativeElement.focus());\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  @HostListener('click')\n  onClick(): void {\n    this._focusManager.setActiveItem(this.node);\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeydown(event: KeyboardEvent): void {\n    this._focusManager.onKeydown(event);\n  }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, inject, Input, OnChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { ResizeDimensions } from '../../directives/resize/index';\nimport { ColorService, ThemeColor } from '../../services/color/index';\nimport { SankeyLink, SankeyLinkInteraction, SankeyLinkPlot } from './interfaces/link.interface';\nimport { SankeyNodeLink } from './interfaces/node-link.interface';\nimport { SankeyNode } from './interfaces/node.interface';\nimport { SankeyChart } from './sankey-chart';\nimport { SankeyFocusManager } from './sankey-focus-manager';\n\n@Component({\n    selector: 'ux-sankey-chart',\n    templateUrl: './sankey-chart.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    viewProviders: [SankeyFocusManager],\n    animations: [\n        trigger('tooltipAnimation', [\n            transition(':enter', [\n                style({ opacity: 0 }),\n                animate(160, style({ opacity: 1 }))\n            ]),\n            transition(':leave', [\n                animate(160, style({ opacity: 0 }))\n            ])\n        ])\n    ],\n})\nexport class SankeyChartComponent<T> implements OnChanges, AfterViewInit {\n    private readonly _focusManager = inject<SankeyFocusManager<T>>(SankeyFocusManager);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _colorService = inject(ColorService);\n\n    /** Define the nodes to display */\n    @Input() nodes: ReadonlyArray<SankeyNode<T>> = [];\n\n    /** Define the links to display */\n    @Input() links: ReadonlyArray<SankeyLink> = [];\n\n    /** Define the headers of each column */\n    @Input() columns: string[] = [];\n\n    /** Define the minimum width of a node */\n    @Input() minWidth: number = 0;\n\n    /** Define the maximum width of a node */\n    @Input() maxWidth: number = Infinity;\n\n    /** The minimum height of a node. */\n    @Input() minHeight: number = 0;\n\n    /** Define the function to get the contents of a link tooltip */\n    @Input() linkTooltip: (link: SankeyLink) => string = this.getLinkTooltip;\n\n    /** Define the function to get the contents of a falloff tooltip */\n    @Input() falloffTooltip: (falloff: number) => string = this.getFalloffTooltip;\n\n    /** Define the active color of a node */\n    @Input() color: string | ThemeColor;\n\n    /** Define the template of sankey chart nodes */\n    @ContentChild('sankeyNodeTemplate', { static: false }) nodeTemplate: TemplateRef<SankeyNodeContext<T>>;\n\n    /** Access the SVG element which will contain the links */\n    @ViewChild('linkContainer', { static: true }) linkContainer: ElementRef;\n\n    /** Access the element which will contain the nodes */\n    @ViewChild('nodeContainer', { static: true }) nodeContainer: ElementRef;\n\n    /** Store the width of the chart area */\n    _width: number;\n\n    /** Store the height of the chart area */\n    _height: number;\n\n    /** Define the nodes that should be rendered */\n    _nodes: ReadonlyArray<SankeyNodeLink<T>> = [];\n\n    /** Define the columns to display */\n    _columns: ReadonlyArray<SankeyColumn> = [];\n\n    /** Determine if the tooltip should be visible or not */\n    _isTooltipOpen: boolean = false;\n\n    /** Define the position of the tooltip */\n    _tooltipPosition: SankeyTooltipPosition = { x: 0, y: 0 };\n\n    /** Define the content to display in the tooltip */\n    _tooltipContent: string;\n\n    /** Determine if the component is initialised */\n    private _isInitialised: boolean = false;\n\n    /** Store the instance of the sankey layout */\n    private readonly _sankey = new SankeyChart<T>();\n\n    ngAfterViewInit(): void {\n\n        // verify we have a node template defined before proceeding\n        if (!this.nodeTemplate) {\n            throw new Error('Sankey Chart - Node Template has not been defined.');\n        }\n\n        // set the initial chart size\n        this._width = this.nodeContainer.nativeElement.offsetWidth;\n        this._height = this.nodeContainer.nativeElement.offsetHeight;\n\n        // perform the initial render\n        this._render();\n\n        // mark the component as initialised\n        this._isInitialised = true;\n    }\n\n    /**\n     * Detect any changes from Inputs. We can skip\n     * the first function call as this happens before\n     * the initial render so it has no effect.\n     */\n    ngOnChanges(): void {\n        if (this._isInitialised) {\n            this._render();\n        }\n    }\n\n    /** Re-render the chart */\n    _render(): void {\n        this._nodes = this._sankey\n            .nodes(this.nodes)\n            .links(this.links)\n            .spacing(14)\n            .size(this.minWidth, this.maxWidth, this.minHeight)\n            .width(this._width || this.nodeContainer.nativeElement.offsetWidth)\n            .height(this._height || this.nodeContainer.nativeElement.offsetHeight)\n            .layout();\n\n        // ensure the focus manager has the latest node data\n        this._focusManager.setNodes(this._nodes);\n\n        this._columns = this.getColumns();\n        this._changeDetector.detectChanges();\n    }\n\n    /** Update the layout whenever the dimensions change changes */\n    _onResize(dimensions: ResizeDimensions): void {\n        this._width = dimensions.width;\n        this._height = dimensions.height;\n        this._render();\n    }\n\n    /**\n     * Column count should be based on the data, not the titles\n     * as they may not specify titles but the nodes will still be\n     * rendered.\n     */\n    _getColumnCount(): number {\n        return this._nodes.reduce((column, node) => Math.max(column, node.column), 0);\n    }\n\n    /**\n     * Get the SVG path that defines the shape of the link\n     */\n    _getPath(link: SankeyLink): string {\n        return this._sankey.link(link);\n    }\n\n    /**\n     * Set the active state of a node and the inputs and outputs\n     * associated with this node.\n     */\n    _setNodeActive(nodeLink: SankeyNodeLink<T>, active: boolean): void {\n\n        // set the node active state\n        nodeLink.active = active;\n\n        // set the active state of each link\n        nodeLink.inputs.forEach(link => link.active = active);\n        nodeLink.outputs.forEach(link => link.active = active);\n\n        // set the active state of all input and output nodes\n        nodeLink.inputs.map(link => this._sankey.getNodeLink(link.source)).forEach(_node => _node.active = active);\n        nodeLink.inputs.map(link => this._sankey.getNodeLink(link.target)).forEach(_node => _node.active = active);\n        nodeLink.outputs.map(link => this._sankey.getNodeLink(link.source)).forEach(_node => _node.active = active);\n        nodeLink.outputs.map(link => this._sankey.getNodeLink(link.target)).forEach(_node => _node.active = active);\n\n        // ensure we update the view to show highlights\n        this._changeDetector.detectChanges();\n    }\n\n\n    /**\n     * Set the focused state of a node and the inputs and outputs\n     * associated with this node.\n     */\n    _setNodeFocus(nodeLink: SankeyNodeLink<T>, focused: boolean, element: HTMLDivElement): void {\n\n        // set the node focus state\n        nodeLink.focus = focused;\n\n        // set the active state of each link\n        nodeLink.inputs.forEach(link => link.focus = focused);\n        nodeLink.outputs.forEach(link => link.focus = focused);\n\n        // set the active state of all input and output nodes\n        nodeLink.inputs.map(link => this._sankey.getNodeLink(link.source)).forEach(_node => _node.focus = focused);\n        nodeLink.inputs.map(link => this._sankey.getNodeLink(link.target)).forEach(_node => _node.focus = focused);\n        nodeLink.outputs.map(link => this._sankey.getNodeLink(link.source)).forEach(_node => _node.focus = focused);\n        nodeLink.outputs.map(link => this._sankey.getNodeLink(link.target)).forEach(_node => _node.focus = focused);\n\n        // we need to add the focus indicator here programmatically. The default quantum-ux-aspects focus indicator\n        // styling uses `!important` so our inline style needs to also be `!important` to override this, and unfortunately\n        // there is a known issue with `NgStyle` and `[style.xyz]` bindings preventing them from adding the `!important`\n        // modifier so we must do it manually (not using `Renderer2`).\n        if (this.color) {\n            element.style.setProperty('box-shadow', this._getFocusIndicator(nodeLink), 'important');\n        }\n\n        // ensure we update the view to show highlights\n        this._changeDetector.detectChanges();\n    }\n\n    /**\n     * Set the active state of a link and the source and target\n     * nodes associated with the link\n     */\n    _setLinkActive(link: SankeyLink & SankeyLinkPlot & SankeyLinkInteraction, active: boolean): void {\n        link.active = active;\n\n        if (link.source !== undefined) {\n            this._sankey.getNodeLink(link.source).active = active;\n        }\n\n        if (link.target !== undefined) {\n            this._sankey.getNodeLink(link.target).active = active;\n        }\n\n        // update the tooltip visibility\n        this._isTooltipOpen = active;\n\n        // update the tooltip content\n        this._tooltipContent = active ? this.linkTooltip(link) : '';\n\n        // ensure we update the view to show highlights\n        this._changeDetector.detectChanges();\n    }\n\n    /**\n     * This is required because we want to toggle a class based on the `active`\n     * property on a link, however toggling classes using `NgClass` or the class\n     * binding syntax `[class.xyz]` does not work in IE when applied to an SVG\n     * element. (https://github.com/angular/angular/issues/6327)\n     *\n     * The alternatice is to bind directly to the `class` attribute and return a\n     * string that will toggle the class based on the `active` property.\n     */\n    _getLinkClass(link: SankeyLink & SankeyLinkPlot & SankeyLinkInteraction): string {\n        return `ux-sankey-chart-link ${(link.active || link.focus) ? 'ux-sankey-chart-link-active' : ''}`;\n    }\n\n    /**\n     * Get the SVG path that defines the shape of the falloff indicator\n     */\n    _getFalloffPath(node: SankeyNodeLink<T>): string {\n        return this._sankey.getFalloffPath(node);\n    }\n\n    /**\n     * Falloff represents the amount of data that does not get passed on,\n     * for example, if a node gets 1,000,000 items from inputs and only outputs\n     * 500,000 then there is falloff of 500,000. However, items in the last column\n     * never pass on any information, so tecnhically 100% of their input is falloff\n     * so we shouldn't show it in the last column.\n     */\n    _showFalloff(nodeLink: SankeyNodeLink<T>): boolean {\n        return nodeLink.column < this._columns.length - 1;\n    }\n\n    /** Update the visibility and content of the tooltip on falloff hover */\n    _setFalloffTooltip(nodeLink: SankeyNodeLink<T>, isVisible: boolean): void {\n        this._isTooltipOpen = isVisible;\n        this._tooltipContent = isVisible ? this.falloffTooltip(nodeLink.falloff) : '';\n        this._changeDetector.detectChanges();\n    }\n\n    /**\n     * Update the position of the tooltip\n     */\n    _setTooltipPosition(event: MouseEvent): void {\n        const { left, top } = (this.nodeContainer.nativeElement as HTMLElement).getBoundingClientRect();\n        const x = (event.pageX - left) - (window.scrollX || document.documentElement.scrollLeft);\n        const y = (event.pageY - top) - (window.scrollY || document.documentElement.scrollTop);\n\n        this._tooltipPosition = { x, y };\n        this._changeDetector.detectChanges();\n    }\n\n    /**\n     * Correctly track the node changes in `*ngFor` based on\n     * the unique node ids to prevent unnecessary re-rendering\n     */\n    _trackNodeBy(_index: number, nodeLink: SankeyNodeLink<T>) {\n        return nodeLink.node.id;\n    }\n\n    /**\n     * Correctly track the link changes in `*ngFor` based on\n     * the source and target to prevent unnecessary re-rendering\n     */\n    _trackLinkBy(_index: number, link: SankeyLink) {\n        return `${link.source}-${link.target}`;\n    }\n\n    /**\n     * Get the color of node based on whether or not\n     * the `color` input has been provided.\n     */\n    _getColor(item: SankeyNodeLink<T> | SankeyLink & SankeyLinkInteraction): string {\n        // if we are not node hovering or focusing or no custom color is defined then return nothing\n        if (!item.active && !item.focus || !this.color) {\n            return;\n        }\n\n        // return an rgba value if it is a `ThemeColor` to support transparency\n        return this.color instanceof ThemeColor ? this.color.toRgba() : this._colorService.resolve(this.color);\n    }\n\n    /**\n     * We want the focus indicator color to match the active color,\n     * which if programmatically defined need to be overriden\n     */\n    _getFocusIndicator(nodeLink: SankeyNodeLink<T>): string {\n        // if the node is not focused or there is no custom color\n        // then return null in which case CSS indicator will show\n        if (!nodeLink.focus || !this.color) {\n            return '';\n        }\n\n        // otherwise return the shadow based on the color provided.\n        const color = this.color instanceof ThemeColor ? this.color : ThemeColor.parse(this._colorService.resolve(this.color));\n\n        // generate a box shadow based on the specified color\n        return `0 0 0 1px #fff, 0 0 0 3px ${color.setAlpha(0.5).toRgba()}`;\n    }\n\n    /**\n     * Get columns mapped with their title if they have any\n     */\n    private getColumns(): SankeyColumn[] {\n        return this._sankey.columns().map((width, index) => ({ width, title: this.columns[index] || '', position: this.getColumnPosition(index) }));\n    }\n\n    /**\n     * Get the start position of a column which can be determined\n     * by finding a node that is in that column and using its\n     * x position as all nodes start at the same position within a column.\n     */\n    private getColumnPosition(column: number): number {\n        // find a node in this column and take its x position\n        const node = this._nodes.find(_node => _node.column === column);\n        return node ? node.x : 0;\n    }\n\n    /**\n     * Get the default content of a link tooltip\n     */\n    private getLinkTooltip(link: SankeyLink): string {\n        return link.value.toLocaleString('en') + ' items';\n    }\n\n    /**\n     * Get the default content of a falloff tooltip\n     */\n    private getFalloffTooltip(falloff: number): string {\n        return falloff.toLocaleString('en') + ' items';\n    }\n\n}\n\nexport interface SankeyColumn {\n    width: number;\n    title: string;\n    position: number;\n}\n\nexport interface SankeyTooltipPosition {\n    x: number;\n    y: number;\n}\n\nexport interface SankeyNodeContext<T> {\n    node: SankeyNode<T>;\n    active: boolean;\n    focus: boolean;\n}\n","@if (columns && columns.length > 0) {\n  <div class=\"ux-sankey-chart-columns\">\n    @for (column of _columns; track column.title) {\n      <div class=\"ux-sankey-chart-column\" [style.width.px]=\"column.width\">\n        <p class=\"ux-sankey-chart-column-title\" [style.left.px]=\"column.position\">\n          {{ column.title }}\n        </p>\n      </div>\n    }\n  </div>\n}\n\n<svg\n  #linkContainer\n  [attr.width]=\"_width\"\n  [attr.height]=\"_height\"\n  class=\"ux-sankey-chart-links\"\n  [style.top.px]=\"!columns || columns.length === 0 ? 8 : null\"\n>\n  <defs>\n    <linearGradient id=\"falloff-gradient\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n      <stop class=\"ux-sankey-chart-falloff-gradient-start\" offset=\"25%\"></stop>\n      <stop class=\"ux-sankey-chart-falloff-gradient-end\" offset=\"100%\"></stop>\n    </linearGradient>\n  </defs>\n  <g>\n    @for (node of _nodes; track _trackNodeBy($index, node)) {\n      <ng-container>\n        @for (link of node.outputs; track _trackLinkBy($index, link)) {\n          <path\n            [attr.class]=\"_getLinkClass(link)\"\n            [attr.d]=\"_getPath(link)\"\n            [style.fill]=\"_getColor(link)\"\n            (mouseenter)=\"_setLinkActive(link, true)\"\n            (mouseleave)=\"_setLinkActive(link, false)\"\n            (mousemove)=\"_setTooltipPosition($event)\"\n          ></path>\n        }\n        @if (node.falloff && _showFalloff(node)) {\n          <path\n            class=\"ux-sankey-chart-falloff-indicator\"\n            [attr.d]=\"_getFalloffPath(node)\"\n            (mouseenter)=\"_setFalloffTooltip(node, true)\"\n            (mouseleave)=\"_setFalloffTooltip(node, false)\"\n            (mousemove)=\"_setTooltipPosition($event)\"\n          ></path>\n        }\n      </ng-container>\n    }\n  </g>\n</svg>\n\n<div\n  #nodeContainer\n  class=\"ux-sankey-chart-nodes\"\n  (uxResize)=\"_onResize($event)\"\n  [style.top.px]=\"!columns || columns.length === 0 ? 8 : null\"\n>\n  @for (node of _nodes; track _trackNodeBy($index, node)) {\n    <div\n      #nodeElement\n      [uxSankeyNode]=\"node\"\n      uxFocusIndicator\n      class=\"ux-sankey-chart-node\"\n      [class.ux-sankey-chart-node-active]=\"node.active || node.focus\"\n      [style.left.px]=\"node.x\"\n      [style.top.px]=\"node.y\"\n      [style.width.px]=\"node.width\"\n      [style.height.px]=\"node.height\"\n      [style.background-color]=\"_getColor(node)\"\n      (mouseenter)=\"_setNodeActive(node, true)\"\n      (mouseleave)=\"_setNodeActive(node, false)\"\n      (indicator)=\"_setNodeFocus(node, $event, nodeElement)\"\n    >\n      <ng-container\n        [ngTemplateOutlet]=\"nodeTemplate\"\n        [ngTemplateOutletContext]=\"{ node: node.node, active: node.active, focus: node.focus }\"\n      >\n      </ng-container>\n    </div>\n  }\n\n  @if (_isTooltipOpen) {\n    <ux-tooltip\n      class=\"ux-sankey-tooltip\"\n      placement=\"top\"\n      [content]=\"_tooltipContent\"\n      alignment=\"center\"\n      [style.left.px]=\"_tooltipPosition.x\"\n      [style.top.px]=\"_tooltipPosition.y\"\n      [@tooltipAnimation]\n    >\n    </ux-tooltip>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { TooltipModule } from '../tooltip/index';\nimport { SankeyNodeDirective } from './sankey-chart-node.directive';\nimport { SankeyChartComponent } from './sankey-chart.component';\n\n@NgModule({\n    declarations: [\n        SankeyChartComponent,\n        SankeyNodeDirective\n    ],\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        ResizeModule,\n        TooltipModule,\n        ColorServiceModule\n    ],\n    exports: [\n        SankeyChartComponent\n    ]\n})\nexport class SankeyChartModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nconst UNSET_FOCUS: SearchBuilderFocus = { groupId: null, index: -1 };\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchBuilderFocusService {\n\n    focus$ = new BehaviorSubject<SearchBuilderFocus>(UNSET_FOCUS);\n\n    /**\n     * Set focus on a search builder component.\n     * @param groupId The `id` of the group containing the component.\n     * @param index The (zero-based) index of the component.\n     */\n    setFocus(groupId: string, index: number): void {\n        this.focus$.next({ groupId, index });\n    }\n\n    /**\n     * Removes focus from all components. If focus is not on a search builder component, this does nothing.\n     */\n    clearFocus(): void {\n        this.focus$.next(UNSET_FOCUS);\n    }\n}\n\nexport interface SearchBuilderFocus {\n    groupId: string;\n    index: number;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { SearchBuilderComponentDefinition } from './interfaces/component-definition.interface';\nimport { SearchBuilderQuery } from './interfaces/query.interface';\n\n@Injectable()\nexport class SearchBuilderService {\n\n  query: SearchBuilderQuery = {};\n  queryChange: Subject<SearchBuilderQuery> = new Subject<SearchBuilderQuery>();\n  validationChange: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n\n  private _componentId: number = 0;\n  private readonly _components: SearchBuilderComponentDefinition[] = [];\n  private _validation: { [key: number]: boolean } = {};\n\n  /**\n   * Add a component to the internal list of components\n   */\n  registerComponent(component: SearchBuilderComponentDefinition): void {\n\n    // ensure there are no components with a matching name\n    if (this._components.find(cmp => cmp.name === component.name)) {\n      throw new Error(`Search builder components must have a unique name. The name ${component.name} has already been used.`);\n    }\n\n    // if unique then add the component to the list\n    this._components.push(component);\n  }\n\n  /**\n   * Bulk registration of components\n   * (Just a helper method)\n   */\n  registerComponents(components: SearchBuilderComponentDefinition[]): void {\n    components.forEach(component => this.registerComponent(component));\n  }\n\n  /**\n   * Get a registered component class\n   */\n  getComponent(name: string): SearchBuilderComponentDefinition {\n\n    // find the component\n    const component = this._components.find(cmp => cmp.name === name);\n\n    // if there is no match throw an exception\n    if (!component) {\n      throw new Error(`No search build component with the name ${name} exists`);\n    }\n\n    // ensure config is defined - at least to an empty object\n    component.config = component.config || {};\n\n    return component;\n  }\n\n  /**\n   * Update the internal search query state\n   * note that the query will be immutable\n   */\n  setQuery(query: SearchBuilderQuery): void {\n    this.query = Object.assign({}, query);\n  }\n\n  /**\n   * Return the current query state\n   */\n  getQuery(): SearchBuilderQuery {\n    return this.query;\n  }\n\n  /**\n   * Trigger the observable to indicate the query has been updated\n   */\n  queryHasChanged(): void {\n    this.queryChange.next(this.query);\n  }\n\n  /**\n   * Store the validation state of the query\n   */\n  setValid(id: number, valid: boolean): void {\n\n    // store the state for this specific component\n    this._validation[id] = valid;\n\n    // evaluate the entire validation state\n    this.validationChange.next(!Object.keys(this._validation).some(key => !this._validation[key]));\n  }\n\n  /**\n   * Generate a unique id for each component\n   */\n  generateComponentId(): number {\n    return this._componentId++;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SearchBuilderGroupQuery } from '../interfaces/group-query.interface';\nimport { SearchBuilderFocusService } from '../search-builder-focus.service';\nimport { SearchBuilderService } from '../search-builder.service';\n\n@Injectable()\nexport class SearchBuilderGroupService {\n  private readonly _searchBuilderService = inject(SearchBuilderService);\n\n  private readonly _searchBuilderFocusService = inject(SearchBuilderFocusService);\n\n  private _id: string;\n\n  /**\n   * Initialise the group by defining an id\n   */\n  init(id: string): void {\n    // store the name of the group\n    this._id = id;\n\n    // create the entry in the query object if it doesn't exist\n    if (!this._searchBuilderService.query[this._id]) {\n\n      // create the section\n      this._searchBuilderService.query[this._id] = [];\n\n      // emit the changes after the initial setup\n      setTimeout(() => this._searchBuilderService.queryHasChanged());\n    }\n  }\n\n  /**\n   * Remove a field from the search builder query and return focus to the previous field.\n   */\n  removeAtIndex(index: number): void {\n\n    // get the query for this group\n    const query = this.getQuery();\n\n    // remove the field from the array\n    query.splice(index, 1);\n\n    // Focus the previous item if available\n    this._searchBuilderFocusService.setFocus(this._id, index <= 0 ? 0 : index - 1);\n  }\n\n  /**\n   * Get the query for this specific search group\n   */\n  getQuery(): SearchBuilderGroupQuery[] {\n    return this._searchBuilderService.query[this._id] ? this._searchBuilderService.query[this._id] : [];\n  }\n}\n","import { ComponentFactoryResolver, ComponentRef, Directive, inject, Input, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { delay, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { SearchBuilderFocusService } from '../search-builder-focus.service';\nimport { SearchBuilderService } from '../search-builder.service';\nimport { BaseSearchComponent } from '../search-components/base-search.component';\n\n@Directive({\n    selector: '[uxSearchBuilderOutlet]'\n})\nexport class SearchBuilderOutletDirective implements OnInit, OnDestroy {\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    private readonly _componentFactoryResolver = inject(ComponentFactoryResolver);\n\n    private readonly _searchBuilderService = inject(SearchBuilderService);\n\n    private readonly _searchBuilderFocusService = inject(SearchBuilderFocusService);\n\n    @Input('uxSearchBuilderOutlet') outlet: string;\n     \n    @Input('uxSearchBuilderOutletContext') context: any;\n    @Input('uxSearchBuilderOutletGroupId') groupId: string;\n    @Input('uxSearchBuilderOutletIndex') index: number;\n\n    private _componentRef: ComponentRef<BaseSearchComponent>;\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n\n        // get the class from the type\n        const componentDefinition = this._searchBuilderService.getComponent(this.outlet);\n\n        // create the component factory\n        const componentFactory = this._componentFactoryResolver.resolveComponentFactory<BaseSearchComponent>(componentDefinition.component);\n\n        // create the component instance\n        this._componentRef = this._viewContainerRef.createComponent(componentFactory);\n\n        // combine the predefined config with any dynmaic config\n        const config = Object.assign({}, componentDefinition.config, this.context.config || {});\n\n        // set the context and config property on the component instance\n        this._componentRef.instance.context = this.context;\n        this._componentRef.instance.config = config;\n\n        this._searchBuilderFocusService.focus$\n            .pipe(distinctUntilChanged(), delay(0), takeUntil(this._onDestroy))\n            .subscribe(focus => {\n                this._componentRef.instance.focus = (focus.groupId === this.groupId && focus.index === this.index);\n            });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","import { Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SearchBuilderGroupQuery } from '../interfaces/group-query.interface';\nimport { SearchBuilderFocusService } from '../search-builder-focus.service';\nimport { SearchBuilderGroupService } from './search-builder-group.service';\n\n@Component({\n  selector: 'ux-search-builder-group',\n  templateUrl: './search-builder-group.component.html',\n  providers: [SearchBuilderGroupService]\n})\nexport class SearchBuilderGroupComponent implements OnInit, OnDestroy {\n  readonly searchBuilderGroupService = inject(SearchBuilderGroupService);\n\n  private readonly _searchBuilderFocusService = inject(SearchBuilderFocusService);\n\n  @Input() id: string;\n  @Input() header: string;\n  @Input() operator: SearchBuilderGroupOperator = 'and';\n  @Input() addText: string = 'Add a field';\n  @Input() placeholder: TemplateRef<void>;\n  @Input() showPlaceholder: boolean = false;\n  @Input() removeFieldButtonAriaLabel: string = 'Remove field';\n\n  @Output() add: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n  @Output() remove: EventEmitter<SearchBuilderGroupQuery> = new EventEmitter<SearchBuilderGroupQuery>();\n\n  focusIndex: number = -1;\n\n  private readonly _onDestroy = new Subject<void>();\n\n  ngOnInit(): void {\n\n    // ensure we have a name otherwise throw an error\n    if (!this.id) {\n      throw new Error('Search builder group must have an id attribute.');\n    }\n\n    // otherwise register the group\n    this.searchBuilderGroupService.init(this.id);\n\n    // Track focus for child components\n    this._searchBuilderFocusService.focus$.pipe(takeUntil(this._onDestroy)).subscribe(focus => {\n      this.focusIndex = (focus.groupId === this.id) ? focus.index : -1;\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  addField(event: MouseEvent): void {\n    this.add.emit(event);\n  }\n\n  removeFieldAtIndex(index: number, field: SearchBuilderGroupQuery): void {\n    this.searchBuilderGroupService.removeAtIndex(index);\n    this.remove.emit(field);\n  }\n\n  setFocus(index: number): void {\n    this._searchBuilderFocusService.setFocus(this.id, index);\n  }\n\n  clearFocus(): void {\n    this._searchBuilderFocusService.clearFocus();\n  }\n}\n\nexport type SearchBuilderGroupOperator = 'and' | 'or' | 'not';\n","<h4 class=\"search-group-title\">{{ header }}</h4>\n\n<div class=\"search-group-content\">\n\n  <div class=\"search-group-operator search-group-operator-{{ operator }}\"\n  [class.hidden-operator]=\"searchBuilderGroupService.getQuery().length < 2\">{{ operator }}</div>\n\n  <div class=\"search-group-items\">\n\n    @for (field of searchBuilderGroupService.getQuery(); track field; let i = $index) {\n      <div\n        class=\"search-group-item-container\"\n        [class.search-group-item-focus]=\"focusIndex === i\"\n        (uxFocusWithin)=\"setFocus(i)\"\n        (uxBlurWithin)=\"clearFocus()\">\n        <div class=\"search-group-item\">\n          <ng-container *uxSearchBuilderOutlet=\"field.type; context: field; groupId: id; index: i\"></ng-container>\n        </div>\n        <button type=\"button\"\n          uxFocusIndicator\n          [attr.aria-label]=\"removeFieldButtonAriaLabel\"\n          class=\"search-group-item-remove\"\n          (click)=\"removeFieldAtIndex(i, field)\">\n          <ux-icon name=\"close\"></ux-icon>\n        </button>\n      </div>\n    }\n\n    <!-- Placeholder Item -->\n    @if (showPlaceholder) {\n      <!-- The Default Placeholder -->\n      @if (!placeholder) {\n        <div class=\"search-group-item-container placeholder-item\">\n          <div class=\"search-group-item\">\n            <label class=\"form-label\">New field</label>\n            <div class=\"form-control\"></div>\n          </div>\n        </div>\n      }\n      <!-- Allow a custom placeholder -->\n      <ng-container *ngTemplateOutlet=\"placeholder\"></ng-container>\n    }\n\n  </div>\n\n  <button type=\"button\" uxFocusIndicator class=\"search-builder-group-add-field\" (click)=\"addField($event)\">\n    <ux-icon class=\"search-builder-group-add-field-icon\" name=\"add\"></ux-icon>\n    <span class=\"search-builder-group-add-field-label\">{{ addText }}</span>\n  </button>\n\n</div>\n\n<hr class=\"search-builder-group-divider\">\n","import { Component, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { SearchBuilderComponentDefinition } from './interfaces/component-definition.interface';\nimport { SearchBuilderQuery } from './interfaces/query.interface';\nimport { SearchBuilderService } from './search-builder.service';\n\n@Component({\n  selector: 'ux-search-builder',\n  templateUrl: './search-builder.component.html',\n  providers: [SearchBuilderService]\n})\nexport class SearchBuilderComponent implements OnDestroy {\n  private readonly _searchBuilderService = inject(SearchBuilderService);\n\n  @Input()\n  set components(components: SearchBuilderComponentDefinition[]) {\n    this._searchBuilderService.registerComponents(components);\n  }\n\n  @Input()\n  set query(value: SearchBuilderQuery) {\n    this._searchBuilderService.setQuery(value);\n  }\n\n  get query() {\n    return this._searchBuilderService.getQuery();\n  }\n\n  @Output() queryChange: EventEmitter<SearchBuilderQuery> = new EventEmitter<SearchBuilderQuery>();\n  @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>(true);\n\n  private readonly _querySubscription: Subscription;\n  private readonly _validSubscription: Subscription;\n\n  /**\n   * Register the default search builder components\n   */\n  constructor() {\n\n    // watch for any query changes\n    this._querySubscription = this._searchBuilderService.queryChange.subscribe(query => this.queryChange.emit(query));\n\n    // watch for any changes to the validation\n    this._validSubscription = this._searchBuilderService.validationChange.pipe(distinctUntilChanged()).subscribe(valid => this.valid.emit(valid));\n  }\n\n  /**\n   * Remove any subscriptions and cleanup\n   */\n  ngOnDestroy(): void {\n    this._querySubscription.unsubscribe();\n    this._validSubscription.unsubscribe();\n  }\n\n}\n","<ng-content></ng-content>","export class TagInputEvent {\n\n    private _defaultPrevented = false;\n\n    constructor(public tag: unknown) {}\n\n    preventDefault() {\n        this._defaultPrevented = true;\n    }\n\n    defaultPrevented(): boolean {\n        return this._defaultPrevented;\n    }\n}","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { BACKSPACE, DELETE, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnChanges, OnDestroy, Output, QueryList, SimpleChanges, TemplateRef, ViewChild, forwardRef, inject } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { tick } from '../../common/index';\r\nimport { TypeaheadComponent, TypeaheadKeyService } from '../typeahead/index';\r\nimport { TypeaheadOptionEvent } from '../typeahead/typeahead-event';\r\nimport { TagInputEvent } from './tag-input-event';\r\n\r\nlet uniqueId = 0;\r\n\r\nconst TAGINPUT_VALUE_ACCESSOR = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => TagInputComponent),\r\n    multi: true\r\n};\r\nconst TAGINPUT_VALIDATOR = {\r\n    provide: NG_VALIDATORS,\r\n    useExisting: forwardRef(() => TagInputComponent),\r\n    multi: true\r\n};\r\n\r\n@Component({\r\n    selector: 'ux-tag-input',\r\n    exportAs: 'ux-tag-input',\r\n    templateUrl: 'tag-input.component.html',\r\n    providers: [TAGINPUT_VALUE_ACCESSOR, TAGINPUT_VALIDATOR],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n    host: {\r\n        '[class.disabled]': 'disabled',\r\n        '[class.focus]': 'hasFocus()',\r\n        '[class.invalid]': '!valid || !inputValid'\r\n    }\r\n})\r\n \r\nexport class TagInputComponent<T = any> implements AfterContentInit, OnChanges, ControlValueAccessor, Validator, OnDestroy {\r\n    private readonly _changeDetector = inject(ChangeDetectorRef);\r\n\r\n    private readonly _element = inject(ElementRef);\r\n\r\n    private readonly _typeaheadKeyService = inject(TypeaheadKeyService);\r\n\r\n    private readonly _document = inject<Document>(DOCUMENT);\r\n\r\n    /** Specify a unique Id for the component */\r\n    @Input() @HostBinding('attr.id') id: string = `ux-tag-input-${ ++uniqueId }`;\r\n\r\n    /**\r\n     * The list of tags appearing in the tag input. This can be an array of strings or custom objects.\r\n     * See the `displayProperty` property for details of using a custom object.\r\n     */\r\n    @Input()\r\n    get tags(): T | ReadonlyArray<T> {\r\n        if (!this._tags) {\r\n            this._tags = [];\r\n        }\r\n        return this._tags;\r\n    }\r\n\r\n    set tags(value: T | ReadonlyArray<T>) {\r\n        this._tags = Array.isArray(value) ? value : [];\r\n    }\r\n\r\n    /** The editable text appearing in the tag input. */\r\n    @Input() input: string = '';\r\n\r\n    /**\r\n     * Determines the display value of the `options`, if they are custom objects.\r\n     * This may be a function or a string. If a function is provided, it receives\r\n     * the option object as an argument, and should return the appropriate display value.\r\n     * If the name of a property is provided as a string, that property is used as the display value.\r\n     */\r\n    @Input() display: TagInputDisplayFunction<T> | string;\r\n\r\n    /** Controls whether pasting text into the text input area automatically converts that text into one or more tags. */\r\n    @Input() addOnPaste: boolean = true;\r\n\r\n    /** The aria-label to apply to the child `input` element. */\r\n    @Input() ariaLabel: string;\r\n\r\n    /** ID of the element which serves as a label for the input element. */\r\n    @Input() ariaLabelledby: string;\r\n\r\n    /** Controls the disabled state of the tag input. */\r\n    @Input() disabled: boolean = false;\r\n\r\n    /** Specified if this is a required input. */\r\n    @Input() required: boolean;\r\n\r\n    /**\r\n     * If set to `true`, the tag input will prevent addition and removal of tags to enforce the minTags and maxTags settings.\r\n     * Otherwise, a validation error will be raised.\r\n     */\r\n    @Input() enforceTagLimits: boolean = false;\r\n\r\n    /**\r\n     * If `true`, input entered into the text input area can be converted into a tag by pressing enter.\r\n     * Otherwise, tags can only be added from the typeahead list or other external means.\r\n     * (Note that the `maxTags` and `tagPattern` will prevent invalid inputs regardless of this setting.)\r\n     */\r\n    @Input() freeInput: boolean = true;\r\n\r\n    /** If `true` the input field will be readonly and selection can only occur by using the dropdown. */\r\n    @Input() readonlyInput: boolean = false;\r\n\r\n    /**\r\n     * The maximum number of tags permitted in the tag input. If the number of tags is equal to `maxTags` and\r\n     * `enforceTagLimits` is `true`, addition of tags will be prevented until a tag is removed\r\n     */\r\n    @Input() maxTags: number = Number.MAX_VALUE;\r\n\r\n    /**\r\n     * The minimum number of tags permitted in the tag input. If the number of tags is equal to `minTags` and `enforceTagLimits` is\r\n     * `true`, removal of tags will be prevented until a new tag is added.\r\n     */\r\n    @Input() minTags: number = 0;\r\n\r\n    /** The placeholder text which appears in the text input area when it is empty. */\r\n    @Input() placeholder: string = '';\r\n\r\n    /** Controls whether the typeahead appears when the text input area is clicked. This has no effect if the ux-typeahead component is not configured. */\r\n    @Input() showTypeaheadOnClick: boolean = false;\r\n\r\n    /**\r\n     * A string containing the characters which delimit tags.\r\n     * Typing one of the characters in `tagDelimiters` will cause the preceding text to be added as a tag,\r\n     * and the text input area will be cleared. Pasting a string containing one or more of characters in\r\n     * `tagDelimiters` will cause the string to be split into multiple tags.\r\n     * Note that the delimiter character will not be part of the tag text.\r\n     */\r\n    @Input() tagDelimiters: string = '';\r\n\r\n    /** The validation expression for tags added via the input text area. Strings which do not match this expression will not be added as tags. */\r\n    @Input() tagPattern: RegExp;\r\n\r\n    /**\r\n     * A template which will be rendered as the content of each tag. The following context properties are available in the template:\r\n     * - `tag: any` - the string or custom object representing the tag.\r\n     * - `index: number` - the zero-based index of the tag as it appears in the tag input.\r\n     * - `api: TagApi` - provides the functions getTagDisplay, removeTagAt and canRemoveTagAt.\r\n     */\r\n    @Input() tagTemplate: TemplateRef<TagTemplateContext<T>>;\r\n\r\n    /**\r\n     * A function which returns either a string, string[], or Set<string>, compatible with the NgClass directive. The function receives the following parameters:\r\n     * - `tag: any` - the string or custom object representing the tag.\r\n     * - `index: number` - the zero-based index of the tag as it appears in the tag input.\r\n     * - `selected: boolean` - true if the tag is currently selected.\r\n     */\r\n    @Input() tagClass: TagClassFunction<T> = () => undefined;\r\n\r\n    /**\r\n     * An object which contains details of validation errors. The following properties will be present if there is a related validation error:\r\n     * - `tagRangeError` - present if the number of tags is outside the range specified by minTags and maxTags.\r\n     * - `inputPattern` - present if an input has been submitted which does not match the tagPattern.\r\n     */\r\n     \r\n    @Input() validationErrors: any = {};\r\n\r\n    /** Defines the autocomplete property on the input field which can be used to prevent the browser from displaying autocomplete suggestions. */\r\n    @Input() autocomplete: string = 'off';\r\n\r\n    /**\r\n     * A custom function which is called to create a new tag object.\r\n     * This can be used to populate other properties in the tag object.\r\n     * If `createTag` is not provided, then an object is created with the `displayProperty` set to the input.\r\n     * If `displayProperty` is also not set, then the tag is created as a simple string.\r\n     */\r\n     \r\n    @Input('createTag') createTagHandler: (value: string) => any;\r\n\r\n    /** Define a custom icon to be used instead of the chevron */\r\n    @Input() icon: TemplateRef<void>;\r\n\r\n    /** Determine if we should show the clear all button */\r\n    @Input() clearButton: boolean = false;\r\n\r\n    /** Determine an aria label for the clear button */\r\n    @Input() clearButtonAriaLabel: string = 'Reset selection';\r\n\r\n    /** Determine if the dropdown panel should close on external click.*/\r\n    @Input() set autoCloseDropdown(value: boolean) {\r\n        this._autoCloseDropdown = coerceBooleanProperty(value);\r\n    }\r\n\r\n    get autoCloseDropdown(): boolean {\r\n        return this._autoCloseDropdown;\r\n    }\r\n\r\n    /** Emits when tags is changed. */\r\n    @Output() tagsChange = new EventEmitter<ReadonlyArray<T>>();\r\n\r\n    /** Emits when input is changed. */\r\n    @Output() inputChange = new EventEmitter<string>();\r\n\r\n    /** Raised when a tag is about to be added. The `tag` property of the event contains the tag to be added. Call `preventDefault()` on the event to prevent addition. */\r\n    @Output() tagAdding = new EventEmitter<TagInputEvent>();\r\n\r\n    /** Raised when a tag has been added. The tag property of the event contains the tag. */\r\n    @Output() tagAdded = new EventEmitter<TagInputEvent>();\r\n\r\n    /** Raised when a tag has failed validation according to the `tagPattern`. The tag property of the event contains the string which failed validation. */\r\n    @Output() tagInvalidated = new EventEmitter<TagInputEvent>();\r\n\r\n    /** Raised when a tag is about to be removed. The `tag` property of the event contains the tag to be removed. Call `preventDefault()` on the event to prevent removal. */\r\n    @Output() tagRemoving = new EventEmitter<TagInputEvent>();\r\n\r\n    /** Raised when a tag has been removed. The tag property of the event contains the tag. */\r\n    @Output() tagRemoved = new EventEmitter<TagInputEvent>();\r\n\r\n    /** Raised when a tag has been clicked. The `tag` property of the event contains the clicked tag. Call `preventDefault()` on the event to prevent the default behaviour of selecting the tag. */\r\n    @Output() tagClick = new EventEmitter<TagInputEvent>();\r\n\r\n    // When clicking on the input during multiple mode it will send a on touched event to the parent component\r\n    @Output() inputFocus = new EventEmitter<FocusEvent>();\r\n\r\n    // Emits when the component loses focus\r\n    @Output() inputBlur = new EventEmitter<FocusEvent>();\r\n\r\n    @ContentChildren(TypeaheadComponent) typeaheadQuery: QueryList<TypeaheadComponent>;\r\n\r\n    @ViewChild('tagInput', { static: false }) tagInput: ElementRef<HTMLInputElement>;\r\n\r\n    selectedIndex: number = -1;\r\n\r\n    tagApi: TagApi<T> = {\r\n        getTagDisplay: this.getTagDisplay.bind(this),\r\n        removeTagAt: this.removeTagAt.bind(this),\r\n        canRemoveTagAt: this.canRemoveTagAt.bind(this)\r\n    };\r\n\r\n    valid: boolean = true;\r\n    inputValid: boolean = true;\r\n    typeahead: TypeaheadComponent;\r\n    highlightedElement: HTMLElement;\r\n\r\n    get _showClearButton(): boolean {\r\n        return this.clearButton && this._tags && this._tags.length > 0;\r\n    }\r\n\r\n    _tags: ReadonlyArray<T> = [];\r\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n    private _onChangeHandler: (_: any) => void = () => {};\r\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n    private _onTouchedHandler: () => void = () => {};\r\n    private _subscription: Subscription;\r\n    private readonly _onDestroy = new Subject<void>();\r\n    private _autoCloseDropdown: boolean = true;\r\n\r\n    static ngAcceptInputType_autoCloseDropdown: BooleanInput;\r\n\r\n    ngAfterContentInit(): void {\r\n        // Watch for optional child typeahead control\r\n        this.connectTypeahead(this.typeaheadQuery.first);\r\n\r\n        this.typeaheadQuery.changes.pipe(takeUntil(this._onDestroy))\r\n            .subscribe((query) => this.connectTypeahead(query.first));\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes.disabled) {\r\n            if (changes.disabled.currentValue) {\r\n                // Clear selection and close dropdown\r\n                this.selectedIndex = -1;\r\n                if (this.typeahead) {\r\n                    this.typeahead.open = false;\r\n                }\r\n            }\r\n        }\r\n\r\n        // Update validation status\r\n        this.validate();\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        if (this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n\r\n        this._onDestroy.next();\r\n        this._onDestroy.complete();\r\n    }\r\n\r\n    writeValue(value: T[]): void {\r\n        if (value) {\r\n            this.tags = value;\r\n            this._changeDetector.markForCheck();\r\n        }\r\n    }\r\n\r\n    registerOnChange(fn: () => void): void {\r\n        this._onChangeHandler = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: () => void): void {\r\n        this._onTouchedHandler = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        this.disabled = isDisabled;\r\n        this._changeDetector.markForCheck();\r\n    }\r\n\r\n    /**\r\n     * Set focus on the input field.\r\n     */\r\n    focus(): void {\r\n        if (this.tagInput) {\r\n            this.tagInput.nativeElement.focus();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Validate the value of the control (tags property).\r\n     */\r\n    validate(): ValidationErrors | null {\r\n        this.valid = true;\r\n\r\n        let tagRangeError = null;\r\n        if (this._tags && (this._tags.length < this.minTags || this._tags.length > this.maxTags)) {\r\n            tagRangeError = {\r\n                given: this._tags.length,\r\n                min: this.minTags,\r\n                max: this.maxTags\r\n            };\r\n            this.valid = false;\r\n        }\r\n        this.validationErrors.tagRangeError = tagRangeError;\r\n\r\n        // forward any error to the form control\r\n        return tagRangeError;\r\n    }\r\n\r\n    @HostListener('keydown', ['$event'])\r\n    keyHandler(event: KeyboardEvent): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        // Get the input field cursor location\r\n        const inputCursorPos = this.tagInput?.nativeElement.selectionStart ?? 0;\r\n\r\n        // Determine if the input field has any text selected\r\n        const hasSelection = this.tagInput?.nativeElement.selectionStart !== this.tagInput?.nativeElement.selectionEnd;\r\n\r\n        // Determine if a tag has focus\r\n        const tagSelected = this.isValidTagIndex(this.selectedIndex);\r\n\r\n        const inputLength = this.input ? this.input.length : 0;\r\n\r\n        // Check whether the arrow keys can move the selection. Otherwise the input field takes the event.\r\n        const canNavigateLeft = tagSelected || (inputCursorPos <= 0 && !hasSelection);\r\n        const canNavigateRight = tagSelected || (inputCursorPos >= inputLength && !hasSelection);\r\n\r\n        // Forward key events to the typeahead component.\r\n        this._typeaheadKeyService.handleKey(event, this.typeahead);\r\n\r\n        switch (event.which) {\r\n            case ENTER:\r\n\r\n                // Check if a typeahead option is highlighted\r\n                if (this.typeahead && this.typeahead.open && this.typeahead.highlighted) {\r\n                    // Add the typeahead option as a tag, clear the input, and close the dropdown\r\n                    this.commitTypeahead(this.typeahead.highlighted);\r\n                    this.typeahead.open = false;\r\n                } else if (this.typeahead && !this.typeahead.open && !this.freeInput) {\r\n                    this.typeahead.open = true;\r\n                } else {\r\n                    // Validate and add the input text as a tag, if possible\r\n                    this.commitInput();\r\n                }\r\n                event.preventDefault();\r\n                break;\r\n\r\n            case BACKSPACE:\r\n                if (canNavigateLeft) {\r\n                    this.backspace();\r\n                    event.stopPropagation();\r\n                    event.preventDefault();\r\n                }\r\n                break;\r\n\r\n            case DELETE:\r\n                if (tagSelected) {\r\n                    this.removeTagAt(this.selectedIndex);\r\n                }\r\n                break;\r\n\r\n            case LEFT_ARROW:\r\n                if (canNavigateLeft) {\r\n                    this.moveSelection(-1);\r\n                    event.preventDefault();\r\n                }\r\n                break;\r\n\r\n            case RIGHT_ARROW:\r\n                if (canNavigateRight) {\r\n                    this.moveSelection(1);\r\n                    event.preventDefault();\r\n                }\r\n                break;\r\n        }\r\n\r\n        // Check for keys in the tagDelimiters\r\n        if (this.tagDelimiters && this.tagDelimiters.indexOf(this.getKeyChar(event)) >= 0) {\r\n            // Commit previous text\r\n            this.commitInput();\r\n            event.stopPropagation();\r\n            event.preventDefault();\r\n        }\r\n    }\r\n\r\n    @HostListener('focusout')\r\n    focusOutHandler(): void {\r\n\r\n        // If a click on the typeahead is in progress, don't do anything.\r\n        // This works around an issue in IE where clicking a scrollbar drops focus.\r\n        if (this.typeahead?.clicking) {\r\n            return;\r\n        }\r\n\r\n        // Close the dropdown on blur\r\n        setTimeout(() => {\r\n            if (!this._element.nativeElement.contains(this._document.activeElement) && this.autoCloseDropdown) {\r\n                this.selectedIndex = -1;\r\n                if (this.typeahead) {\r\n                    this.typeahead.open = false;\r\n                    this._changeDetector.markForCheck();\r\n                }\r\n            }\r\n        }, 200);\r\n    }\r\n\r\n    @HostListener('click')\r\n    onClick(): void {\r\n\r\n        // Prevent error if you click input when at max tag limit\r\n        if (this.tagInput === undefined) {\r\n            return;\r\n        }\r\n\r\n        // focus the input element\r\n        this.tagInput.nativeElement.focus();\r\n\r\n        // show the typeahead if we need to\r\n        this.inputClickHandler();\r\n    }\r\n\r\n    tagClickHandler(event: MouseEvent, tag: T, index: number): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        // Send tagClick event\r\n        const tagClickEvent = new TagInputEvent(tag);\r\n        this.tagClick.emit(tagClickEvent);\r\n\r\n        // Prevent focus if preventDefault() was called\r\n        if (tagClickEvent.defaultPrevented()) {\r\n            event.preventDefault();\r\n            return;\r\n        }\r\n\r\n        // Select the tag (for IE that doesn't propagate focus)\r\n        this.selectTagAt(index);\r\n    }\r\n\r\n    inputClickHandler(): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.typeahead && this.showTypeaheadOnClick) {\r\n            this.typeahead.open = true;\r\n        }\r\n    }\r\n\r\n    inputFocusHandler(): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        this.selectInput();\r\n\r\n        // mark form control as touched\r\n        this._onTouchedHandler();\r\n    }\r\n\r\n    inputPasteHandler(event: ClipboardEvent): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.addOnPaste) {\r\n            // Get text from the clipboard\r\n            let input: string = null;\r\n            if (event.clipboardData) {\r\n                input = event.clipboardData.getData('text/plain');\r\n                 \r\n            } else if ((window as any).clipboardData) {\r\n                // Internet Explorer only\r\n                 \r\n                input = (window as any).clipboardData.getData('Text');\r\n            }\r\n\r\n            // Commit the clipboard text directly\r\n            if (this.commit(input)) {\r\n                this.selectInput();\r\n                event.stopPropagation();\r\n                event.preventDefault();\r\n            }\r\n        }\r\n    }\r\n\r\n    typeaheadOptionSelectedHandler(event: TypeaheadOptionEvent): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        // When the typeahead sends the optionSelected event, commit the object directly\r\n        this.commitTypeahead(event.option);\r\n    }\r\n\r\n    /**\r\n     * Commit the current input value and clear the input field if successful.\r\n     */\r\n    commitInput(): void {\r\n        if (this.commit(this.input)) {\r\n            this.selectInput();\r\n            this.toggle();\r\n            this.setInputValue('');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Commit the given tag object and clear the input if successful.\r\n     */\r\n    commitTypeahead(tag: T): void {\r\n        if (this.addTag(tag)) {\r\n            this.selectInput();\r\n            this.setInputValue('');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Commit the given string value as one or more tags, if validation passes. Returns true if the tag(s) were created.\r\n     */\r\n    commit(input: string): boolean {\r\n        if (input && this.freeInput) {\r\n\r\n            // Split the tags by the tagDelimiters if configured\r\n            const newTags = this.splitTagInput(input);\r\n\r\n            // Check tag validation for all of the individual values\r\n            let allValid = true;\r\n            for (const newTag of newTags) {\r\n                const valid = this.validateTag(newTag);\r\n                if (!valid) {\r\n                    allValid = false;\r\n                }\r\n            }\r\n\r\n            // Add the tags if all are valid\r\n            if (allValid) {\r\n                for (const newTag of newTags) {\r\n                    this.addTag(this.createTag(newTag));\r\n                }\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * If no tag is selected, select the rightmost tag. If a tag is selected, remove it.\r\n     */\r\n    backspace(): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (!this.isValidTagIndex(this.selectedIndex)) {\r\n            this.selectTagAt(this._tags.length - 1);\r\n        } else {\r\n            this.removeTagAt(this.selectedIndex);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Move the highlighted option forwards or backwards in the list. Wraps at the limits.\r\n     * @param delta Value to be added to the selected index, i.e. -1 to move backwards, +1 to move forwards.\r\n     */\r\n    moveSelection(delta: number): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.isValidSelectIndex(this.selectedIndex)) {\r\n            this.selectedIndex += delta;\r\n\r\n            // Do wrapping of selection when out of bounds\r\n            if (this.selectedIndex < 0) {\r\n                this.selectedIndex = this._tags.length;\r\n            } else if (this.selectedIndex > this._tags.length) {\r\n                this.selectedIndex = 0;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns a value to display for the given tag. Uses display function/property name if set, otherwise assumes that the tag is a simple string.\r\n     */\r\n     \r\n    getTagDisplay(tag: any): string {\r\n        if (typeof this.display === 'function') {\r\n            return this.display(tag);\r\n        }\r\n        if (typeof this.display === 'string') {\r\n            return tag[this.display];\r\n        }\r\n        return tag;\r\n    }\r\n\r\n    /**\r\n     * Returns true if the given index is selected (tag index or input field).\r\n     */\r\n    isSelected(index: number): boolean {\r\n        return index === this.selectedIndex;\r\n    }\r\n\r\n    /**\r\n     * Select the tag at the given index. Does nothing if disabled is true.\r\n     */\r\n    selectTagAt(tagIndex: number): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.isValidTagIndex(tagIndex)) {\r\n            this.selectedIndex = tagIndex;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Select the input field, giving it focus. Does nothing if disabled is true.\r\n     */\r\n    selectInput(): void {\r\n\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        this.selectedIndex = this._tags.length;\r\n    }\r\n\r\n    /**\r\n     * Remove the tag at the given index. Does nothing if disabled is true or the minTags property prevents removal.\r\n     */\r\n    removeTagAt(tagIndex: number): void {\r\n\r\n        if (this.disabled || !this.canRemoveTagAt()) {\r\n            return;\r\n        }\r\n\r\n        // Check that the tagIndex is in range\r\n        if (this.isValidTagIndex(tagIndex)) {\r\n            const tag = this._tags[tagIndex];\r\n            const tagRemovingEvent = new TagInputEvent(tag);\r\n            this.tagRemoving.emit(tagRemovingEvent);\r\n            if (!tagRemovingEvent.defaultPrevented()) {\r\n                // Select input first to avoid issues with dropping focus\r\n                this.selectInput();\r\n\r\n                // Remove the tag\r\n                this.tags = this._tags.filter((_tag, index) => index !== tagIndex);\r\n                this.setTagsValue(this._tags);\r\n                // Set focus again since indices have changed\r\n                this.selectInput();\r\n                this.tagRemoved.emit(new TagInputEvent(tag));\r\n                this.validate();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns true if the tag at the given index can be removed.\r\n     */\r\n    canRemoveTagAt(): boolean {\r\n        return this._tags.length > this.minTags || !this.enforceTagLimits;\r\n    }\r\n\r\n    /**\r\n     * Returns true if the input field should be available.\r\n     */\r\n    isInputVisible(): boolean {\r\n        return this._tags.length < this.maxTags || !this.enforceTagLimits;\r\n    }\r\n\r\n    /**\r\n     * Returns true if any part of the control has focus.\r\n     */\r\n    hasFocus(): boolean {\r\n        return this.isValidSelectIndex(this.selectedIndex);\r\n    }\r\n\r\n    toggle(): void {\r\n        this.typeahead && this.typeahead.open ? this.typeahead.open = false : this.inputClickHandler();\r\n    }\r\n\r\n    clear(): void {\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        this.tags = [];\r\n        this.setTagsValue(this._tags);\r\n        this.setInputValue('');\r\n        this.focus();\r\n    }\r\n\r\n    setInputValue(text: string): void {\r\n        this.input = text;\r\n        this.inputChange.emit(text);\r\n    }\r\n\r\n    setTagsValue(tags: ReadonlyArray<T>): void {\r\n        this._onChangeHandler(tags);\r\n        this.tagsChange.emit(tags);\r\n    }\r\n\r\n    private connectTypeahead(typeahead: TypeaheadComponent): void {\r\n        if (this._subscription) {\r\n            this._subscription.unsubscribe();\r\n            this._subscription = null;\r\n        }\r\n\r\n        this.typeahead = typeahead;\r\n        if (this.typeahead) {\r\n            // Set up event handler for selected options\r\n            this._subscription = this.typeahead.optionSelected.subscribe(this.typeaheadOptionSelectedHandler.bind(this));\r\n\r\n            // Set up event handler for the highlighted element\r\n            // Added a delay to move it out of the current change detection cycle\r\n            this._subscription.add(\r\n                this.typeahead.highlightedElementChange.pipe(tick())\r\n                    .subscribe((element: HTMLElement) => this.highlightedElement = element)\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Validate the given tagValue with the tagPattern, if set. Update validationErrors on validation failure.\r\n     */\r\n    private validateTag(tagValue: string): boolean {\r\n        let inputPattern = null;\r\n        this.inputValid = true;\r\n        if (this.tagPattern && !this.tagPattern.test(tagValue)) {\r\n            inputPattern = {\r\n                given: tagValue,\r\n                pattern: this.tagPattern\r\n            };\r\n            this.inputValid = false;\r\n        }\r\n        this.validationErrors.inputPattern = inputPattern;\r\n        return this.inputValid;\r\n    }\r\n\r\n    /**\r\n     * Create a tag object for the given tagValue. If createTagHandler is specified, use it; otherwise if displayProperty is specified, create an object with the tagValue as the single named property; otherwise return the tagValue itself.\r\n     */\r\n    private createTag(tagValue: string): T {\r\n        let tag = null;\r\n        if (this.createTagHandler && typeof this.createTagHandler === 'function') {\r\n            tag = this.createTagHandler(tagValue);\r\n        } else if (typeof this.display === 'string') {\r\n            tag = {};\r\n            tag[this.display] = tagValue;\r\n        } else {\r\n            tag = tagValue;\r\n        }\r\n        return tag;\r\n    }\r\n\r\n    /**\r\n     * Add a tag object, calling the tagAdding and tagAdded events. Returns true if the tag was added to the tags array.\r\n     */\r\n    private addTag(tag: T): boolean {\r\n        if (tag !== null) {\r\n            // Verify that the new tag can be displayed\r\n            const displayValue = this.getTagDisplay(tag);\r\n            if (typeof displayValue === 'string') {\r\n                const tagAddingEvent = new TagInputEvent(tag);\r\n                this.tagAdding.emit(tagAddingEvent);\r\n                if (!tagAddingEvent.defaultPrevented()) {\r\n                    this.tags = [...this._tags, tag];\r\n                    this.setTagsValue(this._tags);\r\n                    this.tagAdded.emit(new TagInputEvent(tag));\r\n                    this.validate();\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Returns true if the given tagIndex is a valid tag index.\r\n     */\r\n    private isValidTagIndex(tagIndex: number): boolean {\r\n        return tagIndex >= 0 && tagIndex < this._tags.length;\r\n    }\r\n\r\n    /**\r\n     * Returns true if the given index is a valid selection index (tags or input field).\r\n     */\r\n    private isValidSelectIndex(index: number): boolean {\r\n        return index >= 0 && index <= this._tags.length;\r\n    }\r\n\r\n    /**\r\n     * Returns the character corresponding to the given key event, mainly for IE compatibility.\r\n     */\r\n    private getKeyChar(event: KeyboardEvent): string {\r\n        switch (event.which) {\r\n            case SPACE:\r\n                return ' ';\r\n        }\r\n        return event.key;\r\n    }\r\n\r\n    /**\r\n     * Returns an array of strings corresponding to the input string split by the tagDelimiters characters.\r\n     */\r\n    private splitTagInput(input: string): string[] {\r\n        let tagValues = [input];\r\n        if (this.tagDelimiters && typeof this.tagDelimiters === 'string') {\r\n            // eslint-disable-next-line no-useless-escape\r\n            const escapedDelimiters = this.tagDelimiters.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n            const delimiterRegex = new RegExp(`[${ escapedDelimiters }]`, 'g');\r\n            tagValues = input.split(delimiterRegex).filter((s) => s.length > 0);\r\n        }\r\n        return tagValues;\r\n    }\r\n}\r\n\r\n/**\r\n * The API available to tag templates.\r\n */\r\n \r\nexport interface TagApi<T = any> {\r\n    /**\r\n     * Returns the display value of the given tag, according to the displayProperty property.\r\n     */\r\n    getTagDisplay: (tag: T) => string;\r\n\r\n    /**\r\n     * Removes the tag at the given index, if possible.\r\n     */\r\n    removeTagAt: (index: number) => void;\r\n\r\n    /**\r\n     *    Returns true if the tag at the given index can be removed.\r\n     */\r\n    canRemoveTagAt: (index: number) => boolean;\r\n}\r\n\r\n/**\r\n * The function used to return custom class information, for use in `ngClass`.\r\n */\r\n \r\nexport type TagClassFunction<T = any> = (tag: T, index: number, selected: boolean) => (string | string[] | Set<string>);\r\n\r\nexport type TagInputDisplayFunction<T> = (option: T) => string;\r\n\r\n \r\nexport interface TagTemplateContext<T = string | any> {\r\n    tag: T;\r\n    index: number;\r\n    api: TagApi;\r\n}\r\n","<ol [attr.aria-haspopup]=\"typeahead ? 'listbox' : null\"\n  [attr.aria-expanded]=\"typeahead ? typeahead.open : null\"\n  [attr.aria-controls]=\"typeahead ? typeahead.id : null\"\n  [class.ux-tag-input-clear-inset]=\"_showClearButton\"\n  [class.ux-tag-input-icon-inset]=\"icon\"\n  (click)=\"toggle()\">\n\n  @for (tag of _tags; track tag; let i = $index) {\n    <li class=\"ux-tag\"\n      [class.disabled]=\"disabled\"\n      [ngClass]=\"tagClass(tag, i, isSelected(i))\"\n      [attr.tabindex]=\"disabled ? null : 0\"\n      [focusIf]=\"isSelected(i)\"\n      (click)=\"tagClickHandler($event, tag, i); $event.stopPropagation()\"\n      (focus)=\"selectTagAt(i)\">\n      <ng-container [ngTemplateOutlet]=\"tagTemplate || defaultTagTemplate\"\n        [ngTemplateOutletContext]=\"{tag: tag, index: i, disabled: disabled, api: tagApi}\">\n      </ng-container>\n    </li>\n  }\n  @if (isInputVisible()) {\n    <li class=\"ux-tag-input\">\n      <input #tagInput type=\"text\" attr.id=\"{{id}}-input\" class=\"ux-tag-input\"\n        [ngModel]=\"input\"\n        (ngModelChange)=\"setInputValue($event)\"\n        [autocomplete]=\"autocomplete\"\n        [class.invalid]=\"!inputValid\"\n        [required]=\"required\"\n        [attr.aria-activedescendant]=\"highlightedElement?.id\"\n        [attr.aria-autocomplete]=\"typeahead ? 'list' : 'none'\"\n        [attr.aria-controls]=\"typeahead?.id\"\n        [attr.aria-label]=\"ariaLabel\"\n        [attr.aria-labelledby]=\"ariaLabelledby\"\n        aria-multiline=\"false\"\n        [placeholder]=\"disabled ? '' : (placeholder || '')\"\n        [disabled]=\"disabled\"\n        [focusIf]=\"isSelected(_tags.length)\"\n        (click)=\"toggle(); $event.stopPropagation()\"\n        (focus)=\"inputFocusHandler(); inputFocus.emit($event)\"\n        (blur)=\"inputBlur.emit($event)\"\n        (paste)=\"inputPasteHandler($event)\"\n        [readonly]=\"readonlyInput\">\n      </li>\n    }\n  </ol>\n\n  <!-- Insert the custom icon if provided -->\n  @if (icon || _showClearButton) {\n    <div class=\"ux-tag-icons\" (click)=\"toggle(); $event.stopPropagation()\">\n      <!-- Clear All Button -->\n      @if (_showClearButton) {\n        <i uxFocusIndicator\n          class=\"ux-tag-icon ux-icon ux-icon-close ux-select-clear-icon\"\n          [attr.tabindex]=\"disabled ? -1 : 0\"\n          [attr.aria-label]=\"clearButtonAriaLabel\"\n          (click)=\"clear(); $event.stopPropagation()\"\n          (keydown.enter)=\"clear(); $event.stopPropagation()\">\n        </i>\n      }\n      <!-- Custom Icon -->\n      @if (icon) {\n        <div class=\"ux-custom-icon\">\n          <ng-container [ngTemplateOutlet]=\"icon\"></ng-container>\n        </div>\n      }\n    </div>\n  }\n\n  <ng-content #typeahead></ng-content>\n\n  <ng-template #defaultTagTemplate let-tag=\"tag\" let-index=\"index\" let-disabled=\"disabled\" let-api=\"api\">\n    <span class=\"ux-tag-text\">{{ api.getTagDisplay(tag) }}</span>\n    @if (api.canRemoveTagAt(index)) {\n      <button\n        uxFocusIndicator\n        type=\"button\"\n        class=\"ux-tag-remove\"\n        aria-label=\"Remove Item\"\n        [disabled]=\"disabled\"\n        (click)=\"api.removeTagAt(index); $event.stopPropagation();\">\n        <ux-icon name=\"close\"></ux-icon>\n      </button>\n    }\n  </ng-template>\n","import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\r\nimport { ENTER } from '@angular/cdk/keycodes';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostBinding, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, StaticProvider, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from 'rxjs';\r\nimport { debounceTime, delay, distinctUntilChanged, filter, map, skip, take, takeUntil } from 'rxjs/operators';\r\nimport { InfiniteScrollLoadFunction } from '../../directives/infinite-scroll/index';\r\nimport { TagInputComponent, TagTemplateContext } from '../tag-input/index';\r\nimport { TypeaheadComponent, TypeaheadKeyService, TypeaheadOptionEvent } from '../typeahead/index';\r\nimport { TypeaheadOptionContext } from '../typeahead/typeahead-option-context';\r\n\r\nlet uniqueId = 0;\r\n\r\nexport const SELECT_VALUE_ACCESSOR: StaticProvider = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => SelectComponent),\r\n    multi: true\r\n};\r\n\r\n@Component({\r\n    selector: 'ux-select, ux-combobox, ux-dropdown',\r\n    templateUrl: 'select.component.html',\r\n    providers: [SELECT_VALUE_ACCESSOR],\r\n    host: {\r\n        '[class.ux-select-custom-icon]': '!!icon',\r\n        '[class.ux-select-disabled]': 'disabled'\r\n    },\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectComponent<T> implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {\r\n    private readonly _element = inject(ElementRef);\r\n\r\n    private readonly _platform = inject(Platform);\r\n\r\n    private readonly _typeaheadKeyService = inject(TypeaheadKeyService);\r\n\r\n    private readonly _changeDetector = inject(ChangeDetectorRef);\r\n\r\n    private readonly _document = inject<Document>(DOCUMENT);\r\n\r\n    /** A unique id for the component. */\r\n    @Input() @HostBinding('attr.id') id: string = `ux-select-${++uniqueId}`;\r\n\r\n    /** The selected option (for single select) or array of options (for multiple select). */\r\n    @Input()\r\n    set value(value: T | ReadonlyArray<T>) {\r\n        this._value$.next(value);\r\n    }\r\n\r\n    get value(): T | ReadonlyArray<T> {\r\n        return this._value;\r\n    }\r\n\r\n    /** The text in the input area. This is used to filter the options dropdown. */\r\n    @Input()\r\n    set input(value: string) {\r\n        this._input$.next({ ...this._input$.value, value });\r\n    }\r\n    get input() {\r\n        return this._input$.value.value;\r\n    }\r\n\r\n    /** The status of the typeahead dropdown. */\r\n    @Input()\r\n    set dropdownOpen(value: boolean) {\r\n        this._dropdownOpen = value;\r\n        this.dropdownOpenChange.emit(value);\r\n    }\r\n    get dropdownOpen() {\r\n        return this._dropdownOpen;\r\n    }\r\n\r\n    /**\r\n     * If an array is provided, this is the list of options which can be chosen from. It can be an array of strings or\r\n     * custom objects. If custom objects are required, the display property must also be set. If a function is provided,\r\n     * this is used as a callback to dynamically retrieve data in pages. The function parameters are:\r\n     * @param pageNum The index of the requested page, starting from 0.\r\n     * @param pageSize The number of items requested.\r\n     * @param filter The filter details as provided via the filter binding.\r\n     * @returns Either a promise which resolves to an array, or a plain array in case the data can be loaded\r\n     * synchronously. An empty array or an array with fewer than `pageSize` items can be returned, which indicates that\r\n     * the end of the data set has been reached.\r\n     */\r\n    @Input() options: T[] | InfiniteScrollLoadFunction;\r\n\r\n    /**\r\n     * Determines the display value of the `options`, if they are custom objects. This may be a function or a string.\r\n     * If a function is provided, it receives the option object as an argument, and should return the appropriate\r\n     * display value. If the name of a property is provided as a string, that property is used as the display value.\r\n     */\r\n    @Input() display: ((option: T) => string) | string;\r\n\r\n    /**\r\n     * Determines the unique key value of the `options`, if they are custom objects. This may be a function or a string.\r\n     * If a function is provided, it receives the option object as an argument, and should return the appropriate\r\n     * key value. If the name of a property is provided as a string, that property is used as the key value.\r\n     */\r\n    @Input() key: ((option: T) => string) | string;\r\n\r\n    /**\r\n     * Controls whether the value of the single select control can be cleared by deleting the selected value in the\r\n     * input field. This does not affect the initial state of the control, so specify a value for `value` if null should\r\n     * never be allowed.\r\n     */\r\n    @Input() allowNull: boolean = false;\r\n\r\n    /** The aria-label to apply to the child `input` element. */\r\n    @Input() ariaLabel: string;\r\n\r\n    /** ID of the element which serves as a label for the input element. */\r\n    @Input() ariaLabelledby: string;\r\n\r\n    /** The aria-label to apply to the typeahead listbox */\r\n    @Input() listboxAriaLabel: string;\r\n\r\n    /** Controls the disabled state of the tag input. */\r\n    @Input() disabled: boolean = false;\r\n\r\n    /** The positioning of the typeahead dropdown in relation to its parent. */\r\n    @Input() dropDirection: 'auto' | 'up' | 'down' = 'down';\r\n\r\n    /** The maximum height of the typeahead dropdown, as a CSS value. */\r\n    @Input() maxHeight: string = '250px';\r\n\r\n    /**\r\n     * Controls whether the user can select more than one option in the select control. If set to true, selected\r\n     * options will appear as tags in the input area. If set to false, the selected value will appear as editable text\r\n     * in the input area.\r\n     */\r\n    @Input() multiple: boolean = false;\r\n\r\n    /**\r\n     * The number of options to request in a page. This should ideally be more than twice the number of items which\r\n     * fit into the height of the dropdown, but this is not required.\r\n     */\r\n    @Input() pageSize: number = 20;\r\n\r\n    /** The placeholder text which appears in the text input area when it is empty. */\r\n    @Input() placeholder: string = '';\r\n\r\n    /**\r\n     * A template which will be rendered as the content of each selected option. The following context\r\n     * properties are available in the template via the TagTemplateContext:\r\n     * - `tag: T` - the string or custom object representing the selected option.\r\n     * - `index: number` - the zero-based index of the selected option as it appears in the dropdown.\r\n     * - `api: TagApi` - provides the functions getTagDisplay, removeTagAt and canRemoveTagAt.\r\n     */\r\n    @Input() tagTemplate: TemplateRef<TagTemplateContext>;\r\n\r\n    @Input() optionsHeadingTemplate: TemplateRef<void>;\r\n\r\n    @Input() recentOptionsHeadingTemplate: TemplateRef<void>;\r\n\r\n    /**\r\n     * Defines the `autocomplete` property on the `input` element which can be used to prevent the browser from\r\n     * displaying autocomplete suggestions.\r\n     */\r\n    @Input() autocomplete: string = 'off';\r\n\r\n    /** A template which will be rendered in the dropdown while options are being loaded. */\r\n    @Input() loadingTemplate: TemplateRef<void>;\r\n\r\n    /** A template which will be rendered in the dropdown if no options match the current filter value. */\r\n    @Input() noOptionsTemplate: TemplateRef<void>;\r\n\r\n    /** If `true` the input field will be readonly and selection can only occur by using the dropdown. */\r\n    @Input() readonlyInput: boolean = false;\r\n\r\n    /** Determine if we should show the clear all button */\r\n    @Input() clearButton: boolean = false;\r\n\r\n    /** Determine an aria label for the clear button */\r\n    @Input() clearButtonAriaLabel: string = 'Reset selection';\r\n\r\n    /** Determine if the dropdown panel should close on external click.*/\r\n    @Input() set autoCloseDropdown(value: boolean) {\r\n        this._autoCloseDropdown = coerceBooleanProperty(value);\r\n    }\r\n\r\n    get autoCloseDropdown(): boolean {\r\n        return this._autoCloseDropdown;\r\n    }\r\n\r\n    /**\r\n     * A template which will be rendered in the dropdown for each option.\r\n     * The following context properties are available in the template:\r\n     * - option: any - the string or custom object representing the option.\r\n     * - api: TypeaheadOptionApi - provides the functions `getKey`, `getDisplay` and `getDisplayHtml`.\r\n     */\r\n    @Input() optionTemplate: TemplateRef<TypeaheadOptionContext<T>>;\r\n\r\n    /**\r\n     * An initial list of recently selected options, to be presented above the full list of options.\r\n     * Bind an empty array to `recentOptions` to enable this feature without providing an initial set.\r\n     */\r\n    @Input() recentOptions: ReadonlyArray<T>;\r\n\r\n    /** Maximum number of displayed recently selected options. */\r\n    @Input() recentOptionsMaxCount: number;\r\n\r\n    /** Specified if this is a required input. */\r\n    @Input() required: boolean;\r\n\r\n    /** Specify the debounceTime value for the select filter */\r\n    @Input() get filterDebounceTime(): number {\r\n        return this._filterDebounceTime;\r\n    }\r\n\r\n    set filterDebounceTime(filterDebounceTime: number) {\r\n        this._filterDebounceTime = coerceNumberProperty(filterDebounceTime);\r\n    }\r\n\r\n    /** Emits when `value` changes. */\r\n    @Output() valueChange = new EventEmitter<T | ReadonlyArray<T>>();\r\n\r\n    /** Emits when `input` changes. */\r\n    @Output() inputChange = new EventEmitter<string>();\r\n\r\n    /** Emits when `dropdownOpen` changes. */\r\n    @Output() dropdownOpenChange = new EventEmitter<boolean>();\r\n\r\n    /** Emits when recently selected options change. */\r\n    @Output() recentOptionsChange = new EventEmitter<ReadonlyArray<T>>();\r\n\r\n    /** Allow a custom icon to be used instead of the chevron */\r\n    @ContentChild('icon', { static: false }) icon: TemplateRef<void>;\r\n\r\n    @ViewChild('singleInput', { static: false }) singleInput: ElementRef;\r\n    @ViewChild('tagInput', { static: false }) tagInput: TagInputComponent;\r\n    @ViewChild('multipleTypeahead', { static: false }) multipleTypeahead: TypeaheadComponent;\r\n    @ViewChild('singleTypeahead', { static: false }) singleTypeahead: TypeaheadComponent;\r\n\r\n    highlightedElement: HTMLElement;\r\n    filter$: Observable<string>;\r\n    _value$ = new ReplaySubject<T | ReadonlyArray<T>>(1);\r\n    _hasValue = false;\r\n\r\n\r\n    /** We need to store the most recent value*/\r\n    private _value: T | ReadonlyArray<T>;\r\n    private readonly _input$ = new BehaviorSubject<InputValue>({ userInteraction: false, value: '' });\r\n    private _dropdownOpen: boolean = false;\r\n    private _userInput: boolean = false;\r\n    private _filterDebounceTime: number = 200;\r\n    private _autoCloseDropdown: boolean = true;\r\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n    private _onChange = (_: T | ReadonlyArray<T>) => { };\r\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n    private _onTouched = () => { };\r\n    private readonly _onDestroy = new Subject<void>();\r\n\r\n    ngOnInit(): void {\r\n\r\n        // Emit change events\r\n        this._value$.pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(value => {\r\n            this._value = value;\r\n            this._hasValue = !!value;\r\n        });\r\n\r\n        // Changes to the input field\r\n        this._input$.pipe(\r\n            skip(1),\r\n            filter(() => this.allowNull),\r\n            filter(value => !this.multiple && value.value !== this.getDisplay(this.value)),\r\n            takeUntil(this._onDestroy)\r\n        ).subscribe((input) => {\r\n            if (input.userInteraction && input.value === '') {\r\n                this.value = null;\r\n                this._onChange(null);\r\n                this.valueChange.next(null);\r\n            }\r\n        });\r\n\r\n\r\n        // open the dropdown once the filter debounce has elapsed\r\n        this.filter$.pipe(\r\n            filter(() => this._userInput),\r\n            take(1),\r\n            takeUntil(this._onDestroy))\r\n            .subscribe(() => {\r\n                this.dropdownOpen = true;\r\n                this._userInput = false;\r\n            });\r\n\r\n        // Update the single-select input when the model changes\r\n        this._value$.pipe(\r\n            distinctUntilChanged(),\r\n            delay(0),\r\n            filter(value => value !== null && !this.multiple),\r\n            takeUntil(this._onDestroy)\r\n        ).subscribe(value => {\r\n            const inputValue = this.getDisplay(value);\r\n\r\n            // check if the input value has changed and if so the emit\r\n            if (inputValue !== this.input) {\r\n                this.input = inputValue;\r\n                this.inputChange.emit(this.input);\r\n            }\r\n\r\n            this._changeDetector.markForCheck();\r\n        });\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes.multiple && !changes.multiple.firstChange && changes.multiple.currentValue !== changes.multiple.previousValue) {\r\n            this.input = '';\r\n        }\r\n\r\n        // Set up filter from input\r\n        this.filter$ = this._input$.pipe(\r\n            map(input => !this.multiple && input.value === this.getDisplay(this.value) ? '' : input.value),\r\n            debounceTime(this.filterDebounceTime)\r\n        );\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._onDestroy.next();\r\n        this._onDestroy.complete();\r\n    }\r\n\r\n    writeValue(obj: T): void {\r\n        if (obj !== undefined && obj !== this.value) {\r\n            this.value = obj;\r\n            this._changeDetector.markForCheck();\r\n        }\r\n    }\r\n\r\n    registerOnChange(fn: (value: T) => void): void {\r\n        this._onChange = fn;\r\n    }\r\n\r\n    registerOnTouched(fn: () => void): void {\r\n        this._onTouched = fn;\r\n    }\r\n\r\n    setDisabledState(isDisabled: boolean): void {\r\n        this.disabled = isDisabled;\r\n        this._changeDetector.markForCheck();\r\n    }\r\n\r\n    inputClickHandler(): void {\r\n        this.selectInputText();\r\n        this.dropdownOpen = true;\r\n    }\r\n\r\n    inputBlurHandler(): void {\r\n\r\n        // If a click on the typeahead is in progress, just refocus the input.\r\n        // This works around an issue in IE where clicking a scrollbar drops focus.\r\n        if (this.singleTypeahead && this.singleTypeahead.clicking) {\r\n            this.singleInput.nativeElement.focus();\r\n            return;\r\n        }\r\n\r\n        // Close dropdown and reset text input if focus is lost\r\n        setTimeout(() => {\r\n            if (!this._element.nativeElement.contains(this._document.activeElement) && this._autoCloseDropdown) {\r\n                this.dropdownOpen = false;\r\n                if (!this.multiple) {\r\n                    this.input = this.getDisplay(this.value);\r\n                }\r\n            }\r\n        }, 200);\r\n    }\r\n\r\n    /**\r\n     * Key handler for single select only. Multiple select key handling is in TagInputComponent.\r\n     */\r\n    inputKeyHandler(event: KeyboardEvent): void {\r\n\r\n        // Standard keys for typeahead (up/down/esc)\r\n        this._typeaheadKeyService.handleKey(event, this.singleTypeahead);\r\n\r\n        if (event.keyCode === ENTER) {\r\n            if (this._dropdownOpen) {\r\n                // Set the highlighted option as the value and close\r\n                this.singleTypeahead.selectHighlighted();\r\n            } else {\r\n                this.dropdownOpen = true;\r\n            }\r\n\r\n            // Update the input field. If dropdown isn't open then reset it to the previous value.\r\n            this.input = this.getDisplay(this.value);\r\n            event.preventDefault();\r\n        }\r\n\r\n        // when the user types and the value is not empty then we should open the dropdown except for non printable keys.\r\n        if (event.key.length === 1) {\r\n            this._userInput = true;\r\n            this._dropdownOpen = true;\r\n        }\r\n    }\r\n\r\n    /** This gets called whenever the user types in the input */\r\n    onInputChange(input: string): void {\r\n\r\n        this._input$.next({\r\n            value: input,\r\n            userInteraction: true\r\n        });\r\n\r\n        this.inputChange.emit(this.input);\r\n    }\r\n\r\n    /** Whenever a single select item is selected emit the values */\r\n    _singleOptionSelected(event: TypeaheadOptionEvent): void {\r\n        if (event.option !== null && event.option !== this.value) {\r\n            this.value = event.option;\r\n            this.dropdownOpen = false;\r\n            this.valueChange.emit(this.value);\r\n            this._onChange(this.value);\r\n        }\r\n    }\r\n\r\n    /** Whenever a multi-select item is selected emit the values */\r\n    _multipleOptionSelected(selection: ReadonlyArray<T>): void {\r\n        // update the internal selection\r\n        this._value$.next(selection);\r\n        this.valueChange.emit(this.value);\r\n        this._onChange(this.value);\r\n    }\r\n\r\n    /**\r\n     * Returns the display value of the given option.\r\n     */\r\n    getDisplay(option: T | readonly T[]): string {\r\n\r\n        if (option === null || option === undefined) {\r\n            return '';\r\n        }\r\n\r\n        if (typeof this.display === 'function') {\r\n            return this.display(option as T);\r\n        }\r\n\r\n        // eslint-disable-next-line no-prototype-builtins\r\n        if (typeof this.display === 'string' && typeof option === 'object' && option.hasOwnProperty(this.display)) {\r\n            return option[this.display];\r\n        }\r\n\r\n        return option as string;\r\n    }\r\n\r\n    /** Toggle the dropdown open state */\r\n    toggle(): void {\r\n\r\n        // if the select is disabled then do not show the dropdown\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.dropdownOpen) {\r\n            this.dropdownOpen = false;\r\n        } else {\r\n            this.inputClickHandler();\r\n        }\r\n    }\r\n\r\n    /** Handle input focus events */\r\n    onFocus(): void {\r\n\r\n        // mark form control as touched\r\n        this._onTouched();\r\n\r\n        // if the input is readonly we do not want to select the text on focus\r\n        if (this.readonlyInput) {\r\n            // cast the select input element\r\n            const element = this.singleInput.nativeElement as HTMLInputElement;\r\n\r\n            // firefox requires a delay before clearing the selection (other browsers don't)\r\n            this._platform.FIREFOX ? requestAnimationFrame(() => element.setSelectionRange(0, 0)) : element.setSelectionRange(0, 0);\r\n        }\r\n    }\r\n\r\n    clear(): void {\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        // clear the value and input text\r\n        this.value = null;\r\n        this.input = null;\r\n\r\n        this.selectInputText();\r\n\r\n        // emit the latest values\r\n        this.valueChange.emit(this.value);\r\n        this._onChange(this.value);\r\n        this.inputChange.emit(this.input);\r\n    }\r\n\r\n    private selectInputText(): void {\r\n        if (!this.readonlyInput) {\r\n            this.singleInput.nativeElement.select();\r\n        }\r\n    }\r\n\r\n    static ngAcceptInputType_filterDebounceTime: NumberInput;\r\n    static ngAcceptInputType_autoCloseDropdown: BooleanInput;\r\n}\r\n\r\ninterface InputValue {\r\n    value: string;\r\n    userInteraction: boolean;\r\n}","@if (multiple) {\n  <ux-tag-input\n    #tagInput=\"ux-tag-input\"\n    [id]=\"id + '-input'\"\n    [tags]=\"_value$ | async\"\n    (tagsChange)=\"_multipleOptionSelected($event)\"\n    [ariaLabelledby]=\"ariaLabelledby\"\n    [(input)]=\"input\"\n    [required]=\"required\"\n    (inputChange)=\"onInputChange($event)\"\n    [ariaLabel]=\"ariaLabel\"\n    [autocomplete]=\"autocomplete\"\n    [addOnPaste]=\"false\"\n    [disabled]=\"disabled\"\n    [display]=\"display\"\n    [freeInput]=\"false\"\n    [placeholder]=\"placeholder || ''\"\n    [tagTemplate]=\"tagTemplate\"\n    (inputFocus)=\"onFocus()\"\n    [showTypeaheadOnClick]=\"true\"\n    [readonlyInput]=\"readonlyInput\"\n    [icon]=\"icon\"\n    [clearButton]=\"clearButton\"\n    [autoCloseDropdown]=\"autoCloseDropdown\"\n    [clearButtonAriaLabel]=\"clearButtonAriaLabel\">\n    <ux-typeahead #multipleTypeahead\n      [ariaLabel]=\"listboxAriaLabel\"\n      [id]=\"id + '-typeahead'\"\n      [options]=\"options\"\n      [filter]=\"filter$ | async\"\n      [(open)]=\"dropdownOpen\"\n      [display]=\"display\"\n      [key]=\"key\"\n      [disabledOptions]=\"_value$ | async\"\n      [dropDirection]=\"dropDirection\"\n      [maxHeight]=\"maxHeight\"\n      [multiselectable]=\"true\"\n      [pageSize]=\"pageSize\"\n      [selectFirst]=\"true\"\n      [loadingTemplate]=\"loadingTemplate\"\n      [optionTemplate]=\"optionTemplate\"\n      [noOptionsTemplate]=\"noOptionsTemplate\"\n      [recentOptions]=\"recentOptions\"\n      [recentOptionsMaxCount]=\"recentOptionsMaxCount\"\n      (recentOptionsChange)=\"recentOptionsChange.emit($event)\"\n      [optionsHeadingTemplate]=\"optionsHeadingTemplate\"\n      [recentOptionsHeadingTemplate]=\"recentOptionsHeadingTemplate\">\n    </ux-typeahead>\n  </ux-tag-input>\n}\n\n@if (!multiple) {\n  <div\n    class=\"ux-select-container\"\n    [class.disabled]=\"disabled\"\n    aria-haspopup=\"listbox\">\n    <input #singleInput type=\"text\"\n      [attr.id]=\"id + '-input'\"\n      [attr.aria-labelledby]=\"ariaLabelledby\"\n      class=\"form-control\"\n      [required]=\"required\"\n      [class.ux-tag-input-clear-inset]=\"clearButton && allowNull && _hasValue\"\n      [attr.aria-activedescendant]=\"highlightedElement?.id\"\n      aria-autocomplete=\"list\"\n      role=\"combobox\"\n      [attr.aria-controls]=\"id + '-typeahead'\"\n      [attr.aria-label]=\"ariaLabel\"\n      [attr.aria-expanded]=\"dropdownOpen\"\n      [autocomplete]=\"autocomplete\"\n      [(ngModel)]=\"input\"\n      (ngModelChange)=\"onInputChange($event)\"\n      [placeholder]=\"placeholder || ''\"\n      [disabled]=\"disabled\"\n      (click)=\"toggle()\"\n      (focus)=\"onFocus()\"\n      (blur)=\"inputBlurHandler()\"\n      (keydown)=\"inputKeyHandler($event)\"\n      [readonly]=\"readonlyInput\">\n      <div class=\"ux-select-icons\">\n        @if (clearButton && allowNull && _hasValue) {\n          <i\n            uxFocusIndicator\n            [attr.tabindex]=\"disabled ? -1 : 0\"\n            [attr.aria-label]=\"clearButtonAriaLabel\"\n            class=\"ux-select-icon ux-icon ux-icon-close ux-select-clear-icon\"\n            (click)=\"clear(); $event.stopPropagation()\"\n            (keydown.enter)=\"clear(); $event.stopPropagation()\">\n          </i>\n        }\n        @if (!icon) {\n          <i\n            class=\"ux-select-icon ux-icon ux-select-chevron-icon\"\n            [class.ux-icon-up]=\"dropDirection === 'up'\"\n            [class.ux-icon-down]=\"dropDirection === 'down'\"\n            (click)=\"toggle(); $event.stopPropagation(); singleInput.focus();\">\n          </i>\n        }\n        @if (icon) {\n          <div class=\"ux-custom-icon\">\n            <ng-container [ngTemplateOutlet]=\"icon\"></ng-container>\n          </div>\n        }\n      </div>\n      <ux-typeahead #singleTypeahead\n        [ariaLabel]=\"listboxAriaLabel\"\n        [id]=\"id + '-typeahead'\"\n        [active]=\"_value$ | async\"\n        [options]=\"options\"\n        [filter]=\"filter$ | async\"\n        [(open)]=\"dropdownOpen\"\n        [display]=\"display\"\n        [key]=\"key\"\n        [dropDirection]=\"dropDirection\"\n        [maxHeight]=\"maxHeight\"\n        [multiselectable]=\"false\"\n        [openOnFilterChange]=\"false\"\n        [pageSize]=\"pageSize\"\n        [selectFirst]=\"true\"\n        [loadingTemplate]=\"loadingTemplate\"\n        [optionTemplate]=\"optionTemplate\"\n        [noOptionsTemplate]=\"noOptionsTemplate\"\n        [recentOptions]=\"recentOptions\"\n        [recentOptionsMaxCount]=\"recentOptionsMaxCount\"\n        [optionsHeadingTemplate]=\"optionsHeadingTemplate\"\n        [recentOptionsHeadingTemplate]=\"recentOptionsHeadingTemplate\"\n        (optionSelected)=\"_singleOptionSelected($event)\"\n        (highlightedElementChange)=\"highlightedElement = $event\"\n        (recentOptionsChange)=\"recentOptionsChange.emit($any($event))\">\n      </ux-typeahead>\n    </div>\n  }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/index';\nimport { IconModule } from '../icon/index';\nimport { TypeaheadModule } from '../typeahead/index';\nimport { TagInputComponent } from './tag-input.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FormsModule,\n        FocusIfModule,\n        IconModule,\n        TypeaheadModule\n    ],\n    exports: [\n        TagInputComponent\n    ],\n    declarations: [\n        TagInputComponent\n    ]\n})\nexport class TagInputModule { }\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { InfiniteScrollModule } from '../../directives/infinite-scroll/index';\nimport { TagInputModule } from '../tag-input/index';\nimport { TypeaheadModule } from '../typeahead/index';\nimport { SelectComponent } from './select.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        FormsModule,\n        InfiniteScrollModule,\n        TagInputModule,\n        TypeaheadModule,\n        PlatformModule\n    ],\n    exports: [SelectComponent],\n    declarations: [SelectComponent]\n})\nexport class SelectModule { }\n","import { Component, inject, OnDestroy } from '@angular/core';\nimport { SearchBuilderComponentContext } from '../interfaces/component-context.interface';\nimport { SearchBuilderService } from '../search-builder.service';\n\n@Component({\n    selector: 'ux-base-search',\n    template: ''\n})\nexport class BaseSearchComponent implements OnDestroy {\n    private readonly _searchBuilderService = inject(SearchBuilderService);\n\n    get id(): string {\n        return `ux-search-builder-search-component-${this._id}`;\n    }\n\n    type: string;\n     \n    config: any;\n    context: SearchBuilderComponentContext;\n    focus: boolean;\n\n    /**\n     * Get the current value of the component\n     */\n    get value() {\n        return this.context.value;\n    }\n\n    /**\n     * Set the current value of the component\n     */\n     \n    set value(value: any) {\n        this.context.value = value;\n        this._searchBuilderService.queryHasChanged();\n\n        // if value has been set perform validation\n        this.validate();\n    }\n\n    get valid(): boolean {\n        return this._valid;\n    }\n\n    set valid(valid: boolean) {\n        this._valid = valid;\n        this._searchBuilderService.setValid(this._id, valid);\n    }\n\n    private readonly _id: number = this._searchBuilderService.generateComponentId();\n    private _valid: boolean = true;\n\n    /**\n     * Make sure we clean up after ourselves\n     */\n    ngOnDestroy(): void {\n        this.valid = true;\n    }\n\n    /**\n     * Perform any required validation on the value\n     */\n    validate(): void {\n        // if a custom validation function has been provided then use it\n        this.valid = this.config.validation ? this.config.validation(this, this.value) : true;\n    }\n\n}\n\nexport interface BaseSearchComponentConfig {\n    label?: string;\n    placeholder?: string;\n    validation?: (value: unknown) => boolean;\n}","import { Component } from '@angular/core';\nimport { BaseSearchComponent } from '../base-search.component';\n\n@Component({\n    selector: 'ux-search-date-range',\n    templateUrl: './date-range.component.html'\n})\nexport class SearchDateRangeComponent extends BaseSearchComponent {\n\n    type: string = 'date-range';\n\n    get label(): string {\n        return this.config.label;\n    }\n\n    get from() {\n\n        // if value does not exist the set it\n        if (!this.value || !this.value.from) {\n            this.from = new Date();\n        }\n\n        // ensure that the from value is a date object\n        if (this.value.from instanceof Date === false) {\n            this.value.from = new Date(this.value.from);\n        }\n\n        return this.value.from;\n    }\n\n    set from(fromValue: string | number | Date) {\n\n        // create new object based on the current value\n        const value = Object.assign({}, this.value);\n\n        // ensure that the from value is a date\n        if (fromValue instanceof Date === false) {\n            fromValue = new Date(fromValue);\n        }\n\n        // set the latest value\n        value.from = fromValue;\n\n        // update the value object while ensuring immutability\n        this.value = value;\n    }\n\n    get to() {\n\n        // if value does not exist the set it\n        if (!this.value || !this.value.to) {\n            this.to = new Date();\n        }\n\n        // ensure that the to value is a date object\n        if (this.value.to instanceof Date === false) {\n            this.value.to = new Date(this.value.to);\n        }\n\n        return this.value.to;\n    }\n\n    set to(toValue: string | number | Date) {\n\n        // create new object based on the current value\n        const value = Object.assign({}, this.value);\n\n        // ensure that the to value is a date\n        if (toValue instanceof Date === false) {\n            toValue = new Date(toValue);\n        }\n\n        // set the latest value\n        value.to = toValue;\n\n        // update the value object while ensuring immutability\n        this.value = value;\n    }\n\n    get fromLabel(): string {\n        return this.config.fromLabel || 'From';\n    }\n\n    get toLabel(): string {\n        return this.config.toLabel || 'To';\n    }\n\n    get fromPlaceholder(): string {\n        return this.config.fromPlaceholder;\n    }\n\n    get toPlaceholder(): string {\n        return this.config.toPlaceholder;\n    }\n\n    get toDateInputAriaLabel(): string {\n        return this.config.toDateInputAriaLabel || 'Selected date';\n    }\n\n    get fromDateInputAriaLabel(): string {\n        return this.config.fromDateInputAriaLabel || 'Selected date';\n    }\n\n    /**\n     * Override the default validation\n     */\n    validate(): void {\n\n        // check if there is a config validation function\n        if (this.config.validation) {\n            return super.validate();\n        }\n\n        // create copies of the dates so we can modify time value (to ignore it)\n        const from = new Date(this.value.from);\n        const to = new Date(this.value.to);\n\n        // set the time to the same so we dont compare it\n        from.setHours(0, 0, 0, 0);\n        to.setHours(0, 0, 0, 0);\n\n        // valid if the from date is less than or equal to the to date\n        this.valid = from <= to;\n    }\n}\n\nexport interface SearchDateRangeConfig {\n    label?: string;\n    fromLabel?: string;\n    toLabel?: string;\n    fromPlaceholder?: string;\n    toPlaceholder?: string;\n    toDateInputAriaLabel?: string;\n    fromDateInputAriaLabel?: string;\n    validation: (value: unknown) => boolean;\n}","@if (label) {\n  <label class=\"form-label\">{{ label }}</label>\n}\n\n<div class=\"row\">\n  <div class=\"col-sm-12\">\n    <div class=\"form-inline\" [class.has-error]=\"!valid\">\n\n      <div class=\"form-group p-r-md\">\n        <label class=\"form-label m-r-xs\">{{ fromLabel }}</label>\n\n        <div class=\"input-group date m-nil\">\n          <span class=\"input-group-addon p-r-xs\" tabindex=\"1\" (click)=\"fromPopover.show()\">\n            <ux-icon name=\"calendar\"></ux-icon>\n          </span>\n          <input type=\"text\" #fromPopover=\"ux-popover\" [ngModel]=\"from | date:'dd MMMM yyyy'\"\n            [uxPopover]=\"fromPopoverTemplate\" placement=\"bottom\" popoverClass=\"date-time-picker-popover\"\n            class=\"form-control\" [attr.aria-label]=\"fromDateInputAriaLabel\" [placeholder]=\"fromPlaceholder\" [focusIf]=\"focus\">\n          </div>\n        </div>\n\n        <div class=\"form-group p-r-xs\">\n          <label class=\"form-label m-r-xs\">{{ toLabel }}</label>\n\n          <div class=\"input-group date m-nil\">\n            <span class=\"input-group-addon\" tabindex=\"1\" (click)=\"toPopover.show()\">\n              <ux-icon name=\"calendar\"></ux-icon>\n            </span>\n            <input type=\"text\" #toPopover=\"ux-popover\" [ngModel]=\"to | date:'dd MMMM yyyy'\"\n              [uxPopover]=\"toPopoverTemplate\" placement=\"bottom\" popoverClass=\"date-time-picker-popover\"\n              class=\"form-control\" [attr.aria-label]=\"toDateInputAriaLabel\" [placeholder]=\"toPlaceholder\">\n            </div>\n          </div>\n\n        </div>\n      </div>\n    </div>\n\n    <ng-template #fromPopoverTemplate>\n      <ux-date-time-picker [(date)]=\"from\" [showTime]=\"false\"></ux-date-time-picker>\n    </ng-template>\n\n    <ng-template #toPopoverTemplate>\n      <ux-date-time-picker [(date)]=\"to\" [showTime]=\"false\"></ux-date-time-picker>\n    </ng-template>","import { Component, OnInit } from '@angular/core';\nimport { BaseSearchComponent, BaseSearchComponentConfig } from '../base-search.component';\n\n@Component({\n  selector: 'ux-search-date',\n  templateUrl: './date.component.html'\n})\nexport class SearchDateComponent extends BaseSearchComponent implements OnInit {\n\n  type: string = 'date';\n\n  get label(): string {\n    return this.config.label;\n  }\n\n  get placeholder(): string {\n    return this.config.placeholder || 'Enter date';\n  }\n\n  get dateInputAriaLabel(): string {\n    return this.config.dateInputAriaLabel || 'Selected date';\n  }\n\n  ngOnInit(): void {\n\n    // by default set to the current date if not specified\n    if (!this.value) {\n      this.value = new Date();\n    }\n  }\n}\n\nexport interface SearchDateConfig extends BaseSearchComponentConfig {\n  dateInputAriaLabel: string;\n}","@if (label) {\n  <label class=\"form-label\">{{ label }}</label>\n}\n\n<div class=\"input-group date m-nil\">\n  <span class=\"input-group-addon\" tabindex=\"1\" (click)=\"popover.show()\">\n    <ux-icon name=\"calendar\"></ux-icon>\n  </span>\n  <input type=\"text\"\n    class=\"form-control\"\n    [attr.aria-label]=\"dateInputAriaLabel\"\n    [placeholder]=\"placeholder\"\n    #popover=\"ux-popover\"\n    [ngModel]=\"value | date:'dd MMMM yyyy'\"\n    [uxPopover]=\"popoverTemplate\"\n    placement=\"bottom\"\n    popoverClass=\"date-time-picker-popover\"\n    [focusIf]=\"focus\">\n  </div>\n\n  <ng-template #popoverTemplate>\n    <ux-date-time-picker [(date)]=\"value\" [showTime]=\"false\"></ux-date-time-picker>\n  </ng-template>","import { Component } from '@angular/core';\nimport { InfiniteScrollLoadFunction } from '../../../../directives/infinite-scroll/index';\nimport { BaseSearchComponent, BaseSearchComponentConfig } from '../base-search.component';\n\n@Component({\n  selector: 'ux-search-select',\n  templateUrl: './select.component.html'\n})\nexport class SearchSelectComponent extends BaseSearchComponent {\n\n  type: string = 'select';\n\n  /**\n   * Provide defaults for undefined properties\n   */\n  get label(): string {\n    return this.config.label;\n  }\n\n  get options() {\n    return this.config.options || [];\n  }\n\n  get multiple(): boolean {\n    return this.config.multiple || false;\n  }\n\n  get placeholder(): string {\n    return this.config.placeholder || 'Select item';\n  }\n\n  get dropDirection(): 'auto' | 'up' | 'down' {\n    return this.config.dropDirection || 'down';\n  }\n\n  get allowNull(): boolean {\n    return this.config.allowNull || false;\n  }\n\n  get disabled(): boolean {\n    return this.config.disabled || false;\n  }\n\n  get maxHeight(): string {\n    return this.config.maxHeight || '250px';\n  }\n\n  get pageSize(): number {\n    return this.config.pageSize || 20;\n  }\n}\n\nexport interface SearchSelectConfig extends BaseSearchComponentConfig {\n   \n  options?: any[] | InfiniteScrollLoadFunction;\n  multiple?: boolean;\n  dropDirection?: 'up' | 'down';\n  allowNull?: boolean;\n  disabled?: boolean;\n  maxHeight?: string;\n  pageSize?: number;\n}\n","@if (label) {\n  <label class=\"form-label\">{{ label }}</label>\n}\n\n<ux-select [(value)]=\"value\"\n  [options]=\"options\"\n  [multiple]=\"multiple\"\n  [placeholder]=\"placeholder\"\n  [dropDirection]=\"dropDirection\"\n  [pageSize]=\"pageSize\"\n  [allowNull]=\"allowNull\"\n  [disabled]=\"disabled\"\n  [maxHeight]=\"maxHeight\"\n  [key]=\"config.key\"\n  [display]=\"config.display\"\n  [loadingTemplate]=\"config.loadingTemplate\"\n  [optionTemplate]=\"config.optionTemplate\"\n  [noOptionsTemplate]=\"config.noOptionsTemplate\"\n  [focusIf]=\"focus\">\n</ux-select>","import { Component } from '@angular/core';\nimport { BaseSearchComponent, BaseSearchComponentConfig } from '../base-search.component';\n\n@Component({\n  selector: 'ux-search-text',\n  templateUrl: './text.component.html',\n})\nexport class SearchTextComponent extends BaseSearchComponent {\n  type: string = 'text';\n\n  get label(): string {\n    return this.config.label;\n  }\n\n  get placeholder(): string {\n    return this.config.placeholder || 'Enter text';\n  }\n}\n\nexport type SearchTextConfig = BaseSearchComponentConfig;\n","@if (label) {\n  <label class=\"form-label\" [attr.for]=\"id\">{{ label }}</label>\n}\n<input type=\"text\" [attr.id]=\"id\" class=\"form-control\" [placeholder]=\"placeholder\" [(ngModel)]=\"value\" [focusIf]=\"focus\">\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/index';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\nimport { IconModule } from '../icon/index';\nimport { PopoverModule } from '../popover/index';\nimport { SelectModule } from '../select/index';\nimport { SearchBuilderGroupComponent } from './search-builder-group/search-builder-group.component';\nimport { SearchBuilderOutletDirective } from './search-builder-outlet/search-builder-outlet.directive';\nimport { SearchBuilderComponent } from './search-builder.component';\nimport { BaseSearchComponent } from './search-components/base-search.component';\nimport { SearchDateRangeComponent } from './search-components/date-range/date-range.component';\nimport { SearchDateComponent } from './search-components/date/date.component';\nimport { SearchSelectComponent } from './search-components/select/select.component';\nimport { SearchTextComponent } from './search-components/text/text.component';\n\n@NgModule({\r\n    imports: [\r\n        AccessibilityModule,\r\n        CommonModule,\r\n        DateTimePickerModule,\r\n        FocusIfModule,\r\n        FormsModule,\r\n        IconModule,\r\n        PopoverModule,\r\n        SelectModule,\r\n    ],\r\n    exports: [\r\n        SearchBuilderComponent,\r\n        SearchBuilderGroupComponent,\r\n        BaseSearchComponent\r\n    ],\r\n    declarations: [\r\n        SearchBuilderComponent,\r\n        SearchBuilderGroupComponent,\r\n        SearchTextComponent,\r\n        SearchDateComponent,\r\n        SearchDateRangeComponent,\r\n        SearchBuilderOutletDirective,\r\n        SearchSelectComponent,\r\n        BaseSearchComponent\r\n    ]\r\n})\nexport class SearchBuilderModule { }\n","import { SelectionService } from '../selection.service';\n\n \nexport class SelectionStrategy<T = any> {\n\n    constructor(protected selectionService?: SelectionService<T>) { }\n\n    setSelectionService(selectionService: SelectionService<T>): void {\n        this.selectionService = selectionService;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    mousedown(event: MouseEvent, data: T): void { }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    click(event: MouseEvent, data: T): void { }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    keydown(event: KeyboardEvent, data: T): void { }\n\n    /**\n     * Select the item - default behavior\n     */\n    select(...data: T[]): void {\n        this.selectionService.select(...data);\n    }\n\n    /**\n     * Replace the current selection with the list of items specified\n     */\n    selectOnly(...data: T[]): void {\n        this.selectionService.selectOnly(...data);\n    }\n\n    /**\n     * Toggle the item's selected state - default behavior\n     */\n    toggle(...data: T[]): void {\n        this.selectionService.toggle(...data);\n    }\n\n    /**\n     * Deselect the item - default behavior\n     */\n    deselect(...data: T[]): void {\n        this.selectionService.deselect(...data);\n    }\n\n    /**\n     * Select all items - default behavior\n     */\n    selectAll(): void {\n        this.select(...this.selectionService.dataset);\n    }\n\n    /**\n     * Deselect all items - default behavior\n     */\n    deselectAll(): void {\n\n        // call deselect on all items in the dataset\n        this.selectionService.deselectAll();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    destroy(): void { }\n}","import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { SelectionStrategy } from './selection.strategy';\n\nexport class RowSelectionStrategy<T> extends SelectionStrategy<T> {\n\n  // store the most recently selected row\n  private _selection: Selection<T> = { start: null, end: null };\n\n  /**\n   * By default on shift click the browser will highlight\n   * text. This looks bad and we don't want this to occur\n   */\n  mousedown(event: MouseEvent): void {\n    event.preventDefault();\n  }\n\n  /**\n   * When a row is clicked we want to handle selection\n   */\n  click(event: MouseEvent, data: T): void {\n\n    // determine which modifier keys are pressed\n    const { ctrlKey, shiftKey } = event;\n\n    // if the shift key is pressed we want to perform a multiple selection\n    if (shiftKey) {\n      return this.multipleSelect(data);\n    }\n\n    // if the control key is pressed we want to perform an additive toggle selection\n    if (ctrlKey) {\n      return this.toggle(data);\n    }\n\n    // perform a single selection where all other rows are deselected\n    this.singleSelect(data);\n  }\n\n  /**\n   * To support full keyboard control we need to support the following:\n   * 1. Arrow keys to navigate up and down\n   * 2. Spacebar to toggle selection\n   * 3. Shift + Arrow keys to multiple select\n   * 4. Ctrl + Arrow keys to allow retained selection and navigation\n   */\n  keydown(event: KeyboardEvent, data: T): void {\n\n    switch (event.which) {\n\n      case UP_ARROW:\n      case DOWN_ARROW:\n        event.preventDefault();\n        this.navigate(event, data);\n        break;\n\n      case SPACE:\n        event.preventDefault();\n        this.selectionService.strategy.toggle(data);\n\n        // also activate the item\n        this.selectionService.activate(data);\n        break;\n\n    }\n  }\n\n  /**\n   * Override the standard toggle function to store or clear the\n   * most recently selected item\n   */\n  toggle(data: T): void {\n    super.toggle(data);\n\n    // store or clear the selection\n    this.selectionService.isSelected(data) ? this.setSelectionStart(data) : this.clearSelection();\n  }\n\n  /**\n   * Clear all other selected items and select only\n   * the most recently selected item\n   */\n  private singleSelect(data: T): void {\n\n    // deselect all other rows if neither modifier key is pressed\n    this.deselectAll();\n\n    // select the current row\n    this.select(data);\n\n    // store the current item as the selection start\n    this.setSelectionStart(data);\n  }\n\n  /**\n   * Handle multiple selection:\n   * 1. If no start item selected - select it\n   * 2. If a start item has been selected - select all in between\n   * 3. If a start and end item have been selected clear the range and then select the new range\n   */\n  protected multipleSelect(data: T): void {\n\n    // if no selection currently exists then perform initial selection\n    if (!this._selection.start) {\n\n      // select the row\n      this.select(data);\n\n      // store the starting point\n      return this.setSelectionStart(data);\n    }\n\n    // if a multiple selection already took place - clear the previous selection\n    if (this._selection.start && this._selection.end) {\n      this.deselect(...this.getSelectedItems());\n    }\n\n    // set the new selection end point\n    this.setSelectionEnd(data);\n\n    // select all the items in the range\n    this.select(...this.getSelectedItems());\n  }\n\n  /**\n   * Set the selection start point. If there was previously a\n   * selection end point then clear it as this is a new selection\n   */\n  private setSelectionStart(data: T): void {\n    this._selection.start = data;\n    this._selection.end = null;\n\n    // activate the item\n    this.selectionService.activate(data);\n  }\n\n  /**\n   * Set the selection end point\n   */\n  private setSelectionEnd(data: T): void {\n    this._selection.end = data;\n\n    // activate the item\n    this.selectionService.activate(data);\n  }\n\n  /**\n   * Clear both start and end selection points\n   */\n  protected clearSelection(deactivate: boolean = true): void {\n\n    // reset the selected item\n    this._selection = { start: null, end: null };\n\n    // remove the current active item\n    if (deactivate) {\n      this.selectionService.deactivate();\n    }\n  }\n\n  /**\n   * Determine all the items affected by the current selection.\n   * Note that the end point may be above the start point so\n   * we need to account for this.\n   */\n  private getSelectedItems(): T[] {\n\n    // get the latest dataset\n    const { dataset } = this.selectionService;\n\n    // get the indexes of the start and end point\n    const startIdx = dataset.indexOf(this._selection.start);\n    const endIdx = dataset.indexOf(this._selection.end);\n\n    // get the region of the array that is selected - note the endIdx may be before the startIdx so account for this\n    return dataset.slice(Math.min(startIdx, endIdx), Math.max(startIdx, endIdx) + 1);\n  }\n\n  /**\n   * Activate the sibling item when arrow keys are pressed\n   */\n  private navigate(event: KeyboardEvent, data: T): void {\n\n    // determine which modifier keys are pressed\n    const { ctrlKey, shiftKey } = event;\n\n    // if no modifier keys are pressed then deselect all and clear the selection\n    if (!ctrlKey && !shiftKey) {\n      this.deselectAll();\n      this.clearSelection(false);\n    }\n\n    // activate the sibling - if the up arrow is pressed then navigate to the previous sibling\n    const sibling = this.selectionService.activateSibling(event.which === UP_ARROW);\n\n    // if the shift key is pressed then we also want to toggle the state if the item\n    if (shiftKey && sibling) {\n\n      // if there is no current selection start then select the current row\n      if (!this._selection.start) {\n        this.multipleSelect(data);\n      }\n\n      this.multipleSelect(sibling);\n    }\n  }\n}\n\nexport interface Selection<T> {\n  start: T;\n  end: T;\n}\n","import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\r\nimport { RowSelectionStrategy } from './row-selection.strategy';\r\n\r\nexport class RowAltSelectionStrategy<T> extends RowSelectionStrategy<T> {\r\n    keydown(event: KeyboardEvent, data: T): void {\r\n        switch (event.which) {\r\n            case UP_ARROW:\r\n            case DOWN_ARROW:\r\n                event.preventDefault();\r\n                this.handleCursorKey(event, data);\r\n                break;\r\n\r\n            case SPACE:\r\n                event.preventDefault();\r\n                this.selectionService.strategy.toggle(data);\r\n                break;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Select the sibling item when arrow keys are pressed\r\n     */\r\n    private handleCursorKey(event: KeyboardEvent, data: T): void {\r\n        // determine which modifier keys are pressed\r\n        const { ctrlKey, shiftKey } = event;\r\n\r\n        // if no modifier keys are pressed then deselect all and clear the selection\r\n        if (!ctrlKey && !shiftKey) {\r\n            this.deselectAll();\r\n            this.clearSelection(false);\r\n        }\r\n\r\n        if (ctrlKey) {\r\n            this.selectionService.activateSibling(event.which === UP_ARROW);\r\n        } else {\r\n            const sibling = this.selectionService.getSibling(event.which === UP_ARROW);\r\n            this.multipleSelect(sibling ? sibling : data);\r\n        }\r\n    }\r\n}\r\n","import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { SelectionStrategy } from './selection.strategy';\n\nexport class SimpleSelectionStrategy<T> extends SelectionStrategy<T> {\n\n  /**\n   * When the item is clicked simply toggle the current selected state\n   */\n  click(_event: MouseEvent, data: T): void {\n    this.toggle(data);\n  }\n\n  /**\n   * Add basic keyboard support for navigating\n   * and selecting/deselecting items\n   */\n  keydown(event: KeyboardEvent, data: T): void {\n\n    switch (event.which) {\n\n      case UP_ARROW:\n        event.preventDefault();\n        this.selectionService.activateSibling(true);\n        return;\n\n      case DOWN_ARROW:\n        event.preventDefault();\n        this.selectionService.activateSibling(false);\n        return;\n\n      case SPACE:\n        event.preventDefault();\n        return this.toggle(data);\n    }\n  }\n\n  /**\n   * Override the standard toggle function to always activate the item\n   */\n  toggle(data: T): void {\n    super.toggle(data);\n    this.selectionService.activate(data);\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { RowAltSelectionStrategy } from './strategies/row-alt-selection.strategy';\nimport { RowSelectionStrategy } from './strategies/row-selection.strategy';\nimport { SelectionStrategy } from './strategies/selection.strategy';\nimport { SimpleSelectionStrategy } from './strategies/simple-selection.strategy';\n\n@Injectable()\nexport class SelectionService<T> implements OnDestroy {\n\n    /** Store the current set of selectable items and ensure an item can be focused */\n    set dataset(dataset: ReadonlyArray<T>) {\n        this._dataset = dataset;\n        if (this._dataset.indexOf(this._active) === -1) {\n            this.setFirstItemFocusable();\n        }\n    }\n\n    /** Get the current set of selectable items */\n    get dataset(): ReadonlyArray<T> {\n        return this._dataset;\n    }\n\n    /** The active selection strategy that defines how selections can be made */\n    strategy: SelectionStrategy<T> = new SimpleSelectionStrategy<T>(this);\n\n    /** Define if selections can be performed on any items */\n    isEnabled: boolean = true;\n\n    /** Define if the mouse can be used to perform selections */\n    isClickEnabled: boolean = true;\n\n    /** Define if the keyboard can be used to perform selections */\n    isKeyboardEnabled: boolean = true;\n\n    /** Define the currently focused item */\n    readonly focus$ = new BehaviorSubject<T>(null);\n\n    /** Define the currently active item */\n    readonly active$ = new BehaviorSubject<T>(null);\n\n    /** Store the current list of selected items as an array */\n    readonly selection$ = new BehaviorSubject<T[]>([]);\n\n    /** Store the active item */\n    private _active: T;\n\n    /** Store the current set of selectable items */\n    private _dataset: ReadonlyArray<T> = [];\n\n    /** Store the selection strategy that should be destroyed */\n    private _strategyToDestroy: SelectionStrategy<T> = this.strategy;\n\n    /** Store the current selection in a set */\n    private readonly _selection = new Set<T>();\n\n    /** Store the current disabled items in a set */\n    private readonly _disabled = new Set<T>();\n\n    ngOnDestroy(): void {\n        // destroy the active strategy\n        if (this._strategyToDestroy) {\n            this._strategyToDestroy.destroy();\n        }\n\n        // complete all observables\n        this.focus$.complete();\n        this.active$.complete();\n        this.selection$.complete();\n    }\n\n    /**\n     * If the item is not currently selected then add it\n     * to the list of selected items\n     */\n    select(...selections: T[]): void {\n\n        // filter out any disabled items\n        selections = selections.filter(item => !this._disabled.has(item));\n\n        // add each selection to the set\n        selections.forEach(selection => this._selection.add(selection));\n\n        // propagate the changes\n        this.selectionHasMutated();\n    }\n\n    /**\n     * Deselect all currently selected items and replace with a new selection\n     */\n    selectOnly(...selection: T[]): void {\n\n        // filter out any disabled items\n        selection = selection.filter(item => !this._disabled.has(item));\n\n        // remove all currently selected items\n        this._selection.clear();\n\n        // select only the specified item\n        selection.forEach(item => this._selection.add(item));\n\n        // emit the changes\n        this.selectionHasMutated();\n    }\n\n    /**\n     * Remove an item from the list of selected items\n     */\n    deselect(...selections: T[]): void {\n\n        // remove each item from the set\n        selections.forEach(selection => this._selection.delete(selection));\n\n        // propagate the changes\n        this.selectionHasMutated();\n    }\n\n    /**\n     * Remove all items from the list of selected items\n     */\n    deselectAll(): void {\n        // remove all items in the array\n        this.deselect(...this._dataset);\n\n        // clear the set in case any items have been removed from the DOM but are still selected\n        this._selection.clear();\n    }\n\n    /**\n     * Toggle the selected state of any specified items\n     */\n    toggle(...selections: T[]): void {\n        selections.forEach(selection => this.isSelected(selection) ? this.deselect(selection) : this.select(selection));\n    }\n\n    /**\n     * Determine whether or not a specific item is currently selected\n     */\n    isSelected(data: T): boolean {\n        return this._selection.has(data);\n    }\n\n    /**\n     * Return an observable specifically for notifying the subscriber\n     * only when the selection state of a specific object has changed\n     */\n    getSelectionState(data: T): Observable<boolean> {\n        return this.selection$.pipe(map(() => this.isSelected(data)), distinctUntilChanged());\n    }\n\n    /**\n     * Define how selections should be performed.\n     * This allows us to use an strategy pattern to handle the various keyboard\n     * and mouse interactions while keeping each mode separated and\n     * easily extensible if we want to add more modes in future!\n     */\n    setStrategy(mode: SelectionMode | SelectionStrategy<T>): void {\n\n        if (this._strategyToDestroy) {\n            // Destroy previous strategy if it was created internally\n            this._strategyToDestroy.destroy();\n            this._strategyToDestroy = null;\n        }\n\n        if (mode instanceof SelectionStrategy) {\n\n            // Custom strategy - pass in the service instance\n            this.strategy = mode;\n            this.strategy.setSelectionService(this);\n\n        } else {\n\n            switch (mode.toLowerCase().trim()) {\n\n                case 'simple':\n                    this.strategy = this._strategyToDestroy = new SimpleSelectionStrategy<T>(this);\n                    break;\n\n                case 'row':\n                    this.strategy = this._strategyToDestroy = new RowSelectionStrategy<T>(this);\n                    break;\n\n                case 'row-alt':\n                    this.strategy = this._strategyToDestroy = new RowAltSelectionStrategy<T>(this);\n                    break;\n\n                default:\n                    throw new Error(`The selection mode '${mode}' does not exist. Valid modes are 'simple', 'row', or 'row-alt'.`);\n            }\n        }\n    }\n\n    /**\n     * Set the current active item\n     */\n    activate(data: T): void {\n        this._active = data;\n        this.active$.next(this._active);\n    }\n\n    /**\n     * Deactive all items\n     */\n    deactivate(): void {\n        this._active = null;\n        this.active$.next(this._active);\n    }\n\n    /**\n     * Return the next or previous sibling of the current active item.\n     * @param previous If true, the previous sibling will be returned.\n     */\n    getSibling(previous: boolean = false): T {\n\n        // check if there is a current active item\n        if (!this._active) {\n            return;\n        }\n\n        // get the index of the current item\n        const idx = this.dataset.indexOf(this._active);\n        const target = this.dataset[previous ? idx - 1 : idx + 1];\n\n        return target;\n    }\n\n    /**\n     * Activate the sibling of the current active item.\n     * If previous is set to true the previous sibling will be activated\n     * rather than the next sibling. This function will also return the\n     * data of the newly activated sibling\n     */\n    activateSibling(previous: boolean = false): T {\n\n        const target = this.getSibling(previous);\n\n        // check if the target exists\n        if (target) {\n            this.activate(target);\n        }\n\n        return target;\n    }\n\n    setDisabled(disabled: boolean): void {\n        // store the current disabled state\n        this.isEnabled = !disabled;\n\n        // clear any stateful data\n        this._active = null;\n        this.active$.next(this._active);\n        this._selection.clear();\n\n        // emit the selection change information\n        this.selectionHasMutated();\n    }\n\n    /** Store the disabled state of an item */\n    setItemDisabled(item: T, isDisabled: boolean): void {\n\n        // update the internal list of disabled items\n        if (isDisabled && !this._disabled.has(item)) {\n            this._disabled.add(item);\n        } else if (!isDisabled) {\n            this._disabled.delete(item);\n        }\n    }\n\n    private selectionHasMutated(): void {\n        this.selection$.next(Array.from(this._selection));\n    }\n\n    private setFirstItemFocusable(): void {\n        if (this._dataset.length > 0) {\n            this.focus$.next(this._dataset[0]);\n            this._active = this._dataset[0];\n        } else {\n            this._active = null;\n        }\n    }\n}\n\nexport type SelectionMode = 'simple' | 'row' | 'row-alt';","import { Component, ElementRef, HostBinding, HostListener, inject, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { tick } from '../../../common/index';\nimport { FocusIndicator, FocusIndicatorService } from '../../../directives/accessibility/index';\nimport { SelectionService } from '../../../directives/selection/selection.service';\n\n@Component({\n    selector: 'ux-select-list-item',\n    templateUrl: './select-list-item.component.html',\n    host: {\n        role: 'listitem'\n    }\n})\nexport class SelectListItemComponent<T> implements OnDestroy {\n    private readonly _selection = inject<SelectionService<T>>(SelectionService);\n\n    readonly elementRef = inject(ElementRef);\n\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n\n    /** This should define the data this item represents. This value will appear in the selected array whenever this item is selected. */\n    @Input() data: T;\n\n    @HostBinding('tabindex') tabindex: number = -1;\n\n    @HostBinding('class.selected')\n    @HostBinding('attr.aria-selected')\n    set selected(isSelected: boolean) {\n        isSelected ? this._selection.select(this.data) : this._selection.deselect(this.data);\n    }\n\n    get selected(): boolean {\n        return this._selection.isSelected(this.data);\n    }\n\n    /** Store a reference to the focus indicator instance */\n    private readonly _focusIndicator: FocusIndicator;\n\n    /** Unsubscribe from all subscriptions on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // create the focus indicator\n        this._focusIndicator = this.focusIndicatorService.monitor(this.elementRef.nativeElement);\n\n        this._selection.active$.pipe(takeUntil(this._onDestroy), filter(data => data === this.data)).subscribe(active => {\n            this._selection.focus$.next(active);\n            this.elementRef.nativeElement.focus();\n        });\n\n        // make this item tabbable or not based on the focused element\n        this._selection.focus$.pipe(takeUntil(this._onDestroy), tick())\n            .subscribe(focused => this.tabindex = focused === this.data ? 0 : -1);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n        this._focusIndicator.destroy();\n    }\n\n    @HostListener('mousedown', ['$event'])\n    onMouseDown(event: MouseEvent): void {\n        this._selection.strategy.mousedown(event, this.data);\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent): void {\n        this._selection.strategy.click(event, this.data);\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeydown(event: KeyboardEvent): void {\n        this._selection.strategy.keydown(event, this.data);\n    }\n}","<ng-content></ng-content>","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { SPACE } from '@angular/cdk/keycodes';\r\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, map, skip, takeUntil, tap } from 'rxjs/operators';\r\nimport { FocusIndicator, FocusIndicatorService, ManagedFocusContainerService } from '../accessibility/index';\r\nimport { SelectionService } from './selection.service';\r\n\r\n@Directive({\r\n    selector: '[uxSelectionItem]',\r\n    exportAs: 'ux-selection-item',\r\n    host: {\r\n        '[attr.aria-selected]': 'addAriaAttributes ? selected : null',\r\n    }\r\n})\r\nexport class SelectionItemDirective<T> implements OnInit, OnChanges, OnDestroy {\r\n    readonly focusIndicatorService = inject(FocusIndicatorService);\r\n\r\n    private readonly _selectionService = inject<SelectionService<T>>(SelectionService);\r\n\r\n    private readonly _elementRef = inject(ElementRef);\r\n\r\n    private readonly _managedFocusContainerService = inject(ManagedFocusContainerService);\r\n\r\n    private readonly _changeDetector = inject(ChangeDetectorRef);\r\n\r\n    /** Defines the data associated with this item. */\r\n    @Input() uxSelectionItem: T;\r\n\r\n    /** Defines whether or not this item is currently selected. */\r\n    @Input()\r\n    @HostBinding('class.ux-selection-selected')\r\n    set selected(selected: boolean) {\r\n        selected ? this.select() : this.deselect();\r\n    }\r\n\r\n    get selected(): boolean {\r\n        return this._selected;\r\n    }\r\n\r\n    /** Defines the tab index of the row */\r\n    @Input() tabindex: number = null;\r\n\r\n    /** Determine whether or not this item can be selected */\r\n    @Input() set uxSelectionDisabled(isDisabled: boolean) {\r\n        // if this item was selected then deselect it\r\n        if (this._selected && isDisabled) {\r\n            this.deselect();\r\n        }\r\n\r\n        // inform the selection service of the disabled state\r\n        this._selectionService.setItemDisabled(this.uxSelectionItem, isDisabled);\r\n\r\n        // store the current disabled state\r\n        this._isDisabled = isDisabled;\r\n    }\r\n\r\n    /** Whether aria-selected is added to the host element */\r\n    @Input() set addAriaAttributes(value: boolean) {\r\n        this._addAriaAttributes = coerceBooleanProperty(value);\r\n    }\r\n\r\n    get addAriaAttributes(): boolean {\r\n        return this._addAriaAttributes;\r\n    }\r\n\r\n    /** Defines whether or not this item is currently selected. */\r\n    @Output() selectedChange = new EventEmitter<boolean>();\r\n\r\n    /** Store whether this item is the focusable item */\r\n    active: boolean = false;\r\n\r\n    /** Store the focused state of the element */\r\n    @HostBinding('class.ux-selection-focused') isFocused: boolean = false;\r\n\r\n    @HostBinding('attr.tabindex')\r\n    get attrTabIndex(): number {\r\n        return (this.tabindex !== null) ? this.tabindex : this._managedTabIndex;\r\n    }\r\n\r\n    /** Store the current selected state */\r\n    private _selected: boolean = false;\r\n\r\n    /** Store the disabled state */\r\n    private _isDisabled: boolean = false;\r\n\r\n    /** Store the tab indexed if using the managed focus container */\r\n    private _managedTabIndex: number = -1;\r\n\r\n    /** Determine if there is a pending state change as we debounce before emitting */\r\n    private _hasPendingStateChange: boolean = false;\r\n\r\n    /** Subscription to the selection state observable. */\r\n    private _selectionStateSubscription: Subscription;\r\n\r\n    /** Store value for _addAriaAttributes */\r\n    private _addAriaAttributes: boolean = true;\r\n\r\n    /** Automatically unsubscribe when the component is destroyed */\r\n    private readonly _onDestroy = new Subject<void>();\r\n\r\n    /** The the instance of the focus indicator */\r\n    private readonly _focusIndicator: FocusIndicator;\r\n\r\n    constructor() {\r\n        this._focusIndicator = this.focusIndicatorService.monitor(this._elementRef.nativeElement);\r\n    }\r\n\r\n    ngOnInit(): void {\r\n\r\n        // if there is no associated data then throw an error\r\n        if (!this.uxSelectionItem) {\r\n            throw new Error('The uxSelectionItem directive must have data associated with it.');\r\n        }\r\n\r\n        // subscribe to changes to the active state\r\n        this._selectionService.active$.pipe(takeUntil(this._onDestroy), map(active => active === this.uxSelectionItem)).subscribe(active => {\r\n\r\n            // store the focus state\r\n            this.active = active;\r\n\r\n            // if it is active then focus the element\r\n            if (active === true) {\r\n                this._selectionService.focus$.next(this.uxSelectionItem);\r\n                this._elementRef.nativeElement.focus();\r\n            }\r\n        });\r\n\r\n        // Subscribe to changes to the focus target\r\n        // This is mostly the same as active$, except that it has an initial value of the first item in the collection.\r\n        this._selectionService.focus$.pipe(takeUntil(this._onDestroy)).subscribe(focusTarget => {\r\n            this._managedTabIndex = (focusTarget === this.uxSelectionItem) ? 0 : -1;\r\n        });\r\n\r\n        // Watch for focus within the container element and manage tabindex of descendants\r\n        this._managedFocusContainerService.register(this._elementRef.nativeElement, this);\r\n\r\n        // Listen for changes to the focus state and apply the appropriate class\r\n       this._focusIndicator.origin$.pipe(map(origin => origin === 'keyboard'), takeUntil(this._onDestroy))\r\n           .subscribe(isFocused => {\r\n               this.isFocused = isFocused;\r\n               this._changeDetector.markForCheck();\r\n           });\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes.uxSelectionItem) {\r\n            this.updateSelectionItem();\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this._onDestroy.next();\r\n        this._onDestroy.complete();\r\n        this._focusIndicator.destroy();\r\n        this._managedFocusContainerService.unregister(this._elementRef.nativeElement, this);\r\n    }\r\n\r\n    @HostListener('click', ['$event'])\r\n    click(event: MouseEvent): void {\r\n        if (!this._isDisabled && !this._hasPendingStateChange && this._selectionService.isEnabled && this._selectionService.isClickEnabled) {\r\n            this._selectionService.strategy.click(event, this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    @HostListener('mousedown', ['$event'])\r\n    mousedown(event: MouseEvent): void {\r\n        if (!this._isDisabled && this._selectionService.isEnabled && this._selectionService.isClickEnabled) {\r\n            this._selectionService.strategy.mousedown(event, this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    @HostListener('keydown', ['$event'])\r\n    keydown(event: KeyboardEvent): void {\r\n\r\n        // if the space key (selection key) is pressed and we are disabled then we should block\r\n        // the event from propagating. However if this is a key such as arrow presses then we do\r\n        // still want this to propagate to allow keyboard navigation for accessibility purposes.\r\n        const isDisabled = this._isDisabled && event.keyCode === SPACE;\r\n\r\n        if (!isDisabled && this._selectionService.isEnabled && this._selectionService.isKeyboardEnabled) {\r\n            this._selectionService.strategy.keydown(event, this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    @HostListener('focus')\r\n    focus(): void {\r\n        // If tabbed to from outside the component, activate.\r\n        if (this._selectionService.active$.getValue() !== this.uxSelectionItem) {\r\n            this._selectionService.activate(this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Select this item using the current strategy\r\n     */\r\n    select(): void {\r\n        if (!this._isDisabled && this._selectionService.isEnabled) {\r\n            this._selectionService.strategy.select(this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Deselect this item using the current strategy\r\n     */\r\n    deselect(): void {\r\n        if (!this._isDisabled && this._selectionService.isEnabled) {\r\n            this._selectionService.strategy.deselect(this.uxSelectionItem);\r\n        }\r\n    }\r\n\r\n    private updateSelectionItem(): void {\r\n\r\n        if (this._selectionStateSubscription) {\r\n            this._selectionStateSubscription.unsubscribe();\r\n        }\r\n\r\n        // subscribe to selection changes on this item (don't emit the initial value)\r\n        this._selectionStateSubscription = this._selectionService.getSelectionState(this.uxSelectionItem).pipe(\r\n            skip(1),\r\n            tap(() => this._hasPendingStateChange = true),\r\n            debounceTime(0),\r\n            takeUntil(this._onDestroy)\r\n        ).subscribe(selected => {\r\n            this._hasPendingStateChange = false;\r\n\r\n            if (this._selected === selected) {\r\n                return;\r\n            }\r\n\r\n            // store the selected state\r\n            this._selected = selected;\r\n\r\n            // emit the selected state\r\n            this.selectedChange.emit(selected);\r\n\r\n            this._changeDetector.markForCheck();\r\n        });\r\n\r\n        this._selected = this._selectionService.isSelected(this.uxSelectionItem);\r\n    }\r\n\r\n    static ngAcceptInputType_addAriaAttributes: BooleanInput;\r\n}\r\n","import { AfterContentInit, ChangeDetectorRef, ContentChildren, Directive, EventEmitter, HostBinding, inject, Input, OnDestroy, Output, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { SelectionItemDirective } from './selection-item.directive';\nimport { SelectionMode, SelectionService } from './selection.service';\nimport { SelectionStrategy } from './strategies/selection.strategy';\n\n@Directive({\n    selector: '[uxSelection]',\n    exportAs: 'ux-selection',\n    providers: [SelectionService]\n})\nexport class SelectionDirective<T> implements AfterContentInit, OnDestroy {\n    readonly _selectionService = inject<SelectionService<T>>(SelectionService);\n\n    readonly _cdRef = inject(ChangeDetectorRef);\n\n    /** Defines the items that should be selected. */\n    @Input() set uxSelection(items: Array<T> | ReadonlyArray<T>) {\n        this._lastSelection = items;\n        this._selectionService.selectOnly(...items);\n    }\n\n    /** Can be used to enabled/disable selection behavior. */\n    @Input() set disabled(disabled: boolean) {\n        this._selectionService.setDisabled(disabled);\n    }\n\n    /**\n     * Defines the selection behavior. Alternatively, custom selection behavior can be defined by defining a\n     * class which extends SelectionStrategy, and providing an instance of the custom class to this property.\n     * See below for details of the SelectionStrategy class.\n     */\n    @Input() set mode(mode: SelectionMode | SelectionStrategy<T>) {\n        this._selectionService.setStrategy(mode);\n    }\n\n    /**\n     * Can be used to enable/disable click selection on items. This can be used to manually control the selection of an item,\n     * for example, binding the selection state to a checkbox.\n     */\n    @Input() set clickSelection(isClickEnabled: boolean) {\n        this._selectionService.isClickEnabled = isClickEnabled;\n    }\n\n    /** Can be used to enable/disable keyboard navigation on items. Use this if you wish to provide custom keyboard controls for selection. */\n    @Input() set keyboardSelection(isKeyboardEnabled: boolean) {\n        this._selectionService.isKeyboardEnabled = isKeyboardEnabled;\n    }\n\n    /**\n     * The full set of selection items.\n     * Only needed if the full set of `uxSelectionItem`s is not available, e.g. within a virtual scroll container.\n     */\n    @Input() set selectionItems(value: T[]) {\n        this._hasExplicitDataset = !!value;\n        if (value) {\n            this._selectionService.dataset = value;\n        }\n    }\n\n    /** The tabstop of the selection outer element */\n    @Input() @HostBinding('attr.tabindex') tabindex: string | number = null;\n\n    /** This event will be triggered when there is a change to the selected items. It will contain an array of the currently selected items. */\n    @Output() uxSelectionChange = new EventEmitter<T[]>();\n\n    /** Access all items within the list */\n    @ContentChildren(SelectionItemDirective) items: QueryList<SelectionItemDirective<T>>;\n\n    /** Unsubscribe from all observables on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Store the previous selection so we don't emit more than we have to */\n    private _lastSelection: ReadonlyArray<T> = [];\n\n    /** Whether a value has been provided to the `selectionItems` input. */\n    private _hasExplicitDataset: boolean = false;\n\n    constructor() {\n        this._selectionService.selection$.pipe(debounceTime(0), takeUntil(this._onDestroy)).subscribe(items => {\n            if (this.isSelectionChanged(items)) {\n                this.uxSelectionChange.emit(items);\n            }\n\n            // store the most recent selection\n            this._lastSelection = [...items];\n        });\n    }\n\n    ngAfterContentInit(): void {\n        // provide the initial list of selection items\n        this.update();\n\n        // if the list changes then inform the service\n        this.items.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => this.update());\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Update the dataset to reflect the latest selection items\n     */\n    update(): void {\n\n        // Capture the set of data items from the ContentChildren, unless an explicit value has been provided.\n        if (!this._hasExplicitDataset) {\n            this._selectionService.dataset = this.items.map(item => item.uxSelectionItem);\n        }\n\n        // Make sure that a tab target has been defined so that the component can be tabbed to.\n        if (this._selectionService.focus$.getValue() === null && this._selectionService.dataset.length > 0) {\n            this._selectionService.focus$.next(this._selectionService.dataset[0]);\n        }\n\n        // The above could trigger a change in the computed tabindex for selection items\n        this._cdRef.detectChanges();\n    }\n\n    /**\n     * Select all the items in the list\n     */\n    selectAll(): void {\n        if (this._selectionService.isEnabled) {\n            this._selectionService.strategy.selectAll();\n        }\n    }\n\n    /**\n     * Deselect all currently selected items\n     */\n    deselectAll(): void {\n        if (this._selectionService.isEnabled) {\n            this._selectionService.strategy.deselectAll();\n        }\n    }\n\n    /**\n     * Determine if the previous selection is the same as the current selection\n     */\n    private isSelectionChanged(selection: T[]): boolean {\n\n        // fast, efficient check, if length is different they must have changed\n        if (!this._lastSelection && selection || this._lastSelection.length !== selection.length) {\n            return true;\n        }\n\n        // if both arrays have 0 items then they have not changed\n        if (this._lastSelection.length === 0 && selection.length === 0) {\n            return false;\n        }\n\n        // otherwise do a check on each item\n        return !this._lastSelection.every(item => selection.indexOf(item) !== -1);\n    }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SelectionItemDirective } from './selection-item.directive';\nimport { SelectionDirective } from './selection.directive';\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  declarations: [SelectionDirective, SelectionItemDirective],\n  exports: [SelectionDirective, SelectionItemDirective]\n})\nexport class SelectionModule { }\n","import { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { SelectionStrategy } from '../../../directives/selection/index';\n\nexport class MultipleSelectListStrategy<T> extends SelectionStrategy<T> {\n\n    private _lastSelection: T;\n\n    /** Prevent the browser from highlighting text on shift click */\n    mousedown(event: MouseEvent): void {\n        event.preventDefault();\n    }\n\n    click(event: MouseEvent, data: T): void {\n\n        // activate the clicked item\n        this.selectionService.activate(data);\n\n        // if the shift key is pressed we want to perform a multiple selection\n        if (event.shiftKey) {\n            return this.multipleSelect(data);\n        }\n\n        // otherwise perform a single toggle selection\n        if (this.selectionService.isSelected(data)) {\n            this.deselect(data);\n            this._lastSelection = null;\n        } else {\n            this.select(data);\n            this._lastSelection = data;\n        }\n    }\n\n    keydown(event: KeyboardEvent, data: T): void {\n\n        switch (event.which) {\n\n            case UP_ARROW: {\n                event.preventDefault();\n                const sibling = this.selectionService.activateSibling(true);\n\n                if (event.shiftKey) {\n                    this.select(data, sibling);\n                    this._lastSelection = sibling;\n                }\n                break;\n            }\n\n            case DOWN_ARROW: {\n                event.preventDefault();\n                const sibling = this.selectionService.activateSibling(false);\n\n                if (event.shiftKey) {\n                    this.select(data, sibling);\n                    this._lastSelection = sibling;\n                }\n                break;\n            }\n\n            case SPACE:\n            case ENTER:\n                event.preventDefault();\n                this.toggle(data);\n                this._lastSelection = this.selectionService.isSelected(data) ? data : null;\n                break;\n        }\n    }\n\n    multipleSelect(data: T): void {\n\n        // if there is no start item selected\n        if (!this._lastSelection) {\n            this.select(data);\n            this._lastSelection = data;\n            return;\n        }\n\n        // if there already is a start item then find the items in the range\n        this.select(...this.getSelectedItems(this._lastSelection, data));\n\n        // store the selection end point\n        this._lastSelection = data;\n    }\n\n    private getSelectedItems(start: T, end: T): T[] {\n\n        // get the latest dataset\n        const { dataset } = this.selectionService;\n\n        // get the indexes of the start and end point\n        const startIdx = dataset.indexOf(start);\n        const endIdx = dataset.indexOf(end);\n\n        // get the region of the array that is selected - note the endIdx may be before the startIdx so account for this\n        return dataset.slice(Math.min(startIdx, endIdx), Math.max(startIdx, endIdx) + 1);\n    }\n\n}","import { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { SelectionStrategy } from '../../../directives/selection/index';\n\nexport class SingleSelectListStrategy<T> extends SelectionStrategy<T> {\n\n    click(_event: MouseEvent, data: T): void {\n\n        // activate the clicked item\n        this.selectionService.activate(data);\n\n        // toggle the selected state of the item\n        if (!this.selectionService.isSelected(data)) {\n            this.selectOnly(data);\n        } else {\n            this.deselect(data);\n        }\n    }\n\n    keydown(event: KeyboardEvent, data: T): void {\n\n        switch (event.which) {\n\n            case UP_ARROW: {\n                event.preventDefault();\n                this.selectionService.activateSibling(true);\n                break;\n            }\n\n            case DOWN_ARROW: {\n                event.preventDefault();\n                this.selectionService.activateSibling(false);\n                break;\n            }\n\n            case SPACE:\n            case ENTER:\n                event.preventDefault();\n                this.click(null, data);\n                break;\n        }\n    }\n\n}","import { AfterContentInit, Component, ContentChildren, EventEmitter, inject, Input, OnDestroy, Output, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SelectionService } from '../../directives/selection/selection.service';\nimport { SelectListItemComponent } from './select-list-item/select-list-item.component';\nimport { MultipleSelectListStrategy } from './strategies/multiple-select-list.strategy';\nimport { SingleSelectListStrategy } from './strategies/single-select-list.strategy';\n\n@Component({\n    selector: 'ux-select-list',\n    templateUrl: './select-list.component.html',\n    providers: [SelectionService],\n    host: {\n        role: 'list'\n    }\n})\nexport class SelectListComponent<T> implements AfterContentInit, OnDestroy {\n    private readonly _selection = inject<SelectionService<T>>(SelectionService);\n\n    /** Determine if we allow multiple items to be selected */\n    @Input() set multiple(multiple: boolean) {\n        this._selection.strategy.deselectAll();\n        this._selection.setStrategy(multiple ? new MultipleSelectListStrategy<T>() : new SingleSelectListStrategy<T>());\n    }\n\n    /** Set the selected items */\n    @Input() set selected(selected: T | ReadonlyArray<T>) {\n\n        // if the selection entered is the same as the current selection then do nothing\n        if (this._selection.selection$.value === selected) {\n            return;\n        }\n\n        // if selected is an array and has not items and there are no items currently selected also do nothing\n        if (Array.isArray(selected) && selected.length === 0 && this._selection.selection$.value.length === 0) {\n            return;\n        }\n\n        // select only the specified items\n        if (Array.isArray(selected)) {\n            this._selection.selectOnly(...selected);\n        } else {\n            this._selection.selectOnly(selected as T);\n        }\n    }\n\n    /** Emit when the selection changes */\n    @Output() selectedChange = new EventEmitter<ReadonlyArray<T>>();\n\n    /** Find all select list items */\n    @ContentChildren(SelectListItemComponent) items: QueryList<SelectListItemComponent<T>>;\n\n    /** Automatically unsubscribe all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        // set the selection strategy to single by default\n        this._selection.setStrategy(new SingleSelectListStrategy<T>());\n\n        // emit the selection changes when they occur\n        this._selection.selection$.pipe(takeUntil(this._onDestroy))\n            .subscribe(selection => this.selectedChange.emit(selection));\n    }\n\n    ngAfterContentInit(): void {\n\n        // supply the initial item set\n        this._selection.dataset = this.items.map(item => item.data);\n\n        // if the item set changes update the list\n        this.items.changes.pipe(takeUntil(this._onDestroy)).subscribe(() => this._selection.dataset = this.items.map(item => item.data));\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { SelectListItemComponent } from './select-list-item/select-list-item.component';\nimport { SelectListComponent } from './select-list.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule\n    ],\n    declarations: [\n        SelectListComponent,\n        SelectListItemComponent\n    ],\n    exports: [\n        SelectListComponent,\n        SelectListItemComponent\n    ],\n})\nexport class SelectListModule { }\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { isKeyboardTrigger } from '../../common/index';\nimport { FocusIndicatorOriginService } from '../../directives/accessibility/index';\nimport { SidePanelService } from './side-panel.service';\n\n@Directive({\n    selector: '[uxSidePanelClose]'\n})\nexport class SidePanelCloseDirective {\n    private readonly _service = inject(SidePanelService);\n\n    private readonly _focusOrigin = inject(FocusIndicatorOriginService);\n\n    @HostListener('click', ['$event'])\n    onClick(event: MouseEvent | KeyboardEvent): void {\n        // determine the correct origin for the trigger event\n        this._focusOrigin.setOrigin(isKeyboardTrigger(event) ? 'keyboard' : 'mouse');\n\n        // close the side panel menu\n        this._service.close();\n    }\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { FocusIfModule } from '../../directives/focus-if/focus-if.module';\nimport { SidePanelCloseDirective } from './side-panel-close.directive';\nimport { SidePanelComponent } from './side-panel.component';\n\nconst EXPORTS = [\n    SidePanelComponent,\n    SidePanelCloseDirective\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        A11yModule,\n        FocusIfModule\n    ],\n    exports: EXPORTS,\n    declarations: EXPORTS\n})\nexport class SidePanelModule { }","import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core';\nimport { ColorIdentifier, ColorService } from '../../services/color/index';\n\n@Component({\n    selector: 'ux-spark',\n    templateUrl: './spark.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SparkComponent {\n    private readonly _colorService = inject(ColorService);\n\n    values: number[] = [];\n\n    @Input() barHeight: number = 10;\n    @Input() inlineLabel: string;\n    @Input() topLeftLabel: string;\n    @Input() topRightLabel: string;\n    @Input() bottomLeftLabel: string;\n    @Input() bottomRightLabel: string;\n    @Input() tooltip: string;\n    @Input('aria-label') ariaLabel: string | string[];\n    @Input('aria-description') ariaDescription: string;\n\n    private _trackColor: string;\n    private _theme: ColorIdentifier = 'primary';\n    private _barColor: string | string[] = [];\n\n    @Input()\n    set theme(value: string) {\n        this._theme = this._colorService.resolveColorName(value);\n    }\n\n    get theme(): string {\n        return this._theme;\n    }\n\n    @Input()\n    set trackColor(value: string) {\n        this._trackColor = this._colorService.resolve(value);\n    }\n\n    get trackColor(): string {\n        return this._trackColor;\n    }\n\n    @Input()\n    set barColor(value: string | string[]) {\n        if (Array.isArray(value)) {\n            this._barColor = value.map(color => this._colorService.resolve(color));\n        } else {\n            this._barColor = [this._colorService.resolve(value)];\n        }\n    }\n\n    get barColor(): string | string[] {\n        return this._barColor;\n    }\n\n    @Input()\n    set value(value: number | number[]) {\n        // ensure 'value' is an array at this point\n        const values = Array.isArray(value) ? value : [value];\n\n        // get the total value of all lines\n        const total = Math.max(values.reduce((previous, current) => previous + current, 0), 100);\n\n        // figure out the percentages for each spark line\n        this.values = values.map(val => (val / total) * 100);\n    }\n\n    get value(): number | number[] {\n        return this.values;\n    }\n\n    /**\n     * Get the aria label for the spark chart\n     */\n    getAriaLabel(): string | undefined {\n        if (!Array.isArray(this.ariaLabel)) {\n            return this.ariaLabel || this.tooltip;\n        } else {\n            return this.ariaLabel.join(', ');\n        }\n    }\n}\n","<!-- Inline Spark Chart -->\n@if (inlineLabel) {\n  <div class=\"ux-spark-inline-label-container\">\n    <div class=\"ux-spark-inline-label-left\" [innerHtml]=\"inlineLabel\"></div>\n    <div class=\"ux-spark-line\">\n      @if (topLeftLabel || topRightLabel) {\n        <div class=\"ux-spark-top-container\">\n          @if (topLeftLabel) {\n            <div class=\"ux-spark-label-top-left\" [innerHtml]=\"topLeftLabel\"></div>\n          }\n          @if (topRightLabel) {\n            <div class=\"ux-spark-label-top-right\" [innerHtml]=\"topRightLabel\"></div>\n          }\n        </div>\n      }\n      <div role=\"progressbar\"\n        [attr.aria-label]=\"getAriaLabel()\"\n        [attr.aria-description]=\"ariaDescription\"\n        aria-valuemin=\"0\"\n        aria-valuemax=\"100\"\n        [attr.aria-valuenow]=\"values.length === 1 ? values[0] : undefined\"\n        class=\"ux-spark ux-inline ux-spark-theme-{{theme}}\"\n        [style.height.px]=\"barHeight\"\n        [style.backgroundColor]=\"trackColor\"\n        [uxTooltip]=\"tooltip\">\n        @for (line of values; track line; let idx = $index) {\n          <div class=\"ux-spark-bar\"\n            [style.width.%]=\"line\"\n            [style.backgroundColor]=\"barColor[idx]\">\n          </div>\n        }\n      </div>\n      @if (bottomLeftLabel || bottomRightLabel) {\n        <div class=\"ux-spark-bottom-container\">\n          @if (bottomLeftLabel) {\n            <div class=\"ux-spark-label-bottom-left\" [innerHtml]=\"bottomLeftLabel\"></div>\n          }\n          @if (bottomRightLabel) {\n            <div class=\"ux-spark-label-bottom-right\" [innerHtml]=\"bottomRightLabel\"></div>\n          }\n        </div>\n      }\n    </div>\n  </div>\n}\n\n<!-- End Inline Spark Chart -->\n\n\n<!-- Non Inline Spark Chart -->\n@if (!inlineLabel) {\n  <div>\n    @if (topLeftLabel || topRightLabel) {\n      <div class=\"ux-spark-top-container\">\n        @if (topLeftLabel) {\n          <div class=\"ux-spark-label-top-left\" [innerHtml]=\"topLeftLabel\"></div>\n        }\n        @if (topRightLabel) {\n          <div class=\"ux-spark-label-top-right\" [innerHtml]=\"topRightLabel\"></div>\n        }\n      </div>\n    }\n    <div role=\"progressbar\"\n      [attr.aria-label]=\"getAriaLabel()\"\n      [attr.aria-description]=\"ariaDescription\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n      [attr.aria-valuenow]=\"values.length === 1 ? values[0] : undefined\"\n      class=\"ux-spark ux-spark-theme-{{theme}}\"\n      [class.ux-spark-multi-value]=\"values.length > 1\"\n      [style.height.px]=\"barHeight\"\n      [style.backgroundColor]=\"trackColor\"\n      [uxTooltip]=\"tooltip\">\n      @for (line of values; track line; let idx = $index) {\n        <div class=\"ux-spark-bar\"\n          [style.width.%]=\"line\"\n          [style.backgroundColor]=\"barColor[idx]\">\n        </div>\n      }\n    </div>\n    @if (bottomLeftLabel || bottomRightLabel) {\n      <div class=\"ux-spark-bottom-container\">\n        @if (bottomLeftLabel) {\n          <div class=\"ux-spark-label-bottom-left\" [innerHtml]=\"bottomLeftLabel\"></div>\n        }\n        @if (bottomRightLabel) {\n          <div class=\"ux-spark-label-bottom-right\" [innerHtml]=\"bottomRightLabel\"></div>\n        }\n      </div>\n    }\n  </div>\n}\n\n<!-- End Non Inline Spark Chart -->\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SparkComponent } from './spark.component';\nimport { ColorServiceModule } from '../../services/color/index';\nimport { TooltipModule } from '../tooltip/index';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        ColorServiceModule,\n        TooltipModule\n    ],\n    exports: [SparkComponent],\n    declarations: [SparkComponent]\n})\nexport class SparkModule { }\n","/** An interface representing a grouped item */\nexport interface ColumnPickerGroupItem {\n    /**  The name of the group that this column belongs to. */\n    group?: string;\n    /**  The name of the column. */\n    name: string;\n}\n\nexport function isColumnPickerGroupItem(column: string | ColumnPickerGroupItem): column is ColumnPickerGroupItem {\n    return (column as ColumnPickerGroupItem).name !== undefined;\n}\n","import { Injectable } from '@angular/core';\nimport { ColumnPickerGroup } from './column-picker.component';\nimport { ColumnPickerTreeNode } from './interfaces/column-picker-tree-node.interface';\nimport { ColumnPickerGroupItem, isColumnPickerGroupItem } from './interfaces/column-picker-group-item.interface';\n\n@Injectable()\nexport class ColumnPickerService {\n\n    groups: ColumnPickerGroup[];\n\n    getDeselectedColumnsInPresentationOrder(\n        deselected: (string | ColumnPickerGroupItem)[],\n        sort: (a: ColumnPickerGroupItem, b: ColumnPickerGroupItem) => number\n    ): (string | ColumnPickerGroupItem)[] {\n\n        let columns: (string | ColumnPickerGroupItem)[];\n\n        if (sort) {\n            const normalizedColumns = this.normalizeColumns(deselected);\n            normalizedColumns.sort(sort);\n            columns = this.denormalizeColumns(normalizedColumns, deselected);\n        } else {\n            const grouped = deselected.filter(column => isColumnPickerGroupItem(column) && column.group !== undefined);\n            columns = [\n                ...grouped,\n                ...deselected.filter(column => grouped.indexOf(column) === -1)\n            ];\n        }\n\n        return columns;\n    }\n\n    createTreeData(columns: (string | ColumnPickerGroupItem)[]): ColumnPickerTreeNode[] {\n        const treeData: ColumnPickerTreeNode[] = [];\n        const groupedColumns = columns.filter(column => isColumnPickerGroupItem(column) && column.group !== undefined);\n\n        columns.forEach((column: (string | ColumnPickerGroupItem)) => {\n            if (groupedColumns.indexOf(column) !== -1 && isColumnPickerGroupItem(column)) {\n                const groupNode = this.createOrFindGroupNode(column, treeData);\n                groupNode.children.push(column.name);\n                this.createColumnTreeNode(column, treeData, 1);\n\n            } else if (!isColumnPickerGroupItem(column)) {\n                this.createColumnTreeNode(column, treeData, 0);\n            }\n        });\n\n        return treeData;\n    }\n\n    private normalizeColumns(columns: (string | ColumnPickerGroupItem)[]): ColumnPickerGroupItem[] {\n        return columns.map(column => ({\n            name: isColumnPickerGroupItem(column) ? column.name : column,\n            group: isColumnPickerGroupItem(column) ? column.group : undefined\n        }));\n    }\n\n    private denormalizeColumns(normalizedColumns: ColumnPickerGroupItem[], originalColumns: (string | ColumnPickerGroupItem)[]): (string | ColumnPickerGroupItem)[] {\n        return normalizedColumns.map(normalized => {\n            const original = originalColumns.find(originalColumn => {\n                if (isColumnPickerGroupItem(originalColumn)) {\n                    return originalColumn.group === normalized.group && originalColumn.name === normalized.name;\n                }\n                return false;\n            });\n            // Anything not found in the original array must have been normalized from a string\n            return original ? original : normalized.name;\n          });\n    }\n\n    private createOrFindGroupNode(column: ColumnPickerGroupItem, treeData: ColumnPickerTreeNode[]): ColumnPickerTreeNode {\n        let groupNode = treeData.find(node => node.name === column.group && node.expandable);\n        if (!groupNode) {\n            groupNode = this.createGroupTreeNode(column, treeData);\n        }\n\n        return groupNode;\n    }\n\n    private createGroupTreeNode(column: ColumnPickerGroupItem, treeData: ColumnPickerTreeNode[]): ColumnPickerTreeNode {\n        treeData.push({\n            name: column.group,\n            level: 0,\n            expandable: true,\n            isExpanded: this.isGroupTreeNodeExpanded(column.group),\n            column,\n            children: []\n        });\n\n        return treeData[treeData.length - 1];\n    }\n\n    private createColumnTreeNode(column: (string | ColumnPickerGroupItem), treeData: ColumnPickerTreeNode[], level: number): void {\n        treeData.push({\n            name: isColumnPickerGroupItem(column) ? column.name : column,\n            level,\n            expandable: false,\n            column\n        });\n    }\n\n    private isGroupTreeNodeExpanded(groupName: string): boolean {\n        const groupTreeNode = this.groups.find(group => group.name === groupName);\n        return groupTreeNode ? groupTreeNode.expanded : false;\n    }\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ArrayDataSource } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, QueryList, SimpleChanges, TemplateRef, ViewChildren } from '@angular/core';\nimport { ColumnPickerService } from './column-picker.service';\nimport { ColumnPickerGroupItem, isColumnPickerGroupItem } from './interfaces/column-picker-group-item.interface';\nimport { ColumnPickerTreeNode } from './interfaces/column-picker-tree-node.interface';\n\nlet uniqueId = 0;\n\n@Component({\n    selector: 'ux-column-picker',\n    templateUrl: './column-picker.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [ColumnPickerService]\n})\nexport class ColumnPickerComponent implements OnChanges {\n    private readonly _columnPicker = inject(ColumnPickerService);\n\n    /** Access the LiveAnnounce to provide accessibility on reordering */\n    private readonly _liveAnnouncer = inject(LiveAnnouncer);\n\n    /** We are using OnPush change detection so we must manually trigger CD */\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    /** Sets the id of the column picker. */\n    @Input() id: string = `ux-number-picker-${uniqueId++}`;\n\n    /** Define a list of all selected columns. */\n    @Input() selected: ReadonlyArray<string | ColumnPickerGroupItem> = [];\n\n    /** Define a list of columns that are always selected. The columns cannot be moved or reordered. */\n    @Input() locked: ReadonlyArray<string> = [];\n\n    /** Define a list of columns that are not selected or locked. All columns must have unique names, including columns in different groups. */\n    @Input() deselected: ReadonlyArray<string | ColumnPickerGroupItem> = [];\n\n    /** Define a custom selected title template. */\n    @Input() selectedTitleTemplate: TemplateRef<void>;\n\n    /** Define a custom deselected title template. */\n    @Input() deselectedTitleTemplate: TemplateRef<void>;\n\n    /** Define a custom template for deselected items. */\n    @Input() deselectedTemplate: TemplateRef<string>;\n\n    /** Define a custom template for selected items. */\n    @Input() selectedTemplate: TemplateRef<string>;\n\n    /** Define a custom template for locked items. */\n    @Input() lockedTemplate: TemplateRef<string>;\n\n    /** Define a custom template for the action buttons columns. */\n    @Input() actionsTemplate: TemplateRef<ColumnPickerActionsContext>;\n\n    /** Define a function to get the aria label of reorderable items in the selected column. */\n    @Input() selectedAriaLabel: (column: string | ColumnPickerGroupItem, index: number) => string = this.getDefaultSelectedAriaLabel;\n\n    /** Define a function to get the aria label of a group in the deselected list. */\n    @Input() deselectedGroupAriaLabel: (column: string | ColumnPickerGroupItem, isExpanded: boolean) => string = this.getDefaultDeselectedGroupAriaLabel;\n\n    /** Define a function that returns a column move announcement. */\n    @Input() columnMovedAnnouncement: (column: string | ColumnPickerGroupItem, delta: number) => string = this.getColumnMovedAnnouncement;\n\n    /** Define settings for the grouped deselected items. */\n    @Input() set groups(groups: ColumnPickerGroup[]) {\n        this._columnPicker.groups = groups;\n    }\n\n    get groups(): ColumnPickerGroup[] {\n        return this._columnPicker.groups;\n    }\n\n    /** Define a comparator function used for sorting the deselected columns. */\n    @Input() sort: (a: ColumnPickerGroupItem, b: ColumnPickerGroupItem) => number;\n\n    /** Define the aria label for the add column button */\n    @Input() addColumnAriaLabel: string = 'Add selected item';\n\n    /** Define the aria label for the remove column button */\n    @Input() removeColumnAriaLabel: string = 'Remove selected item';\n\n    /** Define the aria label for the add all column button */\n    @Input() addAllColumnsAriaLabel: string = 'Add all items';\n\n    /** Define the aria label for the remove all column button */\n    @Input() removeAllColumnsAriaLabel: string = 'Remove all items';\n\n    /** Emits when the selected items change or the order of the selected items change. */\n    @Output() selectedChange = new EventEmitter<ReadonlyArray<string | ColumnPickerGroupItem>>();\n\n    /** Emits when the deselected items change. */\n    @Output() deselectedChange = new EventEmitter<ReadonlyArray<string | ColumnPickerGroupItem>>();\n\n    /** The Nested tree control used for the deselect tree */\n    _treeControl: FlatTreeControl<ColumnPickerTreeNode> = new FlatTreeControl<ColumnPickerTreeNode>(\n        node => node.level,\n        node => node.expandable\n    );\n\n    /** A tree-friendly representation of the deselected data */\n    _treeData: ColumnPickerTreeNode[];\n\n    /** Data source observable bound to the tree control */\n    _treeDataSource: ArrayDataSource<ColumnPickerTreeNode>;\n\n    /** The remaining selectable columns in the deselected list */\n    _availableDeselectedColumns: number = 0;\n\n    /** An array of items that are currently selected in the left column. */\n    _deselectedSelection: ReadonlyArray<string | ColumnPickerGroupItem> = [];\n\n    /** An array of items that are currently selected in the right column. */\n    _selectedSelection: ReadonlyArray<string | ColumnPickerGroupItem> = [];\n\n    /** Cache selection during reordering */\n    private _selection: ReadonlyArray<string | ColumnPickerGroupItem> = [];\n\n    /** Shallow copy of selection for reordering directive */\n    _storedSelection: Array<string | ColumnPickerGroupItem> = [];\n\n    /** Get the elements for the selected items */\n    @ViewChildren('selectedColumn') selectedElements: QueryList<ElementRef>;\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // recreate tree when deselected changes\n        if (changes.deselected && changes.deselected.currentValue !== changes.deselected.previousValue) {\n            this.rebuildDeselectTree();\n        }\n    }\n\n    /** Parse data into suitable format for the FlatTreeComponent to understand and initialize deselect tree */\n    private rebuildDeselectTree(): void {\n        const columns = this._columnPicker.getDeselectedColumnsInPresentationOrder(this.deselected.slice(), this.sort);\n\n        const treeData = this._columnPicker.createTreeData(columns);\n        this._treeData = treeData;\n        this._treeDataSource = new ArrayDataSource(treeData);\n\n        // set initial count for deselected values\n        this.updateAvailableDeselectedColumns();\n    }\n\n    /** A function that can be called to add columns. If no columns are passed to the function, the items that are selected in the left column will be added. */\n    addColumns(columns: ReadonlyArray<string | ColumnPickerGroupItem> = this._deselectedSelection): void {\n        const deselectedSelection = columns.filter(column => this.selected.indexOf(column) === -1);\n\n        // add each item to the selected columns list\n        this.selected = [...this.selected, ...deselectedSelection];\n\n        this.deselected = this.deselected.filter(column => deselectedSelection.indexOf(column) === -1);\n\n        // emit the selection changes\n        this.selectedChange.emit(this.selected);\n        this.deselectedChange.emit(this.deselected);\n\n        // store the available deselected items\n        this.updateAvailableDeselectedColumns();\n\n        // clear the current selection\n        this._deselectedSelection = [];\n    }\n\n    /** A function that can be called to remove columns. If no columns are passed to the function, the items that are selected in the right column will be removed. */\n    removeColumns(columns: ReadonlyArray<string | ColumnPickerGroupItem> = this._selectedSelection): void {\n\n        // remove each item from the selected columns list\n        this.selected = this.selected.filter(column => columns.indexOf(column) === -1);\n\n        this.deselected = [\n            ...this.deselected,\n            ...columns\n        ];\n\n        // emit the selection changes\n        this.selectedChange.emit(this.selected);\n        this.deselectedChange.emit(this.deselected);\n\n        // store the available deselected items\n        this.updateAvailableDeselectedColumns();\n\n        // clear the current selection\n        this._selectedSelection = [];\n    }\n\n    /** A function that can be called to add all columns. */\n    addAllColumns(): void {\n        this.addColumns(this.deselected);\n    }\n\n    /** A function that can be called to remove all columns. */\n    removeAllColumns(): void {\n        this.removeColumns(this.selected);\n    }\n\n    /** Ensure we don't select while dragging */\n    storeSelection(): void {\n        this._selection = [...this._selectedSelection];\n        this._storedSelection = [...this.selected];\n    }\n\n    /** Restore the selection once dragging ends */\n    restoreSelection(): void {\n        this._selectedSelection = [...this._selection];\n    }\n\n    /** Update when reordering has occurred */\n    onReorder(): void {\n        this.selectedChange.emit(this.selected);\n    }\n\n    /** Get an aria label for deselected list groups */\n    private getDefaultDeselectedGroupAriaLabel(column: string): string {\n        return `Toggle ${column}`;\n    }\n\n    /** Get an aria label for reorderable items */\n    private getDefaultSelectedAriaLabel(column: string): string {\n        return `${column}. Press Alt up and alt down to reorder.`;\n    }\n\n    /** Get the announcement to read when a selected column is moved */\n    getColumnMovedAnnouncement(column: string, delta: number): string {\n        return `${column} column moved ${delta > 0 ? 'down' : 'up'}`;\n    }\n\n    /** Perform a reorder with the keyboard */\n    move(column: string | ColumnPickerGroupItem, delta: number): void {\n        // perform the move\n        const index = this.selected.indexOf(column);\n        this.swap(index, index + delta);\n\n        // Announce the move if the order has changed\n        if (this.selected.indexOf(column) !== index) {\n            this._liveAnnouncer.announce(`Column moved ${delta > 0 ? 'down' : 'up'}`);\n        }\n\n        // emit the changes\n        this.selectedChange.emit(this.selected);\n\n        // perform change detection\n        this._changeDetectorRef.detectChanges();\n\n        // after the UI has updated focus the element again (ngFor creates new DOM elements)\n        setTimeout(() => {\n            const columnIndex = this.selected.indexOf(column);\n            const target = this.selectedElements.toArray()[columnIndex];\n\n            if (target) {\n                // focus the element\n                target.nativeElement.focus();\n            }\n        });\n    }\n\n    /** Provide a trackBy function for the reorderable options */\n    selectedTrackBy(index: number, column: string | ColumnPickerGroupItem): string {\n        return index + getColumnPickerGroupItemName(column);\n    }\n\n    /** Swap two elements in the selected columns array */\n    private swap(source: number, target: number): void {\n\n        // perform boundary checks\n        if (target < 0 || target > this.selected.length - 1) {\n            return;\n        }\n\n        // create a copy of the array to manipulate\n        const selected = [...this.selected];\n\n        // swap the array elements\n        [selected[target], selected[source]] = [selected[source], selected[target]];\n\n        // update the original array\n        this.selected = [...selected];\n    }\n\n    /** Get the column name based on type */\n    _getColumnName(item: string | ColumnPickerGroupItem): string {\n        return isColumnPickerGroupItem(item) ? item.name : item;\n    }\n\n    /** Check if tree group has visible children */\n    _nodeHasChildren(_: number, node: ColumnPickerTreeNode): boolean {\n        return node.expandable;\n    }\n\n    _nodeHasAvailableChildren(node: ColumnPickerTreeNode): boolean {\n        return node.children.filter(column => this.selected.indexOf(column) === -1).length > 0;\n    }\n\n    /** Check to see if current item should display in deselect tree */\n    _shouldRenderNode(node: ColumnPickerTreeNode): boolean {\n        const parent = this.getTreeParent(node);\n\n        return (!parent || parent.isExpanded) && !this.selected.find(column => this._getColumnName(column) === node.name);\n    }\n\n    /** Work backwards from the index of the current node to find the parent node  */\n    private getTreeParent(node: ColumnPickerTreeNode): ColumnPickerTreeNode {\n        const nodeIndex = this._treeData.indexOf(node);\n\n        if (node.level > 0) {\n            for (let i: number = nodeIndex - 1; i >= 0; i--) {\n                if (this._treeData[i].level === 0) {\n                    return this._treeData[i];\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /** Store the current count of nodes that are available for selection from the deselected list */\n    private updateAvailableDeselectedColumns(): void {\n        this._availableDeselectedColumns = this.deselected.length;\n    }\n\n    /** Update the order of the items when reordering has changed */\n    onReorderChange(model: string[]): void {\n        this.selected = [...model];\n        this.onReorder();\n    }\n\n    /** Get the action context, ensuring that functions have a pre-bound context */\n    _getActionContext(): ColumnPickerActionsContext {\n        return {\n            addSelection: this._deselectedSelection,\n            removeSelection: this._selectedSelection,\n            addColumns: this.addColumns.bind(this),\n            removeColumns: this.removeColumns.bind(this),\n            addAllColumns: this.addAllColumns.bind(this),\n            removeAllColumns: this.removeAllColumns.bind(this)\n        };\n    }\n\n    /** Change the expanded state of a node */\n    _setNodeExpanded(node: ColumnPickerTreeNode, isExpanded: boolean): void {\n        node.isExpanded = isExpanded;\n\n        // the first change detection cycle will hide the elements but we need to trigger\n        // a second change detection cycle on the next tick to ensure the ContentChildren\n        // QueryList gets updated in the uxTabbableList directive\n        requestAnimationFrame(() => this._changeDetectorRef.detectChanges());\n    }\n\n    protected _isNodeSelected(name): boolean {\n        const filtered = this._deselectedSelection.filter(selection => (\n            isColumnPickerGroupItem(selection) ? selection.name === name : selection === name\n        ));\n        return filtered.length > 0;\n    }\n}\n\nfunction getColumnPickerGroupItemName(column: string | ColumnPickerGroupItem) {\n    return isColumnPickerGroupItem(column) ? column.name : column;\n}\n\n/** Define a context for the column actions template */\nexport interface ColumnPickerActionsContext {\n    /** An array of items that are currently selected in the left column. */\n    addSelection: ReadonlyArray<string | ColumnPickerGroupItem>;\n    /** An array of items that are currently selected in the right column. */\n    removeSelection: ReadonlyArray<string | ColumnPickerGroupItem>;\n    /** A function that can be called to add columns. If no columns are passed to the function, the items that are selected in the left column will be added. */\n    addColumns(columns?: ReadonlyArray<string | ColumnPickerGroupItem>): void;\n    /** A function that can be called to remove columns. If no columns are passed to the function, the items that are selected in the right column will be removed. */\n    removeColumns(columns?: ReadonlyArray<string | ColumnPickerGroupItem>): void;\n    /** A function that can be called to add all columns. */\n    addAllColumns(): void;\n    /** A function that can be called to remove all columns. */\n    removeAllColumns(): void;\n}\n\n/** An interface representing settings of groups defined in ColumnPickerGroupItem objects */\nexport interface ColumnPickerGroup {\n    /**  The name of the group this setting object is related to. */\n    name: string;\n    /**  Defines if this group will be expanded on load. This is an optional property. */\n    expanded?: boolean;\n}\n","<div class=\"column-picker-column\">\n\n  <div class=\"column-picker-stats\" [id]=\"id + '-stats-left'\">\n\n    @if (!deselectedTitleTemplate) {\n      {{ _deselectedSelection.length }} of {{ _availableDeselectedColumns }} selected\n    }\n\n    @if (deselectedTitleTemplate) {\n      <ng-container\n        [ngTemplateOutlet]=\"deselectedTitleTemplate\">\n      </ng-container>\n    }\n  </div>\n\n  <cdk-tree class=\"column-picker-list\"\n    [dataSource]=\"_treeDataSource\"\n    [treeControl]=\"_treeControl\"\n    [(uxSelection)]=\"_deselectedSelection\"\n    [attr.aria-labelledby]=\"id + '-stats-left'\"\n    tabindex=\"-1\"\n    uxTabbableList>\n\n    <!-- Create item for not expandable node -->\n    <cdk-tree-node *cdkTreeNodeDef=\"let node\"\n      [attr.aria-hidden]=\"selected && selected.indexOf(node.name) > -1\"\n      [attr.aria-selected]=\"_isNodeSelected(node.name)\">\n      @if (_shouldRenderNode(node)) {\n        <div uxTabbableListItem\n          [uxSelectionItem]=\"node.column\"\n          addAriaAttributes=\"false\"\n          class=\"column-picker-list-item\"\n          [ngClass]=\"'column-picker-tree-node-level-' + node.level\">\n          @if (!deselectedTemplate) {\n            {{ node.name }}\n          }\n          @if (deselectedTemplate) {\n            <ng-container\n              [ngTemplateOutlet]=\"deselectedTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: node.name }\">\n            </ng-container>\n          }\n        </div>\n      }\n\n    </cdk-tree-node>\n\n    <!-- Create item for expandable node -->\n    <cdk-tree-node *cdkTreeNodeDef=\"let node; when: _nodeHasChildren\"\n      [attr.aria-expanded]=\"node.isExpanded\">\n\n      @if (_nodeHasAvailableChildren(node)) {\n        <div\n          class=\"column-picker-tree-group-node\">\n          <button uxTabbableListItem\n            (click)=\"_setNodeExpanded(node, !node.isExpanded)\"\n            (keydown.arrowright)=\"_setNodeExpanded(node, true)\"\n            (keydown.arrowleft)=\"_setNodeExpanded(node, false)\"\n            [style.visibility]=\"node.expandable ? 'visible' : 'hidden'\"\n            [attr.aria-label]=\"deselectedGroupAriaLabel(node.name, node.isExpanded)\"\n            class=\"column-picker-group-toggle-btn\">\n            <ux-icon [name]=\"node.isExpanded ? 'chevron-down' : 'chevron-right'\"></ux-icon>\n            @if (!deselectedTemplate) {\n              {{ node.name }}\n            }\n            @if (deselectedTemplate) {\n              <ng-container\n                [ngTemplateOutlet]=\"deselectedTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: node.name }\">\n              </ng-container>\n            }\n          </button>\n        </div>\n      }\n    </cdk-tree-node>\n  </cdk-tree>\n</div>\n\n<div class=\"column-picker-actions-column\">\n  <!-- Show the default action buttons -->\n  @if (!actionsTemplate) {\n    <button class=\"btn button-primary btn-block\"\n      [disabled]=\"_deselectedSelection.length === 0\"\n      [attr.aria-label]=\"addColumnAriaLabel\"\n      (click)=\"addColumns()\">\n      <ux-icon name=\"chevron-right\"></ux-icon>\n    </button>\n    <button class=\"btn button-primary btn-block m-b-md\"\n      [disabled]=\"_selectedSelection.length === 0\"\n      [attr.aria-label]=\"removeColumnAriaLabel\"\n      (click)=\"removeColumns()\">\n      <ux-icon name=\"chevron-left\"></ux-icon>\n    </button>\n    <button class=\"btn button-secondary btn-block\"\n      [disabled]=\"_availableDeselectedColumns === 0\"\n      [attr.aria-label]=\"addAllColumnsAriaLabel\"\n      (click)=\"addAllColumns()\">\n      <ux-icon name=\"chevron-right-double\"></ux-icon>\n    </button>\n    <button class=\"btn button-secondary btn-block\"\n      [disabled]=\"selected.length === 0\"\n      [attr.aria-label]=\"removeAllColumnsAriaLabel\"\n      (click)=\"removeAllColumns()\">\n      <ux-icon name=\"chevron-left-double\"></ux-icon>\n    </button>\n  }\n\n  <!-- Allow custom actions template -->\n  @if (actionsTemplate) {\n    <ng-container\n      [ngTemplateOutlet]=\"actionsTemplate\"\n      [ngTemplateOutletContext]=\"_getActionContext()\">\n    </ng-container>\n  }\n\n</div>\n\n<div class=\"column-picker-column\">\n  <div class=\"column-picker-stats\" [id]=\"id + '-stats-right'\">\n\n    @if (!selectedTitleTemplate) {\n      {{ selected.length + locked.length }} columns added\n    }\n\n    @if (selectedTitleTemplate) {\n      <ng-container\n        [ngTemplateOutlet]=\"selectedTitleTemplate\">\n      </ng-container>\n    }\n  </div>\n\n  <div class=\"column-picker-list\" role=\"listbox\" [attr.aria-labelledby]=\"id + '-stats-right'\">\n\n    @for (column of locked; track column) {\n      <div\n        class=\"column-picker-list-item column-picker-list-item-locked\">\n        @if (!lockedTemplate) {\n          {{ column }} <ux-icon name=\"lock\"></ux-icon>\n        }\n        @if (lockedTemplate) {\n          <ng-container\n            [ngTemplateOutlet]=\"lockedTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: column }\">\n          </ng-container>\n        }\n      </div>\n    }\n\n    <div [(uxSelection)]=\"_selectedSelection\"\n      uxReorderable\n      [reorderableModel]=\"_storedSelection\"\n      (reorderableModelChange)=\"onReorderChange($event)\"\n      (reorderStart)=\"storeSelection()\"\n      (reorderEnd)=\"restoreSelection()\">\n\n      @for (column of selected; track selectedTrackBy(index, column); let index = $index) {\n        <div\n          #selectedColumn\n          uxFocusIndicator\n          [programmaticFocusIndicator]=\"true\"\n          class=\"column-picker-list-item column-picker-list-item-selected\"\n          [uxSelectionItem]=\"column\"\n          [uxReorderableModel]=\"column\"\n          [attr.aria-label]=\"selectedAriaLabel(column, selected.indexOf(column))\"\n          (keydown.alt.arrowup)=\"move(column, -1)\"\n          (keydown.alt.arrowdown)=\"move(column, 1)\"\n          role=\"option\">\n          @if (!selectedTemplate) {\n            <ux-icon uxReorderableHandle name=\"drag\" class=\"drag-handle-icon\"></ux-icon>\n            {{ _getColumnName(column) }}\n          }\n          @if (selectedTemplate) {\n            <ng-container\n              [ngTemplateOutlet]=\"selectedTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: column }\">\n            </ng-container>\n          }\n        </div>\n      }\n    </div>\n\n  </div>\n</div>\n","import { Injectable, OnDestroy, QueryList } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { ResizableTableColumnComponent } from './resizable-table-column.component';\n\n@Injectable()\nexport abstract class BaseResizableTableService implements OnDestroy {\n\n    abstract type: ResizableTableType;\n\n    /** Emit an event whenever a column is resized */\n    onResize$ = new Subject<void>();\n\n    /** Store the current width of the table */\n    tableWidth: number = 0;\n\n    /** Determine if we are currently resizing */\n    isResizing$ = new BehaviorSubject<boolean>(false);\n\n    /** Indicate when the columns are ready */\n    isInitialised$ = new BehaviorSubject<boolean>(false);\n\n    /** Store the percentage widths of each column */\n    columns: ReadonlyArray<number> = [];\n\n    abstract resizeColumn(index: number, delta: number, isDragging?: boolean): void;\n\n    abstract setColumns(columns: QueryList<ResizableTableColumnComponent>): void;\n\n    abstract setUniformWidths(): void;\n\n    abstract getColumnDisabled(index: number): boolean;\n\n    /** Cleanup when service is disposed */\n    ngOnDestroy(): void {\n        this.onResize$.complete();\n    }\n\n    /** Update the resizing state */\n    setResizing(isResizing: boolean): void {\n        this.isResizing$.next(isResizing);\n    }\n\n    /** Get the width of a column in a specific unit */\n    getColumnWidth(index: number, unit: ColumnUnit, columns: ReadonlyArray<number> = this.columns): number {\n\n        switch (unit) {\n\n            case ColumnUnit.Percentage:\n                return columns[index];\n\n            case ColumnUnit.Pixel:\n                return (this.tableWidth / 100) * columns[index];\n        }\n\n    }\n\n}\n\nexport enum ColumnUnit {\n    Pixel,\n    Percentage\n}\n\nexport enum ResizableTableType {\n    Standard,\n    Expand\n}\n","import { InjectionToken } from '@angular/core';\nimport { BaseResizableTableService } from './resizable-table-base.service';\n\nexport const RESIZABLE_TABLE_SERVICE_TOKEN = new InjectionToken<BaseResizableTableService>('RESIZABLE_TABLE_SERVICE_TOKEN');\n","import { Injectable, QueryList } from '@angular/core';\nimport { ResizableTableColumnComponent } from '../resizable-table-column.component';\nimport { BaseResizableTableService, ResizableTableType } from '../resizable-table-base.service';\n\n@Injectable()\nexport class ResizableTableService extends BaseResizableTableService {\n\n    /** Define the type of resizing we should use */\n    type: ResizableTableType = ResizableTableType.Standard;\n\n    /** Store the QueryList of columns */\n    private _columns: QueryList<ResizableTableColumnComponent>;\n\n    /** Store the size of each column */\n    setColumns(columns: QueryList<ResizableTableColumnComponent>): void {\n\n        // store the current columns\n        this._columns = columns;\n\n        // store the sizes\n        this.columns = columns.map(column => (column.getNaturalWidth() / this.tableWidth) * 100);\n\n        // check if there is any overflow\n        this.columns = this.ensureNoOverflow(this.columns);\n\n        // ensure all the columns fit\n        this._columns.forEach((column, idx) => {\n            if (!column.disabled) {\n                this.resizeColumn(idx, 0, false);\n            }\n        });\n\n        // indicate we are now initialised\n        if (this.isInitialised$.value === false) {\n            this.isInitialised$.next(true);\n        }\n    }\n\n    /** Set all resizable columns to the same width */\n    setUniformWidths(): void {\n\n        // set any disabled columns to their specified width\n        this.columns = this._columns.map(column => column.disabled ? (column.getNaturalWidth() / this.tableWidth) * 100 : 0);\n\n        // check to see if we've reached 100% of the table width\n        const totalWidth = this.columns.reduce((partial, columnWidth) => partial + columnWidth);\n\n        if (totalWidth > 100) {\n            // remove overflow\n            this.columns = this.ensureNoOverflow(this.columns);\n        } else {\n            // get the list of resizable columns\n            const resizableColumns = this._columns.toArray().filter(column => !column.disabled);\n\n            // work out what we need to add to each column to make up the full width\n            const newWidth = (100 - totalWidth) / resizableColumns.length;\n\n            // set the non-disabled columns to the new width\n            this.columns = this._columns.map((column, idx) => column.disabled ? this.columns[idx] : newWidth);\n        }\n\n        // do the resizing\n        this._columns.forEach((column, idx) => {\n            if (!column.disabled) {\n                this.resizeColumn(idx, 0, false);\n            }\n        });\n\n    }\n\n    ensureNoOverflow(columns: ReadonlyArray<number>): ReadonlyArray<number> {\n\n        // get the total width\n        const total = columns.reduce((width, column) => width + column);\n\n        // if we have no overflow then we don't need to do anything\n        if (total <= 100) {\n            return columns;\n        }\n\n        // if there is overflow identify which columns can be resized\n        const variableColumns = this._columns.filter(column => !column.disabled && this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns) > column.minWidth);\n\n        // if there are no columns that can be resized then stop here\n        if (variableColumns.length === 0) {\n            return columns;\n        }\n\n        // determine the total width of the variable columns\n        const totalWidth = this._columns.reduce((width, column) => width + this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns), 0);\n\n        // determine to the width of all the variable columns\n        const variableColumnsWidth = variableColumns.reduce((width, column) => width + this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns), 0);\n\n        // determine how much the columns are currently too large (ignoring fixed columns)\n        const targetWidth = this.tableWidth - (totalWidth - variableColumnsWidth);\n\n        // determine how much we need to reduce a column by\n        const difference = variableColumnsWidth - targetWidth;\n\n        // find the column with the largest size\n        const target = variableColumns.reduce((widest, column) => {\n            const columnWidth = this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns);\n            const widestWidth = this.getColumnWidth(widest.getCellIndex(), ColumnUnit.Pixel, columns);\n\n            return columnWidth > widestWidth ? column : widest;\n        });\n\n        // perform the resize\n        columns = this.setColumnWidth(target.getCellIndex(), this.getColumnWidth(target.getCellIndex(), ColumnUnit.Pixel, columns) - difference, ColumnUnit.Pixel, columns);\n\n        // check if we are still over the limit (allow some variance for javascript double precision)\n        if (columns.reduce((width, column) => width + column) > 100.01) {\n            return this.ensureNoOverflow(columns);\n        }\n\n        return columns;\n    }\n\n    /** Allow setting the column size in any unit */\n    setColumnWidth(index: number, value: number, unit: ColumnUnit, columns: ReadonlyArray<number> = this.columns): ReadonlyArray<number> {\n\n        // create a new array so we keep the instance array immutable\n        const sizes = [...columns];\n\n        switch (unit) {\n\n            case ColumnUnit.Percentage:\n                sizes[index] = value;\n                break;\n\n            case ColumnUnit.Pixel:\n                sizes[index] = (value / this.tableWidth) * 100;\n                break;\n        }\n\n        // update the instance variable\n        return sizes;\n    }\n\n    /** Resize a column by a specific pixel amount */\n    resizeColumn(index: number, delta: number, isDragging: boolean = true): void {\n\n        // get the sibling column that will also be resized\n        const sibling = this.getSiblingColumn(index);\n\n        // if there is no sibling that can be resized then stop here\n        if (!sibling) {\n            return;\n        }\n\n        // create a new array for the sizes\n        let columns = [...this.columns] as number[];\n\n        // resize the column to the desired size\n        columns = this.setColumnWidth(index, Math.round(this.getColumnWidth(index, ColumnUnit.Pixel) + delta), ColumnUnit.Pixel, columns) as number[];\n        columns = this.setColumnWidth(sibling, Math.round(this.getColumnWidth(sibling, ColumnUnit.Pixel) - delta), ColumnUnit.Pixel, columns) as number[];\n\n        // if the move is not possible then stop here\n        if (!this.isWidthValid(index, this.getColumnWidth(index, ColumnUnit.Pixel, columns)) || !this.isWidthValid(sibling, this.getColumnWidth(sibling, ColumnUnit.Pixel, columns))) {\n            return;\n        }\n\n        // check that we add up to exactly 100%\n        const total = columns.reduce((count, column) => column + count, 0);\n\n        // if the columns to not add to 100 ensure we make them\n        if (total !== 100) {\n\n            // get the column with a variable width\n            const target = this.getVariableColumn(100 - total);\n\n            if (target && !isDragging) {\n                columns[this._columns.toArray().indexOf(target)] += (100 - total);\n            } else {\n                columns[index] += (100 - total);\n            }\n        }\n\n        // store the new sizes\n        this.columns = columns;\n\n        // emit the resize event for each column\n        this.onResize$.next();\n    }\n\n    getVariableColumn(delta: number): ResizableTableColumnComponent | null {\n\n        // get all variable width columns that are not disabled\n        const variableColumns = this._columns.filter(column => !column.isFixedWidth && !column.disabled);\n\n        // find one that is greater than its min width by enough\n        return variableColumns.reverse().find(column => this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel) >= column.minWidth + delta);\n    }\n\n    getColumn(index: number): ResizableTableColumnComponent | null {\n        return this._columns ? this._columns.toArray()[index] : null;\n    }\n\n    getColumnDisabled(index: number): boolean {\n        return this.getColumn(index) ? this.getColumn(index).disabled : false;\n    }\n\n    /** Determine whether a column is above or below its minimum width */\n    private isWidthValid(index: number, width: number): boolean {\n\n        // get the column at a given position\n        const column = this.getColumnInstance(index);\n\n        // determine if the specified width is greater than the min width\n        return column && width >= column.minWidth;\n    }\n\n    /** Get the next column in the sequence of columns */\n    private getSiblingColumn(index: number): number | null {\n\n        // find the first sibling that is not disabled\n        for (let idx = index + 1; idx < this.columns.length; idx++) {\n\n            const sibling = this.getColumnInstance(idx);\n\n            if (!sibling || !sibling.disabled) {\n                return idx;\n            }\n        }\n\n        return null;\n    }\n\n    /** Get the column class from our query list */\n    private getColumnInstance(index: number): ResizableTableColumnComponent | null {\n        return this._columns ? this._columns.toArray()[index] : null;\n    }\n\n}\n\nexport enum ColumnUnit {\n    Pixel,\n    Percentage\n}","import { ChangeDetectionStrategy, Component, ElementRef, inject, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { combineLatest, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizableTableType } from './resizable-table-base.service';\nimport { RESIZABLE_TABLE_SERVICE_TOKEN } from './resizable-table-service.token';\nimport { ColumnUnit } from './table-column-resize-standard/resizable-table.service';\n\n@Component({\n    selector: '[uxResizableTableCell]',\n    templateUrl: './resizable-table-cell.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ResizableTableCellComponent implements OnInit, OnDestroy {\n    private readonly _table = inject(RESIZABLE_TABLE_SERVICE_TOKEN);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    /** Unsubscribe from all subscriptions on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Min width of the column*/\n    private _minWidth: number;\n\n    ngOnInit(): void {\n        this._minWidth = parseFloat(getComputedStyle(this._elementRef.nativeElement).minWidth);\n\n        // if the table has already been initialised then we should set the initial size\n        if (this._table.isInitialised$.value) {\n            this.setColumnWidth();\n            this.setColumnFlex();\n        }\n\n        // update the sizes when columns are resized\n        combineLatest([this._table.onResize$, this._table.isResizing$]).pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            this.setColumnWidth();\n            this.setColumnFlex();\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Get the column index this cell is part of */\n    private getCellIndex(): number {\n        return (this._elementRef.nativeElement as HTMLTableCellElement).cellIndex;\n    }\n\n    /** Set the width of the column */\n    private setColumnWidth(): void {\n        const width = this._table.isResizing$.value || this._table.getColumnDisabled(this.getCellIndex()) ?\n            `${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel)}px` :\n            `${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Percentage)}%`;\n\n        if (this._table.type === ResizableTableType.Expand) {\n            const minWidth = Math.max(this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel), this._minWidth);\n            this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', `${minWidth}px`);\n        }\n\n        this._renderer.setStyle(this._elementRef.nativeElement, 'width', width);\n    }\n\n    /** Set the flex value of the column */\n    private setColumnFlex(): void {\n        // if we are resizing then always return 'none' to allow free movement\n        if (this._table.isResizing$.value || this._table.getColumnDisabled(this.getCellIndex())) {\n            this._renderer.setStyle(this._elementRef.nativeElement, 'flex', 'none');\n            return;\n        }\n\n        const flex = this._table.isInitialised$.value ? `0 1 ${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Percentage)}%` : '';\n\n        this._renderer.setStyle(this._elementRef.nativeElement, 'flex', flex);\n    }\n}\n","<div class=\"ux-resizable-table-cell-content\">\n    <ng-content></ng-content>\n</div>\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, inject, Input, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ResizableTableType } from './resizable-table-base.service';\nimport { RESIZABLE_TABLE_SERVICE_TOKEN } from './resizable-table-service.token';\nimport { ColumnUnit } from './table-column-resize-standard/resizable-table.service';\n\n@Component({\n    selector: '[uxResizableTableColumn]',\n    templateUrl: './resizable-table-column.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'ux-resizable-table-column',\n        '[class.ux-resizable-table-hide-handle]': '!handleVisible'\n    }\n})\nexport class ResizableTableColumnComponent implements AfterViewInit, OnDestroy {\n    private readonly _table = inject(RESIZABLE_TABLE_SERVICE_TOKEN);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    /** Show/Hide column resizable handle */\n    private _handleVisible: boolean = true;\n\n    /** Disabled the column resizing */\n    @Input()\n    @HostBinding('class.ux-resizable-table-column-disabled')\n    disabled: boolean = false;\n\n    @Input()\n    get handleVisible(): boolean {\n        return this._handleVisible;\n    }\n\n    set handleVisible(value: boolean) {\n        this._handleVisible = coerceBooleanProperty(value);\n    }\n\n    /** Define the width of a column */\n    @Input() set width(width: number) {\n\n        // there may be cases where columns are created with an `*ngFor` and a width\n        // may be specified on *some* columns and not others. This this setter will\n        // still be called whenever the value is empty and this will mark this column\n        // as having a fixed width, even though it doesn't. So we should only proceed\n        // whenever there is an actual numeric value passed in.\n        if (width === null || width === undefined) {\n            return;\n        }\n\n        // ensure width is a valid number\n        this._width = coerceNumberProperty(width);\n\n        // note that this column has a fixed width\n        this.isFixedWidth = true;\n\n        // if we have not initialised then set the element width\n        if (!this._table.isInitialised$.value) {\n\n            this._renderer.setStyle(this._elementRef.nativeElement, 'width', `${this._width}px`);\n\n        } else {\n\n            // if it is initialised then resize the column\n            const currentWidth = this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel);\n\n            // resize the column by the difference in size\n            if (isNaN(currentWidth)) {\n                this._table.resizeColumn(this.getCellIndex(), this._width, false);\n            } else {\n                this._table.resizeColumn(this.getCellIndex(), this._width - currentWidth, false);\n            }\n        }\n    }\n\n    get width(): number {\n        return this._width;\n    }\n\n    /** Emit the current column width */\n    @Output() widthChange = new EventEmitter<number>();\n\n    /** Get the minimum width allowed by the column */\n    get minWidth(): number {\n        // determine the minimum width of the column based on its computed CSS value\n        const computed = parseFloat(getComputedStyle(this._elementRef.nativeElement).minWidth);\n\n        // if it is disabled use its current width - otherwise use its CSS min width if it is valid\n        return this.disabled ? this._elementRef.nativeElement.offsetWidth : isNaN(computed) ? 0 : computed;\n    }\n\n    /** Determine if this column is a variable width column */\n    isFixedWidth: boolean = false;\n\n    /** Store the width specifically set by the input */\n    private _width: number;\n\n    /** Store the position of the mouse within the drag handle */\n    private _offset: number;\n\n    /** Min width of the column*/\n    private _minWidth: number;\n\n    /** Emit when all observables should be unsubscribed */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngAfterViewInit(): void {\n        // initially emit the size when we have initialised\n        this._table.isInitialised$.pipe(takeUntil(this._onDestroy), filter(isInitialised => isInitialised))\n            .subscribe(() => {\n                // get the current min-width\n                this._minWidth = parseFloat(getComputedStyle(this._elementRef.nativeElement).minWidth);\n\n                const width = this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel);\n\n                if (!isNaN(width)) {\n                    this.widthChange.emit(width);\n                }\n            });\n\n        // ensure the correct width gets emitted on column size change\n        this._table.onResize$.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            this.setColumnWidth();\n            this.setColumnFlex();\n\n            // get the current table width\n            const width = this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel);\n\n            // check if the width actually changed - otherwise don't emit\n            if (!isNaN(width) && (this._width === undefined || Math.max(width, this._width) - Math.min(width, this._width) >= 1)) {\n                this.widthChange.emit(width);\n            }\n        });\n    }\n\n    /** Cleanup when component is destroyed */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Get the natural pixel width of the column */\n    getNaturalWidth(): number {\n        return this._width || this._elementRef.nativeElement.offsetWidth;\n    }\n\n    /** When the dragging starts */\n    onDragStart(event: MouseEvent): void {\n        // determine the mouse position within the handle\n        this._offset = event.clientX - (event.target as HTMLElement).getBoundingClientRect().left;\n    }\n\n    /** When the mouse is moved */\n    onDragMove(event: MouseEvent, handle: HTMLDivElement): void {\n\n        // get the current mouse position\n        const mouseX = event.pageX - pageXOffset;\n\n        // position of the drag handle\n        const { left } = handle.getBoundingClientRect();\n\n        // determine how much the mouse has moved since the last update\n        const delta = mouseX - (left + this._offset);\n\n        // perform resizing\n        this._table.resizeColumn(this.getCellIndex(), delta);\n\n        // set the resizing state\n        this._table.setResizing(true);\n    }\n\n    /** When the dragging ends */\n    onDragEnd(): void {\n        this._table.setResizing(false);\n    }\n\n    /** Shrink the column when the left arrow key is pressed */\n    onMoveLeft(): void {\n        this._table.resizeColumn(this.getCellIndex(), -10);\n    }\n\n    /** Grow the column when the right arrow key is pressed */\n    onMoveRight(): void {\n        this._table.resizeColumn(this.getCellIndex(), 10);\n    }\n\n    /** Get the column index this cell is part of */\n    getCellIndex(): number {\n        return (this._elementRef.nativeElement as HTMLTableCellElement).cellIndex;\n    }\n\n    /** The percentage width of the column */\n    private setColumnWidth(): void {\n\n        if (this.disabled && this._width !== undefined) {\n            this._renderer.setStyle(this._elementRef.nativeElement, 'width', `${this._width}px`);\n            this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', `${this._width}px`);\n            return;\n        }\n\n        if (!this._table.isInitialised$.value) {\n            return;\n        }\n\n        const width = this._table.isResizing$.value ?\n            `${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel)}px` :\n            `${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Percentage)}%`;\n\n\n        this._renderer.setStyle(this._elementRef.nativeElement, 'width', width);\n        this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', null);\n    }\n\n    /** The flex width of the column */\n    private setColumnFlex(): void {\n\n        let flex;\n\n        // if we are resizing then always return 'none' to allow free movement\n        if (this._table.isResizing$.value || this.disabled) {\n            this._renderer.setStyle(this._elementRef.nativeElement, 'flex', 'none');\n        }\n\n        if (this._table.type === ResizableTableType.Expand) {\n            flex = this._table.isInitialised$.value ? `0 0 ${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Pixel)}px` : '';\n        } else {\n            flex = this._table.isInitialised$.value ? `0 1 ${this._table.getColumnWidth(this.getCellIndex(), ColumnUnit.Percentage)}%` : '';\n        }\n\n        this._renderer.setStyle(this._elementRef.nativeElement, 'flex', flex);\n    }\n}","<div class=\"ux-resizable-table-column-content\">\n  <ng-content></ng-content>\n</div>\n\n<div class=\"ux-resizable-table-column-actions\">\n  <ng-content select=\"ux-column-sorting\"></ng-content>\n</div>\n\n@if (!disabled && handleVisible) {\n  <div #handle\n    uxDrag\n    uxFocusIndicator\n    tabindex=\"0\"\n    role=\"separator\"\n    aria-label=\"Column resize handle. Use arrow keys to change the column width.\"\n    class=\"ux-resizable-table-column-handle\"\n    [attr.aria-valuemin]=\"minWidth\"\n    [attr.aria-valuenow]=\"width\"\n    (onDragStart)=\"onDragStart($event)\"\n    (onDrag)=\"onDragMove($event, handle)\"\n    (onDragEnd)=\"onDragEnd()\"\n    (keydown.ArrowLeft)=\"onMoveLeft()\"\n    (keydown.ArrowRight)=\"onMoveRight()\"\n    (click)=\"$event.stopPropagation()\">\n    <div class=\"ux-resizable-table-column-handle-icon\"></div>\n  </div>\n}\n\n","import { Directive, ElementRef, inject, OnDestroy, QueryList, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../../../directives/resize';\nimport { ResizableTableColumnComponent } from './resizable-table-column.component';\nimport { RESIZABLE_TABLE_SERVICE_TOKEN } from './resizable-table-service.token';\n\n@Directive()\nexport abstract class BaseResizableTableDirective implements OnDestroy {\n    protected readonly _table = inject(RESIZABLE_TABLE_SERVICE_TOKEN);\n\n    protected readonly _elementRef = inject<ElementRef<HTMLTableElement>>(ElementRef);\n\n    protected readonly _renderer = inject(Renderer2);\n\n    readonly resize = inject(ResizeService);\n\n    columns: QueryList<ResizableTableColumnComponent>;\n\n    /** Unsubscribe from the observables */\n    protected _onDestroy = new Subject<void>();\n\n    /** Store the initialised state of the table */\n    protected _initialised: boolean = false;\n\n    constructor() {\n        // watch for the table being resized\n        this.resize.addResizeListener(this._elementRef.nativeElement).pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            // store the latest table size\n            this._table.tableWidth = this.getScrollWidth();\n\n            // run the initial logic if the table is fully visible\n            this.onTableReady();\n        });\n    }\n\n    /** Cleanup after the component is destroyed */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Set all resizable columns to the same width */\n    setUniformWidths(): void {\n        this._table.setUniformWidths();\n    }\n\n    /** Get the smallest tbody width taking into account scrollbars (uxFixedHeaderTable) */\n    protected getScrollWidth(): number {\n        return Array.from((this._elementRef.nativeElement as HTMLTableElement).tBodies)\n            .reduce((width, tbody) => Math.min(width, tbody.scrollWidth), (this._elementRef.nativeElement as HTMLTableElement).offsetWidth);\n    }\n\n    abstract onTableReady(): void;\n}\n","import { Injectable, QueryList } from '@angular/core';\nimport { BaseResizableTableService, ResizableTableType } from '../resizable-table-base.service';\nimport { ResizableTableColumnComponent } from '../resizable-table-column.component';\n\n@Injectable()\nexport class ResizableExpandingTableService extends BaseResizableTableService {\n\n    /** Define the type of resizing we should use */\n    type: ResizableTableType = ResizableTableType.Expand;\n\n    /** Store the QueryList of columns */\n    private _columns: QueryList<ResizableTableColumnComponent>;\n\n    /** Store the size of each column */\n    setColumns(columns: QueryList<ResizableTableColumnComponent>): void {\n\n        // store the current columns\n        this._columns = columns;\n\n        // store the sizes\n        this.columns = columns.map(column => (column.getNaturalWidth() / this.tableWidth) * 100);\n\n        // ensure all the columns fit\n        this._columns.forEach((column, idx) => {\n            if (!column.disabled) {\n                this.columns = this.setColumnWidth(idx, this.columns[idx], ColumnUnit.Percentage, this.columns);\n            }\n        });\n\n        // indicate we are now initialised\n        if (this.isInitialised$.value === false) {\n            this.isInitialised$.next(true);\n        }\n    }\n\n    /** Set all resizable columns to the same width */\n    setUniformWidths(): void {\n\n        // set any disabled columns to their specified width\n        this.columns = this._columns.map(column => column.disabled ? (column.getNaturalWidth() / this.tableWidth) * 100 : 0);\n\n        // check to see if we've reached 100% of the table width\n        const totalWidth = this.columns.reduce((partial, columnWidth) => partial + columnWidth);\n\n        if (totalWidth > 98) {\n            // remove overflow\n            this.columns = this.ensureNoOverflow(this.columns);\n        } else {\n            // get the list of resizable columns\n            const resizableColumns = this._columns.toArray().filter(column => !column.disabled);\n\n            // work out what we need to add to each column to make up the full width\n            const newWidth = (98 - totalWidth) / resizableColumns.length;\n\n            // set the non-disabled columns to the new width\n            this.columns = this._columns.map((column, idx) => column.disabled ? this.columns[idx] : newWidth);\n        }\n\n        // do the resizing\n        this._columns.forEach((column, idx) => {\n            if (!column.disabled) {\n                this.resizeColumn(idx, 0);\n            }\n        });\n\n    }\n\n    ensureNoOverflow(columns: ReadonlyArray<number>): ReadonlyArray<number> {\n\n        // get the total width\n        const total = columns.reduce((width, column) => width + column);\n\n        // if we have no overflow then we don't need to do anything\n        if (total <= 100) {\n            return columns;\n        }\n\n        // if there is overflow identify which columns can be resized\n        const variableColumns = this._columns.filter(column => !column.disabled && this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns) > column.minWidth);\n\n        // if there are no columns that can be resized then stop here\n        if (variableColumns.length === 0) {\n            return columns;\n        }\n\n        // determine the total width of the variable columns\n        const totalWidth = this._columns.reduce((width, column) => width + this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns), 0);\n\n        // determine to the width of all the variable columns\n        const variableColumnsWidth = variableColumns.reduce((width, column) => width + this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns), 0);\n\n        // determine how much the columns are currently too large (ignoring fixed columns)\n        const targetWidth = this.tableWidth - (totalWidth - variableColumnsWidth);\n\n        // determine how much we need to reduce a column by\n        const difference = variableColumnsWidth - targetWidth;\n\n        // find the column with the largest size\n        const target = variableColumns.reduce((widest, column) => {\n            const columnWidth = this.getColumnWidth(column.getCellIndex(), ColumnUnit.Pixel, columns);\n            const widestWidth = this.getColumnWidth(widest.getCellIndex(), ColumnUnit.Pixel, columns);\n\n            return columnWidth > widestWidth ? column : widest;\n        });\n\n        // perform the resize\n        columns = this.setColumnWidth(target.getCellIndex(), this.getColumnWidth(target.getCellIndex(), ColumnUnit.Pixel, columns) - difference, ColumnUnit.Pixel, columns);\n\n        // check if we are still over the limit (allow some variance for javascript double precision)\n        if (columns.reduce((width, column) => width + column) > 100.01) {\n            return this.ensureNoOverflow(columns);\n        }\n\n        return columns;\n    }\n\n\n    /** Allow setting the column size in any unit */\n    setColumnWidth(index: number, value: number, unit: ColumnUnit, columns: ReadonlyArray<number> = this.columns): ReadonlyArray<number> {\n        // create a new array so we keep the instance array immutable\n        const sizes = [...columns];\n\n        switch (unit) {\n\n            case ColumnUnit.Percentage:\n                sizes[index] = value;\n                break;\n\n            case ColumnUnit.Pixel:\n                sizes[index] = (value / this.tableWidth) * 100;\n                break;\n        }\n\n        // update the instance variable\n        return sizes;\n    }\n\n    /** Resize a column by a specific pixel amount */\n    resizeColumn(index: number, delta: number): void {\n\n        // get the sibling column that will also be resized\n        const sibling = this.getSiblingColumn(index);\n\n        // create a new array for the sizes\n        let columns = [...this.columns] as number[];\n\n        // resize the column to the desired size\n        columns = this.setColumnWidth(index, Math.round(this.getColumnWidth(index, ColumnUnit.Pixel) + delta), ColumnUnit.Pixel) as number[];\n        columns = this.setColumnWidth(sibling, Math.round(this.getColumnWidth(sibling, ColumnUnit.Pixel)), ColumnUnit.Pixel, columns) as number[];\n\n        // if the move is not possible then stop here\n        if (!this.isWidthValid(index, this.getColumnWidth(index, ColumnUnit.Pixel, columns))) {\n            return;\n        }\n\n        // store the new sizes\n        this.columns = columns;\n\n        // emit the resize event for each column\n        this.onResize$.next();\n    }\n\n    /** Get the next column in the sequence of columns */\n    private getSiblingColumn(index: number): number | null {\n\n        // find the first sibling that is not disabled\n        for (let idx = index + 1; idx < this.columns.length; idx++) {\n\n            const sibling = this.getColumn(idx);\n\n            if (!sibling || !sibling.disabled) {\n                return idx;\n            }\n        }\n\n        return null;\n    }\n\n    /** Return true if this column is above the minimum width */\n    private isWidthValid(index: number, width: number): boolean {\n\n        // get the column at a given position\n        const column = this.getColumn(index);\n\n        // determine if the specified width is greater than the min width\n        return column && width >= column.minWidth;\n    }\n\n    getColumn(index: number): ResizableTableColumnComponent | null {\n        return this._columns ? this._columns.toArray()[index] : null;\n    }\n\n    getColumnDisabled(index: number): boolean {\n        return this.getColumn(index) ? this.getColumn(index).disabled : false;\n    }\n\n}\n\nexport enum ColumnUnit {\n    Pixel,\n    Percentage\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, ContentChildren, Directive, inject, PLATFORM_ID, QueryList } from '@angular/core';\nimport { fromEvent, merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseResizableTableDirective } from '../resizable-table-base.directive';\nimport { ResizableTableColumnComponent } from '../resizable-table-column.component';\nimport { RESIZABLE_TABLE_SERVICE_TOKEN } from '../resizable-table-service.token';\nimport { ResizableExpandingTableService } from './resizable-expanding-table.service';\n\n@Directive({\n    selector: '[uxResizableExpandingTable]',\n    exportAs: 'ux-resizable-expanding-table',\n    providers: [\n        {\n            provide: RESIZABLE_TABLE_SERVICE_TOKEN,\n            useClass: ResizableExpandingTableService\n        }\n    ],\n    host: {\n        'class': 'ux-resizable-expanding-table',\n        '[class.ux-resizable-expanding-table-overflow]': '_overflowX'\n    }\n})\nexport class ResizableExpandingTableDirective extends BaseResizableTableDirective implements AfterViewInit {\n    private readonly _platformId = inject(PLATFORM_ID);\n\n    /** Get all the column headers */\n    @ContentChildren(ResizableTableColumnComponent, { descendants: true }) columns: QueryList<ResizableTableColumnComponent>;\n\n    /** Has horizontal overflow */\n    _overflowX: boolean = false;\n\n    constructor() {\n        super();\n    }\n\n    ngAfterViewInit(): void {\n\n        if (isPlatformBrowser(this._platformId)) {\n\n            const tableHeaders = this._elementRef.nativeElement.querySelectorAll('thead > tr');\n\n            for (const body of Array.from(this._elementRef.nativeElement.tBodies)) {\n                fromEvent(body, 'scroll').pipe(takeUntil(this._onDestroy)).subscribe(() => {\n                    Array.from(tableHeaders).forEach(thead => this._renderer.setStyle(thead, 'margin-left', `-${body.scrollLeft}px`));\n                });\n            }\n\n            /** checks if the table is resizing and allows for a class to be added for when moving from\n             overflow to no overflow */\n            merge(this._table.onResize$, this.columns.changes).pipe(takeUntil(this._onDestroy)).subscribe(() => {\n                this._overflowX = this._elementRef.nativeElement.tBodies[0].scrollWidth > this._elementRef.nativeElement.tBodies[0].offsetWidth;\n            });\n        }\n    }\n\n    /**\n     * If this is being used within a modal the table width may initially be zero. This can cause some issues when it does actually appear\n     * visibily on screen. We should only setup the table once we actually have a width/\n     */\n    onTableReady(): void {\n\n        // if we have already initialised or the table width is currently 0 then do nothing\n        if (this._initialised || this.getScrollWidth() === 0) {\n\n            // if the table has been initialized but the width is now 0\n            // for example, due to the element being hidden (eg. in a collapsed accordion)\n            // we would need to re-run this logic whenever the width is back over 0\n            // to do this we can mark the table as not having been initialized\n            if (this._initialised && this.getScrollWidth() === 0) {\n                this._initialised = false;\n            }\n\n            return;\n        }\n\n        // ensure we initially set the table width\n        this._table.tableWidth = this.getScrollWidth();\n\n        // set the columns - prevent expression changed error\n        Promise.resolve().then(() => {\n            // initially set the columns\n            this._table.setColumns(this.columns);\n\n            // force relayout to occur to ensure the UI is consistent with the internal state\n            this.updateLayout();\n        });\n\n        // watch for any future changes to the columns\n        this.columns.changes.pipe(takeUntil(this._onDestroy)).subscribe(() =>\n            Promise.resolve().then(() => this._table.setColumns(this.columns))\n        );\n\n        this._initialised = true;\n    }\n\n    /** Force the layout to recalculate */\n    updateLayout(): void {\n        Promise.resolve().then(() => this.columns.forEach((_column, index) => this._table.resizeColumn(index, 0)));\n    }\n\n}\n","import { ContentChildren, Directive, QueryList } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseResizableTableDirective } from '../resizable-table-base.directive';\nimport { ResizableTableColumnComponent } from '../resizable-table-column.component';\nimport { RESIZABLE_TABLE_SERVICE_TOKEN } from '../resizable-table-service.token';\nimport { ResizableTableService } from './resizable-table.service';\n\n@Directive({\n    selector: '[uxResizableTable]',\n    exportAs: 'ux-resizable-table',\n    providers: [\n        {\n            provide: RESIZABLE_TABLE_SERVICE_TOKEN,\n            useClass: ResizableTableService\n        }\n    ],\n    host: {\n        class: 'ux-resizable-table'\n    }\n})\nexport class ResizableTableDirective extends BaseResizableTableDirective {\n\n    /** Get all the column headers */\n    @ContentChildren(ResizableTableColumnComponent, { descendants: true }) columns: QueryList<ResizableTableColumnComponent>;\n\n    constructor() {\n        super();\n        // we should hide any horizontal overflow when we are resizing\n        this._table.isResizing$.pipe(takeUntil(this._onDestroy)).subscribe(this.setOverflow.bind(this));\n    }\n\n    /**\n     * If this is being used within a modal the table width may initially be zero. This can cause some issues when it does actually appear\n     * visibily on screen. We should only setup the table once we actually have a width/\n     */\n    onTableReady(): void {\n\n        // if we have already initialised or the table width is currently 0 then do nothing\n        if (this._initialised || this.getScrollWidth() === 0) {\n            return;\n        }\n\n        // ensure we initially set the table width\n        this._table.tableWidth = this.getScrollWidth();\n\n        // set the columns - prevent expression changed error\n        Promise.resolve().then(() => {\n            // initially set the columns\n            this._table.setColumns(this.columns);\n\n            // force relayout to occur to ensure the UI is consistent with the internal state\n            this.updateLayout();\n        });\n\n        // watch for any future changes to the columns\n        this.columns.changes.pipe(takeUntil(this._onDestroy)).subscribe(() =>\n            Promise.resolve().then(() => this._table.setColumns(this.columns))\n        );\n\n        this._initialised = true;\n    }\n\n    /** Force the layout to recalculate */\n    updateLayout(): void {\n        Promise.resolve().then(() => this.columns.forEach((_column, index) => this._table.resizeColumn(index, 0)));\n    }\n\n    /**\n     * We should hide any horizontal overflow whenever we are resizing, this is because when we are dragging a column\n     * we must set the column widths in pixel values as percentages cause some jankiness when moving them. However pixel\n     * values are less precise and can in some cases cause overflow, so we should hide overflow when we are resizing\n     */\n    private setOverflow(isResizing: boolean): void {\n        Array.from((this._elementRef.nativeElement as HTMLTableElement).tBodies)\n            .forEach(tbody => this._renderer.setStyle(tbody, 'overflow-x', isResizing ? 'hidden' : null));\n    }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CdkTreeModule } from '@angular/cdk/tree';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { DragModule } from '../../directives/drag/index';\nimport { ReorderableModule } from '../../directives/reorderable/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { SelectionModule } from '../../directives/selection/index';\nimport { IconModule } from '../icon/index';\nimport { ColumnPickerComponent } from './column-picker/column-picker.component';\nimport { ResizableTableCellComponent } from './table-column-resize/resizable-table-cell.component';\nimport { ResizableTableColumnComponent } from './table-column-resize/resizable-table-column.component';\nimport { ResizableExpandingTableDirective } from './table-column-resize/table-column-resize-expanding/resizable-expanding-table.directive';\nimport { ResizableTableDirective } from './table-column-resize/table-column-resize-standard/resizable-table.directive';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        AccessibilityModule,\n        CdkTreeModule,\n        CommonModule,\n        DragModule,\n        IconModule,\n        ResizeModule,\n        ReorderableModule,\n        SelectionModule,\n    ],\n    declarations: [\n        ColumnPickerComponent,\n        ResizableTableDirective,\n        ResizableExpandingTableDirective,\n        ResizableTableColumnComponent,\n        ResizableTableCellComponent,\n    ],\n    exports: [\n        ColumnPickerComponent,\n        ResizableTableDirective,\n        ResizableExpandingTableDirective,\n        ResizableTableColumnComponent,\n        ResizableTableCellComponent,\n    ]\n})\nexport class TableModule { }\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\nlet uniqueId: number = 0;\r\n\r\n@Component({\r\n    selector: 'ux-timeline-event',\r\n    templateUrl: './timeline-event.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimelineEventComponent {\r\n\r\n    /** Define the id for the event */\r\n    @Input() id: string = `ux-timeline-event-${uniqueId++}`;\r\n\r\n    /** Define the badge color */\r\n    @Input() badgeColor: string;\r\n\r\n    /** Define the title to display in the badge */\r\n    @Input() badgeTitle: string;\r\n}","<div class=\"timeline-badge\" [ngClass]=\"badgeColor\" [attr.aria-describedby]=\"id\">\r\n    <span>{{ badgeTitle }}</span>\r\n</div>\r\n\r\n<div class=\"timeline-panel\" [id]=\"id\">\r\n    <ng-content></ng-content>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'ux-timeline',\r\n    templateUrl: './timeline.component.html',\r\n    changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimelineComponent { }","<div class=\"timeline\">\r\n    <div class=\"timeline-connector\"></div>\r\n    <ux-icon class=\"timeline-arrow\" name=\"chevron-down\"></ux-icon>\r\n    <ng-content></ng-content>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { IconModule } from '../icon/index';\r\nimport { TimelineEventComponent } from './timeline-event/timeline-event.component';\r\nimport { TimelineComponent } from './timeline.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        IconModule\r\n    ],\r\n    exports: [\r\n        TimelineComponent,\r\n        TimelineEventComponent\r\n    ],\r\n    declarations: [\r\n        TimelineComponent,\r\n        TimelineEventComponent\r\n    ]\r\n})\r\nexport class TimelineModule { }\r\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Input, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { FocusIndicatorDirective } from '../../directives/accessibility';\nimport { FocusableItemToken } from '../menu';\nimport { FocusableControl } from '../menu/interfaces/focusable-control.interface';\n\nconst TOGGLESWITCH_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => ToggleSwitchComponent),\n    multi: true\n};\n\nlet uniqueToggleSwitchId = 0;\n\n@Component({\n    selector: 'ux-toggleswitch',\n    templateUrl: './toggleswitch.component.html',\n    providers: [TOGGLESWITCH_VALUE_ACCESSOR, {\n        provide: FocusableItemToken,\n        useExisting: ToggleSwitchComponent\n    }],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToggleSwitchComponent implements ControlValueAccessor, FocusableControl {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** Provide a default unique id value for the toggle switch */\n    _toggleSwitchId: string = `ux-toggleswitch-${++uniqueToggleSwitchId}`;\n\n    /** Specify a unique id for the element. */\n    @Input() id: string = this._toggleSwitchId;\n\n    /** Specify a form name for the input element. */\n    @Input() name: string | null;\n\n    /** Binding for the state of the switch; `true` for \"on\" and `false` for \"off.\" */\n    @Input() value: boolean = false;\n\n    /** Specify a tabindex. */\n    @Input() tabindex: number = 0;\n\n    /** If set to `false` the switch will not be updated when clicking on it, can be used if something else is updating the state of the switch. */\n    @Input() clickable: boolean = true;\n\n    /** If this value is set to `true` then the toggle switch will be disabled. */\n    @Input() disabled: boolean = false;\n\n    /** Specify an aria label for the input element */\n    @Input('aria-label') ariaLabel: string = '';\n\n    /** Specify an aria labelledby property for the input element */\n    @Input('aria-labelledby') ariaLabelledby: string = null;\n\n    /** Specified if this is a required input. */\n    @Input() required: boolean;\n\n    /** Emits when `value` has been changed. */\n    @Output() valueChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Get the focus indicator to set focus */\n    @ViewChild(FocusIndicatorDirective)\n    _focusIndicator?: FocusIndicatorDirective;\n\n    /** Determine if the underlying input component has been focused with the keyboard */\n    _focused: boolean = false;\n\n    /** Used to inform Angular forms that the component has been touched */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onTouchedCallback: () => void = () => { };\n\n    /** Used to inform Angular forms that the component value has changed */\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChangeCallback: (_: unknown) => void = () => { };\n\n    toggle(): void {\n        if (!this.disabled && this.clickable) {\n            this.value = !this.value;\n\n            // emit the value\n            this.valueChange.emit(this.value);\n\n            // update the value if used within a form control\n            this.onChangeCallback(this.value);\n\n            // mark the component as touched\n            this.onTouchedCallback();\n        }\n    }\n\n    writeValue(value: boolean): void {\n        this.value = !!value;\n        this._changeDetector.markForCheck();\n    }\n\n     \n    registerOnChange(fn: () => void): void {\n        this.onChangeCallback = fn;\n    }\n\n     \n    registerOnTouched(fn: () => void): void {\n        this.onTouchedCallback = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetector.markForCheck();\n    }\n\n    /** Focus the input element */\n    focus(origin: FocusOrigin): void {\n        this._focusIndicator.focus(origin);\n    }\n\n    setInputTabIndex(tabindex: number): void {\n        this.tabindex = tabindex;\n        this._changeDetector.markForCheck();\n    }\n}\n","<label [attr.for]=\"(id || _toggleSwitchId) + '-input'\"\n       class=\"ux-toggleswitch\"\n       [class.ux-toggleswitch-checked]=\"value\"\n       [class.ux-toggleswitch-disabled]=\"disabled\"\n       [class.ux-toggleswitch-focused]=\"_focused\">\n\n    <input #input\n           class=\"ux-toggleswitch-input\"\n           uxFocusIndicator\n           type=\"checkbox\"\n           [id]=\"(id || _toggleSwitchId) + '-input'\"\n           [checked]=\"value\"\n           [disabled]=\"disabled\"\n           [required]=\"required\"\n           [attr.name]=\"name\"\n           [tabindex]=\"tabindex\"\n           [attr.aria-label]=\"ariaLabel\"\n           [attr.aria-labelledby]=\"ariaLabelledby\"\n           [attr.aria-checked]=\"value\"\n           (indicator)=\"_focused = $event\"\n           (change)=\"toggle()\"\n           (click)=\"$event.stopPropagation()\">\n\n    <div class=\"ux-toggleswitch-container\">\n        <div class=\"ux-toggleswitch-bg\"></div>\n        <div class=\"ux-toggleswitch-nub\"></div>\n    </div>\n\n    <span class=\"ux-toggleswitch-label\">\n        <ng-content></ng-content>\n    </span>\n</label>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ToggleSwitchComponent } from './toggleswitch.component';\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        FormsModule\n    ],\n    exports: [\n        ToggleSwitchComponent\n    ],\n    declarations: [\n        ToggleSwitchComponent\n    ]\n})\nexport class ToggleSwitchModule { }\n","import { Directive, ElementRef, EventEmitter, HostListener, inject, Output } from '@angular/core';\n\n@Directive({\n    selector: '[uxToolbarSearchButton]'\n})\nexport class ToolbarSearchButtonDirective {\n    private readonly _elementRef = inject(ElementRef);\n\n    /** Emit whenever the button is clicked */\n    @Output() clicked = new EventEmitter<void>();\n\n    /** Get the width of the button element */\n    get width(): number {\n        return this._elementRef.nativeElement.offsetWidth;\n    }\n\n    @HostListener('click')\n    clickHandler(): void {\n        this.clicked.emit();\n    }\n}\n","/* eslint-disable @angular-eslint/no-output-native */\nimport {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  inject,\n  Output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TOOLBAR_SEARCH_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => ToolbarSearchFieldDirective),\n  multi: true,\n};\n\n@Directive({\n  selector: '[uxToolbarSearchField]',\n  providers: [TOOLBAR_SEARCH_VALUE_ACCESSOR],\n})\nexport class ToolbarSearchFieldDirective implements ControlValueAccessor {\n  private readonly _elementRef = inject(ElementRef);\n\n  private readonly _changeDetector = inject(ChangeDetectorRef);\n\n  /** Emit whenever the escape key is pressed */\n  @Output() cancel = new EventEmitter<void>();\n\n  /** Emit whenever the enter key is pressed */\n  @Output() submitted = new EventEmitter<string>();\n\n  /** Get the current value of the input control */\n  get text(): string {\n    return this._elementRef.nativeElement.value;\n  }\n\n  /** For use with the Forms and ReactiveForms */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onTouchedCallback: () => void = () => {};\n\n  /** Call this function with the latest value to update ngModel or formControl name */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChangeCallback: (_: any) => void = () => {};\n\n  focus(): void {\n    // mark the control as dirty\n    this.onTouchedCallback();\n\n    // focus the input control after a delay to ensure the element is present\n    requestAnimationFrame(() => this._elementRef.nativeElement.focus());\n  }\n\n  blur(): void {\n    // blur the input control after a delay to ensure the element is present\n    requestAnimationFrame(() => this._elementRef.nativeElement.blur());\n  }\n\n  /** Clear the input, if we have an ngModel reset its value otherwise just set the input value to empty */\n  clear(): void {\n    this.setValue('');\n  }\n\n  @HostListener('keydown.enter')\n  onEnter(): void {\n    this.submitted.emit(this.text);\n  }\n\n  @HostListener('keydown.escape')\n  onEscape(): void {\n    this._elementRef.nativeElement.blur();\n    this.cancel.emit();\n  }\n\n  @HostListener('input')\n  onInput(): void {\n    this.setValue(this.text);\n  }\n\n  /** Update the input value based on ngModel or formControl */\n  writeValue(value: string): void {\n    this.setValue(value);\n    this._changeDetector.markForCheck();\n  }\n\n  /** Register a function to update form control */\n   \n  registerOnChange(fn: any): void {\n    this.onChangeCallback = fn;\n  }\n\n  /** Register a function to mark form control as touched */\n   \n  registerOnTouched(fn: any): void {\n    this.onTouchedCallback = fn;\n  }\n\n  /** Update the value in all required places */\n  private setValue(value: string): void {\n    // ngModel/form control can set the default value to null or undefined, which can show in the input. Replace with empty string\n    if (!value) {\n      value = '';\n    }\n\n    // update the form value if there is one in use\n    this.onChangeCallback(value);\n\n    // update the content of the input control\n    this._elementRef.nativeElement.value = value;\n  }\n}\n","import { animate, AnimationEvent, state, style, transition, trigger } from '@angular/animations';\nimport { isPlatformServer } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output, PLATFORM_ID, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ColorService } from '../../services/color/color.service';\nimport { ToolbarSearchButtonDirective } from './toolbar-search-button.directive';\nimport { ToolbarSearchFieldDirective } from './toolbar-search-field.directive';\n\n@Component({\n    selector: 'ux-toolbar-search',\n    template: '<ng-content></ng-content>',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    animations: [\n        trigger('expanded', [\n            state('collapsed',\n                style({ width: '{{initialWidth}}' }),\n                { params: { initialWidth: '30px' } }\n            ),\n            state('expanded', style({ width: '100%' })),\n            transition('collapsed <=> expanded', [animate('0.3s ease-out')])\n        ])\n    ],\n    host: {\n        '[class.expanded]': 'expanded',\n        '[class.left]': 'direction === \"left\"',\n        '[class.right]': 'direction === \"right\"',\n        '[class.inverse]': 'inverse',\n        '[style.position]': '_position',\n        '[style.background-color]': '_backgroundColor',\n        '[@expanded]': '_expandedAnimation'\n    }\n})\nexport class ToolbarSearchComponent implements AfterContentInit, OnDestroy {\n    private readonly _platformId = inject(PLATFORM_ID);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _colorService = inject(ColorService);\n\n    private readonly _renderer = inject(Renderer2);\n\n    /** The direction in which the search box will expand. If the search button is aligned to the right edge of the container, specify left. */\n    @Input() direction: 'left' | 'right' = 'right';\n\n    /** Whether the color scheme is inverted. For use when the component is hosted on a dark background, e.g. the masthead. */\n    @Input() inverse = false;\n\n    /** Indicate whether or not the search field should always be expanded */\n    @Input() alwaysExpanded: boolean = false;\n\n    /** Whether the input field is visible. Use this to collapse or expand the control in response to other events. */\n    @Input()\n    set expanded(value: boolean) {\n        this._expanded = value;\n\n        this.expandedChange.emit(this.expanded);\n\n        if (this.expanded) {\n            // Set focus on the input when expanded\n            this.field.focus();\n        } else {\n            // Clear text when contracted\n            this.field.clear();\n\n            // Remove focus (works around an IE issue where the caret remains visible)\n            this.field.blur();\n        }\n    }\n\n    get expanded(): boolean {\n        return this.alwaysExpanded || this._expanded;\n    }\n\n    /*\n     * The background color of the component. Color names from the Color Palette can be used here.\n     * Specify this when a transparent background would cause display issues, such as background items showing through the search field.\n     */\n    @Input()\n    set background(value: string) {\n        this._backgroundColor = this._colorService.resolve(value) || 'transparent';\n    }\n\n    /** Emitted when the expanded state changes */\n    @Output() expandedChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted when a search query has been submitted, either by pressing enter when the search field has focus, or by clicking the search button\n     * when the search field contains text. The event contains the search text.\n     */\n    @Output() search = new EventEmitter<string>();\n\n    /** Return the correct animation based on the expanded state */\n    get _expandedAnimation() {\n        return {\n            value: this.expanded ? 'expanded' : 'collapsed',\n            params: {\n                initialWidth: this.button.width + 'px'\n            }\n        };\n    }\n\n    /** Access the input field element */\n    @ContentChild(ToolbarSearchFieldDirective, { static: true }) field: ToolbarSearchFieldDirective;\n\n    /** Access the search button element */\n    @ContentChild(ToolbarSearchButtonDirective, { static: false }) button: ToolbarSearchButtonDirective;\n\n    /** Store the CSS position value as this may change to absolute */\n    _position: string = 'relative';\n\n    /** Store the active background color */\n    _backgroundColor: string = 'transparent';\n\n    /** Store the expanded state */\n    private _expanded: boolean = false;\n\n    /** Store the programmatically created placeholder element */\n    private _placeholder: HTMLElement;\n\n    /** Unsubscribe from all subscriptions on component destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngAfterContentInit(): void {\n        // Subscribe to the submitted event on the input field, triggering the search event\n        this.field.submitted.pipe(takeUntil(this._onDestroy)).subscribe((text: string) => this.search.emit(text));\n\n        // Subscribe to cancel events coming from the input field\n        this.field.cancel.pipe(takeUntil(this._onDestroy)).subscribe(() => this.expanded = false);\n\n        // Subscribe to the button click event\n        this.button.clicked.pipe(takeUntil(this._onDestroy)).subscribe(() => {\n            this.expanded && this.field.text ? this.search.emit(this.field.text) : this.expanded = !this.expanded;\n        });\n\n        // Create placeholder element to avoid changing layout when switching to position: absolute\n        // If the platform is a server we dont want to do this as we can't access getComputedStyle\n        if (!isPlatformServer(this._platformId)) {\n            this.createPlaceholder();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        /**\n         * We programmatically created the placeholder node so Angular is not aware of its existence\n         * so we must manually destroy it otherwise the reference will be retained.\n         * Note, the `destroyNode` function may be null or undefined as mentioned in the\n         * Angular API docs (https://angular.io/api/core/Renderer2#destroyNode) so\n         * we must check that the function is available before attempting to call it\n         */\n        if (this._placeholder && this._renderer && this._renderer.destroyNode) {\n            this._renderer.destroyNode(this._placeholder);\n        }\n    }\n\n    @HostListener('@expanded.start', ['$event'])\n    animationStart(event: AnimationEvent): void {\n        if (event.toState === 'expanded') {\n            this._position = 'absolute';\n            this.setPlaceholderVisible(true);\n        }\n    }\n\n    @HostListener('@expanded.done', ['$event'])\n    animationDone(event: AnimationEvent): void {\n        if (event.toState === 'collapsed') {\n            this._position = 'relative';\n            this.setPlaceholderVisible(false);\n        }\n    }\n\n    /** Programmatically create a placeholder element */\n    private createPlaceholder(): void {\n\n        // Create invisible div with the same dimensions\n        this._placeholder = this._renderer.createElement('div');\n        this._renderer.setStyle(this._placeholder, 'display', 'none');\n        this._renderer.setStyle(this._placeholder, 'width', this.button.width + 'px');\n        this._renderer.setStyle(this._placeholder, 'visibility', 'hidden');\n        this.setPlaceholderHeight();\n\n        // Add as a sibling\n        this._renderer.insertBefore(this._elementRef.nativeElement.parentNode, this._placeholder, this._elementRef.nativeElement);\n    }\n\n    /** Update the display state of the placeholder node */\n    private setPlaceholderVisible(isVisible: boolean): void {\n        if (!this._placeholder) {\n            return;\n        }\n\n        // Recalculate the height since the layout might not be complete when initially created.\n        if (isVisible) {\n            this.setPlaceholderHeight();\n        }\n\n        this._renderer.setStyle(this._placeholder, 'display', isVisible ? 'inline-block' : 'none');\n    }\n\n    /** Set the placeholder height to match the height of this component. */\n    private setPlaceholderHeight(): void {\n        const { height } = getComputedStyle(this._elementRef.nativeElement);\n        this._renderer.setStyle(this._placeholder, 'height', height);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ToolbarSearchComponent } from './toolbar-search.component';\nimport { ToolbarSearchFieldDirective } from './toolbar-search-field.directive';\nimport { ToolbarSearchButtonDirective } from './toolbar-search-button.directive';\n\nconst DECLARATIONS = [\n    ToolbarSearchComponent,\n    ToolbarSearchFieldDirective,\n    ToolbarSearchButtonDirective\n];\n\n@NgModule({\n    imports: [\n        CommonModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS,\n    providers: [],\n})\nexport class ToolbarSearchModule { }\n","import { Injectable } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\n@Injectable()\nexport class VirtualForService<T> {\n\n    /** Store the size of each item */\n    itemSize: number = 0;\n\n    /** Emit the current dataset */\n    dataset = new ReplaySubject<T[]>(1);\n\n    /** Emit the visible range */\n    range = new ReplaySubject<VirtualForRange>(1);\n}\n\nexport interface VirtualForRange {\n    start: number;\n    end: number;\n}\n","import { ChangeDetectorRef, Directive, DoCheck, EmbeddedViewRef, inject, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, OnDestroy, OnInit, Renderer2, TemplateRef, TrackByFunction, ViewContainerRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { VirtualForRange, VirtualForService } from './virtual-for.service';\n\n/**\n * This implementation is inspired by the CDK virtual for:\n * https://github.com/angular/material2/blob/master/src/cdk/scrolling/virtual-for-of.ts\n * However the CDK requires a container component which limits use in places such\n * as fixed header tables, so this is a more generic implementation that does not\n * require a parent element but instead uses an attribute on the parent container instead\n */\n\n@Directive({\n    selector: '[uxVirtualFor][uxVirtualForOf]',\n})\nexport class VirtualForDirective<T> implements OnInit, DoCheck, OnDestroy {\n    /** A reference to the container element where we will insert elements. */\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    /** The template for all items */\n    private readonly _templateRef = inject<TemplateRef<VirtualForOfContext<T>>>(TemplateRef);\n\n    /** Gets the set of Angular differs for detecting changes. */\n    private readonly _differs = inject(IterableDiffers);\n\n    /** Get the renderer to perform DOM manipulation */\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    /** A service to share values between the container and child elements */\n    private readonly _virtualScroll = inject<VirtualForService<T>>(VirtualForService, { optional: true });\n\n    /** Store the list of items to display */\n    @Input() set uxVirtualForOf(dataset: T[]) {\n        // emit the latest dataset\n        this._virtualScroll.dataset.next(dataset);\n\n        // store a local version of the dataset\n        this._dataset = dataset;\n\n        // if this is an update and not the initial dataset then we should\n        // forcibly redraw the list of items. In cases where the length of\n        // the dataset change would trigger a re-renderer as the scroll position\n        // would change, however if we are performing sorting then it would not\n        // so we must ensure we update everytime the dataset changes.\n        if (this._renderedRange) {\n            this.onRangeChange();\n        }\n    }\n\n    /** Provide a trackBy function to optimize rendering */\n    @Input() uxVirtualForTrackBy: TrackByFunction<T> | undefined = this.defaultTrackBy;\n\n    /** The instance of the differ we create */\n    private _differ: IterableDiffer<T>;\n\n    /** Keep a local reference to the dataset */\n    private _dataset: T[];\n\n    /** Store the currently rendered range */\n    private _renderedRange: VirtualForRange;\n\n    /** Store a list of all the currently rendered items */\n    private _renderedItems: T[];\n\n    /** Indicate whether we need to perform a view update */\n    private _isDirty: boolean = false;\n\n    /** Store a cache of recently disposed views for reuse */\n    private readonly _templateCache: EmbeddedViewRef<VirtualForOfContext<T>>[] = [];\n\n    /** Limit the size of the cache as it can use a lot of memory */\n    private readonly _cacheSize: number = 20;\n\n    /** Unsubscribe from all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        // While marked as optional, it isn't. We do this so we can provide a more helpful error message\n        if (!this._virtualScroll) {\n            throw new Error('The \"uxVirtualFor\" directive requires the \"uxVirtualForContainer\" directive to be added to the parent element.');\n        }\n    }\n\n    ngOnInit(): void {\n        // update the UI whenever the range changes\n        this._virtualScroll.range.pipe(distinctUntilChanged(this.isRangeSame), takeUntil(this._onDestroy)).subscribe(range => {\n            this._renderedRange = range;\n            this.onRangeChange();\n            this._changeDetector.detectChanges();\n        });\n    }\n\n    ngDoCheck(): void {\n        if (this._isDirty && this._differ) {\n\n            // check if there area any changes\n            const changes = this.getChanges();\n\n            if (changes) {\n                this.applyChanges(changes);\n            } else {\n                this.updateContexts();\n            }\n\n            // now that we have rendered any change we should store this so we don't perform unneeded updates\n            this._isDirty = false;\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** If an itemSize is not specified we need to calculate it */\n    getHeight(context: T, length: number): number {\n\n        // create a temporary view\n        const view = this.createView(0);\n\n        // set the implicit value to the item value\n        view.context.$implicit = context;\n        view.context.count = length;\n        view.context.even = true;\n        view.context.odd = false;\n        view.context.first = true;\n        view.context.last = length === 1;\n\n        // run change detection\n        view.detectChanges();\n\n        // get the size of the view\n        const height = view.rootNodes[0].offsetHeight;\n\n        // destroy the view\n        this._viewContainerRef.remove(0);\n        view.destroy();\n\n        return height;\n    }\n\n    /** Determine if the range has changed (performance optimization) */\n    private isRangeSame(previous: VirtualForRange, current: VirtualForRange): boolean {\n        return previous.start === current.start && previous.end === current.end;\n    }\n\n    private onRangeChange(): void {\n\n        // store the visible range\n        this._renderedItems = this._dataset.slice(this._renderedRange.start, this._renderedRange.end);\n\n        // create the Angular differ if we haven't previously done so\n        if (!this._differ) {\n            this._differ = this._differs.find(this._renderedItems).create(this.uxVirtualForTrackBy);\n        }\n\n        // mark the view for re-render\n        this._isDirty = true;\n    }\n\n    /** Determine which items have changed */\n    private getChanges(): IterableChanges<T> {\n        return this._differ.diff(this._renderedItems);\n    }\n\n    /** Insert, move and remove any items within the view */\n    private applyChanges(changes: IterableChanges<T>): void {\n\n        // Go through each changes and either add or rearrange accordingly\n        changes.forEachOperation((record: IterableChangeRecord<T>, previousIndex: number, currentIndex: number) => {\n\n            // check if a new item was added\n            if (previousIndex === null) {\n                // create the new embedded view\n                const view = this.createView(currentIndex);\n\n                // set the implicit value to the item value\n                view.context.$implicit = record.item;\n\n            } else if (currentIndex === null) { // check if the item should be removed\n                const view = this._viewContainerRef.detach(currentIndex) as EmbeddedViewRef<VirtualForOfContext<T>>;\n                const index = this._viewContainerRef.indexOf(view);\n\n                // if there is space in the cache then store the detached view\n                if (this._templateCache.length < this._cacheSize) {\n                    this._templateCache.push(view);\n                } else {\n                    index === -1 ? view.destroy() : this._viewContainerRef.remove(index);\n                }\n            } else { // the position of the item has changed\n\n                // get the view from its current position\n                const view = this._viewContainerRef.get(previousIndex) as EmbeddedViewRef<VirtualForOfContext<T>>;\n\n                // move it to the new position\n                this._viewContainerRef.move(view, currentIndex);\n\n                // update the implicit value (the rest will stay the same)\n                view.context.$implicit = record.item;\n            }\n        });\n\n        // Ensure the implicit value is correct for any items whose identity changed\n        changes.forEachIdentityChange((record: IterableChangeRecord<T>) => {\n            const view = this._viewContainerRef.get(record.currentIndex) as EmbeddedViewRef<VirtualForOfContext<T>>;\n\n            if (view) {\n                view.context.$implicit = record.item;\n            }\n        });\n\n        this.updateContexts();\n    }\n\n    updateContexts(): void {\n\n        // update all the other context properties\n        for (let idx = 0; idx < this._viewContainerRef.length; idx++) {\n\n            // get the view at a given position\n            const view = this._viewContainerRef.get(idx) as EmbeddedViewRef<VirtualForOfContext<T>>;\n\n            // update the properties\n            view.context.index = this._renderedRange.start + idx;\n            view.context.count = this._dataset.length;\n            view.context.first = view.context.index === 0;\n            view.context.last = view.context.index === view.context.count - 1;\n            view.context.even = view.context.index % 2 === 0;\n            view.context.odd = !view.context.even;\n\n            // update the position in the DOM\n            view.rootNodes.forEach((node: HTMLElement) => {\n                this._renderer.setStyle(node, 'position', 'absolute');\n                this._renderer.setStyle(node, 'width', '100%');\n                this._renderer.setStyle(node, 'top', '0');\n                this._renderer.setStyle(node, 'transform', `translateY(${view.context.index * this._virtualScroll.itemSize}px`);\n            });\n\n            view.detectChanges();\n        }\n    }\n\n    private createView(index: number): EmbeddedViewRef<VirtualForOfContext<T>> {\n\n        // get a checked EmbeddedViewRef is there is one\n        const cachedTemplate = this._templateCache.pop();\n\n        if (cachedTemplate) {\n\n            // replace existing context with the defaults\n            cachedTemplate.context.$implicit = null;\n            cachedTemplate.context.index = -1;\n            cachedTemplate.context.count = -1;\n            cachedTemplate.context.first = false;\n            cachedTemplate.context.last = false;\n            cachedTemplate.context.even = false;\n            cachedTemplate.context.odd = false;\n\n            // insert the view\n            this._viewContainerRef.insert(cachedTemplate, index);\n\n            // return the cached EmbeddedViewRef\n            return cachedTemplate;\n        }\n\n        // otherwise create a new view and insert it\n        return this._viewContainerRef.createEmbeddedView<VirtualForOfContext<T>>(this._templateRef, {\n            $implicit: null,\n            index: -1,\n            count: -1,\n            first: false,\n            last: false,\n            even: false,\n            odd: false,\n        }, index);\n    }\n\n    private defaultTrackBy(index: number): number {\n        return index;\n    }\n\n}\n\n/** We want to supply the same properties as `ngFor` */\nexport interface VirtualForOfContext<T> {\n    $implicit: T;\n    index: number;\n    count: number;\n    first: boolean;\n    last: boolean;\n    even: boolean;\n    odd: boolean;\n}\n","import { END, HOME, PAGE_DOWN, PAGE_UP } from '@angular/cdk/keycodes';\nimport { AfterViewInit, Component, ContentChild, ElementRef, HostListener, inject, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TabbableListService } from '../../../directives/accessibility/index';\nimport { VirtualForDirective } from './virtual-for.directive';\nimport { VirtualForRange, VirtualForService } from './virtual-for.service';\n\n@Component({\n    selector: '[uxVirtualForContainer]',\n    templateUrl: './virtual-for.component.html',\n    providers: [VirtualForService],\n    host: {\n        '[style.position]': '\"relative\"'\n    }\n})\nexport class VirtualForContainerComponent<T> implements AfterViewInit, OnDestroy {\n    /** Get the ElementRef of the container element */\n    private readonly _elementRef = inject(ElementRef);\n\n    /** A service to share values between the container and child elements */\n    private readonly _virtualScroll = inject<VirtualForService<T>>(VirtualForService);\n\n    /** Handle key presses if there is a tabbable list */\n    private readonly _tabbableList = inject(TabbableListService, { optional: true, self: true });\n\n    /** Define the height of each virtual item */\n    @Input() set itemSize(itemSize: number) {\n        this._virtualScroll.itemSize = itemSize;\n\n        if (this._initialized) {\n            requestAnimationFrame(() => {\n                this.updateContainer();\n                this.virtualFor.updateContexts();\n            });\n        }\n    }\n\n    get itemSize(): number {\n        return this._virtualScroll.itemSize;\n    }\n\n    /** Store the container height */\n    _totalHeight: number;\n\n    /** Keep a local reference of the dataset */\n    private _dataset: T[] = [];\n\n    /** Store the current visible range */\n    private _range: VirtualForRange;\n\n    /** Indicate if the component has finished initialising */\n    private _initialized: boolean = false;\n\n    /** Unsubscribe from all observables */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Determine if this is a table */\n    get _isTable(): boolean {\n        return this._elementRef.nativeElement.tagName === 'TABLE' || this._elementRef.nativeElement.tagName === 'TBODY';\n    }\n\n    /** Determine if this is a list */\n    get _isList(): boolean {\n        return this._elementRef.nativeElement.tagName === 'OL' || this._elementRef.nativeElement.tagName === 'UL';\n    }\n\n    /** Access the uxVirtualFor child directive */\n    @ContentChild(VirtualForDirective, { static: false }) virtualFor: VirtualForDirective<T>;\n\n    ngAfterViewInit(): void {\n        // subscribe to changes to the dataset\n        this._virtualScroll.dataset.pipe(takeUntil(this._onDestroy)).subscribe(dataset => {\n            // store the latest dataset\n            this._dataset = dataset;\n\n            // update the container properties\n            requestAnimationFrame(() => {\n                this.updateContainer();\n\n                // mark the component as ready\n                this._initialized = true;\n            });\n        });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    @HostListener('scroll')\n    updateContainer(): void {\n\n        if (this.itemSize === 0 && this._dataset.length > 0) {\n            this.itemSize = this.virtualFor.getHeight(this._dataset[0], this._dataset.length);\n        }\n\n        // calculate the total height of all the items\n        this._totalHeight = this._dataset.length * this.itemSize;\n\n        // get the actual height of the container element\n        const height = this.getContainerHeight();\n\n        // determine the number of items it takes to fill the container height (multiply by 2 to give us some buffer items)\n        const itemCount = Math.ceil((height / this.itemSize) * 2);\n\n        /** Determine the number of items we have as a top buffer */\n        const topBufferCount = Math.ceil((height / this.itemSize) * 0.5);\n\n        // get the scroll offset\n        const scrollOffset = this.getScrollOffset();\n\n        // determine the start index based on the scroll offset\n        const startIdx = Math.max(Math.floor(scrollOffset / this.itemSize) - Math.floor(topBufferCount), 0);\n\n        // determine the end index based on the start and the number of items to display\n        const endIdx = Math.min(startIdx + itemCount, this._dataset.length);\n\n        // update the range\n        this._range = { start: startIdx, end: endIdx };\n\n        // emit the new visible range\n        this._virtualScroll.range.next(this._range);\n    }\n\n    /** If cells are automatically getting their height detected you may want to update the size */\n    recalculateCellSize(): void {\n        this.itemSize = 0;\n    }\n\n    @HostListener('keydown', ['$event', '$event.keyCode'])\n    onKeydown(event: KeyboardEvent, keyCode: number): void {\n        if (!this._tabbableList) {\n            return;\n        }\n\n        switch (keyCode) {\n\n            case PAGE_UP:\n                this._tabbableList.focusKeyManager.setFirstItemActive();\n                event.preventDefault();\n                break;\n\n            case PAGE_DOWN:\n                this._tabbableList.focusKeyManager.setLastItemActive();\n                event.preventDefault();\n                break;\n\n            case HOME:\n                // ensure the QueryList doesn't do any updates until we have finished\n                this._tabbableList.shouldFocusOnChange = false;\n\n                // scroll to the top of the container\n                this._elementRef.nativeElement.scrollTop = 0;\n\n                // after the update the activate the first item\n                requestAnimationFrame(() => {\n                    this._tabbableList.focusKeyManager.setFirstItemActive();\n                    this._tabbableList.shouldFocusOnChange = true;\n                });\n\n                event.preventDefault();\n                break;\n\n            case END:\n                // ensure the QueryList doesn't do any updates until we have finished\n                this._tabbableList.shouldFocusOnChange = false;\n\n                // scroll to the bottom of the container\n                this._elementRef.nativeElement.scrollTop = this._elementRef.nativeElement.scrollHeight;\n\n                // after the update the activate the last item\n                requestAnimationFrame(() => {\n                    this._tabbableList.focusKeyManager.setLastItemActive();\n                    this._tabbableList.shouldFocusOnChange = true;\n                });\n\n                event.preventDefault();\n                break;\n\n        }\n    }\n\n    private getScrollOffset(): number {\n        return (this._elementRef.nativeElement as HTMLElement).scrollTop;\n    }\n\n    private getContainerHeight(): number {\n        return (this._elementRef.nativeElement as HTMLElement).clientHeight;\n    }\n\n}\n","<!-- Display the appropriate top spacer -->\n@if (_isTable) {\n  <tr class=\"ux-virtual-scroll-spacer\"\n    [style.height.px]=\"_totalHeight\"\n    [style.padding.px]=\"0\"\n    [style.margin.px]=\"0\"\n    [style.border]=\"'none'\"\n    >\n  </tr>\n}\n\n@if (_isList) {\n  <li class=\"ux-virtual-scroll-spacer\"\n    [style.height.px]=\"_totalHeight\"\n    [style.padding.px]=\"0\"\n    [style.margin.px]=\"0\"\n    [style.border]=\"'none'\"\n    >\n  </li>\n}\n\n@if (!_isTable && !_isList) {\n  <div class=\"ux-virtual-scroll-spacer\"\n    [style.height.px]=\"_totalHeight\"\n    [style.padding.px]=\"0\"\n    [style.margin.px]=\"0\"\n    [style.border]=\"'none'\"\n    >\n  </div>\n}\n\n\n<ng-content></ng-content>\n","import { Directive } from '@angular/core';\n\n@Directive({ \n    selector: '[uxVirtualScrollCell]' \n})\nexport class VirtualScrollCellDirective {\n\n}","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[uxVirtualScrollLoadButton]' \n})\nexport class VirtualScrollLoadButtonDirective { }","import { Directive } from '@angular/core';\n\n@Directive({ \n    selector: '[uxVirtualScrollLoading]' \n})\nexport class VirtualScrollLoadingDirective { }","import { AfterContentInit, Component, ContentChild, ElementRef, EventEmitter, HostListener, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../../../directives/resize/index';\nimport { VirtualScrollCellDirective } from './directives/virtual-scroll-cell.directive';\nimport { VirtualScrollLoadButtonDirective } from './directives/virtual-scroll-load-button.directive';\nimport { VirtualScrollLoadingDirective } from './directives/virtual-scroll-loading.directive';\n\n@Component({\n    selector: 'ux-virtual-scroll',\n    templateUrl: './virtual-scroll.component.html'\n})\nexport class VirtualScrollComponent<T> implements OnInit, AfterContentInit, OnChanges, OnDestroy {\n    readonly resizeService = inject(ResizeService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    /** Provide the collection of items to display */\n    @Input() collection: Observable<T[]> = Observable.create();\n\n    /** Specify the height of each cell */\n    @Input() cellHeight: number;\n\n    /** Indicate whether pages should be loaded on scroll or button click */\n    @Input() loadOnScroll: boolean = true;\n\n    /** Emit when we need to load another page */\n    @Output() loading: EventEmitter<number> = new EventEmitter<number>();\n\n    @ContentChild(VirtualScrollCellDirective, { read: TemplateRef, static: false }) cellTemplate: TemplateRef<void>;\n    @ContentChild(VirtualScrollLoadingDirective, { read: TemplateRef, static: false }) loadingIndicatorTemplate: TemplateRef<void>;\n    @ContentChild(VirtualScrollLoadButtonDirective, { read: TemplateRef, static: false }) loadButtonTemplate: TemplateRef<void>;\n\n    cells: BehaviorSubject<VirtualCell<T>[]> = new BehaviorSubject([]);\n    scrollTop: number = 0;\n    isLoading: boolean = false;\n    pageNumber: number = 0;\n    data: ReadonlyArray<T> = [];\n    loadingComplete: boolean = false;\n\n    private readonly _buffer: number = 5;\n    private _subscription: Subscription;\n    private _height: number;\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // watch for any future changes to size\n        this.resizeService.addResizeListener(this._elementRef.nativeElement).pipe(takeUntil(this._onDestroy))\n            .subscribe(event => this._height = event.height);\n    }\n\n    ngOnInit(): void {\n\n        if (!this.cellHeight) {\n            throw new Error('Virtual Scroll Component requires \"cellHeight\" property to be defined.');\n        }\n\n        // subscribe to the collection\n        this.setupObservable();\n\n        // load the first page of data\n        this.loadNextPage();\n    }\n\n    ngAfterContentInit(): void {\n        // re-render cells now that we can display any loading indicator or loading button\n        this.renderCells();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.collection && changes.collection.currentValue !== changes.collection.previousValue && !changes.collection.isFirstChange()) {\n            this.setupObservable();\n            this.reset();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._subscription.unsubscribe();\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    setupObservable(): void {\n\n        // if there is a current subscription, unsubscribe\n        if (this._subscription && this._subscription.unsubscribe) {\n            this._subscription.unsubscribe();\n        }\n\n        this._subscription = this.collection.subscribe(collection => {\n            this.data = [...this.data, ...collection];\n            this.renderCells();\n            this.isLoading = false;\n        }, null, () => {\n            this.loadingComplete = true;\n        });\n    }\n\n    @HostListener('scroll') renderCells(): void {\n        this.cells.next(this.getVisibleCells());\n\n        if (this.loadOnScroll && !this.isLoading && !this.loadingComplete) {\n            const remainingScroll = this._elementRef.nativeElement.scrollHeight - (this._elementRef.nativeElement.scrollTop + this._elementRef.nativeElement.clientHeight);\n\n            // if the current cells take up less than the height of the component then load the next page\n            if (remainingScroll <= this._elementRef.nativeElement.clientHeight) {\n                this.loadNextPage();\n            }\n        }\n    }\n\n    getVisibleCells(): VirtualCell<T>[] {\n\n        // store the initial element height\n        if (!this._height) {\n            this._height = this._elementRef.nativeElement.offsetHeight;\n        }\n\n        // perform some calculations\n        const scrollTop = this._elementRef.nativeElement.scrollTop;\n        const startCell = Math.floor(scrollTop / this.cellHeight);\n        const endCell = Math.ceil(this._height / this.cellHeight);\n\n        // we want to add some buffer cells on both the top and bottom of the visible list\n        const startBuffer = Math.max(0, startCell - this._buffer);\n        const endBuffer = startCell + (startCell - startBuffer) + Math.min(this.data.length, endCell + this._buffer);\n\n        // update the scroll position\n        this.scrollTop = (scrollTop - (scrollTop % this.cellHeight)) - ((startCell - startBuffer) * this.cellHeight);\n\n        // return a sublist of items visible on the screen\n        const cells = this.data.slice(startBuffer, endBuffer);\n\n        // now map these cells to a virtual cell interface\n        return cells.map((cell, index) => ({ data: cell, index: startBuffer + index }));\n    }\n\n    getTotalHeight(): number {\n        return this.cellHeight * this.data.length;\n    }\n\n    loadNextPage(): void {\n        this.isLoading = true;\n        this.loading.next(this.pageNumber);\n        this.pageNumber++;\n    }\n\n    reset(): void {\n\n        // reset all values\n        this.scrollTop = 0;\n        this.data = [];\n        this._height = undefined;\n        this.pageNumber = 0;\n        this.loadingComplete = false;\n\n        // set scroll position\n        this._elementRef.nativeElement.scrollTop = 0;\n\n        // clear the current cells\n        this.renderCells();\n\n        // reload first page\n        this.loadNextPage();\n    }\n}\n\nexport interface VirtualCell<T> {\n    data: T;\n    index: number;\n}","<div class=\"virtual-scroll-content-height\" [style.height.px]=\"getTotalHeight()\"></div>\n<div class=\"virtual-scroll-content\" [style.transform]=\"'translateY(' + scrollTop + 'px)'\">\n\n  <!-- Virtually Render Cells -->\n  @for (cell of cells | async; track cell) {\n    <ng-container *ngTemplateOutlet=\"cellTemplate; context: { cell: cell.data, index: cell.index }\"></ng-container>\n  }\n\n  <!-- Loading Indicator -->\n  @if (loadingIndicatorTemplate && isLoading) {\n    <ng-container [ngTemplateOutlet]=\"loadingIndicatorTemplate\"></ng-container>\n  }\n\n  <!-- Loading Button -->\n  @if (loadButtonTemplate && !loadOnScroll && !loadingComplete && !isLoading) {\n    <div class=\"virtual-scroll-load-button\" (click)=\"loadNextPage()\">\n      <ng-container *ngTemplateOutlet=\"loadButtonTemplate\"></ng-container>\n    </div>\n  }\n\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../../directives/accessibility/index';\nimport { ResizeModule } from '../../directives/resize/index';\nimport { VirtualForContainerComponent } from './virtual-for/virtual-for.component';\nimport { VirtualForDirective } from './virtual-for/virtual-for.directive';\nimport { VirtualScrollCellDirective } from './virtual-scroll/directives/virtual-scroll-cell.directive';\nimport { VirtualScrollLoadButtonDirective } from './virtual-scroll/directives/virtual-scroll-load-button.directive';\nimport { VirtualScrollLoadingDirective } from './virtual-scroll/directives/virtual-scroll-loading.directive';\nimport { VirtualScrollComponent } from './virtual-scroll/virtual-scroll.component';\n\n\nconst DECLARATIONS = [\n    VirtualScrollComponent,\n    VirtualScrollLoadingDirective,\n    VirtualScrollLoadButtonDirective,\n    VirtualScrollCellDirective,\n    VirtualForContainerComponent,\n    VirtualForDirective,\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule,\n        CommonModule,\n        ResizeModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS\n})\nexport class VirtualScrollModule { }\n","import { AfterViewInit, Directive, ElementRef, HostListener, inject, Renderer2 } from '@angular/core';\n\n@Directive({\n  selector: '[uxAutoGrow]'\n})\nexport class AutoGrowDirective implements AfterViewInit {\n  private readonly _elementRef = inject(ElementRef);\n\n  private readonly _renderer = inject(Renderer2);\n\n  constructor() {\n    // ensure this is a textarea or else throw error\n    if (this._elementRef.nativeElement.tagName.toLowerCase() !== 'textarea') {\n      throw new Error('uxAutoGrow directive can only be used on <textarea> elements.');\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.update();\n  }\n\n  @HostListener('input')\n  update(): void {\n\n    // perform sizing\n    this._renderer.setStyle(this._elementRef.nativeElement, 'overflowY', 'hidden');\n    this._renderer.setStyle(this._elementRef.nativeElement, 'height', 'auto');\n\n    // get the new total height and element height\n    const { scrollHeight } = this._elementRef.nativeElement;\n    const { maxHeight } = getComputedStyle(this._elementRef.nativeElement);\n\n    // determine what the maximum allowed height is\n    const maximum = !isNaN(parseFloat(maxHeight)) ? parseFloat(maxHeight) : Infinity;\n\n    // if there is a max height specifed we want to show the scrollbars\n    if (maximum < scrollHeight) {\n      this._renderer.setStyle(this._elementRef.nativeElement, 'overflowY', 'auto');\n      this._renderer.setStyle(this._elementRef.nativeElement, 'height', maximum + 'px');\n    } else {\n      this._renderer.setStyle(this._elementRef.nativeElement, 'height', scrollHeight + 'px');\n    }\n  }\n\n}","import { NgModule } from '@angular/core';\n\nimport { AutoGrowDirective } from './auto-grow.directive';\n\n@NgModule({\n    exports: [AutoGrowDirective],\n    declarations: [AutoGrowDirective]\n})\nexport class AutoGrowModule { }\n","import { AfterViewInit, Directive, ElementRef, HostBinding, inject, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';\nimport { ColorService } from '../../services/color/color.service';\nimport { ThemeColor } from '../../services/color/theme-color';\nimport { ContrastService } from '../accessibility/contrast-ratio/contrast.service';\n\nexport type BadgeVerticalPosition = 'above' | 'below';\n\nexport type BadgeHorizontalPosition = 'before' | 'after';\n\nexport type BadgeSize = 'small' | 'medium' | 'large';\n\n@Directive({\n    selector: '[uxBadge]',\n    exportAs: 'ux-badge',\n    host: {\n        class: 'ux-badge-container',\n        '[class.ux-badge-above]': 'badgeVerticalPosition === \"above\"',\n        '[class.ux-badge-below]': 'badgeVerticalPosition === \"below\"',\n        '[class.ux-badge-after]': 'badgeHorizontalPosition === \"after\"',\n        '[class.ux-badge-before]': 'badgeHorizontalPosition === \"before\"'\n    },\n})\nexport class BadgeDirective implements AfterViewInit, OnChanges, OnDestroy {\n    private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _colorService = inject(ColorService);\n\n    private readonly _contrastService = inject(ContrastService);\n\n    private readonly _className = 'ux-badge';\n\n    private readonly _darkColor: ThemeColor = ThemeColor.parse('#000');\n\n    private readonly _lightColor: ThemeColor = ThemeColor.parse('#FFF');\n\n    private _badgeElement: HTMLElement | undefined;\n\n    private _isNumber: boolean;\n\n    /**\n     * Directive parameter that sets the content of the badge\n     */\n    private _badgeDisplayContent: string | number;\n\n    @Input('uxBadge')\n    get badgeContent(): string | number {\n        return this._badgeContent;\n    }\n    set badgeContent(badge: string | number) {\n        if (typeof badge === 'number') {\n            this._badgeContent = badge;\n            this._isNumber = true;\n        } else if (typeof badge === 'string' && badge.replace(/ /g, '').length > 0) {\n            const subject = badge.trim();\n            this._isNumber = /^\\d+$/.test(subject);\n            this._badgeContent = subject;\n        } else {\n            this._badgeContent = null;\n        }\n    }\n\n    private _badgeContent: string | number = null;\n\n    /**\n     * Define the badge background color\n     */\n    @Input()\n    get badgeColor(): string {\n        return this._badgeColor.toRgba();\n    }\n    set badgeColor(color: string) {\n        this._badgeColor = this.parseThemeColor(color);\n    }\n    private _badgeColor: ThemeColor = this._darkColor;\n\n    /**\n     * Define the badge border color - if unset there is no border\n     */\n    @Input()\n    get badgeBorderColor(): string {\n        return this._badgeBorderColor.toRgba();\n    }\n    set badgeBorderColor(color: string) {\n        this._badgeBorderColor = this.parseThemeColor(color);\n    }\n    private _badgeBorderColor: ThemeColor;\n\n    /**\n     * Set the badge vertical position in relation to the parent element\n     */\n    @Input()\n    badgeVerticalPosition: BadgeVerticalPosition = 'above';\n\n    /**\n     * Set the badge horizontal position in relation to the parent element\n     */\n    @Input()\n    badgeHorizontalPosition: BadgeHorizontalPosition = 'after';\n\n    /**\n     * Set if the badge overlaps parent content or flows after parent\n     */\n    @HostBinding('class.ux-badge-overlap')\n    @Input()\n    badgeOverlap: boolean = false;\n\n    /**\n     * Max value that can be displayed - if string measures no. of characters,\n     * if number checks against exact number not no. of characters\n     */\n    @Input() badgeMaxValue: number;\n\n    /**\n     * Badge size (based on CSS styles)\n     */\n    @Input()\n    badgeSize: BadgeSize = 'medium';\n\n    /**\n     * Hide badge from view\n     */\n    @HostBinding('class.ux-badge-hidden')\n    @Input()\n    badgeHidden: boolean = false;\n\n    ngAfterViewInit(): void {\n        this._badgeElement = this._renderer.createElement('span');\n        this._renderer.addClass(this._badgeElement, this._className);\n        this._renderer.setStyle(this._badgeElement, 'display', 'none');\n        this.setBadgeColor();\n        this.setBadgeBorderColor();\n        this.setBadgeSize();\n        this.setContent(this._badgeContent, this.badgeMaxValue);\n        this._renderer.appendChild(this._element.nativeElement, this._badgeElement);\n        this._renderer.removeStyle(this._badgeElement, 'display');\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // if the badge is visible set changed values\n        if (!this._badgeElement) {\n            return;\n        }\n\n        // set badge content and get display friendly version of text based on max length and type of val\n        if (changes.badgeContent || changes.badgeMaxValue) {\n            const finalText: string = (changes.badgeContent && changes.badgeContent.currentValue) || this.badgeContent || null;\n            const maxValue: number = (changes.badgeMaxValue && changes.badgeMaxValue.currentValue) || this.badgeMaxValue || null;\n            this.setContent(finalText, maxValue);\n        }\n\n        // set the badge color\n        if (changes.badgeColor && changes.badgeColor.currentValue !== changes.badgeColor.previousValue) {\n            this.setBadgeColor();\n        }\n\n        // set the badge border color\n        if (changes.badgeBorderColor && changes.badgeBorderColor.currentValue !== changes.badgeBorderColor.previousValue) {\n            this.setBadgeBorderColor();\n        }\n\n        // set badge size\n        if (changes.badgeSize && changes.badgeSize.currentValue !== changes.badgeSize.previousValue) {\n            this.setBadgeSize(changes.badgeSize.previousValue);\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this._renderer.destroyNode) {\n            this._renderer.destroyNode(this._badgeElement);\n        }\n    }\n\n    private setContent(content: string | number | null, maxValue: number): void {\n        if (content && maxValue && maxValue > 0) {\n\n            if (this._isNumber) {\n                const numericValue = typeof content === 'number' ? content : parseInt(content);\n\n                if (numericValue > maxValue) {\n                    content = `${maxValue}+`;\n                }\n            } else if (typeof content === 'string' && content.length > maxValue) {\n                content = `${content.substr(0, maxValue)}…`;\n            }\n        }\n\n        this._badgeDisplayContent = content;\n        this._badgeElement.textContent = this._badgeDisplayContent?.toString();\n    }\n\n    private setBadgeColor(): void {\n        if (this._badgeColor) {\n            this._renderer.setStyle(this._badgeElement, 'background-color', this._badgeColor.toRgba());\n        } else {\n            this._renderer.removeStyle(this._badgeElement, 'background-color');\n        }\n\n        this._renderer.setStyle(this._badgeElement, 'color', this.determineContentTextColor().toRgba());\n    }\n\n    private setBadgeBorderColor(): void {\n        if (this._badgeBorderColor) {\n            this._renderer.setStyle(this._badgeElement, 'border-color', this._badgeBorderColor.toRgba());\n        } else {\n            this._renderer.removeStyle(this._badgeElement, 'border-color');\n        }\n\n        this._renderer.setStyle(this._badgeElement, 'background-clip', this._badgeBorderColor ? 'padding-box' : 'border-box');\n    }\n\n    private setBadgeSize(previousSize?: string): void {\n        if (previousSize) {\n            this._renderer.removeClass(this._badgeElement, `ux-badge-${previousSize}`);\n        }\n\n        this._renderer.addClass(this._badgeElement, `ux-badge-${this.badgeSize}`);\n    }\n\n    private determineContentTextColor(): ThemeColor {\n        return this._badgeColor\n            ? ThemeColor.parse(\n                this._contrastService.getContrastColor(this._badgeColor, this._lightColor, this._darkColor).toRgba()\n            )\n            : this._lightColor;\n    }\n\n    private parseThemeColor(color: string): ThemeColor {\n        if (!color) {\n            return null;\n        }\n\n        return this._colorService.colorExists(color) ?\n            ThemeColor.parse(this._colorService.resolve(color)) :\n            ThemeColor.parse(color);\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../accessibility/index';\nimport { ColorServiceModule } from './../../services/color/color.module';\nimport { BadgeDirective } from './badge.directive';\n\n@NgModule({\n    imports: [ColorServiceModule, AccessibilityModule],\n    exports: [BadgeDirective],\n    declarations: [BadgeDirective],\n})\nexport class BadgeModule {}\n","import { Directive, ElementRef, EventEmitter, HostBinding, inject, Input, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ResizeService } from '../resize/index';\n\n@Directive({\n    selector: '[uxFixedHeaderTable]',\n    exportAs: 'ux-fixed-header-table'\n})\nexport class FixedHeaderTableDirective<T> implements OnInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _resizeService = inject(ResizeService);\n\n    /** Allow dataset changes to trigger re-layout */\n    @Input() set dataset(_dataset: ReadonlyArray<T>) {\n        requestAnimationFrame(() => this.setLayout());\n    }\n\n    /** Define the table height */\n    @Input() tableHeight: number | string;\n\n    /** Emit when the table tries to load more data */\n    @Output() tablePaging: EventEmitter<number> = new EventEmitter<number>();\n\n\n    /** Apply a class whenever the table has scrolled */\n    @HostBinding('class.ux-fixed-header-table-scrolled') _hasScrolled: boolean = false;\n\n    /** Store the table head element */\n    private _tableHead: HTMLTableSectionElement;\n\n    /** Store the table body element */\n    private _tableBody: HTMLTableSectionElement;\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n\n        // add class to the table\n        this._renderer.addClass(this._elementRef.nativeElement, 'ux-fixed-header-table');\n\n        // locate the important elements\n        this._tableHead = this._elementRef.nativeElement.querySelector('thead') as HTMLTableSectionElement;\n        this._tableBody = this._elementRef.nativeElement.querySelector('tbody') as HTMLTableSectionElement;\n\n        // bind to scroll events on the table body\n        this._renderer.listen(this._tableBody, 'scroll', this.onScroll.bind(this));\n\n        // resize the table header to account for scrollbar\n        this.setLayout();\n\n        // if a resize occurs perform a relayout (this can be useful when displaying tables in modals)\n        this._resizeService.addResizeListener(this._elementRef.nativeElement).pipe(takeUntil(this._onDestroy))\n            .subscribe(() => this.setLayout());\n\n        // trigger the loading of the first page\n        this.tablePaging.emit();\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /**\n     * Get the table element\n     * Primarily used by column width directive\n     */\n    getTable(): HTMLTableElement {\n        return this._elementRef.nativeElement;\n    }\n\n    /**\n     * Update the size of the table header to account for the scrollbar.\n     * This is important to keep the columns aligned\n     */\n    setLayout(): void {\n\n        if (!this._tableBody || !this._tableHead) {\n            return;\n        }\n\n        // calculate the size of the scrollbar\n        const scrollbar = this._tableBody.offsetWidth - this._tableBody.clientWidth;\n\n        // add padding to the header to account for this\n        this._renderer.setStyle(this._tableHead, 'padding-right', scrollbar + 'px');\n\n        // set the desired height of the table body\n        this._renderer.setStyle(this._tableBody, 'height', typeof this.tableHeight === 'number' ? `${this.tableHeight}px` : this.tableHeight);\n    }\n\n    /**\n     * Handle scroll events\n     */\n    private onScroll(): void {\n\n        // determine if we are scrolled to the bottom and if so load the next page\n        const scrollTop = this._tableBody.scrollTop;\n        const scrollHeight = this._tableBody.scrollHeight - this._tableBody.offsetHeight;\n        const delta = Math.max(scrollTop, scrollHeight) - Math.min(scrollTop, scrollHeight);\n\n        // its possible for the difference to be a value < 1 when we are at the bottom. Account for this:\n        if (delta < 1) {\n            this.tablePaging.emit();\n        }\n\n        // update the class based on the scroll position\n        this._hasScrolled = (scrollTop > 0);\n    }\n\n}\n","import { NgModule } from '@angular/core';\nimport { ResizeModule } from '../resize/index';\nimport { FixedHeaderTableDirective } from './fixed-header-table.directive';\n\n@NgModule({\n    imports: [\n        ResizeModule\n    ],\n    exports: [\n        FixedHeaderTableDirective\n    ],\n    declarations: [\n        FixedHeaderTableDirective\n    ]\n})\nexport class FixedHeaderTableModule { }\n","import { AutofillMonitor } from '@angular/cdk/text-field';\nimport { Directive, ElementRef, HostBinding, inject, Input, OnChanges, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n    selector: '[uxFloatLabel]',\n    host: {\n        'class': 'ux-float-label'\n    }\n})\nexport class FloatLabelDirective<T = string> implements OnInit, OnChanges, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _renderer = inject(Renderer2);\n\n    private readonly _autofillMonitor = inject(AutofillMonitor);\n\n    @Input('uxFloatLabel')\n    set input(input: HTMLInputElement) {\n\n        // remove any previous autofill subscriptions\n        if (this._input) {\n            this._autofillMonitor.stopMonitoring(this._input);\n        }\n\n        this._subscription.unsubscribe();\n\n        this._input = input;\n\n        // if the input is null then don't need to subscribe to autofillMonitor\n        if (!input) {\n            return;\n        }\n\n        // create a new autofillMonitor subscription\n        this._subscription = this._autofillMonitor.monitor(input).subscribe(event => {\n            if (!this.raised && event.isAutofilled) {\n                this.raised = true;\n            }\n            if (this.raised && !event.isAutofilled && !this.hasText()) {\n                this.raised = false;\n            }\n        });\n    }\n\n    get input(): HTMLInputElement {\n        return this._input;\n    }\n\n    @Input()\n    value: T;\n\n    @Input()\n    mode: 'focus' | 'input' = 'focus';\n\n    @HostBinding('class.ux-float-label-raised')\n    raised: boolean = false;\n\n\n    private _input: HTMLInputElement;\n    private _focused = false;\n     \n    private readonly _eventHandles: any[] = [];\n    private _subscription = new Subscription();\n\n    ngOnInit(): void {\n        this._eventHandles.push(\n            this._renderer.listen(this.input, 'focus', this.inputFocus.bind(this)),\n            this._renderer.listen(this.input, 'blur', this.inputBlur.bind(this)),\n            this._renderer.listen(this.input, 'input', this.inputChange.bind(this))\n        );\n\n        // Check initial input value\n        this.raised = this.hasText();\n\n        // Ensure that the `for` attribute is set\n        if (!this._elementRef.nativeElement.getAttribute('for') && this.input.getAttribute('id')) {\n            this._renderer.setAttribute(this._elementRef.nativeElement, 'for', this.input.getAttribute('id'));\n        }\n    }\n\n    ngOnChanges(): void {\n        if (!(this.mode === 'focus' && this._focused)) {\n            this.raised = this.hasText();\n        }\n    }\n\n    ngOnDestroy(): void {\n        // Unsubscribe event handles\n        this._eventHandles.forEach((eventHandle) => eventHandle());\n        this._autofillMonitor.stopMonitoring(this._input);\n        this._subscription.unsubscribe();\n    }\n\n    private hasText(): boolean {\n        if (this.value === undefined) {\n            return !!this.input.value;\n        }\n        return !!this.value;\n    }\n\n    private inputFocus(): void {\n        if (this.mode === 'focus') {\n            this._focused = true;\n            this.raised = true;\n        }\n    }\n\n    private inputBlur(): void {\n        if (this.mode === 'focus') {\n            this._focused = false;\n            this.raised = this.hasText();\n        }\n    }\n\n    private inputChange(): void {\n        if (this.mode === 'input') {\n            this.raised = this.hasText();\n        }\n    }\n}","import { NgModule } from '@angular/core';\n\nimport { FloatLabelDirective } from './float-label.directive';\n\n@NgModule({\n    imports: [],\n    exports: [FloatLabelDirective],\n    declarations: [FloatLabelDirective],\n    providers: [],\n})\nexport class FloatLabelModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class HelpCenterService {\n\n    items: BehaviorSubject<HelpCenterItem[]> = new BehaviorSubject<HelpCenterItem[]>([]);\n\n    registerItem(item: HelpCenterItem): void {\n\n        // get the current items\n        const items = this.items.getValue();\n\n        // add the new item to the list\n        items.push(item);\n\n        // update the observable\n        this.items.next(items);\n    }\n\n    unregisterItem(item: HelpCenterItem): void {\n\n        // get the current items\n        let items = this.items.getValue();\n\n        // remove the item being unregistered\n        items = items.filter(itm => itm !== item);\n\n        // update the observable\n        this.items.next(items);\n    }\n}\n\nexport interface HelpCenterItem {\n    icon?: string;\n    title: string;\n    select?: () => void;\n}\n","import { Directive, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { HelpCenterItem, HelpCenterService } from './help-center.service';\n\n@Directive({ selector: '[uxHelpCenterItem]' })\nexport class HelpCenterItemDirective implements OnInit, OnDestroy {\n    private readonly _helpCenterService = inject(HelpCenterService);\n\n    @Input() uxHelpCenterItem: HelpCenterItem;\n\n    ngOnInit(): void {\n\n        // register the item in the service\n        this._helpCenterService.registerItem(this.uxHelpCenterItem);\n    }\n\n    ngOnDestroy(): void {\n        // remove this item when it is destroyed\n        this._helpCenterService.unregisterItem(this.uxHelpCenterItem);\n    }\n}","import { NgModule } from '@angular/core';\nimport { HelpCenterItemDirective } from './help-center-item.directive';\n\n@NgModule({\n    exports: [\n        HelpCenterItemDirective\n    ],\n    declarations: [\n        HelpCenterItemDirective\n    ]\n})\nexport class HelpCenterModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { HoverActionDirective } from './hover-action.directive';\n\n@Injectable()\nexport class HoverActionService {\n\n    active: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n    private _focused: boolean = false;\n    private _hovered: boolean = false;\n    private _actions: HoverActionDirective[] = [];\n\n    register(action: HoverActionDirective): void {\n        this._actions.push(action);\n    }\n\n    unregister(action: HoverActionDirective): void {\n        this._actions = this._actions.filter(actn => actn !== action);\n    }\n\n    setFocusState(focus: boolean): void {\n        this._focused = focus;\n        this.updateVisibility();\n    }\n\n    setHoverState(hover: boolean): void {\n        this._hovered = hover;\n        this.updateVisibility();\n    }\n\n    updateVisibility(): void {\n        this.active.next(this._focused || this._hovered || this.actionHasFocus());\n    }\n\n    private actionHasFocus(): boolean {\n        return !!this.getFocusedAction();\n    }\n\n    private getFocusedAction(): HoverActionDirective {\n        return this._actions.find(action => action.focused);\n    }\n}","import { Directive, ElementRef, HostBinding, HostListener, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ManagedFocusContainerService } from '../accessibility/managed-focus-container/managed-focus-container.service';\nimport { HoverActionService } from './hover-action.service';\n\n@Directive({\n    selector: '[uxHoverActionContainer]',\n    providers: [HoverActionService]\n})\nexport class HoverActionContainerDirective implements OnInit, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _managedFocusContainerService = inject(ManagedFocusContainerService);\n\n    private readonly _hoverActionService = inject(HoverActionService);\n\n    @Input()\n    @HostBinding('tabindex')\n    tabindex: number = 0;\n\n    @HostBinding('class.hover-action-container-active')\n    active: boolean = false;\n\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n\n        // Watch for focus within the container element and manage tabindex of descendants\n        this._managedFocusContainerService.register(this._elementRef.nativeElement, this);\n\n        // Track focus and update state for the child directives\n        this._managedFocusContainerService.hasFocus(this._elementRef.nativeElement)\n            .pipe(takeUntil(this._onDestroy)).subscribe(active => {\n                this.active = active;\n                this._hoverActionService.setFocusState(active);\n            });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        this._managedFocusContainerService.unregister(this._elementRef.nativeElement, this);\n    }\n\n    @HostListener('mouseenter') onHover(): void {\n        this._hoverActionService.setHoverState(true);\n    }\n\n    @HostListener('mouseleave') onLeave(): void {\n        this._hoverActionService.setHoverState(false);\n    }\n}\n","import { Directive, ElementRef, HostBinding, HostListener, inject, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FocusIndicator, FocusIndicatorService } from '../accessibility/index';\nimport { HoverActionService } from './hover-action.service';\n\n@Directive({\n    selector: '[uxHoverAction]'\n})\nexport class HoverActionDirective implements OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _hoverActionService = inject(HoverActionService);\n\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n\n    @Input()\n    @HostBinding('tabindex')\n    tabindex: number = 0;\n\n    @HostBinding('class.hover-action-active')\n    active: boolean = false;\n\n    @HostBinding('class.hover-action-focused')\n    focused: boolean = false;\n\n    private readonly _focusIndicator: FocusIndicator;\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n\n        // create the focus indicator\n        this._focusIndicator = this.focusIndicatorService.monitor(this._elementRef.nativeElement);\n\n        // register the action\n        this._hoverActionService.register(this);\n\n        // watch for changes to the activeness of the container\n        this._hoverActionService.active.pipe(takeUntil(this._onDestroy)).subscribe(active => this.active = active);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n\n        this._hoverActionService.unregister(this);\n        this._focusIndicator.destroy();\n    }\n\n    focus(): void {\n        this._elementRef.nativeElement.focus();\n    }\n\n    @HostListener('focus') onFocus(): void {\n        this.focused = true;\n        this._hoverActionService.updateVisibility();\n    }\n\n    @HostListener('blur') onBlur(): void {\n        this.focused = false;\n        this._hoverActionService.updateVisibility();\n    }\n}","import { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../accessibility/index';\nimport { HoverActionContainerDirective } from './hover-action-container.directive';\nimport { HoverActionDirective } from './hover-action.directive';\n\nconst DECLARATIONS = [\n    HoverActionDirective,\n    HoverActionContainerDirective\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS\n})\nexport class HoverActionModule { }\n","import { Directive, EmbeddedViewRef, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n    selector: '[uxLayoutSwitcherItem]'\n})\nexport class LayoutSwitcherItemDirective {\n    private readonly _templateRef = inject<TemplateRef<void>>(TemplateRef);\n\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    @Input('uxLayoutSwitcherItem') private readonly _config: LayoutSwitcherItem;\n\n    private _embeddedView: EmbeddedViewRef<void>;\n\n    getLayout(): TemplateRef<void> {\n        return this._templateRef;\n    }\n\n    getConfig(): LayoutSwitcherItem {\n        return this._config;\n    }\n\n    activate(): void {\n        this._embeddedView = this._viewContainerRef.createEmbeddedView(this._templateRef);\n    }\n\n    deactivate(): void {\n        const index = this._viewContainerRef.indexOf(this._embeddedView);\n        this._viewContainerRef.remove(index);\n        this._embeddedView = null;\n    }\n\n}\n\nexport interface LayoutSwitcherItem {\n    group?: string;\n    minWidth?: number;\n    maxWidth?: number;\n}","import { AfterContentInit, ContentChildren, Directive, ElementRef, inject, Input, OnChanges, QueryList, SimpleChanges, ViewContainerRef } from '@angular/core';\nimport { ResizeService } from '../resize/index';\nimport { LayoutSwitcherItemDirective } from './layout-switcher-item.directive';\n\n@Directive({\n    selector: '[uxLayoutSwitcher]'\n})\nexport class LayoutSwitcherDirective implements AfterContentInit, OnChanges {\n    readonly resizeService = inject(ResizeService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    @Input() group: string;\n    @ContentChildren(LayoutSwitcherItemDirective) private readonly _layouts: QueryList<LayoutSwitcherItemDirective>;\n\n    private _width: number;\n    private _activeLayout: LayoutSwitcherItemDirective;\n\n    constructor() {\n\n        // watch for changes to the container size\n        this.resizeService.addResizeListener(this._elementRef.nativeElement).subscribe(event => {\n            this._width = event.width;\n\n            // render the appropriate layout\n            this.updateActiveLayout();\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n\n        // if the active group has changed then render the appropriate layout\n        if (changes.group.currentValue !== changes.group.previousValue) {\n            this.updateActiveLayout();\n        }\n    }\n\n    getActiveLayout(): LayoutSwitcherItemDirective | null {\n\n        // if there are currently no layouts then do nothing\n        if (!this._layouts) {\n            return null;\n        }\n\n        // otherwise find layouts that match the active group and that meet the constraints\n        return this._layouts.filter(layout => this.group === layout.getConfig().group).find(layout => {\n\n            const minWidth = layout.getConfig().minWidth || 0;\n            const maxWidth = layout.getConfig().maxWidth || Infinity;\n\n            return this._width >= minWidth && this._width < maxWidth;\n        });\n    }\n\n    updateActiveLayout(): void {\n\n        // get the layout that should be shown\n        const layout = this.getActiveLayout();\n\n        // check if we are currently showing the layout\n        if (this._activeLayout === layout) {\n            return;\n        }\n\n        // remove the current layout\n        if (this._activeLayout) {\n            this._activeLayout.deactivate();\n        }\n\n        // store the new active layout\n        this._activeLayout = layout;\n\n        // if there is an active layout then activate\n        if (this._activeLayout) {\n            this._activeLayout.activate();\n        }\n    }\n\n    ngAfterContentInit(): void {\n\n        // store the initial current element width\n        this._width = this._elementRef.nativeElement.offsetWidth;\n\n        // render the appropriate layout - need a delay as Angular doesn't like changes like this in these lifecycle hooks\n        requestAnimationFrame(this.updateActiveLayout.bind(this));\n    }\n}","import { NgModule } from '@angular/core';\nimport { LayoutSwitcherDirective } from './layout-switcher.directive';\nimport { LayoutSwitcherItemDirective } from './layout-switcher-item.directive';\nimport { ResizeModule } from '../resize/index';\n\nconst DECLARATIONS = [\n    LayoutSwitcherDirective,\n    LayoutSwitcherItemDirective\n];\n\n@NgModule({\n    imports: [\n        ResizeModule\n    ],\n    exports: DECLARATIONS,\n    declarations: DECLARATIONS,\n    providers: [],\n})\nexport class LayoutSwitcherModule { }\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { MenuNavigationItemDirective } from './menu-navigation-item.directive';\n\n@Injectable()\nexport class MenuNavigationService {\n\n    /** Store a list of items that belong to this menu */\n    menuItems: ReadonlyArray<MenuNavigationItemDirective> = [];\n\n    /** Store the current active menu item */\n    active$ = new BehaviorSubject<MenuNavigationItemDirective>(null);\n\n    /** Add an item to this menu */\n    register(menuItem: MenuNavigationItemDirective): void {\n        this.menuItems = [...this.menuItems, menuItem];\n    }\n\n    /** Remove an item from the list of menu items */\n    unregister(menuItem: MenuNavigationItemDirective): void {\n        this.menuItems = this.menuItems.filter(_menuItem => _menuItem !== menuItem);\n    }\n}","import { Directive, ElementRef, EventEmitter, inject, OnDestroy, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { FocusIndicator, FocusIndicatorService } from '../accessibility/index';\nimport { MenuNavigationService } from './menu-navigation.service';\n\n@Directive({\n    selector: '[uxMenuNavigationItem]'\n})\nexport class MenuNavigationItemDirective implements OnDestroy {\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n\n    private readonly _elementRef = inject(ElementRef);\n\n    private readonly _menuNavigationService = inject(MenuNavigationService);\n\n    /** Emit when this menu is activated */\n    @Output() activated = new EventEmitter<void>();\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    /** Keep a reference to the focus indicator */\n    private readonly _focusIndicator: FocusIndicator;\n\n    constructor() {\n\n        // register this item with the menu - this allows for nested menus as we each uxMenuNavigation will create its own service\n        this._menuNavigationService.register(this);\n\n        // create the focus indicator\n        this._focusIndicator = this.focusIndicatorService.monitor(this._elementRef.nativeElement, { programmaticFocusIndicator: true, checkChildren: false });\n\n        /** Subscribe to the current active index */\n        this._menuNavigationService.active$.pipe(takeUntil(this._onDestroy), filter(item => item === this)).subscribe(() => this.setActive());\n    }\n\n    ngOnDestroy(): void {\n        this._menuNavigationService.unregister(this);\n        this._onDestroy.unsubscribe();\n        this._focusIndicator.destroy();\n    }\n\n    setActive(): void {\n        this._elementRef.nativeElement.focus();\n        this.activated.emit();\n    }\n}","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, ElementRef, EventEmitter, HostListener, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { FocusIndicator, FocusIndicatorService } from '../accessibility/index';\n\n@Directive({\n    selector: '[uxMenuNavigationToggle]',\n    exportAs: 'uxMenuNavigationToggle'\n})\nexport class MenuNavigationToggleDirective implements OnDestroy {\n    readonly elementRef = inject(ElementRef);\n\n    readonly focusIndicatorService = inject(FocusIndicatorService);\n\n    /** Define if the menu is open */\n    @Input()\n    get menuOpen(): boolean {\n        return this._menuOpen;\n    }\n\n    set menuOpen(value: boolean) {\n        this._menuOpen = value;\n        this.menuOpenChange.emit(value);\n    }\n\n    /** Define the position the menu appears relative to the button */\n    @Input() menuPosition: 'top' | 'right' | 'bottom' | 'left' = 'bottom';\n\n    /** Emit when the menu open state changes */\n    @Output() menuOpenChange = new EventEmitter<boolean>();\n\n    /** Emits whenever a key that opens the menu is pressed */\n    @Output() keyEnter = new EventEmitter<void>();\n\n    /** Store the current menu open state */\n    private _menuOpen: boolean;\n\n    /** Store a reference to the focus indicator */\n    private readonly _focusIndicator: FocusIndicator;\n\n    constructor() {\n        this._focusIndicator = this.focusIndicatorService.monitor(this.elementRef.nativeElement);\n    }\n\n    ngOnDestroy(): void {\n        this._focusIndicator.destroy();\n    }\n\n    focus(origin?: FocusOrigin): void {\n        this._focusIndicator.focus(origin);\n    }\n\n    @HostListener('keydown', ['$event'])\n    keydownHandler(event: KeyboardEvent): void {\n\n        if (this.isKeyMatch(event.which)) {\n\n            // Open the menu\n            this.menuOpen = true;\n\n            // Allow the menu to init, then send the event to give it focus\n            setTimeout(() => this.keyEnter.emit());\n\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    private isKeyMatch(key: number): boolean {\n        switch (key) {\n            case ENTER:\n            case SPACE:\n                return true;\n\n            case UP_ARROW:\n                return this.menuPosition === 'top';\n\n            case DOWN_ARROW:\n                return this.menuPosition === 'bottom';\n\n            case LEFT_ARROW:\n                return this.menuPosition === 'left';\n\n            case RIGHT_ARROW:\n                return this.menuPosition === 'right';\n        }\n\n        return false;\n    }\n}","import { DOWN_ARROW, END, ESCAPE, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, EventEmitter, HostListener, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MenuNavigationItemDirective } from './menu-navigation-item.directive';\nimport { MenuNavigationToggleDirective } from './menu-navigation-toggle.directive';\nimport { MenuNavigationService } from './menu-navigation.service';\n\n@Directive({\n    selector: '[uxMenuNavigation]',\n    exportAs: 'uxMenuNavigation',\n    providers: [MenuNavigationService]\n})\nexport class MenuNavigationDirective implements OnInit, OnDestroy {\n    private readonly _menuNavigationService = inject(MenuNavigationService);\n\n    /** Define the menu toggle button */\n    @Input() toggleButton: MenuNavigationToggleDirective;\n\n    /** Define the position of the toggle button relative to the menu */\n    @Input() toggleButtonPosition: 'top' | 'right' | 'bottom' | 'left' = 'top';\n\n    /** Emit when the menu is no longer focused */\n    @Output() navigatedOut = new EventEmitter<KeyboardEvent>();\n\n    /** Get the index of the currently active item */\n    get activeIndex(): number {\n        return this.menuItems.indexOf(this._menuNavigationService.active$.value);\n    }\n\n    // get the list of menu items\n    get menuItems(): ReadonlyArray<MenuNavigationItemDirective> {\n        return this._menuNavigationService.menuItems;\n    }\n\n    /** Determine if the menu currently has focus */\n    private _isFocused: boolean = false;\n\n    /** Unsubscribe from all observables on destroy */\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        if (this.toggleButton) {\n            this.toggleButton.keyEnter.pipe(takeUntil(this._onDestroy))\n                .subscribe(() => this.focusFirst());\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    focusFirst(): void {\n        this.moveFirst();\n    }\n\n    @HostListener('focusin')\n    onFocusIn(): void {\n        this._isFocused = true;\n    }\n\n    @HostListener('focusout')\n    onFocusOut(): void {\n        this._isFocused = false;\n    }\n\n    @HostListener('keydown', ['$event'])\n    keydownHandler(event: KeyboardEvent): void {\n\n        // Only handle events when focus in within the list of menu items\n        if (this._isFocused === false) {\n            return;\n        }\n\n        let handled = false;\n\n        switch (event.which) {\n\n            case UP_ARROW:\n                this.movePrevious(event);\n                handled = true;\n                break;\n\n            case DOWN_ARROW:\n                this.moveNext(event);\n                handled = true;\n                break;\n\n            case LEFT_ARROW:\n                if (this.toggleButtonPosition === 'left') {\n                    this.moveToToggleButton(event);\n                    handled = true;\n                }\n                break;\n\n            case RIGHT_ARROW:\n                if (this.toggleButtonPosition === 'right') {\n                    this.moveToToggleButton(event);\n                    handled = true;\n                }\n                break;\n\n            case HOME:\n                this.moveFirst();\n                handled = true;\n                break;\n\n            case END:\n                this.moveLast();\n                handled = true;\n                break;\n\n            case ESCAPE:\n                this.moveToToggleButton(event);\n                handled = true;\n                break;\n        }\n\n        if (handled) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    private moveNext(event: KeyboardEvent): void {\n\n        // Do nothing if there's no active menu item registered\n        if (this.activeIndex < 0) {\n            return;\n        }\n\n        const nextIndex = this.activeIndex + 1;\n        if (nextIndex < this.menuItems.length) {\n\n            // Activate the next menu item\n            // (uxMenuNavigationItem subscribes to this and applies focus if it matches)\n            this._menuNavigationService.active$.next(this.menuItems[nextIndex]);\n\n        } else {\n\n            // Check if focus went out of bounds in the direction of the origin toggle button\n            if (this.toggleButtonPosition === 'bottom') {\n                this.moveToToggleButton(event);\n            }\n        }\n    }\n\n    private movePrevious(event: KeyboardEvent): void {\n\n        // Do nothing if there's no active menu item registered\n        if (this.activeIndex < 0) {\n            return;\n        }\n\n        const nextIndex = this.activeIndex - 1;\n        if (nextIndex >= 0) {\n\n            // Activate the previous menu item\n            // (uxMenuNavigationItem subscribes to this and applies focus if it matches)\n            this._menuNavigationService.active$.next(this.menuItems[nextIndex]);\n\n        } else {\n\n            // Check if focus went out of bounds in the direction of the origin toggle button\n            if (this.toggleButtonPosition === 'top') {\n                this.moveToToggleButton(event);\n            }\n        }\n    }\n\n    private moveFirst(): void {\n        if (this.menuItems.length > 0) {\n            this._menuNavigationService.active$.next(this.menuItems[0]);\n        }\n    }\n\n    private moveLast(): void {\n        if (this.menuItems.length > 0) {\n            this._menuNavigationService.active$.next(this.menuItems[this.menuItems.length - 1]);\n        }\n    }\n\n    private moveToToggleButton(event: KeyboardEvent): void {\n        if (this.toggleButton) {\n            this.toggleButton.focus('keyboard');\n            this.toggleButton.menuOpen = false;\n        }\n\n        this.navigatedOut.emit(event);\n    }\n}","import { NgModule } from '@angular/core';\nimport { AccessibilityModule } from '../accessibility/index';\nimport { MenuNavigationItemDirective } from './menu-navigation-item.directive';\nimport { MenuNavigationToggleDirective } from './menu-navigation-toggle.directive';\nimport { MenuNavigationDirective } from './menu-navigation.directive';\n\n\nconst EXPORTS = [\n    MenuNavigationDirective,\n    MenuNavigationItemDirective,\n    MenuNavigationToggleDirective\n];\n\n@NgModule({\n    imports: [\n        AccessibilityModule\n    ],\n    exports: EXPORTS,\n    declarations: EXPORTS,\n})\nexport class MenuNavigationModule { }\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n  selector: '[uxOverflowObserver], [uxOverflowHorizontalObserver], [uxOverflowVerticalObserver]',\n  exportAs: 'ux-overflow-observer'\n})\nexport class OverflowDirective implements OnInit, AfterViewInit, OnDestroy {\n  private readonly _elementRef = inject(ElementRef);\n\n  /** Allow a observable to be used to check for overflow */\n  @Input() trigger: Observable<void>;\n\n  /** Allow overflow to be within a range before emitting */\n  @Input() tolerance: number = 0;\n\n  /** Emit when there is a change to the overflow state - horizontal or vertical */\n  @Output() uxOverflowObserver = new EventEmitter<boolean>();\n\n  /** Emit when there is a change to overflow on the horizontal axis */\n  @Output() uxOverflowHorizontalObserver = new EventEmitter<boolean>();\n\n  /** Emit when there is a change to overflow on the vertical axis */\n  @Output() uxOverflowVerticalObserver = new EventEmitter<boolean>();\n\n  /** Store the overflow state on both axis */\n  private _state = { horizontalOverflow: false, verticalOverflow: false };\n\n  /** Unsubscribe from all the observables */\n  private readonly _onDestroy = new Subject<void>();\n\n  /** Set up the trigger if specified */\n  ngOnInit(): void {\n    if (this.trigger) {\n      this.trigger.pipe(takeUntil(this._onDestroy)).subscribe(() => this.checkForOverflow());\n    }\n  }\n\n  /** Perform an intial check for overflow */\n  ngAfterViewInit(): void {\n    requestAnimationFrame(() => this.checkForOverflow());\n  }\n\n  /** Unsubscribe from the trigger */\n  ngOnDestroy(): void {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  /** Programmatically trigger check for overflow */\n  checkForOverflow(): void {\n\n    const { offsetWidth, offsetHeight, scrollWidth, scrollHeight } = this._elementRef.nativeElement;\n    const horizontalOverflow = (scrollWidth - offsetWidth) > this.tolerance;\n    const verticalOverflow = (scrollHeight - offsetHeight) > this.tolerance;\n\n    if (horizontalOverflow !== this._state.horizontalOverflow) {\n      this.uxOverflowHorizontalObserver.emit(horizontalOverflow);\n    }\n\n    if (verticalOverflow !== this._state.verticalOverflow) {\n      this.uxOverflowVerticalObserver.emit(verticalOverflow);\n    }\n\n    if (horizontalOverflow !== this._state.horizontalOverflow || verticalOverflow !== this._state.verticalOverflow) {\n      this.uxOverflowObserver.emit((horizontalOverflow || verticalOverflow));\n    }\n\n    // store the state\n    this._state = { horizontalOverflow, verticalOverflow };\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { OverflowDirective } from './overflow/overflow-observer.directive';\n\n@NgModule({\n  exports: [OverflowDirective],\n  declarations: [OverflowDirective]\n})\nexport class ObserversModule { }\n","import { BehaviorSubject } from 'rxjs';\n\nexport class TreeGridState {\n    readonly loading$ = new BehaviorSubject<boolean>(false);\n\n    constructor(\n        public readonly level: number,\n        public readonly setSize: number,\n        public readonly positionInSet: number) {}\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, isObservable, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TreeGridItem } from './tree-grid-item.interface';\nimport { TreeGridLoadFunction } from './tree-grid-load-function.type';\nimport { TreeGridState } from './tree-grid-state.class';\n\n@Injectable()\nexport class TreeGridService implements OnDestroy {\n\n    /** The raw table data */\n    data$ = new BehaviorSubject<TreeGridItem[]>([]);\n\n    /** The flattened table data */\n    rows$ = new BehaviorSubject<TreeGridItem[]>([]);\n\n    /** The function to load child items */\n    loadChildren: TreeGridLoadFunction;\n\n    /** Ensure we destroy all observables correctly */\n    private readonly _onDestroy = new Subject<void>();\n\n    constructor() {\n        this.data$.pipe(takeUntil(this._onDestroy)).subscribe(data => this.rows$.next(this.getFlattenedTree(data)));\n    }\n\n    /** Unsubscribe from all observables */\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    /** Set the expanded state of a row */\n    async setExpanded(item: TreeGridItem, expanded: boolean) {\n        if (expanded) {\n            await this.getChildren(item);\n            this.insertChildren(item);\n        } else {\n            this.removeChildren(item);\n        }\n    }\n\n    /** A function to flatten tree data */\n    private getFlattenedTree(data: TreeGridItem[], parent?: TreeGridItem): TreeGridItem[] {\n        // flatten the nodes at this level\n        return data.reduce((previous, item, index) => {\n\n            item.state = new TreeGridState(parent ? parent.state.level + 1 : 0, data.length, index + 1);\n\n            // Convert any child nodes\n            const children = (item.children && item.expanded) ? this.getFlattenedTree(item.children, item) : [];\n\n            // return the nodes in a flattened array\n            return [...previous, item, ...children];\n        }, []);\n    }\n\n    /** Load any children dynamically */\n    private async getChildren(item: TreeGridItem): Promise<void> {\n        if (!item.children && this.loadChildren) {\n            item.state.loading$.next(true);\n\n            try {\n                item.children = await this.getNormalizedChildren(this.loadChildren(item));\n            }\n            finally {\n                item.state.loading$.next(false);\n            }\n        }\n    }\n\n    /** We want to support an array, a promise and an observable. This will return all types as a promise */\n    private async getNormalizedChildren(response: TreeGridItem[] | Promise<TreeGridItem[]> | Observable<TreeGridItem[]>): Promise<TreeGridItem[]> {\n\n        // if it is already an observable do nothing\n        if (isObservable(response)) {\n            return await response.toPromise();\n        }\n\n        // if it is a promise wrap it as an observable\n        if (response instanceof Promise) {\n            return await response;\n        }\n\n        // if it is an array then make it an observable\n        return response;\n    }\n\n    /** Insert the children into the flattened tree at the correct location */\n    private insertChildren(parent: TreeGridItem): void {\n        if (!parent.children) {\n            return;\n        }\n\n        const rows = [...this.rows$.getValue()];\n\n        const index = rows.indexOf(parent);\n\n        if (index < 0) {\n            return;\n        }\n\n        // Skip duplicates - this could happen if an already expanded child has been inserted\n        const uniqueChildren = parent.children.filter(child => rows.indexOf(child) === -1);\n\n        const childRows = this.getFlattenedTree(uniqueChildren, parent);\n\n        rows.splice(index + 1, 0, ...childRows);\n\n        this.rows$.next(rows);\n    }\n\n    /** Remove all rows from the flattened tree */\n    private removeChildren(parent: TreeGridItem): void {\n\n        const rows = [...this.rows$.getValue()];\n        const index = rows.indexOf(parent);\n\n        if (index < 0) {\n            return;\n        }\n\n        while (index + 1 < rows.length && rows[index + 1].state.level > parent.state.level) {\n            rows.splice(index + 1, 1);\n        }\n\n        this.rows$.next(rows);\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, EventEmitter, HostBinding, HostListener, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TreeGridItem } from './tree-grid-item.interface';\nimport { TreeGridService } from './tree-grid.service';\n\n@Directive({\n    selector: '[uxTreeGridRow]',\n    exportAs: 'uxTreeGridRow',\n    host: {\n        '[class.treegrid-row]': 'true'\n    }\n})\nexport class TreeGridRowDirective implements OnInit, OnDestroy {\n    private readonly _treeGridService = inject(TreeGridService);\n\n    @Input('uxTreeGridRow')\n    item: TreeGridItem;\n\n    @Input()\n    canExpand: boolean;\n\n    @Input()\n    @HostBinding('class.treegrid-row-expanded')\n    set expanded(value: boolean) {\n        const expanded = coerceBooleanProperty(value);\n        if (expanded !== this._expanded) {\n            this._expanded = expanded;\n            this._treeGridService.setExpanded(this.item, expanded);\n        }\n    }\n    get expanded(): boolean {\n        return this._expanded;\n    }\n\n    @Output()\n    expandedChange = new EventEmitter<boolean>();\n\n    @HostBinding('class.treegrid-row-loading')\n    loading: boolean = false;\n\n    private _expanded = false;\n\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n\n        if (!this.item || !this.item.state) {\n            throw new Error('uxTreeGridRow should be configured with an object emitted by uxTreeGrid.rows.');\n        }\n\n        this.item.state.loading$.pipe(takeUntil(this._onDestroy))\n            .subscribe(loading => this.loading = loading);\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n\n    @HostListener('keydown.ArrowLeft', ['$event'])\n    collapse(event?: Event): void {\n\n        this.expanded = false;\n        this.expandedChange.emit(false);\n\n        if (event) {\n            event.preventDefault();\n        }\n    }\n\n    @HostListener('keydown.ArrowRight', ['$event'])\n    expand(event?: Event): void {\n\n        // take into account whether or not the item can expanded\n        if (!this.canExpand) {\n            return;\n        }\n\n        this.expanded = true;\n        this.expandedChange.emit(true);\n\n        if (event) {\n            event.preventDefault();\n        }\n    }\n\n    toggle(): void {\n        this.expanded ? this.collapse() : this.expand();\n    }\n}\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, HostBinding, inject, Input } from '@angular/core';\nimport { TreeGridRowDirective } from './tree-grid-row.directive';\n\n@Directive({\n    selector: '[uxTreeGridIndent]',\n})\nexport class TreeGridIndentDirective {\n    readonly _row = inject(TreeGridRowDirective);\n\n    /** The amount each level should be indented by */\n    @Input()\n    set uxTreeGridIndent(value: number | undefined) {\n        this._indent = coerceNumberProperty(value, 25);\n    }\n\n    get uxTreeGridIndent(): number | undefined {\n        return this._indent;\n    }\n\n    /** The padding value applied to each level */\n    @HostBinding('style.padding-left.px')\n    get indentation(): number {\n        return this._row && this._row.item ? 7 + (this._row.item.state.level * this._indent) : 7;\n    }\n\n    private _indent: number;\n\n    static ngAcceptInputType_uxTreeGridIndent: NumberInput | undefined;\n}\n","import { ChangeDetectorRef, Directive, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TreeGridItem } from './tree-grid-item.interface';\nimport { TreeGridLoadFunction } from './tree-grid-load-function.type';\nimport { TreeGridService } from './tree-grid.service';\n\n@Directive({\n    selector: '[uxTreeGrid]',\n    providers: [TreeGridService],\n    host: {\n        class: 'treegrid'\n    }\n})\nexport class TreeGridDirective implements OnInit, OnDestroy {\n    private readonly _changeDetector = inject(ChangeDetectorRef);\n\n    private readonly _treeGridService = inject(TreeGridService);\n\n    @Input('uxTreeGrid')\n    set data(data: TreeGridItem[]) {\n        this._treeGridService.data$.next(data);\n    }\n\n    @Input()\n    set loadChildren(loadChildren: TreeGridLoadFunction) {\n        this._treeGridService.loadChildren = loadChildren;\n    }\n\n    @Output()\n    rowsChange = new EventEmitter<TreeGridItem[]>();\n\n    private readonly _onDestroy = new Subject<void>();\n\n    ngOnInit(): void {\n        this._treeGridService.rows$\n            .pipe(takeUntil(this._onDestroy))\n            .subscribe(rows => {\n                this.rowsChange.emit(rows);\n                this._changeDetector.detectChanges();\n            });\n    }\n\n    ngOnDestroy(): void {\n        this._onDestroy.next();\n        this._onDestroy.complete();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { TreeGridIndentDirective } from './tree-grid-indent.directive';\nimport { TreeGridRowDirective } from './tree-grid-row.directive';\nimport { TreeGridDirective } from './tree-grid.directive';\n\n@NgModule({\n    declarations: [\n        TreeGridDirective,\n        TreeGridRowDirective,\n        TreeGridIndentDirective\n    ],\n    exports: [\n        TreeGridDirective,\n        TreeGridRowDirective,\n        TreeGridIndentDirective\n    ]\n})\nexport class TreeGridModule {}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'stringFilter'\n})\n@Injectable()\nexport class StringFilterPipe implements PipeTransform {\n    transform(items: string[], value: string): string[] {\n        if (!items) {\n            return [];\n        }\n        return items.filter(it => it.toLowerCase().indexOf(value.toLowerCase()) >= 0);\n    }\n}","import { StringFilterPipe } from './string-filter.pipe';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n    exports: [StringFilterPipe],\n    declarations: [StringFilterPipe]\n})\nexport class StringFilterModule { }\n","import { END, HOME, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { NgModule } from '@angular/core';\nimport type { Chart } from 'chart.js';\n\nconst timelineDefaultOptions: TimelineChartOptions & TimelineChartStateOptions = {\n  timeline: {\n    backgroundColor: '#f1f2f3',\n    selectionColor: 'rgba(198, 23, 157, 0.15)',\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    onChange: function onChange() {},\n    keyboard: {\n      step: 2_592_000_000, // 30 days\n    },\n    handles: {\n      backgroundColor: '#000',\n      foregroundColor: '#dcdedf',\n      focusIndicatorColor: 'rgba(0, 115, 231, 0.5)',\n    },\n    range: {\n      lower: null,\n      upper: null,\n      minimum: 0,\n      maximum: Infinity,\n    },\n    state: {\n      lowerHandleFocus: false,\n      upperHandleFocus: false,\n      rangeHandleFocus: false,\n    },\n  },\n};\n\nexport class TimelineChartPlugin {\n  id: string = 'timeline-chart-plugin';\n\n  /** We only want to register the plugin once per application */\n  private static _isRegistered: boolean = false;\n\n  /** Register this plugin */\n  static register(): void {\n    /**\n     * We have to register this plugin globally because\n     * ng2-charts doesn't support plugins on an invidual\n     * basis. We must check in all lifecycle hooks that\n     * it is an timeline chart before performing any actions.\n     *\n     * We also need to have it inside the class otherwise it\n     * will be included in every application by default.\n     * Having it here allows it to be tree-shaken.\n     */\n    if (!this._isRegistered) {\n      // if pluginService exists then we are in v2\n      if ((window as any).Chart?.pluginService) {\n        (window as any).Chart.pluginService.register(new TimelineChartPlugin());\n      } else {\n        import('chart.js').then(({ Chart }) => {\n          (Chart as any).register(new TimelineChartPlugin());\n        });\n      }\n\n      this._isRegistered = true;\n    }\n  }\n\n  isVersion3(): boolean {\n    return (window as any).Chart?.pluginService ? false : true;\n  }\n\n  /**\n   * When chart is initialised store the chart instance and context\n   * for use outside lifecycle hooks.\n   *\n   * We should also supply default options for any options that have\n   * not been specified by the consuming application.\n   *\n   * We also need to add some event listeners for events that Chart.js\n   * does not inform us of.\n   */\n  beforeInit(chart: TimelineChart) {\n    // provide the default options for any missing properties\n    if (this.getEnabled(chart)) {\n      // chart.config.options.timeline = { ...timelineDefaultOptions.timeline, ...this.getOptions(chart) };\n      chart.config.options.timeline = this.getOptionsWithDefaults(this.getOptions(chart));\n\n      // get the range\n      const { lower, upper } = this.getRange(chart);\n\n      // ensure we have an initial range set\n      if (lower === null || upper === null) {\n        throw new Error(\n          'Timeline Chart - Ensure that both an upper and lower range are initially provided.'\n        );\n      }\n\n      // setup the function\n      chart.config.options.timeline.state.onMouseDown = () => this.onMouseDown(chart);\n      chart.config.options.timeline.state.onMouseUp = () => this.onMouseUp(chart);\n\n      // add mouse down and mouseup event listeners\n      chart.canvas.addEventListener('mousedown', chart.config.options.timeline.state.onMouseDown);\n      document.addEventListener('mouseup', chart.config.options.timeline.state.onMouseUp);\n    }\n  }\n\n  /**\n   * We want to setup some additional functionality\n   * after the chart has initialized.\n   */\n  afterInit(chart: TimelineChart): void {\n    if (this.getEnabled(chart)) {\n      // add accessibility attributes and elements to the chart\n      this.setupAccessibility(chart);\n\n      // intially call the onChange function\n      this.triggerOnChange(chart);\n    }\n  }\n\n  /**\n   * The timeline chart should have a subtle background\n   * color behind the main chart area (excluding the axis area).\n   * Suprisingly Chart.js does not support this out of the box\n   * so we need to add this functionality but it should be behind\n   * all chart elements.\n   */\n  beforeDraw(chart: TimelineChart): void {\n    if (this.getEnabled(chart)) {\n      this.drawBackgroundColor(chart);\n    }\n  }\n\n  /**\n   * Once the Chart elements have been drawn we want to draw the drag\n   * handles and the overlay showing the selected region\n   */\n  afterDraw(chart: TimelineChart) {\n    if (this.getEnabled(chart)) {\n      this.drawSelection(chart);\n      this.drawHandles(chart);\n    }\n  }\n\n  /**\n   * We want to update the cursor whenever the mouse is over\n   * one of the drag handles. We have do calculate this manually\n   * as there are no DOM element to add CSS to.\n   */\n  afterEvent(chart: TimelineChart, parentEvent: any) {\n    const event: MouseEvent = this.isVersion3() ? parentEvent.event : parentEvent;\n\n    if (parentEvent.replay === true) {\n      return;\n    }\n\n    // skip this if timeline is not enabled\n    if (!this.getEnabled(chart)) {\n      return;\n    }\n\n    switch (event.type) {\n      case 'mousemove':\n        this.setCursor(chart, event as MouseEvent);\n        this.setRangeOnDrag(chart, event as MouseEvent);\n        this.handleMouseMove(chart, event as MouseEvent);\n\n        // store the latest mouse position\n        this.setState(chart, { mouseX: event.x });\n        break;\n\n      case 'mouseout':\n        this.resetCursor(chart);\n        this.hideTooltip(chart);\n        break;\n    }\n  }\n\n  /**\n   * Unbind from the event listeners we manually set up\n   */\n  destroy(chart: TimelineChart): void {\n    if (this.getEnabled(chart)) {\n      document.removeEventListener('mouseup', chart.config.options.timeline.state.onMouseUp, true);\n    }\n  }\n\n  /** Get the timeline options from the chart instance */\n  private getOptions(chart: TimelineChart) {\n    return chart.config.options.timeline;\n  }\n\n  /** Determine if this chart is using the timeline */\n  private getEnabled(chart: TimelineChart): boolean {\n    return !!this.getOptions(chart);\n  }\n\n  /** Get the timeline range from the chart instance */\n  private getRange(chart: TimelineChart) {\n    return this.getOptions(chart).range;\n  }\n\n  /** Get the chart area but include any padding */\n  private getChartArea(chart: TimelineChart): ChartArea {\n    const { top, right, bottom, left } = chart.chartArea;\n    const padding =\n      chart.config.options.layout && chart.config.options.layout.padding\n        ? chart.config.options.layout.padding\n        : 0;\n\n    if (typeof padding === 'number') {\n      return {\n        top: top - padding,\n        right: right - padding,\n        left: left - padding,\n        bottom: bottom - padding,\n      };\n    } else if (typeof padding === 'object') {\n      return {\n        top: top - padding.top,\n        right: right - padding.right,\n        left: left - padding.left,\n        bottom: bottom - padding.bottom,\n      };\n    }\n\n    return chart.chartArea;\n  }\n\n  /** Get stored state inside the chart options */\n  private getState(chart: TimelineChart) {\n    return this.getOptions(chart).state;\n  }\n\n  /** Store state inside the chart options */\n  private setState(chart: TimelineChart, state: TimelineChartState): void {\n    // store the latest state\n    chart.config.options.timeline.state = { ...chart.config.options.timeline.state, ...state };\n\n    // trigger a chart re-render\n    chart.update();\n  }\n\n  /** Call the callback with the latest range */\n  private triggerOnChange(chart: TimelineChart): void {\n    // get the current date range\n    const { lower, upper } = this.getRange(chart);\n\n    // get the callback function\n    const { onChange } = this.getOptions(chart);\n\n    // call the callback with the lower and upper values\n    requestAnimationFrame(() => onChange(lower, upper));\n\n    // get the handle elements\n    const { lowerHandleElement, upperHandleElement } = this.getState(chart);\n\n    // update the aria properties\n    lowerHandleElement.setAttribute(\n      'aria-valuemin',\n      new Date(this.getHandleMinimum(chart, TimelineHandle.Lower)).toDateString()\n    );\n    lowerHandleElement.setAttribute('aria-valuenow', lower.toDateString());\n    lowerHandleElement.setAttribute(\n      'aria-valuemax',\n      new Date(this.getHandleMaximum(chart, TimelineHandle.Lower)).toDateString()\n    );\n    upperHandleElement.setAttribute(\n      'aria-valuemin',\n      new Date(this.getHandleMinimum(chart, TimelineHandle.Upper)).toDateString()\n    );\n    upperHandleElement.setAttribute('aria-valuenow', upper.toDateString());\n    upperHandleElement.setAttribute(\n      'aria-valuemax',\n      new Date(this.getHandleMaximum(chart, TimelineHandle.Upper)).toDateString()\n    );\n  }\n\n  /** To make the chart accessible add some internal elements that can be focused */\n  private setupAccessibility(chart: TimelineChart): void {\n    // create the invisible elements\n    const lowerHandle = document.createElement('div');\n    const upperHandle = document.createElement('div');\n    const rangeHandle = document.createElement('div');\n\n    // make the items focusable\n    lowerHandle.setAttribute('tabindex', '0');\n    upperHandle.setAttribute('tabindex', '0');\n    rangeHandle.setAttribute('tabindex', '0');\n\n    // insert the elements\n    chart.canvas.appendChild(lowerHandle);\n    chart.canvas.appendChild(upperHandle);\n    chart.canvas.appendChild(rangeHandle);\n\n    // add the event handlers\n    lowerHandle.addEventListener('focus', () => this.setState(chart, { lowerHandleFocus: true }));\n    lowerHandle.addEventListener('blur', () => this.setState(chart, { lowerHandleFocus: false }));\n    lowerHandle.addEventListener('keydown', (event: KeyboardEvent) =>\n      this.onKeydown(chart, event, TimelineHandle.Lower)\n    );\n\n    upperHandle.addEventListener('focus', () => this.setState(chart, { upperHandleFocus: true }));\n    upperHandle.addEventListener('blur', () => this.setState(chart, { upperHandleFocus: false }));\n    upperHandle.addEventListener('keydown', (event: KeyboardEvent) =>\n      this.onKeydown(chart, event, TimelineHandle.Upper)\n    );\n\n    rangeHandle.addEventListener('focus', () => this.setState(chart, { rangeHandleFocus: true }));\n    rangeHandle.addEventListener('blur', () => this.setState(chart, { rangeHandleFocus: false }));\n    rangeHandle.addEventListener('keydown', (event: KeyboardEvent) =>\n      this.onRangeKeydown(chart, event)\n    );\n\n    // store the items in the state object\n    this.setState(chart, {\n      lowerHandleElement: lowerHandle,\n      upperHandleElement: upperHandle,\n      rangeHandleElement: rangeHandle,\n    });\n  }\n\n  /** Handle keyboard accessibility events */\n  private onKeydown(chart: TimelineChart, event: KeyboardEvent, handle: TimelineHandle): void {\n    // get the current value for the given handle\n    const value = this.getHandleValue(chart, handle).getTime();\n    const step = this.getOptions(chart).keyboard.step;\n    const [minimum, maximum] = this.getChartRange(chart);\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        this.setHandleValue(chart, handle, new Date(value - step));\n        event.preventDefault();\n        break;\n\n      case HOME:\n        this.setHandleValue(chart, handle, new Date(minimum));\n        event.preventDefault();\n        break;\n\n      case RIGHT_ARROW:\n        this.setHandleValue(chart, handle, new Date(value + step));\n        event.preventDefault();\n        break;\n\n      case END:\n        this.setHandleValue(chart, handle, new Date(maximum));\n        event.preventDefault();\n        break;\n    }\n  }\n\n  /**\n   * Handle range changes made with the keyboard as these are exempt from\n   * many of the validation checks that are required when dragging only one\n   * handle at a time.\n   */\n  private onRangeKeydown(chart: TimelineChart, event: KeyboardEvent): void {\n    // get the current handle values\n    let lowerValue = this.getHandleValue(chart, TimelineHandle.Lower).getTime();\n    let upperValue = this.getHandleValue(chart, TimelineHandle.Upper).getTime();\n    const step = this.getOptions(chart).keyboard.step;\n    const difference = upperValue - lowerValue;\n\n    // get the chart boundaries\n    const [minimum, maximum] = this.getChartRange(chart);\n\n    switch (event.keyCode) {\n      case LEFT_ARROW:\n        lowerValue = Math.max(lowerValue - step, minimum);\n        upperValue = lowerValue + difference;\n        event.preventDefault();\n        break;\n\n      case RIGHT_ARROW:\n        upperValue = Math.min(upperValue + step, maximum);\n        lowerValue = upperValue - difference;\n        event.preventDefault();\n        break;\n\n      case HOME:\n        lowerValue = minimum;\n        upperValue = lowerValue + difference;\n        event.preventDefault();\n        break;\n\n      case END:\n        upperValue = maximum;\n        lowerValue = upperValue - difference;\n        event.preventDefault();\n        break;\n    }\n\n    // store the new values\n    chart.config.options.timeline.range[TimelineHandle.Lower] = new Date(lowerValue);\n    chart.config.options.timeline.range[TimelineHandle.Upper] = new Date(upperValue);\n\n    // update the chart\n    chart.update();\n\n    // emit the latest range\n    this.triggerOnChange(chart);\n  }\n\n  /**\n   * When the mouse is first pressed within a chart we should see if we are\n   * currently over a drag handle to start the dragging\n   */\n  private onMouseDown(chart: TimelineChart): void {\n    // ensure we only proceed when we have a chart context\n    if (!chart.ctx) {\n      return;\n    }\n\n    // get the position from the chart area\n    const { top } = this.getChartArea(chart);\n\n    // get the properties from the state\n    const { mouseX } = this.getState(chart);\n\n    // check if the event started within a drag handle\n    const handle = this.isWithinHandle(chart, { x: mouseX, y: top });\n\n    // if it did then we are now dragging the handle and should store it\n    this.setState(chart, { handle: handle !== null ? handle : null });\n  }\n\n  /** When the mouse is released we are no longer dragging */\n  private onMouseUp(chart: TimelineChart): void {\n    if (chart.canvas) {\n      this.setState(chart, { handle: null });\n    }\n  }\n\n  private handleMouseMove(chart: TimelineChart, event: any): void {\n    const mousePosition = this.isWithinHandle(chart, event);\n\n    const timelineOptions = (\n      this.isVersion3() ? chart.config.options : chart.options\n    ) as TimelineChartOptions;\n    // eslint-disable-next-line no-prototype-builtins\n    const hasTooltipOnRange: boolean = timelineOptions.timeline.range.hasOwnProperty('tooltip');\n    // eslint-disable-next-line no-prototype-builtins\n    const hasTooltipOnHandles: boolean = timelineOptions.timeline.handles.hasOwnProperty('tooltip');\n    let timelineTooltipText: string;\n    let handleTooltipText: { rangeLower: string; rangeUpper: string };\n\n    if (hasTooltipOnRange) {\n      timelineTooltipText = timelineOptions.timeline.range.tooltip.label();\n    }\n\n    if (hasTooltipOnHandles) {\n      handleTooltipText = timelineOptions.timeline.handles.tooltip.label();\n    }\n\n    if (mousePosition === TimelineHandle.Range && hasTooltipOnRange) {\n      this.externalTooltipHandler(chart, TimelineHandle.Range, timelineTooltipText);\n    } else if (mousePosition === TimelineHandle.Lower && hasTooltipOnHandles) {\n      this.externalTooltipHandler(chart, TimelineHandle.Lower, handleTooltipText.rangeLower);\n    } else if (mousePosition === TimelineHandle.Upper && hasTooltipOnHandles) {\n      this.externalTooltipHandler(chart, TimelineHandle.Upper, handleTooltipText.rangeUpper);\n    } else {\n      this.hideTooltip(chart);\n    }\n  }\n\n  private hideTooltip(chart: TimelineChart): void {\n    const tooltipEl = this.getOrCreateTooltip(chart);\n    tooltipEl.style.opacity = '0';\n  }\n\n  private getOrCreateTooltip(chart: TimelineChart) {\n    let tooltipEl = chart.canvas.parentNode.querySelector('.timeline-tooltip') as HTMLElement;\n\n    if (!tooltipEl) {\n      tooltipEl = document.createElement('div');\n      tooltipEl.classList.add('timeline-tooltip');\n      tooltipEl.classList.add('tooltip');\n\n      const caret = document.createElement('div');\n      caret.classList.add('tooltip-caret');\n\n      const span = document.createElement('span');\n\n      tooltipEl.appendChild(span);\n      tooltipEl.appendChild(caret);\n      chart.canvas.parentNode.appendChild(tooltipEl);\n    }\n\n    return tooltipEl;\n  }\n\n  private externalTooltipHandler(\n    chart: TimelineChart,\n    position: TimelineHandle,\n    tooltipText: string\n  ) {\n    // Tooltip Element\n    const tooltipEl = this.getOrCreateTooltip(chart);\n    const span = tooltipEl.querySelector('span');\n    span.innerText = tooltipText;\n\n    const { x, y } = this.tooltipPositioner(chart, position);\n\n    tooltipEl.style.left = x + 'px';\n    tooltipEl.style.top = y + 'px';\n    tooltipEl.style.opacity = '1';\n  }\n\n  private tooltipPositioner(chart: TimelineChart, position: TimelineHandle) {\n    const lower = this.getHandleArea(chart, TimelineHandle.Lower).left;\n    const upper = this.getHandleArea(chart, TimelineHandle.Upper).left;\n    const tooltipEl = this.getOrCreateTooltip(chart);\n    const width = tooltipEl.getBoundingClientRect().width;\n    const caret = tooltipEl.querySelector('.tooltip-caret') as HTMLElement;\n\n    if (position === TimelineHandle.Range) {\n      caret.style.top = null;\n      caret.style.right = null;\n      caret.style.left = '50%';\n      caret.style.transform = 'rotate(0deg)';\n      const middle = (lower + upper) / 2;\n\n      return {\n        x: middle + 2,\n        y: -14,\n      };\n    } else if (position === TimelineHandle.Lower) {\n      caret.style.top = '40%';\n      caret.style.right = 'auto';\n      caret.style.left = '-2px';\n      caret.style.transform = 'rotate(90deg)';\n\n      return {\n        x: lower + (width / 2 + 20),\n        y: 10,\n      };\n    } else if (position === TimelineHandle.Upper) {\n      caret.style.top = '40%';\n      caret.style.right = '-7px';\n      caret.style.left = 'auto';\n      caret.style.transform = 'rotate(-90deg)';\n\n      return {\n        x: upper - (width / 2 + 20),\n        y: 10,\n      };\n    }\n  }\n\n  /** Update the range when dragged */\n  private setRangeOnDrag(chart: TimelineChart, event: Partial<MouseEvent>): void {\n    const { handle, mouseX } = this.getState(chart);\n\n    // if we are not dragging then do nothing\n    if (!handle) {\n      return;\n    }\n\n    // get the chart area\n    const { left, right } = this.getChartArea(chart);\n\n    // get the current range\n    const { lower, upper } = this.getRange(chart);\n\n    // get the difference in x position since the last mouse position\n    const delta = event.x - mouseX;\n\n    // get the width of the chart area\n    const width = right - left;\n\n    // get the time range on the x-axis\n    const [minimum, maximum] = this.getChartRange(chart);\n\n    // determine how much of the time range was spanned in the move\n    const percentageDiff = (delta / width) * 100;\n\n    // calculate the time difference in the movement\n    const valueDiff = ((maximum - minimum) / 100) * percentageDiff;\n\n    if (handle === TimelineHandle.Lower) {\n      this.setHandleValue(chart, TimelineHandle.Lower, new Date(lower.getTime() + valueDiff));\n    }\n\n    if (handle === TimelineHandle.Upper) {\n      this.setHandleValue(chart, TimelineHandle.Upper, new Date(upper.getTime() + valueDiff));\n    }\n\n    if (handle === TimelineHandle.Range) {\n      // get the current range\n      const range = upper.getTime() - lower.getTime();\n\n      // update the values\n      if (valueDiff < 0) {\n        this.setHandleValue(chart, TimelineHandle.Upper, new Date(upper.getTime() + valueDiff));\n        this.setHandleValue(chart, TimelineHandle.Lower, new Date(lower.getTime() + valueDiff));\n      } else {\n        this.setHandleValue(chart, TimelineHandle.Lower, new Date(lower.getTime() + valueDiff));\n        this.setHandleValue(chart, TimelineHandle.Upper, new Date(upper.getTime() + valueDiff));\n      }\n\n      // calculate the new range\n      const currentRange =\n        chart.config.options.timeline.range.upper.getTime() -\n        chart.config.options.timeline.range.lower.getTime();\n\n      // ensure the range is still the same\n      if (currentRange !== range) {\n        if (valueDiff < 0) {\n          this.setHandleValue(\n            chart,\n            TimelineHandle.Upper,\n            new Date(chart.config.options.timeline.range.upper.getTime() + (range - currentRange))\n          );\n        } else {\n          this.setHandleValue(\n            chart,\n            TimelineHandle.Lower,\n            new Date(chart.config.options.timeline.range.lower.getTime() + (currentRange - range))\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Draw the background color in the region that sits behind all the chart content\n   */\n  private drawBackgroundColor(chart: TimelineChart): void {\n    // get the region that the chart is drawn on (excluding axis)\n    const { top, right, bottom, left } = this.getChartArea(chart);\n\n    // fill the background color\n    chart.ctx.save();\n    chart.ctx.fillStyle = this.getOptions(chart).backgroundColor as\n      | string\n      | CanvasGradient\n      | CanvasPattern;\n    chart.ctx.fillRect(left, top, right - left, bottom - top);\n    chart.ctx.restore();\n  }\n\n  /** Draw the overlay that indicates the selected region */\n  private drawSelection(chart: TimelineChart): void {\n    // get the region that the chart is drawn on (excluding axis)\n    const { top, bottom } = this.getChartArea(chart);\n\n    // get the fill color\n    const selectionColor = this.getOptions(chart).selectionColor;\n\n    // get the focus indicator color\n    const { focusIndicatorColor } = this.getOptions(chart).handles;\n\n    // get the lower and upper handle render regions\n    const lower = this.getHandleArea(chart, TimelineHandle.Lower);\n    const upper = this.getHandleArea(chart, TimelineHandle.Upper);\n\n    // draw selection region\n    chart.ctx.save();\n\n    chart.ctx.fillStyle = selectionColor as string | CanvasGradient | CanvasPattern;\n    chart.ctx.fillRect(lower.left, 0, upper.right - lower.left, bottom - top);\n\n    // check if we are focused on the range handle\n    if (this.isHandleFocused(chart, TimelineHandle.Range)) {\n      chart.ctx.strokeStyle = focusIndicatorColor as string | CanvasGradient | CanvasPattern;\n      const handleWidth = 4;\n      const lineWidth = 2;\n      chart.ctx.lineWidth = lineWidth;\n      chart.ctx.strokeRect(\n        lower.left + handleWidth + lineWidth,\n        lineWidth / 2,\n        upper.right - lower.left - (handleWidth + lineWidth) * 2,\n        bottom - top - lineWidth\n      );\n    }\n\n    chart.ctx.restore();\n  }\n\n  /** Darw the drag handles */\n  private drawHandles(chart: TimelineChart): void {\n    // get the region that the chart is drawn on (excluding axis)\n    const { top, bottom } = this.getChartArea(chart);\n\n    // get the handle colors\n    const { backgroundColor, foregroundColor, focusIndicatorColor } =\n      this.getOptions(chart).handles;\n\n    // draw each handle\n    [TimelineHandle.Lower, TimelineHandle.Upper].forEach(handle => {\n      // get the area of the handle\n      const area = this.getHandleArea(chart, handle);\n      const handleWidth = 5;\n      const chartHeight = bottom - top;\n\n      chart.ctx.save();\n\n      // if the handle is focused draw an outline\n      if (this.isHandleFocused(chart, handle)) {\n        chart.ctx.fillStyle = focusIndicatorColor as string | CanvasGradient | CanvasPattern;\n        chart.ctx.fillRect(area.left - 2, 0, handleWidth + 4, chartHeight);\n      }\n\n      // draw the handle\n      chart.ctx.fillStyle = backgroundColor as string | CanvasGradient | CanvasPattern;\n      chart.ctx.fillRect(area.left, 0, handleWidth, chartHeight);\n\n      // draw the 3 drag handles within the drag handle\n      chart.ctx.fillStyle = foregroundColor as string | CanvasGradient | CanvasPattern;\n\n      // calculate size and position\n      const width = 3;\n      const height = 3;\n      const x = area.left + (handleWidth - width) / 2;\n      const midpoint = area.top + chartHeight / 2;\n      const topY = midpoint - height * 2.5;\n      const middleY = midpoint - height / 2;\n      const bottomY = midpoint + height * 1.5;\n\n      chart.ctx.fillRect(x, topY, width, height);\n      chart.ctx.fillRect(x, middleY, width, height);\n      chart.ctx.fillRect(x, bottomY, width, height);\n\n      chart.ctx.restore();\n    });\n  }\n\n  /**\n   * Update the CSS cursor on the canvas element if we are hovering over a drag handle\n   */\n  private setCursor(chart: TimelineChart, event: MouseEvent): void {\n    // get the handle if we are hovering over one\n    const handle = this.getState(chart).handle || this.isWithinHandle(chart, event);\n\n    if (handle === TimelineHandle.Lower || handle === TimelineHandle.Upper) {\n      chart.canvas.style.cursor = 'ew-resize';\n    } else if (handle === TimelineHandle.Range) {\n      chart.canvas.style.cursor = 'move';\n    } else {\n      this.resetCursor(chart);\n    }\n  }\n\n  // restore the cursor to the default\n  private resetCursor(chart: TimelineChart): void {\n    if (chart.canvas.style.cursor !== '') {\n      chart.canvas.style.cursor = '';\n    }\n  }\n\n  private isHandleFocused(chart: TimelineChart, handle: TimelineHandle): boolean {\n    if (handle === TimelineHandle.Lower) {\n      return this.getState(chart).lowerHandleFocus;\n    }\n\n    if (handle === TimelineHandle.Upper) {\n      return this.getState(chart).upperHandleFocus;\n    }\n\n    if (handle === TimelineHandle.Range) {\n      return this.getState(chart).rangeHandleFocus;\n    }\n\n    return false;\n  }\n\n  /** Determine if a position is within one of the drag handles */\n  private isWithinHandle(chart: TimelineChart, event: Partial<MouseEvent>): TimelineHandle {\n    // get the lower and upper handle render regions\n    const lower = this.getHandleArea(chart, TimelineHandle.Lower);\n    const upper = this.getHandleArea(chart, TimelineHandle.Upper);\n\n    // get the position co-ordinates\n    const { x, y } = event;\n\n    if (x >= lower.left && x <= lower.right && y >= lower.top && y <= lower.bottom) {\n      return TimelineHandle.Lower;\n    }\n\n    if (x >= upper.left && x <= upper.right && y >= upper.top && y <= upper.bottom) {\n      return TimelineHandle.Upper;\n    }\n\n    if (x > lower.right && x < upper.left && y >= lower.top && y <= lower.bottom) {\n      return TimelineHandle.Range;\n    }\n\n    return null;\n  }\n\n  /** Get the area a specific handle covers within the chart */\n  private getHandleArea(chart: TimelineChart, handle: TimelineHandle): ChartArea {\n    // get the region that the chart is drawn on (excluding axis)\n    const { left, top, right, bottom } = this.getChartArea(chart);\n\n    // perform some calculations on the chart area\n    const width = right - left;\n\n    // get the minimum and maximum ticks on the chart\n    const [minimum, maximum] = this.getChartRange(chart);\n\n    // get the lower and upper range values\n    const { lower, upper } = this.getOptions(chart).range;\n\n    if (handle === TimelineHandle.Lower) {\n      const percentage = ((lower.getTime() - minimum) / (maximum - minimum)) * 100;\n      const position = left + (width / 100) * percentage;\n\n      return { top, left: position, right: position + 5, bottom };\n    }\n\n    if (handle === TimelineHandle.Upper) {\n      const percentage = ((upper.getTime() - minimum) / (maximum - minimum)) * 100;\n      const position = left + (width / 100) * percentage;\n\n      return { top, left: position - 5, right: position, bottom };\n    }\n  }\n\n  /**\n   * Get the minimum and maximum values on the x-axis\n   */\n  private getChartRange(chart: TimelineChart): [number, number] {\n    let minimum: number;\n    let maximum: number;\n\n    if (this.isVersion3()) {\n      // get the current data\n      const data = (chart as any).scales;\n\n      // get the range on the x-axis\n      minimum = data.x.min;\n      maximum = data.x.max;\n    } else {\n      // get the current data\n      const { data } = chart.getDatasetMeta(0);\n\n      // get the range on the x-axis\n      minimum = (data[0] as any)._xScale.min;\n      maximum = (data[0] as any)._xScale.max;\n    }\n\n    return [minimum, maximum];\n  }\n\n  /** Get the value for a given handle */\n  private getHandleValue(chart: TimelineChart, handle: TimelineHandle): Date {\n    const { lower, upper } = this.getOptions(chart).range;\n\n    return handle === TimelineHandle.Lower ? lower : upper;\n  }\n\n  private setHandleValue(chart: TimelineChart, handle: TimelineHandle, value: Date): void {\n    // perform lower handle validation\n    if (handle === TimelineHandle.Lower) {\n      value = new Date(\n        Math.min(\n          Math.max(this.getHandleMinimum(chart, handle), value.getTime()),\n          this.getHandleMaximum(chart, handle)\n        )\n      );\n    }\n\n    // perform upper handle validation\n    if (handle === TimelineHandle.Upper) {\n      value = new Date(\n        Math.max(\n          Math.min(this.getHandleMaximum(chart, handle), value.getTime()),\n          this.getHandleMinimum(chart, handle)\n        )\n      );\n    }\n\n    // store the new value\n    chart.config.options.timeline.range[handle] = value;\n\n    // update the chart\n    chart.update();\n\n    // emit the latest range\n    this.triggerOnChange(chart);\n  }\n\n  private getHandleMinimum(chart: TimelineChart, handle: TimelineHandle): number {\n    // get the minimum distance\n    const minDistance = this.getOptions(chart).range.minimum || 0;\n    const maxDistance = this.getOptions(chart).range.maximum || Infinity;\n\n    // get the chart boundaries\n    const [minimum] = this.getChartRange(chart);\n\n    // get the current date range\n    const { lower, upper } = this.getRange(chart);\n\n    if (handle === TimelineHandle.Lower) {\n      return Math.max(upper.getTime() - maxDistance, minimum);\n    }\n\n    if (handle === TimelineHandle.Upper) {\n      return lower.getTime() + minDistance;\n    }\n  }\n\n  private getHandleMaximum(chart: TimelineChart, handle: TimelineHandle): number {\n    // get the minimum distance\n    const minDistance = this.getOptions(chart).range.minimum || 0;\n    const maxDistance = this.getOptions(chart).range.maximum || Infinity;\n\n    // get the chart boundaries\n    const [, maximum] = this.getChartRange(chart);\n\n    // get the current date range\n    const { lower, upper } = this.getRange(chart);\n\n    if (handle === TimelineHandle.Lower) {\n      return upper.getTime() - minDistance;\n    }\n\n    if (handle === TimelineHandle.Upper) {\n      return Math.min(lower.getTime() + maxDistance, maximum);\n    }\n  }\n\n  private getOptionsWithDefaults<T>(options: T): T {\n    const merge = (target: T, source: T) => {\n      for (const key of Object.keys(source)) {\n        if (\n          source[key] instanceof Object &&\n          !(source[key] instanceof Date) &&\n          typeof source[key] !== 'function'\n        ) {\n          Object.assign(source[key], merge(target[key], source[key]));\n        }\n      }\n\n      return Object.assign(target || {}, source);\n    };\n\n    return merge({ ...timelineDefaultOptions.timeline } as any, options);\n  }\n}\n\n/**\n * Directly exporting a file that is not an Angular component, module, etc..\n * can cause build issues. We can use a module that instantiates the plugin\n * instead of directly exporting the Chart.js plugin.\n */\n@NgModule({})\nexport class TimelineChartModule {\n  constructor() {\n    TimelineChartPlugin.register();\n  }\n}\n\nexport enum TimelineHandle {\n  Lower = 'lower',\n  Upper = 'upper',\n  Range = 'range',\n}\n\nexport interface TimelineChartOptions {\n  timeline?: {\n    backgroundColor?: ChartColor;\n    selectionColor?: ChartColor;\n    onChange?: (lower: Date, upper: Date) => void;\n    keyboard?: {\n      step?: number;\n    };\n    handles?: {\n      backgroundColor?: ChartColor;\n      foregroundColor?: ChartColor;\n      focusIndicatorColor?: ChartColor;\n      tooltip?: {\n         \n        label: Function;\n      };\n    };\n    range: {\n      lower: Date;\n      upper: Date;\n      minimum?: number;\n      maximum?: number;\n      tooltip?: {\n         \n        label: Function;\n      };\n    };\n  };\n}\n\n/**\n * Store internal state of the chart but don't expose it\n * in the public options interface\n */\nexport interface TimelineChartStateOptions {\n  timeline?: {\n    state: TimelineChartState;\n  };\n}\n\nexport interface TimelineChartState {\n  handle?: TimelineHandle | null;\n  mouseX?: number;\n  onMouseDown?: (event: MouseEvent) => void;\n  onMouseUp?: (event: MouseEvent) => void;\n  onMouseEnter?: (event: MouseEvent) => void;\n  onKeydown?: (event: KeyboardEvent) => void;\n  lowerHandleFocus?: boolean;\n  upperHandleFocus?: boolean;\n  rangeHandleFocus?: boolean;\n  lowerHandleElement?: HTMLDivElement;\n  upperHandleElement?: HTMLDivElement;\n  rangeHandleElement?: HTMLDivElement;\n}\n\nexport interface ChartArea {\n  top: number;\n  right: number;\n  bottom: number;\n  left: number;\n}\n\nexport type ChartColor = string | CanvasGradient | CanvasPattern;\n\nexport interface TimelineChartConfig {\n  config: {\n    options: TimelineChartOptions & TimelineChartStateOptions;\n  };\n  chart: Chart;\n}\n\nexport type TimelineChart = Chart & TimelineChartConfig;\n","import { StorageAdapter } from './storage-adapter';\n\nexport class CookieAdapter implements StorageAdapter {\n\n    getItem(key: string): string {\n\n        if (document.cookie) {\n\n            // get all the cookies for this site\n            const cookies = document.cookie.split(';');\n\n            // process the cookies into a from we can easily manage\n            const match = cookies\n                .map(cookie => ({ key: cookie.split('=')[0].trim(), value: cookie.split('=')[1].trim() }))\n                .find(cookie => cookie.key === key);\n\n            return match ? match.value : null;\n        }\n\n        return null;\n    }\n\n    setItem(key: string, value: string): void {\n        document.cookie = `${key}=${value}; path=/`;\n    }\n\n    removeItem(key: string): void {\n\n        document.cookie.split(';').forEach(cookie => {\n            const eqPos = cookie.indexOf('=');\n            const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie;\n\n            if (name === key) {\n                document.cookie = cookie.trim().replace(/=.*/, `=;expires=${new Date().toUTCString()};path=/`);\n            }\n        });\n    }\n\n    clear(): void {\n\n        // call remove item on each cookie\n        document.cookie.split(';').map(cookie => cookie.split('=')[0].trim())\n            .forEach(cookie => this.removeItem(cookie));\n    }\n\n    getSupported(): StorageAdapter {\n        // cookies are supported in all browsers\n        return this;\n    }\n\n}","import { StorageAdapter } from './storage-adapter';\nimport { CookieAdapter } from './cookie-adapter';\n\nexport class LocalStorageAdapter implements StorageAdapter {\n\n    getItem(key: string): string {\n        return localStorage.getItem(key);\n    }\n\n    setItem(key: string, value: string): void {\n        localStorage.setItem(key, value);\n    }\n\n    removeItem(key: string): void {\n        localStorage.removeItem(key);\n    }\n\n    clear(): void {\n        localStorage.clear();\n    }\n\n    getSupported(): StorageAdapter {\n\n        // if local storage variable does not exist fall back to cookies\n        if (!localStorage) {\n            return new CookieAdapter();\n        }\n\n        // try to make a test save to local storage to see if there are any exceptions\n        try {\n            localStorage.setItem('ux-persistent-data-service', 'ux-persistent-data-service');\n            localStorage.removeItem('ux-persistent-data-service');\n\n            return this;\n        } catch (err) {\n            return new CookieAdapter();\n        }\n    }\n\n}","import { StorageAdapter } from './storage-adapter';\nimport { CookieAdapter } from './cookie-adapter';\n\nexport class SessionStorageAdapter implements StorageAdapter {\n\n    getItem(key: string): string {\n        return sessionStorage.getItem(key);\n    }\n\n    setItem(key: string, value: string): void {\n        sessionStorage.setItem(key, value);\n    }\n\n    removeItem(key: string): void {\n        sessionStorage.removeItem(key);\n    }\n\n    clear(): void {\n        sessionStorage.clear();\n    }\n\n    getSupported(): StorageAdapter {\n\n        // if local storage variable does not exist fall back to cookies\n        if (!sessionStorage) {\n            return new CookieAdapter();\n        }\n\n        // try to make a test save to local storage to see if there are any exceptions\n        try {\n            sessionStorage.setItem('ux-persistent-data-service', 'ux-persistent-data-service');\n            sessionStorage.removeItem('ux-persistent-data-service');\n\n            return this;\n        } catch (err) {\n            return new CookieAdapter();\n        }\n    }\n\n}","import { Injectable } from '@angular/core';\nimport { CookieAdapter } from './adapters/cookie-adapter';\nimport { LocalStorageAdapter } from './adapters/local-storage-adapter';\nimport { SessionStorageAdapter } from './adapters/session-storage-adapter';\nimport { StorageAdapter } from './adapters/storage-adapter';\n\n@Injectable()\nexport class PersistentDataService {\n\n    /**\n     * Save the item in some form of persistent storage\n     */\n    setItem(key: string, value: string, type: PersistentDataStorageType = PersistentDataStorageType.LocalStorage): void {\n        this.getAdapter(type).setItem(key, value);\n    }\n\n    /**\n     * Get a stored value from persistent storage\n     */\n    getItem(key: string, type: PersistentDataStorageType = PersistentDataStorageType.LocalStorage): string {\n        return this.getAdapter(type).getItem(key);\n    }\n\n    /**\n     * Remove a stored value from persistent storage\n     */\n    removeItem(key: string, type: PersistentDataStorageType = PersistentDataStorageType.LocalStorage): void {\n        this.getAdapter(type).removeItem(key);\n    }\n\n    /**\n     * Remove a stored value from persistent storage\n     */\n    clear(type: PersistentDataStorageType = PersistentDataStorageType.LocalStorage): void {\n        this.getAdapter(type).clear();\n    }\n\n    /**\n     * Return the appropriate adapter based on the type requested\n     */\n    private getAdapter(type: PersistentDataStorageType): StorageAdapter {\n\n        switch (type) {\n\n            case PersistentDataStorageType.Cookie:\n                return new CookieAdapter();\n\n            case PersistentDataStorageType.LocalStorage:\n                // eslint-disable-next-line no-case-declarations\n                const localStorageAdapter = new LocalStorageAdapter();\n                return localStorageAdapter.getSupported();\n\n            case PersistentDataStorageType.SessionStorage:\n                // eslint-disable-next-line no-case-declarations\n                const sessionStorageAdapter = new SessionStorageAdapter();\n                return sessionStorageAdapter.getSupported();\n        }\n    }\n}\n\nexport enum PersistentDataStorageType {\n    LocalStorage,\n    Cookie,\n    SessionStorage\n}","import { NgModule } from '@angular/core';\n\nimport { PersistentDataService } from './persistent-data.service';\n\n@NgModule({\n    providers: [PersistentDataService],\n})\nexport class PersistentDataModule { }\n","export abstract class StorageAdapter {\n    abstract getItem(key: string): string;\n    abstract setItem(key: string, value: string): void;\n    abstract removeItem(key: string): void;\n    abstract clear(): void;\n    abstract getSupported(): StorageAdapter;\n}","/**\n * Export Common Functionality\n */\nexport * from './common/index';\n/*\n  Export Components\n*/\nexport * from './components/accordion/index';\nexport * from './components/alert/index';\nexport * from './components/breadcrumbs/index';\nexport * from './components/card-tabs/index';\nexport * from './components/checkbox/index';\nexport * from './components/color-picker/index';\nexport * from './components/column-sorting/index';\nexport * from './components/conduit/index';\nexport * from './components/dashboard/index';\nexport * from './components/date-range-picker/index';\nexport * from './components/date-time-picker/index';\nexport * from './components/ebox/index';\nexport * from './components/facets/index';\nexport * from './components/filters/index';\nexport * from './components/flippable-card/index';\nexport * from './components/floating-action-buttons/index';\nexport * from './components/hierarchy-bar/index';\nexport * from './components/icon/index';\nexport * from './components/input-dropdown/index';\nexport * from './components/item-display-panel/index';\nexport * from './components/marquee-wizard/index';\nexport * from './components/media-player/index';\nexport * from './components/menu/index';\nexport * from './components/navigation/index';\nexport * from './components/nested-donut-chart/index';\nexport * from './components/notification/index';\nexport * from './components/number-picker/index';\nexport * from './components/organization-chart/index';\nexport * from './components/page-header/index';\nexport * from './components/pagination/index';\nexport * from './components/partition-map/index';\nexport * from './components/popover/index';\nexport * from './components/progress-bar/index';\nexport * from './components/radiobutton/index';\nexport * from './components/sankey-chart/index';\nexport * from './components/search-builder/index';\nexport * from './components/select-list/index';\nexport * from './components/select/index';\nexport * from './components/side-panel/index';\nexport * from './components/slider/index';\nexport * from './components/spark/index';\nexport * from './components/spin-button/index';\nexport * from './components/table/index';\nexport * from './components/tabset/index';\nexport * from './components/tag-input/index';\nexport * from './components/time-picker/index';\nexport * from './components/timeline/index';\nexport * from './components/toggleswitch/index';\nexport * from './components/toolbar-search/index';\nexport * from './components/tooltip/index';\nexport * from './components/typeahead/index';\nexport * from './components/virtual-scroll/index';\nexport * from './components/wizard/index';\n/*\n  Export Directives\n*/\nexport * from './directives/accessibility/index';\nexport * from './directives/auto-grow/index';\nexport * from './directives/badge/index';\nexport * from './directives/click-outside/index';\nexport * from './directives/drag/index';\nexport * from './directives/fixed-header-table/index';\nexport * from './directives/float-label/index';\nexport * from './directives/focus-if/index';\nexport * from './directives/help-center/index';\nexport * from './directives/hover-action/index';\nexport * from './directives/infinite-scroll/index';\nexport * from './directives/layout-switcher/index';\nexport * from './directives/menu-navigation/index';\nexport * from './directives/observers/index';\nexport * from './directives/reorderable/index';\nexport * from './directives/resize/index';\nexport * from './directives/scroll/index';\nexport * from './directives/selection/index';\nexport * from './directives/tree-grid/index';\nexport * from './pipes/date-formatter/index';\n/*\n  Export Pipes\n*/\nexport * from './pipes/duration/index';\nexport * from './pipes/file-size/index';\nexport * from './pipes/string-filter/index';\n/*\n * Export Plugins\n */\nexport * from './plugins/index';\n/*\n  Export Services\n*/\nexport * from './services/audio/index';\nexport * from './services/color/index';\nexport * from './services/frame-extraction/index';\nexport * from './services/overlay-placement/index';\nexport * from './services/persistent-data/index';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uniqueId","i1.FocusIndicatorDirective","i2.IconComponent","i2.ResizeDirective","i3.IconComponent","i1","i2","i1.DefaultFocusIndicatorDirective","i2.FocusIndicatorDirective","i3.TabbableListDirective","i4.TabbableListItemDirective","i5.ColorContrastDirective","i6","i7.TooltipDirective","i8.IconComponent","i9","i1.IconComponent","ObserversModule","ScrollDispatcher","i1.DragDirective","i1.ResizeDirective","DECLARATIONS","i3","i2.FocusIndicatorOriginDirective","i3.FocusIfDirective","i4","i5.WeekDaySortPipe","i2.SpinButtonComponent","i3.TimePickerComponent","i2.HeaderComponent","i3.DayViewComponent","i4.MonthViewComponent","i5.YearViewComponent","i6.TimeViewComponent","i7","defaultTimezones","i1.DateTimePickerComponent","i3.DateRangePickerDirective","i4.DateFormatterPipe","i2.CheckboxComponent","i1.FacetHeaderComponent","i2.FacetCheckListItemComponent","i4.IconComponent","i5.TooltipDirective","combineLatest","filterOperator","i2.ScrollIntoViewIfDirective","i3.TypeaheadHighlightDirective","i2.InfiniteScrollDirective","i3.InfiniteScrollLoadingDirective","i4.SafeInnerHtmlDirective","i5.TypeaheadOptionsListComponent","i3.TooltipDirective","rxFilter","i2.MenuComponent","i3.MenuTriggerDirective","i4.MenuItemComponent","i3.MenuComponent","i4.MenuTriggerDirective","i5.MenuItemComponent","i6.MenuDividerComponent","i7.TypeaheadComponent","i8.SafeInnerHtmlDirective","i10.FilterTypeaheadHighlight","i2.ClickOutsideDirective","i5.PopoverDirective","i2.TabbableListDirective","i3.TabbableListItemDirective","i5.FocusIfDirective","i6.HierarchyBarPopoverItemComponent","i5","i6.FocusIfDirective","i7.IconComponent","i8.PopoverDirective","i9.ResizeDirective","i10.HierarchyBarNodeComponent","i11.HierarchyBarPopoverComponent","i12.HierarchyBarPopoverItemComponent","i6.HierarchyBarNodeComponent","i7.HierarchyBarPopoverComponent","i2.HierarchyBarStandardComponent","i3.HierarchyBarCollapsedComponent","i4.MenuComponent","i5.MenuTriggerDirective","i6.DefaultFocusIndicatorDirective","i7.FocusIndicatorDirective","i2.FocusIfDirective","i6.IconComponent","i3.SplitterAccessibilityDirective","i4.TabbableListDirective","i5.TabbableListItemDirective","i8.TooltipDirective","i2.DragDirective","i2.FocusWithinDirective","i5.ClickOutsideDirective","i7.SliderComponent","i1.TooltipDirective","i3.DurationPipe","i3.FocusWithinDirective","i4.MediaPlayerTimelineExtensionComponent","i5.MediaPlayerControlsExtensionComponent","i7.FileSizePipe","i1.TabbableListDirective","i2.TabbableListItemDirective","i5.NavigationLinkDirective","transition","i1.TooltipComponent","i1.FocusIndicatorOriginDirective","i7.PageHeaderNavigationDropdownItemComponent","i1.PageHeaderNavigationItemComponent","i2.BreadcrumbsComponent","i5.TabsetComponent","i6.TabComponent","i7.PageHeaderIconMenuComponent","i8.PageHeaderNavigationComponent","i9.PageHeaderNavigationSecondaryItemDirective","i3.ResizeDirective","i4.TooltipComponent","i5.SankeyNodeDirective","i5.SearchBuilderOutletDirective","i4.FocusIfDirective","i5.IconComponent","i4.TagInputComponent","i5.TypeaheadComponent","i1.FocusIfDirective","i2.SelectComponent","EXPORTS","i8.ReorderableDirective","i9.ReorderableHandleDirective","i10.ReorderableModelDirective","i11.SelectionDirective","i12.SelectionItemDirective","ColumnUnit"],"mappings":"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"}