@gravionlabs/helix-ui 22.2.8 → 22.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/fesm2022/gravionlabs-helix-ui.mjs +2057 -87
- package/fesm2022/gravionlabs-helix-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles.css +222 -6
- package/types/gravionlabs-helix-ui.d.ts +570 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gravionlabs-helix-ui.mjs","names":[],"sources":["../../../projects/ui/src/lib/internal/ids.ts","../../../projects/ui/src/lib/accordion/accordion.ts","../../../projects/ui/src/lib/internal/options.ts","../../../projects/ui/src/lib/auto-complete/auto-complete.ts","../../../projects/ui/src/lib/auto-complete/auto-complete.html","../../../projects/ui/src/lib/avatar/avatar.ts","../../../projects/ui/src/lib/badge/badge.ts","../../../projects/ui/src/lib/breadcrumb/breadcrumb.ts","../../../projects/ui/src/lib/breadcrumb/breadcrumb.html","../../../projects/ui/src/lib/button/button.ts","../../../projects/ui/src/lib/button-group/button-group.ts","../../../projects/ui/src/lib/card/card.ts","../../../projects/ui/src/lib/carousel/carousel.ts","../../../projects/ui/src/lib/carousel/carousel.html","../../../projects/ui/src/lib/checkbox/checkbox.ts","../../../projects/ui/src/lib/chip/chip.ts","../../../projects/ui/src/lib/dialog/dialog.ts","../../../projects/ui/src/lib/popover/popover.ts","../../../projects/ui/src/lib/confirm/confirm.ts","../../../projects/ui/src/lib/input/input.ts","../../../projects/ui/src/lib/select/select.ts","../../../projects/ui/src/lib/select/select.html","../../../projects/ui/src/lib/paginator/paginator.ts","../../../projects/ui/src/lib/paginator/paginator.html","../../../projects/ui/src/lib/progress/progress.ts","../../../projects/ui/src/lib/data-table/data-table.ts","../../../projects/ui/src/lib/data-table/data-table.html","../../../projects/ui/src/lib/internal/dates.ts","../../../projects/ui/src/lib/internal/calendar/calendar-helpers.ts","../../../projects/ui/src/lib/internal/calendar/calendar.ts","../../../projects/ui/src/lib/internal/calendar/calendar.html","../../../projects/ui/src/lib/internal/field/date-text.ts","../../../projects/ui/src/lib/date-picker/date-picker.ts","../../../projects/ui/src/lib/date-picker/date-picker.html","../../../projects/ui/src/lib/internal/time-row/time-row-helpers.ts","../../../projects/ui/src/lib/internal/time-row/time-row.ts","../../../projects/ui/src/lib/internal/time-row/time-row.html","../../../projects/ui/src/lib/date-time-picker/date-time-picker.ts","../../../projects/ui/src/lib/date-time-picker/date-time-picker.html","../../../projects/ui/src/lib/time-picker/time-picker.ts","../../../projects/ui/src/lib/time-picker/time-picker.html","../../../projects/ui/src/lib/date-time-range-picker/date-time-range-picker.ts","../../../projects/ui/src/lib/date-time-range-picker/date-time-range-picker.html","../../../projects/ui/src/lib/divider/divider.ts","../../../projects/ui/src/lib/drawer/drawer.ts","../../../projects/ui/src/lib/fieldset/fieldset.ts","../../../projects/ui/src/lib/file-upload/file-upload.ts","../../../projects/ui/src/lib/float-label/float-label.ts","../../../projects/ui/src/lib/galleria/galleria.ts","../../../projects/ui/src/lib/galleria/galleria.html","../../../projects/ui/src/lib/icon-field/icon-field.ts","../../../projects/ui/src/lib/image/image.ts","../../../projects/ui/src/lib/image/image.html","../../../projects/ui/src/lib/input-group/input-group.ts","../../../projects/ui/src/lib/input-number/input-number.ts","../../../projects/ui/src/lib/input-number/input-number.html","../../../projects/ui/src/lib/listbox/listbox.ts","../../../projects/ui/src/lib/menu/menu-panel.ts","../../../projects/ui/src/lib/menu/menu.ts","../../../projects/ui/src/lib/menubar/menubar.ts","../../../projects/ui/src/lib/message/message.ts","../../../projects/ui/src/lib/multi-select/multi-select.ts","../../../projects/ui/src/lib/multi-select/multi-select.html","../../../projects/ui/src/lib/panel/panel.ts","../../../projects/ui/src/lib/password/password.ts","../../../projects/ui/src/lib/radio/radio.ts","../../../projects/ui/src/lib/rating/rating.ts","../../../projects/ui/src/lib/select-button/select-button.ts","../../../projects/ui/src/lib/skeleton/skeleton.ts","../../../projects/ui/src/lib/slider/slider.ts","../../../projects/ui/src/lib/split-button/split-button.ts","../../../projects/ui/src/lib/stepper/stepper.ts","../../../projects/ui/src/lib/switch/switch.ts","../../../projects/ui/src/lib/table/table.ts","../../../projects/ui/src/lib/tabs/tabs.ts","../../../projects/ui/src/lib/tag/tag.ts","../../../projects/ui/src/lib/theme/surfaces.ts","../../../projects/ui/src/lib/theme/theme.ts","../../../projects/ui/src/lib/timeline/timeline.ts","../../../projects/ui/src/lib/toast/message-service.ts","../../../projects/ui/src/lib/toast/toast.ts","../../../projects/ui/src/lib/toggle-button/toggle-button.ts","../../../projects/ui/src/lib/toolbar/toolbar.ts","../../../projects/ui/src/lib/tooltip/tooltip.ts","../../../projects/ui/src/lib/tree/tree.ts"],"sourcesContent":["let counter = 0;\n\n/** A unique id for generated DOM ids (`aria-controls`, `aria-describedby`, `for`): `hx-select-panel-3`. */\nexport function nextId(prefix: string): string {\n return `${prefix}-${counter++}`;\n}\n","import { CdkAccordion, CdkAccordionItem } from '@angular/cdk/accordion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { nextId } from '../internal/ids';\n\nexport type HxAccordionValue = string | string[] | null;\n\n/**\n * Stacked panels of which one (or with `multiple` several) is open, on `@angular/cdk/accordion`.\n *\n * ```html\n * <hx-accordion [(value)]=\"open\" [headingLevel]=\"3\">\n * <hx-accordion-panel value=\"a\">\n * <hx-accordion-header>First</hx-accordion-header>\n * <hx-accordion-content>Content of the first panel</hx-accordion-content>\n * </hx-accordion-panel>\n * <hx-accordion-panel value=\"b\" disabled>…</hx-accordion-panel>\n * </hx-accordion>\n * ```\n *\n * `value` is the `value` of the open panel (`string | null`), or an array with `multiple`. The WAI-ARIA accordion\n * pattern: each header is a button inside a heading of `headingLevel`, with `aria-expanded` and `aria-controls`; the\n * content is a `region` labelled by its header. Arrow Down/Up, Home and End move between the headers.\n */\n@Component({\n selector: 'hx-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{ directive: CdkAccordion, inputs: ['multi: multiple'] }],\n host: {\n class: 'hx-accordion',\n '(keydown)': 'onKeydown($event)',\n },\n template: '<ng-content />',\n})\nexport class HxAccordion {\n /** The `value` of the open panel, or the values of the open panels with `multiple`. */\n readonly value = model<HxAccordionValue>(null);\n /** The level of the headings around the header buttons. */\n readonly headingLevel = input(3, { transform: numberAttribute });\n readonly #cdk = inject(CdkAccordion, { self: true });\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The values that are open, as a list. */\n readonly open = computed(() => {\n const value = this.value();\n return Array.isArray(value) ? value : value === null ? [] : [value];\n });\n\n /** Whether the panels open independently. */\n isMultiple(): boolean {\n return this.#cdk.multi;\n }\n\n /** Called by a panel when the user opened or closed it. */\n setOpen(panelValue: string, open: boolean): void {\n const current = untracked(() => this.open());\n if (this.#cdk.multi) {\n const has = current.includes(panelValue);\n if (open === has) return;\n this.value.set(open ? [...current, panelValue] : current.filter((v) => v !== panelValue));\n } else if (open) {\n if (current[0] !== panelValue) this.value.set(panelValue);\n } else if (current.includes(panelValue)) {\n this.value.set(null);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n const target = event.target as HTMLElement;\n if (!keys.includes(event.key) || !target.classList.contains('hx-accordion-trigger')) return;\n const headers = [\n ...this.#host.nativeElement.querySelectorAll<HTMLButtonElement>(\n '.hx-accordion-trigger:not(:disabled)',\n ),\n ];\n const at = headers.indexOf(target as HTMLButtonElement);\n if (at < 0) return;\n event.preventDefault();\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? headers.length - 1\n : (at + (event.key === 'ArrowDown' ? 1 : -1) + headers.length) % headers.length;\n headers[next].focus();\n }\n}\n\n/** One panel of an accordion: a header and its content. */\n@Component({\n selector: 'hx-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [CdkAccordionItem],\n host: {\n class: 'hx-accordion-panel',\n '[class.hx-accordion-panel-open]': 'expanded()',\n '[class.hx-accordion-panel-disabled]': 'disabled()',\n },\n template: '<ng-content />',\n})\nexport class HxAccordionPanel {\n /** Identifies the panel in the accordion's `value`. */\n readonly value = input.required<string>();\n /** The header cannot be toggled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Whether the panel is open, as a signal for the header and the content. */\n readonly expanded = signal(false);\n protected readonly item = inject(CdkAccordionItem, { self: true });\n readonly accordion = inject(HxAccordion);\n readonly headerId = nextId('hx-accordion-header');\n readonly contentId = nextId('hx-accordion-content');\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n untracked(() => {\n this.item.disabled = disabled;\n });\n });\n // the accordion's value drives the panel\n effect(() => {\n const open = this.accordion.open().includes(this.value());\n untracked(() => {\n if (this.item.expanded !== open) this.item.expanded = open;\n });\n });\n // and the user's toggles drive the accordion's value\n this.item.expandedChange.pipe(takeUntilDestroyed()).subscribe((expanded) => {\n this.expanded.set(expanded);\n this.accordion.setOpen(this.value(), expanded);\n });\n }\n\n toggle(): void {\n this.item.toggle();\n }\n}\n\n/** The header of a panel: a button inside a heading. */\n@Component({\n selector: 'hx-accordion-header',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-accordion-header' },\n template: `\n <ng-template #button>\n <button\n type=\"button\"\n class=\"hx-accordion-trigger\"\n [id]=\"panel.headerId\"\n [attr.aria-expanded]=\"panel.expanded()\"\n [attr.aria-controls]=\"panel.contentId\"\n [disabled]=\"panel.disabled()\"\n (click)=\"panel.toggle()\"\n >\n <span class=\"hx-accordion-title\"><ng-content /></span>\n <span class=\"hx-accordion-icon\" aria-hidden=\"true\"></span>\n </button>\n </ng-template>\n @switch (level()) {\n @case (1) { <h1 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h1> }\n @case (2) { <h2 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h2> }\n @case (3) { <h3 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h3> }\n @case (4) { <h4 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h4> }\n @case (5) { <h5 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h5> }\n @default { <h6 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h6> }\n }\n `,\n})\nexport class HxAccordionHeader {\n protected readonly panel = inject(HxAccordionPanel);\n protected readonly level = computed(() =>\n Math.min(6, Math.max(1, Math.round(this.panel.accordion.headingLevel()))),\n );\n}\n\n/** The content of a panel: a region labelled by its header; `inert` while the panel is closed. */\n@Component({\n selector: 'hx-accordion-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-accordion-content',\n '[attr.inert]': \"panel.expanded() ? null : ''\",\n },\n template: `\n <div class=\"hx-accordion-collapse\">\n <div class=\"hx-accordion-collapse-inner\">\n <div class=\"hx-accordion-body\" role=\"region\" [id]=\"panel.contentId\" [attr.aria-labelledby]=\"panel.headerId\">\n <ng-content />\n </div>\n </div>\n </div>\n `,\n})\nexport class HxAccordionContent {\n protected readonly panel = inject(HxAccordionPanel);\n}\n","/** A property name of an option, or a function that reads the value from it. */\nexport type Accessor<O, R> = string | ((option: O) => R);\n\n/** An option after `optionLabel`, `optionValue` and `optionDisabled` are applied. */\nexport interface HxOption<V = unknown> {\n label: string;\n value: V;\n disabled: boolean;\n}\n\n/** How values are compared to find the chosen option: `Object.is` unless the app passes its own. */\nexport const compareValues: (a: unknown, b: unknown) => boolean = Object.is;\n\nfunction read<R>(option: object, accessor: Accessor<unknown, R>, fallback: R): R {\n if (typeof accessor === 'function') return accessor(option);\n return accessor in option ? ((option as Record<string, unknown>)[accessor] as R) : fallback;\n}\n\n/**\n * Turns the `options` input of a component into `{ label, value, disabled }` entries. A primitive is its own\n * label and value; an object is read through the accessors (a property name or a function). A missing label is\n * an empty string, a missing value is the object itself, a missing `disabled` is `false`.\n */\nexport function resolveOptions<V = unknown>(\n options: readonly unknown[],\n label: Accessor<never, string>,\n value: Accessor<never, unknown>,\n disabled: Accessor<never, boolean>,\n): HxOption<V>[] {\n return options.map((option) => {\n if (option === null || typeof option !== 'object') {\n return { label: String(option), value: option as V, disabled: false };\n }\n return {\n label: String(read(option, label as Accessor<unknown, string>, '')),\n value: read(option, value as Accessor<unknown, unknown>, option) as V,\n disabled: Boolean(read(option, disabled as Accessor<unknown, boolean>, false)),\n };\n });\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxAutoCompleteSize = 'small' | 'medium' | 'large';\n\n/** The event of `(complete)`: the text to find suggestions for. */\nexport interface HxAutoCompleteEvent {\n query: string;\n}\n\n/**\n * A text field that suggests values while the user types. The component does not search: it emits `(complete)` with\n * the query (after `delay` ms and `minLength` characters) and shows the `suggestions` the app sets in answer.\n *\n * ```html\n * <label for=\"country\">Country</label>\n * <hx-auto-complete inputId=\"country\" [suggestions]=\"found()\" optionLabel=\"name\" (complete)=\"search($event.query)\"\n * forceSelection dropdown [(ngModel)]=\"country\" />\n * ```\n *\n * The value is the chosen suggestion (an array with `multiple`, shown as removable chips); without\n * `forceSelection` it is the typed text while nothing is chosen. A combobox with `aria-autocomplete=\"list\"` and\n * `aria-activedescendant`; the number of results is announced in a polite live region. It works with `ngModel`,\n * reactive forms and signal forms (`[formField]`).\n */\n@Component({\n selector: 'hx-auto-complete',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './auto-complete.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxAutoComplete), multi: true },\n ],\n host: {\n class: 'hx-auto-complete',\n '[class.hx-auto-complete-open]': 'open()',\n '[class.hx-auto-complete-sm]': \"size() === 'small'\",\n '[class.hx-auto-complete-lg]': \"size() === 'large'\",\n '[class.hx-auto-complete-fluid]': 'fluid()',\n '[class.hx-auto-complete-disabled]': 'isDisabled()',\n '[class.hx-auto-complete-invalid]': 'invalid()',\n '[class.hx-auto-complete-has-dropdown]': 'dropdown()',\n '[class.hx-filled]': 'filled()',\n },\n})\nexport class HxAutoComplete<V = unknown>\n implements ControlValueAccessor, FormValueControl<unknown>\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n\n /** The suggestions to show: primitives or objects. Set them in answer to `(complete)`. */\n readonly suggestions = input<readonly unknown[]>([]);\n /** The property (or function) that gives the text of a suggestion. */\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No results found');\n readonly size = input<HxAutoCompleteSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The least number of characters before `(complete)` fires (default 1). */\n readonly minLength = input<number | undefined>();\n /** Milliseconds to wait after the last key before `(complete)` fires. */\n readonly delay = input(300, { transform: numberAttribute });\n /** Text that matches no suggestion is cleared when the field loses focus. */\n readonly forceSelection = input(false, { transform: booleanAttribute });\n /** A button that asks for all suggestions (`(complete)` with an empty query). */\n readonly dropdown = input(false, { transform: booleanAttribute });\n /** Several values, shown as removable chips; the value is an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to mark the chosen suggestions (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n /** Fires when the app should look up suggestions for `query`. */\n readonly complete = output<HxAutoCompleteEvent>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly active = signal(-1);\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-auto-complete-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The text the user typed, `null` while the field shows the label of the value. */\n readonly #typed = signal<string | null>(null);\n /** Whether a query was answered (the live region and the empty message only speak then). */\n readonly #queried = signal(false);\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(this.suggestions(), this.optionLabel(), (o) => o, this.optionDisabled()),\n );\n\n protected readonly chips = computed(() => {\n const value = this.value();\n return this.multiple() && Array.isArray(value) ? value.map((v) => this.#toOption(v)) : [];\n });\n\n protected readonly inputText = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const value = this.value();\n if (this.multiple() || value === null || value === undefined) return '';\n return this.#toOption(value).label;\n });\n\n protected readonly filled = computed(() => this.inputText() !== '' || this.chips().length > 0);\n\n protected readonly activeId = computed(() =>\n this.open() && this.active() >= 0 ? this.optionId(this.active()) : null,\n );\n\n protected readonly status = computed(() => {\n if (!this.open() && !this.#queried()) return '';\n const count = this.items().length;\n return count === 0 ? this.emptyMessage() : `${count} ${count === 1 ? 'result' : 'results'}`;\n });\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n constructor() {\n this.#destroyRef.onDestroy(() => clearTimeout(this.#timer));\n }\n\n writeValue(value: unknown): void {\n this.#typed.set(null);\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n #toOption(value: unknown): HxOption<V> {\n return resolveOptions<V>([value], this.optionLabel(), (o) => o, 'disabled')[0];\n }\n\n protected optionId(index: number): string {\n return `${this.panelId}-${index}`;\n }\n\n protected isSelected(item: HxOption<V>): boolean {\n const same = this.compareWith();\n const value = this.value();\n return this.multiple()\n ? Array.isArray(value) && value.some((v) => same(v, item.value))\n : value !== null && value !== undefined && same(value, item.value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.#typed.set(text);\n if (!this.multiple() && !this.forceSelection()) this.#commit(text === '' ? null : text);\n clearTimeout(this.#timer);\n if (text.length < (this.minLength() ?? 1)) {\n this.open.set(false);\n return;\n }\n this.#timer = setTimeout(() => this.#search(text), this.delay());\n }\n\n #search(query: string): void {\n this.#queried.set(true);\n this.complete.emit({ query });\n this.active.set(-1);\n this.#show();\n }\n\n protected showAll(): void {\n if (this.isDisabled()) return;\n this.field().nativeElement.focus();\n this.#search('');\n }\n\n #show(): void {\n if (this.isDisabled()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const count = this.items().length;\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n if (!this.open()) {\n if (count > 0) this.#show();\n return;\n }\n const step = event.key === 'ArrowDown' ? 1 : -1;\n this.active.set(count === 0 ? -1 : (this.active() + step + count) % count);\n break;\n }\n case 'Home':\n case 'End':\n if (this.open() && count > 0) {\n event.preventDefault();\n this.active.set(event.key === 'Home' ? 0 : count - 1);\n }\n break;\n case 'Enter':\n if (this.open() && this.active() >= 0) {\n event.preventDefault();\n this.choose(this.items()[this.active()]);\n }\n break;\n case 'Escape':\n if (this.open()) {\n event.preventDefault();\n this.open.set(false);\n }\n break;\n case 'Backspace':\n if (this.multiple() && this.inputText() === '' && this.chips().length > 0) {\n this.removeChip(this.chips().length - 1);\n }\n break;\n case 'Tab':\n this.open.set(false);\n break;\n }\n }\n\n protected choose(item: HxOption<V>): void {\n if (item.disabled) return;\n clearTimeout(this.#timer);\n this.#typed.set(null);\n if (this.multiple()) {\n const same = this.compareWith();\n const current = (Array.isArray(this.value()) ? this.value() : []) as unknown[];\n this.#commit(\n current.some((v) => same(v, item.value))\n ? current.filter((v) => !same(v, item.value))\n : [...current, item.value],\n );\n this.#typed.set('');\n this.field().nativeElement.value = '';\n } else {\n this.#commit(item.value);\n this.open.set(false);\n }\n this.field().nativeElement.focus();\n }\n\n protected removeChip(index: number): void {\n const current = (Array.isArray(this.value()) ? this.value() : []) as unknown[];\n this.#commit(current.filter((_, i) => i !== index));\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.open.set(false);\n }\n\n protected onBlur(): void {\n clearTimeout(this.#timer);\n const typed = this.#typed();\n if (typed !== null && this.forceSelection()) {\n // text that is not the label of the value is dropped\n if (this.multiple() || typed !== this.#labelOfValue()) {\n if (!this.multiple()) this.#commit(null);\n }\n this.#typed.set(null);\n } else if (typed === '' && this.multiple()) {\n this.#typed.set(null);\n }\n this.open.set(false);\n this.#onTouched();\n this.touch.emit();\n }\n\n #labelOfValue(): string {\n const value = this.value();\n return value === null || value === undefined || this.multiple()\n ? ''\n : this.#toOption(value).label;\n }\n\n #commit(value: unknown): void {\n this.value.set(value);\n this.#onChange(value);\n }\n}\n","<div class=\"hx-auto-complete-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n @if (multiple()) {\n @for (item of chips(); track $index) {\n <span class=\"hx-auto-complete-chip\">\n <span>{{ item.label }}</span>\n <button\n type=\"button\"\n class=\"hx-auto-complete-chip-remove\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"isDisabled()\"\n (click)=\"removeChip($index)\"\n >\n <span class=\"hx-auto-complete-remove-icon\" aria-hidden=\"true\"></span>\n </button>\n </span>\n }\n }\n <input\n #field\n type=\"text\"\n class=\"hx-auto-complete-input\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"multiple() && chips().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"inputText()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-activedescendant]=\"activeId()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n</div>\n@if (dropdown()) {\n <button\n type=\"button\"\n class=\"hx-auto-complete-dropdown\"\n tabindex=\"-1\"\n aria-label=\"Show suggestions\"\n [disabled]=\"isDisabled()\"\n (click)=\"showAll()\"\n >\n <span class=\"hx-auto-complete-chevron\" aria-hidden=\"true\"></span>\n </button>\n}\n<span class=\"hx-auto-complete-status\" role=\"status\" aria-live=\"polite\">{{ status() }}</span>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-auto-complete-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (detach)=\"open.set(false)\"\n>\n <div class=\"hx-auto-complete-panel\">\n <div class=\"hx-auto-complete-list\" role=\"listbox\" [id]=\"panelId\" [attr.aria-multiselectable]=\"multiple() ? 'true' : null\" [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\">\n @for (item of items(); track $index) {\n <div\n class=\"hx-auto-complete-option\"\n role=\"option\"\n [id]=\"optionId($index)\"\n [class.hx-auto-complete-option-active]=\"$index === active()\"\n [attr.aria-selected]=\"isSelected(item)\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"choose(item)\"\n (mousemove)=\"active.set($index)\"\n >\n {{ item.label }}\n </div>\n } @empty {\n <div class=\"hx-auto-complete-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxAvatarSize = 'normal' | 'large' | 'xlarge';\nexport type HxAvatarShape = 'square' | 'circle';\n\n/**\n * A picture, initials or an icon for a person. `image` wins over `icon`, which wins over `label`.\n *\n * ```html\n * <hx-avatar image=\"/amy.png\" ariaLabel=\"Amy Elsner\" shape=\"circle\" />\n * <hx-avatar label=\"JK\" size=\"large\" />\n * <hx-avatar icon=\"pi pi-user\" />\n * ```\n *\n * With `ariaLabel` the avatar is a named `img` and what it draws is hidden from assistive technology; without it,\n * initials are read as text and a picture is decorative (empty `alt`), so name any avatar that stands alone.\n */\n@Component({\n selector: 'hx-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-avatar',\n '[attr.role]': \"ariaLabel() ? 'img' : null\",\n '[attr.aria-label]': 'ariaLabel() || null',\n '[class.hx-avatar-lg]': \"size() === 'large'\",\n '[class.hx-avatar-xl]': \"size() === 'xlarge'\",\n '[class.hx-avatar-circle]': \"shape() === 'circle'\",\n },\n template: `\n @if (image()) {\n <img class=\"hx-avatar-image\" [src]=\"image()\" alt=\"\" />\n } @else if (icon()) {\n <span class=\"hx-avatar-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n } @else if (label()) {\n <span class=\"hx-avatar-label\" [attr.aria-hidden]=\"ariaLabel() ? 'true' : null\">{{ label() }}</span>\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxAvatar {\n /** Initials or a short text. */\n readonly label = input<string>();\n /** CSS classes of an icon font, e.g. `pi pi-user`. */\n readonly icon = input<string>();\n /** Address of a picture. */\n readonly image = input<string>();\n readonly size = input<HxAvatarSize>('normal');\n readonly shape = input<HxAvatarShape>('square');\n /** Accessible name; makes the avatar a named `img`. */\n readonly ariaLabel = input<string>();\n}\n\n/**\n * Overlaps the avatars it contains, e.g. the people of a team, with a ring in the surface colour between them.\n *\n * ```html\n * <hx-avatar-group ariaLabel=\"Team\">\n * <hx-avatar image=\"/a.png\" shape=\"circle\" />\n * <hx-avatar label=\"+2\" shape=\"circle\" />\n * </hx-avatar-group>\n * ```\n */\n@Component({\n selector: 'hx-avatar-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-avatar-group', role: 'group', '[attr.aria-label]': 'ariaLabel() || null' },\n template: '<ng-content />',\n})\nexport class HxAvatarGroup {\n /** Accessible name of the group. */\n readonly ariaLabel = input<string>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxBadgeSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'contrast';\nexport type HxBadgeSize = 'small' | 'medium' | 'large' | 'xlarge';\n\n/**\n * A small count or status marker. Without a `value` it is a dot.\n *\n * ```html\n * <hx-badge value=\"4\" severity=\"danger\" />\n * <hx-badge severity=\"success\" />\n * ```\n *\n * The value is plain text, so a screen reader reads it where it sits. A dot carries no text: when it is the only\n * sign of a status, put the status in text next to it or in the name of the element it belongs to.\n */\n@Component({\n selector: 'hx-badge',\n template: '{{ value() }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-badge',\n '[class.hx-badge-dot]': 'isDot()',\n '[class.hx-badge-secondary]': \"severity() === 'secondary'\",\n '[class.hx-badge-success]': \"severity() === 'success'\",\n '[class.hx-badge-info]': \"severity() === 'info'\",\n '[class.hx-badge-warn]': \"severity() === 'warn'\",\n '[class.hx-badge-danger]': \"severity() === 'danger'\",\n '[class.hx-badge-contrast]': \"severity() === 'contrast'\",\n '[class.hx-badge-sm]': \"size() === 'small'\",\n '[class.hx-badge-lg]': \"size() === 'large'\",\n '[class.hx-badge-xl]': \"size() === 'xlarge'\",\n },\n})\nexport class HxBadge {\n /** The text or number shown; empty makes a dot. */\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxBadgeSeverity>('primary');\n readonly size = input<HxBadgeSize>('medium');\n\n protected isDot(): boolean {\n const value = this.value();\n return value === null || value === undefined || value === '';\n }\n}\n\n/**\n * Puts a badge on the top right corner of the wrapped element.\n *\n * ```html\n * <hx-overlay-badge value=\"2\" severity=\"danger\">\n * <button hx-button iconOnly aria-label=\"Inbox, 2 new\"><span class=\"pi pi-bell\"></span></button>\n * </hx-overlay-badge>\n * ```\n *\n * The badge text is read after the element, but an icon-only element still needs its own accessible name, ideally one\n * that includes the count, as above.\n */\n@Component({\n selector: 'hx-overlay-badge',\n imports: [HxBadge],\n template: `<ng-content /><hx-badge class=\"hx-overlay-badge-badge\" [value]=\"value()\" [severity]=\"severity()\" [size]=\"size()\" />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-overlay-badge' },\n})\nexport class HxOverlayBadge {\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxBadgeSeverity>('primary');\n readonly size = input<HxBadgeSize>('medium');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport type { HxMenuItem } from '../menu-item';\n\n/** One step of the trail: the menu item model, of which the breadcrumb uses label, icon, link and state. */\nexport type HxBreadcrumbItem = HxMenuItem;\n\n/**\n * The path to the current page. The last item is the current page (`aria-current=\"page\"`).\n *\n * ```html\n * <hx-breadcrumb [model]=\"items\" [home]=\"{ icon: 'pi pi-home', routerLink: '/' }\" />\n * ```\n */\n@Component({\n selector: 'hx-breadcrumb',\n imports: [RouterLink, NgTemplateOutlet],\n templateUrl: './breadcrumb.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-breadcrumb' },\n})\nexport class HxBreadcrumb {\n readonly model = input<readonly HxBreadcrumbItem[]>([]);\n readonly home = input<HxBreadcrumbItem>();\n /** Accessible name of the navigation landmark. */\n readonly ariaLabel = input('Breadcrumb');\n\n protected items(): HxBreadcrumbItem[] {\n return this.model().filter((item) => item.visible !== false);\n }\n}\n","<nav [attr.aria-label]=\"ariaLabel()\">\n <ol class=\"hx-breadcrumb-list\">\n @if (home(); as home) {\n <li class=\"hx-breadcrumb-item\">\n <ng-container [ngTemplateOutlet]=\"entry\" [ngTemplateOutletContext]=\"{ $implicit: home, current: false }\" />\n </li>\n }\n @for (item of items(); track $index; let last = $last) {\n @if (home() || $index > 0) {\n <li class=\"hx-breadcrumb-separator\" aria-hidden=\"true\"></li>\n }\n <li class=\"hx-breadcrumb-item\">\n <ng-container [ngTemplateOutlet]=\"entry\" [ngTemplateOutletContext]=\"{ $implicit: item, current: last }\" />\n </li>\n }\n </ol>\n</nav>\n\n<ng-template #entry let-item let-current=\"current\">\n @if (current || item.disabled || (!item.routerLink && !item.url)) {\n <span class=\"hx-breadcrumb-link\" [attr.aria-current]=\"current ? 'page' : null\" [attr.aria-disabled]=\"item.disabled ? 'true' : null\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </span>\n } @else if (item.routerLink) {\n <a class=\"hx-breadcrumb-link\" [routerLink]=\"item.routerLink\" [attr.target]=\"item.target\" [attr.aria-label]=\"item.label ? null : 'Home'\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </a>\n } @else {\n <a class=\"hx-breadcrumb-link\" [href]=\"item.url\" [attr.target]=\"item.target\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </a>\n }\n</ng-template>\n","import { booleanAttribute, DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\n\nexport type HxButtonVariant = 'filled' | 'outlined' | 'text' | 'link';\nexport type HxButtonSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'help'\n | 'danger'\n | 'contrast';\nexport type HxButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<button>` or `<a>` dressed as a Helix button. The label is the element's content; an icon is\n * an inline `<svg>` or an element with `hxButtonIcon` next to it. Styled by `@gravionlabs/helix-ui/styles.css`\n * on the `--h-button-*` design tokens.\n *\n * ```html\n * <button hx-button severity=\"success\" (click)=\"save()\">Save</button>\n * <button hx-button variant=\"outlined\" [loading]=\"saving()\">Save</button>\n * <button hx-button iconOnly aria-label=\"Add\"><svg …/></button>\n * ```\n *\n * A loading button stays focusable (`aria-busy`) but swallows clicks; a disabled one is the native `disabled`\n * attribute (or `aria-disabled=\"true\"` on an anchor). An icon-only button needs an accessible name.\n */\n@Directive({\n selector: 'button[hx-button], a[hx-button]',\n exportAs: 'hx-button',\n host: {\n class: 'hx-button',\n '[class.hx-button-outlined]': \"variant() === 'outlined'\",\n '[class.hx-button-text]': \"variant() === 'text'\",\n '[class.hx-button-link]': \"variant() === 'link'\",\n '[class.hx-button-secondary]': \"severity() === 'secondary'\",\n '[class.hx-button-success]': \"severity() === 'success'\",\n '[class.hx-button-info]': \"severity() === 'info'\",\n '[class.hx-button-warn]': \"severity() === 'warn'\",\n '[class.hx-button-help]': \"severity() === 'help'\",\n '[class.hx-button-danger]': \"severity() === 'danger'\",\n '[class.hx-button-contrast]': \"severity() === 'contrast'\",\n '[class.hx-button-sm]': \"size() === 'small'\",\n '[class.hx-button-lg]': \"size() === 'large'\",\n '[class.hx-button-rounded]': 'rounded()',\n '[class.hx-button-raised]': 'raised()',\n '[class.hx-button-fluid]': 'fluid()',\n '[class.hx-button-icon-only]': 'iconOnly()',\n '[class.hx-button-loading]': 'loading()',\n '[attr.aria-busy]': \"loading() ? 'true' : null\",\n },\n})\nexport class HxButton {\n /** How loud the button is: filled (default), outlined, text or link. */\n readonly variant = input<HxButtonVariant>('filled');\n\n /** What the button means: `primary` (default), `secondary` and the status colours. */\n readonly severity = input<HxButtonSeverity>('primary');\n\n readonly size = input<HxButtonSize>('medium');\n\n /** A pill instead of the 6 px radius; a circle for an icon-only button. */\n readonly rounded = input(false, { transform: booleanAttribute });\n\n /** Adds the elevation shadow. */\n readonly raised = input(false, { transform: booleanAttribute });\n\n /** Takes the full width of the container. */\n readonly fluid = input(false, { transform: booleanAttribute });\n\n /** Square button for a single icon; give it `aria-label`. */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n\n /** Shows a spinner and ignores clicks while an operation runs. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n constructor() {\n // A capture listener on the host itself fires before the click listeners of the consuming template\n // (a host `(click)` binding would not: its order against the template's is not guaranteed).\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event) => {\n if (this.loading() || host.getAttribute('aria-disabled') === 'true') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n host.addEventListener('click', guard, true);\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, true));\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Joins the `hx-button`s inside it into one control: the inner corners are square and neighbours share a border.\n *\n * ```html\n * <hx-button-group ariaLabel=\"Text alignment\">\n * <button hx-button variant=\"outlined\">Left</button>\n * <button hx-button variant=\"outlined\">Center</button>\n * <button hx-button variant=\"outlined\">Right</button>\n * </hx-button-group>\n * ```\n *\n * `role=\"group\"`; name it with `ariaLabel` when the buttons only make sense together.\n */\n@Component({\n selector: 'hx-button-group',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-button-group', role: 'group', '[attr.aria-label]': 'ariaLabel() || null' },\n})\nexport class HxButtonGroup {\n /** Accessible name of the group. */\n readonly ariaLabel = input<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * A surface for grouped content. Project a header (an image, say), a title, a subtitle, the content and a footer,\n * or use the `title` and `subtitle` inputs as a shortcut.\n *\n * ```html\n * <hx-card title=\"Billing\" subtitle=\"October\" [headingLevel]=\"3\">\n * <img hxCardHeader src=\"chart.png\" alt=\"\" />\n * Total due: 120 EUR\n * <div hxCardFooter><button hx-button>Pay</button></div>\n * </hx-card>\n * <hx-card>\n * <span hxCardTitle>Custom title</span>\n * <span hxCardSubtitle>Custom subtitle</span>\n * Content\n * </hx-card>\n * ```\n *\n * The title is a heading; `headingLevel` (default 2) is the level that fits the page's outline.\n */\n@Component({\n selector: 'hx-card',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-card' },\n template: `\n <ng-template #titleText>{{ title() }}<ng-content select=\"[hxCardTitle]\" /></ng-template>\n <div class=\"hx-card-header\"><ng-content select=\"[hxCardHeader]\" /></div>\n <div class=\"hx-card-body\">\n <div class=\"hx-card-caption\">\n @switch (level()) {\n @case (1) { <h1 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h1> }\n @case (2) { <h2 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h2> }\n @case (3) { <h3 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h3> }\n @case (4) { <h4 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h4> }\n @case (5) { <h5 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h5> }\n @default { <h6 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h6> }\n }\n <div class=\"hx-card-subtitle\">{{ subtitle() }}<ng-content select=\"[hxCardSubtitle]\" /></div>\n </div>\n <div class=\"hx-card-content\"><ng-content /></div>\n <div class=\"hx-card-footer\"><ng-content select=\"[hxCardFooter]\" /></div>\n </div>\n `,\n})\nexport class HxCard {\n /** A shortcut for the title slot. */\n readonly title = input('');\n /** A shortcut for the subtitle slot. */\n readonly subtitle = input('');\n /** The level of the title heading, 1 to 6. */\n readonly headingLevel = input(2, { transform: numberAttribute });\n\n protected readonly level = computed(() =>\n Math.min(6, Math.max(1, Math.round(this.headingLevel()))),\n );\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\nexport type HxCarouselOrientation = 'horizontal' | 'vertical';\n\n/** How many items are visible and scrolled at a viewport width (`breakpoint` is a max-width, `'1024px'`). */\nexport interface HxCarouselResponsiveOption {\n breakpoint: string;\n numVisible: number;\n numScroll: number;\n}\n\nexport interface HxCarouselItemContext<T = unknown> {\n $implicit: T;\n index: number;\n}\n\n/** The template of one item: `<ng-template hxCarouselItem let-item let-index=\"index\">`. */\n@Directive({ selector: 'ng-template[hxCarouselItem]' })\nexport class HxCarouselItem {\n readonly template = inject<TemplateRef<HxCarouselItemContext>>(TemplateRef);\n}\n\n/**\n * A slider over a list of items: `numVisible` items at a time, moved by `numScroll` with the previous/next buttons,\n * the page indicators or the arrow keys; optional autoplay and circular paging.\n *\n * ```html\n * <hx-carousel [value]=\"products\" [numVisible]=\"3\" [numScroll]=\"1\" [responsiveOptions]=\"responsive\" ariaLabel=\"Products\">\n * <ng-template hxCarouselItem let-product>…</ng-template>\n * </hx-carousel>\n * ```\n *\n * The carousel is a `region` with `aria-roledescription=\"carousel\"`; the items are `group`s named \"n of m\"; items\n * outside the viewport are hidden from assistive technology and the tab order. Autoplay pauses while the pointer or\n * the focus is inside and stays off when the user prefers reduced motion.\n */\n@Component({\n selector: 'hx-carousel',\n imports: [NgTemplateOutlet],\n templateUrl: './carousel.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-carousel',\n '[class.hx-carousel-vertical]': \"orientation() === 'vertical'\",\n '(mouseenter)': 'hovered.set(true)',\n '(mouseleave)': 'hovered.set(false)',\n '(focusin)': 'focused.set(true)',\n '(focusout)': 'onFocusOut($event)',\n '(window:resize)': 'onResize()',\n },\n})\nexport class HxCarousel<T = unknown> {\n readonly value = input<readonly T[]>([]);\n readonly numVisible = input(1, { transform: numberAttribute });\n readonly numScroll = input(1, { transform: numberAttribute });\n /** After the last page comes the first again. */\n readonly circular = input(false, { transform: booleanAttribute });\n /** Milliseconds between automatic page changes; 0 is off. */\n readonly autoplayInterval = input(0, { transform: numberAttribute });\n readonly orientation = input<HxCarouselOrientation>('horizontal');\n /** Height of the viewport when vertical. */\n readonly verticalViewPortHeight = input('300px');\n readonly showIndicators = input(true, { transform: booleanAttribute });\n readonly showNavigators = input(true, { transform: booleanAttribute });\n readonly responsiveOptions = input<readonly HxCarouselResponsiveOption[]>();\n /** The current page (0-based); `pageChange` is its output. */\n readonly page = model(0);\n readonly ariaLabel = input('Carousel');\n readonly prevLabel = input('Previous page');\n readonly nextLabel = input('Next page');\n /** `{page}` and `{pageCount}` are replaced. */\n readonly pageLabelTemplate = input('Page {page} of {pageCount}');\n /** `{index}` and `{count}` are replaced. */\n readonly itemLabelTemplate = input('{index} of {count}');\n\n protected readonly itemTemplate = contentChild(HxCarouselItem);\n protected readonly hovered = signal(false);\n protected readonly focused = signal(false);\n protected readonly id = nextId('hx-carousel');\n private readonly viewportWidth = signal(typeof window === 'undefined' ? 1024 : window.innerWidth);\n private readonly reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n /** The visible/scroll counts for the current viewport (the smallest matching breakpoint wins). */\n private readonly counts = computed(() => {\n const options = [...(this.responsiveOptions() ?? [])]\n .map((o) => ({ ...o, px: Number.parseFloat(o.breakpoint) }))\n .filter((o) => !Number.isNaN(o.px))\n .sort((a, b) => a.px - b.px);\n const match = options.find((o) => this.viewportWidth() <= o.px);\n const visible = Math.max(1, match?.numVisible ?? this.numVisible());\n const scroll = Math.max(1, match?.numScroll ?? this.numScroll());\n return { visible, scroll };\n });\n protected readonly visible = computed(() => this.counts().visible);\n protected readonly scroll = computed(() => this.counts().scroll);\n\n protected readonly pageCount = computed(() => {\n const n = this.value().length;\n const { visible, scroll } = this.counts();\n return n <= visible ? 1 : Math.ceil((n - visible) / scroll) + 1;\n });\n protected readonly currentPage = computed(() =>\n Math.min(Math.max(0, this.page()), this.pageCount() - 1),\n );\n /** The index of the first visible item. */\n protected readonly first = computed(() => {\n const n = this.value().length;\n const { visible, scroll } = this.counts();\n return Math.max(0, Math.min(this.currentPage() * scroll, n - visible));\n });\n protected readonly pages = computed(() => Array.from({ length: this.pageCount() }, (_, i) => i));\n protected readonly isFirst = computed(() => this.currentPage() === 0);\n protected readonly isLast = computed(() => this.currentPage() >= this.pageCount() - 1);\n protected readonly prevDisabled = computed(() => !this.circular() && this.isFirst());\n protected readonly nextDisabled = computed(() => !this.circular() && this.isLast());\n protected readonly itemSize = computed(() => 100 / this.visible());\n protected readonly offset = computed(() => -this.first() * this.itemSize());\n protected readonly transform = computed(() =>\n this.orientation() === 'vertical'\n ? `translateY(${this.offset()}%)`\n : `translateX(${this.offset()}%)`,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n let timer: ReturnType<typeof setInterval> | undefined;\n const stop = () => {\n if (timer !== undefined) clearInterval(timer);\n timer = undefined;\n };\n // autoplay: runs while nothing is hovered or focused and motion is not reduced\n effect(() => {\n const interval = this.autoplayInterval();\n const paused = this.hovered() || this.focused() || this.reducedMotion || this.pageCount() < 2;\n stop();\n if (interval > 0 && !paused) {\n timer = setInterval(() => untracked(() => this.next(true)), interval);\n }\n });\n destroyRef.onDestroy(stop);\n }\n\n protected isVisible(index: number): boolean {\n return index >= this.first() && index < this.first() + this.visible();\n }\n\n protected itemLabel(index: number): string {\n return this.itemLabelTemplate()\n .replace('{index}', String(index + 1))\n .replace('{count}', String(this.value().length));\n }\n\n protected pageLabel(page: number): string {\n return this.pageLabelTemplate()\n .replace('{page}', String(page + 1))\n .replace('{pageCount}', String(this.pageCount()));\n }\n\n /** Goes to a page (0-based); wraps around when `circular`, else clamps. */\n goTo(page: number): void {\n const count = this.pageCount();\n let target = page;\n if (this.circular()) target = ((page % count) + count) % count;\n else target = Math.min(Math.max(0, page), count - 1);\n if (target === this.currentPage()) return;\n this.page.set(target);\n }\n\n next(auto = false): void {\n if (auto && !this.circular() && this.isLast()) {\n this.goTo(0);\n return;\n }\n this.goTo(this.currentPage() + 1);\n }\n\n prev(): void {\n this.goTo(this.currentPage() - 1);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const vertical = this.orientation() === 'vertical';\n const back = vertical ? 'ArrowUp' : 'ArrowLeft';\n const forward = vertical ? 'ArrowDown' : 'ArrowRight';\n switch (event.key) {\n case back:\n event.preventDefault();\n this.prev();\n break;\n case forward:\n event.preventDefault();\n this.next();\n break;\n case 'Home':\n event.preventDefault();\n this.goTo(0);\n break;\n case 'End':\n event.preventDefault();\n this.goTo(this.pageCount() - 1);\n break;\n }\n }\n\n protected onIndicatorKeydown(event: KeyboardEvent): void {\n this.onKeydown(event);\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n // keep the focus on the indicator of the new page\n queueMicrotask(() => {\n const host = (event.currentTarget as HTMLElement).closest('.hx-carousel-indicators');\n host?.querySelector<HTMLElement>('[aria-selected=\"true\"]')?.focus();\n });\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (!event.relatedTarget || !host.contains(event.relatedTarget as Node))\n this.focused.set(false);\n }\n\n protected onResize(): void {\n this.viewportWidth.set(window.innerWidth);\n }\n}\n","<section class=\"hx-carousel-region\" role=\"region\" aria-roledescription=\"carousel\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-live]=\"autoplayInterval() > 0 && !(hovered() || focused()) ? 'off' : 'polite'\">\n <div class=\"hx-carousel-header\"><ng-content select=\"[hxCarouselHeader]\" /></div>\n <div class=\"hx-carousel-content\">\n @if (showNavigators()) {\n <button type=\"button\" class=\"hx-carousel-button hx-carousel-prev\" [disabled]=\"prevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"prev()\"></button>\n }\n <div class=\"hx-carousel-viewport\" [id]=\"id + '-viewport'\" tabindex=\"0\" [style.height]=\"orientation() === 'vertical' ? verticalViewPortHeight() : null\" (keydown)=\"onKeydown($event)\">\n <div class=\"hx-carousel-track\" [style.transform]=\"transform()\">\n @for (item of value(); track $index) {\n <div\n class=\"hx-carousel-item\"\n role=\"group\"\n aria-roledescription=\"slide\"\n [class.hx-carousel-item-active]=\"isVisible($index)\"\n [attr.aria-label]=\"itemLabel($index)\"\n [attr.aria-hidden]=\"isVisible($index) ? null : 'true'\"\n [attr.inert]=\"isVisible($index) ? null : ''\"\n [style.flex-basis.%]=\"itemSize()\"\n >\n @if (itemTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\" />\n }\n </div>\n }\n </div>\n </div>\n @if (showNavigators()) {\n <button type=\"button\" class=\"hx-carousel-button hx-carousel-next\" [disabled]=\"nextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"next()\"></button>\n }\n </div>\n @if (showIndicators() && pageCount() > 1) {\n <div class=\"hx-carousel-indicators\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' pages'\">\n @for (p of pages(); track p) {\n <button\n type=\"button\"\n class=\"hx-carousel-indicator\"\n role=\"tab\"\n [class.hx-carousel-indicator-active]=\"p === currentPage()\"\n [attr.aria-selected]=\"p === currentPage()\"\n [attr.aria-label]=\"pageLabel(p)\"\n [attr.aria-controls]=\"id + '-viewport'\"\n [attr.tabindex]=\"p === currentPage() ? 0 : -1\"\n (click)=\"goTo(p)\"\n (keydown)=\"onIndicatorKeydown($event)\"\n ></button>\n }\n </div>\n }\n <div class=\"hx-carousel-footer\"><ng-content select=\"[hxCarouselFooter]\" /></div>\n</section>\n","import { Directive, input } from '@angular/core';\n\nexport type HxCheckboxSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<input type=\"checkbox\">` drawn as a Helix checkbox (CSS only). It is a real checkbox: `checked`,\n * `indeterminate`, `disabled`, `ngModel`, reactive and signal forms, keyboard and screen readers all work\n * as for any checkbox.\n *\n * ```html\n * <label><input type=\"checkbox\" hx-checkbox [(ngModel)]=\"agreed\" /> I agree</label>\n * <input type=\"checkbox\" hx-checkbox [indeterminate]=\"some\" aria-label=\"Select all\" />\n * ```\n *\n * Put it in a `<label>` with its text (or give it `aria-label`); the invalid look comes from\n * `aria-invalid=\"true\"` and from `ng-invalid ng-touched`.\n */\n@Directive({\n selector: 'input[hx-checkbox]',\n exportAs: 'hx-checkbox',\n host: {\n class: 'hx-checkbox',\n '[class.hx-checkbox-sm]': \"size() === 'small'\",\n '[class.hx-checkbox-lg]': \"size() === 'large'\",\n },\n})\nexport class HxCheckbox {\n readonly size = input<HxCheckboxSize>('medium');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n/**\n * A compact element for an entity (a person, a filter, a tag the user added), optionally removable.\n *\n * ```html\n * <hx-chip label=\"Amy Elsner\" image=\"/amy.png\" />\n * <hx-chip label=\"Angular\" icon=\"pi pi-code\" removable (remove)=\"drop('Angular')\" />\n * ```\n *\n * A removable chip is focusable: Backspace or Delete removes it, as does its remove button (named by\n * `removeLabel`). The chip only reports the removal through `(remove)`; the app drops it from its data.\n */\n@Component({\n selector: 'hx-chip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-chip',\n '[class.hx-chip-removable]': 'removable()',\n '[attr.role]': \"removable() ? 'group' : null\",\n '[attr.aria-label]': 'removable() ? label() : null',\n '[attr.tabindex]': 'removable() ? 0 : null',\n '(keydown.backspace)': 'onKey($event)',\n '(keydown.delete)': 'onKey($event)',\n },\n template: `\n @if (image()) {\n <img class=\"hx-chip-image\" [src]=\"image()\" [alt]=\"imageAlt()\" />\n } @else if (icon()) {\n <span class=\"hx-chip-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-chip-label\">{{ label() }}<ng-content /></span>\n @if (removable()) {\n <button type=\"button\" class=\"hx-chip-remove\" [attr.aria-label]=\"removeLabel()\" (click)=\"remove.emit()\">\n <span class=\"hx-chip-remove-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxChip {\n /** The text; content can be projected as well. */\n readonly label = input<string>();\n /** CSS classes of an icon font, e.g. `pi pi-user`. Not shown when there is an `image`. */\n readonly icon = input<string>();\n /** Address of a picture shown before the label. */\n readonly image = input<string>();\n /** Alternative text of the picture; empty (decorative) by default because the label names the chip. */\n readonly imageAlt = input('');\n /** Shows a remove button and makes the chip focusable. */\n readonly removable = input(false, { transform: booleanAttribute });\n /** Accessible name of the remove button. */\n readonly removeLabel = input('Remove');\n\n /** The chip should be removed: the remove button was pressed, or Backspace/Delete on the chip. */\n readonly remove = output<void>();\n\n protected onKey(event: Event): void {\n if (!this.removable() || event.target !== event.currentTarget) return;\n event.preventDefault();\n this.remove.emit();\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay, type PositionStrategy } from '@angular/cdk/overlay';\nimport { NgComponentOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n Injectable,\n InjectionToken,\n Injector,\n inject,\n input,\n model,\n output,\n type TemplateRef,\n type Type,\n untracked,\n viewChild,\n} from '@angular/core';\nimport type { Observable } from 'rxjs';\nimport { nextId } from '../internal/ids';\n\nexport type HxDialogPosition =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\n/** Where a dialog sits on the screen, as a CDK global position strategy. */\nfunction positionStrategy(overlay: Overlay, position: HxDialogPosition): PositionStrategy {\n const strategy = overlay.position().global();\n const [vertical, horizontal] = position.includes('-')\n ? (position.split('-') as ['top' | 'bottom', 'left' | 'right'])\n : position === 'left' || position === 'right'\n ? ['center', position]\n : [position, 'center'];\n if (vertical === 'top') strategy.top('1rem');\n else if (vertical === 'bottom') strategy.bottom('1rem');\n else strategy.centerVertically();\n if (horizontal === 'left') strategy.left('1rem');\n else if (horizontal === 'right') strategy.right('1rem');\n else strategy.centerHorizontally();\n return strategy;\n}\n\n/**\n * The box of a dialog: a title (the `header`, plus content marked `hxDialogHeader`), the content, a footer (content\n * marked `hxDialogFooter`) and a close button. Used by `hx-dialog` and by the dialogs opened with `HxDialogService`.\n * The close button comes last in the DOM, so the first control of the content gets the focus when the dialog opens.\n */\n@Component({\n selector: 'hx-dialog-frame',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-dialog' },\n template: `\n <h2 class=\"hx-dialog-title\" [id]=\"titleId()\">{{ header() }}<ng-content select=\"[hxDialogHeader]\" /></h2>\n <div class=\"hx-dialog-content\"><ng-content /></div>\n <div class=\"hx-dialog-footer\"><ng-content select=\"[hxDialogFooter]\" /></div>\n @if (closable()) {\n <button type=\"button\" class=\"hx-dialog-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"closeClick.emit()\">\n <span class=\"hx-dialog-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxDialogFrame {\n readonly header = input<string>();\n readonly titleId = input<string>();\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n readonly closeClick = output<void>();\n}\n\n/**\n * A modal or non-modal dialog, on `@angular/cdk/dialog`.\n *\n * ```html\n * <hx-dialog [(visible)]=\"open\" header=\"Edit profile\" width=\"30rem\">\n * <input hx-input [(ngModel)]=\"name\" />\n * <div hxDialogFooter>\n * <button hx-button variant=\"text\" (click)=\"open = false\">Cancel</button>\n * <button hx-button (click)=\"save()\">Save</button>\n * </div>\n * </hx-dialog>\n * ```\n *\n * `visible` is two-way: closing from the close button, Escape or the mask sets it to `false`. While it is `true` the\n * dialog is open; the content is created when it opens and destroyed when it closes. A modal dialog puts a mask behind\n * it, traps the focus, hides the rest of the page from assistive technology, and gives the focus back to the element\n * that had it when the dialog closes.\n */\n@Component({\n selector: 'hx-dialog',\n imports: [HxDialogFrame],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-dialog-anchor' },\n template: `\n <ng-template #panel>\n <hx-dialog-frame [header]=\"header()\" [titleId]=\"titleId\" [closable]=\"closable()\" [closeLabel]=\"closeLabel()\" (closeClick)=\"visible.set(false)\">\n <ng-container ngProjectAs=\"[hxDialogHeader]\"><ng-content select=\"[hxDialogHeader]\" /></ng-container>\n <ng-content />\n <ng-container ngProjectAs=\"[hxDialogFooter]\"><ng-content select=\"[hxDialogFooter]\" /></ng-container>\n </hx-dialog-frame>\n </ng-template>\n `,\n})\nexport class HxDialog {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n readonly #destroyRef = inject(DestroyRef);\n\n /** Whether the dialog is open. */\n readonly visible = model(false);\n /** Title; content marked `hxDialogHeader` is added after it. */\n readonly header = input<string>();\n /** A mask behind the dialog, a focus trap, and the page behind hidden from assistive technology. */\n readonly modal = input(true, { transform: booleanAttribute });\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Clicking the mask closes a modal dialog. */\n readonly dismissableMask = input(false, { transform: booleanAttribute });\n readonly position = input<HxDialogPosition>('center');\n /** CSS width, e.g. `30rem`. */\n readonly width = input<string>();\n readonly height = input<string>();\n /** Extra CSS classes for the overlay pane. */\n readonly panelClass = input<string | string[]>();\n /** Accessible name of the close button. */\n readonly closeLabel = input('Close');\n /** Accessible name of the dialog when there is no `header`. */\n readonly ariaLabel = input<string>();\n\n /** The dialog opened. */\n readonly shown = output<void>();\n /** The dialog closed, by whatever means. */\n readonly hidden = output<void>();\n\n protected readonly titleId = nextId('hx-dialog-title');\n #ref: DialogRef<unknown, unknown> | undefined;\n\n constructor() {\n effect(() => {\n const visible = this.visible();\n const panel = this.panel();\n untracked(() => {\n if (visible && panel) this.#open(panel);\n else if (!visible) this.#close();\n });\n });\n this.#destroyRef.onDestroy(() => this.#close());\n }\n\n #open(panel: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const modal = this.modal();\n const header = this.header();\n const ref = this.#dialog.open(panel, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: ['hx-dialog-panel', ...[this.panelClass() ?? []].flat()],\n width: this.width(),\n height: this.height(),\n maxWidth: 'calc(100vw - 2rem)',\n maxHeight: 'calc(100vh - 2rem)',\n positionStrategy: positionStrategy(this.#overlay, this.position()),\n ariaModal: modal,\n ariaLabelledBy: header ? this.titleId : null,\n ariaLabel: header ? null : (this.ariaLabel() ?? null),\n // Escape and the mask are handled below, so each can be switched off on its own\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (\n event.key === 'Escape' &&\n this.closeOnEscape() &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => {\n if (this.dismissableMask()) this.visible.set(false);\n });\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n this.hidden.emit();\n }\n });\n this.shown.emit();\n }\n\n #close(): void {\n this.#ref?.close();\n }\n}\n\n/** The data of a dialog opened with `HxDialogService`, for the component inside: `inject(HX_DIALOG_DATA)`. */\nexport const HX_DIALOG_DATA = new InjectionToken<unknown>('HX_DIALOG_DATA');\n\n/** A dialog opened with `HxDialogService`: close it, and wait for its result. */\nexport class HxDialogRef<R = unknown, C = unknown> {\n /** The component shown inside, once it exists. */\n componentInstance: C | null = null;\n /** Emits the result (or `undefined`) once, when the dialog has closed. */\n readonly closed: Observable<R | undefined>;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n }\n\n /** Closes the dialog; `result` is what `closed` emits. */\n close(result?: R): void {\n this.ref.close(result);\n }\n}\n\nexport interface HxDialogConfig<D = unknown> {\n /** Handed to the component: `inject(HX_DIALOG_DATA)`. */\n data?: D;\n header?: string;\n width?: string;\n height?: string;\n modal?: boolean;\n closable?: boolean;\n closeOnEscape?: boolean;\n dismissableMask?: boolean;\n position?: HxDialogPosition;\n panelClass?: string | string[];\n closeLabel?: string;\n /** Accessible name when there is no `header`. */\n ariaLabel?: string;\n}\n\ninterface HostData {\n component: Type<unknown>;\n config: HxDialogConfig;\n ref: HxDialogRef;\n titleId: string;\n}\n\nconst HX_DIALOG_HOST_DATA = new InjectionToken<HostData>('HX_DIALOG_HOST_DATA');\n\n/** The inside of a service dialog: a frame around the component that was asked for. */\n@Component({\n selector: 'hx-dialog-host',\n imports: [HxDialogFrame, NgComponentOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <hx-dialog-frame\n [header]=\"data.config.header\"\n [titleId]=\"data.titleId\"\n [closable]=\"data.config.closable ?? true\"\n [closeLabel]=\"data.config.closeLabel ?? 'Close'\"\n (closeClick)=\"data.ref.close()\"\n >\n <ng-container [ngComponentOutlet]=\"data.component\" [ngComponentOutletInjector]=\"injector\" />\n </hx-dialog-frame>\n `,\n})\nexport class HxDialogHost {\n protected readonly data = inject<HostData>(HX_DIALOG_HOST_DATA);\n protected readonly injector = Injector.create({\n providers: [\n { provide: HX_DIALOG_DATA, useValue: this.data.config.data },\n { provide: HxDialogRef, useValue: this.data.ref },\n ],\n parent: inject(Injector),\n });\n private readonly outlet = viewChild(NgComponentOutlet);\n\n constructor() {\n afterNextRender(() => {\n this.data.ref.componentInstance = (this.outlet()?.componentInstance as unknown) ?? null;\n });\n }\n}\n\n/**\n * Opens a component in a dialog.\n *\n * ```ts\n * const ref = inject(HxDialogService).open(EditUser, { header: 'Edit user', width: '30rem', data: { id: 7 } });\n * ref.closed.subscribe((result) => console.log(result));\n * ```\n *\n * Inside `EditUser`: `inject(HX_DIALOG_DATA)` is the `data`, `inject(HxDialogRef).close(result)` closes the dialog\n * with a result. The options are those of `<hx-dialog>`; Escape and (with `dismissableMask`) the mask close it with\n * no result.\n */\n@Injectable({ providedIn: 'root' })\nexport class HxDialogService {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n\n open<C, R = unknown, D = unknown>(\n component: Type<C>,\n config: HxDialogConfig<D> = {},\n ): HxDialogRef<R, C> {\n const modal = config.modal ?? true;\n const titleId = nextId('hx-dialog-title');\n let hxRef!: HxDialogRef<R, C>;\n const ref = this.#dialog.open<R, unknown, HxDialogHost>(HxDialogHost, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: ['hx-dialog-panel', ...[config.panelClass ?? []].flat()],\n width: config.width,\n height: config.height,\n maxWidth: 'calc(100vw - 2rem)',\n maxHeight: 'calc(100vh - 2rem)',\n positionStrategy: positionStrategy(this.#overlay, config.position ?? 'center'),\n ariaModal: modal,\n ariaLabelledBy: config.header ? titleId : null,\n ariaLabel: config.header ? null : (config.ariaLabel ?? null),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n providers: (cdkRef) => {\n hxRef = new HxDialogRef<R, C>(cdkRef as DialogRef<R, unknown>);\n return [\n { provide: HX_DIALOG_HOST_DATA, useValue: { component, config, ref: hxRef, titleId } },\n ];\n },\n });\n ref.keydownEvents.subscribe((event) => {\n if (\n (config.closeOnEscape ?? true) &&\n event.key === 'Escape' &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n ref.close();\n }\n });\n ref.backdropClick.subscribe(() => {\n if (config.dismissableMask) ref.close();\n });\n return hxRef;\n }\n}\n","import {\n CdkConnectedOverlay,\n type ConnectedOverlayPositionChange,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Injector,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\n/**\n * A small panel anchored to an element, with arbitrary content and an arrow pointing at the element.\n *\n * ```html\n * <button hx-button aria-haspopup=\"dialog\" (click)=\"op.toggle($event)\">Share</button>\n * <hx-popover #op ariaLabel=\"Share this page\">\n * <input hx-input aria-label=\"Link\" value=\"https://…\" />\n * </hx-popover>\n * ```\n *\n * `toggle(event, target?)`, `show(event, target?)` and `hide()` open it below the element of the event (or `target`),\n * or above when there is no room. An outside click and Escape close it. It is a non-modal `role=\"dialog\"`: the focus\n * moves to its first control when it has one and returns to the element that opened it when it closes, and the page\n * behind stays reachable. Name it with `ariaLabel` or `ariaLabelledBy`, and put `aria-haspopup=\"dialog\"` on the\n * trigger. Projected content is created with the popover, only shown while it is open.\n */\n@Component({\n selector: 'hx-popover',\n imports: [CdkConnectedOverlay],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-popover-anchor' },\n template: `\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-popover-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin() ?? fallbackOrigin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onKeydown($event)\"\n (positionChange)=\"onPosition($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"onDetach()\"\n >\n <div\n #panel\n class=\"hx-popover\"\n [class]=\"panelClass() ?? ''\"\n [attr.role]=\"role()\"\n [class.hx-popover-above]=\"above()\"\n [class.hx-popover-end]=\"end()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-describedby]=\"ariaDescribedBy() || null\"\n >\n <div class=\"hx-popover-content\"><ng-content /></div>\n </div>\n </ng-template>\n `,\n})\nexport class HxPopover {\n readonly #injector = inject(Injector);\n private readonly panel = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Accessible name of the popover. */\n readonly ariaLabel = input<string>();\n readonly ariaLabelledBy = input<string>();\n readonly ariaDescribedBy = input<string>();\n /** `alertdialog` for a question that needs an answer (the confirm popup). */\n readonly role = input<'dialog' | 'alertdialog'>('dialog');\n /** Extra CSS classes on the panel. */\n readonly panelClass = input<string>();\n /** A click outside closes it. */\n readonly dismissable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly open = signal(false);\n protected readonly origin = signal<Element | null>(null);\n protected readonly fallbackOrigin = document.body;\n /** The popover is above the element (no room below). */\n protected readonly above = signal(false);\n /** The popover is aligned to the end edge of the element (no room to extend to the right). */\n protected readonly end = signal(false);\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\n ];\n\n /** Opens it at the element of the event (or `target`), or closes it when it is open. */\n toggle(event: Event | Element, target?: Element | null): void {\n if (this.open()) this.hide();\n else this.show(event, target);\n }\n\n /** Opens it at `target`, else at the element of the event; an element can be passed instead of an event. */\n show(event: Event | Element, target?: Element | null): void {\n if (this.open()) return;\n const fromEvent =\n event instanceof Element ? event : ((event.currentTarget ?? event.target) as Element | null);\n this.origin.set(target ?? fromEvent);\n this.open.set(true);\n this.shown.emit();\n }\n\n hide(refocus = true): void {\n if (!this.open()) return;\n this.open.set(false);\n this.hidden.emit();\n if (refocus) (this.origin() as HTMLElement | null)?.focus?.();\n }\n\n protected onPosition(change: ConnectedOverlayPositionChange): void {\n this.above.set(change.connectionPair.overlayY === 'bottom');\n this.end.set(change.connectionPair.overlayX === 'end');\n }\n\n protected onAttach(): void {\n afterNextRender(\n () => {\n const first = this.panel()?.nativeElement.querySelector<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n );\n first?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onDetach(): void {\n if (this.open()) {\n this.open.set(false);\n this.hidden.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.closeOnEscape()) {\n event.preventDefault();\n this.hide();\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.dismissable()) return;\n if (!this.origin()?.contains(event.target as Node)) this.hide(false);\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n Injectable,\n inject,\n signal,\n type TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { HxButton, type HxButtonSeverity } from '../button/button';\nimport { HxDialogFrame } from '../dialog/dialog';\nimport { nextId } from '../internal/ids';\nimport { HxPopover } from '../popover/popover';\n\n/** One question for the user. */\nexport interface HxConfirmation {\n message: string;\n /** Title of a confirm dialog. */\n header?: string;\n /** CSS classes of an icon font, e.g. `pi pi-exclamation-triangle`. */\n icon?: string;\n acceptLabel?: string;\n rejectLabel?: string;\n acceptSeverity?: HxButtonSeverity;\n /**\n * An element (or the event that came from it): the question is asked in a popup anchored to it by\n * `<hx-confirm-popup />`. Without it the question is a centred dialog from `<hx-confirm-dialog />`.\n */\n target?: Element | Event | null;\n /** Called when the user accepts. */\n accept?: () => void;\n /** Called when the user rejects, presses Escape or clicks away. */\n reject?: () => void;\n}\n\n/**\n * Asks the user to confirm an action. Put `<hx-confirm-dialog />` and/or `<hx-confirm-popup />` once in the app\n * (e.g. in the root component), then:\n *\n * ```ts\n * confirmation.confirm({ message: 'Delete this item?', header: 'Delete', accept: () => this.delete() });\n * if (await confirmation.confirmAsync({ message: 'Discard changes?', target: event })) { … }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class HxConfirmationService {\n /** The questions, in order. The two components listen to it. */\n readonly requests = new Subject<HxConfirmation>();\n\n confirm(confirmation: HxConfirmation): void {\n this.requests.next(confirmation);\n }\n\n /** Resolves to `true` when accepted and to `false` when rejected or dismissed. */\n confirmAsync(confirmation: HxConfirmation): Promise<boolean> {\n return new Promise((resolve) =>\n this.confirm({\n ...confirmation,\n accept: () => {\n confirmation.accept?.();\n resolve(true);\n },\n reject: () => {\n confirmation.reject?.();\n resolve(false);\n },\n }),\n );\n }\n}\n\nconst targetOf = (target: Element | Event | null | undefined): Element | null =>\n target instanceof Element\n ? target\n : target\n ? ((target.currentTarget ?? target.target) as Element | null)\n : null;\n\n/**\n * Shows the questions of `HxConfirmationService.confirm` that have no `target` as a centred modal\n * `role=\"alertdialog\"`: the message describes it, the focus starts on the reject button, Escape rejects. Questions that\n * arrive while one is open wait their turn. Clicking the mask does nothing: the user must answer.\n */\n@Component({\n selector: 'hx-confirm-dialog',\n imports: [HxDialogFrame, HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-confirm-anchor' },\n template: `\n <ng-template #panel>\n @if (current(); as c) {\n <hx-dialog-frame [header]=\"c.header\" [titleId]=\"titleId\" [closable]=\"false\">\n <div class=\"hx-confirm-content\">\n @if (c.icon) {\n <span class=\"hx-confirm-icon\" [class]=\"c.icon\" aria-hidden=\"true\"></span>\n }\n <p class=\"hx-confirm-message\" [id]=\"messageId\">{{ c.message }}</p>\n </div>\n <ng-container ngProjectAs=\"[hxDialogFooter]\">\n <button hx-button type=\"button\" variant=\"text\" severity=\"secondary\" class=\"hx-confirm-reject\" (click)=\"answer(false)\">{{ c.rejectLabel ?? 'No' }}</button>\n <button hx-button type=\"button\" class=\"hx-confirm-accept\" [severity]=\"c.acceptSeverity ?? 'primary'\" (click)=\"answer(true)\">{{ c.acceptLabel ?? 'Yes' }}</button>\n </ng-container>\n </hx-dialog-frame>\n }\n </ng-template>\n `,\n})\nexport class HxConfirmDialog {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n\n protected readonly current = signal<HxConfirmation | null>(null);\n protected readonly titleId = nextId('hx-confirm-title');\n protected readonly messageId = nextId('hx-confirm-message');\n readonly #queue: HxConfirmation[] = [];\n #ref: DialogRef<boolean, unknown> | undefined;\n\n constructor() {\n const subscription = inject(HxConfirmationService).requests.subscribe((request) => {\n if (targetOf(request.target)) return; // the popup's\n this.#queue.push(request);\n this.#next();\n });\n effect(() => {\n // a question that arrived before the template existed\n this.panel();\n untracked(() => this.#next());\n });\n inject(DestroyRef).onDestroy(() => {\n subscription.unsubscribe();\n this.#ref?.close();\n });\n }\n\n #next(): void {\n const panel = this.panel();\n if (this.#ref || !panel) return;\n const request = this.#queue.shift();\n if (!request) return;\n this.current.set(request);\n const ref = this.#dialog.open<boolean>(panel, {\n role: 'alertdialog',\n hasBackdrop: true,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: 'hx-confirm-panel',\n width: '28rem',\n maxWidth: 'calc(100vw - 2rem)',\n positionStrategy: this.#overlay.position().global().centerHorizontally().centerVertically(),\n ariaModal: true,\n ariaDescribedBy: this.messageId,\n ariaLabelledBy: request.header ? this.titleId : null,\n ariaLabel: request.header ? null : 'Confirmation',\n disableClose: true,\n autoFocus: '.hx-confirm-reject',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ref.close(false);\n }\n });\n ref.closed.subscribe((accepted) => {\n this.#ref = undefined;\n this.current.set(null);\n if (accepted) request.accept?.();\n else request.reject?.();\n this.#next();\n });\n }\n\n protected answer(accepted: boolean): void {\n this.#ref?.close(accepted);\n }\n}\n\n/**\n * Shows the questions of `HxConfirmationService.confirm` that have a `target` in a popup anchored to it, as a\n * `role=\"alertdialog\"` with the message as its description. The focus starts on the reject button; Escape and a click\n * outside reject.\n */\n@Component({\n selector: 'hx-confirm-popup',\n imports: [HxPopover, HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-confirm-anchor' },\n template: `\n <hx-popover #popover role=\"alertdialog\" panelClass=\"hx-confirm-popup\" ariaLabel=\"Confirmation\" [ariaDescribedBy]=\"messageId\" (hidden)=\"onHidden()\">\n @if (current(); as c) {\n <div class=\"hx-confirm-popup-content\">\n @if (c.icon) {\n <span class=\"hx-confirm-popup-icon\" [class]=\"c.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-confirm-popup-message\" [id]=\"messageId\">{{ c.message }}</span>\n </div>\n <div class=\"hx-confirm-popup-footer\">\n <button hx-button type=\"button\" variant=\"text\" severity=\"secondary\" size=\"small\" class=\"hx-confirm-reject\" (click)=\"answer(false)\">{{ c.rejectLabel ?? 'No' }}</button>\n <button hx-button type=\"button\" size=\"small\" class=\"hx-confirm-accept\" [severity]=\"c.acceptSeverity ?? 'primary'\" (click)=\"answer(true)\">{{ c.acceptLabel ?? 'Yes' }}</button>\n </div>\n }\n </hx-popover>\n `,\n})\nexport class HxConfirmPopup {\n private readonly popover = viewChild.required<HxPopover>('popover');\n protected readonly current = signal<HxConfirmation | null>(null);\n protected readonly messageId = nextId('hx-confirm-popup-message');\n #answered = false;\n\n constructor() {\n const subscription = inject(HxConfirmationService).requests.subscribe((request) => {\n const target = targetOf(request.target);\n if (!target) return; // the dialog's\n const popover = this.popover();\n if (popover.open()) popover.hide(false); // the open question counts as rejected\n this.#answered = false;\n this.current.set(request);\n popover.show(target);\n });\n inject(DestroyRef).onDestroy(() => subscription.unsubscribe());\n }\n\n protected answer(accepted: boolean): void {\n const request = this.current();\n if (!request) return;\n this.#answered = true;\n this.popover().hide();\n if (accepted) request.accept?.();\n else request.reject?.();\n }\n\n /** Closed by Escape, a click outside or a new question: no answer means no. */\n protected onHidden(): void {\n const request = this.current();\n if (request && !this.#answered) request.reject?.();\n this.#answered = true;\n }\n}\n","import {\n afterEveryRender,\n afterNextRender,\n booleanAttribute,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nexport type HxInputSize = 'small' | 'medium' | 'large';\nexport type HxInputVariant = 'outlined' | 'filled';\n\n/**\n * A native `<input>` or `<textarea>` styled as a Helix text field. It works with template-driven forms,\n * reactive forms and signal forms unchanged: the element stays a native control.\n *\n * ```html\n * <label for=\"name\">Name</label>\n * <input hx-input id=\"name\" [(ngModel)]=\"name\" />\n * <textarea hx-input variant=\"filled\" rows=\"4\"></textarea>\n * <textarea hx-input autoResize rows=\"2\"></textarea>\n * <input hx-input [attr.aria-invalid]=\"invalid() ? 'true' : null\" aria-describedby=\"name-error\" />\n * ```\n *\n * The invalid look comes from `aria-invalid=\"true\"` (set it yourself or let the forms API do it) and from\n * Angular's `ng-invalid ng-touched` classes. `autoResize` (textarea only) makes the height follow the content,\n * with `rows` as the minimum; it also follows a value a form writes. Always give a field a visible `<label>`; a placeholder is a hint.\n */\n@Directive({\n selector: 'input[hx-input], textarea[hx-input]',\n exportAs: 'hx-input',\n host: {\n class: 'hx-input',\n '[class.hx-input-filled]': \"variant() === 'filled'\",\n '[class.hx-input-sm]': \"size() === 'small'\",\n '[class.hx-input-lg]': \"size() === 'large'\",\n '[class.hx-input-fluid]': 'fluid()',\n '[class.hx-input-auto-resize]': 'autoResize()',\n '(input)': 'resize()',\n },\n})\nexport class HxInput {\n /** `outlined` (default) or a tinted `filled` field. */\n readonly variant = input<HxInputVariant>('outlined');\n\n readonly size = input<HxInputSize>('medium');\n\n /** Takes the full width of the container. */\n readonly fluid = input(false, { transform: booleanAttribute });\n\n /** Textarea only: grows and shrinks with its content, `rows` is the minimum height. */\n readonly autoResize = input(false, { transform: booleanAttribute });\n\n readonly #el =\n inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef).nativeElement;\n #measured = { value: '', width: -1 };\n\n constructor() {\n // a form writes its value without an `input` event: signal forms render again (check after every render,\n // cheap when nothing changed); ngModel and reactive forms announce it on `valueChanges`, after the write\n afterEveryRender({ write: () => this.resize() });\n const control = inject(NgControl, { self: true, optional: true });\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n const sub = control?.valueChanges?.subscribe(() => queueMicrotask(() => this.resize()));\n destroyRef.onDestroy(() => sub?.unsubscribe());\n });\n }\n\n protected resize(): void {\n const el = this.#el;\n if (!this.autoResize() || !(el instanceof HTMLTextAreaElement)) return;\n const width = el.offsetWidth;\n if (el.value === this.#measured.value && width === this.#measured.width) return;\n this.#measured = { value: el.value, width };\n const border = el.offsetHeight - el.clientHeight;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight + border}px`;\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxSelectSize = 'small' | 'medium' | 'large';\nexport type HxSelectVariant = 'outlined' | 'filled';\n\n/** An option as the select works with it, after `optionLabel`/`optionValue`/`optionDisabled` are applied. */\nexport type HxSelectItem<V = unknown> = HxOption<V>;\n\n/**\n * A single-value select: a `combobox` button that opens a listbox in a CDK connected overlay (typeahead,\n * Arrow/Home/End/Enter/Escape from the CDK listbox). A real form control for template-driven, reactive and\n * signal forms.\n *\n * ```html\n * <label for=\"city\">City</label>\n * <hx-select inputId=\"city\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\"\n * placeholder=\"Select a city\" [(ngModel)]=\"city\" />\n * <hx-select [options]=\"['Small', 'Medium', 'Large']\" [formField]=\"form.size\" />\n * ```\n *\n * `options` may hold primitives (label = the value as text) or objects (`optionLabel`, `optionValue` and\n * `optionDisabled` name a key or give a function; defaults `label`, `value` and `disabled`).\n * Give the select a visible `<label for>` (with `inputId`) or an `ariaLabel`.\n */\n@Component({\n selector: 'hx-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, CdkListbox, CdkOption],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSelect), multi: true }],\n host: {\n class: 'hx-select',\n '[class.hx-select-open]': 'open()',\n '[class.hx-select-filled]': \"variant() === 'filled'\",\n '[class.hx-select-sm]': \"size() === 'small'\",\n '[class.hx-select-lg]': \"size() === 'large'\",\n '[class.hx-select-fluid]': 'fluid()',\n '[class.hx-select-disabled]': 'isDisabled()',\n '[class.hx-select-has-clear]': 'canClear()',\n '[class.hx-select-invalid]': 'invalid()',\n '[class.hx-filled]': '!!selected()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxSelect<V = unknown> implements ControlValueAccessor, FormValueControl<V | null> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No options');\n /** A search field above the list that narrows the options (case-insensitive \"contains\"). */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Search');\n /** What the filter matches: a property name or accessor of an option; default the label. */\n readonly filterBy = input<Accessor<never, string>>();\n /** Shown when the filter matches nothing. */\n readonly emptyFilterMessage = input('No results');\n readonly size = input<HxSelectSize>('medium');\n readonly variant = input<HxSelectVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** Shows a button that resets the value to `null`. */\n readonly showClear = input(false, { transform: booleanAttribute });\n /** The `id` of the trigger, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to find the selected option (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<V | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-select-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly listbox = viewChild(CdkListbox);\n private readonly filterField = viewChild<ElementRef<HTMLInputElement>>('filterField');\n protected readonly query = signal('');\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxSelectItem[]>(() =>\n resolveOptions(this.options(), this.optionLabel(), this.optionValue(), this.optionDisabled()),\n );\n\n protected readonly visibleItems = computed<HxSelectItem[]>(() => {\n const query = this.query().trim().toLowerCase();\n const items = this.items();\n if (!this.filter() || !query) return items;\n const by = this.filterBy();\n const options = this.options();\n return items.filter((item, i) => {\n const text = by === undefined ? item.label : this.#filterText(options[i], by, item.label);\n return text.toLowerCase().includes(query);\n });\n });\n\n protected readonly resultsLabel = computed(() => {\n const n = this.visibleItems().length;\n return n === 1 ? '1 result' : `${n} results`;\n });\n\n protected readonly selected = computed(() => {\n const compare = this.compareWith();\n const current = this.value();\n return current === null ? undefined : this.items().find((item) => compare(item.value, current));\n });\n\n protected readonly canClear = computed(\n () => this.showClear() && !!this.selected() && !this.isDisabled(),\n );\n\n protected readonly selectedValues = computed(() => {\n const item = this.selected();\n return item ? [item.value] : [];\n });\n\n #onChange: (value: V | null) => void = () => {};\n #onTouched: () => void = () => {};\n\n // ControlValueAccessor (template-driven and reactive forms)\n writeValue(value: V | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: V | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the trigger (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.trigger().nativeElement.focus(options);\n }\n\n protected toggle(): void {\n if (this.open()) this.close();\n else this.show();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.query.set('');\n if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the panel lives in the overlay template: focus the filter, or the list, once it has rendered\n afterNextRender(\n () => {\n const field = this.filterField();\n if (field) field.nativeElement.focus();\n else this.listbox()?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.listbox()?.focus();\n }\n }\n\n #filterText(option: unknown, by: Accessor<never, string>, fallback: string): string {\n if (option === null || typeof option !== 'object') return fallback;\n if (typeof by === 'function') return String((by as (o: unknown) => string)(option) ?? '');\n return by in option ? String((option as Record<string, unknown>)[by] ?? '') : '';\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n } else if (event.key === 'Tab') {\n this.close();\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<unknown>): void {\n const [picked] = event.value;\n this.#commit((picked ?? null) as V | null);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.#commit(null);\n this.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (this.open() || (next && this.#host.nativeElement.contains(next))) return;\n this.#touched();\n }\n\n #commit(value: V | null): void {\n this.value.set(value);\n this.#onChange(value);\n }\n\n #touched(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"hx-select-trigger\"\n role=\"combobox\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"hx-select-label\" [class.hx-select-placeholder]=\"!selected()\">{{\n selected()?.label ?? placeholder()\n }}</span>\n <span class=\"hx-select-chevron\" aria-hidden=\"true\"></span>\n</button>\n@if (canClear()) {\n <button type=\"button\" class=\"hx-select-clear\" aria-label=\"Clear selection\" (click)=\"clear($event)\">\n <span class=\"hx-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n}\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-select-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n>\n <div class=\"hx-select-panel\">\n @if (filter()) {\n <div class=\"hx-select-header\">\n <input\n #filterField\n type=\"text\"\n class=\"hx-select-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"panelId\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n }\n <div\n cdkListbox\n class=\"hx-select-list\"\n [id]=\"panelId\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-select-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-select-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-select-empty\">{{ query().trim() ? emptyFilterMessage() : emptyMessage() }}</div>\n }\n </div>\n @if (filter()) {\n <span class=\"hx-select-sr-only\" aria-live=\"polite\">{{ resultsLabel() }}</span>\n }\n </div>\n</ng-template>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n output,\n} from '@angular/core';\nimport { HxSelect } from '../select/select';\n\n/** What `pageChange` carries. */\nexport interface HxPageEvent {\n /** Index of the first record of the page (0-based). */\n first: number;\n /** Records per page. */\n rows: number;\n /** The page, 0-based. */\n page: number;\n pageCount: number;\n /** Set when the \"All\" size is chosen: `rows` is then the number of all records (at least 1). */\n all?: true;\n}\n\n/**\n * Page navigation for a list or table: first, previous, page links, next, last, and a rows-per-page select.\n *\n * ```html\n * <hx-paginator [rows]=\"10\" [totalRecords]=\"120\" [(first)]=\"first\" [rowsPerPageOptions]=\"[10, 20, 50]\"\n * showCurrentPageReport (pageChange)=\"load($event)\" />\n * ```\n *\n * `first` is the index of the first record shown, so the page is `first / rows`. A change of the rows per page keeps\n * the first record on screen. The paginator is a `nav`; the current page link has `aria-current=\"page\"`. Labels are\n * inputs, for translation.\n */\n@Component({\n selector: 'hx-paginator',\n imports: [HxSelect],\n templateUrl: './paginator.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-paginator' },\n})\nexport class HxPaginator {\n /** Records per page. */\n readonly rows = model(10);\n readonly totalRecords = input(0, { transform: numberAttribute });\n /** Index of the first record shown. */\n readonly first = model(0);\n /** Offers a rows-per-page select when given. */\n readonly rowsPerPageOptions = input<readonly (number | 'all')[]>();\n /** Page links shown at most (the current page stays in the middle). */\n readonly pageLinkSize = input(5, { transform: numberAttribute });\n readonly showCurrentPageReport = input(false, { transform: booleanAttribute });\n /** `{first}`, `{last}`, `{totalRecords}`, `{page}` and `{pageCount}` are replaced. */\n readonly currentPageReportTemplate = input('{first} - {last} of {totalRecords}');\n readonly showFirstLastButtons = input(true, { transform: booleanAttribute });\n\n readonly ariaLabel = input('Pagination');\n readonly firstPageLabel = input('First page');\n readonly previousPageLabel = input('Previous page');\n readonly nextPageLabel = input('Next page');\n readonly lastPageLabel = input('Last page');\n /** `{page}` is replaced by the page number (1-based). */\n readonly pageLabelTemplate = input('Page {page}');\n readonly rowsPerPageLabel = input('Rows per page');\n /** The label of the `'all'` entry of `rowsPerPageOptions`. */\n readonly allLabel = input('All');\n\n /** The \"All\" size is chosen: one page with every record; `rows` is left as it was. */\n readonly showAll = model(false);\n /** \"All\" is chosen and still offered by `rowsPerPageOptions`. */\n private readonly allSelected = computed(\n () => this.showAll() && !!this.rowsPerPageOptions()?.includes('all'),\n );\n /** The records per page in effect: all of them when \"All\" is chosen. */\n private readonly perPage = computed(() =>\n this.allSelected() ? Math.max(1, this.totalRecords()) : this.rows(),\n );\n protected readonly rowsValue = computed(() => (this.allSelected() ? 'all' : this.rows()));\n\n readonly pageChange = output<HxPageEvent>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.perPage()))),\n );\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.perPage()))),\n );\n protected readonly isFirst = computed(() => this.page() === 0);\n protected readonly isLast = computed(() => this.page() >= this.pageCount() - 1);\n\n /** The page numbers (0-based) of the links: a window of `pageLinkSize` around the current page. */\n protected readonly links = computed(() => {\n const count = this.pageCount();\n const size = Math.max(1, Math.min(this.pageLinkSize(), count));\n let start = Math.max(0, this.page() - Math.floor(size / 2));\n start = Math.min(start, count - size);\n return Array.from({ length: size }, (_, i) => start + i);\n });\n\n protected readonly rowsOptions = computed(() =>\n (this.rowsPerPageOptions() ?? []).map((n) => ({\n label: n === 'all' ? this.allLabel() : String(n),\n value: n,\n })),\n );\n\n protected readonly report = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.page() * this.perPage() + 1;\n const last = Math.min(total, (this.page() + 1) * this.perPage());\n return this.currentPageReportTemplate()\n .replace('{first}', String(first))\n .replace('{last}', String(last))\n .replace('{totalRecords}', String(total))\n .replace('{page}', String(this.page() + 1))\n .replace('{pageCount}', String(this.pageCount()));\n });\n\n protected pageLabel(page: number): string {\n return this.pageLabelTemplate().replace('{page}', String(page + 1));\n }\n\n /** Goes to a page (0-based); an out-of-range page is clamped. */\n goTo(page: number): void {\n const target = Math.min(this.pageCount() - 1, Math.max(0, page));\n if (target === this.page() && this.first() === target * this.perPage()) return;\n this.first.set(target * this.perPage());\n this.emit();\n }\n\n protected setRows(value: unknown): void {\n if (value === 'all') {\n if (this.allSelected()) return;\n this.showAll.set(true);\n this.first.set(0);\n this.emit();\n return;\n }\n const rows = Number(value);\n if (!rows || (rows === this.rows() && !this.allSelected())) return;\n this.showAll.set(false);\n this.rows.set(rows);\n // keep the first record of the page on screen\n this.first.set(Math.floor(this.first() / rows) * rows);\n this.emit();\n }\n\n private emit(): void {\n this.pageChange.emit({\n first: this.first(),\n rows: this.perPage(),\n page: this.page(),\n pageCount: this.pageCount(),\n ...(this.allSelected() ? { all: true as const } : {}),\n });\n }\n}\n","<nav class=\"hx-paginator-nav\" [attr.aria-label]=\"ariaLabel()\">\n @if (showCurrentPageReport()) {\n <span class=\"hx-paginator-report\" aria-live=\"polite\">{{ report() }}</span>\n }\n <div class=\"hx-paginator-pages\">\n @if (showFirstLastButtons()) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-first\" [disabled]=\"isFirst()\" [attr.aria-label]=\"firstPageLabel()\" [title]=\"firstPageLabel()\" (click)=\"goTo(0)\"></button>\n }\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-prev\" [disabled]=\"isFirst()\" [attr.aria-label]=\"previousPageLabel()\" [title]=\"previousPageLabel()\" (click)=\"goTo(page() - 1)\"></button>\n @for (p of links(); track p) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-page\" [class.hx-paginator-page-current]=\"p === page()\" [attr.aria-label]=\"pageLabel(p)\" [attr.aria-current]=\"p === page() ? 'page' : null\" (click)=\"goTo(p)\">{{ p + 1 }}</button>\n }\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-next\" [disabled]=\"isLast()\" [attr.aria-label]=\"nextPageLabel()\" [title]=\"nextPageLabel()\" (click)=\"goTo(page() + 1)\"></button>\n @if (showFirstLastButtons()) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-last\" [disabled]=\"isLast()\" [attr.aria-label]=\"lastPageLabel()\" [title]=\"lastPageLabel()\" (click)=\"goTo(pageCount() - 1)\"></button>\n }\n </div>\n @if (rowsOptions().length) {\n <hx-select class=\"hx-paginator-rows\" [options]=\"rowsOptions()\" [value]=\"rowsValue()\" (valueChange)=\"setRows($event)\" [ariaLabel]=\"rowsPerPageLabel()\" />\n }\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\nexport type HxProgressMode = 'determinate' | 'indeterminate';\n\n/**\n * A bar that fills from 0 to 100, or slides while the duration is unknown.\n *\n * ```html\n * <hx-progress-bar [value]=\"progress()\" ariaLabel=\"Upload\" />\n * <hx-progress-bar mode=\"indeterminate\" ariaLabel=\"Loading\" />\n * ```\n *\n * `role=\"progressbar\"` with `aria-valuemin/max` and, when determinate, `aria-valuenow`; an indeterminate bar leaves\n * `aria-valuenow` out. Name it with `ariaLabel`. The slide stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-progress-bar',\n role: 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': 'indeterminate() ? null : clamped()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[class.hx-progress-bar-indeterminate]': 'indeterminate()',\n },\n template: `\n <div class=\"hx-progress-bar-value\" [style.width.%]=\"indeterminate() ? null : clamped()\">\n @if (showValue() && !indeterminate()) {\n <span class=\"hx-progress-bar-label\">{{ clamped() }}{{ unit() }}</span>\n }\n </div>\n `,\n})\nexport class HxProgressBar {\n /** 0 to 100; values outside are clamped. */\n readonly value = input(0, { transform: numberAttribute });\n readonly mode = input<HxProgressMode>('determinate');\n /** Shows the value and `unit` inside the bar. */\n readonly showValue = input(true, { transform: booleanAttribute });\n readonly unit = input('%');\n /** Accessible name. */\n readonly ariaLabel = input<string>();\n\n protected readonly indeterminate = computed(() => this.mode() === 'indeterminate');\n protected readonly clamped = computed(() => {\n const value = this.value();\n return Math.min(100, Math.max(0, Number.isFinite(value) ? Math.round(value) : 0));\n });\n}\n\n/**\n * A spinning circle for an operation of unknown duration.\n *\n * ```html\n * <hx-progress-spinner ariaLabel=\"Saving\" />\n * ```\n *\n * `role=\"progressbar\"` without `aria-valuenow` (indeterminate), named by `ariaLabel` (\"Loading\" by default). The\n * rotation stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-progress-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-progress-spinner',\n role: 'progressbar',\n '[attr.aria-label]': 'ariaLabel()',\n },\n template: `\n <svg class=\"hx-progress-spinner-svg\" viewBox=\"25 25 50 50\" aria-hidden=\"true\" [style.animation-duration]=\"animationDuration()\">\n <circle class=\"hx-progress-spinner-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" [attr.stroke-width]=\"strokeWidth()\" stroke-miterlimit=\"10\" [style.animation-duration]=\"animationDuration()\" />\n </svg>\n `,\n})\nexport class HxProgressSpinner {\n /** Width of the ring in the 50-unit drawing. */\n readonly strokeWidth = input('2');\n /** CSS time of one cycle of the colours. */\n readonly animationDuration = input('2s');\n readonly ariaLabel = input('Loading');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n type ElementRef,\n effect,\n Injector,\n inject,\n input,\n isDevMode,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { HxButton } from '../button/button';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\nimport { type HxPageEvent, HxPaginator } from '../paginator/paginator';\nimport { HxPopover } from '../popover/popover';\nimport { HxProgressSpinner } from '../progress/progress';\nimport type { HxTableSize } from '../table/table';\n\nexport type HxColumnAlign = 'left' | 'center' | 'right';\n\n/** One column of an `hx-data-table`. */\nexport interface HxColumn {\n /** The property of the row shown in the column; a path (`address.city`) reads nested properties. */\n field: string;\n /** The header text. */\n header: string;\n /** The `title` attribute of the header cell (a tooltip). */\n title?: string;\n /** CSS width of the column (`8rem`, `20%`). */\n width?: string;\n /** Horizontal alignment of header and cells (the start edge by default). */\n align?: HxColumnAlign;\n /** The header is a button that sorts by the column. */\n sortable?: boolean;\n /** The column gets a text filter: in the filter row (`filterDisplay=\"row\"`) or in a popover from its header (`\"menu\"`). */\n filter?: boolean;\n /** The direction of the first click on the sort button (the table's `sortFirstOrder` by default). */\n sortFirstOrder?: HxSortFirstOrder;\n}\n\n/** The direction a sort starts with. */\nexport type HxSortFirstOrder = 'asc' | 'desc';\n\n/** What `rowClass` may return: anything `[class]` accepts. */\nexport type HxRowClass =\n | string\n | readonly string[]\n | Record<string, boolean | null | undefined>\n | null\n | undefined;\n\n/** One sorted column: `order` 1 is ascending, -1 descending. */\nexport interface HxSortMeta {\n field: string;\n order: 1 | -1;\n}\n\nexport type HxSortMode = 'single' | 'multiple';\n\n/** What `lazyLoad` carries: the state the data has to be loaded for. */\nexport interface HxLazyLoadEvent {\n first: number;\n rows: number;\n sortField: string | null;\n sortOrder: 1 | -1;\n multiSortMeta: HxSortMeta[];\n /** The text of each column filter, by field (empty filters are left out). */\n filters: Record<string, string>;\n /** The text of the global filter. */\n globalFilter: string;\n}\n\n/** Replaces the client-side sort: gets the rows and the sort state, returns the sorted rows. */\nexport type HxSortFunction = (\n rows: readonly unknown[],\n meta: readonly HxSortMeta[],\n) => readonly unknown[];\n\n/** The default order of two values: empty values last, numbers and dates by value, text by locale. */\nexport function compareValues(a: unknown, b: unknown): number {\n const aEmpty = a === null || a === undefined || a === '';\n const bEmpty = b === null || b === undefined || b === '';\n if (aEmpty || bEmpty) return aEmpty && bEmpty ? 0 : aEmpty ? 1 : -1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n}\n\n/** The value of a (nested) property of a row. */\nexport function resolveField(row: unknown, field: string): unknown {\n let value: unknown = row;\n for (const key of field.split('.')) {\n if (value === null || value === undefined) return undefined;\n value = (value as Record<string, unknown>)[key];\n }\n return value;\n}\n\n/**\n * The template of the cells of one column: `<ng-template hxCell=\"price\" let-row let-value=\"value\">`. The context\n * has the row (`$implicit`), the `value` of the column's field and the `index` of the row.\n */\n@Directive({ selector: 'ng-template[hxCell]' })\nexport class HxCell {\n /** The `field` of the column. */\n readonly field = input.required<string>({ alias: 'hxCell' });\n readonly template = inject<TemplateRef<HxCellContext>>(TemplateRef);\n}\n\n/**\n * Extra content in the header of one column, beside the label and outside the sort button:\n * `<ng-template hxColumnHeader=\"price\" let-column>…</ng-template>`. The context has the column (`$implicit`).\n */\n@Directive({ selector: 'ng-template[hxColumnHeader]' })\nexport class HxColumnHeader {\n /** The `field` of the column. */\n readonly field = input.required<string>({ alias: 'hxColumnHeader' });\n readonly template = inject<TemplateRef<HxColumnHeaderContext>>(TemplateRef);\n}\n\nexport interface HxColumnHeaderContext {\n $implicit: HxColumn;\n}\n\nexport interface HxCellContext {\n $implicit: unknown;\n value: unknown;\n index: number;\n}\n\n/** Cells of the header row, replacing the generated headers: `<ng-template hxTableHeader let-columns>…<th>`. */\n@Directive({ selector: 'ng-template[hxTableHeader]' })\nexport class HxTableHeader {\n readonly template = inject<TemplateRef<HxTableColumnsContext>>(TemplateRef);\n}\n\n/** Cells of every body row, replacing the generated cells: `<ng-template hxTableBody let-row>…<td>`. */\n@Directive({ selector: 'ng-template[hxTableBody]' })\nexport class HxTableBody {\n readonly template = inject<TemplateRef<HxTableRowContext>>(TemplateRef);\n}\n\n/** Cells of the footer row: `<ng-template hxTableFooter let-columns>…<td>`; without it there is no footer. */\n@Directive({ selector: 'ng-template[hxTableFooter]' })\nexport class HxTableFooter {\n readonly template = inject<TemplateRef<HxTableColumnsContext>>(TemplateRef);\n}\n\n/** The content of the table's caption (the visible header above the table). */\n@Directive({ selector: 'ng-template[hxTableCaption]' })\nexport class HxTableCaption {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** The content of the empty row, replacing `emptyMessage`: `<ng-template hxTableEmpty>`. */\n@Directive({ selector: 'ng-template[hxTableEmpty]' })\nexport class HxTableEmpty {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** The content of the row that opens below a row: `<ng-template hxRowExpansion let-row>`. */\n@Directive({ selector: 'ng-template[hxRowExpansion]' })\nexport class HxRowExpansion {\n readonly template = inject<TemplateRef<HxTableRowContext>>(TemplateRef);\n}\n\nexport type HxSelectionMode = 'single' | 'multiple';\n\nexport interface HxTableColumnsContext {\n $implicit: readonly HxColumn[];\n}\n\nexport interface HxTableRowContext {\n $implicit: unknown;\n index: number;\n columns: readonly HxColumn[];\n}\n\n/**\n * A data table on a native `<table>`: a column model, cell templates, caption, empty and loading state, striped\n * rows, gridlines, sizes and a scrolling body with a sticky header. It draws with the CSS of `table[hx-table]`.\n *\n * ```html\n * <hx-data-table [value]=\"invoices\" [columns]=\"columns\" dataKey=\"id\" caption=\"Invoices\" stripedRows>\n * <ng-template hxCell=\"amount\" let-value=\"value\">{{ value | currency: 'EUR' }}</ng-template>\n * </hx-data-table>\n * ```\n *\n * The table keeps the native semantics: a `<caption>` (drawn as the table header; visually hidden when only\n * `ariaLabel` is set), `<th scope=\"col\">` cells and `aria-busy` while `loading`. A scrolling table is a labelled,\n * focusable `region`. `filterDisplay=\"menu\"` puts the column filters in a popover opened from the header.\n */\n@Component({\n selector: 'hx-data-table',\n imports: [\n NgTemplateOutlet,\n HxProgressSpinner,\n HxPaginator,\n HxCheckbox,\n HxInput,\n HxButton,\n HxPopover,\n ],\n templateUrl: './data-table.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-data-table' },\n})\nexport class HxDataTable implements OnInit {\n /** The rows. */\n readonly value = input<readonly unknown[]>([]);\n readonly columns = input<readonly HxColumn[]>([]);\n /** The property that identifies a row (keeps the DOM of a row when the rows change). */\n readonly dataKey = input<string>();\n readonly size = input<HxTableSize>('medium');\n readonly stripedRows = input(false, { transform: booleanAttribute });\n readonly showGridlines = input(false, { transform: booleanAttribute });\n /** Rows change colour under the pointer (default on). */\n readonly hoverRows = input(true, { transform: booleanAttribute });\n readonly emptyMessage = input('No records found');\n /** Classes for the `<tr>` of a row: a string, an array or an object, as for `[class]`. */\n readonly rowClass = input<(row: never) => HxRowClass>();\n /** Text shown in a cell whose value is `null` or `undefined` (not for `0`, `false` or `''`). */\n readonly emptyValue = input('');\n /** The label of the `'all'` entry of `rowsPerPageOptions`. */\n readonly allLabel = input('All');\n /** Covers the table with a spinner and sets `aria-busy`. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Visible caption text above the table. */\n readonly caption = input<string>();\n /** The accessible name of the table; with no `caption` it becomes a visually hidden caption. */\n readonly ariaLabel = input<string>();\n /** The body scrolls inside this height (`300px`, `50vh`) and the header stays in view. */\n readonly scrollHeight = input<string>();\n /** A wide table scrolls horizontally instead of overflowing. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n\n /** `single`: one sorted column; `multiple`: a click adds the column to the sort order. */\n readonly sortMode = input<HxSortMode>('single');\n /** The sorted column in `single` mode. */\n readonly sortField = model<string | null>(null);\n /** 1 ascending, -1 descending (`single` mode). */\n readonly sortOrder = model<1 | -1>(1);\n /** The sorted columns in `multiple` mode, most important first. */\n readonly multiSortMeta = model<HxSortMeta[]>([]);\n /** Replaces the client-side sort. */\n readonly sortFunction = input<HxSortFunction>();\n /** The direction of the first click on a sortable column; a column's own `sortFirstOrder` wins. */\n readonly sortFirstOrder = input<HxSortFirstOrder>('asc');\n\n /** Shows a paginator below the table. */\n readonly paginator = input(false, { transform: booleanAttribute });\n readonly rows = model(10);\n readonly first = model(0);\n readonly rowsPerPageOptions = input<readonly (number | 'all')[]>();\n readonly showCurrentPageReport = input(true, { transform: booleanAttribute });\n /** The rows are paged and sorted elsewhere: the table only shows `value` and emits `lazyLoad`. */\n readonly lazy = input(false, { transform: booleanAttribute });\n /** The number of all records when `lazy` (otherwise the length of `value`). */\n readonly totalRecords = input<number>();\n /** Emits `lazyLoad` once on init (default on). */\n readonly lazyLoadOnInit = input(true, { transform: booleanAttribute });\n\n /** Sort, page or rows-per-page changed while `lazy`: load the data for this state. */\n readonly lazyLoad = output<HxLazyLoadEvent>();\n\n /** `single`: a click selects a row; `multiple`: a checkbox column (or, with `metaKeySelection`, Ctrl/Cmd+click). */\n readonly selectionMode = input<HxSelectionMode>();\n /** The selected row (`single`) or rows (`multiple`). Rows are compared by `dataKey` when set. */\n readonly selection = model<unknown>(null);\n /** `multiple`: no checkbox column; a click selects only that row, Ctrl/Cmd+click adds or removes one. */\n readonly metaKeySelection = input(false, { transform: booleanAttribute });\n readonly selectAllLabel = input('Select all rows');\n /** `{row}` is replaced by the row number (1-based). */\n readonly selectRowLabel = input('Select row {row}');\n\n /** The properties of a row the global filter looks in (`filterGlobal`). */\n readonly globalFilterFields = input<readonly string[]>([]);\n /**\n * `row`: a filter row with a text input under the headers of columns with `filter: true`. `menu`: a filter button in\n * those headers that opens a popover with the text input.\n */\n readonly filterDisplay = input<'row' | 'menu'>();\n /** The text of the column filters, by field. */\n readonly filters = model<Record<string, string>>({});\n readonly filterLabel = input('Filter {header}');\n /** The text of the button that empties a filter in the header menu. */\n readonly clearLabel = input('Clear');\n protected readonly filterPopover = viewChild(HxPopover);\n protected readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n /** The column whose filter popover is open. */\n protected readonly activeFilterColumn = signal<HxColumn | null>(null);\n private readonly injector = inject(Injector);\n\n /** The rows that are open (by `dataKey`, or the row index without one); needs a `hxRowExpansion` template. */\n readonly expandedRowKeys = model<Record<string, boolean>>({});\n readonly expandLabel = input('Expand row');\n readonly collapseLabel = input('Collapse row');\n\n protected readonly announcement = signal('');\n private readonly globalText = signal('');\n /** The paginator's \"All\" size is chosen: every row is shown, whatever `rows` says. */\n private readonly showAll = signal(false);\n /** A `rows` set from outside (or by the user) ends \"All\". */\n private readonly resetAll = effect(() => {\n this.rows();\n untracked(() => this.showAll.set(false));\n });\n private readonly allActive = computed(\n () => this.showAll() && !!this.rowsPerPageOptions()?.includes('all'),\n );\n\n protected readonly cellTemplates = contentChildren(HxCell);\n protected readonly columnHeaderTemplates = contentChildren(HxColumnHeader);\n protected readonly headerTemplate = contentChild(HxTableHeader);\n protected readonly bodyTemplate = contentChild(HxTableBody);\n protected readonly footerTemplate = contentChild(HxTableFooter);\n protected readonly captionTemplate = contentChild(HxTableCaption);\n protected readonly expansionTemplate = contentChild(HxRowExpansion);\n protected readonly emptyTemplate = contentChild(HxTableEmpty);\n\n /** The sort state as a list, whichever the mode. */\n protected readonly sortMeta = computed<HxSortMeta[]>(() =>\n this.sortMode() === 'multiple'\n ? this.multiSortMeta()\n : this.sortField()\n ? [{ field: this.sortField() as string, order: this.sortOrder() }]\n : [],\n );\n\n private readonly filtered = computed(() => {\n const value = this.value();\n if (this.lazy()) return value;\n const global = this.globalText().trim().toLowerCase();\n const fields = this.globalFilterFields();\n const columnFilters = Object.entries(this.filters()).filter(([, text]) => text.trim());\n if (!global && !columnFilters.length) return value;\n const has = (row: unknown, field: string, text: string) =>\n String(resolveField(row, field) ?? '')\n .toLowerCase()\n .includes(text);\n return value.filter(\n (row) =>\n (!global || fields.some((field) => has(row, field, global))) &&\n columnFilters.every(([field, text]) => has(row, field, text.trim().toLowerCase())),\n );\n });\n\n private readonly sorted = computed(() => {\n const value = this.filtered();\n const meta = this.sortMeta();\n if (this.lazy() || !meta.length) return value;\n const custom = this.sortFunction();\n if (custom) return custom(value, meta);\n return [...value].sort((a, b) => {\n for (const { field, order } of meta) {\n const result = compareValues(resolveField(a, field), resolveField(b, field));\n if (result) return result * order;\n }\n return 0;\n });\n });\n\n /** The number of records the paginator pages over. */\n protected readonly total = computed(() =>\n this.lazy() ? (this.totalRecords() ?? this.value().length) : this.sorted().length,\n );\n\n /** The rows the table draws: sorted, then the current page. */\n protected readonly visibleRows = computed(() => {\n const rows = this.sorted();\n if (!this.paginator() || this.lazy() || this.allActive()) return rows;\n return rows.slice(this.first(), this.first() + this.rows());\n });\n protected readonly cells = computed(\n () => new Map(this.cellTemplates().map((cell) => [cell.field(), cell.template])),\n );\n private readonly warnedFields = new Set<string>();\n protected readonly columnHeaders = computed(() => {\n const map = new Map<string, TemplateRef<HxColumnHeaderContext>>();\n for (const header of this.columnHeaderTemplates()) {\n const field = header.field();\n if (map.has(field) && isDevMode() && !this.warnedFields.has(field)) {\n this.warnedFields.add(field);\n console.warn(\n `hx-data-table: more than one hxColumnHeader template for \"${field}\"; the last one wins.`,\n );\n }\n map.set(field, header.template);\n }\n return map;\n });\n protected readonly scrolls = computed(() => this.scrollable() || !!this.scrollHeight());\n protected readonly hasCaption = computed(\n () => !!this.caption() || !!this.captionTemplate() || !!this.ariaLabel(),\n );\n protected readonly captionHidden = computed(() => !this.caption() && !this.captionTemplate());\n protected readonly checkboxColumn = computed(\n () => this.selectionMode() === 'multiple' && !this.metaKeySelection(),\n );\n protected readonly expanderColumn = computed(() => !!this.expansionTemplate());\n protected readonly selectable = computed(() => !!this.selectionMode() && !this.checkboxColumn());\n protected readonly filterRow = computed(\n () => this.filterDisplay() === 'row' && this.columns().some((c) => c.filter),\n );\n protected readonly colspan = computed(\n () =>\n Math.max(1, this.columns().length) +\n (this.checkboxColumn() ? 1 : 0) +\n (this.expanderColumn() ? 1 : 0),\n );\n\n private selectedRows(): unknown[] {\n const selection = this.selection();\n if (this.selectionMode() === 'multiple') return Array.isArray(selection) ? selection : [];\n return selection === null || selection === undefined ? [] : [selection];\n }\n\n private keyOf(row: unknown): unknown {\n const key = this.dataKey();\n return key ? resolveField(row, key) : row;\n }\n\n protected isSelected(row: unknown): boolean {\n const key = this.keyOf(row);\n return this.selectedRows().some((selected) => this.keyOf(selected) === key);\n }\n\n /** All filtered rows (of every page) are selected / some are. */\n protected readonly allSelected = computed(() => {\n const rows = this.filtered();\n return rows.length > 0 && rows.every((row) => this.isSelected(row));\n });\n protected readonly someSelected = computed(\n () => !this.allSelected() && this.filtered().some((row) => this.isSelected(row)),\n );\n\n protected toggleSelectAll(checked: boolean): void {\n const rows = this.filtered();\n const keys = new Set(rows.map((row) => this.keyOf(row)));\n const rest = this.selectedRows().filter((row) => !keys.has(this.keyOf(row)));\n this.selection.set(checked ? [...rest, ...rows] : rest);\n }\n\n protected toggleRowCheckbox(row: unknown, checked: boolean): void {\n const rest = this.selectedRows().filter((r) => this.keyOf(r) !== this.keyOf(row));\n this.selection.set(checked ? [...rest, row] : rest);\n }\n\n /** A click or Enter/Space on a row selects it (single mode, or multiple with `metaKeySelection`). */\n protected selectRow(row: unknown, event: Event): void {\n if (!this.selectable()) return;\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, input, a, select, textarea')) return;\n const selected = this.isSelected(row);\n if (this.selectionMode() === 'single') {\n this.selection.set(selected ? null : row);\n return;\n }\n const additive =\n (event as MouseEvent).ctrlKey || (event as MouseEvent).metaKey || event.type === 'keydown';\n if (additive) this.toggleRowCheckbox(row, !selected);\n else this.selection.set([row]);\n }\n\n protected onRowKey(row: unknown, event: Event): void {\n event.preventDefault();\n this.selectRow(row, event);\n }\n\n /** Filters every column in `globalFilterFields` for a text (case-insensitive, contains). */\n filterGlobal(text: string): void {\n this.globalText.set(text);\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected openFilter(event: Event, column: HxColumn): void {\n const popover = this.filterPopover();\n if (!popover) return;\n if (popover.open() && this.activeFilterColumn()?.field === column.field) {\n popover.hide();\n return;\n }\n const switching = popover.open();\n popover.hide(false);\n this.activeFilterColumn.set(column);\n popover.show(event, event.currentTarget as Element);\n // switching columns re-uses the open popover, which does not move the focus again\n if (switching) {\n afterNextRender(() => this.filterInput()?.nativeElement.focus(), { injector: this.injector });\n }\n }\n\n protected filterLabelFor(column: HxColumn): string {\n return this.filterLabel().replace('{header}', column.header);\n }\n\n protected clearFilter(column: HxColumn): void {\n this.setFilter(column, '');\n this.filterPopover()?.hide();\n }\n\n protected setFilter(column: HxColumn, text: string): void {\n const next = { ...this.filters() };\n if (text) next[column.field] = text;\n else delete next[column.field];\n this.filters.set(next);\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected rowKey(row: unknown, index: number): string {\n return String(this.dataKey() ? (resolveField(row, this.dataKey() as string) ?? index) : index);\n }\n\n protected isExpanded(row: unknown, index: number): boolean {\n return !!this.expandedRowKeys()[this.rowKey(row, index)];\n }\n\n protected toggleExpansion(row: unknown, index: number): void {\n const key = this.rowKey(row, index);\n const next = { ...this.expandedRowKeys() };\n if (next[key]) delete next[key];\n else next[key] = true;\n this.expandedRowKeys.set(next);\n }\n\n ngOnInit(): void {\n if (this.lazy() && this.lazyLoadOnInit()) this.emitLazy();\n }\n\n /** The order of a column (1, -1) or 0 when it is not sorted. */\n protected orderOf(column: HxColumn): 0 | 1 | -1 {\n return this.sortMeta().find((m) => m.field === column.field)?.order ?? 0;\n }\n\n protected ariaSort(column: HxColumn): 'ascending' | 'descending' | 'none' | null {\n if (!column.sortable) return null;\n const order = this.orderOf(column);\n return order === 1 ? 'ascending' : order === -1 ? 'descending' : 'none';\n }\n\n /** The position (1-based) of a column in a multi-column sort, when more than one column is sorted. */\n protected sortRank(column: HxColumn): number | null {\n const meta = this.sortMeta();\n if (this.sortMode() !== 'multiple' || meta.length < 2) return null;\n const index = meta.findIndex((m) => m.field === column.field);\n return index < 0 ? null : index + 1;\n }\n\n /** Sorts by a column: the first order, then the opposite, then not at all (ascending first by default). */\n sort(column: HxColumn): void {\n const order = this.orderOf(column);\n const firstOrder: 1 | -1 = (column.sortFirstOrder ?? this.sortFirstOrder()) === 'desc' ? -1 : 1;\n const next: 0 | 1 | -1 =\n order === 0 ? firstOrder : order === firstOrder ? (-firstOrder as 1 | -1) : 0;\n if (this.sortMode() === 'multiple') {\n const rest = this.multiSortMeta().filter((m) => m.field !== column.field);\n this.multiSortMeta.set(\n next === 0\n ? rest\n : order === 0\n ? [...rest, { field: column.field, order: next }]\n : this.multiSortMeta().map((m) =>\n m.field === column.field ? { ...m, order: next as 1 | -1 } : m,\n ),\n );\n } else {\n this.sortField.set(next === 0 ? null : column.field);\n this.sortOrder.set(next === 0 ? 1 : next);\n }\n this.announcement.set(\n next === 0\n ? `Sorting by ${column.header} removed`\n : `Sorted by ${column.header}, ${next === 1 ? 'ascending' : 'descending'}`,\n );\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected onPage(event: HxPageEvent): void {\n this.first.set(event.first);\n if (!event.all) this.rows.set(event.rows);\n if (this.lazy()) this.emitLazy();\n }\n\n private emitLazy(): void {\n this.lazyLoad.emit({\n first: this.first(),\n rows: this.allActive() && this.total() > 0 ? this.total() : this.rows(),\n sortField:\n this.sortMode() === 'multiple'\n ? (this.multiSortMeta()[0]?.field ?? null)\n : this.sortField(),\n sortOrder:\n this.sortMode() === 'multiple' ? (this.multiSortMeta()[0]?.order ?? 1) : this.sortOrder(),\n multiSortMeta: this.sortMode() === 'multiple' ? this.multiSortMeta() : this.sortMeta(),\n filters: this.filters(),\n globalFilter: this.globalText(),\n });\n }\n\n protected trackRow(row: unknown, index: number): unknown {\n const key = this.dataKey();\n return key ? (resolveField(row, key) ?? index) : index;\n }\n\n protected rowClassOf(row: unknown): HxRowClass {\n return this.rowClass()?.(row as never);\n }\n\n protected valueOf(row: unknown, column: HxColumn): unknown {\n return resolveField(row, column.field);\n }\n}\n","<div class=\"hx-data-table-frame\" [attr.aria-busy]=\"loading() ? 'true' : null\">\n <div\n class=\"hx-table-scroll hx-data-table-scroll\"\n [class.hx-data-table-scrolls]=\"scrolls()\"\n [style.max-height]=\"scrollHeight() ?? null\"\n [attr.role]=\"scrolls() ? 'region' : null\"\n [attr.aria-label]=\"scrolls() ? (ariaLabel() ?? caption() ?? null) : null\"\n [attr.tabindex]=\"scrolls() ? 0 : null\"\n >\n <table\n class=\"hx-table\"\n [class.hx-table-sm]=\"size() === 'small'\"\n [class.hx-table-lg]=\"size() === 'large'\"\n [class.hx-table-striped]=\"stripedRows()\"\n [class.hx-table-gridlines]=\"showGridlines()\"\n [class.hx-table-hoverable]=\"hoverRows()\"\n [class.hx-table-sticky]=\"!!scrollHeight()\"\n >\n @if (hasCaption()) {\n <caption [class.hx-data-table-caption-hidden]=\"captionHidden()\">\n @if (captionTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n {{ caption() ?? ariaLabel() }}\n }\n </caption>\n }\n <thead>\n <tr>\n @if (expanderColumn()) {\n <th scope=\"col\" class=\"hx-data-table-expander-cell\"><span class=\"hx-data-table-caption-hidden\">Row details</span></th>\n }\n @if (checkboxColumn()) {\n <th scope=\"col\" class=\"hx-data-table-select-cell\">\n <input type=\"checkbox\" hx-checkbox [attr.aria-label]=\"selectAllLabel()\" [checked]=\"allSelected()\" [indeterminate]=\"someSelected()\" (change)=\"toggleSelectAll($any($event.target).checked)\" />\n </th>\n }\n @if (headerTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: columns() }\" />\n } @else {\n @for (column of columns(); track column.field) {\n <th\n scope=\"col\"\n [class]=\"'hx-data-table-align-' + (column.align ?? 'left')\"\n [class.hx-data-table-sorted]=\"orderOf(column) !== 0\"\n [style.width]=\"column.width ?? null\"\n [attr.aria-sort]=\"ariaSort(column)\"\n [attr.title]=\"column.title ?? null\"\n >\n @let extra = columnHeaders().get(column.field);\n @let menu = filterDisplay() === 'menu' && column.filter;\n @if (extra || menu) {\n <div class=\"hx-data-table-header-content\">\n <ng-container [ngTemplateOutlet]=\"label\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n @if (extra) {\n <ng-container [ngTemplateOutlet]=\"extra\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n }\n @if (menu) {\n <button\n type=\"button\"\n class=\"hx-data-table-filter-button\"\n [class.hx-data-table-filter-active]=\"!!filters()[column.field]\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"activeFilterColumn()?.field === column.field\"\n [attr.aria-label]=\"filterLabelFor(column)\"\n (click)=\"openFilter($event, column)\"\n >\n <span class=\"hx-data-table-filter-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"label\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n }\n </th>\n }\n }\n </tr>\n @if (filterRow()) {\n <tr class=\"hx-data-table-filter-row\">\n @if (expanderColumn()) { <th></th> }\n @if (checkboxColumn()) { <th></th> }\n @for (column of columns(); track column.field) {\n <th>\n @if (column.filter) {\n <input type=\"text\" hx-input size=\"small\" fluid [attr.aria-label]=\"filterLabelFor(column)\" [value]=\"filters()[column.field] ?? ''\" (input)=\"setFilter(column, $any($event.target).value)\" />\n }\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (row of visibleRows(); track trackRow(row, $index); let i = $index) {\n <tr\n [class]=\"rowClassOf(row)\"\n [class.hx-data-table-selectable]=\"selectable()\"\n [attr.aria-selected]=\"selectionMode() ? (isSelected(row) ? 'true' : 'false') : null\"\n [attr.tabindex]=\"selectable() ? 0 : null\"\n (click)=\"selectRow(row, $event)\"\n (keydown.enter)=\"onRowKey(row, $event)\"\n (keydown.space)=\"onRowKey(row, $event)\"\n >\n @if (expanderColumn()) {\n <td class=\"hx-data-table-expander-cell\">\n <button type=\"button\" class=\"hx-data-table-expander\" [class.hx-data-table-expander-open]=\"isExpanded(row, i)\" [attr.aria-expanded]=\"isExpanded(row, i)\" [attr.aria-label]=\"isExpanded(row, i) ? collapseLabel() : expandLabel()\" (click)=\"toggleExpansion(row, i)\"></button>\n </td>\n }\n @if (checkboxColumn()) {\n <td class=\"hx-data-table-select-cell\">\n <input type=\"checkbox\" hx-checkbox [attr.aria-label]=\"selectRowLabel().replace('{row}', '' + (first() + i + 1))\" [checked]=\"isSelected(row)\" (change)=\"toggleRowCheckbox(row, $any($event.target).checked)\" />\n </td>\n }\n @if (bodyTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: row, index: i, columns: columns() }\" />\n } @else {\n @for (column of columns(); track column.field) {\n <td [class]=\"'hx-data-table-align-' + (column.align ?? 'left')\">\n @if (cells().get(column.field); as cell) {\n <ng-container [ngTemplateOutlet]=\"cell\" [ngTemplateOutletContext]=\"{ $implicit: row, value: valueOf(row, column), index: i }\" />\n } @else {\n {{ valueOf(row, column) ?? emptyValue() }}\n }\n </td>\n }\n }\n </tr>\n @if (expansionTemplate(); as tpl) {\n @if (isExpanded(row, i)) {\n <tr class=\"hx-data-table-expansion\">\n <td [attr.colspan]=\"colspan()\">\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: row, index: i, columns: columns() }\" />\n </td>\n </tr>\n }\n }\n } @empty {\n <tr class=\"hx-data-table-empty\">\n <td [attr.colspan]=\"colspan()\">\n @if (emptyTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n {{ emptyMessage() }}\n }\n </td>\n </tr>\n }\n </tbody>\n @if (footerTemplate(); as tpl) {\n <tfoot>\n <tr>\n @if (expanderColumn()) { <td></td> }\n @if (checkboxColumn()) { <td></td> }\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: columns() }\" />\n </tr>\n </tfoot>\n }\n </table>\n </div>\n <span class=\"hx-data-table-caption-hidden\" aria-live=\"polite\">{{ announcement() }}</span>\n @if (loading()) {\n <div class=\"hx-data-table-loading\" role=\"status\">\n <hx-progress-spinner ariaLabel=\"Loading\" />\n </div>\n }\n @if (paginator()) {\n <hx-paginator\n class=\"hx-data-table-paginator\"\n [rows]=\"rows()\"\n [first]=\"first()\"\n [totalRecords]=\"total()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [showAll]=\"showAll()\"\n (showAllChange)=\"showAll.set($event)\"\n [allLabel]=\"allLabel()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n (pageChange)=\"onPage($event)\"\n />\n }\n</div>\n\n@if (filterDisplay() === 'menu') {\n @let active = activeFilterColumn();\n <hx-popover panelClass=\"hx-data-table-filter-popover\" [ariaLabel]=\"active ? filterLabelFor(active) : undefined\" (hidden)=\"activeFilterColumn.set(null)\">\n @if (active) {\n <div class=\"hx-data-table-filter-menu\">\n <input #filterInput type=\"text\" hx-input size=\"small\" fluid [attr.aria-label]=\"filterLabelFor(active)\" [value]=\"filters()[active.field] ?? ''\" (input)=\"setFilter(active, $any($event.target).value)\" (keydown.enter)=\"filterPopover()?.hide()\" />\n <button hx-button type=\"button\" size=\"small\" variant=\"text\" class=\"hx-data-table-filter-clear\" (click)=\"clearFilter(active)\">{{ clearLabel() }}</button>\n </div>\n }\n </hx-popover>\n}\n\n<ng-template #label let-column>\n @if (column.sortable) {\n <button type=\"button\" class=\"hx-data-table-sort\" (click)=\"sort(column)\">\n <span>{{ column.header }}</span>\n <span class=\"hx-data-table-sort-icon\" [class.hx-data-table-sort-asc]=\"orderOf(column) === 1\" [class.hx-data-table-sort-desc]=\"orderOf(column) === -1\" aria-hidden=\"true\"></span>\n @if (sortRank(column); as rank) {\n <span class=\"hx-data-table-sort-rank\" aria-hidden=\"true\">{{ rank }}</span>\n }\n </button>\n } @else {\n {{ column.header }}\n }\n</ng-template>\n","/** Date helpers of the date picker: they work on local calendar days; only `withTime` and `clampTime` look at the time of day. */\n\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\n/** Moves by whole months and clamps the day (31 January + 1 month is the last day of February). */\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const last = daysInMonth(target.getFullYear(), target.getMonth());\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), last));\n}\n\nexport function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return (\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** Negative when `a` is before `b`, by day. */\nexport function compareDays(a: Date, b: Date): number {\n return startOfDay(a).getTime() - startOfDay(b).getTime();\n}\n\n/** The same day at the given local time. */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n\n/** `date` moved into `min`..`max` (either may be missing), compared including the time of day. */\nexport function clampTime(date: Date, min?: Date | null, max?: Date | null): Date {\n if (isValidDate(min) && date.getTime() < min.getTime()) return new Date(min);\n if (isValidDate(max) && date.getTime() > max.getTime()) return new Date(max);\n return date;\n}\n\nexport function isValidDate(value: unknown): value is Date {\n return value instanceof Date && !Number.isNaN(value.getTime());\n}\n\n/** The 7 × n cells of a month: `null` before the first and after the last day, a day otherwise. */\nexport function monthCells(year: number, month: number, firstDayOfWeek: number): (Date | null)[][] {\n const lead = (new Date(year, month, 1).getDay() - firstDayOfWeek + 7) % 7;\n const cells: (Date | null)[] = Array.from({ length: lead }, () => null);\n for (let d = 1; d <= daysInMonth(year, month); d++) cells.push(new Date(year, month, d));\n while (cells.length % 7 !== 0) cells.push(null);\n const rows: (Date | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));\n return rows;\n}\n","import { addDays, addMonths, compareDays, isSameDay } from '../dates';\n\nexport type CalendarView = 'day' | 'month' | 'year';\n\nexport interface DisabledRules {\n min?: Date | null;\n max?: Date | null;\n disabledDates?: readonly Date[];\n}\n\n/** `2026-9-5`, the `data-date` of a day button. */\nexport function dateKey(date: Date): string {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n/** Whether a day lies outside `min`..`max` (by day) or is one of `disabledDates`. */\nexport function isDateDisabled(date: Date, rules: DisabledRules): boolean {\n const { min, max, disabledDates = [] } = rules;\n return (\n (!!min && compareDays(date, min) < 0) ||\n (!!max && compareDays(date, max) > 0) ||\n disabledDates.some((d) => isSameDay(d, date))\n );\n}\n\n/** Whether a day lies strictly between the two dates of a complete range. */\nexport function isInRange(date: Date, selected: readonly Date[], mode: string): boolean {\n const [from, to] = selected;\n return (\n mode === 'range' && !!from && !!to && compareDays(date, from) > 0 && compareDays(date, to) < 0\n );\n}\n\n/** The focused day after the previous (`-1`) or next (`1`) button of the header: a month, a year or 12 years. */\nexport function stepFocus(view: CalendarView, current: Date, direction: 1 | -1): Date {\n const months = view === 'day' ? 1 : view === 'month' ? 12 : 144;\n return addMonths(current, months * direction);\n}\n\n/** The focused day after choosing a month (`0` to `11`) in the month view. */\nexport function focusMonth(current: Date, month: number): Date {\n return addMonths(new Date(current.getFullYear(), 0, current.getDate()), month);\n}\n\n/** The focused day after choosing a year in the year view. */\nexport function focusYear(current: Date, year: number): Date {\n return addMonths(new Date(year, current.getMonth(), 1), 0);\n}\n\n/** The 12 years of the page that holds `year`. */\nexport function decadeOf(year: number): number[] {\n const start = Math.floor(year / 12) * 12;\n return Array.from({ length: 12 }, (_, i) => start + i);\n}\n\n/** The day a key of the day grid moves the focus to, or `null` for a key that does nothing. */\nexport function dayKeyTarget(\n key: string,\n date: Date,\n firstDayOfWeek: number,\n shift = false,\n): Date | null {\n const weekday = (date.getDay() - firstDayOfWeek + 7) % 7;\n switch (key) {\n case 'ArrowLeft':\n return addDays(date, -1);\n case 'ArrowRight':\n return addDays(date, 1);\n case 'ArrowUp':\n return addDays(date, -7);\n case 'ArrowDown':\n return addDays(date, 7);\n case 'Home':\n return addDays(date, -weekday);\n case 'End':\n return addDays(date, 6 - weekday);\n case 'PageUp':\n return addMonths(date, shift ? -12 : -1);\n case 'PageDown':\n return addMonths(date, shift ? 12 : 1);\n default:\n return null;\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n Injector,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { isSameDay, monthCells } from '../dates';\nimport {\n type CalendarView,\n dateKey,\n dayKeyTarget,\n decadeOf,\n focusMonth,\n focusYear,\n isDateDisabled,\n isInRange,\n stepFocus,\n} from './calendar-helpers';\n\n/**\n * The calendar of `hx-date-picker`: the header with the month and year buttons, and the day, month and year views\n * with the keyboard of the day grid. It holds no value: the picker passes the selection in and takes `picked` out.\n * The markup and the `hx-date-picker-*` classes are the picker's.\n */\n@Component({\n selector: 'hx-calendar',\n templateUrl: './calendar.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents' },\n})\nexport class HxCalendar {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The day with the focus in the grid, and the month the grid shows. */\n readonly focusedDate = model.required<Date>();\n readonly view = model<CalendarView>('day');\n readonly selectedDates = input<readonly Date[]>([]);\n readonly selectionMode = input('single');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n readonly firstDayOfWeek = input(0);\n readonly locale = input<string>();\n readonly disabled = input(false);\n readonly titleId = input.required<string>();\n readonly today = input.required<Date>();\n\n /** A day button was clicked (it may be a disabled day: the owner decides). */\n readonly picked = output<Date>();\n\n protected readonly viewYear = computed(() => this.focusedDate().getFullYear());\n\n readonly #formats = computed(() => {\n const locale = this.locale();\n return {\n month: new Intl.DateTimeFormat(locale, { month: 'long' }),\n monthShort: new Intl.DateTimeFormat(locale, { month: 'short' }),\n weekdayShort: new Intl.DateTimeFormat(locale, { weekday: 'short' }),\n weekdayLong: new Intl.DateTimeFormat(locale, { weekday: 'long' }),\n full: new Intl.DateTimeFormat(locale, { dateStyle: 'full' }),\n };\n });\n\n protected readonly monthName = computed(() => this.#formats().month.format(this.focusedDate()));\n protected readonly monthNames = computed(() =>\n Array.from({ length: 12 }, (_, m) => this.#formats().monthShort.format(new Date(2026, m, 1))),\n );\n protected readonly weekdays = computed(() => {\n const first = this.firstDayOfWeek();\n return Array.from({ length: 7 }, (_, i) => {\n const day = new Date(2026, 0, 4 + ((first + i) % 7)); // 4 January 2026 is a Sunday\n return {\n short: this.#formats().weekdayShort.format(day),\n long: this.#formats().weekdayLong.format(day),\n };\n });\n });\n protected readonly weeks = computed(() =>\n monthCells(\n this.focusedDate().getFullYear(),\n this.focusedDate().getMonth(),\n this.firstDayOfWeek(),\n ),\n );\n protected readonly decade = computed(() => decadeOf(this.focusedDate().getFullYear()));\n\n protected readonly dateKey = dateKey;\n\n protected dayLabel(date: Date): string {\n return this.#formats().full.format(date);\n }\n\n protected isToday(date: Date): boolean {\n return isSameDay(date, this.today());\n }\n\n protected isSelected(date: Date): boolean {\n return this.selectedDates().some((d) => isSameDay(d, date));\n }\n\n protected isInRange(date: Date): boolean {\n return isInRange(date, this.selectedDates(), this.selectionMode());\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n /** One day of the grid takes the tab stop: the focused day, or the first day when the focus is elsewhere. */\n protected isFocusTarget(date: Date): boolean {\n return isSameDay(date, this.focusedDate());\n }\n\n protected step(direction: 1 | -1): void {\n this.focusedDate.set(stepFocus(this.view(), this.focusedDate(), direction));\n }\n\n protected chooseMonth(month: number): void {\n this.focusedDate.set(focusMonth(this.focusedDate(), month));\n this.view.set('day');\n }\n\n protected chooseYear(year: number): void {\n this.focusedDate.set(focusYear(this.focusedDate(), year));\n this.view.set('month');\n }\n\n protected onDayKeydown(event: KeyboardEvent, date: Date): void {\n const target = dayKeyTarget(event.key, date, this.firstDayOfWeek(), event.shiftKey);\n if (!target) return;\n event.preventDefault();\n this.focusedDate.set(target);\n afterNextRender(() => this.focusDay(), { injector: this.#injector });\n }\n\n /** Moves the focus to the button of the focused day, if it is in the grid. */\n focusDay(): void {\n this.#host.nativeElement\n .querySelector<HTMLElement>(\n `.hx-date-picker-date[data-date=\"${dateKey(this.focusedDate())}\"]`,\n )\n ?.focus();\n }\n}\n","<div class=\"hx-date-picker-header\">\n <button\n type=\"button\"\n class=\"hx-date-picker-nav hx-date-picker-prev\"\n [attr.aria-label]=\"view() === 'day' ? 'Previous month' : view() === 'month' ? 'Previous year' : 'Previous years'\"\n [disabled]=\"disabled()\"\n (click)=\"step(-1)\"\n >\n <span class=\"hx-date-picker-prev-icon\" aria-hidden=\"true\"></span>\n </button>\n <div class=\"hx-date-picker-title\" [id]=\"titleId()\" aria-live=\"polite\">\n @switch (view()) {\n @case ('day') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('month')\">{{ monthName() }}</button>\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @case ('month') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @default {\n <span class=\"hx-date-picker-title-text\">{{ decade()[0] }} – {{ decade()[11] }}</span>\n }\n }\n </div>\n <button\n type=\"button\"\n class=\"hx-date-picker-nav hx-date-picker-next\"\n [attr.aria-label]=\"view() === 'day' ? 'Next month' : view() === 'month' ? 'Next year' : 'Next years'\"\n [disabled]=\"disabled()\"\n (click)=\"step(1)\"\n >\n <span class=\"hx-date-picker-next-icon\" aria-hidden=\"true\"></span>\n </button>\n</div>\n\n@switch (view()) {\n @case ('day') {\n <table class=\"hx-date-picker-grid\" role=\"grid\" [attr.aria-labelledby]=\"titleId()\" [attr.aria-multiselectable]=\"selectionMode() !== 'single' ? 'true' : null\">\n <thead>\n <tr>\n @for (day of weekdays(); track $index) {\n <th scope=\"col\" class=\"hx-date-picker-weekday\" [attr.abbr]=\"day.long\">{{ day.short }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of weeks(); track $index) {\n <tr>\n @for (cell of row; track $index) {\n @if (cell) {\n <td\n role=\"gridcell\"\n class=\"hx-date-picker-cell\"\n [attr.aria-selected]=\"isSelected(cell)\"\n >\n <button\n type=\"button\"\n class=\"hx-date-picker-date\"\n [class.hx-date-picker-date-selected]=\"isSelected(cell)\"\n [class.hx-date-picker-date-in-range]=\"isInRange(cell)\"\n [class.hx-date-picker-date-today]=\"isToday(cell)\"\n [attr.data-date]=\"dateKey(cell)\"\n [attr.tabindex]=\"isFocusTarget(cell) ? 0 : -1\"\n [attr.aria-label]=\"dayLabel(cell)\"\n [attr.aria-current]=\"isToday(cell) ? 'date' : null\"\n [attr.aria-disabled]=\"isDateDisabled(cell) ? 'true' : null\"\n [disabled]=\"disabled()\"\n (click)=\"picked.emit(cell)\"\n (keydown)=\"onDayKeydown($event, cell)\"\n >\n {{ cell.getDate() }}\n </button>\n </td>\n } @else {\n <td class=\"hx-date-picker-cell hx-date-picker-cell-empty\" role=\"gridcell\"></td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n }\n @case ('month') {\n <div class=\"hx-date-picker-months\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n class=\"hx-date-picker-month\"\n [class.hx-date-picker-month-selected]=\"$index === focusedDate().getMonth() && viewYear() === focusedDate().getFullYear()\"\n [disabled]=\"disabled()\"\n (click)=\"chooseMonth($index)\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n @default {\n <div class=\"hx-date-picker-years\">\n @for (year of decade(); track year) {\n <button\n type=\"button\"\n class=\"hx-date-picker-year\"\n [class.hx-date-picker-year-selected]=\"year === focusedDate().getFullYear()\"\n [disabled]=\"disabled()\"\n (click)=\"chooseYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n}\n","import { startOfDay, withTime } from '../dates';\n\n/** A date from the text: numbers in the order the locale writes them, or `yyyy-mm-dd`. */\nexport function parseDateText(text: string, locale?: string): Date | null {\n const numbers = text.match(/\\d+/g)?.map(Number);\n if (!numbers || numbers.length !== 3) return null;\n let [year, month, day] = [0, 0, 0];\n if (/^\\d{4}\\D/.test(text.trim())) {\n [year, month, day] = numbers;\n } else {\n const order = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n })\n .formatToParts(new Date(2000, 10, 22))\n .filter((p) => ['day', 'month', 'year'].includes(p.type))\n .map((p) => p.type);\n const byType = Object.fromEntries(order.map((type, i) => [type, numbers[i]]));\n [year, month, day] = [byType['year'], byType['month'], byType['day']];\n }\n if (year < 100) year += 2000;\n const date = new Date(year, month - 1, day);\n const sane =\n date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;\n return sane ? date : null;\n}\n\nexport interface DateTimeTextOptions {\n locale?: string;\n showMinutes: boolean;\n /** The text is only a time: the day is `fallbackDay`. */\n timeOnly: boolean;\n fallbackDay: Date;\n}\n\n/** A date and a time from the text (`10/09/2026, 3:45 PM`), or only a time for `timeOnly`. */\nexport function parseDateTimeText(text: string, options: DateTimeTextOptions): Date | null {\n const period12 = '(?:\\\\s*([ap])\\\\.?\\\\s*m\\\\.?)?';\n // hour only: `14` or `2 PM` at the end (with a date before it), else `14:30` or `14:30:05`\n const match = options.showMinutes\n ? new RegExp(`(\\\\d{1,2}):(\\\\d{2})(?::(\\\\d{2}))?${period12}`, 'i').exec(text)\n : new RegExp(`(?:^|[\\\\s,;T])(\\\\d{1,2})(?::00(?::00)?)?${period12}\\\\s*$`, 'i').exec(text);\n if (!match) return null;\n let hours = Number(match[1]);\n const hourOnly = !options.showMinutes;\n const [minutes, seconds] = hourOnly ? [0, 0] : [Number(match[2]), Number(match[3] ?? 0)];\n const period = (hourOnly ? match[2] : match[4])?.toLowerCase();\n if (period) {\n if (hours < 1 || hours > 12) return null;\n hours = (hours % 12) + (period === 'p' ? 12 : 0);\n }\n if (hours > 23 || minutes > 59 || seconds > 59) return null;\n const rest = text.replace(match[0], hourOnly ? ' ' : '').replace(/^[\\s,;T]+|[\\s,;T]+$/g, '');\n if (/\\p{L}/u.test(rest)) return null;\n const day =\n options.timeOnly && rest === ''\n ? startOfDay(options.fallbackDay)\n : parseDateText(rest, options.locale);\n return day && withTime(day, hours, minutes, seconds);\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCalendar } from '../internal/calendar/calendar';\nimport { type CalendarView, isDateDisabled } from '../internal/calendar/calendar-helpers';\nimport { clampTime, compareDays, isSameDay, isValidDate, startOfDay } from '../internal/dates';\nimport { parseDateText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\n\nconst startOfDayOrNull = (date: Date | null) => (isValidDate(date) ? startOfDay(date) : null);\n\nexport type HxDatePickerSelectionMode = 'single' | 'range' | 'multiple';\nexport type HxDatePickerValue = Date | Date[] | null;\n/**\n * A date field that opens a calendar, or with `[inline]=\"true\"` the calendar alone, to choose a day, a range or\n * several days. Typing a date in the field parses it; month and year views are one click on the title. Day, month and weekday names come from `Intl.DateTimeFormat` for the `locale`.\n *\n * ```html\n * <hx-date-picker inputId=\"arrival\" showIcon showButtonBar [(ngModel)]=\"arrival\" />\n * <hx-date-picker inline ariaLabel=\"Arrival\" [(ngModel)]=\"arrival\" />\n * <hx-date-picker inline selectionMode=\"range\" [minDate]=\"today\" [firstDayOfWeek]=\"1\" [(value)]=\"stay\" />\n * ```\n *\n * The value is a `Date` (`single`) or a `Date[]` (`multiple`; `range`: one date while the range is open, two when\n * it is complete). It works with `ngModel`, reactive forms and signal forms (`[formField]`).\n *\n * The field shows the value formatted with `Intl.DateTimeFormat` (`dateFormat` options, numeric by default so a\n * typed date parses back). The popup is a non-modal dialog: focus moves to the selected or today's day and returns\n * to the field on close; a range keeps it open until the second date.\n *\n * Keyboard in the day grid: arrows move by a day or a week, Home and End to the start and end of the week,\n * Page Up and Page Down by a month (with Shift by a year), Enter or Space selects.\n */\n@Component({\n selector: 'hx-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxCalendar],\n templateUrl: './date-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxDatePicker), multi: true },\n ],\n host: {\n class: 'hx-date-picker',\n '[class.hx-date-picker-inline]': 'inline()',\n '[class.hx-date-picker-disabled]': 'isDisabled()',\n '[class.hx-date-picker-invalid]': 'invalid()',\n '[class.hx-date-picker-open]': 'open()',\n '[class.hx-date-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDatePicker implements ControlValueAccessor, FormValueControl<HxDatePickerValue> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A calendar button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Today and Clear buttons under the calendar of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /**\n * `Intl.DateTimeFormat` options of the text in the field. By default numeric, so a typed date parses back.\n */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly todayLabel = input('Today');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose date');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** Shows the calendar in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n readonly selectionMode = input<HxDatePickerSelectionMode>('single');\n /** The earliest and latest day that can be chosen. */\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n /** Days that cannot be chosen. */\n readonly disabledDates = input<readonly Date[]>([]);\n /** `0` Sunday … `6` Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** A BCP 47 tag for the names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDatePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly titleId = nextId('hx-date-picker-title');\n protected readonly popupId = nextId('hx-date-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly calendar = viewChild(HxCalendar);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n protected readonly view = signal<CalendarView>('day');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The day with the focus in the grid, and the month the grid shows. */\n protected readonly focusedDate = signal(startOfDay(new Date()));\n protected readonly today = startOfDay(new Date());\n\n protected readonly selectedDates = computed<Date[]>(() => {\n const value = this.value();\n if (Array.isArray(value)) return value.filter(isValidDate);\n return isValidDate(value) ? [value] : [];\n });\n\n readonly #format = computed(\n () =>\n new Intl.DateTimeFormat(\n this.locale(),\n this.dateFormat() ?? { day: '2-digit', month: '2-digit', year: 'numeric' },\n ),\n );\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const dates = this.selectedDates();\n const fmt = this.#format();\n if (this.selectionMode() === 'range') return dates.map((d) => fmt.format(d)).join(' – ');\n return dates.map((d) => fmt.format(d)).join(', ');\n });\n\n constructor() {\n // a value set from outside (a binding, a form) brings its month into view; without a value, today moved into\n // `minDate`..`maxDate` does\n effect(() => {\n const first =\n this.selectedDates()[0] ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate());\n const shown = untracked(() => this.focusedDate());\n if (\n first &&\n (first.getFullYear() !== shown.getFullYear() || first.getMonth() !== shown.getMonth())\n ) {\n this.focusedDate.set(startOfDay(first));\n }\n });\n }\n\n #onChange: (value: HxDatePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxDatePickerValue): void {\n this.#typed.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxDatePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the day of an inline calendar (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusDay();\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n protected isSelected(date: Date): boolean {\n return this.selectedDates().some((d) => isSameDay(d, date));\n }\n\n protected pick(date: Date): void {\n if (this.isDisabled() || this.isDateDisabled(date)) return;\n const day = startOfDay(date);\n this.focusedDate.set(day);\n const selected = this.selectedDates();\n let next: HxDatePickerValue;\n const mode = this.selectionMode();\n switch (mode) {\n case 'multiple':\n next = this.isSelected(day)\n ? selected.filter((d) => !isSameDay(d, day))\n : [...selected, day];\n break;\n case 'range': {\n if (selected.length !== 1) {\n next = [day];\n } else {\n next = compareDays(day, selected[0]) < 0 ? [day, selected[0]] : [selected[0], day];\n }\n break;\n }\n default:\n next = day;\n }\n this.#typed.set(null);\n this.#commit(next);\n if (!this.inline()) {\n const done =\n mode === 'single' || (mode === 'range' && Array.isArray(next) && next.length === 2);\n if (done) this.close(true);\n }\n }\n\n #commit(next: HxDatePickerValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusDay(): void {\n afterNextRender(\n () => {\n this.calendar()?.focusDay();\n },\n { injector: this.#injector },\n );\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n // the day to take the focus: the first selected day, or today moved into `minDate`..`maxDate`\n const first = this.selectedDates()[0];\n this.view.set('day');\n this.focusedDate.set(\n startOfDay(first ?? clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate())),\n );\n this.#focusDay();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable or disabled date puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null) return;\n this.#typed.set(null);\n this.#parseAndCommit(typed);\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n #parseAndCommit(typed: string): void {\n const text = typed.trim();\n if (text === '') {\n this.#commit(this.selectionMode() === 'single' ? null : []);\n return;\n }\n const parts = this.selectionMode() === 'single' ? [text] : text.split(/\\s*(?:,|–)\\s*/);\n const dates = parts.map((part) => this.#parse(part));\n if (dates.some((d) => d === null || this.isDateDisabled(d))) return;\n const valid = dates as Date[];\n if (this.selectionMode() === 'range' && valid.length > 2) return;\n this.#commit(this.selectionMode() === 'single' ? valid[0] : valid);\n if (valid[0]) this.focusedDate.set(startOfDay(valid[0]));\n }\n\n #parse(text: string): Date | null {\n return parseDateText(text, this.locale());\n }\n\n protected selectToday(): void {\n this.pick(this.today);\n }\n\n protected clear(): void {\n this.#typed.set(null);\n this.#commit(this.selectionMode() === 'single' ? null : []);\n this.close(true);\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-date-picker-popup') || this.#host.nativeElement.contains(next)) return;\n if (this.open()) return;\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n if (!this.inline()) return;\n const host = this.#host.nativeElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"calendar\" />\n} @else {\n <div class=\"hx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-date-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-date-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? 'Choose date'\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"calendar\" />\n @if (showButtonBar()) {\n <div class=\"hx-date-picker-buttonbar\">\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"selectToday()\">{{ todayLabel() }}</button>\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #calendar>\n<div\n class=\"hx-date-picker-panel\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() ?? 'Calendar'\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onFocusOut($event)\"\n>\n <hx-calendar\n [(focusedDate)]=\"focusedDate\"\n [(view)]=\"view\"\n [selectedDates]=\"selectedDates()\"\n [selectionMode]=\"selectionMode()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [titleId]=\"titleId\"\n [today]=\"today\"\n (picked)=\"pick($event)\"\n />\n</div>\n</ng-template>\n","export type TimeUnit = 'hour' | 'minute' | 'second' | 'period';\n\nexport interface TimeColumn {\n unit: TimeUnit;\n label: string;\n now: number;\n min: number;\n max: number;\n text: string;\n valueText: string;\n}\n\nexport interface TimeOfDay {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nexport interface TimeColumnOptions {\n hour12: boolean;\n showMinutes: boolean;\n showSeconds: boolean;\n locale?: string;\n labels: { hour: string; minute: string; second: string; period: string };\n}\n\nexport interface TimeSteps {\n hour: number;\n minute: number;\n second: number;\n}\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/** The spinbutton columns of a time row: hour, minute, second, AM/PM as the options ask. */\nexport function buildTimeColumns(time: TimeOfDay, options: TimeColumnOptions): TimeColumn[] {\n const { hours, minutes, seconds } = time;\n const { hour12: twelve, labels } = options;\n const hourNow = twelve ? hours % 12 || 12 : hours;\n const columns: TimeColumn[] = [\n {\n unit: 'hour',\n label: labels.hour,\n now: hourNow,\n min: twelve ? 1 : 0,\n max: twelve ? 12 : 23,\n text: pad(hourNow),\n valueText: String(hourNow),\n },\n ];\n if (options.showMinutes) {\n columns.push({\n unit: 'minute',\n label: labels.minute,\n now: minutes,\n min: 0,\n max: 59,\n text: pad(minutes),\n valueText: String(minutes),\n });\n }\n if (options.showMinutes && options.showSeconds) {\n columns.push({\n unit: 'second',\n label: labels.second,\n now: seconds,\n min: 0,\n max: 59,\n text: pad(seconds),\n valueText: String(seconds),\n });\n }\n if (twelve) {\n const parts = new Intl.DateTimeFormat(options.locale, { hour: 'numeric', hourCycle: 'h12' });\n const period = (h: number) =>\n parts.formatToParts(new Date(2026, 0, 1, h)).find((p) => p.type === 'dayPeriod')?.value ??\n (h < 12 ? 'AM' : 'PM');\n const pm = hours >= 12 ? 1 : 0;\n columns.push({\n unit: 'period',\n label: labels.period,\n now: pm,\n min: 0,\n max: 1,\n text: period(pm ? 12 : 0),\n valueText: period(pm ? 12 : 0),\n });\n }\n return columns;\n}\n\n/** The values a time unit can take: from its minimum in steps, up to its maximum. */\nexport function unitValues(column: TimeColumn, steps: TimeSteps): number[] {\n const step =\n column.unit === 'hour'\n ? steps.hour\n : column.unit === 'minute'\n ? steps.minute\n : column.unit === 'second'\n ? steps.second\n : 1;\n const values: number[] = [];\n for (let v = column.min; v <= column.max; v += Math.max(1, step || 1)) values.push(v);\n return values;\n}\n\n/** The next (`1`) or previous (`-1`) value of a column's steps, wrapping around. */\nexport function nextUnitValue(column: TimeColumn, steps: TimeSteps, direction: 1 | -1): number {\n const values = unitValues(column, steps);\n return direction > 0\n ? (values.find((v) => v > column.now) ?? values[0])\n : (values.filter((v) => v < column.now).pop() ?? values[values.length - 1]);\n}\n\n/** The time with one unit set (in the units shown: 1 to 12 with AM/PM). */\nexport function applyUnit(\n time: TimeOfDay,\n unit: TimeUnit,\n value: number,\n hour12: boolean,\n): TimeOfDay {\n const { hours } = time;\n switch (unit) {\n case 'hour':\n return { ...time, hours: hour12 ? (value % 12) + (hours >= 12 ? 12 : 0) : value };\n case 'minute':\n return { ...time, minutes: value };\n case 'second':\n return { ...time, seconds: value };\n default:\n return { ...time, hours: (hours % 12) + (value ? 12 : 0) };\n }\n}\n\n/** The value a key of a spinbutton jumps to (Page Up/Down, Home, End), or `null` for another key. */\nexport function jumpKeyTarget(key: string, column: TimeColumn, steps: TimeSteps): number | null {\n const values = unitValues(column, steps);\n const page = column.unit === 'hour' ? 6 : 10;\n const nearest = (target: number) =>\n values.reduce((best, v) => (Math.abs(v - target) < Math.abs(best - target) ? v : best));\n switch (key) {\n case 'PageUp':\n return nearest(Math.min(column.max, column.now + page));\n case 'PageDown':\n return nearest(Math.max(column.min, column.now - page));\n case 'Home':\n return values[0];\n case 'End':\n return values[values.length - 1];\n default:\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n applyUnit,\n buildTimeColumns,\n jumpKeyTarget,\n nextUnitValue,\n type TimeColumn,\n type TimeOfDay,\n} from './time-row-helpers';\n\n/**\n * The time row of `hx-time-picker`, `hx-date-time-picker` and `hx-date-time-range-picker`: one spinbutton column per unit (hour, minute, second, AM/PM) with the arrow\n * buttons and the keys. It holds no value: the control passes the time in and takes `timeChange` out.\n */\n@Component({\n selector: 'hx-time-row',\n templateUrl: './time-row.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents' },\n})\nexport class HxTimeRow {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The time of day shown. */\n readonly time = input.required<TimeOfDay>();\n readonly hour12 = input(false);\n readonly showMinutes = input(true);\n readonly showSeconds = input(false);\n readonly stepHour = input(1);\n readonly stepMinute = input(1);\n readonly stepSecond = input(1);\n readonly locale = input<string>();\n readonly disabled = input(false);\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n\n /** A column changed: the whole time of day with the new unit. */\n readonly timeChange = output<TimeOfDay>();\n\n readonly #steps = computed(() => ({\n hour: this.stepHour(),\n minute: this.stepMinute(),\n second: this.stepSecond(),\n }));\n\n protected readonly columns = computed<TimeColumn[]>(() =>\n buildTimeColumns(this.time(), {\n hour12: this.hour12(),\n showMinutes: this.showMinutes(),\n showSeconds: this.showSeconds(),\n locale: this.locale(),\n labels: {\n hour: this.hourLabel(),\n minute: this.minuteLabel(),\n second: this.secondLabel(),\n period: this.periodLabel(),\n },\n }),\n );\n\n /** Moves the focus to the first spinbutton. */\n focus(): void {\n this.#host.nativeElement.querySelector<HTMLElement>('.hx-date-picker-time-spin')?.focus();\n }\n\n #set(column: TimeColumn, value: number): void {\n if (this.disabled()) return;\n this.timeChange.emit(applyUnit(this.time(), column.unit, value, this.hour12()));\n }\n\n /** Moves a column to the next (`1`) or previous (`-1`) value of its steps, wrapping around. */\n protected stepTime(column: TimeColumn, direction: 1 | -1): void {\n this.#set(column, nextUnitValue(column, this.#steps(), direction));\n }\n\n protected onTimeKeydown(event: KeyboardEvent, column: TimeColumn): void {\n if (this.disabled()) return;\n if (event.key === 'ArrowUp') this.stepTime(column, 1);\n else if (event.key === 'ArrowDown') this.stepTime(column, -1);\n else {\n const target = jumpKeyTarget(event.key, column, this.#steps());\n if (target === null) return;\n this.#set(column, target);\n }\n event.preventDefault();\n }\n}\n","<div class=\"hx-date-picker-time\" role=\"group\" [attr.aria-label]=\"timeLabel()\">\n @for (column of columns(); track column.unit) {\n @if (column.unit !== 'hour' && column.unit !== 'period') {\n <span class=\"hx-date-picker-time-separator\" aria-hidden=\"true\">:</span>\n }\n <div class=\"hx-date-picker-time-column\">\n <button type=\"button\" class=\"hx-date-picker-time-button\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"disabled()\" (mousedown)=\"$event.preventDefault()\" (click)=\"stepTime(column, 1)\">\n <span class=\"hx-date-picker-time-up-icon\" aria-hidden=\"true\"></span>\n </button>\n <div\n class=\"hx-date-picker-time-spin\"\n role=\"spinbutton\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"column.label\"\n [attr.aria-valuenow]=\"column.now\"\n [attr.aria-valuemin]=\"column.min\"\n [attr.aria-valuemax]=\"column.max\"\n [attr.aria-valuetext]=\"column.valueText\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n (keydown)=\"onTimeKeydown($event, column)\"\n >\n {{ column.text }}\n </div>\n <button type=\"button\" class=\"hx-date-picker-time-button\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"disabled()\" (mousedown)=\"$event.preventDefault()\" (click)=\"stepTime(column, -1)\">\n <span class=\"hx-date-picker-time-down-icon\" aria-hidden=\"true\"></span>\n </button>\n </div>\n }\n</div>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCalendar } from '../internal/calendar/calendar';\nimport { type CalendarView, isDateDisabled } from '../internal/calendar/calendar-helpers';\nimport { clampTime, isValidDate, startOfDay, withTime } from '../internal/dates';\nimport { parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxTimeRow } from '../internal/time-row/time-row';\nimport type { TimeOfDay } from '../internal/time-row/time-row-helpers';\n\nconst startOfDayOrNull = (date: Date | null) => (isValidDate(date) ? startOfDay(date) : null);\n\nexport type HxDateTimePickerValue = Date | null;\n\n/**\n * A date and time field that opens a calendar with a time row under it (hour, minute, optionally second and AM/PM),\n * or with `[inline]=\"true\"` the calendar and the time row alone. The value is one `Date`; clearing the field gives\n * `null`. Typing parses `10/09/2026, 14:30` or `10/09/2026 2:30 PM`.\n *\n * ```html\n * <hx-date-time-picker inputId=\"start\" showIcon showButtonBar [stepMinute]=\"15\" [(ngModel)]=\"start\" />\n * <hx-date-time-picker inline ariaLabel=\"Start\" [(value)]=\"start\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). Choosing a day keeps the time already set;\n * setting a time with no date takes today. `minDate` and `maxDate` are compared including the time. The popup is a\n * non-modal dialog that stays open until Escape, the focus leaves the control or a button of the button bar.\n *\n * Each time column is a `spinbutton`: Arrow Up and Down change it by the step, Page Up and Page Down by a larger step,\n * Home and End go to the first and last value. Keyboard in the day grid: arrows move by a day or a week, Home and End\n * to the start and end of the week, Page Up and Page Down by a month (with Shift by a year), Enter or Space selects.\n */\n@Component({\n selector: 'hx-date-time-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxCalendar, HxTimeRow],\n templateUrl: './date-time-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxDateTimePicker), multi: true },\n ],\n host: {\n class: 'hx-date-time-picker',\n '[class.hx-date-time-picker-inline]': 'inline()',\n '[class.hx-date-time-picker-disabled]': 'isDisabled()',\n '[class.hx-date-time-picker-invalid]': 'invalid()',\n '[class.hx-date-time-picker-open]': 'open()',\n '[class.hx-date-time-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDateTimePicker\n implements ControlValueAccessor, FormValueControl<HxDateTimePickerValue>\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A calendar button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Today and Clear buttons under the time row of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /**\n * `Intl.DateTimeFormat` options of the text in the field. By default numeric, so a typed date parses back: day,\n * month and year, plus hour and minute (and second), with the `hourCycle` of `hourFormat`.\n */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly todayLabel = input('Today');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose date and time');\n /** Accessible names of the time row and its columns. */\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** `'12'` shows hours from 1 to 12 and an AM/PM column. */\n readonly hourFormat = input<'24' | '12'>('24');\n /** A minutes column; `false` picks the hour only (minutes and seconds are `0`, `showSeconds` is ignored). */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** A seconds column. */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n /** Step of the arrow keys and buttons of the hour column. */\n readonly stepHour = input(1, { transform: numberAttribute });\n /** Step of the minute column. */\n readonly stepMinute = input(1, { transform: numberAttribute });\n /** Step of the second column. */\n readonly stepSecond = input(1, { transform: numberAttribute });\n\n /** Shows the calendar and the time row in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n /** The earliest and latest moment that can be chosen, compared including the time. */\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n /** Days that cannot be chosen. */\n readonly disabledDates = input<readonly Date[]>([]);\n /** `0` Sunday … `6` Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** A BCP 47 tag for the names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDateTimePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly titleId = nextId('hx-date-time-picker-title');\n protected readonly popupId = nextId('hx-date-time-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly calendar = viewChild(HxCalendar);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n protected readonly view = signal<CalendarView>('day');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The day with the focus in the grid, and the month the grid shows. */\n protected readonly focusedDate = signal(startOfDay(new Date()));\n protected readonly today = startOfDay(new Date());\n\n protected readonly selectedDate = computed<Date | null>(() => {\n const value = this.value();\n return isValidDate(value) ? value : null;\n });\n protected readonly selectedDates = computed<Date[]>(() => {\n const date = this.selectedDate();\n return date ? [date] : [];\n });\n protected readonly hour12 = computed(() => this.hourFormat() === '12');\n\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n hourCycle: this.hour12() ? 'h12' : 'h23',\n };\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n\n /** The time of day shown in the time row: the value's, or midnight while there is none. */\n protected readonly time = computed<TimeOfDay>(() => {\n const date = this.selectedDate();\n const minutes = this.showMinutes();\n return {\n hours: date?.getHours() ?? 0,\n minutes: minutes ? (date?.getMinutes() ?? 0) : 0,\n seconds: minutes ? (date?.getSeconds() ?? 0) : 0,\n };\n });\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const date = this.selectedDate();\n return date ? this.#format().format(date) : '';\n });\n\n constructor() {\n // a value set from outside drops the text typed and not yet committed (as `writeValue` does)\n effect(() => {\n this.value();\n untracked(() => this.#typed.set(null));\n });\n // a control that becomes disabled closes its popup\n effect(() => {\n if (this.isDisabled()) untracked(() => this.open.set(false));\n });\n // a value set from outside (a binding, a form) brings its month into view; without a value, today moved into\n // `minDate`..`maxDate` does\n effect(() => {\n const first =\n this.selectedDate() ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate());\n const shown = untracked(() => this.focusedDate());\n if (\n first &&\n (first.getFullYear() !== shown.getFullYear() || first.getMonth() !== shown.getMonth())\n ) {\n this.focusedDate.set(startOfDay(first));\n }\n });\n }\n\n #onChange: (value: HxDateTimePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxDateTimePickerValue): void {\n this.#typed.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxDateTimePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the day of an inline calendar (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusDay();\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n /** Whether a date with a time lies outside `minDate`..`maxDate`, compared including the time. */\n #outsideTimeRange(date: Date): boolean {\n return clampTime(date, this.minDate(), this.maxDate()).getTime() !== date.getTime();\n }\n\n /** Chooses a day, keeping the time; `false` when the day is not accepted. */\n protected pick(date: Date): boolean {\n if (this.isDisabled() || this.isDateDisabled(date)) return false;\n const day = startOfDay(date);\n this.focusedDate.set(day);\n this.#typed.set(null);\n this.#commit(this.#atTime(day, this.time()));\n return true;\n }\n\n /** `day` at a time of day, moved into `minDate`..`maxDate` including their times. */\n #atTime(day: Date, time: TimeOfDay): Date {\n return clampTime(\n withTime(day, time.hours, time.minutes, time.seconds),\n this.minDate(),\n this.maxDate(),\n );\n }\n\n /** The time row changed a unit: keep the day, or take today. */\n protected setTime(time: TimeOfDay): void {\n if (this.isDisabled()) return;\n const day = this.selectedDate() ?? this.today;\n if (this.isDateDisabled(day)) return;\n this.#typed.set(null);\n this.#commit(this.#atTime(day, time));\n }\n\n #commit(next: HxDateTimePickerValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusDay(): void {\n afterNextRender(() => this.calendar()?.focusDay(), { injector: this.#injector });\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n // the day to take the focus: the selected day, or today moved into `minDate`..`maxDate`\n this.view.set('day');\n this.focusedDate.set(\n startOfDay(\n this.selectedDate() ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate()),\n ),\n );\n this.#focusDay();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n if (this.isDisabled()) return;\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable, disabled or out of range date and time puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null || this.isDisabled()) return;\n this.#typed.set(null);\n const text = typed.trim();\n if (text === '') {\n if (this.value() !== null) this.#commit(null);\n } else {\n const parsed = parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: false,\n fallbackDay: this.selectedDate() ?? this.today,\n });\n if (parsed && !this.isDateDisabled(parsed) && !this.#outsideTimeRange(parsed)) {\n this.#commit(parsed);\n this.focusedDate.set(startOfDay(parsed));\n }\n }\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n protected selectToday(): void {\n // the time row keeps the popup open on a day: the button bar closes it\n if (this.pick(this.today)) this.close(true);\n }\n\n protected clear(): void {\n if (this.isDisabled()) return;\n this.#typed.set(null);\n this.#commit(null);\n this.close(true);\n }\n\n #leave(): void {\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-date-time-picker-popup') || this.#host.nativeElement.contains(next))\n return;\n // an open popup stays open while the focus is on nothing (a click on its padding); leaving for another element closes it\n if (this.open() && !next) return;\n this.#leave();\n }\n\n /** The focus left the popup for something outside the control. */\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n !next ||\n next.closest('.hx-date-time-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n this.#leave();\n }\n\n /** The focus left an inline calendar and time row for something outside the control. */\n protected onInlineFocusOut(event: FocusEvent): void {\n if (!this.inline() || this.#host.nativeElement.contains(event.relatedTarget as Node | null))\n return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"panel\" />\n} @else {\n <div class=\"hx-date-time-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-date-time-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-date-time-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-time-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-time-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-time-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"panel\" />\n @if (showButtonBar()) {\n <div class=\"hx-date-time-picker-buttonbar\">\n <button type=\"button\" class=\"hx-date-time-picker-button\" (click)=\"selectToday()\">{{ todayLabel() }}</button>\n <button type=\"button\" class=\"hx-date-time-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #panel>\n <div\n class=\"hx-date-time-picker-panel\"\n role=\"group\"\n [attr.aria-label]=\"inline() ? (ariaLabel() ?? chooseLabel()) : null\"\n [attr.aria-labelledby]=\"inline() ? (ariaLabelledby() ?? null) : null\"\n (focusout)=\"onInlineFocusOut($event)\"\n >\n <hx-calendar\n [(focusedDate)]=\"focusedDate\"\n [(view)]=\"view\"\n [selectedDates]=\"selectedDates()\"\n selectionMode=\"single\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [titleId]=\"titleId\"\n [today]=\"today\"\n (picked)=\"pick($event)\"\n />\n <hx-time-row\n [time]=\"time()\"\n [hour12]=\"hour12()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [timeLabel]=\"timeLabel()\"\n [hourLabel]=\"hourLabel()\"\n [minuteLabel]=\"minuteLabel()\"\n [secondLabel]=\"secondLabel()\"\n [periodLabel]=\"periodLabel()\"\n (timeChange)=\"setTime($event)\"\n />\n </div>\n</ng-template>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { clampTime, isValidDate, withTime } from '../internal/dates';\nimport { parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxTimeRow } from '../internal/time-row/time-row';\nimport type { TimeOfDay } from '../internal/time-row/time-row-helpers';\n\nexport type HxTimePickerValue = Date | null;\n\n/**\n * A time field that opens a time row (hour, minute, optionally second and AM/PM), or with `[inline]=\"true\"` the\n * time row alone. The value is a `Date` that is today at the chosen time; clearing the field gives `null`. Typing\n * parses `14:30`, `2:30 PM` and, with `[showMinutes]=\"false\"`, `14`.\n *\n * ```html\n * <hx-time-picker inputId=\"alarm\" hourFormat=\"12\" showIcon [(ngModel)]=\"alarm\" />\n * <hx-time-picker [showMinutes]=\"false\" [(value)]=\"opens\" />\n * <hx-time-picker inline [stepMinute]=\"15\" ariaLabel=\"Start\" [(value)]=\"start\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). Each column is a `spinbutton`: Arrow Up\n * and Down change it by the step, Page Up and Page Down by a larger step, Home and End go to the first and last\n * value. `minTime` and `maxTime` limit the time of day (only the time of the dates counts). The popup is a non-modal\n * dialog that stays open until Escape, the focus leaves the control or a button of the button bar.\n */\n@Component({\n selector: 'hx-time-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxTimeRow],\n templateUrl: './time-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxTimePicker), multi: true },\n ],\n host: {\n class: 'hx-time-picker',\n '[class.hx-time-picker-inline]': 'inline()',\n '[class.hx-time-picker-disabled]': 'isDisabled()',\n '[class.hx-time-picker-invalid]': 'invalid()',\n '[class.hx-time-picker-open]': 'open()',\n '[class.hx-time-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxTimePicker implements ControlValueAccessor, FormValueControl<HxTimePickerValue> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A clock button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Now and Clear buttons under the time row of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /** `Intl.DateTimeFormat` options of the text in the field (default: numeric hour, minute, second with the `hourCycle`). */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly nowLabel = input('Now');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose time');\n /** Accessible names of the time row and its columns. */\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** `'12'` shows hours from 1 to 12 and an AM/PM column. */\n readonly hourFormat = input<'24' | '12'>('24');\n /** A minutes column; `false` picks the hour only (minutes and seconds are `0`, `showSeconds` is ignored). */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** A seconds column. */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n readonly stepHour = input(1, { transform: numberAttribute });\n readonly stepMinute = input(1, { transform: numberAttribute });\n readonly stepSecond = input(1, { transform: numberAttribute });\n /** The earliest and latest time of day; only the time of the dates counts. */\n readonly minTime = input<Date | null>(null);\n readonly maxTime = input<Date | null>(null);\n\n /** Shows the time row in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n /** A BCP 47 tag for the format and the AM/PM names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxTimePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly popupId = nextId('hx-time-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly timeRow = viewChild(HxTimeRow);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly hour12 = computed(() => this.hourFormat() === '12');\n\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n hourCycle: this.hour12() ? 'h12' : 'h23',\n };\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n\n /** The time of day shown in the time row: the value's, or midnight while there is none. */\n protected readonly time = computed<TimeOfDay>(() => {\n const value = this.value();\n const date = isValidDate(value) ? value : null;\n const minutes = this.showMinutes();\n return {\n hours: date?.getHours() ?? 0,\n minutes: minutes ? (date?.getMinutes() ?? 0) : 0,\n seconds: minutes ? (date?.getSeconds() ?? 0) : 0,\n };\n });\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const value = this.value();\n return isValidDate(value) ? this.#format().format(value) : '';\n });\n\n #onChange: (value: HxTimePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxTimePickerValue): void {\n this.#typed.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxTimePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the first column of an inline time row (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusRow();\n }\n\n /** `date` moved into `minTime`..`maxTime`, comparing only the time of day. */\n #clamp(date: Date): Date {\n const onDay = (limit: Date | null) =>\n isValidDate(limit)\n ? withTime(date, limit.getHours(), limit.getMinutes(), limit.getSeconds())\n : null;\n return clampTime(date, onDay(this.minTime()), onDay(this.maxTime()));\n }\n\n #outsideRange(date: Date): boolean {\n return this.#clamp(date).getTime() !== date.getTime();\n }\n\n /** The time row changed a unit: today at that time. */\n protected setTime(time: TimeOfDay): void {\n if (this.isDisabled()) return;\n this.#typed.set(null);\n this.#commit(this.#clamp(withTime(new Date(), time.hours, time.minutes, time.seconds)));\n }\n\n #commit(next: HxTimePickerValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusRow(): void {\n afterNextRender(() => this.timeRow()?.focus(), { injector: this.#injector });\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n this.#focusRow();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable time or one outside `minTime`..`maxTime` puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null) return;\n this.#typed.set(null);\n const text = typed.trim();\n if (text === '') {\n this.#commit(null);\n } else {\n const parsed = parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: true,\n fallbackDay: new Date(),\n });\n if (parsed && !this.#outsideRange(parsed)) this.#commit(parsed);\n }\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n protected selectNow(): void {\n const now = new Date();\n this.setTime({\n hours: now.getHours(),\n minutes: this.showMinutes() ? now.getMinutes() : 0,\n seconds: this.showMinutes() ? now.getSeconds() : 0,\n });\n this.close(true);\n }\n\n protected clear(): void {\n this.#typed.set(null);\n this.#commit(null);\n this.close(true);\n }\n\n #leave(): void {\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-time-picker-popup') || this.#host.nativeElement.contains(next)) return;\n // an open popup stays open while the focus is on nothing (a click on its padding); leaving for another element closes it\n if (this.open() && !next) return;\n this.#leave();\n }\n\n /** The focus left an inline time row for something outside the control. */\n protected onInlineFocusOut(event: FocusEvent): void {\n if (!this.inline() || this.#host.nativeElement.contains(event.relatedTarget as Node | null))\n return;\n this.#onTouched();\n this.touch.emit();\n }\n\n /** The focus left the popup for something outside the control. */\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next || next.closest('.hx-time-picker-popup') || this.#host.nativeElement.contains(next))\n return;\n this.#leave();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"row\" />\n} @else {\n <div class=\"hx-time-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-time-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-time-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-time-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-time-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-time-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"row\" />\n @if (showButtonBar()) {\n <div class=\"hx-time-picker-buttonbar\">\n <button type=\"button\" class=\"hx-time-picker-button\" (click)=\"selectNow()\">{{ nowLabel() }}</button>\n <button type=\"button\" class=\"hx-time-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #row>\n <div\n class=\"hx-time-picker-panel\"\n [attr.role]=\"inline() ? 'group' : null\"\n [attr.aria-label]=\"inline() ? (ariaLabel() ?? timeLabel()) : null\"\n [attr.aria-labelledby]=\"inline() ? (ariaLabelledby() ?? null) : null\"\n (focusout)=\"onInlineFocusOut($event)\"\n >\n <hx-time-row\n [time]=\"time()\"\n [hour12]=\"hour12()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [timeLabel]=\"timeLabel()\"\n [hourLabel]=\"hourLabel()\"\n [minuteLabel]=\"minuteLabel()\"\n [secondLabel]=\"secondLabel()\"\n [periodLabel]=\"periodLabel()\"\n (timeChange)=\"setTime($event)\"\n />\n </div>\n</ng-template>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxDatePicker, type HxDatePickerValue } from '../date-picker/date-picker';\nimport { clampTime, isSameDay, isValidDate, startOfDay, withTime } from '../internal/dates';\nimport { parseDateText, parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxTimePicker, type HxTimePickerValue } from '../time-picker/time-picker';\n\nexport interface HxDateTimeRangeValue {\n from: Date | null;\n to: Date | null;\n}\n\n/** A relative range in the popup's preset list; `from` and `to` are read when it is chosen (`now` stays current). */\nexport interface HxDateTimeRangePreset {\n label: string;\n from: () => Date;\n to: () => Date;\n}\n\nconst EMPTY: HxDateTimeRangeValue = { from: null, to: null };\nconst earlier = (a: Date | null, b: Date | null) => (a && b ? (a <= b ? a : b) : (a ?? b));\nconst sameTime = (a: Date | null, b: Date | null) => a?.getTime() === b?.getTime();\nconst sameRange = (a: HxDateTimeRangeValue, b: HxDateTimeRangeValue) =>\n sameTime(a.from, b.from) && sameTime(a.to, b.to);\nconst later = (a: Date | null, b: Date | null) => (a && b ? (a >= b ? a : b) : (a ?? b));\n\n/**\n * A from and a to date-time range in one field with one button. The field shows the range as one text\n * (`1/1/2026 00:00 - 1/2/2026 00:15`); the popup holds one calendar (an inline range `hx-date-picker`) and a time picker for each end,\n * from and to. The value is `{ from, to }` (`null` while a side is empty); `to` is never before `from`: the `to`\n * time picker starts at `from` (including the time), the `from` time picker ends at `to`, and a choice that crosses the\n * other side moves it. The field is read-only unless `typeable`, which lets the range be typed in the field's\n * format (Enter or leaving the field commits it, an unreadable range puts the value back); the popup stays open\n * until Escape, an outside click or the focus leaving it.\n *\n * ```html\n * <hx-date-time-range-picker [stepMinute]=\"15\" [(ngModel)]=\"shift\" />\n * <hx-date-time-range-picker timeOnly [showMinutes]=\"false\" [(value)]=\"opening\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). The time options are those of\n * `hx-time-picker`. The popup is a dialog named by `ariaLabel` / `ariaLabelledby`; its time pickers are named\n * `fromLabel` / `toLabel`.\n */\n@Component({\n selector: 'hx-date-time-range-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, HxDatePicker, HxTimePicker],\n templateUrl: './date-time-range-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HxDateTimeRangePicker),\n multi: true,\n },\n ],\n host: {\n class: 'hx-date-time-range-picker',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDateTimeRangePicker\n implements ControlValueAccessor, FormValueControl<HxDateTimeRangeValue>\n{\n /** The names of the two time pickers in the popup. */\n readonly fromLabel = input('From');\n readonly toLabel = input('To');\n /** The text between the two dates in the field. */\n readonly separator = input('-');\n readonly placeholder = input('');\n /** The name of the group of preset buttons. */\n readonly presetsLabel = input('Presets');\n /** Ready-made ranges listed in the popup; choosing one fills the draft, Submit applies it. */\n readonly presets = input<readonly HxDateTimeRangePreset[]>([]);\n readonly clearLabel = input('Clear');\n readonly cancelLabel = input('Cancel');\n readonly submitLabel = input('Submit');\n readonly chooseLabel = input('Choose date range');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n /** The range can be typed into the field (`from separator to`); otherwise the field is read-only. */\n readonly typeable = input(false, { transform: booleanAttribute });\n\n /** The time picker options, for both ends. */\n readonly showTime = input(true, { transform: booleanAttribute });\n readonly timeOnly = input(false, { transform: booleanAttribute });\n readonly hourFormat = input<'24' | '12'>('24');\n readonly showMinutes = input(true, { transform: booleanAttribute });\n readonly showSeconds = input(false, { transform: booleanAttribute });\n readonly stepHour = input(1, { transform: numberAttribute });\n readonly stepMinute = input(1, { transform: numberAttribute });\n readonly stepSecond = input(1, { transform: numberAttribute });\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly locale = input<string>();\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n /** A Clear button next to Cancel and Submit. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDateTimeRangeValue>(EMPTY);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n readonly open = signal(false);\n /** The range being edited in the popup; Submit makes it the value, Cancel drops it. */\n protected readonly draft = signal<HxDateTimeRangeValue>(EMPTY);\n protected readonly popupId = nextId('hx-date-time-range-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 2,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -2,\n },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly daysPicker = viewChild(HxDatePicker);\n private readonly timePicker = viewChild(HxTimePicker);\n /** The times of the last complete sides, kept while a side is empty (a range being chosen in the calendar). */\n #lastFrom: Date | null = null;\n #lastTo: Date | null = null;\n readonly #cvaDisabled = signal(false);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = this.timeOnly()\n ? {}\n : { day: 'numeric', month: 'numeric', year: 'numeric' };\n if (this.showTime() || this.timeOnly()) {\n options.hour = 'numeric';\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n options.hourCycle = this.hourFormat() === '12' ? 'h12' : 'h23';\n }\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n /** `1/1/2026 00:00 - 1/2/2026 00:15`: the date and the time are separated by a space, not a comma. */\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const { from, to } = this.value();\n if (!from && !to) return '';\n const fmt = this.#format();\n const one = (d: Date | null) => (d ? fmt.format(d).replace(/,\\s*/, ' ') : '');\n return `${one(from)} ${this.separator()} ${one(to)}`.trim();\n });\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n /** `from` ends at `to`, `to` starts at `from`, each inside `minDate`..`maxDate`. */\n protected readonly fromMax = computed(() => earlier(this.draft().to, this.maxDate()));\n protected readonly toMin = computed(() => later(this.draft().from, this.minDate()));\n /** Counts the refused changes of a time picker; the pickers' values depend on it, so they show the draft again. */\n readonly #refused = signal(0);\n /** The values of the two time pickers: a fresh `Date` per draft change (midnight while a side is empty). */\n protected readonly fromValue = computed<HxTimePickerValue>(() =>\n this.#pickerValue(this.draft().from),\n );\n protected readonly toValue = computed<HxTimePickerValue>(() =>\n this.#pickerValue(this.draft().to),\n );\n\n #onChange: (value: HxDateTimeRangeValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n constructor() {\n // a value set from outside drops the text typed and not yet committed (as `writeValue` does)\n effect(() => {\n this.value();\n untracked(() => this.#typed.set(null));\n });\n }\n\n writeValue(value: HxDateTimeRangeValue | null): void {\n this.value.set({ from: value?.from ?? null, to: value?.to ?? null });\n }\n registerOnChange(fn: (value: HxDateTimeRangeValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field (signal forms call this to focus the control). */\n focus(): void {\n this.field()?.nativeElement.focus();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.#stage(this.value());\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n afterNextRender(() => (this.daysPicker() ?? this.timePicker())?.focus(), {\n injector: this.#injector,\n });\n }\n\n /** A typeable field opens with the button, Arrow Down or Alt+Arrow Up (click, Enter and Space are for typing). */\n protected onFieldClick(): void {\n if (!this.typeable()) this.show();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (this.typeable() && event.key === 'Enter') {\n // a surrounding form is not submitted: Enter commits the typed text\n event.preventDefault();\n this.commitTyping();\n } else if (this.typeable() && event.key === 'Escape' && this.#typed() !== null) {\n event.preventDefault();\n this.#revertTyping();\n } else if (\n event.key === 'ArrowDown' ||\n (event.altKey && event.key === 'ArrowUp') ||\n (!this.typeable() && (event.key === 'Enter' || event.key === ' '))\n ) {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onTyping(event: Event): void {\n if (!this.typeable() || this.isDisabled()) return;\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed range; an unreadable side, a disabled day or a time outside the limits puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null || this.isDisabled()) return;\n this.#typed.set(null);\n const next = this.#parseRange(typed);\n if (next && !sameRange(next, this.value())) {\n this.#commit(next);\n // an open popup edits the typed range from now on: a later Submit keeps it\n if (this.open()) this.#stage(next);\n }\n this.#showValue();\n }\n\n /** Escape drops the typed text and shows the value again. */\n #revertTyping(): void {\n this.#typed.set(null);\n this.#showValue();\n }\n\n /** The binding does not change when the value stays: puts the field's text back by hand. */\n #showValue(): void {\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n /** `from separator to`; either side may be empty (`10/9/2026 09:00 -`), a text without the separator is `from`. */\n #parseRange(typed: string): HxDateTimeRangeValue | null {\n const text = typed.trim();\n if (text === '') return EMPTY;\n const separator = this.separator()\n .trim()\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n // the separator stands alone: the `-` of `2026-10-09` is not one\n const parts = separator ? text.split(new RegExp(`(?:^|\\\\s+)${separator}(?:\\\\s+|$)`)) : [text];\n if (parts.length > 2) return null;\n const { from: oldFrom, to: oldTo } = this.value();\n const from = this.#parseSide(parts[0], oldFrom);\n const to = this.#parseSide(parts[1] ?? '', oldTo ?? oldFrom);\n if (from === undefined || to === undefined) return null;\n return from && to && to < from ? { from: to, to: from } : { from, to };\n }\n\n /** `null` for an empty side, `undefined` for one that is unreadable, on a disabled day or outside the limits. */\n #parseSide(part: string, old: Date | null): Date | null | undefined {\n const text = part.trim();\n if (text === '') return null;\n const date = this.#timed()\n ? parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: this.timeOnly(),\n fallbackDay: old ?? new Date(),\n })\n : parseDateText(text, this.locale());\n if (!date || this.#isBlocked(date)) return undefined;\n const [min, max] = [this.minDate(), this.maxDate()];\n if ((min && date < min) || (max && date > max)) return undefined;\n return date;\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected clear(): void {\n this.#stage(EMPTY);\n }\n\n /** Puts a preset into the draft (the calendar and the time pickers show it); Submit commits it. */\n protected applyPreset(preset: HxDateTimeRangePreset): void {\n const { from: oldFrom, to: oldTo } = this.draft();\n const from = this.#fitPreset(preset.from(), oldFrom);\n const to = this.#fitPreset(preset.to(), oldTo ?? oldFrom);\n // a side on a day in `disabledDates` refuses the preset, as a click or a typed day would\n if (from === undefined || to === undefined) return;\n this.#stage(from && to && to < from ? { from: to, to: from } : { from, to });\n }\n\n /**\n * A preset side as the picker can show it (as a typed side is read): the day only without the time pickers, the\n * time only on the day of the draft (or today) with `timeOnly`; `undefined` on a disabled day.\n */\n #fitPreset(date: Date, old: Date | null): Date | null | undefined {\n if (!isValidDate(date)) return null;\n const fitted = this.timeOnly()\n ? this.#atTime(old ?? new Date(), date)\n : this.#timed()\n ? date\n : startOfDay(date);\n return this.#isBlocked(fitted) ? undefined : fitted;\n }\n\n /** The value has a time (the time pickers are shown). */\n #timed(): boolean {\n return this.showTime() || this.timeOnly();\n }\n\n protected submit(): void {\n this.#commit(this.draft());\n this.close(true);\n }\n\n /** The focus left the control (field, button and popup): the popup closes and the control is touched. */\n protected onHostFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n next?.closest('.hx-date-time-range-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n // a click on the popup's own non-focusable area has no related target: stay open\n if (this.open() && !next) return;\n this.close();\n this.markTouched();\n }\n\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n !next ||\n next.closest('.hx-date-time-range-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n this.close();\n this.markTouched();\n }\n\n /** The days of the calendar: `[from]` while the range is open, `[from, to]` when complete. */\n protected readonly days = computed<Date[]>(() => {\n const { from, to } = this.draft();\n return [from, to].filter((d): d is Date => d !== null);\n });\n\n /** A choice in the calendar sets the days and keeps the times already chosen (midnight while there is none). */\n protected setDays(picked: HxDatePickerValue): void {\n const [first, second] = (Array.isArray(picked) ? [...picked] : [picked])\n .filter(isValidDate)\n .sort((a, b) => a.getTime() - b.getTime());\n const old = this.draft();\n const [fromTime, toTime] = [old.from ?? this.#lastFrom, old.to ?? this.#lastTo ?? old.from];\n const at = (day: Date | undefined, time: Date | null) =>\n day\n ? withTime(\n startOfDay(day),\n time?.getHours() ?? 0,\n time?.getMinutes() ?? 0,\n time?.getSeconds() ?? 0,\n )\n : null;\n const from = at(first, fromTime);\n const to = at(second, toTime);\n this.#stage({ from, to: from && to && to < from ? from : to });\n }\n\n /** The `from` picker changed: the day of `from` (else of `to`, else today) at the new time, not after `to`. */\n protected setFromTime(picked: HxTimePickerValue): void {\n if (!picked) {\n this.#restage();\n return;\n }\n const { from, to } = this.draft();\n const day = from ?? to ?? new Date();\n if (this.#isBlocked(day)) {\n this.#restage();\n return;\n }\n const next = clampTime(this.#atTime(day, picked), this.minDate(), this.fromMax());\n this.#stage({ from: next, to });\n }\n\n /** The `to` picker changed: the day of `to` (else of `from`, else today) at the new time, not before `from`. */\n protected setToTime(picked: HxTimePickerValue): void {\n if (!picked) {\n this.#restage();\n return;\n }\n const { from, to } = this.draft();\n const day = to ?? from ?? new Date();\n if (this.#isBlocked(day)) {\n this.#restage();\n return;\n }\n const next = clampTime(this.#atTime(day, picked), this.toMin(), this.maxDate());\n // a `to` chosen while `from` is empty starts the range at midnight of that day (what the `from` picker shows)\n this.#stage({ from: from ?? startOfDay(next), to: next });\n }\n\n #pickerValue(side: Date | null): Date {\n this.#refused();\n return side ? new Date(side) : startOfDay(new Date());\n }\n\n /** Puts the draft back into the pickers after a time they changed was refused. */\n #restage(): void {\n this.#refused.update((n) => n + 1);\n }\n\n /** A time is not set on a day in `disabledDates`. */\n #isBlocked(day: Date): boolean {\n return this.disabledDates().some((d) => isSameDay(d, day));\n }\n\n #atTime(day: Date, time: Date): Date {\n return withTime(startOfDay(day), time.getHours(), time.getMinutes(), time.getSeconds());\n }\n\n protected markTouched(): void {\n this.#onTouched();\n this.touch.emit();\n }\n\n /** Sets the draft; a side is moved into `minDate`..`maxDate` including the time. */\n #stage(next: HxDateTimeRangeValue): void {\n const inside = (d: Date | null) =>\n isValidDate(d) ? clampTime(d, this.minDate(), this.maxDate()) : null;\n const clean = { from: inside(next.from), to: inside(next.to) };\n if (clean.from) this.#lastFrom = clean.from;\n if (clean.to) this.#lastTo = clean.to;\n this.draft.set(clean);\n }\n\n #commit(next: HxDateTimeRangeValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n}\n","<div\n class=\"hx-date-picker hx-date-picker-has-icon hx-date-time-range-picker-control\"\n [class.hx-date-picker-open]=\"open()\"\n [class.hx-date-picker-disabled]=\"isDisabled()\"\n [class.hx-date-picker-invalid]=\"invalid()\"\n>\n <div class=\"hx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n [readOnly]=\"!typeable()\"\n class=\"hx-date-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"onFieldClick()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"hx-date-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-picker-popup hx-date-time-range-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n @if (presets().length > 0) {\n <div class=\"hx-date-time-range-picker-presets\" role=\"group\" [attr.aria-label]=\"presetsLabel()\">\n @for (preset of presets(); track $index) {\n <button type=\"button\" class=\"hx-date-picker-button hx-date-time-range-picker-preset\" (click)=\"applyPreset(preset)\">{{ preset.label }}</button>\n }\n </div>\n }\n <div class=\"hx-date-time-range-picker-body\">\n @if (!timeOnly()) {\n <hx-date-picker\n class=\"hx-date-time-range-picker-days\"\n inline\n selectionMode=\"range\"\n [ariaLabel]=\"chooseLabel()\"\n [value]=\"days()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [locale]=\"locale()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [disabledDates]=\"disabledDates()\"\n (valueChange)=\"setDays($event)\"\n />\n }\n @if (showTime() || timeOnly()) {\n <div class=\"hx-date-time-range-picker-times\">\n <div class=\"hx-date-time-range-picker-time\">\n <span class=\"hx-date-time-range-picker-caption\" aria-hidden=\"true\">{{ fromLabel() }}</span>\n <hx-time-picker\n inline\n class=\"hx-date-time-range-picker-from\"\n [ariaLabel]=\"fromLabel()\"\n [value]=\"fromValue()\"\n [hourFormat]=\"hourFormat()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"setFromTime($event)\"\n />\n </div>\n <div class=\"hx-date-time-range-picker-time\">\n <span class=\"hx-date-time-range-picker-caption\" aria-hidden=\"true\">{{ toLabel() }}</span>\n <hx-time-picker\n inline\n class=\"hx-date-time-range-picker-to\"\n [ariaLabel]=\"toLabel()\"\n [value]=\"toValue()\"\n [hourFormat]=\"hourFormat()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"setToTime($event)\"\n />\n </div>\n </div>\n }\n </div>\n <div class=\"hx-date-picker-buttonbar hx-date-time-range-picker-footer\">\n @if (showButtonBar()) {\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n <span class=\"hx-date-time-range-picker-spacer\"></span>\n <button type=\"button\" class=\"hx-date-picker-button hx-date-time-range-picker-cancel\" (click)=\"close(true)\">{{ cancelLabel() }}</button>\n <button type=\"button\" class=\"hx-date-picker-button hx-date-time-range-picker-submit\" (click)=\"submit()\">{{ submitLabel() }}</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxDividerLayout = 'horizontal' | 'vertical';\nexport type HxDividerType = 'solid' | 'dashed' | 'dotted';\nexport type HxDividerAlign = 'start' | 'center' | 'end';\n\n/**\n * A line between content; the projected content is a label sitting on the line.\n *\n * ```html\n * <hx-divider />\n * <hx-divider align=\"center\">or</hx-divider>\n * <hx-divider layout=\"vertical\" />\n * ```\n */\n@Component({\n selector: 'hx-divider',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-divider',\n role: 'separator',\n '[attr.aria-orientation]': 'layout()',\n '[class.hx-divider-horizontal]': \"layout() === 'horizontal'\",\n '[class.hx-divider-vertical]': \"layout() === 'vertical'\",\n '[class.hx-divider-dashed]': \"type() === 'dashed'\",\n '[class.hx-divider-dotted]': \"type() === 'dotted'\",\n '[class.hx-divider-start]': \"align() === 'start'\",\n '[class.hx-divider-center]': \"align() === 'center'\",\n '[class.hx-divider-end]': \"align() === 'end'\",\n },\n})\nexport class HxDivider {\n readonly layout = input<HxDividerLayout>('horizontal');\n readonly type = input<HxDividerType>('solid');\n /** Where the label sits on the line (start, center, end); without a label it has no effect. */\n readonly align = input<HxDividerAlign>();\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n type TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { HxDialogFrame } from '../dialog/dialog';\nimport { nextId } from '../internal/ids';\n\nexport type HxDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * A panel that slides in from an edge of the screen, with the same dialog semantics as `hx-dialog`, on\n * `@angular/cdk/dialog`.\n *\n * ```html\n * <hx-drawer [(visible)]=\"open\" header=\"Filters\" position=\"right\">\n * …\n * <div hxDialogFooter><button hx-button (click)=\"open = false\">Done</button></div>\n * </hx-drawer>\n * ```\n *\n * `visible` is two-way. A modal drawer puts a mask behind it, traps the focus and returns it when it closes; a click\n * on the mask (`dismissable`, on by default) or Escape closes it. The slide-in stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-drawer',\n imports: [HxDialogFrame],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-drawer-anchor' },\n template: `\n <ng-template #panel>\n <hx-dialog-frame class=\"hx-drawer\" [header]=\"header()\" [titleId]=\"titleId\" [closable]=\"closable()\" [closeLabel]=\"closeLabel()\" (closeClick)=\"visible.set(false)\">\n <ng-container ngProjectAs=\"[hxDialogHeader]\"><ng-content select=\"[hxDialogHeader]\" /></ng-container>\n <ng-content />\n <ng-container ngProjectAs=\"[hxDialogFooter]\"><ng-content select=\"[hxDialogFooter]\" /></ng-container>\n </hx-dialog-frame>\n </ng-template>\n `,\n})\nexport class HxDrawer {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n\n /** Whether the drawer is open. */\n readonly visible = model(false);\n readonly header = input<string>();\n readonly position = input<HxDrawerPosition>('left');\n /** A mask behind the drawer, a focus trap, and the page behind hidden from assistive technology. */\n readonly modal = input(true, { transform: booleanAttribute });\n /** A click on the mask closes a modal drawer. */\n readonly dismissable = input(true, { transform: booleanAttribute });\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Covers the whole screen. */\n readonly fullScreen = input(false, { transform: booleanAttribute });\n /** CSS width of a left or right drawer (`20rem` by default). */\n readonly width = input<string>();\n /** CSS height of a top or bottom drawer (`20rem` by default). */\n readonly height = input<string>();\n readonly panelClass = input<string | string[]>();\n readonly closeLabel = input('Close');\n /** Accessible name of the drawer when there is no `header`. */\n readonly ariaLabel = input<string>();\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n protected readonly titleId = nextId('hx-drawer-title');\n #ref: DialogRef<unknown, unknown> | undefined;\n\n constructor() {\n effect(() => {\n const visible = this.visible();\n const panel = this.panel();\n untracked(() => {\n if (visible && panel) this.#open(panel);\n else if (!visible) this.#ref?.close();\n });\n });\n inject(DestroyRef).onDestroy(() => this.#ref?.close());\n }\n\n #open(panel: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const position = this.position();\n const modal = this.modal();\n const header = this.header();\n const full = this.fullScreen();\n const sideways = position === 'left' || position === 'right';\n const strategy = this.#overlay.position().global();\n if (full) strategy.top('0').left('0');\n else if (position === 'left') strategy.top('0').left('0');\n else if (position === 'right') strategy.top('0').right('0');\n else if (position === 'top') strategy.top('0').left('0');\n else strategy.bottom('0').left('0');\n const size = (sideways ? this.width() : this.height()) ?? '20rem';\n const ref = this.#dialog.open(panel, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: [\n 'hx-drawer-panel',\n `hx-drawer-panel-${full ? 'full' : position}`,\n ...[this.panelClass() ?? []].flat(),\n ],\n width: full ? '100vw' : sideways ? size : '100vw',\n height: full ? '100vh' : sideways ? '100vh' : size,\n maxWidth: '100vw',\n maxHeight: '100vh',\n positionStrategy: strategy,\n ariaModal: modal,\n ariaLabelledBy: header ? this.titleId : null,\n ariaLabel: header ? null : (this.ariaLabel() ?? null),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (\n event.key === 'Escape' &&\n this.closeOnEscape() &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => {\n if (this.dismissable()) this.visible.set(false);\n });\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n this.hidden.emit();\n }\n });\n this.shown.emit();\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * A native `<fieldset>` with a `<legend>` that groups related controls and can collapse.\n *\n * ```html\n * <hx-fieldset legend=\"Shipping address\" toggleable [(collapsed)]=\"closed\">\n * <label for=\"street\">Street</label> <input hx-input id=\"street\" />\n * </hx-fieldset>\n * ```\n *\n * When `toggleable`, the legend holds a `<button>` with `aria-expanded` and `aria-controls`; the content is `inert`\n * while collapsed so its controls leave the tab order. Expanding and collapsing is animated unless the user\n * prefers reduced motion. Legend and fieldset keep their native meaning for assistive technology.\n */\n@Component({\n selector: 'hx-fieldset',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-fieldset',\n '[class.hx-fieldset-toggleable]': 'toggleable()',\n '[class.hx-fieldset-collapsed]': 'isCollapsed()',\n },\n template: `\n <fieldset class=\"hx-fieldset-box\">\n <legend class=\"hx-fieldset-legend\">\n @if (toggleable()) {\n <button\n type=\"button\"\n class=\"hx-fieldset-toggle\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n [attr.aria-controls]=\"contentId\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-fieldset-toggle-icon\" aria-hidden=\"true\"></span>\n <span>{{ legend() }}</span>\n </button>\n } @else {\n <span class=\"hx-fieldset-legend-text\">{{ legend() }}</span>\n }\n </legend>\n <div class=\"hx-fieldset-collapse\" [attr.inert]=\"isCollapsed() ? '' : null\">\n <div class=\"hx-fieldset-collapse-inner\">\n <div class=\"hx-fieldset-content\" [id]=\"contentId\"><ng-content /></div>\n </div>\n </div>\n </fieldset>\n `,\n})\nexport class HxFieldset {\n /** The legend text. */\n readonly legend = input('');\n /** The legend gets a button that collapses and expands the content. */\n readonly toggleable = input(false, { transform: booleanAttribute });\n /** Whether the content is collapsed (only a `toggleable` fieldset collapses). */\n readonly collapsed = model(false);\n\n protected readonly contentId = nextId('hx-fieldset-content');\n protected isCollapsed(): boolean {\n return this.toggleable() && this.collapsed();\n }\n\n protected toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n input,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { HxButton } from '../button/button';\nimport { nextId } from '../internal/ids';\n\nexport type HxFileUploadMode = 'basic' | 'advanced';\n\n/** `1536` → `1.5 KB`. */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB', 'TB'];\n let value = bytes / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return `${Number.isInteger(value) ? value : value.toFixed(1)} ${units[unit]}`;\n}\n\n/** Whether a file matches an `accept` list: `.png`, `image/*`, `application/pdf`, separated by commas. */\nexport function matchesAccept(file: File, accept: string): boolean {\n const rules = accept\n .split(',')\n .map((r) => r.trim().toLowerCase())\n .filter(Boolean);\n if (rules.length === 0) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return rules.some((rule) =>\n rule.startsWith('.')\n ? name.endsWith(rule)\n : rule.endsWith('/*')\n ? type.startsWith(rule.slice(0, -1))\n : type === rule,\n );\n}\n\n/**\n * Choosing files, with a drop zone and a list. There is no HTTP in it: the component collects the files and\n * emits them, the app uploads.\n *\n * ```html\n * <hx-file-upload accept=\"image/*,.pdf\" multiple [maxFileSize]=\"1_000_000\" [progress]=\"percent()\"\n * (select)=\"onSelect($event)\" (upload)=\"upload($event)\" />\n * <hx-file-upload mode=\"basic\" accept=\".csv\" chooseLabel=\"Import\" (select)=\"import($event)\" />\n * ```\n *\n * The choose control is a native `<input type=\"file\">` inside a button-like label, so it works by keyboard; the\n * drop zone is an extra way to add files. Files that are too large, of the wrong type or beyond `fileLimit` are not\n * added; the reason is shown in a live region.\n */\n@Component({\n selector: 'hx-file-upload',\n imports: [HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-file-upload',\n '[class.hx-file-upload-basic]': \"mode() === 'basic'\",\n '[class.hx-file-upload-disabled]': 'disabled()',\n '[class.hx-file-upload-highlight]': 'dragging()',\n },\n template: `\n @if (mode() === 'basic') {\n <label class=\"hx-button hx-file-upload-choose\" [class.hx-button-disabled]=\"disabled()\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <input #picker type=\"file\" class=\"hx-file-upload-input\" [accept]=\"accept()\" [multiple]=\"multiple()\" [disabled]=\"disabled()\" (change)=\"onPick($event)\" />\n {{ chooseLabel() }}\n </label>\n @if (files().length) {\n <span class=\"hx-file-upload-names\">{{ names() }}</span>\n }\n } @else {\n <div class=\"hx-file-upload-header\">\n <label class=\"hx-button hx-file-upload-choose\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <input #picker type=\"file\" class=\"hx-file-upload-input\" [accept]=\"accept()\" [multiple]=\"multiple()\" [disabled]=\"disabled()\" (change)=\"onPick($event)\" />\n {{ chooseLabel() }}\n </label>\n @if (showUploadButton()) {\n <button hx-button type=\"button\" severity=\"secondary\" [disabled]=\"disabled() || !files().length\" (click)=\"doUpload()\">{{ uploadLabel() }}</button>\n }\n @if (showCancelButton()) {\n <button hx-button type=\"button\" severity=\"secondary\" [disabled]=\"disabled() || !files().length\" (click)=\"cancel()\">{{ cancelLabel() }}</button>\n }\n </div>\n <div\n class=\"hx-file-upload-content\"\n (dragenter)=\"onDrag($event, true)\"\n (dragover)=\"onDrag($event, true)\"\n (dragleave)=\"onDrag($event, false)\"\n (drop)=\"onDrop($event)\"\n >\n @if (progress() !== null && progress() !== undefined) {\n <div\n class=\"hx-file-upload-progress\"\n role=\"progressbar\"\n aria-label=\"Upload progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"progress()\"\n >\n <div class=\"hx-file-upload-progress-bar\" [style.width.%]=\"progress()\"></div>\n </div>\n }\n <div class=\"hx-file-upload-messages\" [id]=\"messagesId\" role=\"status\" aria-live=\"polite\">\n @for (message of messages(); track $index) {\n <p class=\"hx-file-upload-message\">{{ message }}</p>\n }\n </div>\n @if (files().length) {\n <ul class=\"hx-file-upload-list\">\n @for (file of files(); track file) {\n <li class=\"hx-file-upload-file\">\n <span class=\"hx-file-upload-file-info\">\n <span class=\"hx-file-upload-file-name\">{{ file.name }}</span>\n <span class=\"hx-file-upload-file-size\">{{ size(file) }}</span>\n </span>\n <button hx-button type=\"button\" variant=\"outlined\" severity=\"danger\" size=\"small\" [attr.aria-label]=\"'Remove ' + file.name\" [disabled]=\"disabled()\" (click)=\"removeFile(file)\">{{ removeLabel() }}</button>\n </li>\n }\n </ul>\n } @else {\n <p class=\"hx-file-upload-empty\">{{ dropLabel() }}</p>\n }\n </div>\n }\n @if (mode() === 'basic') {\n <div class=\"hx-file-upload-messages\" [id]=\"messagesId\" role=\"status\" aria-live=\"polite\">\n @for (message of messages(); track $index) {\n <p class=\"hx-file-upload-message\">{{ message }}</p>\n }\n </div>\n }\n `,\n})\nexport class HxFileUpload {\n readonly mode = input<HxFileUploadMode>('advanced');\n /** Allowed types: `.png`, `image/*`, `application/pdf`, separated by commas. */\n readonly accept = input('');\n readonly multiple = input(false, { transform: booleanAttribute });\n /** The largest file in bytes. */\n readonly maxFileSize = input(undefined, {\n transform: (v: unknown) => (v == null || v === '' ? undefined : numberAttribute(v)),\n });\n /** The most files in the list. */\n readonly fileLimit = input(undefined, {\n transform: (v: unknown) => (v == null || v === '' ? undefined : numberAttribute(v)),\n });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly chooseLabel = input('Choose');\n readonly uploadLabel = input('Upload');\n readonly cancelLabel = input('Cancel');\n readonly removeLabel = input('Remove');\n readonly dropLabel = input('Drag and drop files here');\n readonly showUploadButton = input(true, { transform: booleanAttribute });\n readonly showCancelButton = input(true, { transform: booleanAttribute });\n /** Upload progress, 0 to 100; the bar shows while it is set. */\n readonly progress = input<number | null>(null);\n readonly invalidFileSizeMessage = input(\n '{0}: Invalid file size, file size should be smaller than {1}.',\n );\n readonly invalidFileTypeMessage = input('{0}: Invalid file type, allowed file types: {1}.');\n readonly invalidFileLimitMessage = input(\n 'Maximum number of files exceeded, limit is {0} at most.',\n );\n\n /** The files that were added by one choice or drop. */\n readonly select = output<File[]>();\n /** The file the user removed from the list. */\n readonly remove = output<File>();\n /** The user emptied the list with Cancel. */\n readonly clear = output<void>();\n /** The files in the list, when the user presses Upload. */\n readonly upload = output<File[]>();\n\n protected readonly messagesId = nextId('hx-file-upload-messages');\n readonly files = signal<File[]>([]);\n protected readonly messages = signal<string[]>([]);\n protected readonly dragging = signal(false);\n protected readonly names = computed(() =>\n this.files()\n .map((f) => f.name)\n .join(', '),\n );\n private readonly picker = viewChild<ElementRef<HTMLInputElement>>('picker');\n\n protected size(file: File): string {\n return formatFileSize(file.size);\n }\n\n protected onPick(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.add([...(input.files ?? [])]);\n input.value = ''; // the same file can be chosen again\n }\n\n protected onDrag(event: DragEvent, over: boolean): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.dragging.set(over);\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragging.set(false);\n if (this.disabled()) return;\n this.add([...(event.dataTransfer?.files ?? [])]);\n }\n\n /** Adds files after checking type, size and limit; the first problem of each file is reported. */\n add(candidates: File[]): void {\n const messages: string[] = [];\n const accepted: File[] = [];\n const kept = this.multiple() ? this.files() : [];\n const limit = this.fileLimit();\n const fill = (template: string, ...values: (string | number)[]) =>\n values.reduce<string>((text, v, i) => text.replace(`{${i}}`, String(v)), template);\n for (const file of this.multiple() ? candidates : candidates.slice(0, 1)) {\n if (this.accept() && !matchesAccept(file, this.accept())) {\n messages.push(fill(this.invalidFileTypeMessage(), file.name, this.accept()));\n } else if (this.maxFileSize() !== undefined && file.size > (this.maxFileSize() as number)) {\n messages.push(\n fill(\n this.invalidFileSizeMessage(),\n file.name,\n formatFileSize(this.maxFileSize() as number),\n ),\n );\n } else if (limit !== undefined && kept.length + accepted.length >= limit) {\n messages.push(fill(this.invalidFileLimitMessage(), limit));\n break;\n } else {\n accepted.push(file);\n }\n }\n this.messages.set(messages);\n if (accepted.length === 0) return;\n this.files.set([...kept, ...accepted]);\n this.select.emit(accepted);\n }\n\n protected removeFile(file: File): void {\n this.files.set(this.files().filter((f) => f !== file));\n this.messages.set([]);\n this.remove.emit(file);\n }\n\n protected cancel(): void {\n this.reset();\n this.clear.emit();\n }\n\n protected doUpload(): void {\n this.upload.emit(this.files());\n }\n\n /** Empties the list and the messages (the app calls it after an upload). */\n reset(): void {\n this.files.set([]);\n this.messages.set([]);\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\nexport type HxFloatLabelVariant = 'over' | 'in' | 'on';\n\n/**\n * A label that sits in the field and moves up when the field has focus or a value. Wrap one control and put\n * its `<label for>` after it.\n *\n * ```html\n * <hx-float-label variant=\"on\">\n * <input hx-input id=\"email\" [(ngModel)]=\"email\" />\n * <label for=\"email\">Email</label>\n * </hx-float-label>\n * ```\n *\n * Native inputs and textareas float by `:focus-within` and `:placeholder-shown` (an input without a\n * placeholder gets a blank one, so the label never sits on top of a hint). The helix-ui components float by\n * the `hx-filled` class they set while they hold a value. The label stays a real `<label>`.\n */\n@Component({\n selector: 'hx-float-label',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-float-label',\n '[class.hx-float-label-in]': \"variant() === 'in'\",\n '[class.hx-float-label-on]': \"variant() === 'on'\",\n },\n template: '<ng-content />',\n})\nexport class HxFloatLabel {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** `over`: above the field, `in`: inside it (the field gets room), `on`: on its top border. */\n readonly variant = input<HxFloatLabelVariant>('over');\n\n constructor() {\n afterNextRender(() => {\n for (const field of this.#host.nativeElement.querySelectorAll(\n ':scope > input, :scope > textarea',\n )) {\n if (!field.hasAttribute('placeholder')) field.setAttribute('placeholder', ' ');\n }\n });\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/** One picture of a galleria. */\nexport interface HxGalleriaItem {\n src: string;\n alt: string;\n /** A smaller picture for the thumbnail strip (default: `src`). */\n thumbnailSrc?: string;\n title?: string;\n caption?: string;\n}\n\nexport type HxGalleriaThumbnailsPosition = 'bottom' | 'top' | 'left' | 'right';\n\nexport interface HxGalleriaItemContext {\n $implicit: HxGalleriaItem;\n index: number;\n}\n\n/** The template of the stage: `<ng-template hxGalleriaItem let-item let-index=\"index\">`. */\n@Directive({ selector: 'ng-template[hxGalleriaItem]' })\nexport class HxGalleriaItemTemplate {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/** The template of a thumbnail: `<ng-template hxGalleriaThumbnail let-item>`. */\n@Directive({ selector: 'ng-template[hxGalleriaThumbnail]' })\nexport class HxGalleriaThumbnail {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/** The template of the caption over the stage: `<ng-template hxGalleriaCaption let-item>`. */\n@Directive({ selector: 'ng-template[hxGalleriaCaption]' })\nexport class HxGalleriaCaption {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/**\n * An image gallery: a stage with the current picture, a strip of thumbnails, previous/next buttons, captions and an\n * optional full-screen mode in a modal overlay.\n *\n * ```html\n * <hx-galleria [value]=\"pictures\" [(activeIndex)]=\"index\" [numVisible]=\"5\" circular ariaLabel=\"Product pictures\" />\n * <hx-galleria [value]=\"pictures\" fullScreen [(visible)]=\"open\" />\n * ```\n *\n * The stage is a `region` with `aria-roledescription=\"carousel\"` and the arrow keys move between pictures; the\n * thumbnails are a `tablist`. Full screen is a modal dialog: the focus is trapped, Escape closes it and the focus goes\n * back to where it was.\n */\n@Component({\n selector: 'hx-galleria',\n imports: [NgTemplateOutlet],\n templateUrl: './galleria.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-galleria-host',\n '(mouseenter)': 'hovered.set(true)',\n '(mouseleave)': 'hovered.set(false)',\n },\n})\nexport class HxGalleria {\n readonly value = input<readonly HxGalleriaItem[]>([]);\n /** The picture on the stage (0-based); `activeIndexChange` is its output. */\n readonly activeIndex = model(0);\n /** Thumbnails shown at a time. */\n readonly numVisible = input(5, { transform: numberAttribute });\n /** After the last picture comes the first again. */\n readonly circular = input(false, { transform: booleanAttribute });\n readonly autoplay = input(false, { transform: booleanAttribute });\n readonly autoplayInterval = input(4000, { transform: numberAttribute });\n readonly showThumbnails = input(true, { transform: booleanAttribute });\n /** Dots over the stage. */\n readonly showIndicators = input(false, { transform: booleanAttribute });\n readonly showItemNavigators = input(true, { transform: booleanAttribute });\n readonly thumbnailsPosition = input<HxGalleriaThumbnailsPosition>('bottom');\n /** The gallery is not shown inline; `visible` opens it in a modal overlay. */\n readonly fullScreen = input(false, { transform: booleanAttribute });\n /** Full screen open (with `fullScreen`); `visibleChange` is its output. */\n readonly visible = model(false);\n /** CSS height of the stage inline (full screen uses the viewport). */\n readonly height = input('24rem');\n readonly ariaLabel = input('Gallery');\n readonly prevLabel = input('Previous picture');\n readonly nextLabel = input('Next picture');\n readonly closeLabel = input('Close');\n /** `{index}` and `{count}` are replaced. */\n readonly itemLabelTemplate = input('{index} of {count}');\n\n protected readonly itemTemplate = contentChild(HxGalleriaItemTemplate);\n protected readonly thumbnailTemplate = contentChild(HxGalleriaThumbnail);\n protected readonly captionTemplate = contentChild(HxGalleriaCaption);\n private readonly content = viewChild<TemplateRef<unknown>>('content');\n\n protected readonly hovered = signal(false);\n protected readonly focused = signal(false);\n protected readonly id = nextId('hx-galleria');\n readonly #dialog = inject(Dialog);\n #ref: DialogRef<unknown, unknown> | undefined;\n private readonly reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n protected readonly count = computed(() => this.value().length);\n protected readonly index = computed(() =>\n this.count() ? Math.min(Math.max(0, this.activeIndex()), this.count() - 1) : 0,\n );\n protected readonly current = computed<HxGalleriaItem | undefined>(\n () => this.value()[this.index()],\n );\n protected readonly isFirst = computed(() => this.index() === 0);\n protected readonly isLast = computed(() => this.index() >= this.count() - 1);\n protected readonly prevDisabled = computed(() => !this.circular() && this.isFirst());\n protected readonly nextDisabled = computed(() => !this.circular() && this.isLast());\n protected readonly indices = computed(() => Array.from({ length: this.count() }, (_, i) => i));\n protected readonly hasCaption = computed(\n () => !!this.captionTemplate() || !!this.current()?.title || !!this.current()?.caption,\n );\n\n /** The first thumbnail of the strip: the strip moves so the active picture stays visible. */\n private readonly thumbStart = signal(0);\n protected readonly thumbsVisible = computed(() =>\n Math.max(1, Math.min(this.numVisible(), this.count())),\n );\n protected readonly thumbNavigation = computed(() => this.count() > this.thumbsVisible());\n protected readonly thumbs = computed(() => {\n const start = this.thumbStart();\n return this.indices().slice(start, start + this.thumbsVisible());\n });\n protected readonly thumbPrevDisabled = computed(() => this.thumbStart() === 0);\n protected readonly thumbNextDisabled = computed(\n () => this.thumbStart() + this.thumbsVisible() >= this.count(),\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n // the strip follows the active picture\n effect(() => {\n const index = this.index();\n const visible = this.thumbsVisible();\n const max = Math.max(0, this.count() - visible);\n untracked(() => {\n const start = this.thumbStart();\n if (index < start) this.thumbStart.set(index);\n else if (index >= start + visible) this.thumbStart.set(Math.min(index - visible + 1, max));\n else if (start > max) this.thumbStart.set(max);\n });\n });\n // autoplay\n let timer: ReturnType<typeof setInterval> | undefined;\n const stop = () => {\n if (timer !== undefined) clearInterval(timer);\n timer = undefined;\n };\n effect(() => {\n const on = this.autoplay() && this.autoplayInterval() > 0 && this.count() > 1;\n const paused = this.hovered() || this.focused() || this.reducedMotion;\n stop();\n if (on && !paused)\n timer = setInterval(() => untracked(() => this.next(true)), this.autoplayInterval());\n });\n // full screen\n effect(() => {\n const open = this.fullScreen() && this.visible();\n const content = this.content();\n untracked(() => {\n if (open && content) this.#open(content);\n else if (!open) this.#close();\n });\n });\n destroyRef.onDestroy(() => {\n stop();\n this.#close();\n });\n }\n\n protected itemLabel(index: number): string {\n return this.itemLabelTemplate()\n .replace('{index}', String(index + 1))\n .replace('{count}', String(this.count()));\n }\n\n protected thumbnailSrc(item: HxGalleriaItem): string {\n return item.thumbnailSrc ?? item.src;\n }\n\n /** Shows a picture (0-based); wraps around when `circular`, else clamps. */\n goTo(index: number): void {\n const count = this.count();\n if (!count) return;\n const target = this.circular()\n ? ((index % count) + count) % count\n : Math.min(Math.max(0, index), count - 1);\n if (target !== this.index()) this.activeIndex.set(target);\n }\n\n next(auto = false): void {\n if (auto && !this.circular() && this.isLast()) {\n this.goTo(0);\n return;\n }\n this.goTo(this.index() + 1);\n }\n\n prev(): void {\n this.goTo(this.index() - 1);\n }\n\n protected scrollThumbs(delta: number): void {\n const max = Math.max(0, this.count() - this.thumbsVisible());\n this.thumbStart.set(Math.min(Math.max(0, this.thumbStart() + delta), max));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n this.prev();\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n this.next();\n break;\n case 'Home':\n event.preventDefault();\n this.goTo(0);\n break;\n case 'End':\n event.preventDefault();\n this.goTo(this.count() - 1);\n break;\n }\n }\n\n protected onThumbKeydown(event: KeyboardEvent): void {\n this.onKeydown(event);\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const list = (event.currentTarget as HTMLElement).closest('.hx-galleria-thumbnail-list');\n queueMicrotask(() => list?.querySelector<HTMLElement>('[aria-selected=\"true\"]')?.focus());\n }\n }\n\n protected onFocusIn(): void {\n this.focused.set(true);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (!event.relatedTarget || !host.contains(event.relatedTarget as Node))\n this.focused.set(false);\n }\n\n protected close(): void {\n this.visible.set(false);\n }\n\n #open(content: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const ref = this.#dialog.open(content, {\n hasBackdrop: true,\n backdropClass: 'hx-galleria-backdrop',\n panelClass: 'hx-galleria-panel',\n width: '100vw',\n height: '100vh',\n maxWidth: '100vw',\n maxHeight: '100vh',\n ariaModal: true,\n ariaLabel: this.ariaLabel(),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => this.visible.set(false));\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n }\n });\n }\n\n #close(): void {\n this.#ref?.close();\n }\n}\n","<ng-template #content>\n <div\n [class]=\"'hx-galleria hx-galleria-thumbnails-' + thumbnailsPosition() + (fullScreen() ? ' hx-galleria-fullscreen' : '')\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <div class=\"hx-galleria-content\">\n <div class=\"hx-galleria-stage\" role=\"region\" aria-roledescription=\"carousel\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-live]=\"autoplay() && !(hovered() || focused()) ? 'off' : 'polite'\" tabindex=\"0\" [style.height]=\"fullScreen() ? null : height()\" (keydown)=\"onKeydown($event)\">\n @if (current(); as item) {\n <div class=\"hx-galleria-item\" role=\"group\" aria-roledescription=\"slide\" [attr.aria-label]=\"itemLabel(index())\">\n @if (itemTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: index() }\" />\n } @else {\n <img class=\"hx-galleria-image\" [src]=\"item.src\" [alt]=\"item.alt\" />\n }\n </div>\n @if (hasCaption()) {\n <div class=\"hx-galleria-caption\">\n @if (captionTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: index() }\" />\n } @else {\n @if (item.title) { <div class=\"hx-galleria-caption-title\">{{ item.title }}</div> }\n @if (item.caption) { <div class=\"hx-galleria-caption-text\">{{ item.caption }}</div> }\n }\n </div>\n }\n }\n @if (showItemNavigators() && count() > 1) {\n <button type=\"button\" class=\"hx-galleria-nav hx-galleria-prev\" [disabled]=\"prevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"prev()\"></button>\n <button type=\"button\" class=\"hx-galleria-nav hx-galleria-next\" [disabled]=\"nextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"next()\"></button>\n }\n @if (showIndicators() && count() > 1) {\n <div class=\"hx-galleria-indicators\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' pictures'\">\n @for (i of indices(); track i) {\n <button type=\"button\" class=\"hx-galleria-indicator\" role=\"tab\" [class.hx-galleria-indicator-active]=\"i === index()\" [attr.aria-selected]=\"i === index()\" [attr.aria-label]=\"itemLabel(i)\" [attr.tabindex]=\"i === index() ? 0 : -1\" (click)=\"goTo(i)\" (keydown)=\"onThumbKeydown($event)\"></button>\n }\n </div>\n }\n </div>\n @if (showThumbnails() && count() > 1) {\n <div class=\"hx-galleria-thumbnails\">\n @if (thumbNavigation()) {\n <button type=\"button\" class=\"hx-galleria-thumbnail-nav hx-galleria-thumbnail-prev\" [disabled]=\"thumbPrevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"scrollThumbs(-1)\"></button>\n }\n <div class=\"hx-galleria-thumbnail-list\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' thumbnails'\">\n @for (i of thumbs(); track i) {\n <button\n type=\"button\"\n class=\"hx-galleria-thumbnail\"\n role=\"tab\"\n [class.hx-galleria-thumbnail-active]=\"i === index()\"\n [attr.aria-selected]=\"i === index()\"\n [attr.aria-label]=\"value()[i].alt\"\n [attr.tabindex]=\"i === index() ? 0 : -1\"\n (click)=\"goTo(i)\"\n (keydown)=\"onThumbKeydown($event)\"\n >\n @if (thumbnailTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: value()[i], index: i }\" />\n } @else {\n <img class=\"hx-galleria-thumbnail-image\" [src]=\"thumbnailSrc(value()[i])\" alt=\"\" />\n }\n </button>\n }\n </div>\n @if (thumbNavigation()) {\n <button type=\"button\" class=\"hx-galleria-thumbnail-nav hx-galleria-thumbnail-next\" [disabled]=\"thumbNextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"scrollThumbs(1)\"></button>\n }\n </div>\n }\n </div>\n @if (fullScreen()) {\n <button type=\"button\" class=\"hx-galleria-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n }\n </div>\n</ng-template>\n@if (!fullScreen()) {\n <ng-container [ngTemplateOutlet]=\"content\" />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\nexport type HxIconPosition = 'left' | 'right';\n\n/**\n * An icon inside a text field. Wrap an `hx-input` (or `hx-password`) and one `hx-input-icon` element; the\n * field gets room for the icon, which sits on the start (`left`, default) or end (`right`) edge.\n *\n * ```html\n * <hx-icon-field>\n * <i class=\"pi pi-search\" hx-input-icon></i>\n * <input hx-input placeholder=\"Search\" aria-label=\"Search\" />\n * </hx-icon-field>\n * <hx-icon-field iconPosition=\"right\">…</hx-icon-field>\n * ```\n *\n * `left` and `right` follow the writing direction (start and end). The icon is decorative and ignores clicks.\n */\n@Component({\n selector: 'hx-icon-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-icon-field',\n '[class.hx-icon-field-left]': \"iconPosition() === 'left'\",\n '[class.hx-icon-field-right]': \"iconPosition() === 'right'\",\n },\n template: '<ng-content />',\n})\nexport class HxIconField {\n readonly iconPosition = input<HxIconPosition>('left');\n}\n\n/**\n * The icon of an `hx-icon-field`: any element, for example `<i class=\"pi pi-search\" hx-input-icon></i>` or an\n * inline `<svg>`. It is hidden from assistive technology unless it has an `aria-label`.\n */\n@Directive({\n selector: '[hx-input-icon]',\n host: {\n class: 'hx-input-icon',\n '[attr.aria-hidden]': 'hidden()',\n },\n})\nexport class HxInputIcon {\n readonly #element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected hidden(): 'true' | null {\n return this.#element.hasAttribute('aria-label') ? null : 'true';\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\n/** The content of the hover indicator over a previewable image: `<ng-template hxImageIndicator>`. */\n@Directive({ selector: 'ng-template[hxImageIndicator]' })\nexport class HxImageIndicator {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * An image, optionally with a preview: a click (or Enter on the button over it) opens the picture in a modal\n * overlay with a toolbar to rotate, zoom and close.\n *\n * ```html\n * <hx-image src=\"product.jpg\" alt=\"Bamboo watch\" width=\"250\" preview />\n * <hx-image src=\"thumb.jpg\" previewImageSrc=\"large.jpg\" alt=\"Bamboo watch\" preview />\n * ```\n *\n * The preview trigger is a button named \"Preview {alt}\"; the overlay is a modal dialog (focus trap, Escape closes,\n * focus restored); the toolbar buttons are labelled; + and - zoom from the keyboard.\n */\n@Component({\n selector: 'hx-image',\n imports: [NgStyle, NgTemplateOutlet],\n templateUrl: './image.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-image', '[class.hx-image-preview]': 'preview()' },\n})\nexport class HxImage {\n readonly src = input.required<string>();\n readonly alt = input.required<string>();\n /** Width and height of the inline image (CSS or number of pixels). */\n readonly width = input<string | number>();\n readonly height = input<string | number>();\n /** A click opens the picture in an overlay. */\n readonly preview = input(false, { transform: booleanAttribute });\n /** A larger picture for the overlay (default: `src`). */\n readonly previewImageSrc = input<string>();\n readonly imageClass = input<string>();\n readonly imageStyle = input<Record<string, string>>();\n readonly showToolbar = input(true, { transform: booleanAttribute });\n readonly zoomStep = input(0.25, { transform: numberAttribute });\n readonly zoomMin = input(0.5, { transform: numberAttribute });\n readonly zoomMax = input(3, { transform: numberAttribute });\n /** `{alt}` is replaced. */\n readonly previewLabelTemplate = input('Preview {alt}');\n readonly rotateLeftLabel = input('Rotate left');\n readonly rotateRightLabel = input('Rotate right');\n readonly zoomOutLabel = input('Zoom out');\n readonly zoomInLabel = input('Zoom in');\n readonly closeLabel = input('Close');\n\n /** The preview opened. */\n readonly show = output<void>();\n /** The preview closed. */\n readonly hide = output<void>();\n\n protected readonly indicatorTemplate = contentChild(HxImageIndicator);\n private readonly overlay = viewChild<TemplateRef<unknown>>('overlay');\n readonly #dialog = inject(Dialog);\n #ref: DialogRef<unknown, unknown> | undefined;\n\n protected readonly rotation = signal(0);\n protected readonly scale = signal(1);\n protected readonly transform = computed(\n () => `rotate(${this.rotation()}deg) scale(${this.scale()})`,\n );\n protected readonly previewLabel = computed(() =>\n this.previewLabelTemplate().replace('{alt}', this.alt()),\n );\n protected readonly previewSrc = computed(() => this.previewImageSrc() ?? this.src());\n protected readonly zoomOutDisabled = computed(() => this.scale() <= this.zoomMin() + 1e-9);\n protected readonly zoomInDisabled = computed(() => this.scale() >= this.zoomMax() - 1e-9);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.#ref?.close());\n }\n\n protected cssSize(value: string | number | undefined): string | null {\n if (value === undefined || value === null || value === '') return null;\n return typeof value === 'number' || /^\\d+$/.test(value) ? `${value}px` : value;\n }\n\n /** Opens the preview. */\n open(): void {\n const overlay = this.overlay();\n if (!this.preview() || this.#ref || !overlay) return;\n this.rotation.set(0);\n this.scale.set(1);\n const ref = this.#dialog.open(overlay, {\n hasBackdrop: true,\n backdropClass: 'hx-image-backdrop',\n panelClass: 'hx-image-panel',\n width: '100vw',\n height: '100vh',\n maxWidth: '100vw',\n maxHeight: '100vh',\n ariaModal: true,\n ariaLabel: this.alt(),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => this.onKeydown(event));\n ref.backdropClick.subscribe(() => this.close());\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.hide.emit();\n }\n });\n this.show.emit();\n }\n\n /** Closes the preview. */\n close(): void {\n this.#ref?.close();\n }\n\n protected rotate(degrees: number): void {\n this.rotation.update((r) => r + degrees);\n }\n\n protected zoom(direction: 1 | -1): void {\n const next = this.scale() + direction * this.zoomStep();\n this.scale.set(\n Math.min(this.zoomMax(), Math.max(this.zoomMin(), Math.round(next * 1000) / 1000)),\n );\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoom(1);\n break;\n case '-':\n event.preventDefault();\n this.zoom(-1);\n break;\n }\n }\n}\n","<img\n [class]=\"'hx-image-img ' + (imageClass() ?? '')\"\n [src]=\"src()\"\n [alt]=\"alt()\"\n [style.width]=\"cssSize(width())\"\n [style.height]=\"cssSize(height())\"\n [ngStyle]=\"imageStyle() ?? null\"\n/>\n@if (preview()) {\n <button type=\"button\" class=\"hx-image-preview-mask\" [attr.aria-label]=\"previewLabel()\" (click)=\"open()\">\n @if (indicatorTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n <span class=\"hx-image-preview-icon\" aria-hidden=\"true\"></span>\n }\n </button>\n}\n\n<ng-template #overlay>\n <div class=\"hx-image-overlay\">\n @if (showToolbar()) {\n <div class=\"hx-image-toolbar\">\n <button type=\"button\" class=\"hx-image-action hx-image-rotate-left\" [attr.aria-label]=\"rotateLeftLabel()\" (click)=\"rotate(-90)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-rotate-right\" [attr.aria-label]=\"rotateRightLabel()\" (click)=\"rotate(90)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-zoom-out\" [disabled]=\"zoomOutDisabled()\" [attr.aria-label]=\"zoomOutLabel()\" (click)=\"zoom(-1)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-zoom-in\" [disabled]=\"zoomInDisabled()\" [attr.aria-label]=\"zoomInLabel()\" (click)=\"zoom(1)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n </div>\n } @else {\n <button type=\"button\" class=\"hx-image-action hx-image-close hx-image-close-only\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n }\n <div class=\"hx-image-stage\">\n <img class=\"hx-image-original\" [src]=\"previewSrc()\" [alt]=\"alt()\" [style.transform]=\"transform()\" />\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Joins a field with text or button addons into one control. Children: `hx-input`, `hx-select`,\n * `hx-input-number`, `hx-icon-field`, `button[hx-button]` and `hx-input-group-addon`. Inner borders and radii\n * are joined, the outer corners keep the radius.\n *\n * ```html\n * <hx-input-group>\n * <hx-input-group-addon>https://</hx-input-group-addon>\n * <input hx-input aria-label=\"Domain\" aria-describedby=\"scheme\" />\n * <button hx-button>Go</button>\n * </hx-input-group>\n * ```\n *\n * The group has no role of its own. An addon is not part of the field's name: reference it with\n * `aria-describedby` (give the addon an `id`) when it carries information.\n */\n@Component({\n selector: 'hx-input-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-input-group' },\n template: '<ng-content />',\n})\nexport class HxInputGroup {}\n\n/** Text or an icon next to a field inside an `hx-input-group`. */\n@Component({\n selector: 'hx-input-group-addon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-input-group-addon' },\n template: '<ng-content />',\n})\nexport class HxInputGroupAddon {}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxInput, type HxInputSize, type HxInputVariant } from '../input/input';\nimport { nextId } from '../internal/ids';\n\nexport type HxInputNumberMode = 'decimal' | 'currency';\nexport type HxInputNumberButtonLayout = 'stacked' | 'horizontal';\nexport type HxInputNumberSize = HxInputSize;\nexport type HxInputNumberVariant = HxInputVariant;\n\n/** Delay before a held step button starts to repeat, and the pause between repeats (ms). */\nconst REPEAT_DELAY = 400;\nconst REPEAT_INTERVAL = 60;\n\n/**\n * A numeric field with locale formatting and optional step buttons. The value is a `number | null`; the text\n * is formatted with `Intl.NumberFormat` when the field loses focus and parsed in the same locale while the\n * user types. Works with `ngModel`, reactive forms and signal forms (`[formField]`).\n *\n * ```html\n * <label for=\"qty\">Quantity</label>\n * <hx-input-number inputId=\"qty\" [(ngModel)]=\"qty\" [min]=\"0\" [max]=\"99\" showButtons />\n * <hx-input-number ariaLabel=\"Price\" mode=\"currency\" currency=\"EUR\" locale=\"de-DE\" [formField]=\"form.price\" />\n * ```\n *\n * Fractions are rounded to `maxFractionDigits` (3 for decimals, 2 for most currencies), so set it to match\n * `step` when the step is finer than that. Give the field a visible `<label for>` (with `inputId`) or an\n * `ariaLabel`.\n */\n@Component({\n selector: 'hx-input-number',\n imports: [HxInput],\n templateUrl: './input-number.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxInputNumber), multi: true },\n ],\n host: {\n class: 'hx-input-number',\n '[class.hx-input-number-fluid]': 'fluid()',\n '[class.hx-input-number-stacked]': \"showButtons() && buttonLayout() === 'stacked'\",\n '[class.hx-input-number-horizontal]': \"showButtons() && buttonLayout() === 'horizontal'\",\n '[class.hx-input-number-disabled]': 'isDisabled()',\n '[class.hx-filled]': \"displayText() !== ''\",\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxInputNumber implements ControlValueAccessor, FormValueControl<number | null> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n\n readonly min = input<number>();\n readonly max = input<number>();\n readonly step = input(1);\n readonly minFractionDigits = input<number>();\n readonly maxFractionDigits = input<number>();\n /** A BCP 47 tag; the browser's locale when not set. */\n readonly locale = input<string>();\n readonly useGrouping = input(true, { transform: booleanAttribute });\n readonly mode = input<HxInputNumberMode>('decimal');\n /** ISO 4217 code for `mode=\"currency\"` (default `USD`). */\n readonly currency = input<string>();\n readonly prefix = input('');\n readonly suffix = input('');\n readonly showButtons = input(false, { transform: booleanAttribute });\n readonly buttonLayout = input<HxInputNumberButtonLayout>('stacked');\n readonly incrementLabel = input('Increment');\n readonly decrementLabel = input('Decrement');\n readonly placeholder = input('');\n readonly size = input<HxInputNumberSize>('medium');\n readonly variant = input<HxInputNumberVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The `id` of the field, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<number | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly defaultId = nextId('hx-input-number');\n /** The text the user is typing; `null` while the field shows the formatted value. */\n protected readonly editing = signal<string | null>(null);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n\n readonly #formatter = computed(\n () =>\n new Intl.NumberFormat(this.locale(), {\n style: this.mode() === 'currency' ? 'currency' : 'decimal',\n currency: this.mode() === 'currency' ? (this.currency() ?? 'USD') : undefined,\n minimumFractionDigits: this.minFractionDigits(),\n maximumFractionDigits: this.maxFractionDigits(),\n useGrouping: this.useGrouping(),\n }),\n );\n\n /** The characters of the locale that the parser must understand. */\n readonly #symbols = computed(() => {\n const locale = this.#formatter().resolvedOptions().locale;\n const part = (parts: Intl.NumberFormatPart[], type: string) =>\n parts.find((p) => p.type === type)?.value;\n const decimal = part(\n new Intl.NumberFormat(locale, { minimumFractionDigits: 1 }).formatToParts(1.1),\n 'decimal',\n );\n const group = part(new Intl.NumberFormat(locale).formatToParts(11111), 'group');\n const minus = part(new Intl.NumberFormat(locale).formatToParts(-1), 'minusSign');\n const digits = new Intl.NumberFormat(locale, { useGrouping: false });\n return {\n decimal: decimal ?? '.',\n group,\n minus: minus ?? '-',\n digits: [...Array(10).keys()].map((i) => digits.format(i)),\n };\n });\n\n protected readonly displayText = computed(() => this.editing() ?? this.#format(this.value()));\n protected readonly ariaValueText = computed(() => {\n const value = this.value();\n return value === null ? null : this.#format(value);\n });\n protected readonly canIncrement = computed(() => {\n const [value, max] = [this.value(), this.max()];\n return !this.isDisabled() && (value === null || max === undefined || value < max);\n });\n protected readonly canDecrement = computed(() => {\n const [value, min] = [this.value(), this.min()];\n return !this.isDisabled() && (value === null || min === undefined || value > min);\n });\n\n #onChange: (value: number | null) => void = () => {};\n #onTouched: () => void = () => {};\n #repeat: ReturnType<typeof setTimeout> | undefined;\n #holding = false;\n #pointerStepped = false;\n\n constructor() {\n this.#destroyRef.onDestroy(() => this.#stopRepeat());\n }\n\n // ControlValueAccessor (template-driven and reactive forms)\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n this.editing.set(null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the field (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.editing.set(text);\n const parsed = this.#parse(text);\n // an unparsable text (\"-\", \"1.2.3\") keeps the last value; the field is reformatted on blur\n if (parsed !== undefined) this.#commit(parsed === null ? null : this.#normalize(parsed));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n event.preventDefault();\n this.#stepBy(key === 'ArrowUp' ? 1 : -1);\n } else if (key === 'Home' && this.min() !== undefined) {\n event.preventDefault();\n this.#setNumber(this.min() as number);\n } else if (key === 'End' && this.max() !== undefined) {\n event.preventDefault();\n this.#setNumber(this.max() as number);\n } else if (key === 'Enter') {\n this.editing.set(null);\n }\n }\n\n protected onBlur(): void {\n this.editing.set(null);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.#host.nativeElement.contains(next)) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n /** Pointer down on a step button: one step now, then repeat while it is held. */\n protected onPress(event: PointerEvent, direction: 1 | -1): void {\n if (event.button > 0) return;\n this.#pointerStepped = true;\n this.#stopRepeat();\n this.#holding = true;\n this.#stepBy(direction); // stops the repeat when a limit is reached\n const tick = () => {\n this.#stepBy(direction);\n if (this.#holding) this.#repeat = setTimeout(tick, REPEAT_INTERVAL);\n };\n if (this.#holding) this.#repeat = setTimeout(tick, REPEAT_DELAY);\n }\n\n protected onRelease(): void {\n this.#stopRepeat();\n }\n\n /** A click that did not come from a pointer press (assistive technology, `button.click()`) steps once. */\n protected onClick(direction: 1 | -1): void {\n if (this.#pointerStepped) this.#pointerStepped = false;\n else this.#stepBy(direction);\n }\n\n #stopRepeat(): void {\n this.#holding = false;\n clearTimeout(this.#repeat);\n this.#repeat = undefined;\n }\n\n #stepBy(direction: 1 | -1): void {\n if (this.isDisabled()) return;\n const typed = this.editing();\n const current = (typed === null ? undefined : this.#parse(typed)) ?? this.value() ?? 0;\n this.#setNumber(current + direction * this.step());\n }\n\n #setNumber(next: number): void {\n const value = this.#normalize(next);\n const changed = value !== this.value();\n this.editing.set(null);\n if (changed) this.#commit(value);\n else this.#stopRepeat(); // at a limit\n }\n\n #commit(value: number | null): void {\n this.value.set(value);\n this.#onChange(value);\n }\n\n /** Clamps to `min`/`max` and rounds to the fraction digits the field shows. */\n #normalize(value: number): number {\n const min = this.min();\n const max = this.max();\n let result = value;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n const digits = this.#formatter().resolvedOptions().maximumFractionDigits ?? 3;\n return Number(result.toFixed(digits));\n }\n\n #format(value: number | null): string {\n return value === null\n ? ''\n : `${this.prefix()}${this.#formatter().format(value)}${this.suffix()}`;\n }\n\n /** The number in `text`, `null` for an empty text, `undefined` when it is not a number. */\n #parse(text: string): number | null | undefined {\n const { decimal, group, minus, digits } = this.#symbols();\n let s = text.trim();\n if (!s) return null;\n for (const affix of [this.prefix(), this.suffix()]) if (affix) s = s.replace(affix, '');\n digits.forEach((local, i) => {\n if (local !== String(i)) s = s.replaceAll(local, String(i));\n });\n s = s.replaceAll(minus, '-').replaceAll('−', '-');\n if (group) s = /\\s/.test(group) ? s.replace(/\\s/g, '') : s.replaceAll(group, '');\n s = s.replaceAll(decimal, '.').replace(/[^0-9.-]/g, '');\n if (!/^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(s)) return undefined;\n return Number(s);\n }\n}\n","@if (showButtons() && buttonLayout() === 'horizontal') {\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-decrement\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n [attr.aria-label]=\"decrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, -1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(-1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14\" /></svg>\n </button>\n}\n<input\n #field\n hx-input\n type=\"text\"\n role=\"spinbutton\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [id]=\"inputId() ?? defaultId\"\n [value]=\"displayText()\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuetext]=\"ariaValueText()\"\n [disabled]=\"isDisabled()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [fluid]=\"true\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n/>\n@if (showButtons()) {\n @if (buttonLayout() === 'stacked') {\n <span class=\"hx-input-number-spin\">\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-increment\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n [attr.aria-label]=\"incrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, 1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"0.75em\" height=\"0.75em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 15 6-6 6 6\" /></svg>\n </button>\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-decrement\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n [attr.aria-label]=\"decrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, -1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(-1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"0.75em\" height=\"0.75em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\" /></svg>\n </button>\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-increment\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n [attr.aria-label]=\"incrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, 1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" /></svg>\n </button>\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\n/**\n * An inline list of options, single or `multiple`, on the CDK listbox (`aria-multiselectable`, active\n * descendant, typeahead, arrows, Home, End). With `filter` a text field above the list narrows the options by\n * their label.\n *\n * ```html\n * <hx-listbox ariaLabel=\"City\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\" [(ngModel)]=\"city\" />\n * <hx-listbox ariaLabel=\"Toppings\" [options]=\"toppings\" multiple checkmark filter [(value)]=\"chosen\" />\n * ```\n *\n * The value is the option's value, or an array of values with `multiple`. It works with `ngModel`, reactive forms\n * and signal forms (`[formField]`).\n */\n@Component({\n selector: 'hx-listbox',\n imports: [CdkListbox, CdkOption],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxListbox), multi: true },\n ],\n host: {\n class: 'hx-listbox',\n '[class.hx-listbox-disabled]': 'isDisabled()',\n '[class.hx-listbox-invalid]': 'invalid()',\n '[class.hx-listbox-checkmark]': 'checkmark()',\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n @if (filter()) {\n <div class=\"hx-listbox-header\">\n <input\n type=\"text\"\n class=\"hx-listbox-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"listId\"\n [placeholder]=\"filterPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n </div>\n }\n <div class=\"hx-listbox-scroll\" [style.max-height]=\"scrollHeight()\">\n <div\n cdkListbox\n class=\"hx-listbox-list\"\n [id]=\"listId\"\n [cdkListboxMultiple]=\"multiple()\"\n [cdkListboxDisabled]=\"isDisabled()\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-listbox-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-listbox-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-listbox-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n `,\n})\nexport class HxListbox<V = unknown> implements ControlValueAccessor, FormValueControl<unknown> {\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n /** Several options can be chosen; the value is then an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** A check in front of the selected options. */\n readonly checkmark = input(false, { transform: booleanAttribute });\n /** A text field above the list that narrows the options by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Filter');\n readonly emptyMessage = input('No options');\n /** Maximum height of the list (a CSS length such as `14rem`); it scrolls beyond. */\n readonly scrollHeight = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to find the selected options (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly listId = nextId('hx-listbox');\n protected readonly query = signal('');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n private readonly listbox = viewChild(CdkListbox);\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(\n this.options(),\n this.optionLabel(),\n this.optionValue(),\n this.optionDisabled(),\n ),\n );\n\n protected readonly visibleItems = computed(() => {\n const query = this.query().trim().toLowerCase();\n return query ? this.items().filter((i) => i.label.toLowerCase().includes(query)) : this.items();\n });\n\n protected readonly selectedValues = computed(() => {\n const current = this.value();\n if (this.multiple()) return Array.isArray(current) ? current : [];\n return current === null || current === undefined ? [] : [current];\n });\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the list (signal forms call this to focus the control). */\n focus(): void {\n this.listbox()?.focus();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<unknown>): void {\n // work from the clicked option, not from the CDK's value list: that one lacks the selected options the filter hides\n const option = event.option;\n if (!option) return;\n const same = this.compareWith();\n const current = this.selectedValues();\n const chosen = current.some((v) => same(v, option.value));\n let next: unknown;\n if (this.multiple()) {\n next = chosen ? current.filter((v) => !same(v, option.value)) : [...current, option.value];\n } else if (chosen) {\n // a single list keeps its choice when the chosen option is clicked again\n this.listbox()?.select(option);\n return;\n } else {\n next = option.value;\n }\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, viewChild } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * The list of a menu, shared by `hx-menu` and `hx-menubar` (internal): an ARIA menu from `@angular/cdk/menu` whose\n * items are links, buttons or submenu triggers. With `groups` an item at this level that has children and no action of\n * its own is drawn as a group heading above them; elsewhere children open as a submenu.\n */\n@Component({\n selector: 'hx-menu-panel',\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger, NgTemplateOutlet, RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menu-panel' },\n // The items must be declared inside the element that carries `cdkMenu`: the CDK finds them as content children.\n template: `\n <div cdkMenu class=\"hx-menu-list\" [attr.aria-label]=\"ariaLabel() ?? null\">\n <ng-template #content let-item let-submenu=\"submenu\">\n @if (item.icon) {\n <span class=\"hx-menu-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-menu-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"hx-menu-badge\">{{ item.badge }}</span>\n }\n @if (submenu) {\n <span class=\"hx-menu-submenu-icon\" aria-hidden=\"true\"></span>\n }\n </ng-template>\n\n <ng-template #entries let-list let-top=\"top\">\n @for (item of visible(list); track $index) {\n @if (item.separator) {\n <div class=\"hx-menu-separator\" role=\"separator\"></div>\n } @else if (top && item.items?.length && !item.command && !item.routerLink && !item.url) {\n <div class=\"hx-menu-group\" role=\"group\" [attr.aria-label]=\"item.label\">\n <div class=\"hx-menu-heading\" role=\"presentation\">{{ item.label }}</div>\n <ng-container [ngTemplateOutlet]=\"entries\" [ngTemplateOutletContext]=\"{ $implicit: item.items, top: false }\" />\n </div>\n } @else if (item.items?.length) {\n <button\n type=\"button\"\n class=\"hx-menu-item hx-menu-item-submenu\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"sub\"\n [cdkMenuItemDisabled]=\"!!item.disabled\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item, submenu: true }\" />\n </button>\n <ng-template #sub>\n <hx-menu-panel class=\"hx-menu-submenu\" [items]=\"item.items ?? []\" [groups]=\"false\" [notify]=\"notify() ?? emit\" />\n </ng-template>\n } @else if (item.disabled) {\n <button type=\"button\" class=\"hx-menu-item\" cdkMenuItem [cdkMenuItemDisabled]=\"true\" [attr.id]=\"item.id ?? null\" [attr.aria-label]=\"item.ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n } @else if (item.routerLink) {\n <a\n class=\"hx-menu-item\"\n cdkMenuItem\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else if (item.url) {\n <a\n class=\"hx-menu-item\"\n cdkMenuItem\n [href]=\"item.url\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"hx-menu-item\"\n cdkMenuItem\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n }\n }\n </ng-template>\n\n <ng-container [ngTemplateOutlet]=\"entries\" [ngTemplateOutletContext]=\"{ $implicit: items(), top: groups() }\" />\n </div>\n `,\n})\nexport class HxMenuPanel {\n readonly items = input<readonly HxMenuItem[]>([]);\n /** Draw items with children and no action as group headings (the first level of `hx-menu`). */\n readonly groups = input(true);\n readonly ariaLabel = input<string>();\n /** An item was activated (after its `command` ran). */\n readonly triggered = output<HxMenuItem>();\n /**\n * Where a submenu reports an activated item. The CDK closes (and destroys) a submenu before the click handler\n * runs, and an output of a destroyed component no longer delivers, so submenus call this function of the root.\n */\n readonly notify = input<(item: HxMenuItem) => void>();\n\n private readonly menu = viewChild(CdkMenu);\n protected readonly visible = (list: readonly HxMenuItem[]) =>\n list.filter((item) => item.visible !== false);\n\n focusFirst(): void {\n this.menu()?.focusFirstItem('keyboard');\n }\n\n protected run(item: HxMenuItem, originalEvent: Event): void {\n item.command?.({ originalEvent, item });\n const notify = this.notify();\n if (notify) notify(item);\n else this.triggered.emit(item);\n }\n\n protected readonly emit = (item: HxMenuItem) => this.triggered.emit(item);\n}\n","import { CdkConnectedOverlay, type ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Injector,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { HxMenuItem } from '../menu-item';\nimport { HxMenuPanel } from './menu-panel';\n\n/**\n * A menu of `HxMenuItem`s, inline or as a popup, with nested submenus, on `@angular/cdk/menu`.\n *\n * ```html\n * <button hx-button aria-haspopup=\"menu\" (click)=\"menu.toggle($event)\">Actions</button>\n * <hx-menu #menu popup ariaLabel=\"Actions\" [model]=\"items\" />\n *\n * <hx-menu [model]=\"items\" ariaLabel=\"Account\" />\n * ```\n *\n * An item with children and no action of its own, on the first level, is a group heading above its children; deeper\n * levels open as submenus. A popup menu opens at the element that called `toggle(event)` (or `show(event)`), moves the\n * focus into the menu and returns it to that element on Escape or when an item is chosen.\n *\n * Keyboard (the WAI-ARIA menu pattern from the CDK): Arrow Down/Up move, Home and End jump, typing jumps by\n * label, Right or Enter opens a submenu and Left closes it, Enter or Space activates, Escape closes.\n */\n@Component({\n selector: 'hx-menu',\n imports: [CdkConnectedOverlay, HxMenuPanel],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menu', '[class.hx-menu-popup]': 'popup()' },\n template: `\n @if (popup()) {\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-menu-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin() ?? fallbackOrigin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <hx-menu-panel class=\"hx-menu-root\" [items]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"onTriggered($event)\" />\n </ng-template>\n } @else {\n <hx-menu-panel class=\"hx-menu-root\" [items]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"triggered.emit($event)\" />\n }\n `,\n})\nexport class HxMenu {\n readonly #injector = inject(Injector);\n readonly model = input<readonly HxMenuItem[]>([]);\n /** Shows the menu in an overlay when `toggle` or `show` is called. */\n readonly popup = input(false, { transform: booleanAttribute });\n /** Accessible name of the menu. */\n readonly ariaLabel = input<string>();\n\n /** An item was activated. */\n readonly triggered = output<HxMenuItem>();\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly open = signal(false);\n protected readonly origin = signal<Element | null>(null);\n protected readonly fallbackOrigin = document.body;\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly panel = viewChild(HxMenuPanel);\n\n /** Opens the popup at the element of the event, or closes it when it is open. */\n toggle(event: Event): void {\n if (this.open()) this.hide();\n else this.show(event);\n }\n\n show(event: Event): void {\n if (!this.popup() || this.open()) return;\n const target = (event.currentTarget ?? event.target) as Element | null;\n this.origin.set(target);\n this.open.set(true);\n this.shown.emit();\n }\n\n hide(refocus = true): void {\n if (!this.open()) return;\n this.open.set(false);\n this.hidden.emit();\n if (refocus) (this.origin() as HTMLElement | null)?.focus?.();\n }\n\n protected onAttach(): void {\n afterNextRender(() => this.panel()?.focusFirst(), { injector: this.#injector });\n }\n\n protected onTriggered(item: HxMenuItem): void {\n this.triggered.emit(item);\n this.hide();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.hide();\n } else if (event.key === 'Tab') {\n this.hide(false);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.origin()?.contains(event.target as Node)) this.hide(false);\n }\n}\n","import { CdkMenuBar, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HxMenu } from '../menu/menu';\nimport { HxMenuPanel } from '../menu/menu-panel';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * A horizontal menu of `HxMenuItem`s with dropdown submenus, on `@angular/cdk/menu`.\n *\n * ```html\n * <hx-menubar ariaLabel=\"Main\" [model]=\"items\">\n * <a hxMenubarStart routerLink=\"/\">Helix</a>\n * <button hxMenubarEnd hx-button>Sign in</button>\n * </hx-menubar>\n * ```\n *\n * Content marked `hxMenubarStart` / `hxMenubarEnd` sits before and after the items. Below `breakpoint` (px) the\n * items collapse into a button that opens them as a `hx-menu` popup.\n *\n * Keyboard (the WAI-ARIA menubar pattern from the CDK): Left and Right move between the top items, Down (or Enter)\n * opens a submenu and moves into it, Escape closes it and returns to the item, typing jumps by label.\n */\n@Component({\n selector: 'hx-menubar',\n imports: [\n CdkMenuBar,\n CdkMenuItem,\n CdkMenuTrigger,\n NgTemplateOutlet,\n RouterLink,\n HxMenu,\n HxMenuPanel,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menubar', '[class.hx-menubar-collapsed]': 'collapsed()' },\n template: `\n <div class=\"hx-menubar-start\"><ng-content select=\"[hxMenubarStart]\" /></div>\n\n @if (collapsed()) {\n <button\n type=\"button\"\n class=\"hx-menubar-button\"\n aria-haspopup=\"menu\"\n [attr.aria-label]=\"buttonLabel()\"\n (click)=\"menu.toggle($event)\"\n >\n <span class=\"hx-menubar-button-icon\" aria-hidden=\"true\"></span>\n </button>\n <hx-menu #menu popup [model]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"triggered.emit($event)\" />\n } @else {\n <div cdkMenuBar class=\"hx-menubar-list\" [attr.aria-label]=\"ariaLabel() ?? null\">\n <ng-template #content let-item let-submenu=\"submenu\">\n @if (item.icon) {\n <span class=\"hx-menu-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-menu-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"hx-menu-badge\">{{ item.badge }}</span>\n }\n @if (submenu) {\n <span class=\"hx-menubar-submenu-icon\" aria-hidden=\"true\"></span>\n }\n </ng-template>\n\n @for (item of visible(); track $index) {\n @if (item.separator) {\n <div class=\"hx-menubar-separator\" role=\"separator\"></div>\n } @else if (item.items?.length) {\n <button\n type=\"button\"\n class=\"hx-menubar-item\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"sub\"\n [cdkMenuItemDisabled]=\"!!item.disabled\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item, submenu: true }\" />\n </button>\n <ng-template #sub>\n <hx-menu-panel class=\"hx-menubar-submenu\" [items]=\"item.items ?? []\" [groups]=\"false\" [notify]=\"notify\" />\n </ng-template>\n } @else if (item.disabled) {\n <button type=\"button\" class=\"hx-menubar-item\" cdkMenuItem [cdkMenuItemDisabled]=\"true\" [attr.id]=\"item.id ?? null\" [attr.aria-label]=\"item.ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n } @else if (item.routerLink) {\n <a\n class=\"hx-menubar-item\"\n cdkMenuItem\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else if (item.url) {\n <a\n class=\"hx-menubar-item\"\n cdkMenuItem\n [href]=\"item.url\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"hx-menubar-item\"\n cdkMenuItem\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n }\n }\n </div>\n }\n\n <div class=\"hx-menubar-end\"><ng-content select=\"[hxMenubarEnd]\" /></div>\n `,\n})\nexport class HxMenubar {\n readonly model = input<readonly HxMenuItem[]>([]);\n /** Width in px below which the items collapse into a button. */\n readonly breakpoint = input(960, { transform: numberAttribute });\n /** Accessible name of the menubar. */\n readonly ariaLabel = input<string>();\n /** Accessible name of the button shown when collapsed. */\n readonly buttonLabel = input('Menu');\n\n /** An item was activated (after its `command`). */\n readonly triggered = output<HxMenuItem>();\n\n /** Whether the viewport is narrower than `breakpoint`. */\n readonly collapsed = signal(false);\n protected readonly visible = () => this.model().filter((item) => item.visible !== false);\n\n constructor() {\n effect((onCleanup) => {\n if (typeof matchMedia !== 'function') return;\n const query = matchMedia(`(max-width: ${this.breakpoint() - 0.02}px)`);\n const update = () => this.collapsed.set(query.matches);\n update();\n query.addEventListener('change', update);\n onCleanup(() => query.removeEventListener('change', update));\n });\n }\n\n protected readonly notify = (item: HxMenuItem) => this.triggered.emit(item);\n\n protected run(item: HxMenuItem, originalEvent: Event): void {\n item.command?.({ originalEvent, item });\n this.triggered.emit(item);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\n\nexport type HxMessageSeverity = 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast';\nexport type HxMessageVariant = 'filled' | 'outlined' | 'simple';\nexport type HxMessageSize = 'small' | 'medium' | 'large';\n\n/**\n * An inline message next to the content it is about.\n *\n * ```html\n * <hx-message severity=\"error\" closable (close)=\"onClose()\">The card was declined.</hx-message>\n * <hx-message severity=\"info\" variant=\"outlined\" icon=\"pi pi-star\" [life]=\"5000\">Saved</hx-message>\n * ```\n *\n * The message is a live region: `role=\"status\"`, and `role=\"alert\"` for `error`. `closable` adds a close button\n * (`closeLabel` is its name); `life` hides the message after that many milliseconds. Both emit `(close)`.\n */\n@Component({\n selector: 'hx-message',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-message',\n '[class.hx-message-success]': \"severity() === 'success'\",\n '[class.hx-message-info]': \"severity() === 'info'\",\n '[class.hx-message-warn]': \"severity() === 'warn'\",\n '[class.hx-message-error]': \"severity() === 'error'\",\n '[class.hx-message-secondary]': \"severity() === 'secondary'\",\n '[class.hx-message-contrast]': \"severity() === 'contrast'\",\n '[class.hx-message-outlined]': \"variant() === 'outlined'\",\n '[class.hx-message-simple]': \"variant() === 'simple'\",\n '[class.hx-message-sm]': \"size() === 'small'\",\n '[class.hx-message-lg]': \"size() === 'large'\",\n '[attr.role]': \"severity() === 'error' ? 'alert' : 'status'\",\n '[hidden]': '!visible()',\n },\n template: `\n <div class=\"hx-message-content\">\n @if (icon()) {\n <i class=\"hx-message-icon-custom\" [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else {\n <span class=\"hx-message-icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-message-text\"><ng-content /></span>\n @if (closable()) {\n <button type=\"button\" class=\"hx-message-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"dismiss()\">\n <span class=\"hx-message-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n `,\n})\nexport class HxMessage {\n readonly severity = input<HxMessageSeverity>('info');\n readonly variant = input<HxMessageVariant>('filled');\n readonly size = input<HxMessageSize>('medium');\n /** Icon classes (for example `pi pi-star`) instead of the built-in icon of the severity. */\n readonly icon = input('');\n /** Shows a close button. */\n readonly closable = input(false, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n /** Milliseconds until the message hides itself; `0` keeps it. */\n readonly life = input(0, { transform: numberAttribute });\n\n /** The message was closed by the button or by `life`. */\n readonly close = output<void>();\n\n protected readonly visible = signal(true);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n effect((onCleanup) => {\n const life = this.life();\n if (life > 0) {\n const timer = setTimeout(() => untracked(() => this.dismiss()), life);\n onCleanup(() => clearTimeout(timer));\n }\n });\n destroyRef.onDestroy(() => this.visible.set(false));\n }\n\n protected dismiss(): void {\n if (!this.visible()) return;\n this.visible.set(false);\n this.close.emit();\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxMultiSelectSize = 'small' | 'medium' | 'large';\nexport type HxMultiSelectVariant = 'outlined' | 'filled';\nexport type HxMultiSelectDisplay = 'comma' | 'chip';\n\n/**\n * A select for several values: a `combobox` that opens a multi-select listbox in a CDK connected overlay. The panel\n * stays open while the user chooses; Escape and a click outside close it. The value is an array of option values.\n *\n * ```html\n * <label for=\"cities\">Cities</label>\n * <hx-multi-select inputId=\"cities\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\" display=\"chip\"\n * filter showToggleAll [(ngModel)]=\"visited\" />\n * ```\n *\n * `display=\"comma\"` lists the labels, `chip` shows a removable chip per value; beyond `maxSelectedLabels` both show\n * `selectedItemsLabel` (\"3 items selected\"). It works with `ngModel`, reactive forms and signal forms\n * (`[formField]`). Give it a visible `<label for>` (with `inputId`) or an `ariaLabel`.\n */\n@Component({\n selector: 'hx-multi-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, CdkListbox, CdkOption, HxCheckbox],\n templateUrl: './multi-select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxMultiSelect), multi: true },\n ],\n host: {\n class: 'hx-multi-select',\n '[class.hx-multi-select-open]': 'open()',\n '[class.hx-multi-select-filled]': \"variant() === 'filled'\",\n '[class.hx-multi-select-sm]': \"size() === 'small'\",\n '[class.hx-multi-select-lg]': \"size() === 'large'\",\n '[class.hx-multi-select-fluid]': 'fluid()',\n '[class.hx-multi-select-disabled]': 'isDisabled()',\n '[class.hx-multi-select-has-clear]': 'canClear()',\n '[class.hx-multi-select-invalid]': 'invalid()',\n '[class.hx-filled]': 'selected().length > 0',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxMultiSelect<V = unknown> implements ControlValueAccessor, FormValueControl<V[]> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No options');\n readonly size = input<HxMultiSelectSize>('medium');\n readonly variant = input<HxMultiSelectVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** `comma`: the labels in a line, `chip`: a removable chip per value. */\n readonly display = input<HxMultiSelectDisplay>('comma');\n /** More values than this show `selectedItemsLabel` instead of the labels. */\n readonly maxSelectedLabels = input(3, { transform: numberAttribute });\n /** Text for many values; `{0}` is the count. */\n readonly selectedItemsLabel = input('{0} items selected');\n /** A text field above the list that narrows the options by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Search');\n /** A checkbox above the list that selects or clears all (visible) options. */\n readonly showToggleAll = input(false, { transform: booleanAttribute });\n readonly toggleAllLabel = input('Select all');\n /** Shows a button that clears the selection. */\n readonly showClear = input(false, { transform: booleanAttribute });\n /** The `id` of the trigger, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to find the selected options (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<V[]>([]);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly query = signal('');\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-multi-select-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly listbox = viewChild(CdkListbox);\n private readonly filterField = viewChild<ElementRef<HTMLInputElement>>('filterField');\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(\n this.options(),\n this.optionLabel(),\n this.optionValue(),\n this.optionDisabled(),\n ),\n );\n\n protected readonly visibleItems = computed(() => {\n const query = this.query().trim().toLowerCase();\n return query ? this.items().filter((i) => i.label.toLowerCase().includes(query)) : this.items();\n });\n\n protected readonly selectedValues = computed(() => this.value() ?? []);\n\n /** The options of the selected values, in the order of the values. */\n protected readonly selected = computed(() => {\n const same = this.compareWith();\n const items = this.items();\n return this.selectedValues()\n .map((v) => items.find((item) => same(item.value, v)))\n .filter((item): item is HxOption<V> => item !== undefined);\n });\n\n protected readonly commaLabel = computed(() =>\n this.selected()\n .map((i) => i.label)\n .join(', '),\n );\n\n /** The \"n items selected\" text, empty while the labels fit. */\n protected readonly summary = computed(() => {\n const count = this.selected().length;\n return count > this.maxSelectedLabels()\n ? this.selectedItemsLabel().replace('{0}', String(count))\n : '';\n });\n\n protected readonly canClear = computed(\n () => this.showClear() && this.selected().length > 0 && !this.isDisabled(),\n );\n\n readonly #toggleable = computed(() => this.visibleItems().filter((i) => !i.disabled));\n protected readonly allSelected = computed(() => {\n const same = this.compareWith();\n const rows = this.#toggleable();\n return (\n rows.length > 0 && rows.every((r) => this.selectedValues().some((v) => same(v, r.value)))\n );\n });\n\n #onChange: (value: V[]) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: V[] | null): void {\n this.value.set(value ?? []);\n }\n registerOnChange(fn: (value: V[]) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the trigger (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.trigger().nativeElement.focus(options);\n }\n\n protected toggle(): void {\n if (this.open()) this.close();\n else this.show();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.query.set('');\n if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the panel lives in the overlay template: focus the filter, or the list, once it has rendered\n afterNextRender(\n () => {\n const field = this.filterField();\n if (field) field.nativeElement.focus();\n else this.listbox()?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n } else if (event.key === 'Tab') {\n // the list is the last stop of the panel, the first control the first: leaving either closes the panel\n const panel = (event.target as HTMLElement).closest('.hx-multi-select-panel');\n const stops = panel\n ? [...panel.querySelectorAll<HTMLElement>('input, [role=\"listbox\"]')]\n : [];\n const at = stops.indexOf(event.target as HTMLElement);\n if (event.shiftKey ? at <= 0 : at === stops.length - 1) this.close(event.shiftKey);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<V>): void {\n // work from the clicked option, not from the CDK's value list: that one lacks the selected options the filter hides\n const option = event.option;\n if (!option) return;\n const same = this.compareWith();\n const current = this.selectedValues();\n const chosen = current.some((v) => same(v, option.value));\n this.#commit(\n chosen ? current.filter((v) => !same(v, option.value)) : [...current, option.value],\n );\n }\n\n protected toggleAll(): void {\n const same = this.compareWith();\n const rows = this.#toggleable();\n const current = this.selectedValues();\n if (this.allSelected()) {\n this.#commit(current.filter((v) => !rows.some((r) => same(r.value, v))));\n } else {\n this.#commit([\n ...current,\n ...rows.filter((r) => !current.some((v) => same(v, r.value))).map((r) => r.value),\n ]);\n }\n }\n\n protected removeChip(event: Event, item: HxOption<V>): void {\n event.stopPropagation();\n const same = this.compareWith();\n this.#commit(this.selectedValues().filter((v) => !same(v, item.value)));\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.#commit([]);\n this.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (this.open() || (next && this.#host.nativeElement.contains(next))) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n #commit(value: V[]): void {\n this.value.set(value);\n this.#onChange(value);\n }\n}\n","<div\n #trigger\n class=\"hx-multi-select-trigger\"\n role=\"combobox\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"hx-multi-select-label\" [class.hx-multi-select-placeholder]=\"!selected().length\">\n @if (!selected().length) {\n {{ placeholder() }}\n } @else if (summary(); as text) {\n {{ text }}\n } @else if (display() === 'chip') {\n @for (item of selected(); track $index) {\n <span class=\"hx-multi-select-chip\">\n <span>{{ item.label }}</span>\n <button\n type=\"button\"\n class=\"hx-multi-select-chip-remove\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"isDisabled()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"hx-multi-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n </span>\n }\n } @else {\n {{ commaLabel() }}\n }\n </span>\n <span class=\"hx-multi-select-chevron\" aria-hidden=\"true\"></span>\n</div>\n@if (canClear()) {\n <button type=\"button\" class=\"hx-multi-select-clear\" aria-label=\"Clear selection\" (click)=\"clear($event)\">\n <span class=\"hx-multi-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n}\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-multi-select-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n>\n <div class=\"hx-multi-select-panel\">\n @if (filter() || showToggleAll()) {\n <div class=\"hx-multi-select-header\">\n @if (showToggleAll()) {\n <input\n type=\"checkbox\"\n hx-checkbox\n class=\"hx-multi-select-toggle-all\"\n [attr.aria-label]=\"toggleAllLabel()\"\n [checked]=\"allSelected()\"\n (change)=\"toggleAll()\"\n />\n }\n @if (filter()) {\n <input\n #filterField\n type=\"text\"\n class=\"hx-multi-select-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"panelId\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n }\n </div>\n }\n <div\n cdkListbox\n class=\"hx-multi-select-list\"\n [id]=\"panelId\"\n [cdkListboxMultiple]=\"true\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-multi-select-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-multi-select-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-multi-select-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n</ng-template>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * A titled container that can collapse. The `header` input is the title; `[hxPanelHeader]` adds content next to it\n * (icons, buttons) and `[hxPanelFooter]` is the footer.\n *\n * ```html\n * <hx-panel header=\"Filters\" toggleable [(collapsed)]=\"closed\">\n * <button hxPanelHeader hx-button size=\"small\">Reset</button>\n * ...\n * <div hxPanelFooter>3 filters active</div>\n * </hx-panel>\n * ```\n *\n * When `toggleable`, the header carries a `<button>` with `aria-expanded` and `aria-controls`; the content is a\n * region labelled by the title. Expanding and collapsing is animated unless the user prefers reduced motion.\n */\n@Component({\n selector: 'hx-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-panel',\n '[class.hx-panel-toggleable]': 'toggleable()',\n '[class.hx-panel-collapsed]': 'isCollapsed()',\n },\n template: `\n <div class=\"hx-panel-header\">\n <span class=\"hx-panel-title\" [id]=\"titleId\">{{ header() }}</span>\n <div class=\"hx-panel-header-actions\"><ng-content select=\"[hxPanelHeader]\" /></div>\n @if (toggleable()) {\n <button\n type=\"button\"\n class=\"hx-panel-toggle\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-panel-toggle-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <div class=\"hx-panel-collapse\" [attr.inert]=\"isCollapsed() ? '' : null\">\n <div class=\"hx-panel-collapse-inner\">\n <div class=\"hx-panel-content\" role=\"region\" [id]=\"contentId\" [attr.aria-labelledby]=\"titleId\">\n <ng-content />\n </div>\n <div class=\"hx-panel-footer\"><ng-content select=\"[hxPanelFooter]\" /></div>\n </div>\n </div>\n `,\n})\nexport class HxPanel {\n /** The title. */\n readonly header = input('');\n /** The header gets a button that collapses and expands the content. */\n readonly toggleable = input(false, { transform: booleanAttribute });\n /** Whether the content is collapsed (only a `toggleable` panel collapses). */\n readonly collapsed = model(false);\n\n protected readonly titleId = nextId('hx-panel-title');\n protected readonly contentId = nextId('hx-panel-content');\n protected isCollapsed(): boolean {\n return this.toggleable() && this.collapsed();\n }\n\n protected toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxInput, type HxInputSize, type HxInputVariant } from '../input/input';\nimport { nextId } from '../internal/ids';\n\n/**\n * A password field with a button that shows or hides the text. Works with `ngModel`, reactive forms and\n * signal forms (`[formField]`).\n *\n * ```html\n * <label for=\"pw\">Password</label>\n * <hx-password inputId=\"pw\" [(ngModel)]=\"password\" toggleMask fluid />\n * ```\n */\n@Component({\n selector: 'hx-password',\n imports: [HxInput],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxPassword), multi: true },\n ],\n host: {\n class: 'hx-password',\n '[class.hx-password-fluid]': 'fluid()',\n '[class.hx-password-has-toggle]': 'toggleMask()',\n '[class.hx-filled]': \"value() !== ''\",\n },\n template: `\n <input\n #field\n hx-input\n [id]=\"inputId() ?? defaultId\"\n [type]=\"visible() ? 'text' : 'password'\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [fluid]=\"true\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (toggleMask()) {\n <button\n type=\"button\"\n class=\"hx-password-toggle\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"visible() ? hideLabel() : showLabel()\"\n [attr.aria-pressed]=\"visible()\"\n (click)=\"visible.set(!visible())\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n @if (visible()) {\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <path d=\"m1 1 22 22\" />\n } @else {\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n }\n </svg>\n </button>\n }\n `,\n})\nexport class HxPassword implements ControlValueAccessor, FormValueControl<string> {\n readonly placeholder = input('');\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n readonly autocomplete = input('current-password');\n readonly size = input<HxInputSize>('medium');\n readonly variant = input<HxInputVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** Shows the button that reveals the text. */\n readonly toggleMask = input(false, { transform: booleanAttribute });\n readonly showLabel = input('Show password');\n readonly hideLabel = input('Hide password');\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly defaultId = nextId('hx-password');\n protected readonly visible = signal(false);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n\n #onChange: (value: string) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n this.#onChange(value);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { Directive, input } from '@angular/core';\n\nexport type HxRadioSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<input type=\"radio\">` drawn as a Helix radio button (CSS only). Group radios with the same\n * `name` (or a forms API's `formControlName`/`ngModel` name) exactly as with native radios; arrow keys move\n * the selection natively.\n *\n * ```html\n * <label><input type=\"radio\" hx-radio name=\"plan\" value=\"free\" [(ngModel)]=\"plan\" /> Free</label>\n * <label><input type=\"radio\" hx-radio name=\"plan\" value=\"pro\" [(ngModel)]=\"plan\" /> Pro</label>\n * ```\n */\n@Directive({\n selector: 'input[hx-radio]',\n exportAs: 'hx-radio',\n host: {\n class: 'hx-radio',\n '[class.hx-radio-sm]': \"size() === 'small'\",\n '[class.hx-radio-lg]': \"size() === 'large'\",\n },\n})\nexport class HxRadio {\n readonly size = input<HxRadioSize>('medium');\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\n\n/**\n * A star rating: pick 1 to `stars`. It is the radio group pattern: each star is a visually hidden\n * `input type=\"radio\"` labelled \"n stars\", so the arrow keys change the value. With `readonly` it is a plain image\n * with the label \"n of 5 stars\".\n *\n * ```html\n * <hx-rating ariaLabel=\"Quality\" [(ngModel)]=\"score\" />\n * <hx-rating readonly [stars]=\"10\" [value]=\"7\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). The value is `null` until a star is\n * chosen.\n */\n@Component({\n selector: 'hx-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxRating), multi: true }],\n host: {\n class: 'hx-rating',\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\n '[attr.aria-label]': 'groupLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[attr.aria-invalid]': \"invalid() ? 'true' : null\",\n '[class.hx-rating-readonly]': 'readonly()',\n '[class.hx-rating-disabled]': 'isDisabled()',\n '[class.hx-rating-invalid]': 'invalid()',\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n @for (n of items(); track n) {\n @if (readonly()) {\n <span class=\"hx-rating-star\" [class.hx-rating-star-active]=\"n <= current()\"><span class=\"hx-rating-icon\"></span></span>\n } @else {\n <label class=\"hx-rating-star\" [class.hx-rating-star-active]=\"n <= current()\">\n <input\n type=\"radio\"\n class=\"hx-rating-input\"\n [name]=\"groupName\"\n [value]=\"n\"\n [checked]=\"n === value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"n === 1 ? '1 star' : n + ' stars'\"\n (change)=\"select(n)\"\n />\n <span class=\"hx-rating-icon\"></span>\n </label>\n }\n }\n `,\n})\nexport class HxRating implements ControlValueAccessor, FormValueControl<number | null> {\n /** The number of stars. */\n readonly stars = input(5, { transform: numberAttribute });\n /** Shows the value without a way to change it. */\n readonly readonly = input(false, { transform: booleanAttribute });\n /** The name of the group (not used when read only). */\n readonly ariaLabel = input('Rating');\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<number | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly groupName = nextId('hx-rating');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly items = computed(() =>\n Array.from({ length: Math.max(0, Math.floor(this.stars())) }, (_, i) => i + 1),\n );\n protected readonly current = computed(() => this.value() ?? 0);\n protected readonly groupLabel = computed(() =>\n this.readonly() ? `${this.current()} of ${this.stars()} stars` : this.ariaLabel(),\n );\n\n #onChange: (value: number | null) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected select(n: number): void {\n this.value.set(n);\n this.#onChange(n);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { type Accessor, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxSelectButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A choice among a few options shown as a joined group of toggle buttons. Single choice by default,\n * `multiple` for a list of values. The buttons are native buttons with `aria-pressed`.\n *\n * ```html\n * <hx-select-button [options]=\"['Left', 'Center', 'Right']\" [(ngModel)]=\"align\" [allowEmpty]=\"false\" />\n * ```\n */\n@Component({\n selector: 'hx-select-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSelectButton), multi: true },\n ],\n host: {\n class: 'hx-select-button',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[class.hx-select-button-sm]': \"size() === 'small'\",\n '[class.hx-select-button-lg]': \"size() === 'large'\",\n '[class.hx-select-button-fluid]': 'fluid()',\n '[class.hx-select-button-invalid]': 'invalid()',\n '[class.hx-select-button-disabled]': 'isDisabled()',\n },\n template: `\n @for (item of items(); track $index) {\n <button\n type=\"button\"\n class=\"hx-select-button-option\"\n [class.hx-select-button-option-checked]=\"isChecked(item)\"\n [attr.aria-pressed]=\"isChecked(item)\"\n [disabled]=\"isDisabled() || item.disabled\"\n (click)=\"toggle(item)\"\n (blur)=\"onBlur()\"\n >\n <span class=\"hx-select-button-content\">{{ item.label }}</span>\n </button>\n }\n `,\n})\nexport class HxSelectButton implements ControlValueAccessor, FormValueControl<unknown> {\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n /** Several options can be chosen; the value is then an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Whether the chosen option can be switched off again (single choice). */\n readonly allowEmpty = input(true, { transform: booleanAttribute });\n readonly size = input<HxSelectButtonSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxOption[]>(() =>\n resolveOptions(this.options(), this.optionLabel(), this.optionValue(), this.optionDisabled()),\n );\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected isChecked(item: HxOption): boolean {\n const current = this.value();\n return this.multiple()\n ? Array.isArray(current) && current.some((v) => Object.is(v, item.value))\n : Object.is(current, item.value);\n }\n\n protected toggle(item: HxOption): void {\n const checked = this.isChecked(item);\n let next: unknown;\n if (this.multiple()) {\n const current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n next = checked ? current.filter((v) => !Object.is(v, item.value)) : [...current, item.value];\n } else if (checked) {\n if (!this.allowEmpty()) return;\n next = null;\n } else {\n next = item.value;\n }\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type HxSkeletonShape = 'rectangle' | 'circle';\nexport type HxSkeletonAnimation = 'wave' | 'none';\n\n/**\n * A placeholder shaped like the content that is still loading.\n *\n * ```html\n * <hx-skeleton width=\"10rem\" height=\"1rem\" />\n * <hx-skeleton shape=\"circle\" size=\"4rem\" />\n * ```\n *\n * It is hidden from assistive technology (`aria-hidden`), so it says nothing by itself: the container of the loading\n * content announces the state, e.g. `aria-busy=\"true\"` on it, or a visually hidden \"Loading…\" in a live region.\n * The wave stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-skeleton',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-skeleton',\n 'aria-hidden': 'true',\n '[class.hx-skeleton-circle]': \"shape() === 'circle'\",\n '[class.hx-skeleton-wave]': \"animation() === 'wave'\",\n '[style.width]': 'boxWidth()',\n '[style.height]': 'boxHeight()',\n '[style.border-radius]': 'borderRadius() ?? null',\n },\n})\nexport class HxSkeleton {\n readonly shape = input<HxSkeletonShape>('rectangle');\n /** Any CSS length; `100%` by default. */\n readonly width = input('100%');\n /** Any CSS length; `1rem` by default. */\n readonly height = input('1rem');\n /** Width and height at once, e.g. for a circle; wins over `width` and `height`. */\n readonly size = input<string>();\n /** Any CSS radius, replacing the one of the theme (a circle is always round). */\n readonly borderRadius = input<string>();\n readonly animation = input<HxSkeletonAnimation>('wave');\n\n protected readonly boxWidth = computed(() => this.size() ?? this.width());\n protected readonly boxHeight = computed(() => this.size() ?? this.height());\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nexport type HxSliderOrientation = 'horizontal' | 'vertical';\nexport type HxSliderValue = number | readonly [number, number];\n\n/**\n * A number, or with `range` a pair of numbers, chosen on a track. It is built on native\n * `<input type=\"range\">` elements (one, or two for a range), so the keyboard (arrows, Home, End, Page Up/Down)\n * and screen readers work natively; the track and the thumbs are drawn with the Helix tokens.\n *\n * ```html\n * <hx-slider ariaLabel=\"Volume\" [(ngModel)]=\"volume\" />\n * <hx-slider range ariaLabelStart=\"Minimum price\" ariaLabelEnd=\"Maximum price\" [min]=\"0\" [max]=\"500\" [(value)]=\"price\" />\n * <hx-slider orientation=\"vertical\" ariaLabel=\"Gain\" [(value)]=\"gain\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). A range keeps the start thumb at or\n * below the end thumb.\n */\n@Component({\n selector: 'hx-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSlider), multi: true }],\n host: {\n class: 'hx-slider',\n '[class.hx-slider-vertical]': \"orientation() === 'vertical'\",\n '[class.hx-slider-range-mode]': 'range()',\n '[class.hx-slider-invalid]': 'invalid()',\n '[class.hx-slider-disabled]': 'isDisabled()',\n '[style.--hx-slider-start]': \"startPercent() + '%'\",\n '[style.--hx-slider-end]': \"endPercent() + '%'\",\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n <div class=\"hx-slider-track\"><div class=\"hx-slider-fill\"></div></div>\n @if (range()) {\n <input\n type=\"range\"\n class=\"hx-slider-input hx-slider-input-start\"\n [style.z-index]=\"startPercent() > 50 ? 3 : 1\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"start()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabelStart()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 0)\"\n />\n <input\n type=\"range\"\n class=\"hx-slider-input hx-slider-input-end\"\n [style.z-index]=\"2\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"end()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabelEnd()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 1)\"\n />\n } @else {\n <input\n type=\"range\"\n class=\"hx-slider-input\"\n [attr.id]=\"inputId() ?? null\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"end()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 1)\"\n />\n }\n `,\n})\n// `any`: the contract types `min` and `max` like the value, which is a number or a pair here\n// biome-ignore lint/suspicious/noExplicitAny: see above\nexport class HxSlider implements ControlValueAccessor, FormValueControl<any> {\n /** Two thumbs; the value is `[start, end]`. */\n readonly range = input(false, { transform: booleanAttribute });\n /** Lower bound (default 0). */\n readonly min = input<number | undefined>();\n /** Upper bound (default 100). */\n readonly max = input<number | undefined>();\n readonly step = input(1, { transform: numberAttribute });\n readonly orientation = input<HxSliderOrientation>('horizontal');\n /** The `id` of the thumb of a single slider, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelStart = input<string>();\n readonly ariaLabelEnd = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxSliderValue>(0);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The start thumb: the first of a range, the minimum for a single slider (it has no start thumb). */\n protected readonly lower = computed(() => this.min() ?? 0);\n protected readonly upper = computed(() => this.max() ?? 100);\n\n protected readonly start = computed(() => {\n const value = this.value();\n return this.range() && Array.isArray(value) ? value[0] : this.lower();\n });\n protected readonly end = computed(() => {\n const value = this.value();\n if (Array.isArray(value)) return value[this.range() ? 1 : 0];\n return typeof value === 'number' ? value : this.upper();\n });\n\n protected readonly startPercent = computed(() => this.#percent(this.start()));\n protected readonly endPercent = computed(() => this.#percent(this.end()));\n\n #onChange: (value: HxSliderValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxSliderValue | null): void {\n this.value.set(value ?? (this.range() ? [this.lower(), this.upper()] : this.lower()));\n }\n registerOnChange(fn: (value: HxSliderValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n #percent(value: number): number {\n const span = this.upper() - this.lower();\n return span <= 0 ? 0 : Math.min(100, Math.max(0, ((value - this.lower()) / span) * 100));\n }\n\n protected onInput(event: Event, thumb: 0 | 1): void {\n const field = event.target as HTMLInputElement;\n let next = field.valueAsNumber;\n if (this.range()) {\n // the thumbs may touch but not cross; show the clamped value in the field\n next = thumb === 0 ? Math.min(next, this.end()) : Math.max(next, this.start());\n field.value = String(next);\n this.#commit(thumb === 0 ? [next, this.end()] : [this.start(), next]);\n } else {\n this.#commit(next);\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n #commit(next: HxSliderValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport {\n HxButton,\n type HxButtonSeverity,\n type HxButtonSize,\n type HxButtonVariant,\n} from '../button/button';\nimport { HxMenu } from '../menu/menu';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * A default action with a menu of related actions: a button and, joined to it, a button that opens an `hx-menu`.\n *\n * ```html\n * <hx-split-button label=\"Save\" icon=\"pi pi-save\" [model]=\"items\" (click)=\"save()\" />\n * ```\n *\n * `(click)` is the native click of the main button (clicks on the menu button do not reach it); `(triggered)` fires for\n * an item chosen in the menu, after its `command`. The look comes from `severity`, `variant` and `size` as on\n * `hx-button`. The menu button needs a name: `menuButtonLabel` (default \"More actions\").\n */\n@Component({\n selector: 'hx-split-button',\n imports: [HxButton, HxMenu],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-split-button',\n role: 'group',\n '[attr.aria-label]': 'label() || null',\n '[class.hx-split-button-rounded]': 'rounded()',\n '[class.hx-split-button-raised]': 'raised()',\n '[class.hx-split-button-outlined]': \"variant() === 'outlined'\",\n },\n template: `\n <button\n hx-button\n type=\"button\"\n class=\"hx-split-button-main\"\n [variant]=\"variant()\"\n [severity]=\"severity()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n >\n @if (icon()) {\n <span class=\"hx-button-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n {{ label() }}\n </button>\n <button\n hx-button\n iconOnly\n type=\"button\"\n class=\"hx-split-button-menu\"\n aria-haspopup=\"menu\"\n [variant]=\"variant()\"\n [severity]=\"severity()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"menu.open()\"\n [attr.aria-label]=\"menuButtonLabel()\"\n (click)=\"$event.stopPropagation(); menu.toggle($event)\"\n >\n <span class=\"hx-split-button-chevron\" aria-hidden=\"true\"></span>\n </button>\n <hx-menu #menu popup [model]=\"model()\" [ariaLabel]=\"menuButtonLabel()\" (triggered)=\"triggered.emit($event)\" />\n `,\n})\nexport class HxSplitButton {\n /** Text of the main button. */\n readonly label = input<string>();\n /** CSS classes of an icon font for the main button, e.g. `pi pi-save`. */\n readonly icon = input<string>();\n /** The related actions in the menu. */\n readonly model = input<readonly HxMenuItem[]>([]);\n readonly variant = input<HxButtonVariant>('filled');\n readonly severity = input<HxButtonSeverity>('primary');\n readonly size = input<HxButtonSize>('medium');\n readonly rounded = input(false, { transform: booleanAttribute });\n readonly raised = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible name of the button that opens the menu. */\n readonly menuButtonLabel = input('More actions');\n\n /** An item of the menu was activated. */\n readonly triggered = output<HxMenuItem>();\n\n private readonly menu = viewChild.required(HxMenu);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/** Identifies a step and its panel. */\nexport type HxStepValue = string | number;\n\n/** What the template of a lazy step panel receives. */\nexport interface HxStepContentContext {\n /** Makes the step with this value the active one, e.g. `(click)=\"activateCallback(2)\"`. */\n activateCallback: (value: HxStepValue) => void;\n /** The value of the panel. */\n value: HxStepValue;\n}\n\n/**\n * The steps of a process, one panel at a time.\n *\n * ```html\n * <hx-stepper [(value)]=\"step\" linear>\n * <hx-step-list>\n * <hx-step [value]=\"1\">Account</hx-step>\n * <hx-step [value]=\"2\">Address</hx-step>\n * </hx-step-list>\n * <hx-step-panels>\n * <hx-step-panel [value]=\"1\">\n * <ng-template hxStepContent let-activateCallback=\"activateCallback\">\n * <button hx-button (click)=\"activateCallback(2)\">Next</button>\n * </ng-template>\n * </hx-step-panel>\n * <hx-step-panel [value]=\"2\">…</hx-step-panel>\n * </hx-step-panels>\n * </hx-stepper>\n * ```\n *\n * `value` is the `value` of the active step (the first enabled step while it is `null`). The steps before it count\n * as completed. With `linear` the steps after the active one are disabled: the way forward is `activateCallback` (or\n * `next()`), which the app calls once the step is valid; going back is always possible. A panel with an\n * `<ng-template hxStepContent>` is lazy: created when its step becomes active and, without `keepAlive`, destroyed when\n * the step is left. Plain panel content is created up front and only hidden.\n */\n@Component({\n selector: 'hx-stepper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-stepper' },\n template: '<ng-content />',\n})\nexport class HxStepper {\n /** The `value` of the active step. */\n readonly value = model<HxStepValue | null>(null);\n /** Steps after the active one cannot be chosen from their header. */\n readonly linear = input(false, { transform: booleanAttribute });\n /** Keep the content of lazy panels after their step is left. */\n readonly keepAlive = input(false, { transform: booleanAttribute });\n\n readonly id = nextId('hx-stepper');\n /** The steps in the order they were declared. */\n readonly steps = signal<readonly HxStep[]>([]);\n readonly visited = signal<ReadonlySet<HxStepValue>>(new Set());\n /** Index of the active step, -1 while there is none. */\n readonly activeIndex = computed(() => this.steps().findIndex((s) => s.value() === this.value()));\n\n constructor() {\n effect(() => {\n const value = this.value();\n const first = this.steps().find((s) => !s.disabled());\n untracked(() => {\n if (value === null) {\n if (first) this.value.set(first.value());\n } else if (!this.visited().has(value)) {\n this.visited.set(new Set([...this.visited(), value]));\n }\n });\n });\n }\n\n register(step: HxStep): () => void {\n this.steps.update((steps) => [...steps, step]);\n return () => this.steps.update((steps) => steps.filter((s) => s !== step));\n }\n\n stepId(value: HxStepValue): string {\n return `${this.id}-step-${value}`;\n }\n\n panelId(value: HxStepValue): string {\n return `${this.id}-panel-${value}`;\n }\n\n activate(value: HxStepValue): void {\n this.value.set(value);\n }\n\n /** Activates the step after the active one. */\n next(): void {\n const step = this.steps()[this.activeIndex() + 1];\n if (step) this.activate(step.value());\n }\n\n /** Activates the step before the active one. */\n previous(): void {\n const step = this.steps()[this.activeIndex() - 1];\n if (step) this.activate(step.value());\n }\n}\n\n/** The row of step headers. */\n@Component({\n selector: 'hx-step-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-step-list', role: 'list' },\n template: '<ng-content />',\n})\nexport class HxStepList {}\n\n/** The header of one step: a button with the number and the title. */\n@Component({\n selector: 'hx-step',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-step',\n role: 'listitem',\n '[class.hx-step-active]': 'active()',\n '[class.hx-step-completed]': 'completed()',\n '[class.hx-step-disabled]': 'unavailable()',\n '[class.hx-step-last]': 'last()',\n },\n template: `\n <button\n type=\"button\"\n class=\"hx-step-header\"\n [id]=\"stepper.stepId(value())\"\n [disabled]=\"unavailable()\"\n [attr.aria-current]=\"active() ? 'step' : null\"\n [attr.aria-controls]=\"stepper.panelId(value())\"\n (click)=\"stepper.activate(value())\"\n >\n <span class=\"hx-step-number\" aria-hidden=\"true\">\n @if (completed()) {\n <span class=\"hx-step-check\"></span>\n } @else {\n {{ index() + 1 }}\n }\n </span>\n <span class=\"hx-step-title\"><ng-content /></span>\n </button>\n @if (!last()) {\n <span class=\"hx-step-separator\" aria-hidden=\"true\"></span>\n }\n `,\n})\nexport class HxStep {\n protected readonly stepper = inject(HxStepper);\n /** Identifies the step and its panel. */\n readonly value = input.required<HxStepValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly index = computed(() => this.stepper.steps().indexOf(this));\n protected readonly last = computed(() => this.index() === this.stepper.steps().length - 1);\n protected readonly active = computed(() => this.stepper.value() === this.value());\n protected readonly completed = computed(\n () => this.stepper.activeIndex() > this.index() && this.index() >= 0,\n );\n /** Disabled by the app, or ahead of the active step in a linear stepper. */\n protected readonly unavailable = computed(\n () => this.disabled() || (this.stepper.linear() && this.index() > this.stepper.activeIndex()),\n );\n\n constructor() {\n const unregister = this.stepper.register(this);\n inject(DestroyRef).onDestroy(unregister);\n }\n}\n\n/** The container of the panels. */\n@Component({\n selector: 'hx-step-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-step-panels' },\n template: '<ng-content />',\n})\nexport class HxStepPanels {}\n\n/** Marks the lazy content of a panel: `<ng-template hxStepContent let-activateCallback=\"activateCallback\">`. */\n@Directive({ selector: 'ng-template[hxStepContent]' })\nexport class HxStepContent {\n readonly template = inject<TemplateRef<HxStepContentContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _: HxStepContent,\n context: unknown,\n ): context is HxStepContentContext {\n return true;\n }\n}\n\n/** The content of one step. */\n@Component({\n selector: 'hx-step-panel',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-step-panel',\n role: 'region',\n '[id]': 'stepper.panelId(value())',\n '[attr.aria-labelledby]': 'stepper.stepId(value())',\n '[hidden]': '!active()',\n },\n template: `\n @if (lazy(); as lazy) {\n @if (render()) {\n <ng-container [ngTemplateOutlet]=\"lazy.template\" [ngTemplateOutletContext]=\"context()\" />\n }\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxStepPanel {\n protected readonly stepper = inject(HxStepper);\n /** The `value` of the step this panel belongs to. */\n readonly value = input.required<HxStepValue>();\n protected readonly lazy = contentChild(HxStepContent);\n protected readonly context = computed<HxStepContentContext>(() => ({\n activateCallback: (value) => this.stepper.activate(value),\n value: this.value(),\n }));\n\n protected active(): boolean {\n return this.stepper.value() === this.value();\n }\n\n protected render(): boolean {\n return this.active() || (this.stepper.keepAlive() && this.stepper.visited().has(this.value()));\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * A native `<input type=\"checkbox\">` with `role=\"switch\"`, drawn as a Helix toggle switch (CSS only).\n * Use it for a setting that takes effect immediately; label it with the setting's name, not the action.\n *\n * ```html\n * <label><input type=\"checkbox\" hx-switch [(ngModel)]=\"darkMode\" /> Dark mode</label>\n * ```\n */\n@Directive({\n selector: 'input[hx-switch]',\n exportAs: 'hx-switch',\n host: {\n class: 'hx-switch',\n role: 'switch',\n },\n})\nexport class HxSwitch {}\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\nexport type HxTableSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<table>` drawn as a Helix table (CSS only): header, body and footer rows, hover, stripes and gridlines\n * from the `--h-datatable-*` tokens. For small static tables; there is no sorting, paging or selection here: data grids\n * use AG Grid through `helix-ag-grid`.\n *\n * ```html\n * <div class=\"hx-table-scroll\">\n * <table hx-table striped hoverable>\n * <caption>Invoices</caption>\n * <thead><tr><th scope=\"col\">No.</th><th scope=\"col\">Amount</th></tr></thead>\n * <tbody><tr><th scope=\"row\">1001</th><td>€ 120</td></tr></tbody>\n * </table>\n * </div>\n * ```\n *\n * The table keeps its native semantics: nothing is added to the roles. Give it a `<caption>` (it is drawn as the table\n * header), mark header cells with `<th scope=\"col\">` / `<th scope=\"row\">`, and mark a selected row with\n * `aria-selected=\"true\"`, which is also what is styled. Wrap a wide table in `.hx-table-scroll` for horizontal\n * scrolling; with `stickyHeader` and a `max-height` on the wrapper the header stays in view. The wrapper is a scroll\n * container, so give it `tabindex=\"0\"` and a name (`role=\"region\"` with `aria-label`) when it scrolls.\n */\n@Directive({\n selector: 'table[hx-table]',\n host: {\n class: 'hx-table',\n '[class.hx-table-sm]': \"size() === 'small'\",\n '[class.hx-table-lg]': \"size() === 'large'\",\n '[class.hx-table-striped]': 'striped()',\n '[class.hx-table-gridlines]': 'gridlines()',\n '[class.hx-table-hoverable]': 'hoverable()',\n '[class.hx-table-sticky]': 'stickyHeader()',\n },\n})\nexport class HxTable {\n readonly size = input<HxTableSize>('medium');\n /** Alternate rows get a background. */\n readonly striped = input(false, { transform: booleanAttribute });\n /** Borders around every cell. */\n readonly gridlines = input(false, { transform: booleanAttribute });\n /** Rows of the body change colour under the pointer. */\n readonly hoverable = input(false, { transform: booleanAttribute });\n /** The header stays at the top of its scroll container (`.hx-table-scroll` with a `max-height`). */\n readonly stickyHeader = input(false, { transform: booleanAttribute });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n model,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * Tabs with panels, in the WAI-ARIA tabs pattern.\n *\n * ```html\n * <hx-tabs [(value)]=\"tab\">\n * <hx-tab-list>\n * <hx-tab value=\"a\">Profile</hx-tab>\n * <hx-tab value=\"b\">Billing</hx-tab>\n * <hx-tab value=\"c\" disabled>Soon</hx-tab>\n * </hx-tab-list>\n * <hx-tab-panels>\n * <hx-tab-panel value=\"a\">Profile content</hx-tab-panel>\n * <hx-tab-panel value=\"b\"><ng-template hxTabContent>Billing content, created when first shown</ng-template></hx-tab-panel>\n * </hx-tab-panels>\n * </hx-tabs>\n * ```\n *\n * `value` is the `value` of the active tab (the first enabled tab while it is `null`). A panel with an\n * `<ng-template hxTabContent>` is lazy: its content is created when the tab first becomes active and, with\n * `keepAlive`, kept afterwards; without `keepAlive` it is destroyed when the tab is left. Plain panel content is\n * created up front and only hidden.\n *\n * Roving tabindex: Tab enters the active tab, Left/Right (Home/End) move to the previous/next (first/last) enabled tab\n * and activate it. With `scrollable`, buttons at the ends of the list scroll tabs that overflow.\n */\n@Component({\n selector: 'hx-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tabs' },\n template: '<ng-content />',\n})\nexport class HxTabs {\n /** The `value` of the active tab. */\n readonly value = model<string | null>(null);\n /** Buttons at the ends of the tab list scroll tabs that overflow. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n /** Keep the content of lazy panels after their tab is left. */\n readonly keepAlive = input(false, { transform: booleanAttribute });\n\n readonly id = nextId('hx-tabs');\n /** The first tab registered that is enabled, to start with. */\n readonly #first = signal<string | null>(null);\n readonly visited = signal<ReadonlySet<string>>(new Set());\n\n constructor() {\n effect(() => {\n const value = this.value();\n const first = this.#first();\n untracked(() => {\n if (value === null) {\n if (first !== null) this.value.set(first);\n } else if (!this.visited().has(value)) {\n this.visited.set(new Set([...this.visited(), value]));\n }\n });\n });\n }\n\n registerTab(value: string, disabled: boolean): void {\n if (!disabled && this.#first() === null) this.#first.set(value);\n }\n\n tabId(value: string): string {\n return `${this.id}-tab-${value}`;\n }\n\n panelId(value: string): string {\n return `${this.id}-panel-${value}`;\n }\n\n activate(value: string): void {\n this.value.set(value);\n }\n}\n\n/** The row of tabs. Handles the arrow keys and, with `scrollable`, the scroll buttons. */\n@Component({\n selector: 'hx-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tab-list', '[class.hx-tab-list-scrollable]': 'tabs.scrollable()' },\n template: `\n @if (tabs.scrollable() && overflowing()) {\n <button type=\"button\" class=\"hx-tab-nav hx-tab-nav-prev\" tabindex=\"-1\" aria-label=\"Scroll tabs left\" (click)=\"scroll(-1)\">\n <span class=\"hx-tab-nav-icon-prev\" aria-hidden=\"true\"></span>\n </button>\n }\n <div #scroller class=\"hx-tab-scroller\" (scroll)=\"measure()\">\n <div class=\"hx-tab-tabs\" role=\"tablist\" (keydown)=\"onKeydown($event)\"><ng-content /></div>\n </div>\n @if (tabs.scrollable() && overflowing()) {\n <button type=\"button\" class=\"hx-tab-nav hx-tab-nav-next\" tabindex=\"-1\" aria-label=\"Scroll tabs right\" (click)=\"scroll(1)\">\n <span class=\"hx-tab-nav-icon-next\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxTabList {\n protected readonly tabs = inject(HxTabs);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n private readonly scroller = viewChild<ElementRef<HTMLElement>>('scroller');\n protected readonly overflowing = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this.measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(this.#host.nativeElement);\n this.#destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n protected measure(): void {\n const el = this.scroller()?.nativeElement;\n if (el) this.overflowing.set(el.scrollWidth > el.clientWidth + 1);\n }\n\n protected scroll(direction: 1 | -1): void {\n const el = this.scroller()?.nativeElement;\n el?.scrollBy?.({ left: direction * el.clientWidth * 0.6, behavior: 'smooth' });\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n const tabs = [\n ...this.#host.nativeElement.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([aria-disabled=\"true\"])',\n ),\n ];\n const at = tabs.indexOf(event.target as HTMLElement);\n if (at < 0) return;\n event.preventDefault();\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? tabs.length - 1\n : (at + (event.key === 'ArrowRight' ? 1 : -1) + tabs.length) % tabs.length;\n tabs[next].focus();\n tabs[next].click(); // automatic activation\n }\n}\n\n/** One tab. */\n@Component({\n selector: 'hx-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tab',\n role: 'tab',\n '[id]': 'tabs.tabId(value())',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'tabs.panelId(value())',\n '[attr.aria-disabled]': \"disabled() ? 'true' : null\",\n '[attr.tabindex]': 'selected() && !disabled() ? 0 : -1',\n '[class.hx-tab-active]': 'selected()',\n '[class.hx-tab-disabled]': 'disabled()',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onClick()',\n '(keydown.space)': 'onSpace($event)',\n },\n template: '<ng-content />',\n})\nexport class HxTab {\n protected readonly tabs = inject(HxTabs);\n /** Identifies the tab and its panel. */\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected selected(): boolean {\n return this.tabs.value() === this.value();\n }\n\n constructor() {\n effect(() => this.tabs.registerTab(this.value(), this.disabled()));\n }\n\n protected onClick(): void {\n if (!this.disabled()) this.tabs.activate(this.value());\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.onClick();\n }\n}\n\n/** The container of the panels. */\n@Component({\n selector: 'hx-tab-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tab-panels' },\n template: '<ng-content />',\n})\nexport class HxTabPanels {}\n\n/** Marks the lazy content of a panel: `<ng-template hxTabContent>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTabContent]' })\nexport class HxTabContent {\n readonly template = inject(TemplateRef);\n}\n\n/** The content of one tab. */\n@Component({\n selector: 'hx-tab-panel',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tab-panel',\n role: 'tabpanel',\n tabindex: '0',\n '[id]': 'tabs.panelId(value())',\n '[attr.aria-labelledby]': 'tabs.tabId(value())',\n '[hidden]': '!active()',\n },\n template: `\n @if (lazy(); as lazy) {\n @if (render()) {\n <ng-container [ngTemplateOutlet]=\"lazy.template\" />\n }\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxTabPanel {\n protected readonly tabs = inject(HxTabs);\n /** The `value` of the tab this panel belongs to. */\n readonly value = input.required<string>();\n protected readonly lazy = contentChild(HxTabContent);\n\n protected active(): boolean {\n return this.tabs.value() === this.value();\n }\n\n protected render(): boolean {\n return this.active() || (this.tabs.keepAlive() && this.tabs.visited().has(this.value()));\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxTagSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'contrast';\n\n/**\n * A label for a category or a status. The text is the `value` or the projected content.\n *\n * ```html\n * <hx-tag value=\"New\" severity=\"success\" />\n * <hx-tag severity=\"warn\" rounded icon=\"pi pi-exclamation-triangle\">Pending</hx-tag>\n * ```\n *\n * A tag is plain text and the icon is decorative (`aria-hidden`), so the colour must not be the only carrier of the\n * meaning: the text says it too.\n */\n@Component({\n selector: 'hx-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tag',\n '[class.hx-tag-rounded]': 'rounded()',\n '[class.hx-tag-secondary]': \"severity() === 'secondary'\",\n '[class.hx-tag-success]': \"severity() === 'success'\",\n '[class.hx-tag-info]': \"severity() === 'info'\",\n '[class.hx-tag-warn]': \"severity() === 'warn'\",\n '[class.hx-tag-danger]': \"severity() === 'danger'\",\n '[class.hx-tag-contrast]': \"severity() === 'contrast'\",\n },\n template: `\n @if (icon()) {\n <span class=\"hx-tag-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-tag-label\">{{ value() }}<ng-content /></span>\n `,\n})\nexport class HxTag {\n /** The text; content can be projected instead. */\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxTagSeverity>('primary');\n /** A pill instead of the small radius. */\n readonly rounded = input(false, { transform: booleanAttribute });\n /** CSS classes of an icon font, e.g. `pi pi-check`. */\n readonly icon = input<string>();\n}\n","// The surface scales the theme service offers: the neutral scales of Tailwind and three Helix extras. Each is the\n// 12 steps of `--h-surface-0 … --h-surface-950`; the scale replaces the surface of both colour schemes.\nexport const HX_SURFACES = {\n slate: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n gray: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n neutral: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n stone: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n soho: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d',\n },\n viva: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315',\n },\n ocean: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920',\n },\n} as const;\n\nexport type HxSurface = keyof typeof HX_SURFACES;\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n type EnvironmentProviders,\n effect,\n Injectable,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n signal,\n} from '@angular/core';\nimport { HX_SURFACES, type HxSurface } from './surfaces';\n\n/** The colour scales an app can choose as its primary colour; `noir` uses the surface scale (black and white). */\nexport const HX_PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'noir',\n] as const;\nexport type HxPrimaryColor = (typeof HX_PRIMARY_COLORS)[number];\nexport const HX_SURFACE_NAMES = Object.keys(HX_SURFACES) as HxSurface[];\nexport type { HxSurface };\n\nconst STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const;\nconst SURFACE_STEPS = [0, ...STEPS] as const;\n\nexport interface HxThemeOptions {\n /**\n * How dark mode is switched on: a class on `<html>` (`.app-dark`, the default, also the selector of\n * `tokens.css`) or an attribute (`[data-theme=\"dark\"]`).\n */\n darkSelector?: string;\n /**\n * `false`: the host app owns the dark class/attribute (e.g. from `prefers-color-scheme`), HxTheme never writes it\n * to `<html>`. `dark()` still follows `setDark()` for the colour overrides. Default `true`.\n */\n manageDark?: boolean;\n /** Where the choice is remembered (localStorage). `null` (the default) remembers nothing. */\n storageKey?: string | null;\n /** Dark mode when nothing is remembered; by default the system setting (`prefers-color-scheme`). */\n dark?: boolean;\n /** The primary colour when nothing is remembered; `null` is the one of the preset (indigo). */\n primary?: HxPrimaryColor | null;\n /** The surface scale when nothing is remembered; `null` is the one of the preset. */\n surface?: HxSurface | null;\n /**\n * Cross-fades the page when dark mode is switched, with the View Transitions API where the browser has it\n * (the first value at start-up is applied at once). Default `false`.\n */\n viewTransition?: boolean;\n}\n\n/** The scales of the surfaces, by name: for swatches in a colour chooser (`HX_SURFACES.zinc[500]`). */\nexport { HX_SURFACES };\n\nexport const HX_THEME_OPTIONS = new InjectionToken<HxThemeOptions>('HX_THEME_OPTIONS', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\ninterface Saved {\n dark?: boolean;\n primary?: HxPrimaryColor | null;\n surface?: HxSurface | null;\n}\n\n/** A class (`.app-dark`) or an attribute (`[data-theme=\"dark\"]`) selector, split into what the DOM needs. */\nexport function parseDarkSelector(selector: string): {\n css: string;\n apply: (el: Element, on: boolean) => void;\n} {\n const cls = /^\\.([a-zA-Z][\\w-]*)$/.exec(selector);\n if (cls) {\n return { css: selector, apply: (el, on) => el.classList.toggle(cls[1], on) };\n }\n const attr = /^\\[([\\w-]+)(?:=[\"']?([^\"'\\]]+)[\"']?)?\\]$/.exec(selector);\n if (attr) {\n const [, name, value = ''] = attr;\n return {\n css: selector,\n apply: (el, on) => (on ? el.setAttribute(name, value) : el.removeAttribute(name)),\n };\n }\n throw new Error(\n `HxTheme darkSelector \"${selector}\": use a class (\".app-dark\") or an attribute (\"[data-theme=dark]\")`,\n );\n}\n\nconst scale = (name: string) =>\n STEPS.map((step) => `--h-primary-${step}:var(--h-${name}-${step});`).join('');\n\n/** The primary colour: its scale, and for `noir` the scheme-dependent roles that are no scale step. */\nfunction primaryCss(primary: HxPrimaryColor, dark: string): string {\n if (primary !== 'noir') return `:root:root{${scale(primary)}}`;\n const light =\n `${STEPS.map((step) => `--h-primary-${step}:var(--h-surface-${step});`).join('')}` +\n '--h-primary-color:var(--h-primary-950);--h-primary-contrast-color:#ffffff;' +\n '--h-primary-hover-color:var(--h-primary-800);--h-primary-active-color:var(--h-primary-700);' +\n '--h-highlight-background:var(--h-primary-950);--h-highlight-focus-background:var(--h-primary-700);' +\n '--h-highlight-color:#ffffff;--h-highlight-focus-color:#ffffff;';\n const night =\n '--h-primary-color:var(--h-primary-50);--h-primary-contrast-color:var(--h-primary-950);' +\n '--h-primary-hover-color:var(--h-primary-200);--h-primary-active-color:var(--h-primary-300);' +\n '--h-highlight-background:var(--h-primary-50);--h-highlight-focus-background:var(--h-primary-300);' +\n '--h-highlight-color:var(--h-primary-950);--h-highlight-focus-color:var(--h-primary-950);';\n return `:root:root{${light}}:root:root${dark}{${night}}`;\n}\n\n/** The surface scale, the same in both colour schemes (as the configurator of the shell always did). */\nfunction surfaceCss(surface: HxSurface, dark: string): string {\n const palette = HX_SURFACES[surface] as Record<number, string>;\n const body = SURFACE_STEPS.map((step) => `--h-surface-${step}:${palette[step]};`).join('');\n return `:root:root{${body}}:root:root${dark}{${body}}`;\n}\n\n/**\n * Switches dark mode, the primary colour and the surface scale while the app runs, with CSS custom properties\n * only: no styling engine, no rebuild of the tokens. `tokens.css` defines every `--h-*` token for the Helix look;\n * this service overrides the ones that carry the colour choice, in a style sheet of its own that wins over\n * `tokens.css` in both colour schemes.\n *\n * ```ts\n * // app.config.ts\n * provideHxTheme({ storageKey: 'my-app-theme' })\n *\n * // anywhere\n * readonly theme = inject(HxTheme);\n * theme.toggleDark();\n * theme.setPrimary('emerald');\n * theme.setSurface('zinc');\n * ```\n *\n * Nothing touches the DOM on the server; `css()` is the style text, for an app that renders it itself.\n */\n@Injectable({ providedIn: 'root' })\nexport class HxTheme {\n readonly #doc = inject(DOCUMENT);\n readonly #browser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #options = inject(HX_THEME_OPTIONS);\n readonly #darkSelector = parseDarkSelector(this.#options.darkSelector ?? '.app-dark');\n readonly #saved = this.#load();\n\n readonly #dark = signal(this.#saved.dark ?? this.#options.dark ?? this.#systemDark());\n readonly #primary = signal<HxPrimaryColor | null>(\n this.#saved.primary ?? this.#options.primary ?? null,\n );\n readonly #surface = signal<HxSurface | null>(\n this.#saved.surface ?? this.#options.surface ?? null,\n );\n\n readonly dark = this.#dark.asReadonly();\n readonly primary = this.#primary.asReadonly();\n readonly surface = this.#surface.asReadonly();\n\n /** The overrides for the chosen primary colour and surface (empty while both are the preset's own). */\n readonly css = computed(() => {\n const dark = this.#darkSelector.css;\n const primary = this.#primary();\n const surface = this.#surface();\n return `${surface ? surfaceCss(surface, dark) : ''}${primary ? primaryCss(primary, dark) : ''}`;\n });\n\n #darkApplied = false;\n #write: ((css: string) => void) | null = null;\n #remove: (() => void) | null = null;\n\n constructor() {\n effect(() => {\n const dark = this.#dark();\n if (!this.#browser || this.#options.manageDark === false) return;\n const root = this.#doc.documentElement;\n const doc = this.#doc as Document & { startViewTransition?: (update: () => void) => unknown };\n const apply = () => this.#darkSelector.apply(root, dark);\n // the first value is the start-up state: nothing to cross-fade from\n if (this.#darkApplied && this.#options.viewTransition && doc.startViewTransition) {\n doc.startViewTransition(apply);\n } else {\n apply();\n }\n this.#darkApplied = true;\n });\n effect(() => {\n const css = this.css();\n if (this.#browser) this.#writeSheet(css);\n });\n effect(() =>\n this.#save({ dark: this.#dark(), primary: this.#primary(), surface: this.#surface() }),\n );\n // an instance that is not the root one (provided on a component) takes its overrides with it\n inject(DestroyRef).onDestroy(() => this.#remove?.());\n }\n\n setDark(dark: boolean): void {\n this.#dark.set(dark);\n }\n\n toggleDark(): void {\n this.#dark.update((dark) => !dark);\n }\n\n /** `null` goes back to the primary colour of the preset. */\n setPrimary(primary: HxPrimaryColor | null): void {\n if (primary !== null && !HX_PRIMARY_COLORS.includes(primary))\n throw new Error(`unknown primary colour \"${primary}\"`);\n this.#primary.set(primary);\n }\n\n /** `null` goes back to the surface scale of the preset. */\n setSurface(surface: HxSurface | null): void {\n if (surface !== null && !(surface in HX_SURFACES))\n throw new Error(`unknown surface \"${surface}\"`);\n this.#surface.set(surface);\n }\n\n #systemDark(): boolean {\n const view = this.#doc.defaultView;\n return this.#browser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\n }\n\n #load(): Saved {\n const key = this.#options.storageKey;\n if (!this.#browser || !key) return {};\n try {\n const value = JSON.parse(\n this.#doc.defaultView?.localStorage.getItem(key) ?? 'null',\n ) as Saved | null;\n return value && typeof value === 'object' ? value : {};\n } catch {\n return {}; // blocked or damaged storage: start from the defaults\n }\n }\n\n #save(state: Saved): void {\n const key = this.#options.storageKey;\n if (!this.#browser || !key) return;\n try {\n this.#doc.defaultView?.localStorage.setItem(key, JSON.stringify(state));\n } catch {\n // storage full or blocked: the choice just does not survive a reload\n }\n }\n\n /** One style sheet of the service: a constructed one where the browser has them, else a `<style>`. */\n #writeSheet(css: string): void {\n if (!this.#write) {\n const doc = this.#doc;\n const view = doc.defaultView as (Window & { CSSStyleSheet?: typeof CSSStyleSheet }) | null;\n if (\n view?.CSSStyleSheet &&\n 'adoptedStyleSheets' in doc &&\n 'replaceSync' in view.CSSStyleSheet.prototype\n ) {\n const sheet = new view.CSSStyleSheet();\n doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, sheet];\n this.#write = (text) => sheet.replaceSync(text);\n this.#remove = () => {\n doc.adoptedStyleSheets = doc.adoptedStyleSheets.filter((s) => s !== sheet);\n };\n } else {\n const style = doc.createElement('style');\n style.setAttribute('data-hx-theme', '');\n doc.head.appendChild(style);\n this.#write = (text) => {\n style.textContent = text;\n };\n this.#remove = () => style.remove();\n }\n }\n this.#write(css);\n }\n}\n\n/** Provides the theme service with its options and creates it at start-up, so the saved choice applies at once. */\nexport function provideHxTheme(options: HxThemeOptions = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: HX_THEME_OPTIONS, useValue: options },\n provideEnvironmentInitializer(() => {\n inject(HxTheme);\n }),\n ]);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n Directive,\n inject,\n input,\n TemplateRef,\n} from '@angular/core';\n\nexport type HxTimelineAlign = 'left' | 'right' | 'alternate';\nexport type HxTimelineLayout = 'vertical' | 'horizontal';\n\n/** What the templates of a timeline receive: the event (`let-event`) and its index (`let-index=\"index\"`). */\nexport interface HxTimelineContext<T = unknown> {\n $implicit: T;\n index: number;\n}\n\n/** The content of an event: `<ng-template hxTimelineContent let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineContent]' })\nexport class HxTimelineContent {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/** The text on the other side of the line: `<ng-template hxTimelineOpposite let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineOpposite]' })\nexport class HxTimelineOpposite {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/** Replaces the dot on the line: `<ng-template hxTimelineMarker let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineMarker]' })\nexport class HxTimelineMarker {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/**\n * Events along a line.\n *\n * ```html\n * <hx-timeline [value]=\"events\" align=\"alternate\">\n * <ng-template hxTimelineContent let-event>{{ event.status }}</ng-template>\n * <ng-template hxTimelineOpposite let-event>{{ event.date }}</ng-template>\n * </hx-timeline>\n * ```\n *\n * `align` (vertical): `left` puts the content right of the line and the opposite text left of it, `right` the other\n * way round, `alternate` switches with every event. Horizontal: `left` puts the content below the line, `right`\n * above it, `alternate` switches. It is an ordered list; markers are decorative (`aria-hidden`), so put whatever\n * must be read (a date, a status) in the content or opposite templates.\n */\n@Component({\n selector: 'hx-timeline',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-timeline',\n '[class.hx-timeline-vertical]': \"layout() === 'vertical'\",\n '[class.hx-timeline-horizontal]': \"layout() === 'horizontal'\",\n },\n template: `\n <ol class=\"hx-timeline-events\">\n @for (event of value(); track $index; let i = $index; let last = $last) {\n <li class=\"hx-timeline-event\" [class.hx-timeline-event-reversed]=\"reversed(i)\">\n <div class=\"hx-timeline-event-opposite\">\n @if (opposite(); as opposite) {\n <ng-container [ngTemplateOutlet]=\"opposite.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n }\n </div>\n <div class=\"hx-timeline-event-separator\" aria-hidden=\"true\">\n @if (marker(); as marker) {\n <div class=\"hx-timeline-event-marker-custom\">\n <ng-container [ngTemplateOutlet]=\"marker.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n </div>\n } @else {\n <div class=\"hx-timeline-event-marker\"></div>\n }\n @if (!last) {\n <div class=\"hx-timeline-event-connector\"></div>\n }\n </div>\n <div class=\"hx-timeline-event-content\">\n @if (content(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n }\n </div>\n </li>\n }\n </ol>\n `,\n})\nexport class HxTimeline {\n /** The events; any objects, handed to the templates. */\n readonly value = input<readonly unknown[]>([]);\n readonly align = input<HxTimelineAlign>('left');\n readonly layout = input<HxTimelineLayout>('vertical');\n\n protected readonly content = contentChild(HxTimelineContent);\n protected readonly opposite = contentChild(HxTimelineOpposite);\n protected readonly marker = contentChild(HxTimelineMarker);\n\n protected reversed(index: number): boolean {\n const align = this.align();\n return align === 'right' || (align === 'alternate' && index % 2 === 1);\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type HxToastSeverity = 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast';\n\n/** What to show: the arguments of `HxMessageService.add`. */\nexport interface HxToastMessageInput {\n severity?: HxToastSeverity;\n summary?: string;\n detail?: string;\n /** Milliseconds until the toast goes away (default 3000). */\n life?: number;\n /** Stays until the user closes it. */\n sticky?: boolean;\n /** Shows a close button (default `true`). */\n closable?: boolean;\n /** Only a `<hx-toast key=\"…\">` with the same key shows it. */\n key?: string;\n}\n\nexport interface HxToastMessage extends HxToastMessageInput {\n readonly id: number;\n}\n\n/**\n * Sends short messages to the `<hx-toast>` components of the app.\n *\n * ```ts\n * readonly messages = inject(HxMessageService);\n * this.messages.add({ severity: 'success', summary: 'Saved', detail: 'The order was saved.' });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class HxMessageService {\n #nextId = 1;\n readonly #messages = signal<readonly HxToastMessage[]>([]);\n\n /** The messages that are showing. */\n readonly messages = this.#messages.asReadonly();\n\n /** Shows a message and returns its id. */\n add(message: HxToastMessageInput): number {\n const id = this.#nextId++;\n this.#messages.update((all) => [...all, { ...message, id }]);\n return id;\n }\n\n addAll(messages: readonly HxToastMessageInput[]): number[] {\n return messages.map((m) => this.add(m));\n }\n\n /** Removes one message. */\n remove(id: number): void {\n this.#messages.update((all) => all.filter((m) => m.id !== id));\n }\n\n /** Removes all messages, or only those sent with `key`. */\n clear(key?: string): void {\n this.#messages.update((all) => (key === undefined ? [] : all.filter((m) => m.key !== key)));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n type OnInit,\n} from '@angular/core';\nimport { HxMessageService, type HxToastMessage } from './message-service';\n\nexport type HxToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'center'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/** One message: pauses its timer while the pointer or the focus is on it. */\n@Component({\n selector: 'hx-toast-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-toast-item',\n '[class.hx-toast-info]': \"severity() === 'info'\",\n '[class.hx-toast-success]': \"severity() === 'success'\",\n '[class.hx-toast-warn]': \"severity() === 'warn'\",\n '[class.hx-toast-error]': \"severity() === 'error'\",\n '[class.hx-toast-secondary]': \"severity() === 'secondary'\",\n '[class.hx-toast-contrast]': \"severity() === 'contrast'\",\n '[attr.role]': \"severity() === 'warn' || severity() === 'error' ? 'alert' : 'status'\",\n '[attr.aria-live]': \"severity() === 'warn' || severity() === 'error' ? 'assertive' : 'polite'\",\n 'aria-atomic': 'true',\n '(mouseenter)': 'pause()',\n '(mouseleave)': 'resume()',\n '(focusin)': 'pause()',\n '(focusout)': 'resume()',\n },\n template: `\n <div class=\"hx-toast-content\">\n <span class=\"hx-toast-icon\" aria-hidden=\"true\"></span>\n <div class=\"hx-toast-text\">\n @if (message().summary) {\n <span class=\"hx-toast-summary\">{{ message().summary }}</span>\n }\n @if (message().detail) {\n <div class=\"hx-toast-detail\">{{ message().detail }}</div>\n }\n </div>\n @if (message().closable !== false) {\n <button type=\"button\" class=\"hx-toast-close\" aria-label=\"Close\" (click)=\"close()\">\n <span class=\"hx-toast-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n `,\n})\nexport class HxToastItem implements OnInit {\n readonly message = input.required<HxToastMessage>();\n readonly #service = inject(HxMessageService);\n readonly #destroyRef = inject(DestroyRef);\n protected readonly severity = computed(() => this.message().severity ?? 'info');\n #timer: ReturnType<typeof setTimeout> | undefined;\n #remaining = 0;\n #started = 0;\n\n constructor() {\n this.#destroyRef.onDestroy(() => clearTimeout(this.#timer));\n }\n\n ngOnInit(): void {\n const { sticky, life } = this.message();\n if (sticky) return;\n this.#remaining = life ?? 3000;\n this.#start();\n }\n\n #start(): void {\n clearTimeout(this.#timer);\n if (this.message().sticky) return;\n this.#started = Date.now();\n this.#timer = setTimeout(() => this.close(), this.#remaining);\n }\n\n protected pause(): void {\n if (this.#timer === undefined) return;\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#remaining = Math.max(500, this.#remaining - (Date.now() - this.#started));\n }\n\n protected resume(): void {\n if (this.message().sticky || this.#timer !== undefined) return;\n this.#start();\n }\n\n protected close(): void {\n clearTimeout(this.#timer);\n this.#service.remove(this.message().id);\n }\n}\n\n/**\n * Shows the messages sent through `HxMessageService`. Put one `<hx-toast>` in the root component.\n *\n * ```html\n * <hx-toast position=\"top-right\" />\n * <hx-toast key=\"form\" position=\"bottom-center\" />\n * ```\n *\n * A toast with a `key` shows only messages sent with that key; one without shows those sent without. Each message is\n * a live region (`polite` for info and success, `assertive` for warn and error). The timer of a message pauses\n * while the pointer or the focus is on it, so it is not removed while someone reads it or reaches for its close button.\n */\n@Component({\n selector: 'hx-toast',\n imports: [HxToastItem],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-toast',\n '[class.hx-toast-top-left]': \"position() === 'top-left'\",\n '[class.hx-toast-top-center]': \"position() === 'top-center'\",\n '[class.hx-toast-top-right]': \"position() === 'top-right'\",\n '[class.hx-toast-center]': \"position() === 'center'\",\n '[class.hx-toast-bottom-left]': \"position() === 'bottom-left'\",\n '[class.hx-toast-bottom-center]': \"position() === 'bottom-center'\",\n '[class.hx-toast-bottom-right]': \"position() === 'bottom-right'\",\n },\n template: `\n @for (message of shown(); track message.id) {\n <hx-toast-item [message]=\"message\" />\n }\n `,\n})\nexport class HxToast {\n readonly #service = inject(HxMessageService);\n /** Only messages sent with this key are shown here. */\n readonly key = input<string>();\n readonly position = input<HxToastPosition>('top-right');\n protected readonly shown = computed(() =>\n this.#service.messages().filter((m) => m.key === this.key()),\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nexport type HxToggleButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A two-state button with its own labels for on and off. It is a native `<button>` with `aria-pressed`, and\n * works with `ngModel`, reactive forms and signal forms (`[formField]`) like `hx-select`.\n *\n * ```html\n * <hx-toggle-button onLabel=\"Subscribed\" offLabel=\"Subscribe\" onIcon=\"pi pi-check\" [(ngModel)]=\"subscribed\" />\n * <hx-toggle-button ariaLabel=\"Bold\" onIcon=\"pi pi-bold\" offIcon=\"pi pi-bold\" onLabel=\"\" offLabel=\"\" [(value)]=\"bold\" />\n * ```\n *\n * With only icons, give `ariaLabel`. An `ariaLabel` is also the stable name when the labels change with the\n * state: `aria-pressed` already tells the state.\n */\n@Component({\n selector: 'hx-toggle-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxToggleButton), multi: true },\n ],\n host: {\n class: 'hx-toggle-button',\n '[class.hx-toggle-button-sm]': \"size() === 'small'\",\n '[class.hx-toggle-button-lg]': \"size() === 'large'\",\n '[class.hx-toggle-button-fluid]': 'fluid()',\n '[class.hx-toggle-button-checked]': 'value()',\n '[class.hx-toggle-button-invalid]': 'invalid()',\n '[class.hx-toggle-button-disabled]': 'isDisabled()',\n },\n template: `\n <button\n type=\"button\"\n class=\"hx-toggle-button-control\"\n [attr.id]=\"inputId() ?? null\"\n [attr.aria-pressed]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (blur)=\"onBlur()\"\n >\n <span class=\"hx-toggle-button-content\">\n @if (icon(); as icon) {\n <i class=\"hx-toggle-button-icon\" [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n @if (label(); as label) {\n <span class=\"hx-toggle-button-label\">{{ label }}</span>\n }\n </span>\n </button>\n `,\n})\nexport class HxToggleButton implements ControlValueAccessor, FormValueControl<boolean> {\n readonly onLabel = input('Yes');\n readonly offLabel = input('No');\n /** Icon classes (for example `pi pi-check`) shown while on or off. */\n readonly onIcon = input('');\n readonly offIcon = input('');\n readonly size = input<HxToggleButtonSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The `id` of the button, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly label = computed(() => (this.value() ? this.onLabel() : this.offLabel()));\n protected readonly icon = computed(() => (this.value() ? this.onIcon() : this.offIcon()));\n\n #onChange: (value: boolean) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.value.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected toggle(): void {\n const next = !this.value();\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * A bar that groups actions in a start, a center and an end area. It wraps on small screens.\n *\n * ```html\n * <hx-toolbar>\n * <button hxToolbarStart hx-button>New</button>\n * <span hxToolbarCenter>3 selected</span>\n * <button hxToolbarEnd hx-button>Export</button>\n * </hx-toolbar>\n * ```\n *\n * It is a plain group with no `role=\"toolbar\"`: that role promises one tab stop and arrow-key navigation, which\n * this component does not do, so every control keeps its own tab stop.\n */\n@Component({\n selector: 'hx-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-toolbar' },\n template: `\n <div class=\"hx-toolbar-start\"><ng-content select=\"[hxToolbarStart]\" /></div>\n <div class=\"hx-toolbar-center\"><ng-content select=\"[hxToolbarCenter]\" /></div>\n <div class=\"hx-toolbar-end\"><ng-content select=\"[hxToolbarEnd]\" /></div>\n `,\n})\nexport class HxToolbar {}\n","import { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\nexport type HxTooltipPosition = 'top' | 'right' | 'bottom' | 'left';\nexport type HxTooltipEvent = 'hover' | 'focus' | 'both';\n\n/** The bubble. Created by the directive in a CDK overlay. */\n@Component({\n selector: 'hx-tooltip-bubble',\n template: '{{ text() }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tooltip', role: 'tooltip', '[id]': 'id' },\n})\nexport class HxTooltipBubble {\n readonly text = signal('');\n id = '';\n}\n\nconst POSITIONS = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },\n} as const;\n\n/** Where to flip to when the preferred side does not fit. */\nconst OPPOSITE: Record<HxTooltipPosition, HxTooltipPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n};\n\n/**\n * A short text that explains an element, shown on hover and/or keyboard focus (CDK overlay, `role=\"tooltip\"`,\n * `aria-describedby` on the host). Escape closes it. It is a hint, not a place for essential information.\n *\n * ```html\n * <button hx-button iconOnly aria-label=\"Add\" hx-tooltip=\"Add item\" hxTooltipPosition=\"right\">+</button>\n * ```\n */\n@Directive({\n selector: '[hx-tooltip]',\n host: {\n '[attr.aria-describedby]': 'shown() ? bubbleId : null',\n '(mouseenter)': 'onEnter(\"hover\")',\n '(mouseleave)': 'onLeave(\"hover\")',\n '(focusin)': 'onEnter(\"focus\")',\n '(focusout)': 'onLeave(\"focus\")',\n '(keydown.escape)': 'hide()',\n '(click)': 'hide()',\n },\n})\nexport class HxTooltip {\n readonly #overlay = inject(Overlay);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The text. Empty or null shows nothing. */\n readonly text = input<string | null | undefined>('', { alias: 'hx-tooltip' });\n readonly position = input<HxTooltipPosition>('top', { alias: 'hxTooltipPosition' });\n readonly event = input<HxTooltipEvent>('both', { alias: 'hxTooltipEvent' });\n readonly disabled = input(false, { alias: 'hxTooltipDisabled' });\n /** Milliseconds before it appears. */\n readonly showDelay = input(0, { alias: 'hxTooltipShowDelay' });\n\n protected readonly bubbleId = nextId('hx-tooltip');\n protected readonly shown = signal(false);\n #ref: OverlayRef | null = null;\n #bubble: HxTooltipBubble | null = null;\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.dispose());\n // keep a visible bubble in sync with the inputs, and drop it when it has nothing to say\n effect(() => {\n const text = this.text();\n if (this.disabled() || !text) this.hide();\n else if (this.#bubble) this.#bubble.text.set(text);\n this.position();\n this.#ref?.updatePositionStrategy(this.#strategy());\n });\n }\n\n protected onEnter(source: 'hover' | 'focus'): void {\n const event = this.event();\n if (event !== 'both' && event !== source) return;\n this.show();\n }\n\n protected onLeave(source: 'hover' | 'focus'): void {\n const event = this.event();\n if (event !== 'both' && event !== source) return;\n this.hide();\n }\n\n #strategy() {\n const preferred = this.position();\n const margin = 4;\n const offset = (p: HxTooltipPosition) =>\n p === 'top'\n ? { offsetY: -margin }\n : p === 'bottom'\n ? { offsetY: margin }\n : p === 'left'\n ? { offsetX: -margin }\n : { offsetX: margin };\n return this.#overlay\n .position()\n .flexibleConnectedTo(this.#host)\n .withPositions(\n [preferred, OPPOSITE[preferred]].map((p) => ({ ...POSITIONS[p], ...offset(p) })),\n )\n .withPush(true);\n }\n\n show(): void {\n const text = this.text();\n if (this.disabled() || !text || this.#ref) return;\n clearTimeout(this.#timer);\n const delay = this.showDelay();\n if (delay > 0) this.#timer = setTimeout(() => this.#create(text), delay);\n else this.#create(text);\n }\n\n #create(text: string): void {\n if (this.#ref) return;\n this.#ref = this.#overlay.create({\n positionStrategy: this.#strategy(),\n scrollStrategy: this.#overlay.scrollStrategies.close(),\n panelClass: 'hx-tooltip-overlay',\n });\n const bubble = this.#ref.attach(new ComponentPortal(HxTooltipBubble));\n bubble.instance.id = this.bubbleId;\n bubble.instance.text.set(text);\n this.#bubble = bubble.instance;\n this.shown.set(true);\n }\n\n hide(): void {\n clearTimeout(this.#timer);\n this.dispose();\n }\n\n private dispose(): void {\n clearTimeout(this.#timer);\n this.#ref?.dispose();\n this.#ref = null;\n this.#bubble = null;\n this.shown.set(false);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\n\n/** One node of the tree. Keys must be unique in the whole tree. */\nexport interface HxTreeNode<T = unknown> {\n key: string;\n label: string;\n /** CSS classes of an icon font, e.g. `pi pi-folder`. */\n icon?: string;\n children?: HxTreeNode<T>[];\n /**\n * `true`: no toggle. `false`: has a toggle even without children (children are loaded when it is expanded, see\n * `nodeExpand`). By default a node is a leaf when it has no children.\n */\n leaf?: boolean;\n /** Starts expanded. */\n expanded?: boolean;\n /** Shows a spinner instead of the toggle, e.g. while the children load. */\n loading?: boolean;\n disabled?: boolean;\n /** Anything the app wants to read back in templates and events. */\n data?: T;\n}\n\nexport type HxTreeSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\nexport type HxTreeFilterMode = 'lenient' | 'strict';\n\n/** `selection` of a tree: a key (single), keys (multiple, checkbox) or `null`. */\nexport type HxTreeSelection = string | readonly string[] | null;\n\n/** What a `nodeExpand` / `nodeCollapse` event carries. */\nexport interface HxTreeNodeEvent<T = unknown> {\n node: HxTreeNode<T>;\n}\n\n/** What the node template receives. */\nexport interface HxTreeNodeContext<T = unknown> {\n $implicit: HxTreeNode<T>;\n selected: boolean;\n expanded: boolean;\n level: number;\n}\n\n/** Replaces the label of a node: `<ng-template hxTreeNode let-node>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTreeNode]' })\nexport class HxTreeNodeTemplate {\n readonly template = inject<TemplateRef<HxTreeNodeContext>>(TemplateRef);\n}\n\ninterface TreeEntry {\n node: HxTreeNode;\n parent: string | null;\n}\n\ninterface ViewNode {\n node: HxTreeNode;\n children: ViewNode[];\n leaf: boolean;\n /** Filtering opens a node whose descendants match. */\n forceOpen: boolean;\n}\n\n/**\n * Hierarchical data with expand, collapse, selection, filter and lazy children, in the WAI-ARIA tree view pattern.\n *\n * ```html\n * <hx-tree [value]=\"nodes\" selectionMode=\"single\" [(selection)]=\"selected\" ariaLabel=\"Files\" />\n * <hx-tree [value]=\"nodes\" selectionMode=\"checkbox\" [(selection)]=\"checked\" filter />\n * ```\n *\n * `selection` holds node keys: one key (or `null`) with `single`, an array with `multiple` and `checkbox`. In\n * `checkbox` mode checking a node checks everything below it, and a parent is checked when all its children are and\n * shown as mixed when only some are.\n *\n * Lazy children: give the node `leaf: false`; `(nodeExpand)` fires when it is expanded, the app sets `loading` and\n * then puts the children into a new `value`.\n *\n * Keyboard: Tab enters the tree once; Up/Down move, Right expands or goes to the first child, Left collapses or goes\n * to the parent, Home/End jump, typing jumps by label, Enter or Space selects (checks).\n */\n@Component({\n selector: 'hx-tree',\n imports: [NgTemplateOutlet, HxInput, HxCheckbox],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tree' },\n template: `\n @if (filter()) {\n <input\n hx-input\n type=\"search\"\n class=\"hx-tree-filter\"\n [placeholder]=\"filterPlaceholder()\"\n [attr.aria-label]=\"filterLabel()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n }\n <ul\n class=\"hx-tree-list\"\n role=\"tree\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n (keydown)=\"onKeydown($event)\"\n (focusin)=\"onFocusIn($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"level\" [ngTemplateOutletContext]=\"{ $implicit: view(), depth: 1 }\" />\n </ul>\n @if (filtering() && view().length === 0) {\n <div class=\"hx-tree-empty\" role=\"status\">{{ emptyMessage() }}</div>\n }\n\n <ng-template #level let-items let-depth=\"depth\">\n @for (item of items; track item.node.key; let i = $index) {\n <li\n class=\"hx-tree-node\"\n role=\"treeitem\"\n [attr.data-key]=\"item.node.key\"\n [attr.aria-level]=\"depth\"\n [attr.aria-setsize]=\"items.length\"\n [attr.aria-posinset]=\"i + 1\"\n [attr.aria-expanded]=\"item.leaf ? null : isOpen(item)\"\n [attr.aria-selected]=\"mode() === 'single' || mode() === 'multiple' ? isSelected(item.node.key) : null\"\n [attr.aria-checked]=\"mode() === 'checkbox' ? checkState(item.node.key) : null\"\n [attr.aria-disabled]=\"item.node.disabled ? 'true' : null\"\n [attr.tabindex]=\"item.node.key === tabKey() ? 0 : -1\"\n >\n <div\n class=\"hx-tree-node-content\"\n [class.hx-tree-node-selected]=\"mode() !== 'checkbox' && isSelected(item.node.key)\"\n [class.hx-tree-node-disabled]=\"item.node.disabled\"\n (click)=\"onClick(item, $event)\"\n >\n <span class=\"hx-tree-node-toggle\" [class.hx-tree-node-toggle-leaf]=\"item.leaf\" aria-hidden=\"true\" (click)=\"onToggleClick(item, $event)\">\n @if (item.node.loading) {\n <span class=\"hx-tree-loading-icon\"></span>\n } @else if (!item.leaf) {\n <span class=\"hx-tree-toggle-icon\" [class.hx-tree-toggle-icon-open]=\"isOpen(item)\"></span>\n }\n </span>\n @if (mode() === 'checkbox') {\n <input\n hx-checkbox\n type=\"checkbox\"\n class=\"hx-tree-node-checkbox\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [checked]=\"checkState(item.node.key) === 'true'\"\n [indeterminate]=\"checkState(item.node.key) === 'mixed'\"\n [disabled]=\"!!item.node.disabled\"\n />\n }\n @if (template(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: item.node, selected: isSelected(item.node.key), expanded: isOpen(item), level: depth }\"\n />\n } @else {\n @if (item.node.icon) {\n <span class=\"hx-tree-node-icon\" [class]=\"item.node.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-tree-node-label\">{{ item.node.label }}</span>\n }\n </div>\n @if (!item.leaf && isOpen(item) && item.children.length) {\n <ul class=\"hx-tree-group\" role=\"group\">\n <ng-container [ngTemplateOutlet]=\"level\" [ngTemplateOutletContext]=\"{ $implicit: item.children, depth: depth + 1 }\" />\n </ul>\n }\n </li>\n }\n </ng-template>\n `,\n})\nexport class HxTree {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The root nodes. Pass a new array (or new nodes) to change the tree; the tree never mutates it. */\n readonly value = input<readonly HxTreeNode[]>([]);\n readonly selectionMode = input<HxTreeSelectionMode>('none');\n /** Keys of the selected (checked) nodes: a key with `single`, an array otherwise. */\n readonly selection = model<HxTreeSelection>(null);\n /** Shows a text field above the tree that filters it by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n /** `lenient`: a matching node shows all its children; `strict`: only matching nodes and their ancestors. */\n readonly filterMode = input<HxTreeFilterMode>('lenient');\n readonly filterPlaceholder = input('');\n readonly filterLabel = input('Filter');\n readonly emptyMessage = input('No results found');\n /** Accessible name of the tree. */\n readonly ariaLabel = input<string>();\n\n /** A node was expanded; load its children here when it is lazy. */\n readonly nodeExpand = output<HxTreeNodeEvent>();\n readonly nodeCollapse = output<HxTreeNodeEvent>();\n\n protected readonly template = contentChild(HxTreeNodeTemplate);\n protected readonly query = signal('');\n protected readonly mode = computed(() => this.selectionMode());\n protected readonly multiple = computed(\n () => this.mode() === 'multiple' || this.mode() === 'checkbox',\n );\n protected readonly filtering = computed(() => this.filter() && this.query().trim() !== '');\n\n /** Keys of the expanded nodes. */\n readonly #expanded = signal<ReadonlySet<string>>(new Set());\n readonly #focused = signal<string | null>(null);\n\n readonly #index = computed(() => {\n const map = new Map<string, TreeEntry>();\n const walk = (nodes: readonly HxTreeNode[], parent: string | null) => {\n for (const node of nodes) {\n map.set(node.key, { node, parent });\n if (node.children) walk(node.children, node.key);\n }\n };\n walk(this.value(), null);\n return map;\n });\n\n readonly #selected = computed<ReadonlySet<string>>(() => {\n const selection = this.selection();\n if (selection === null || selection === undefined) return new Set();\n return new Set(typeof selection === 'string' ? [selection] : selection);\n });\n\n protected readonly view = computed(() => {\n const filtering = this.filtering();\n const query = this.query().trim().toLowerCase();\n const strict = this.filterMode() === 'strict';\n const build = (nodes: readonly HxTreeNode[], shown: boolean): ViewNode[] => {\n const out: ViewNode[] = [];\n for (const node of nodes) {\n const matches = !filtering || node.label.toLowerCase().includes(query);\n const children = node.children\n ? build(node.children, !strict && filtering && (shown || matches))\n : [];\n const included = !filtering || matches || shown || children.length > 0;\n if (!included) continue;\n out.push({\n node,\n children,\n leaf: node.leaf ?? !node.children?.length,\n forceOpen: filtering && children.length > 0 && !shown,\n });\n }\n return out;\n };\n return build(this.value(), false);\n });\n\n /** The tree item that is in the tab order: the focused one while it is visible, else the first. */\n protected readonly tabKey = computed(() => {\n const visible = this.#visibleKeys();\n const focused = this.#focused();\n if (focused !== null && visible.includes(focused)) return focused;\n const selected = visible.find((key) => this.#selected().has(key));\n return selected ?? visible[0] ?? null;\n });\n\n readonly #visibleKeys = computed(() => {\n const keys: string[] = [];\n const walk = (items: readonly ViewNode[]) => {\n for (const item of items) {\n keys.push(item.node.key);\n if (!item.leaf && this.isOpen(item)) walk(item.children);\n }\n };\n walk(this.view());\n return keys;\n });\n\n /** Keys that have been in a `value` already, so `expanded` only applies to nodes the first time they appear. */\n readonly #seen = new Set<string>();\n #typed = '';\n #typedTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n // nodes that ask to start expanded; a node the user collapsed stays collapsed when the value is replaced\n effect(() => {\n const nodes = this.value();\n untracked(() => {\n const open = new Set(this.#expanded());\n const walk = (list: readonly HxTreeNode[]) => {\n for (const node of list) {\n if (node.expanded && !this.#seen.has(node.key)) open.add(node.key);\n this.#seen.add(node.key);\n if (node.children) walk(node.children);\n }\n };\n walk(nodes);\n this.#expanded.set(open);\n });\n });\n }\n\n isOpen(item: ViewNode): boolean {\n return item.forceOpen || this.#expanded().has(item.node.key);\n }\n\n isSelected(key: string): boolean {\n return this.#selected().has(key);\n }\n\n /** `'true'`, `'false'` or `'mixed'` (some descendants checked) for `aria-checked`. */\n protected checkState(key: string): 'true' | 'false' | 'mixed' {\n if (this.#selected().has(key)) return 'true';\n const entry = this.#index().get(key);\n const some = (node: HxTreeNode): boolean =>\n !!node.children?.some((child) => this.#selected().has(child.key) || some(child));\n return entry && some(entry.node) ? 'mixed' : 'false';\n }\n\n expand(key: string): void {\n const entry = this.#index().get(key);\n if (!entry || this.#expanded().has(key)) return;\n this.#expanded.set(new Set([...this.#expanded(), key]));\n this.nodeExpand.emit({ node: entry.node });\n }\n\n collapse(key: string): void {\n const entry = this.#index().get(key);\n if (!entry || !this.#expanded().has(key)) return;\n const open = new Set(this.#expanded());\n open.delete(key);\n this.#expanded.set(open);\n this.nodeCollapse.emit({ node: entry.node });\n }\n\n toggle(key: string): void {\n if (this.#expanded().has(key)) this.collapse(key);\n else this.expand(key);\n }\n\n expandAll(): void {\n for (const [key, { node }] of this.#index()) if (node.children?.length) this.expand(key);\n }\n\n collapseAll(): void {\n for (const key of [...this.#expanded()]) this.collapse(key);\n }\n\n protected onToggleClick(item: ViewNode, event: Event): void {\n if (item.leaf || item.node.disabled) return;\n event.stopPropagation();\n this.toggle(item.node.key);\n }\n\n protected onClick(item: ViewNode, event: MouseEvent): void {\n if (item.node.disabled) return;\n this.#focusItem(item.node.key, false);\n this.select(item.node.key, event.ctrlKey || event.metaKey);\n }\n\n /** Selects, or toggles, the node according to the selection mode. */\n select(key: string, deselect = false): void {\n const mode = this.mode();\n if (mode === 'none') return;\n const selected = this.#selected();\n if (mode === 'single') {\n this.selection.set(selected.has(key) && deselect ? null : key);\n } else if (mode === 'multiple') {\n const next = new Set(selected);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n this.selection.set([...next]);\n } else {\n this.selection.set([...this.#toggleChecked(key, selected)]);\n }\n }\n\n #toggleChecked(key: string, selected: ReadonlySet<string>): Set<string> {\n const index = this.#index();\n const next = new Set(selected);\n const subtree = (node: HxTreeNode, out: string[] = []): string[] => {\n out.push(node.key);\n for (const child of node.children ?? []) subtree(child, out);\n return out;\n };\n const entry = index.get(key);\n if (!entry) return next;\n const keys = subtree(entry.node).filter((k) => !index.get(k)?.node.disabled);\n const checking = !next.has(key);\n for (const k of keys) {\n if (checking) next.add(k);\n else next.delete(k);\n }\n // parents are checked exactly when all their children are\n for (let parent = entry.parent; parent !== null; parent = index.get(parent)?.parent ?? null) {\n const node = index.get(parent)?.node;\n if (!node?.children?.length) break;\n if (node.children.every((child) => next.has(child.key))) next.add(parent);\n else next.delete(parent);\n }\n return next;\n }\n\n protected onFocusIn(event: FocusEvent): void {\n const key = (event.target as HTMLElement)\n .closest<HTMLElement>('[role=treeitem]')\n ?.getAttribute('data-key');\n if (key) this.#focused.set(key);\n }\n\n #items(): HTMLElement[] {\n return [...this.#host.nativeElement.querySelectorAll<HTMLElement>('[role=treeitem]')];\n }\n\n #focusItem(key: string, move = true): void {\n this.#focused.set(key);\n if (!move) return;\n const el = this.#items().find((item) => item.getAttribute('data-key') === key);\n el?.focus();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const target = (event.target as HTMLElement).closest<HTMLElement>('[role=treeitem]');\n if (!target || event.ctrlKey || event.metaKey || event.altKey) return;\n const key = target.getAttribute('data-key') as string;\n const items = this.#items();\n const at = items.indexOf(target);\n const entry = this.#index().get(key);\n const goto = (el: HTMLElement | undefined) => {\n if (!el) return;\n event.preventDefault();\n el.focus();\n };\n const open = target.getAttribute('aria-expanded');\n switch (event.key) {\n case 'ArrowDown':\n goto(items[at + 1]);\n return;\n case 'ArrowUp':\n goto(items[at - 1]);\n return;\n case 'Home':\n goto(items[0]);\n return;\n case 'End':\n goto(items[items.length - 1]);\n return;\n case 'ArrowRight':\n if (open === 'false') {\n event.preventDefault();\n this.expand(key);\n } else if (open === 'true') {\n goto(\n target.querySelector<HTMLElement>(':scope > [role=group] > [role=treeitem]') ??\n undefined,\n );\n }\n return;\n case 'ArrowLeft':\n if (open === 'true') {\n event.preventDefault();\n this.collapse(key);\n } else if (entry?.parent != null) {\n goto(items.find((item) => item.getAttribute('data-key') === entry.parent));\n }\n return;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!entry?.node.disabled) this.select(key, false);\n return;\n default:\n if (event.key.length === 1) this.#typeahead(event.key, items, at, goto);\n }\n }\n\n #typeahead(\n char: string,\n items: HTMLElement[],\n at: number,\n goto: (el: HTMLElement | undefined) => void,\n ): void {\n clearTimeout(this.#typedTimer);\n this.#typed += char.toLowerCase();\n this.#typedTimer = setTimeout(() => {\n this.#typed = '';\n }, 500);\n const label = (el: HTMLElement) =>\n el\n .querySelector(':scope > .hx-tree-node-content .hx-tree-node-label')\n ?.textContent?.trim()\n .toLowerCase() ?? '';\n const ordered = [...items.slice(at + 1), ...items.slice(0, at + 1)];\n // typing the same letter again cycles through the items that start with it\n const search = /^(.)\\1*$/.test(this.#typed) ? this.#typed[0] : this.#typed;\n goto(ordered.find((el) => label(el).startsWith(search)));\n }\n}\n"],"mappings":"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;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAA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"}
|
|
1
|
+
{"version":3,"file":"gravionlabs-helix-ui.mjs","names":[],"sources":["../../../projects/ui/src/lib/internal/ids.ts","../../../projects/ui/src/lib/accordion/accordion.ts","../../../projects/ui/src/lib/internal/options.ts","../../../projects/ui/src/lib/auto-complete/auto-complete.ts","../../../projects/ui/src/lib/auto-complete/auto-complete.html","../../../projects/ui/src/lib/avatar/avatar.ts","../../../projects/ui/src/lib/badge/badge.ts","../../../projects/ui/src/lib/breadcrumb/breadcrumb.ts","../../../projects/ui/src/lib/breadcrumb/breadcrumb.html","../../../projects/ui/src/lib/button/button.ts","../../../projects/ui/src/lib/button-group/button-group.ts","../../../projects/ui/src/lib/card/card.ts","../../../projects/ui/src/lib/carousel/carousel.ts","../../../projects/ui/src/lib/carousel/carousel.html","../../../projects/ui/src/lib/checkbox/checkbox.ts","../../../projects/ui/src/lib/chip/chip.ts","../../../projects/ui/src/lib/dialog/dialog.ts","../../../projects/ui/src/lib/popover/popover.ts","../../../projects/ui/src/lib/confirm/confirm.ts","../../../projects/ui/src/lib/input/input.ts","../../../projects/ui/src/lib/select/select.ts","../../../projects/ui/src/lib/select/select.html","../../../projects/ui/src/lib/paginator/paginator.ts","../../../projects/ui/src/lib/paginator/paginator.html","../../../projects/ui/src/lib/progress/progress.ts","../../../projects/ui/src/lib/data-table/data-table.ts","../../../projects/ui/src/lib/data-table/data-table.html","../../../projects/ui/src/lib/internal/dates.ts","../../../projects/ui/src/lib/date-range-presets/date-range-presets.ts","../../../projects/ui/src/lib/internal/calendar/calendar-helpers.ts","../../../projects/ui/src/lib/internal/calendar/calendar.ts","../../../projects/ui/src/lib/internal/calendar/calendar.html","../../../projects/ui/src/lib/internal/field/date-text.ts","../../../projects/ui/src/lib/internal/range-presets/range-presets.ts","../../../projects/ui/src/lib/date-picker/date-picker.ts","../../../projects/ui/src/lib/date-picker/date-picker.html","../../../projects/ui/src/lib/internal/date-math/date-math.ts","../../../projects/ui/src/lib/internal/quick-select/quick-select.ts","../../../projects/ui/src/lib/date-range-quick-select/date-range-quick-select.ts","../../../projects/ui/src/lib/date-range-quick-select/date-range-quick-select.html","../../../projects/ui/src/lib/internal/time-row/time-row-helpers.ts","../../../projects/ui/src/lib/internal/time-row/time-row.ts","../../../projects/ui/src/lib/internal/time-row/time-row.html","../../../projects/ui/src/lib/date-time-picker/date-time-picker.ts","../../../projects/ui/src/lib/date-time-picker/date-time-picker.html","../../../projects/ui/src/lib/time-picker/time-picker.ts","../../../projects/ui/src/lib/time-picker/time-picker.html","../../../projects/ui/src/lib/date-time-range-picker/date-time-range-picker.ts","../../../projects/ui/src/lib/date-time-range-picker/date-time-range-picker.html","../../../projects/ui/src/lib/divider/divider.ts","../../../projects/ui/src/lib/drawer/drawer.ts","../../../projects/ui/src/lib/fieldset/fieldset.ts","../../../projects/ui/src/lib/file-upload/file-upload.ts","../../../projects/ui/src/lib/float-label/float-label.ts","../../../projects/ui/src/lib/galleria/galleria.ts","../../../projects/ui/src/lib/galleria/galleria.html","../../../projects/ui/src/lib/icon-field/icon-field.ts","../../../projects/ui/src/lib/image/image.ts","../../../projects/ui/src/lib/image/image.html","../../../projects/ui/src/lib/input-group/input-group.ts","../../../projects/ui/src/lib/input-number/input-number.ts","../../../projects/ui/src/lib/input-number/input-number.html","../../../projects/ui/src/lib/listbox/listbox.ts","../../../projects/ui/src/lib/menu/menu-panel.ts","../../../projects/ui/src/lib/menu/menu.ts","../../../projects/ui/src/lib/menubar/menubar.ts","../../../projects/ui/src/lib/message/message.ts","../../../projects/ui/src/lib/multi-select/multi-select.ts","../../../projects/ui/src/lib/multi-select/multi-select.html","../../../projects/ui/src/lib/panel/panel.ts","../../../projects/ui/src/lib/password/password.ts","../../../projects/ui/src/lib/radio/radio.ts","../../../projects/ui/src/lib/rating/rating.ts","../../../projects/ui/src/lib/select-button/select-button.ts","../../../projects/ui/src/lib/skeleton/skeleton.ts","../../../projects/ui/src/lib/slider/slider.ts","../../../projects/ui/src/lib/split-button/split-button.ts","../../../projects/ui/src/lib/stepper/stepper.ts","../../../projects/ui/src/lib/switch/switch.ts","../../../projects/ui/src/lib/table/table.ts","../../../projects/ui/src/lib/tabs/tabs.ts","../../../projects/ui/src/lib/tag/tag.ts","../../../projects/ui/src/lib/theme/surfaces.ts","../../../projects/ui/src/lib/theme/theme.ts","../../../projects/ui/src/lib/timeline/timeline.ts","../../../projects/ui/src/lib/toast/message-service.ts","../../../projects/ui/src/lib/toast/toast.ts","../../../projects/ui/src/lib/toggle-button/toggle-button.ts","../../../projects/ui/src/lib/toolbar/toolbar.ts","../../../projects/ui/src/lib/tooltip/tooltip.ts","../../../projects/ui/src/lib/tree/tree.ts"],"sourcesContent":["let counter = 0;\n\n/** A unique id for generated DOM ids (`aria-controls`, `aria-describedby`, `for`): `hx-select-panel-3`. */\nexport function nextId(prefix: string): string {\n return `${prefix}-${counter++}`;\n}\n","import { CdkAccordion, CdkAccordionItem } from '@angular/cdk/accordion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { nextId } from '../internal/ids';\n\nexport type HxAccordionValue = string | string[] | null;\n\n/**\n * Stacked panels of which one (or with `multiple` several) is open, on `@angular/cdk/accordion`.\n *\n * ```html\n * <hx-accordion [(value)]=\"open\" [headingLevel]=\"3\">\n * <hx-accordion-panel value=\"a\">\n * <hx-accordion-header>First</hx-accordion-header>\n * <hx-accordion-content>Content of the first panel</hx-accordion-content>\n * </hx-accordion-panel>\n * <hx-accordion-panel value=\"b\" disabled>…</hx-accordion-panel>\n * </hx-accordion>\n * ```\n *\n * `value` is the `value` of the open panel (`string | null`), or an array with `multiple`. The WAI-ARIA accordion\n * pattern: each header is a button inside a heading of `headingLevel`, with `aria-expanded` and `aria-controls`; the\n * content is a `region` labelled by its header. Arrow Down/Up, Home and End move between the headers.\n */\n@Component({\n selector: 'hx-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [{ directive: CdkAccordion, inputs: ['multi: multiple'] }],\n host: {\n class: 'hx-accordion',\n '(keydown)': 'onKeydown($event)',\n },\n template: '<ng-content />',\n})\nexport class HxAccordion {\n /** The `value` of the open panel, or the values of the open panels with `multiple`. */\n readonly value = model<HxAccordionValue>(null);\n /** The level of the headings around the header buttons. */\n readonly headingLevel = input(3, { transform: numberAttribute });\n readonly #cdk = inject(CdkAccordion, { self: true });\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The values that are open, as a list. */\n readonly open = computed(() => {\n const value = this.value();\n return Array.isArray(value) ? value : value === null ? [] : [value];\n });\n\n /** Whether the panels open independently. */\n isMultiple(): boolean {\n return this.#cdk.multi;\n }\n\n /** Called by a panel when the user opened or closed it. */\n setOpen(panelValue: string, open: boolean): void {\n const current = untracked(() => this.open());\n if (this.#cdk.multi) {\n const has = current.includes(panelValue);\n if (open === has) return;\n this.value.set(open ? [...current, panelValue] : current.filter((v) => v !== panelValue));\n } else if (open) {\n if (current[0] !== panelValue) this.value.set(panelValue);\n } else if (current.includes(panelValue)) {\n this.value.set(null);\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n const target = event.target as HTMLElement;\n if (!keys.includes(event.key) || !target.classList.contains('hx-accordion-trigger')) return;\n const headers = [\n ...this.#host.nativeElement.querySelectorAll<HTMLButtonElement>(\n '.hx-accordion-trigger:not(:disabled)',\n ),\n ];\n const at = headers.indexOf(target as HTMLButtonElement);\n if (at < 0) return;\n event.preventDefault();\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? headers.length - 1\n : (at + (event.key === 'ArrowDown' ? 1 : -1) + headers.length) % headers.length;\n headers[next].focus();\n }\n}\n\n/** One panel of an accordion: a header and its content. */\n@Component({\n selector: 'hx-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [CdkAccordionItem],\n host: {\n class: 'hx-accordion-panel',\n '[class.hx-accordion-panel-open]': 'expanded()',\n '[class.hx-accordion-panel-disabled]': 'disabled()',\n },\n template: '<ng-content />',\n})\nexport class HxAccordionPanel {\n /** Identifies the panel in the accordion's `value`. */\n readonly value = input.required<string>();\n /** The header cannot be toggled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Whether the panel is open, as a signal for the header and the content. */\n readonly expanded = signal(false);\n protected readonly item = inject(CdkAccordionItem, { self: true });\n readonly accordion = inject(HxAccordion);\n readonly headerId = nextId('hx-accordion-header');\n readonly contentId = nextId('hx-accordion-content');\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n untracked(() => {\n this.item.disabled = disabled;\n });\n });\n // the accordion's value drives the panel\n effect(() => {\n const open = this.accordion.open().includes(this.value());\n untracked(() => {\n if (this.item.expanded !== open) this.item.expanded = open;\n });\n });\n // and the user's toggles drive the accordion's value\n this.item.expandedChange.pipe(takeUntilDestroyed()).subscribe((expanded) => {\n this.expanded.set(expanded);\n this.accordion.setOpen(this.value(), expanded);\n });\n }\n\n toggle(): void {\n this.item.toggle();\n }\n}\n\n/** The header of a panel: a button inside a heading. */\n@Component({\n selector: 'hx-accordion-header',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-accordion-header' },\n template: `\n <ng-template #button>\n <button\n type=\"button\"\n class=\"hx-accordion-trigger\"\n [id]=\"panel.headerId\"\n [attr.aria-expanded]=\"panel.expanded()\"\n [attr.aria-controls]=\"panel.contentId\"\n [disabled]=\"panel.disabled()\"\n (click)=\"panel.toggle()\"\n >\n <span class=\"hx-accordion-title\"><ng-content /></span>\n <span class=\"hx-accordion-icon\" aria-hidden=\"true\"></span>\n </button>\n </ng-template>\n @switch (level()) {\n @case (1) { <h1 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h1> }\n @case (2) { <h2 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h2> }\n @case (3) { <h3 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h3> }\n @case (4) { <h4 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h4> }\n @case (5) { <h5 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h5> }\n @default { <h6 class=\"hx-accordion-heading\"><ng-container [ngTemplateOutlet]=\"button\" /></h6> }\n }\n `,\n})\nexport class HxAccordionHeader {\n protected readonly panel = inject(HxAccordionPanel);\n protected readonly level = computed(() =>\n Math.min(6, Math.max(1, Math.round(this.panel.accordion.headingLevel()))),\n );\n}\n\n/** The content of a panel: a region labelled by its header; `inert` while the panel is closed. */\n@Component({\n selector: 'hx-accordion-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-accordion-content',\n '[attr.inert]': \"panel.expanded() ? null : ''\",\n },\n template: `\n <div class=\"hx-accordion-collapse\">\n <div class=\"hx-accordion-collapse-inner\">\n <div class=\"hx-accordion-body\" role=\"region\" [id]=\"panel.contentId\" [attr.aria-labelledby]=\"panel.headerId\">\n <ng-content />\n </div>\n </div>\n </div>\n `,\n})\nexport class HxAccordionContent {\n protected readonly panel = inject(HxAccordionPanel);\n}\n","/** A property name of an option, or a function that reads the value from it. */\nexport type Accessor<O, R> = string | ((option: O) => R);\n\n/** An option after `optionLabel`, `optionValue` and `optionDisabled` are applied. */\nexport interface HxOption<V = unknown> {\n label: string;\n value: V;\n disabled: boolean;\n}\n\n/** How values are compared to find the chosen option: `Object.is` unless the app passes its own. */\nexport const compareValues: (a: unknown, b: unknown) => boolean = Object.is;\n\nfunction read<R>(option: object, accessor: Accessor<unknown, R>, fallback: R): R {\n if (typeof accessor === 'function') return accessor(option);\n return accessor in option ? ((option as Record<string, unknown>)[accessor] as R) : fallback;\n}\n\n/**\n * Turns the `options` input of a component into `{ label, value, disabled }` entries. A primitive is its own\n * label and value; an object is read through the accessors (a property name or a function). A missing label is\n * an empty string, a missing value is the object itself, a missing `disabled` is `false`.\n */\nexport function resolveOptions<V = unknown>(\n options: readonly unknown[],\n label: Accessor<never, string>,\n value: Accessor<never, unknown>,\n disabled: Accessor<never, boolean>,\n): HxOption<V>[] {\n return options.map((option) => {\n if (option === null || typeof option !== 'object') {\n return { label: String(option), value: option as V, disabled: false };\n }\n return {\n label: String(read(option, label as Accessor<unknown, string>, '')),\n value: read(option, value as Accessor<unknown, unknown>, option) as V,\n disabled: Boolean(read(option, disabled as Accessor<unknown, boolean>, false)),\n };\n });\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxAutoCompleteSize = 'small' | 'medium' | 'large';\n\n/** The event of `(complete)`: the text to find suggestions for. */\nexport interface HxAutoCompleteEvent {\n query: string;\n}\n\n/**\n * A text field that suggests values while the user types. The component does not search: it emits `(complete)` with\n * the query (after `delay` ms and `minLength` characters) and shows the `suggestions` the app sets in answer.\n *\n * ```html\n * <label for=\"country\">Country</label>\n * <hx-auto-complete inputId=\"country\" [suggestions]=\"found()\" optionLabel=\"name\" (complete)=\"search($event.query)\"\n * forceSelection dropdown [(ngModel)]=\"country\" />\n * ```\n *\n * The value is the chosen suggestion (an array with `multiple`, shown as removable chips); without\n * `forceSelection` it is the typed text while nothing is chosen. A combobox with `aria-autocomplete=\"list\"` and\n * `aria-activedescendant`; the number of results is announced in a polite live region. It works with `ngModel`,\n * reactive forms and signal forms (`[formField]`).\n */\n@Component({\n selector: 'hx-auto-complete',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin],\n templateUrl: './auto-complete.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxAutoComplete), multi: true },\n ],\n host: {\n class: 'hx-auto-complete',\n '[class.hx-auto-complete-open]': 'open()',\n '[class.hx-auto-complete-sm]': \"size() === 'small'\",\n '[class.hx-auto-complete-lg]': \"size() === 'large'\",\n '[class.hx-auto-complete-fluid]': 'fluid()',\n '[class.hx-auto-complete-disabled]': 'isDisabled()',\n '[class.hx-auto-complete-invalid]': 'invalid()',\n '[class.hx-auto-complete-has-dropdown]': 'dropdown()',\n '[class.hx-filled]': 'filled()',\n },\n})\nexport class HxAutoComplete<V = unknown>\n implements ControlValueAccessor, FormValueControl<unknown>\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n\n /** The suggestions to show: primitives or objects. Set them in answer to `(complete)`. */\n readonly suggestions = input<readonly unknown[]>([]);\n /** The property (or function) that gives the text of a suggestion. */\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No results found');\n readonly size = input<HxAutoCompleteSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The least number of characters before `(complete)` fires (default 1). */\n readonly minLength = input<number | undefined>();\n /** Milliseconds to wait after the last key before `(complete)` fires. */\n readonly delay = input(300, { transform: numberAttribute });\n /** Text that matches no suggestion is cleared when the field loses focus. */\n readonly forceSelection = input(false, { transform: booleanAttribute });\n /** A button that asks for all suggestions (`(complete)` with an empty query). */\n readonly dropdown = input(false, { transform: booleanAttribute });\n /** Several values, shown as removable chips; the value is an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to mark the chosen suggestions (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n /** Fires when the app should look up suggestions for `query`. */\n readonly complete = output<HxAutoCompleteEvent>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly active = signal(-1);\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-auto-complete-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The text the user typed, `null` while the field shows the label of the value. */\n readonly #typed = signal<string | null>(null);\n /** Whether a query was answered (the live region and the empty message only speak then). */\n readonly #queried = signal(false);\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(this.suggestions(), this.optionLabel(), (o) => o, this.optionDisabled()),\n );\n\n protected readonly chips = computed(() => {\n const value = this.value();\n return this.multiple() && Array.isArray(value) ? value.map((v) => this.#toOption(v)) : [];\n });\n\n protected readonly inputText = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const value = this.value();\n if (this.multiple() || value === null || value === undefined) return '';\n return this.#toOption(value).label;\n });\n\n protected readonly filled = computed(() => this.inputText() !== '' || this.chips().length > 0);\n\n protected readonly activeId = computed(() =>\n this.open() && this.active() >= 0 ? this.optionId(this.active()) : null,\n );\n\n protected readonly status = computed(() => {\n if (!this.open() && !this.#queried()) return '';\n const count = this.items().length;\n return count === 0 ? this.emptyMessage() : `${count} ${count === 1 ? 'result' : 'results'}`;\n });\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n constructor() {\n this.#destroyRef.onDestroy(() => clearTimeout(this.#timer));\n }\n\n writeValue(value: unknown): void {\n this.#typed.set(null);\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n #toOption(value: unknown): HxOption<V> {\n return resolveOptions<V>([value], this.optionLabel(), (o) => o, 'disabled')[0];\n }\n\n protected optionId(index: number): string {\n return `${this.panelId}-${index}`;\n }\n\n protected isSelected(item: HxOption<V>): boolean {\n const same = this.compareWith();\n const value = this.value();\n return this.multiple()\n ? Array.isArray(value) && value.some((v) => same(v, item.value))\n : value !== null && value !== undefined && same(value, item.value);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.#typed.set(text);\n if (!this.multiple() && !this.forceSelection()) this.#commit(text === '' ? null : text);\n clearTimeout(this.#timer);\n if (text.length < (this.minLength() ?? 1)) {\n this.open.set(false);\n return;\n }\n this.#timer = setTimeout(() => this.#search(text), this.delay());\n }\n\n #search(query: string): void {\n this.#queried.set(true);\n this.complete.emit({ query });\n this.active.set(-1);\n this.#show();\n }\n\n protected showAll(): void {\n if (this.isDisabled()) return;\n this.field().nativeElement.focus();\n this.#search('');\n }\n\n #show(): void {\n if (this.isDisabled()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const count = this.items().length;\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n if (!this.open()) {\n if (count > 0) this.#show();\n return;\n }\n const step = event.key === 'ArrowDown' ? 1 : -1;\n this.active.set(count === 0 ? -1 : (this.active() + step + count) % count);\n break;\n }\n case 'Home':\n case 'End':\n if (this.open() && count > 0) {\n event.preventDefault();\n this.active.set(event.key === 'Home' ? 0 : count - 1);\n }\n break;\n case 'Enter':\n if (this.open() && this.active() >= 0) {\n event.preventDefault();\n this.choose(this.items()[this.active()]);\n }\n break;\n case 'Escape':\n if (this.open()) {\n event.preventDefault();\n this.open.set(false);\n }\n break;\n case 'Backspace':\n if (this.multiple() && this.inputText() === '' && this.chips().length > 0) {\n this.removeChip(this.chips().length - 1);\n }\n break;\n case 'Tab':\n this.open.set(false);\n break;\n }\n }\n\n protected choose(item: HxOption<V>): void {\n if (item.disabled) return;\n clearTimeout(this.#timer);\n this.#typed.set(null);\n if (this.multiple()) {\n const same = this.compareWith();\n const current = (Array.isArray(this.value()) ? this.value() : []) as unknown[];\n this.#commit(\n current.some((v) => same(v, item.value))\n ? current.filter((v) => !same(v, item.value))\n : [...current, item.value],\n );\n this.#typed.set('');\n this.field().nativeElement.value = '';\n } else {\n this.#commit(item.value);\n this.open.set(false);\n }\n this.field().nativeElement.focus();\n }\n\n protected removeChip(index: number): void {\n const current = (Array.isArray(this.value()) ? this.value() : []) as unknown[];\n this.#commit(current.filter((_, i) => i !== index));\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.open.set(false);\n }\n\n protected onBlur(): void {\n clearTimeout(this.#timer);\n const typed = this.#typed();\n if (typed !== null && this.forceSelection()) {\n // text that is not the label of the value is dropped\n if (this.multiple() || typed !== this.#labelOfValue()) {\n if (!this.multiple()) this.#commit(null);\n }\n this.#typed.set(null);\n } else if (typed === '' && this.multiple()) {\n this.#typed.set(null);\n }\n this.open.set(false);\n this.#onTouched();\n this.touch.emit();\n }\n\n #labelOfValue(): string {\n const value = this.value();\n return value === null || value === undefined || this.multiple()\n ? ''\n : this.#toOption(value).label;\n }\n\n #commit(value: unknown): void {\n this.value.set(value);\n this.#onChange(value);\n }\n}\n","<div class=\"hx-auto-complete-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n @if (multiple()) {\n @for (item of chips(); track $index) {\n <span class=\"hx-auto-complete-chip\">\n <span>{{ item.label }}</span>\n <button\n type=\"button\"\n class=\"hx-auto-complete-chip-remove\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"isDisabled()\"\n (click)=\"removeChip($index)\"\n >\n <span class=\"hx-auto-complete-remove-icon\" aria-hidden=\"true\"></span>\n </button>\n </span>\n }\n }\n <input\n #field\n type=\"text\"\n class=\"hx-auto-complete-input\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"multiple() && chips().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"inputText()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-activedescendant]=\"activeId()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n</div>\n@if (dropdown()) {\n <button\n type=\"button\"\n class=\"hx-auto-complete-dropdown\"\n tabindex=\"-1\"\n aria-label=\"Show suggestions\"\n [disabled]=\"isDisabled()\"\n (click)=\"showAll()\"\n >\n <span class=\"hx-auto-complete-chevron\" aria-hidden=\"true\"></span>\n </button>\n}\n<span class=\"hx-auto-complete-status\" role=\"status\" aria-live=\"polite\">{{ status() }}</span>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-auto-complete-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (detach)=\"open.set(false)\"\n>\n <div class=\"hx-auto-complete-panel\">\n <div class=\"hx-auto-complete-list\" role=\"listbox\" [id]=\"panelId\" [attr.aria-multiselectable]=\"multiple() ? 'true' : null\" [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\">\n @for (item of items(); track $index) {\n <div\n class=\"hx-auto-complete-option\"\n role=\"option\"\n [id]=\"optionId($index)\"\n [class.hx-auto-complete-option-active]=\"$index === active()\"\n [attr.aria-selected]=\"isSelected(item)\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"choose(item)\"\n (mousemove)=\"active.set($index)\"\n >\n {{ item.label }}\n </div>\n } @empty {\n <div class=\"hx-auto-complete-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxAvatarSize = 'normal' | 'large' | 'xlarge';\nexport type HxAvatarShape = 'square' | 'circle';\n\n/**\n * A picture, initials or an icon for a person. `image` wins over `icon`, which wins over `label`.\n *\n * ```html\n * <hx-avatar image=\"/amy.png\" ariaLabel=\"Amy Elsner\" shape=\"circle\" />\n * <hx-avatar label=\"JK\" size=\"large\" />\n * <hx-avatar icon=\"pi pi-user\" />\n * ```\n *\n * With `ariaLabel` the avatar is a named `img` and what it draws is hidden from assistive technology; without it,\n * initials are read as text and a picture is decorative (empty `alt`), so name any avatar that stands alone.\n */\n@Component({\n selector: 'hx-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-avatar',\n '[attr.role]': \"ariaLabel() ? 'img' : null\",\n '[attr.aria-label]': 'ariaLabel() || null',\n '[class.hx-avatar-lg]': \"size() === 'large'\",\n '[class.hx-avatar-xl]': \"size() === 'xlarge'\",\n '[class.hx-avatar-circle]': \"shape() === 'circle'\",\n },\n template: `\n @if (image()) {\n <img class=\"hx-avatar-image\" [src]=\"image()\" alt=\"\" />\n } @else if (icon()) {\n <span class=\"hx-avatar-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n } @else if (label()) {\n <span class=\"hx-avatar-label\" [attr.aria-hidden]=\"ariaLabel() ? 'true' : null\">{{ label() }}</span>\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxAvatar {\n /** Initials or a short text. */\n readonly label = input<string>();\n /** CSS classes of an icon font, e.g. `pi pi-user`. */\n readonly icon = input<string>();\n /** Address of a picture. */\n readonly image = input<string>();\n readonly size = input<HxAvatarSize>('normal');\n readonly shape = input<HxAvatarShape>('square');\n /** Accessible name; makes the avatar a named `img`. */\n readonly ariaLabel = input<string>();\n}\n\n/**\n * Overlaps the avatars it contains, e.g. the people of a team, with a ring in the surface colour between them.\n *\n * ```html\n * <hx-avatar-group ariaLabel=\"Team\">\n * <hx-avatar image=\"/a.png\" shape=\"circle\" />\n * <hx-avatar label=\"+2\" shape=\"circle\" />\n * </hx-avatar-group>\n * ```\n */\n@Component({\n selector: 'hx-avatar-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-avatar-group', role: 'group', '[attr.aria-label]': 'ariaLabel() || null' },\n template: '<ng-content />',\n})\nexport class HxAvatarGroup {\n /** Accessible name of the group. */\n readonly ariaLabel = input<string>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxBadgeSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'contrast';\nexport type HxBadgeSize = 'small' | 'medium' | 'large' | 'xlarge';\n\n/**\n * A small count or status marker. Without a `value` it is a dot.\n *\n * ```html\n * <hx-badge value=\"4\" severity=\"danger\" />\n * <hx-badge severity=\"success\" />\n * ```\n *\n * The value is plain text, so a screen reader reads it where it sits. A dot carries no text: when it is the only\n * sign of a status, put the status in text next to it or in the name of the element it belongs to.\n */\n@Component({\n selector: 'hx-badge',\n template: '{{ value() }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-badge',\n '[class.hx-badge-dot]': 'isDot()',\n '[class.hx-badge-secondary]': \"severity() === 'secondary'\",\n '[class.hx-badge-success]': \"severity() === 'success'\",\n '[class.hx-badge-info]': \"severity() === 'info'\",\n '[class.hx-badge-warn]': \"severity() === 'warn'\",\n '[class.hx-badge-danger]': \"severity() === 'danger'\",\n '[class.hx-badge-contrast]': \"severity() === 'contrast'\",\n '[class.hx-badge-sm]': \"size() === 'small'\",\n '[class.hx-badge-lg]': \"size() === 'large'\",\n '[class.hx-badge-xl]': \"size() === 'xlarge'\",\n },\n})\nexport class HxBadge {\n /** The text or number shown; empty makes a dot. */\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxBadgeSeverity>('primary');\n readonly size = input<HxBadgeSize>('medium');\n\n protected isDot(): boolean {\n const value = this.value();\n return value === null || value === undefined || value === '';\n }\n}\n\n/**\n * Puts a badge on the top right corner of the wrapped element.\n *\n * ```html\n * <hx-overlay-badge value=\"2\" severity=\"danger\">\n * <button hx-button iconOnly aria-label=\"Inbox, 2 new\"><span class=\"pi pi-bell\"></span></button>\n * </hx-overlay-badge>\n * ```\n *\n * The badge text is read after the element, but an icon-only element still needs its own accessible name, ideally one\n * that includes the count, as above.\n */\n@Component({\n selector: 'hx-overlay-badge',\n imports: [HxBadge],\n template: `<ng-content /><hx-badge class=\"hx-overlay-badge-badge\" [value]=\"value()\" [severity]=\"severity()\" [size]=\"size()\" />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-overlay-badge' },\n})\nexport class HxOverlayBadge {\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxBadgeSeverity>('primary');\n readonly size = input<HxBadgeSize>('medium');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport type { HxMenuItem } from '../menu-item';\n\n/** One step of the trail: the menu item model, of which the breadcrumb uses label, icon, link and state. */\nexport type HxBreadcrumbItem = HxMenuItem;\n\n/**\n * The path to the current page. The last item is the current page (`aria-current=\"page\"`).\n *\n * ```html\n * <hx-breadcrumb [model]=\"items\" [home]=\"{ icon: 'pi pi-home', routerLink: '/' }\" />\n * ```\n */\n@Component({\n selector: 'hx-breadcrumb',\n imports: [RouterLink, NgTemplateOutlet],\n templateUrl: './breadcrumb.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-breadcrumb' },\n})\nexport class HxBreadcrumb {\n readonly model = input<readonly HxBreadcrumbItem[]>([]);\n readonly home = input<HxBreadcrumbItem>();\n /** Accessible name of the navigation landmark. */\n readonly ariaLabel = input('Breadcrumb');\n\n protected items(): HxBreadcrumbItem[] {\n return this.model().filter((item) => item.visible !== false);\n }\n}\n","<nav [attr.aria-label]=\"ariaLabel()\">\n <ol class=\"hx-breadcrumb-list\">\n @if (home(); as home) {\n <li class=\"hx-breadcrumb-item\">\n <ng-container [ngTemplateOutlet]=\"entry\" [ngTemplateOutletContext]=\"{ $implicit: home, current: false }\" />\n </li>\n }\n @for (item of items(); track $index; let last = $last) {\n @if (home() || $index > 0) {\n <li class=\"hx-breadcrumb-separator\" aria-hidden=\"true\"></li>\n }\n <li class=\"hx-breadcrumb-item\">\n <ng-container [ngTemplateOutlet]=\"entry\" [ngTemplateOutletContext]=\"{ $implicit: item, current: last }\" />\n </li>\n }\n </ol>\n</nav>\n\n<ng-template #entry let-item let-current=\"current\">\n @if (current || item.disabled || (!item.routerLink && !item.url)) {\n <span class=\"hx-breadcrumb-link\" [attr.aria-current]=\"current ? 'page' : null\" [attr.aria-disabled]=\"item.disabled ? 'true' : null\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </span>\n } @else if (item.routerLink) {\n <a class=\"hx-breadcrumb-link\" [routerLink]=\"item.routerLink\" [attr.target]=\"item.target\" [attr.aria-label]=\"item.label ? null : 'Home'\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </a>\n } @else {\n <a class=\"hx-breadcrumb-link\" [href]=\"item.url\" [attr.target]=\"item.target\">\n @if (item.icon) { <span [class]=\"item.icon + ' hx-breadcrumb-icon'\" aria-hidden=\"true\"></span> }\n @if (item.label) { <span>{{ item.label }}</span> }\n </a>\n }\n</ng-template>\n","import { booleanAttribute, DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\n\nexport type HxButtonVariant = 'filled' | 'outlined' | 'text' | 'link';\nexport type HxButtonSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'help'\n | 'danger'\n | 'contrast';\nexport type HxButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<button>` or `<a>` dressed as a Helix button. The label is the element's content; an icon is\n * an inline `<svg>` or an element with `hxButtonIcon` next to it. Styled by `@gravionlabs/helix-ui/styles.css`\n * on the `--h-button-*` design tokens.\n *\n * ```html\n * <button hx-button severity=\"success\" (click)=\"save()\">Save</button>\n * <button hx-button variant=\"outlined\" [loading]=\"saving()\">Save</button>\n * <button hx-button iconOnly aria-label=\"Add\"><svg …/></button>\n * ```\n *\n * A loading button stays focusable (`aria-busy`) but swallows clicks; a disabled one is the native `disabled`\n * attribute (or `aria-disabled=\"true\"` on an anchor). An icon-only button needs an accessible name.\n */\n@Directive({\n selector: 'button[hx-button], a[hx-button]',\n exportAs: 'hx-button',\n host: {\n class: 'hx-button',\n '[class.hx-button-outlined]': \"variant() === 'outlined'\",\n '[class.hx-button-text]': \"variant() === 'text'\",\n '[class.hx-button-link]': \"variant() === 'link'\",\n '[class.hx-button-secondary]': \"severity() === 'secondary'\",\n '[class.hx-button-success]': \"severity() === 'success'\",\n '[class.hx-button-info]': \"severity() === 'info'\",\n '[class.hx-button-warn]': \"severity() === 'warn'\",\n '[class.hx-button-help]': \"severity() === 'help'\",\n '[class.hx-button-danger]': \"severity() === 'danger'\",\n '[class.hx-button-contrast]': \"severity() === 'contrast'\",\n '[class.hx-button-sm]': \"size() === 'small'\",\n '[class.hx-button-lg]': \"size() === 'large'\",\n '[class.hx-button-rounded]': 'rounded()',\n '[class.hx-button-raised]': 'raised()',\n '[class.hx-button-fluid]': 'fluid()',\n '[class.hx-button-icon-only]': 'iconOnly()',\n '[class.hx-button-loading]': 'loading()',\n '[attr.aria-busy]': \"loading() ? 'true' : null\",\n },\n})\nexport class HxButton {\n /** How loud the button is: filled (default), outlined, text or link. */\n readonly variant = input<HxButtonVariant>('filled');\n\n /** What the button means: `primary` (default), `secondary` and the status colours. */\n readonly severity = input<HxButtonSeverity>('primary');\n\n readonly size = input<HxButtonSize>('medium');\n\n /** A pill instead of the 6 px radius; a circle for an icon-only button. */\n readonly rounded = input(false, { transform: booleanAttribute });\n\n /** Adds the elevation shadow. */\n readonly raised = input(false, { transform: booleanAttribute });\n\n /** Takes the full width of the container. */\n readonly fluid = input(false, { transform: booleanAttribute });\n\n /** Square button for a single icon; give it `aria-label`. */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n\n /** Shows a spinner and ignores clicks while an operation runs. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n constructor() {\n // A capture listener on the host itself fires before the click listeners of the consuming template\n // (a host `(click)` binding would not: its order against the template's is not guaranteed).\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const guard = (event: Event) => {\n if (this.loading() || host.getAttribute('aria-disabled') === 'true') {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n host.addEventListener('click', guard, true);\n inject(DestroyRef).onDestroy(() => host.removeEventListener('click', guard, true));\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Joins the `hx-button`s inside it into one control: the inner corners are square and neighbours share a border.\n *\n * ```html\n * <hx-button-group ariaLabel=\"Text alignment\">\n * <button hx-button variant=\"outlined\">Left</button>\n * <button hx-button variant=\"outlined\">Center</button>\n * <button hx-button variant=\"outlined\">Right</button>\n * </hx-button-group>\n * ```\n *\n * `role=\"group\"`; name it with `ariaLabel` when the buttons only make sense together.\n */\n@Component({\n selector: 'hx-button-group',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-button-group', role: 'group', '[attr.aria-label]': 'ariaLabel() || null' },\n})\nexport class HxButtonGroup {\n /** Accessible name of the group. */\n readonly ariaLabel = input<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * A surface for grouped content. Project a header (an image, say), a title, a subtitle, the content and a footer,\n * or use the `title` and `subtitle` inputs as a shortcut.\n *\n * ```html\n * <hx-card title=\"Billing\" subtitle=\"October\" [headingLevel]=\"3\">\n * <img hxCardHeader src=\"chart.png\" alt=\"\" />\n * Total due: 120 EUR\n * <div hxCardFooter><button hx-button>Pay</button></div>\n * </hx-card>\n * <hx-card>\n * <span hxCardTitle>Custom title</span>\n * <span hxCardSubtitle>Custom subtitle</span>\n * Content\n * </hx-card>\n * ```\n *\n * The title is a heading; `headingLevel` (default 2) is the level that fits the page's outline.\n */\n@Component({\n selector: 'hx-card',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-card' },\n template: `\n <ng-template #titleText>{{ title() }}<ng-content select=\"[hxCardTitle]\" /></ng-template>\n <div class=\"hx-card-header\"><ng-content select=\"[hxCardHeader]\" /></div>\n <div class=\"hx-card-body\">\n <div class=\"hx-card-caption\">\n @switch (level()) {\n @case (1) { <h1 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h1> }\n @case (2) { <h2 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h2> }\n @case (3) { <h3 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h3> }\n @case (4) { <h4 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h4> }\n @case (5) { <h5 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h5> }\n @default { <h6 class=\"hx-card-title\"><ng-container [ngTemplateOutlet]=\"titleText\" /></h6> }\n }\n <div class=\"hx-card-subtitle\">{{ subtitle() }}<ng-content select=\"[hxCardSubtitle]\" /></div>\n </div>\n <div class=\"hx-card-content\"><ng-content /></div>\n <div class=\"hx-card-footer\"><ng-content select=\"[hxCardFooter]\" /></div>\n </div>\n `,\n})\nexport class HxCard {\n /** A shortcut for the title slot. */\n readonly title = input('');\n /** A shortcut for the subtitle slot. */\n readonly subtitle = input('');\n /** The level of the title heading, 1 to 6. */\n readonly headingLevel = input(2, { transform: numberAttribute });\n\n protected readonly level = computed(() =>\n Math.min(6, Math.max(1, Math.round(this.headingLevel()))),\n );\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\nexport type HxCarouselOrientation = 'horizontal' | 'vertical';\n\n/** How many items are visible and scrolled at a viewport width (`breakpoint` is a max-width, `'1024px'`). */\nexport interface HxCarouselResponsiveOption {\n breakpoint: string;\n numVisible: number;\n numScroll: number;\n}\n\nexport interface HxCarouselItemContext<T = unknown> {\n $implicit: T;\n index: number;\n}\n\n/** The template of one item: `<ng-template hxCarouselItem let-item let-index=\"index\">`. */\n@Directive({ selector: 'ng-template[hxCarouselItem]' })\nexport class HxCarouselItem {\n readonly template = inject<TemplateRef<HxCarouselItemContext>>(TemplateRef);\n}\n\n/**\n * A slider over a list of items: `numVisible` items at a time, moved by `numScroll` with the previous/next buttons,\n * the page indicators or the arrow keys; optional autoplay and circular paging.\n *\n * ```html\n * <hx-carousel [value]=\"products\" [numVisible]=\"3\" [numScroll]=\"1\" [responsiveOptions]=\"responsive\" ariaLabel=\"Products\">\n * <ng-template hxCarouselItem let-product>…</ng-template>\n * </hx-carousel>\n * ```\n *\n * The carousel is a `region` with `aria-roledescription=\"carousel\"`; the items are `group`s named \"n of m\"; items\n * outside the viewport are hidden from assistive technology and the tab order. Autoplay pauses while the pointer or\n * the focus is inside and stays off when the user prefers reduced motion.\n */\n@Component({\n selector: 'hx-carousel',\n imports: [NgTemplateOutlet],\n templateUrl: './carousel.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-carousel',\n '[class.hx-carousel-vertical]': \"orientation() === 'vertical'\",\n '(mouseenter)': 'hovered.set(true)',\n '(mouseleave)': 'hovered.set(false)',\n '(focusin)': 'focused.set(true)',\n '(focusout)': 'onFocusOut($event)',\n '(window:resize)': 'onResize()',\n },\n})\nexport class HxCarousel<T = unknown> {\n readonly value = input<readonly T[]>([]);\n readonly numVisible = input(1, { transform: numberAttribute });\n readonly numScroll = input(1, { transform: numberAttribute });\n /** After the last page comes the first again. */\n readonly circular = input(false, { transform: booleanAttribute });\n /** Milliseconds between automatic page changes; 0 is off. */\n readonly autoplayInterval = input(0, { transform: numberAttribute });\n readonly orientation = input<HxCarouselOrientation>('horizontal');\n /** Height of the viewport when vertical. */\n readonly verticalViewPortHeight = input('300px');\n readonly showIndicators = input(true, { transform: booleanAttribute });\n readonly showNavigators = input(true, { transform: booleanAttribute });\n readonly responsiveOptions = input<readonly HxCarouselResponsiveOption[]>();\n /** The current page (0-based); `pageChange` is its output. */\n readonly page = model(0);\n readonly ariaLabel = input('Carousel');\n readonly prevLabel = input('Previous page');\n readonly nextLabel = input('Next page');\n /** `{page}` and `{pageCount}` are replaced. */\n readonly pageLabelTemplate = input('Page {page} of {pageCount}');\n /** `{index}` and `{count}` are replaced. */\n readonly itemLabelTemplate = input('{index} of {count}');\n\n protected readonly itemTemplate = contentChild(HxCarouselItem);\n protected readonly hovered = signal(false);\n protected readonly focused = signal(false);\n protected readonly id = nextId('hx-carousel');\n private readonly viewportWidth = signal(typeof window === 'undefined' ? 1024 : window.innerWidth);\n private readonly reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n /** The visible/scroll counts for the current viewport (the smallest matching breakpoint wins). */\n private readonly counts = computed(() => {\n const options = [...(this.responsiveOptions() ?? [])]\n .map((o) => ({ ...o, px: Number.parseFloat(o.breakpoint) }))\n .filter((o) => !Number.isNaN(o.px))\n .sort((a, b) => a.px - b.px);\n const match = options.find((o) => this.viewportWidth() <= o.px);\n const visible = Math.max(1, match?.numVisible ?? this.numVisible());\n const scroll = Math.max(1, match?.numScroll ?? this.numScroll());\n return { visible, scroll };\n });\n protected readonly visible = computed(() => this.counts().visible);\n protected readonly scroll = computed(() => this.counts().scroll);\n\n protected readonly pageCount = computed(() => {\n const n = this.value().length;\n const { visible, scroll } = this.counts();\n return n <= visible ? 1 : Math.ceil((n - visible) / scroll) + 1;\n });\n protected readonly currentPage = computed(() =>\n Math.min(Math.max(0, this.page()), this.pageCount() - 1),\n );\n /** The index of the first visible item. */\n protected readonly first = computed(() => {\n const n = this.value().length;\n const { visible, scroll } = this.counts();\n return Math.max(0, Math.min(this.currentPage() * scroll, n - visible));\n });\n protected readonly pages = computed(() => Array.from({ length: this.pageCount() }, (_, i) => i));\n protected readonly isFirst = computed(() => this.currentPage() === 0);\n protected readonly isLast = computed(() => this.currentPage() >= this.pageCount() - 1);\n protected readonly prevDisabled = computed(() => !this.circular() && this.isFirst());\n protected readonly nextDisabled = computed(() => !this.circular() && this.isLast());\n protected readonly itemSize = computed(() => 100 / this.visible());\n protected readonly offset = computed(() => -this.first() * this.itemSize());\n protected readonly transform = computed(() =>\n this.orientation() === 'vertical'\n ? `translateY(${this.offset()}%)`\n : `translateX(${this.offset()}%)`,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n let timer: ReturnType<typeof setInterval> | undefined;\n const stop = () => {\n if (timer !== undefined) clearInterval(timer);\n timer = undefined;\n };\n // autoplay: runs while nothing is hovered or focused and motion is not reduced\n effect(() => {\n const interval = this.autoplayInterval();\n const paused = this.hovered() || this.focused() || this.reducedMotion || this.pageCount() < 2;\n stop();\n if (interval > 0 && !paused) {\n timer = setInterval(() => untracked(() => this.next(true)), interval);\n }\n });\n destroyRef.onDestroy(stop);\n }\n\n protected isVisible(index: number): boolean {\n return index >= this.first() && index < this.first() + this.visible();\n }\n\n protected itemLabel(index: number): string {\n return this.itemLabelTemplate()\n .replace('{index}', String(index + 1))\n .replace('{count}', String(this.value().length));\n }\n\n protected pageLabel(page: number): string {\n return this.pageLabelTemplate()\n .replace('{page}', String(page + 1))\n .replace('{pageCount}', String(this.pageCount()));\n }\n\n /** Goes to a page (0-based); wraps around when `circular`, else clamps. */\n goTo(page: number): void {\n const count = this.pageCount();\n let target = page;\n if (this.circular()) target = ((page % count) + count) % count;\n else target = Math.min(Math.max(0, page), count - 1);\n if (target === this.currentPage()) return;\n this.page.set(target);\n }\n\n next(auto = false): void {\n if (auto && !this.circular() && this.isLast()) {\n this.goTo(0);\n return;\n }\n this.goTo(this.currentPage() + 1);\n }\n\n prev(): void {\n this.goTo(this.currentPage() - 1);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const vertical = this.orientation() === 'vertical';\n const back = vertical ? 'ArrowUp' : 'ArrowLeft';\n const forward = vertical ? 'ArrowDown' : 'ArrowRight';\n switch (event.key) {\n case back:\n event.preventDefault();\n this.prev();\n break;\n case forward:\n event.preventDefault();\n this.next();\n break;\n case 'Home':\n event.preventDefault();\n this.goTo(0);\n break;\n case 'End':\n event.preventDefault();\n this.goTo(this.pageCount() - 1);\n break;\n }\n }\n\n protected onIndicatorKeydown(event: KeyboardEvent): void {\n this.onKeydown(event);\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n // keep the focus on the indicator of the new page\n queueMicrotask(() => {\n const host = (event.currentTarget as HTMLElement).closest('.hx-carousel-indicators');\n host?.querySelector<HTMLElement>('[aria-selected=\"true\"]')?.focus();\n });\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (!event.relatedTarget || !host.contains(event.relatedTarget as Node))\n this.focused.set(false);\n }\n\n protected onResize(): void {\n this.viewportWidth.set(window.innerWidth);\n }\n}\n","<section class=\"hx-carousel-region\" role=\"region\" aria-roledescription=\"carousel\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-live]=\"autoplayInterval() > 0 && !(hovered() || focused()) ? 'off' : 'polite'\">\n <div class=\"hx-carousel-header\"><ng-content select=\"[hxCarouselHeader]\" /></div>\n <div class=\"hx-carousel-content\">\n @if (showNavigators()) {\n <button type=\"button\" class=\"hx-carousel-button hx-carousel-prev\" [disabled]=\"prevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"prev()\"></button>\n }\n <div class=\"hx-carousel-viewport\" [id]=\"id + '-viewport'\" tabindex=\"0\" [style.height]=\"orientation() === 'vertical' ? verticalViewPortHeight() : null\" (keydown)=\"onKeydown($event)\">\n <div class=\"hx-carousel-track\" [style.transform]=\"transform()\">\n @for (item of value(); track $index) {\n <div\n class=\"hx-carousel-item\"\n role=\"group\"\n aria-roledescription=\"slide\"\n [class.hx-carousel-item-active]=\"isVisible($index)\"\n [attr.aria-label]=\"itemLabel($index)\"\n [attr.aria-hidden]=\"isVisible($index) ? null : 'true'\"\n [attr.inert]=\"isVisible($index) ? null : ''\"\n [style.flex-basis.%]=\"itemSize()\"\n >\n @if (itemTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: $index }\" />\n }\n </div>\n }\n </div>\n </div>\n @if (showNavigators()) {\n <button type=\"button\" class=\"hx-carousel-button hx-carousel-next\" [disabled]=\"nextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"next()\"></button>\n }\n </div>\n @if (showIndicators() && pageCount() > 1) {\n <div class=\"hx-carousel-indicators\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' pages'\">\n @for (p of pages(); track p) {\n <button\n type=\"button\"\n class=\"hx-carousel-indicator\"\n role=\"tab\"\n [class.hx-carousel-indicator-active]=\"p === currentPage()\"\n [attr.aria-selected]=\"p === currentPage()\"\n [attr.aria-label]=\"pageLabel(p)\"\n [attr.aria-controls]=\"id + '-viewport'\"\n [attr.tabindex]=\"p === currentPage() ? 0 : -1\"\n (click)=\"goTo(p)\"\n (keydown)=\"onIndicatorKeydown($event)\"\n ></button>\n }\n </div>\n }\n <div class=\"hx-carousel-footer\"><ng-content select=\"[hxCarouselFooter]\" /></div>\n</section>\n","import { Directive, input } from '@angular/core';\n\nexport type HxCheckboxSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<input type=\"checkbox\">` drawn as a Helix checkbox (CSS only). It is a real checkbox: `checked`,\n * `indeterminate`, `disabled`, `ngModel`, reactive and signal forms, keyboard and screen readers all work\n * as for any checkbox.\n *\n * ```html\n * <label><input type=\"checkbox\" hx-checkbox [(ngModel)]=\"agreed\" /> I agree</label>\n * <input type=\"checkbox\" hx-checkbox [indeterminate]=\"some\" aria-label=\"Select all\" />\n * ```\n *\n * Put it in a `<label>` with its text (or give it `aria-label`); the invalid look comes from\n * `aria-invalid=\"true\"` and from `ng-invalid ng-touched`.\n */\n@Directive({\n selector: 'input[hx-checkbox]',\n exportAs: 'hx-checkbox',\n host: {\n class: 'hx-checkbox',\n '[class.hx-checkbox-sm]': \"size() === 'small'\",\n '[class.hx-checkbox-lg]': \"size() === 'large'\",\n },\n})\nexport class HxCheckbox {\n readonly size = input<HxCheckboxSize>('medium');\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n/**\n * A compact element for an entity (a person, a filter, a tag the user added), optionally removable.\n *\n * ```html\n * <hx-chip label=\"Amy Elsner\" image=\"/amy.png\" />\n * <hx-chip label=\"Angular\" icon=\"pi pi-code\" removable (remove)=\"drop('Angular')\" />\n * ```\n *\n * A removable chip is focusable: Backspace or Delete removes it, as does its remove button (named by\n * `removeLabel`). The chip only reports the removal through `(remove)`; the app drops it from its data.\n */\n@Component({\n selector: 'hx-chip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-chip',\n '[class.hx-chip-removable]': 'removable()',\n '[attr.role]': \"removable() ? 'group' : null\",\n '[attr.aria-label]': 'removable() ? label() : null',\n '[attr.tabindex]': 'removable() ? 0 : null',\n '(keydown.backspace)': 'onKey($event)',\n '(keydown.delete)': 'onKey($event)',\n },\n template: `\n @if (image()) {\n <img class=\"hx-chip-image\" [src]=\"image()\" [alt]=\"imageAlt()\" />\n } @else if (icon()) {\n <span class=\"hx-chip-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-chip-label\">{{ label() }}<ng-content /></span>\n @if (removable()) {\n <button type=\"button\" class=\"hx-chip-remove\" [attr.aria-label]=\"removeLabel()\" (click)=\"remove.emit()\">\n <span class=\"hx-chip-remove-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxChip {\n /** The text; content can be projected as well. */\n readonly label = input<string>();\n /** CSS classes of an icon font, e.g. `pi pi-user`. Not shown when there is an `image`. */\n readonly icon = input<string>();\n /** Address of a picture shown before the label. */\n readonly image = input<string>();\n /** Alternative text of the picture; empty (decorative) by default because the label names the chip. */\n readonly imageAlt = input('');\n /** Shows a remove button and makes the chip focusable. */\n readonly removable = input(false, { transform: booleanAttribute });\n /** Accessible name of the remove button. */\n readonly removeLabel = input('Remove');\n\n /** The chip should be removed: the remove button was pressed, or Backspace/Delete on the chip. */\n readonly remove = output<void>();\n\n protected onKey(event: Event): void {\n if (!this.removable() || event.target !== event.currentTarget) return;\n event.preventDefault();\n this.remove.emit();\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay, type PositionStrategy } from '@angular/cdk/overlay';\nimport { NgComponentOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n Injectable,\n InjectionToken,\n Injector,\n inject,\n input,\n model,\n output,\n type TemplateRef,\n type Type,\n untracked,\n viewChild,\n} from '@angular/core';\nimport type { Observable } from 'rxjs';\nimport { nextId } from '../internal/ids';\n\nexport type HxDialogPosition =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\n/** Where a dialog sits on the screen, as a CDK global position strategy. */\nfunction positionStrategy(overlay: Overlay, position: HxDialogPosition): PositionStrategy {\n const strategy = overlay.position().global();\n const [vertical, horizontal] = position.includes('-')\n ? (position.split('-') as ['top' | 'bottom', 'left' | 'right'])\n : position === 'left' || position === 'right'\n ? ['center', position]\n : [position, 'center'];\n if (vertical === 'top') strategy.top('1rem');\n else if (vertical === 'bottom') strategy.bottom('1rem');\n else strategy.centerVertically();\n if (horizontal === 'left') strategy.left('1rem');\n else if (horizontal === 'right') strategy.right('1rem');\n else strategy.centerHorizontally();\n return strategy;\n}\n\n/**\n * The box of a dialog: a title (the `header`, plus content marked `hxDialogHeader`), the content, a footer (content\n * marked `hxDialogFooter`) and a close button. Used by `hx-dialog` and by the dialogs opened with `HxDialogService`.\n * The close button comes last in the DOM, so the first control of the content gets the focus when the dialog opens.\n */\n@Component({\n selector: 'hx-dialog-frame',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-dialog' },\n template: `\n <h2 class=\"hx-dialog-title\" [id]=\"titleId()\">{{ header() }}<ng-content select=\"[hxDialogHeader]\" /></h2>\n <div class=\"hx-dialog-content\"><ng-content /></div>\n <div class=\"hx-dialog-footer\"><ng-content select=\"[hxDialogFooter]\" /></div>\n @if (closable()) {\n <button type=\"button\" class=\"hx-dialog-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"closeClick.emit()\">\n <span class=\"hx-dialog-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxDialogFrame {\n readonly header = input<string>();\n readonly titleId = input<string>();\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n readonly closeClick = output<void>();\n}\n\n/**\n * A modal or non-modal dialog, on `@angular/cdk/dialog`.\n *\n * ```html\n * <hx-dialog [(visible)]=\"open\" header=\"Edit profile\" width=\"30rem\">\n * <input hx-input [(ngModel)]=\"name\" />\n * <div hxDialogFooter>\n * <button hx-button variant=\"text\" (click)=\"open = false\">Cancel</button>\n * <button hx-button (click)=\"save()\">Save</button>\n * </div>\n * </hx-dialog>\n * ```\n *\n * `visible` is two-way: closing from the close button, Escape or the mask sets it to `false`. While it is `true` the\n * dialog is open; the content is created when it opens and destroyed when it closes. A modal dialog puts a mask behind\n * it, traps the focus, hides the rest of the page from assistive technology, and gives the focus back to the element\n * that had it when the dialog closes.\n */\n@Component({\n selector: 'hx-dialog',\n imports: [HxDialogFrame],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-dialog-anchor' },\n template: `\n <ng-template #panel>\n <hx-dialog-frame [header]=\"header()\" [titleId]=\"titleId\" [closable]=\"closable()\" [closeLabel]=\"closeLabel()\" (closeClick)=\"visible.set(false)\">\n <ng-container ngProjectAs=\"[hxDialogHeader]\"><ng-content select=\"[hxDialogHeader]\" /></ng-container>\n <ng-content />\n <ng-container ngProjectAs=\"[hxDialogFooter]\"><ng-content select=\"[hxDialogFooter]\" /></ng-container>\n </hx-dialog-frame>\n </ng-template>\n `,\n})\nexport class HxDialog {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n readonly #destroyRef = inject(DestroyRef);\n\n /** Whether the dialog is open. */\n readonly visible = model(false);\n /** Title; content marked `hxDialogHeader` is added after it. */\n readonly header = input<string>();\n /** A mask behind the dialog, a focus trap, and the page behind hidden from assistive technology. */\n readonly modal = input(true, { transform: booleanAttribute });\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Clicking the mask closes a modal dialog. */\n readonly dismissableMask = input(false, { transform: booleanAttribute });\n readonly position = input<HxDialogPosition>('center');\n /** CSS width, e.g. `30rem`. */\n readonly width = input<string>();\n readonly height = input<string>();\n /** Extra CSS classes for the overlay pane. */\n readonly panelClass = input<string | string[]>();\n /** Accessible name of the close button. */\n readonly closeLabel = input('Close');\n /** Accessible name of the dialog when there is no `header`. */\n readonly ariaLabel = input<string>();\n\n /** The dialog opened. */\n readonly shown = output<void>();\n /** The dialog closed, by whatever means. */\n readonly hidden = output<void>();\n\n protected readonly titleId = nextId('hx-dialog-title');\n #ref: DialogRef<unknown, unknown> | undefined;\n\n constructor() {\n effect(() => {\n const visible = this.visible();\n const panel = this.panel();\n untracked(() => {\n if (visible && panel) this.#open(panel);\n else if (!visible) this.#close();\n });\n });\n this.#destroyRef.onDestroy(() => this.#close());\n }\n\n #open(panel: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const modal = this.modal();\n const header = this.header();\n const ref = this.#dialog.open(panel, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: ['hx-dialog-panel', ...[this.panelClass() ?? []].flat()],\n width: this.width(),\n height: this.height(),\n maxWidth: 'calc(100vw - 2rem)',\n maxHeight: 'calc(100vh - 2rem)',\n positionStrategy: positionStrategy(this.#overlay, this.position()),\n ariaModal: modal,\n ariaLabelledBy: header ? this.titleId : null,\n ariaLabel: header ? null : (this.ariaLabel() ?? null),\n // Escape and the mask are handled below, so each can be switched off on its own\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (\n event.key === 'Escape' &&\n this.closeOnEscape() &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => {\n if (this.dismissableMask()) this.visible.set(false);\n });\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n this.hidden.emit();\n }\n });\n this.shown.emit();\n }\n\n #close(): void {\n this.#ref?.close();\n }\n}\n\n/** The data of a dialog opened with `HxDialogService`, for the component inside: `inject(HX_DIALOG_DATA)`. */\nexport const HX_DIALOG_DATA = new InjectionToken<unknown>('HX_DIALOG_DATA');\n\n/** A dialog opened with `HxDialogService`: close it, and wait for its result. */\nexport class HxDialogRef<R = unknown, C = unknown> {\n /** The component shown inside, once it exists. */\n componentInstance: C | null = null;\n /** Emits the result (or `undefined`) once, when the dialog has closed. */\n readonly closed: Observable<R | undefined>;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n }\n\n /** Closes the dialog; `result` is what `closed` emits. */\n close(result?: R): void {\n this.ref.close(result);\n }\n}\n\nexport interface HxDialogConfig<D = unknown> {\n /** Handed to the component: `inject(HX_DIALOG_DATA)`. */\n data?: D;\n header?: string;\n width?: string;\n height?: string;\n modal?: boolean;\n closable?: boolean;\n closeOnEscape?: boolean;\n dismissableMask?: boolean;\n position?: HxDialogPosition;\n panelClass?: string | string[];\n closeLabel?: string;\n /** Accessible name when there is no `header`. */\n ariaLabel?: string;\n}\n\ninterface HostData {\n component: Type<unknown>;\n config: HxDialogConfig;\n ref: HxDialogRef;\n titleId: string;\n}\n\nconst HX_DIALOG_HOST_DATA = new InjectionToken<HostData>('HX_DIALOG_HOST_DATA');\n\n/** The inside of a service dialog: a frame around the component that was asked for. */\n@Component({\n selector: 'hx-dialog-host',\n imports: [HxDialogFrame, NgComponentOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <hx-dialog-frame\n [header]=\"data.config.header\"\n [titleId]=\"data.titleId\"\n [closable]=\"data.config.closable ?? true\"\n [closeLabel]=\"data.config.closeLabel ?? 'Close'\"\n (closeClick)=\"data.ref.close()\"\n >\n <ng-container [ngComponentOutlet]=\"data.component\" [ngComponentOutletInjector]=\"injector\" />\n </hx-dialog-frame>\n `,\n})\nexport class HxDialogHost {\n protected readonly data = inject<HostData>(HX_DIALOG_HOST_DATA);\n protected readonly injector = Injector.create({\n providers: [\n { provide: HX_DIALOG_DATA, useValue: this.data.config.data },\n { provide: HxDialogRef, useValue: this.data.ref },\n ],\n parent: inject(Injector),\n });\n private readonly outlet = viewChild(NgComponentOutlet);\n\n constructor() {\n afterNextRender(() => {\n this.data.ref.componentInstance = (this.outlet()?.componentInstance as unknown) ?? null;\n });\n }\n}\n\n/**\n * Opens a component in a dialog.\n *\n * ```ts\n * const ref = inject(HxDialogService).open(EditUser, { header: 'Edit user', width: '30rem', data: { id: 7 } });\n * ref.closed.subscribe((result) => console.log(result));\n * ```\n *\n * Inside `EditUser`: `inject(HX_DIALOG_DATA)` is the `data`, `inject(HxDialogRef).close(result)` closes the dialog\n * with a result. The options are those of `<hx-dialog>`; Escape and (with `dismissableMask`) the mask close it with\n * no result.\n */\n@Injectable({ providedIn: 'root' })\nexport class HxDialogService {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n\n open<C, R = unknown, D = unknown>(\n component: Type<C>,\n config: HxDialogConfig<D> = {},\n ): HxDialogRef<R, C> {\n const modal = config.modal ?? true;\n const titleId = nextId('hx-dialog-title');\n let hxRef!: HxDialogRef<R, C>;\n const ref = this.#dialog.open<R, unknown, HxDialogHost>(HxDialogHost, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: ['hx-dialog-panel', ...[config.panelClass ?? []].flat()],\n width: config.width,\n height: config.height,\n maxWidth: 'calc(100vw - 2rem)',\n maxHeight: 'calc(100vh - 2rem)',\n positionStrategy: positionStrategy(this.#overlay, config.position ?? 'center'),\n ariaModal: modal,\n ariaLabelledBy: config.header ? titleId : null,\n ariaLabel: config.header ? null : (config.ariaLabel ?? null),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n providers: (cdkRef) => {\n hxRef = new HxDialogRef<R, C>(cdkRef as DialogRef<R, unknown>);\n return [\n { provide: HX_DIALOG_HOST_DATA, useValue: { component, config, ref: hxRef, titleId } },\n ];\n },\n });\n ref.keydownEvents.subscribe((event) => {\n if (\n (config.closeOnEscape ?? true) &&\n event.key === 'Escape' &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n ref.close();\n }\n });\n ref.backdropClick.subscribe(() => {\n if (config.dismissableMask) ref.close();\n });\n return hxRef;\n }\n}\n","import {\n CdkConnectedOverlay,\n type ConnectedOverlayPositionChange,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Injector,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\n/**\n * A small panel anchored to an element, with arbitrary content and an arrow pointing at the element.\n *\n * ```html\n * <button hx-button aria-haspopup=\"dialog\" (click)=\"op.toggle($event)\">Share</button>\n * <hx-popover #op ariaLabel=\"Share this page\">\n * <input hx-input aria-label=\"Link\" value=\"https://…\" />\n * </hx-popover>\n * ```\n *\n * `toggle(event, target?)`, `show(event, target?)` and `hide()` open it below the element of the event (or `target`),\n * or above when there is no room. An outside click and Escape close it. It is a non-modal `role=\"dialog\"`: the focus\n * moves to its first control when it has one and returns to the element that opened it when it closes, and the page\n * behind stays reachable. Name it with `ariaLabel` or `ariaLabelledBy`, and put `aria-haspopup=\"dialog\"` on the\n * trigger. Projected content is created with the popover, only shown while it is open.\n */\n@Component({\n selector: 'hx-popover',\n imports: [CdkConnectedOverlay],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-popover-anchor' },\n template: `\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-popover-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin() ?? fallbackOrigin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onKeydown($event)\"\n (positionChange)=\"onPosition($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"onDetach()\"\n >\n <div\n #panel\n class=\"hx-popover\"\n [class]=\"panelClass() ?? ''\"\n [attr.role]=\"role()\"\n [class.hx-popover-above]=\"above()\"\n [class.hx-popover-end]=\"end()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n [attr.aria-describedby]=\"ariaDescribedBy() || null\"\n >\n <div class=\"hx-popover-content\"><ng-content /></div>\n </div>\n </ng-template>\n `,\n})\nexport class HxPopover {\n readonly #injector = inject(Injector);\n private readonly panel = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Accessible name of the popover. */\n readonly ariaLabel = input<string>();\n readonly ariaLabelledBy = input<string>();\n readonly ariaDescribedBy = input<string>();\n /** `alertdialog` for a question that needs an answer (the confirm popup). */\n readonly role = input<'dialog' | 'alertdialog'>('dialog');\n /** Extra CSS classes on the panel. */\n readonly panelClass = input<string>();\n /** A click outside closes it. */\n readonly dismissable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly open = signal(false);\n protected readonly origin = signal<Element | null>(null);\n protected readonly fallbackOrigin = document.body;\n /** The popover is above the element (no room below). */\n protected readonly above = signal(false);\n /** The popover is aligned to the end edge of the element (no room to extend to the right). */\n protected readonly end = signal(false);\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\n ];\n\n /** Opens it at the element of the event (or `target`), or closes it when it is open. */\n toggle(event: Event | Element, target?: Element | null): void {\n if (this.open()) this.hide();\n else this.show(event, target);\n }\n\n /** Opens it at `target`, else at the element of the event; an element can be passed instead of an event. */\n show(event: Event | Element, target?: Element | null): void {\n if (this.open()) return;\n const fromEvent =\n event instanceof Element ? event : ((event.currentTarget ?? event.target) as Element | null);\n this.origin.set(target ?? fromEvent);\n this.open.set(true);\n this.shown.emit();\n }\n\n hide(refocus = true): void {\n if (!this.open()) return;\n this.open.set(false);\n this.hidden.emit();\n if (refocus) (this.origin() as HTMLElement | null)?.focus?.();\n }\n\n protected onPosition(change: ConnectedOverlayPositionChange): void {\n this.above.set(change.connectionPair.overlayY === 'bottom');\n this.end.set(change.connectionPair.overlayX === 'end');\n }\n\n protected onAttach(): void {\n afterNextRender(\n () => {\n const first = this.panel()?.nativeElement.querySelector<HTMLElement>(\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=hidden]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n );\n first?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onDetach(): void {\n if (this.open()) {\n this.open.set(false);\n this.hidden.emit();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.closeOnEscape()) {\n event.preventDefault();\n this.hide();\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.dismissable()) return;\n if (!this.origin()?.contains(event.target as Node)) this.hide(false);\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n Injectable,\n inject,\n signal,\n type TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { HxButton, type HxButtonSeverity } from '../button/button';\nimport { HxDialogFrame } from '../dialog/dialog';\nimport { nextId } from '../internal/ids';\nimport { HxPopover } from '../popover/popover';\n\n/** One question for the user. */\nexport interface HxConfirmation {\n message: string;\n /** Title of a confirm dialog. */\n header?: string;\n /** CSS classes of an icon font, e.g. `pi pi-exclamation-triangle`. */\n icon?: string;\n acceptLabel?: string;\n rejectLabel?: string;\n acceptSeverity?: HxButtonSeverity;\n /**\n * An element (or the event that came from it): the question is asked in a popup anchored to it by\n * `<hx-confirm-popup />`. Without it the question is a centred dialog from `<hx-confirm-dialog />`.\n */\n target?: Element | Event | null;\n /** Called when the user accepts. */\n accept?: () => void;\n /** Called when the user rejects, presses Escape or clicks away. */\n reject?: () => void;\n}\n\n/**\n * Asks the user to confirm an action. Put `<hx-confirm-dialog />` and/or `<hx-confirm-popup />` once in the app\n * (e.g. in the root component), then:\n *\n * ```ts\n * confirmation.confirm({ message: 'Delete this item?', header: 'Delete', accept: () => this.delete() });\n * if (await confirmation.confirmAsync({ message: 'Discard changes?', target: event })) { … }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class HxConfirmationService {\n /** The questions, in order. The two components listen to it. */\n readonly requests = new Subject<HxConfirmation>();\n\n confirm(confirmation: HxConfirmation): void {\n this.requests.next(confirmation);\n }\n\n /** Resolves to `true` when accepted and to `false` when rejected or dismissed. */\n confirmAsync(confirmation: HxConfirmation): Promise<boolean> {\n return new Promise((resolve) =>\n this.confirm({\n ...confirmation,\n accept: () => {\n confirmation.accept?.();\n resolve(true);\n },\n reject: () => {\n confirmation.reject?.();\n resolve(false);\n },\n }),\n );\n }\n}\n\nconst targetOf = (target: Element | Event | null | undefined): Element | null =>\n target instanceof Element\n ? target\n : target\n ? ((target.currentTarget ?? target.target) as Element | null)\n : null;\n\n/**\n * Shows the questions of `HxConfirmationService.confirm` that have no `target` as a centred modal\n * `role=\"alertdialog\"`: the message describes it, the focus starts on the reject button, Escape rejects. Questions that\n * arrive while one is open wait their turn. Clicking the mask does nothing: the user must answer.\n */\n@Component({\n selector: 'hx-confirm-dialog',\n imports: [HxDialogFrame, HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-confirm-anchor' },\n template: `\n <ng-template #panel>\n @if (current(); as c) {\n <hx-dialog-frame [header]=\"c.header\" [titleId]=\"titleId\" [closable]=\"false\">\n <div class=\"hx-confirm-content\">\n @if (c.icon) {\n <span class=\"hx-confirm-icon\" [class]=\"c.icon\" aria-hidden=\"true\"></span>\n }\n <p class=\"hx-confirm-message\" [id]=\"messageId\">{{ c.message }}</p>\n </div>\n <ng-container ngProjectAs=\"[hxDialogFooter]\">\n <button hx-button type=\"button\" variant=\"text\" severity=\"secondary\" class=\"hx-confirm-reject\" (click)=\"answer(false)\">{{ c.rejectLabel ?? 'No' }}</button>\n <button hx-button type=\"button\" class=\"hx-confirm-accept\" [severity]=\"c.acceptSeverity ?? 'primary'\" (click)=\"answer(true)\">{{ c.acceptLabel ?? 'Yes' }}</button>\n </ng-container>\n </hx-dialog-frame>\n }\n </ng-template>\n `,\n})\nexport class HxConfirmDialog {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n\n protected readonly current = signal<HxConfirmation | null>(null);\n protected readonly titleId = nextId('hx-confirm-title');\n protected readonly messageId = nextId('hx-confirm-message');\n readonly #queue: HxConfirmation[] = [];\n #ref: DialogRef<boolean, unknown> | undefined;\n\n constructor() {\n const subscription = inject(HxConfirmationService).requests.subscribe((request) => {\n if (targetOf(request.target)) return; // the popup's\n this.#queue.push(request);\n this.#next();\n });\n effect(() => {\n // a question that arrived before the template existed\n this.panel();\n untracked(() => this.#next());\n });\n inject(DestroyRef).onDestroy(() => {\n subscription.unsubscribe();\n this.#ref?.close();\n });\n }\n\n #next(): void {\n const panel = this.panel();\n if (this.#ref || !panel) return;\n const request = this.#queue.shift();\n if (!request) return;\n this.current.set(request);\n const ref = this.#dialog.open<boolean>(panel, {\n role: 'alertdialog',\n hasBackdrop: true,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: 'hx-confirm-panel',\n width: '28rem',\n maxWidth: 'calc(100vw - 2rem)',\n positionStrategy: this.#overlay.position().global().centerHorizontally().centerVertically(),\n ariaModal: true,\n ariaDescribedBy: this.messageId,\n ariaLabelledBy: request.header ? this.titleId : null,\n ariaLabel: request.header ? null : 'Confirmation',\n disableClose: true,\n autoFocus: '.hx-confirm-reject',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n ref.close(false);\n }\n });\n ref.closed.subscribe((accepted) => {\n this.#ref = undefined;\n this.current.set(null);\n if (accepted) request.accept?.();\n else request.reject?.();\n this.#next();\n });\n }\n\n protected answer(accepted: boolean): void {\n this.#ref?.close(accepted);\n }\n}\n\n/**\n * Shows the questions of `HxConfirmationService.confirm` that have a `target` in a popup anchored to it, as a\n * `role=\"alertdialog\"` with the message as its description. The focus starts on the reject button; Escape and a click\n * outside reject.\n */\n@Component({\n selector: 'hx-confirm-popup',\n imports: [HxPopover, HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-confirm-anchor' },\n template: `\n <hx-popover #popover role=\"alertdialog\" panelClass=\"hx-confirm-popup\" ariaLabel=\"Confirmation\" [ariaDescribedBy]=\"messageId\" (hidden)=\"onHidden()\">\n @if (current(); as c) {\n <div class=\"hx-confirm-popup-content\">\n @if (c.icon) {\n <span class=\"hx-confirm-popup-icon\" [class]=\"c.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-confirm-popup-message\" [id]=\"messageId\">{{ c.message }}</span>\n </div>\n <div class=\"hx-confirm-popup-footer\">\n <button hx-button type=\"button\" variant=\"text\" severity=\"secondary\" size=\"small\" class=\"hx-confirm-reject\" (click)=\"answer(false)\">{{ c.rejectLabel ?? 'No' }}</button>\n <button hx-button type=\"button\" size=\"small\" class=\"hx-confirm-accept\" [severity]=\"c.acceptSeverity ?? 'primary'\" (click)=\"answer(true)\">{{ c.acceptLabel ?? 'Yes' }}</button>\n </div>\n }\n </hx-popover>\n `,\n})\nexport class HxConfirmPopup {\n private readonly popover = viewChild.required<HxPopover>('popover');\n protected readonly current = signal<HxConfirmation | null>(null);\n protected readonly messageId = nextId('hx-confirm-popup-message');\n #answered = false;\n\n constructor() {\n const subscription = inject(HxConfirmationService).requests.subscribe((request) => {\n const target = targetOf(request.target);\n if (!target) return; // the dialog's\n const popover = this.popover();\n if (popover.open()) popover.hide(false); // the open question counts as rejected\n this.#answered = false;\n this.current.set(request);\n popover.show(target);\n });\n inject(DestroyRef).onDestroy(() => subscription.unsubscribe());\n }\n\n protected answer(accepted: boolean): void {\n const request = this.current();\n if (!request) return;\n this.#answered = true;\n this.popover().hide();\n if (accepted) request.accept?.();\n else request.reject?.();\n }\n\n /** Closed by Escape, a click outside or a new question: no answer means no. */\n protected onHidden(): void {\n const request = this.current();\n if (request && !this.#answered) request.reject?.();\n this.#answered = true;\n }\n}\n","import {\n afterEveryRender,\n afterNextRender,\n booleanAttribute,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nexport type HxInputSize = 'small' | 'medium' | 'large';\nexport type HxInputVariant = 'outlined' | 'filled';\n\n/**\n * A native `<input>` or `<textarea>` styled as a Helix text field. It works with template-driven forms,\n * reactive forms and signal forms unchanged: the element stays a native control.\n *\n * ```html\n * <label for=\"name\">Name</label>\n * <input hx-input id=\"name\" [(ngModel)]=\"name\" />\n * <textarea hx-input variant=\"filled\" rows=\"4\"></textarea>\n * <textarea hx-input autoResize rows=\"2\"></textarea>\n * <input hx-input [attr.aria-invalid]=\"invalid() ? 'true' : null\" aria-describedby=\"name-error\" />\n * ```\n *\n * The invalid look comes from `aria-invalid=\"true\"` (set it yourself or let the forms API do it) and from\n * Angular's `ng-invalid ng-touched` classes. `autoResize` (textarea only) makes the height follow the content,\n * with `rows` as the minimum; it also follows a value a form writes. Always give a field a visible `<label>`; a placeholder is a hint.\n */\n@Directive({\n selector: 'input[hx-input], textarea[hx-input]',\n exportAs: 'hx-input',\n host: {\n class: 'hx-input',\n '[class.hx-input-filled]': \"variant() === 'filled'\",\n '[class.hx-input-sm]': \"size() === 'small'\",\n '[class.hx-input-lg]': \"size() === 'large'\",\n '[class.hx-input-fluid]': 'fluid()',\n '[class.hx-input-auto-resize]': 'autoResize()',\n '(input)': 'resize()',\n },\n})\nexport class HxInput {\n /** `outlined` (default) or a tinted `filled` field. */\n readonly variant = input<HxInputVariant>('outlined');\n\n readonly size = input<HxInputSize>('medium');\n\n /** Takes the full width of the container. */\n readonly fluid = input(false, { transform: booleanAttribute });\n\n /** Textarea only: grows and shrinks with its content, `rows` is the minimum height. */\n readonly autoResize = input(false, { transform: booleanAttribute });\n\n readonly #el =\n inject<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(ElementRef).nativeElement;\n #measured = { value: '', width: -1 };\n\n constructor() {\n // a form writes its value without an `input` event: signal forms render again (check after every render,\n // cheap when nothing changed); ngModel and reactive forms announce it on `valueChanges`, after the write\n afterEveryRender({ write: () => this.resize() });\n const control = inject(NgControl, { self: true, optional: true });\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n const sub = control?.valueChanges?.subscribe(() => queueMicrotask(() => this.resize()));\n destroyRef.onDestroy(() => sub?.unsubscribe());\n });\n }\n\n protected resize(): void {\n const el = this.#el;\n if (!this.autoResize() || !(el instanceof HTMLTextAreaElement)) return;\n const width = el.offsetWidth;\n if (el.value === this.#measured.value && width === this.#measured.width) return;\n this.#measured = { value: el.value, width };\n const border = el.offsetHeight - el.clientHeight;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight + border}px`;\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxSelectSize = 'small' | 'medium' | 'large';\nexport type HxSelectVariant = 'outlined' | 'filled';\n\n/** The class of the select's list overlay (the CDK pane): a popup holding a select treats it as its own. */\nexport const HX_SELECT_OVERLAY_CLASS = 'hx-select-overlay';\n\n/** Whether `target` lies in the list overlay of an `hx-select` (a click or a focus move into an open list). */\nexport function isInSelectOverlay(target: EventTarget | null | undefined): boolean {\n return target instanceof Element && target.closest(`.${HX_SELECT_OVERLAY_CLASS}`) !== null;\n}\n\n/** An option as the select works with it, after `optionLabel`/`optionValue`/`optionDisabled` are applied. */\nexport type HxSelectItem<V = unknown> = HxOption<V>;\n\n/**\n * A single-value select: a `combobox` button that opens a listbox in a CDK connected overlay (typeahead,\n * Arrow/Home/End/Enter/Escape from the CDK listbox). A real form control for template-driven, reactive and\n * signal forms.\n *\n * ```html\n * <label for=\"city\">City</label>\n * <hx-select inputId=\"city\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\"\n * placeholder=\"Select a city\" [(ngModel)]=\"city\" />\n * <hx-select [options]=\"['Small', 'Medium', 'Large']\" [formField]=\"form.size\" />\n * ```\n *\n * `options` may hold primitives (label = the value as text) or objects (`optionLabel`, `optionValue` and\n * `optionDisabled` name a key or give a function; defaults `label`, `value` and `disabled`).\n * Give the select a visible `<label for>` (with `inputId`) or an `ariaLabel`.\n */\n@Component({\n selector: 'hx-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, CdkListbox, CdkOption],\n templateUrl: './select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSelect), multi: true }],\n host: {\n class: 'hx-select',\n '[class.hx-select-open]': 'open()',\n '[class.hx-select-filled]': \"variant() === 'filled'\",\n '[class.hx-select-sm]': \"size() === 'small'\",\n '[class.hx-select-lg]': \"size() === 'large'\",\n '[class.hx-select-fluid]': 'fluid()',\n '[class.hx-select-disabled]': 'isDisabled()',\n '[class.hx-select-has-clear]': 'canClear()',\n '[class.hx-select-invalid]': 'invalid()',\n '[class.hx-filled]': '!!selected()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxSelect<V = unknown> implements ControlValueAccessor, FormValueControl<V | null> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n protected readonly overlayClass = HX_SELECT_OVERLAY_CLASS;\n\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No options');\n /** A search field above the list that narrows the options (case-insensitive \"contains\"). */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Search');\n /** What the filter matches: a property name or accessor of an option; default the label. */\n readonly filterBy = input<Accessor<never, string>>();\n /** Shown when the filter matches nothing. */\n readonly emptyFilterMessage = input('No results');\n readonly size = input<HxSelectSize>('medium');\n readonly variant = input<HxSelectVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** Shows a button that resets the value to `null`. */\n readonly showClear = input(false, { transform: booleanAttribute });\n /** The `id` of the trigger, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** The `id` of a text that describes the select (a message about the last choice). */\n readonly ariaDescribedby = input<string | null>();\n /** How values are compared to find the selected option (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<V | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-select-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly listbox = viewChild(CdkListbox);\n private readonly filterField = viewChild<ElementRef<HTMLInputElement>>('filterField');\n protected readonly query = signal('');\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxSelectItem[]>(() =>\n resolveOptions(this.options(), this.optionLabel(), this.optionValue(), this.optionDisabled()),\n );\n\n protected readonly visibleItems = computed<HxSelectItem[]>(() => {\n const query = this.query().trim().toLowerCase();\n const items = this.items();\n if (!this.filter() || !query) return items;\n const by = this.filterBy();\n const options = this.options();\n return items.filter((item, i) => {\n const text = by === undefined ? item.label : this.#filterText(options[i], by, item.label);\n return text.toLowerCase().includes(query);\n });\n });\n\n protected readonly resultsLabel = computed(() => {\n const n = this.visibleItems().length;\n return n === 1 ? '1 result' : `${n} results`;\n });\n\n protected readonly selected = computed(() => {\n const compare = this.compareWith();\n const current = this.value();\n return current === null ? undefined : this.items().find((item) => compare(item.value, current));\n });\n\n protected readonly canClear = computed(\n () => this.showClear() && !!this.selected() && !this.isDisabled(),\n );\n\n protected readonly selectedValues = computed(() => {\n const item = this.selected();\n return item ? [item.value] : [];\n });\n\n #onChange: (value: V | null) => void = () => {};\n #onTouched: () => void = () => {};\n\n // ControlValueAccessor (template-driven and reactive forms)\n writeValue(value: V | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: V | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the trigger (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.trigger().nativeElement.focus(options);\n }\n\n protected toggle(): void {\n if (this.open()) this.close();\n else this.show();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.query.set('');\n if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the panel lives in the overlay template: focus the filter, or the list, once it has rendered\n afterNextRender(\n () => {\n const field = this.filterField();\n if (field) field.nativeElement.focus();\n else this.listbox()?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onFilterKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.listbox()?.focus();\n }\n }\n\n #filterText(option: unknown, by: Accessor<never, string>, fallback: string): string {\n if (option === null || typeof option !== 'object') return fallback;\n if (typeof by === 'function') return String((by as (o: unknown) => string)(option) ?? '');\n return by in option ? String((option as Record<string, unknown>)[by] ?? '') : '';\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n } else if (event.key === 'Tab') {\n this.close();\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<unknown>): void {\n const [picked] = event.value;\n this.#commit((picked ?? null) as V | null);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.#commit(null);\n this.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (this.open() || (next && this.#host.nativeElement.contains(next))) return;\n this.#touched();\n }\n\n #commit(value: V | null): void {\n this.value.set(value);\n this.#onChange(value);\n }\n\n #touched(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"hx-select-trigger\"\n role=\"combobox\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-describedby]=\"ariaDescribedby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"hx-select-label\" [class.hx-select-placeholder]=\"!selected()\">{{\n selected()?.label ?? placeholder()\n }}</span>\n <span class=\"hx-select-chevron\" aria-hidden=\"true\"></span>\n</button>\n@if (canClear()) {\n <button type=\"button\" class=\"hx-select-clear\" aria-label=\"Clear selection\" (click)=\"clear($event)\">\n <span class=\"hx-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n}\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayPanelClass]=\"overlayClass\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n>\n <div class=\"hx-select-panel\">\n @if (filter()) {\n <div class=\"hx-select-header\">\n <input\n #filterField\n type=\"text\"\n class=\"hx-select-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"panelId\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n (keydown)=\"onFilterKeydown($event)\"\n />\n </div>\n }\n <div\n cdkListbox\n class=\"hx-select-list\"\n [id]=\"panelId\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-select-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-select-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-select-empty\">{{ query().trim() ? emptyFilterMessage() : emptyMessage() }}</div>\n }\n </div>\n @if (filter()) {\n <span class=\"hx-select-sr-only\" aria-live=\"polite\">{{ resultsLabel() }}</span>\n }\n </div>\n</ng-template>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n numberAttribute,\n output,\n} from '@angular/core';\nimport { HxSelect } from '../select/select';\n\n/** What `pageChange` carries. */\nexport interface HxPageEvent {\n /** Index of the first record of the page (0-based). */\n first: number;\n /** Records per page. */\n rows: number;\n /** The page, 0-based. */\n page: number;\n pageCount: number;\n /** Set when the \"All\" size is chosen: `rows` is then the number of all records (at least 1). */\n all?: true;\n}\n\n/**\n * Page navigation for a list or table: first, previous, page links, next, last, and a rows-per-page select.\n *\n * ```html\n * <hx-paginator [rows]=\"10\" [totalRecords]=\"120\" [(first)]=\"first\" [rowsPerPageOptions]=\"[10, 20, 50]\"\n * showCurrentPageReport (pageChange)=\"load($event)\" />\n * ```\n *\n * `first` is the index of the first record shown, so the page is `first / rows`. A change of the rows per page keeps\n * the first record on screen. The paginator is a `nav`; the current page link has `aria-current=\"page\"`. Labels are\n * inputs, for translation.\n */\n@Component({\n selector: 'hx-paginator',\n imports: [HxSelect],\n templateUrl: './paginator.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-paginator' },\n})\nexport class HxPaginator {\n /** Records per page. */\n readonly rows = model(10);\n readonly totalRecords = input(0, { transform: numberAttribute });\n /** Index of the first record shown. */\n readonly first = model(0);\n /** Offers a rows-per-page select when given. */\n readonly rowsPerPageOptions = input<readonly (number | 'all')[]>();\n /** Page links shown at most (the current page stays in the middle). */\n readonly pageLinkSize = input(5, { transform: numberAttribute });\n readonly showCurrentPageReport = input(false, { transform: booleanAttribute });\n /** `{first}`, `{last}`, `{totalRecords}`, `{page}` and `{pageCount}` are replaced. */\n readonly currentPageReportTemplate = input('{first} - {last} of {totalRecords}');\n readonly showFirstLastButtons = input(true, { transform: booleanAttribute });\n\n readonly ariaLabel = input('Pagination');\n readonly firstPageLabel = input('First page');\n readonly previousPageLabel = input('Previous page');\n readonly nextPageLabel = input('Next page');\n readonly lastPageLabel = input('Last page');\n /** `{page}` is replaced by the page number (1-based). */\n readonly pageLabelTemplate = input('Page {page}');\n readonly rowsPerPageLabel = input('Rows per page');\n /** The label of the `'all'` entry of `rowsPerPageOptions`. */\n readonly allLabel = input('All');\n\n /** The \"All\" size is chosen: one page with every record; `rows` is left as it was. */\n readonly showAll = model(false);\n /** \"All\" is chosen and still offered by `rowsPerPageOptions`. */\n private readonly allSelected = computed(\n () => this.showAll() && !!this.rowsPerPageOptions()?.includes('all'),\n );\n /** The records per page in effect: all of them when \"All\" is chosen. */\n private readonly perPage = computed(() =>\n this.allSelected() ? Math.max(1, this.totalRecords()) : this.rows(),\n );\n protected readonly rowsValue = computed(() => (this.allSelected() ? 'all' : this.rows()));\n\n readonly pageChange = output<HxPageEvent>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.perPage()))),\n );\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.perPage()))),\n );\n protected readonly isFirst = computed(() => this.page() === 0);\n protected readonly isLast = computed(() => this.page() >= this.pageCount() - 1);\n\n /** The page numbers (0-based) of the links: a window of `pageLinkSize` around the current page. */\n protected readonly links = computed(() => {\n const count = this.pageCount();\n const size = Math.max(1, Math.min(this.pageLinkSize(), count));\n let start = Math.max(0, this.page() - Math.floor(size / 2));\n start = Math.min(start, count - size);\n return Array.from({ length: size }, (_, i) => start + i);\n });\n\n protected readonly rowsOptions = computed(() =>\n (this.rowsPerPageOptions() ?? []).map((n) => ({\n label: n === 'all' ? this.allLabel() : String(n),\n value: n,\n })),\n );\n\n protected readonly report = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.page() * this.perPage() + 1;\n const last = Math.min(total, (this.page() + 1) * this.perPage());\n return this.currentPageReportTemplate()\n .replace('{first}', String(first))\n .replace('{last}', String(last))\n .replace('{totalRecords}', String(total))\n .replace('{page}', String(this.page() + 1))\n .replace('{pageCount}', String(this.pageCount()));\n });\n\n protected pageLabel(page: number): string {\n return this.pageLabelTemplate().replace('{page}', String(page + 1));\n }\n\n /** Goes to a page (0-based); an out-of-range page is clamped. */\n goTo(page: number): void {\n const target = Math.min(this.pageCount() - 1, Math.max(0, page));\n if (target === this.page() && this.first() === target * this.perPage()) return;\n this.first.set(target * this.perPage());\n this.emit();\n }\n\n protected setRows(value: unknown): void {\n if (value === 'all') {\n if (this.allSelected()) return;\n this.showAll.set(true);\n this.first.set(0);\n this.emit();\n return;\n }\n const rows = Number(value);\n if (!rows || (rows === this.rows() && !this.allSelected())) return;\n this.showAll.set(false);\n this.rows.set(rows);\n // keep the first record of the page on screen\n this.first.set(Math.floor(this.first() / rows) * rows);\n this.emit();\n }\n\n private emit(): void {\n this.pageChange.emit({\n first: this.first(),\n rows: this.perPage(),\n page: this.page(),\n pageCount: this.pageCount(),\n ...(this.allSelected() ? { all: true as const } : {}),\n });\n }\n}\n","<nav class=\"hx-paginator-nav\" [attr.aria-label]=\"ariaLabel()\">\n @if (showCurrentPageReport()) {\n <span class=\"hx-paginator-report\" aria-live=\"polite\">{{ report() }}</span>\n }\n <div class=\"hx-paginator-pages\">\n @if (showFirstLastButtons()) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-first\" [disabled]=\"isFirst()\" [attr.aria-label]=\"firstPageLabel()\" [title]=\"firstPageLabel()\" (click)=\"goTo(0)\"></button>\n }\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-prev\" [disabled]=\"isFirst()\" [attr.aria-label]=\"previousPageLabel()\" [title]=\"previousPageLabel()\" (click)=\"goTo(page() - 1)\"></button>\n @for (p of links(); track p) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-page\" [class.hx-paginator-page-current]=\"p === page()\" [attr.aria-label]=\"pageLabel(p)\" [attr.aria-current]=\"p === page() ? 'page' : null\" (click)=\"goTo(p)\">{{ p + 1 }}</button>\n }\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-next\" [disabled]=\"isLast()\" [attr.aria-label]=\"nextPageLabel()\" [title]=\"nextPageLabel()\" (click)=\"goTo(page() + 1)\"></button>\n @if (showFirstLastButtons()) {\n <button type=\"button\" class=\"hx-paginator-button hx-paginator-last\" [disabled]=\"isLast()\" [attr.aria-label]=\"lastPageLabel()\" [title]=\"lastPageLabel()\" (click)=\"goTo(pageCount() - 1)\"></button>\n }\n </div>\n @if (rowsOptions().length) {\n <hx-select class=\"hx-paginator-rows\" [options]=\"rowsOptions()\" [value]=\"rowsValue()\" (valueChange)=\"setRows($event)\" [ariaLabel]=\"rowsPerPageLabel()\" />\n }\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\nexport type HxProgressMode = 'determinate' | 'indeterminate';\n\n/**\n * A bar that fills from 0 to 100, or slides while the duration is unknown.\n *\n * ```html\n * <hx-progress-bar [value]=\"progress()\" ariaLabel=\"Upload\" />\n * <hx-progress-bar mode=\"indeterminate\" ariaLabel=\"Loading\" />\n * ```\n *\n * `role=\"progressbar\"` with `aria-valuemin/max` and, when determinate, `aria-valuenow`; an indeterminate bar leaves\n * `aria-valuenow` out. Name it with `ariaLabel`. The slide stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-progress-bar',\n role: 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': 'indeterminate() ? null : clamped()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[class.hx-progress-bar-indeterminate]': 'indeterminate()',\n },\n template: `\n <div class=\"hx-progress-bar-value\" [style.width.%]=\"indeterminate() ? null : clamped()\">\n @if (showValue() && !indeterminate()) {\n <span class=\"hx-progress-bar-label\">{{ clamped() }}{{ unit() }}</span>\n }\n </div>\n `,\n})\nexport class HxProgressBar {\n /** 0 to 100; values outside are clamped. */\n readonly value = input(0, { transform: numberAttribute });\n readonly mode = input<HxProgressMode>('determinate');\n /** Shows the value and `unit` inside the bar. */\n readonly showValue = input(true, { transform: booleanAttribute });\n readonly unit = input('%');\n /** Accessible name. */\n readonly ariaLabel = input<string>();\n\n protected readonly indeterminate = computed(() => this.mode() === 'indeterminate');\n protected readonly clamped = computed(() => {\n const value = this.value();\n return Math.min(100, Math.max(0, Number.isFinite(value) ? Math.round(value) : 0));\n });\n}\n\n/**\n * A spinning circle for an operation of unknown duration.\n *\n * ```html\n * <hx-progress-spinner ariaLabel=\"Saving\" />\n * ```\n *\n * `role=\"progressbar\"` without `aria-valuenow` (indeterminate), named by `ariaLabel` (\"Loading\" by default). The\n * rotation stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-progress-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-progress-spinner',\n role: 'progressbar',\n '[attr.aria-label]': 'ariaLabel()',\n },\n template: `\n <svg class=\"hx-progress-spinner-svg\" viewBox=\"25 25 50 50\" aria-hidden=\"true\" [style.animation-duration]=\"animationDuration()\">\n <circle class=\"hx-progress-spinner-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" [attr.stroke-width]=\"strokeWidth()\" stroke-miterlimit=\"10\" [style.animation-duration]=\"animationDuration()\" />\n </svg>\n `,\n})\nexport class HxProgressSpinner {\n /** Width of the ring in the 50-unit drawing. */\n readonly strokeWidth = input('2');\n /** CSS time of one cycle of the colours. */\n readonly animationDuration = input('2s');\n readonly ariaLabel = input('Loading');\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n type ElementRef,\n effect,\n Injector,\n inject,\n input,\n isDevMode,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { HxButton } from '../button/button';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\nimport { type HxPageEvent, HxPaginator } from '../paginator/paginator';\nimport { HxPopover } from '../popover/popover';\nimport { HxProgressSpinner } from '../progress/progress';\nimport type { HxTableSize } from '../table/table';\n\nexport type HxColumnAlign = 'left' | 'center' | 'right';\n\n/** One column of an `hx-data-table`. */\nexport interface HxColumn {\n /** The property of the row shown in the column; a path (`address.city`) reads nested properties. */\n field: string;\n /** The header text. */\n header: string;\n /** The `title` attribute of the header cell (a tooltip). */\n title?: string;\n /** CSS width of the column (`8rem`, `20%`). */\n width?: string;\n /** Horizontal alignment of header and cells (the start edge by default). */\n align?: HxColumnAlign;\n /** The header is a button that sorts by the column. */\n sortable?: boolean;\n /** The column gets a text filter: in the filter row (`filterDisplay=\"row\"`) or in a popover from its header (`\"menu\"`). */\n filter?: boolean;\n /** The direction of the first click on the sort button (the table's `sortFirstOrder` by default). */\n sortFirstOrder?: HxSortFirstOrder;\n}\n\n/** The direction a sort starts with. */\nexport type HxSortFirstOrder = 'asc' | 'desc';\n\n/** What `rowClass` may return: anything `[class]` accepts. */\nexport type HxRowClass =\n | string\n | readonly string[]\n | Record<string, boolean | null | undefined>\n | null\n | undefined;\n\n/** One sorted column: `order` 1 is ascending, -1 descending. */\nexport interface HxSortMeta {\n field: string;\n order: 1 | -1;\n}\n\nexport type HxSortMode = 'single' | 'multiple';\n\n/** What `lazyLoad` carries: the state the data has to be loaded for. */\nexport interface HxLazyLoadEvent {\n first: number;\n rows: number;\n sortField: string | null;\n sortOrder: 1 | -1;\n multiSortMeta: HxSortMeta[];\n /** The text of each column filter, by field (empty filters are left out). */\n filters: Record<string, string>;\n /** The text of the global filter. */\n globalFilter: string;\n}\n\n/** Replaces the client-side sort: gets the rows and the sort state, returns the sorted rows. */\nexport type HxSortFunction = (\n rows: readonly unknown[],\n meta: readonly HxSortMeta[],\n) => readonly unknown[];\n\n/** The default order of two values: empty values last, numbers and dates by value, text by locale. */\nexport function compareValues(a: unknown, b: unknown): number {\n const aEmpty = a === null || a === undefined || a === '';\n const bEmpty = b === null || b === undefined || b === '';\n if (aEmpty || bEmpty) return aEmpty && bEmpty ? 0 : aEmpty ? 1 : -1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: 'base' });\n}\n\n/** The value of a (nested) property of a row. */\nexport function resolveField(row: unknown, field: string): unknown {\n let value: unknown = row;\n for (const key of field.split('.')) {\n if (value === null || value === undefined) return undefined;\n value = (value as Record<string, unknown>)[key];\n }\n return value;\n}\n\n/**\n * The template of the cells of one column: `<ng-template hxCell=\"price\" let-row let-value=\"value\">`. The context\n * has the row (`$implicit`), the `value` of the column's field and the `index` of the row.\n */\n@Directive({ selector: 'ng-template[hxCell]' })\nexport class HxCell {\n /** The `field` of the column. */\n readonly field = input.required<string>({ alias: 'hxCell' });\n readonly template = inject<TemplateRef<HxCellContext>>(TemplateRef);\n}\n\n/**\n * Extra content in the header of one column, beside the label and outside the sort button:\n * `<ng-template hxColumnHeader=\"price\" let-column>…</ng-template>`. The context has the column (`$implicit`).\n */\n@Directive({ selector: 'ng-template[hxColumnHeader]' })\nexport class HxColumnHeader {\n /** The `field` of the column. */\n readonly field = input.required<string>({ alias: 'hxColumnHeader' });\n readonly template = inject<TemplateRef<HxColumnHeaderContext>>(TemplateRef);\n}\n\nexport interface HxColumnHeaderContext {\n $implicit: HxColumn;\n}\n\nexport interface HxCellContext {\n $implicit: unknown;\n value: unknown;\n index: number;\n}\n\n/** Cells of the header row, replacing the generated headers: `<ng-template hxTableHeader let-columns>…<th>`. */\n@Directive({ selector: 'ng-template[hxTableHeader]' })\nexport class HxTableHeader {\n readonly template = inject<TemplateRef<HxTableColumnsContext>>(TemplateRef);\n}\n\n/** Cells of every body row, replacing the generated cells: `<ng-template hxTableBody let-row>…<td>`. */\n@Directive({ selector: 'ng-template[hxTableBody]' })\nexport class HxTableBody {\n readonly template = inject<TemplateRef<HxTableRowContext>>(TemplateRef);\n}\n\n/** Cells of the footer row: `<ng-template hxTableFooter let-columns>…<td>`; without it there is no footer. */\n@Directive({ selector: 'ng-template[hxTableFooter]' })\nexport class HxTableFooter {\n readonly template = inject<TemplateRef<HxTableColumnsContext>>(TemplateRef);\n}\n\n/** The content of the table's caption (the visible header above the table). */\n@Directive({ selector: 'ng-template[hxTableCaption]' })\nexport class HxTableCaption {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** The content of the empty row, replacing `emptyMessage`: `<ng-template hxTableEmpty>`. */\n@Directive({ selector: 'ng-template[hxTableEmpty]' })\nexport class HxTableEmpty {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/** The content of the row that opens below a row: `<ng-template hxRowExpansion let-row>`. */\n@Directive({ selector: 'ng-template[hxRowExpansion]' })\nexport class HxRowExpansion {\n readonly template = inject<TemplateRef<HxTableRowContext>>(TemplateRef);\n}\n\nexport type HxSelectionMode = 'single' | 'multiple';\n\nexport interface HxTableColumnsContext {\n $implicit: readonly HxColumn[];\n}\n\nexport interface HxTableRowContext {\n $implicit: unknown;\n index: number;\n columns: readonly HxColumn[];\n}\n\n/**\n * A data table on a native `<table>`: a column model, cell templates, caption, empty and loading state, striped\n * rows, gridlines, sizes and a scrolling body with a sticky header. It draws with the CSS of `table[hx-table]`.\n *\n * ```html\n * <hx-data-table [value]=\"invoices\" [columns]=\"columns\" dataKey=\"id\" caption=\"Invoices\" stripedRows>\n * <ng-template hxCell=\"amount\" let-value=\"value\">{{ value | currency: 'EUR' }}</ng-template>\n * </hx-data-table>\n * ```\n *\n * The table keeps the native semantics: a `<caption>` (drawn as the table header; visually hidden when only\n * `ariaLabel` is set), `<th scope=\"col\">` cells and `aria-busy` while `loading`. A scrolling table is a labelled,\n * focusable `region`. `filterDisplay=\"menu\"` puts the column filters in a popover opened from the header.\n */\n@Component({\n selector: 'hx-data-table',\n imports: [\n NgTemplateOutlet,\n HxProgressSpinner,\n HxPaginator,\n HxCheckbox,\n HxInput,\n HxButton,\n HxPopover,\n ],\n templateUrl: './data-table.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-data-table' },\n})\nexport class HxDataTable implements OnInit {\n /** The rows. */\n readonly value = input<readonly unknown[]>([]);\n readonly columns = input<readonly HxColumn[]>([]);\n /** The property that identifies a row (keeps the DOM of a row when the rows change). */\n readonly dataKey = input<string>();\n readonly size = input<HxTableSize>('medium');\n readonly stripedRows = input(false, { transform: booleanAttribute });\n readonly showGridlines = input(false, { transform: booleanAttribute });\n /** Rows change colour under the pointer (default on). */\n readonly hoverRows = input(true, { transform: booleanAttribute });\n readonly emptyMessage = input('No records found');\n /** Classes for the `<tr>` of a row: a string, an array or an object, as for `[class]`. */\n readonly rowClass = input<(row: never) => HxRowClass>();\n /** Text shown in a cell whose value is `null` or `undefined` (not for `0`, `false` or `''`). */\n readonly emptyValue = input('');\n /** The label of the `'all'` entry of `rowsPerPageOptions`. */\n readonly allLabel = input('All');\n /** Covers the table with a spinner and sets `aria-busy`. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Visible caption text above the table. */\n readonly caption = input<string>();\n /** The accessible name of the table; with no `caption` it becomes a visually hidden caption. */\n readonly ariaLabel = input<string>();\n /** The body scrolls inside this height (`300px`, `50vh`) and the header stays in view. */\n readonly scrollHeight = input<string>();\n /** A wide table scrolls horizontally instead of overflowing. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n\n /** `single`: one sorted column; `multiple`: a click adds the column to the sort order. */\n readonly sortMode = input<HxSortMode>('single');\n /** The sorted column in `single` mode. */\n readonly sortField = model<string | null>(null);\n /** 1 ascending, -1 descending (`single` mode). */\n readonly sortOrder = model<1 | -1>(1);\n /** The sorted columns in `multiple` mode, most important first. */\n readonly multiSortMeta = model<HxSortMeta[]>([]);\n /** Replaces the client-side sort. */\n readonly sortFunction = input<HxSortFunction>();\n /** The direction of the first click on a sortable column; a column's own `sortFirstOrder` wins. */\n readonly sortFirstOrder = input<HxSortFirstOrder>('asc');\n\n /** Shows a paginator below the table. */\n readonly paginator = input(false, { transform: booleanAttribute });\n readonly rows = model(10);\n readonly first = model(0);\n readonly rowsPerPageOptions = input<readonly (number | 'all')[]>();\n readonly showCurrentPageReport = input(true, { transform: booleanAttribute });\n /** The rows are paged and sorted elsewhere: the table only shows `value` and emits `lazyLoad`. */\n readonly lazy = input(false, { transform: booleanAttribute });\n /** The number of all records when `lazy` (otherwise the length of `value`). */\n readonly totalRecords = input<number>();\n /** Emits `lazyLoad` once on init (default on). */\n readonly lazyLoadOnInit = input(true, { transform: booleanAttribute });\n\n /** Sort, page or rows-per-page changed while `lazy`: load the data for this state. */\n readonly lazyLoad = output<HxLazyLoadEvent>();\n\n /** `single`: a click selects a row; `multiple`: a checkbox column (or, with `metaKeySelection`, Ctrl/Cmd+click). */\n readonly selectionMode = input<HxSelectionMode>();\n /** The selected row (`single`) or rows (`multiple`). Rows are compared by `dataKey` when set. */\n readonly selection = model<unknown>(null);\n /** `multiple`: no checkbox column; a click selects only that row, Ctrl/Cmd+click adds or removes one. */\n readonly metaKeySelection = input(false, { transform: booleanAttribute });\n readonly selectAllLabel = input('Select all rows');\n /** `{row}` is replaced by the row number (1-based). */\n readonly selectRowLabel = input('Select row {row}');\n\n /** The properties of a row the global filter looks in (`filterGlobal`). */\n readonly globalFilterFields = input<readonly string[]>([]);\n /**\n * `row`: a filter row with a text input under the headers of columns with `filter: true`. `menu`: a filter button in\n * those headers that opens a popover with the text input.\n */\n readonly filterDisplay = input<'row' | 'menu'>();\n /** The text of the column filters, by field. */\n readonly filters = model<Record<string, string>>({});\n readonly filterLabel = input('Filter {header}');\n /** The text of the button that empties a filter in the header menu. */\n readonly clearLabel = input('Clear');\n protected readonly filterPopover = viewChild(HxPopover);\n protected readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n /** The column whose filter popover is open. */\n protected readonly activeFilterColumn = signal<HxColumn | null>(null);\n private readonly injector = inject(Injector);\n\n /** The rows that are open (by `dataKey`, or the row index without one); needs a `hxRowExpansion` template. */\n readonly expandedRowKeys = model<Record<string, boolean>>({});\n readonly expandLabel = input('Expand row');\n readonly collapseLabel = input('Collapse row');\n\n protected readonly announcement = signal('');\n private readonly globalText = signal('');\n /** The paginator's \"All\" size is chosen: every row is shown, whatever `rows` says. */\n private readonly showAll = signal(false);\n /** A `rows` set from outside (or by the user) ends \"All\". */\n private readonly resetAll = effect(() => {\n this.rows();\n untracked(() => this.showAll.set(false));\n });\n private readonly allActive = computed(\n () => this.showAll() && !!this.rowsPerPageOptions()?.includes('all'),\n );\n\n protected readonly cellTemplates = contentChildren(HxCell);\n protected readonly columnHeaderTemplates = contentChildren(HxColumnHeader);\n protected readonly headerTemplate = contentChild(HxTableHeader);\n protected readonly bodyTemplate = contentChild(HxTableBody);\n protected readonly footerTemplate = contentChild(HxTableFooter);\n protected readonly captionTemplate = contentChild(HxTableCaption);\n protected readonly expansionTemplate = contentChild(HxRowExpansion);\n protected readonly emptyTemplate = contentChild(HxTableEmpty);\n\n /** The sort state as a list, whichever the mode. */\n protected readonly sortMeta = computed<HxSortMeta[]>(() =>\n this.sortMode() === 'multiple'\n ? this.multiSortMeta()\n : this.sortField()\n ? [{ field: this.sortField() as string, order: this.sortOrder() }]\n : [],\n );\n\n private readonly filtered = computed(() => {\n const value = this.value();\n if (this.lazy()) return value;\n const global = this.globalText().trim().toLowerCase();\n const fields = this.globalFilterFields();\n const columnFilters = Object.entries(this.filters()).filter(([, text]) => text.trim());\n if (!global && !columnFilters.length) return value;\n const has = (row: unknown, field: string, text: string) =>\n String(resolveField(row, field) ?? '')\n .toLowerCase()\n .includes(text);\n return value.filter(\n (row) =>\n (!global || fields.some((field) => has(row, field, global))) &&\n columnFilters.every(([field, text]) => has(row, field, text.trim().toLowerCase())),\n );\n });\n\n private readonly sorted = computed(() => {\n const value = this.filtered();\n const meta = this.sortMeta();\n if (this.lazy() || !meta.length) return value;\n const custom = this.sortFunction();\n if (custom) return custom(value, meta);\n return [...value].sort((a, b) => {\n for (const { field, order } of meta) {\n const result = compareValues(resolveField(a, field), resolveField(b, field));\n if (result) return result * order;\n }\n return 0;\n });\n });\n\n /** The number of records the paginator pages over. */\n protected readonly total = computed(() =>\n this.lazy() ? (this.totalRecords() ?? this.value().length) : this.sorted().length,\n );\n\n /** The rows the table draws: sorted, then the current page. */\n protected readonly visibleRows = computed(() => {\n const rows = this.sorted();\n if (!this.paginator() || this.lazy() || this.allActive()) return rows;\n return rows.slice(this.first(), this.first() + this.rows());\n });\n protected readonly cells = computed(\n () => new Map(this.cellTemplates().map((cell) => [cell.field(), cell.template])),\n );\n private readonly warnedFields = new Set<string>();\n protected readonly columnHeaders = computed(() => {\n const map = new Map<string, TemplateRef<HxColumnHeaderContext>>();\n for (const header of this.columnHeaderTemplates()) {\n const field = header.field();\n if (map.has(field) && isDevMode() && !this.warnedFields.has(field)) {\n this.warnedFields.add(field);\n console.warn(\n `hx-data-table: more than one hxColumnHeader template for \"${field}\"; the last one wins.`,\n );\n }\n map.set(field, header.template);\n }\n return map;\n });\n protected readonly scrolls = computed(() => this.scrollable() || !!this.scrollHeight());\n protected readonly hasCaption = computed(\n () => !!this.caption() || !!this.captionTemplate() || !!this.ariaLabel(),\n );\n protected readonly captionHidden = computed(() => !this.caption() && !this.captionTemplate());\n protected readonly checkboxColumn = computed(\n () => this.selectionMode() === 'multiple' && !this.metaKeySelection(),\n );\n protected readonly expanderColumn = computed(() => !!this.expansionTemplate());\n protected readonly selectable = computed(() => !!this.selectionMode() && !this.checkboxColumn());\n protected readonly filterRow = computed(\n () => this.filterDisplay() === 'row' && this.columns().some((c) => c.filter),\n );\n protected readonly colspan = computed(\n () =>\n Math.max(1, this.columns().length) +\n (this.checkboxColumn() ? 1 : 0) +\n (this.expanderColumn() ? 1 : 0),\n );\n\n private selectedRows(): unknown[] {\n const selection = this.selection();\n if (this.selectionMode() === 'multiple') return Array.isArray(selection) ? selection : [];\n return selection === null || selection === undefined ? [] : [selection];\n }\n\n private keyOf(row: unknown): unknown {\n const key = this.dataKey();\n return key ? resolveField(row, key) : row;\n }\n\n protected isSelected(row: unknown): boolean {\n const key = this.keyOf(row);\n return this.selectedRows().some((selected) => this.keyOf(selected) === key);\n }\n\n /** All filtered rows (of every page) are selected / some are. */\n protected readonly allSelected = computed(() => {\n const rows = this.filtered();\n return rows.length > 0 && rows.every((row) => this.isSelected(row));\n });\n protected readonly someSelected = computed(\n () => !this.allSelected() && this.filtered().some((row) => this.isSelected(row)),\n );\n\n protected toggleSelectAll(checked: boolean): void {\n const rows = this.filtered();\n const keys = new Set(rows.map((row) => this.keyOf(row)));\n const rest = this.selectedRows().filter((row) => !keys.has(this.keyOf(row)));\n this.selection.set(checked ? [...rest, ...rows] : rest);\n }\n\n protected toggleRowCheckbox(row: unknown, checked: boolean): void {\n const rest = this.selectedRows().filter((r) => this.keyOf(r) !== this.keyOf(row));\n this.selection.set(checked ? [...rest, row] : rest);\n }\n\n /** A click or Enter/Space on a row selects it (single mode, or multiple with `metaKeySelection`). */\n protected selectRow(row: unknown, event: Event): void {\n if (!this.selectable()) return;\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, input, a, select, textarea')) return;\n const selected = this.isSelected(row);\n if (this.selectionMode() === 'single') {\n this.selection.set(selected ? null : row);\n return;\n }\n const additive =\n (event as MouseEvent).ctrlKey || (event as MouseEvent).metaKey || event.type === 'keydown';\n if (additive) this.toggleRowCheckbox(row, !selected);\n else this.selection.set([row]);\n }\n\n protected onRowKey(row: unknown, event: Event): void {\n event.preventDefault();\n this.selectRow(row, event);\n }\n\n /** Filters every column in `globalFilterFields` for a text (case-insensitive, contains). */\n filterGlobal(text: string): void {\n this.globalText.set(text);\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected openFilter(event: Event, column: HxColumn): void {\n const popover = this.filterPopover();\n if (!popover) return;\n if (popover.open() && this.activeFilterColumn()?.field === column.field) {\n popover.hide();\n return;\n }\n const switching = popover.open();\n popover.hide(false);\n this.activeFilterColumn.set(column);\n popover.show(event, event.currentTarget as Element);\n // switching columns re-uses the open popover, which does not move the focus again\n if (switching) {\n afterNextRender(() => this.filterInput()?.nativeElement.focus(), { injector: this.injector });\n }\n }\n\n protected filterLabelFor(column: HxColumn): string {\n return this.filterLabel().replace('{header}', column.header);\n }\n\n protected clearFilter(column: HxColumn): void {\n this.setFilter(column, '');\n this.filterPopover()?.hide();\n }\n\n protected setFilter(column: HxColumn, text: string): void {\n const next = { ...this.filters() };\n if (text) next[column.field] = text;\n else delete next[column.field];\n this.filters.set(next);\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected rowKey(row: unknown, index: number): string {\n return String(this.dataKey() ? (resolveField(row, this.dataKey() as string) ?? index) : index);\n }\n\n protected isExpanded(row: unknown, index: number): boolean {\n return !!this.expandedRowKeys()[this.rowKey(row, index)];\n }\n\n protected toggleExpansion(row: unknown, index: number): void {\n const key = this.rowKey(row, index);\n const next = { ...this.expandedRowKeys() };\n if (next[key]) delete next[key];\n else next[key] = true;\n this.expandedRowKeys.set(next);\n }\n\n ngOnInit(): void {\n if (this.lazy() && this.lazyLoadOnInit()) this.emitLazy();\n }\n\n /** The order of a column (1, -1) or 0 when it is not sorted. */\n protected orderOf(column: HxColumn): 0 | 1 | -1 {\n return this.sortMeta().find((m) => m.field === column.field)?.order ?? 0;\n }\n\n protected ariaSort(column: HxColumn): 'ascending' | 'descending' | 'none' | null {\n if (!column.sortable) return null;\n const order = this.orderOf(column);\n return order === 1 ? 'ascending' : order === -1 ? 'descending' : 'none';\n }\n\n /** The position (1-based) of a column in a multi-column sort, when more than one column is sorted. */\n protected sortRank(column: HxColumn): number | null {\n const meta = this.sortMeta();\n if (this.sortMode() !== 'multiple' || meta.length < 2) return null;\n const index = meta.findIndex((m) => m.field === column.field);\n return index < 0 ? null : index + 1;\n }\n\n /** Sorts by a column: the first order, then the opposite, then not at all (ascending first by default). */\n sort(column: HxColumn): void {\n const order = this.orderOf(column);\n const firstOrder: 1 | -1 = (column.sortFirstOrder ?? this.sortFirstOrder()) === 'desc' ? -1 : 1;\n const next: 0 | 1 | -1 =\n order === 0 ? firstOrder : order === firstOrder ? (-firstOrder as 1 | -1) : 0;\n if (this.sortMode() === 'multiple') {\n const rest = this.multiSortMeta().filter((m) => m.field !== column.field);\n this.multiSortMeta.set(\n next === 0\n ? rest\n : order === 0\n ? [...rest, { field: column.field, order: next }]\n : this.multiSortMeta().map((m) =>\n m.field === column.field ? { ...m, order: next as 1 | -1 } : m,\n ),\n );\n } else {\n this.sortField.set(next === 0 ? null : column.field);\n this.sortOrder.set(next === 0 ? 1 : next);\n }\n this.announcement.set(\n next === 0\n ? `Sorting by ${column.header} removed`\n : `Sorted by ${column.header}, ${next === 1 ? 'ascending' : 'descending'}`,\n );\n this.first.set(0);\n if (this.lazy()) this.emitLazy();\n }\n\n protected onPage(event: HxPageEvent): void {\n this.first.set(event.first);\n if (!event.all) this.rows.set(event.rows);\n if (this.lazy()) this.emitLazy();\n }\n\n private emitLazy(): void {\n this.lazyLoad.emit({\n first: this.first(),\n rows: this.allActive() && this.total() > 0 ? this.total() : this.rows(),\n sortField:\n this.sortMode() === 'multiple'\n ? (this.multiSortMeta()[0]?.field ?? null)\n : this.sortField(),\n sortOrder:\n this.sortMode() === 'multiple' ? (this.multiSortMeta()[0]?.order ?? 1) : this.sortOrder(),\n multiSortMeta: this.sortMode() === 'multiple' ? this.multiSortMeta() : this.sortMeta(),\n filters: this.filters(),\n globalFilter: this.globalText(),\n });\n }\n\n protected trackRow(row: unknown, index: number): unknown {\n const key = this.dataKey();\n return key ? (resolveField(row, key) ?? index) : index;\n }\n\n protected rowClassOf(row: unknown): HxRowClass {\n return this.rowClass()?.(row as never);\n }\n\n protected valueOf(row: unknown, column: HxColumn): unknown {\n return resolveField(row, column.field);\n }\n}\n","<div class=\"hx-data-table-frame\" [attr.aria-busy]=\"loading() ? 'true' : null\">\n <div\n class=\"hx-table-scroll hx-data-table-scroll\"\n [class.hx-data-table-scrolls]=\"scrolls()\"\n [style.max-height]=\"scrollHeight() ?? null\"\n [attr.role]=\"scrolls() ? 'region' : null\"\n [attr.aria-label]=\"scrolls() ? (ariaLabel() ?? caption() ?? null) : null\"\n [attr.tabindex]=\"scrolls() ? 0 : null\"\n >\n <table\n class=\"hx-table\"\n [class.hx-table-sm]=\"size() === 'small'\"\n [class.hx-table-lg]=\"size() === 'large'\"\n [class.hx-table-striped]=\"stripedRows()\"\n [class.hx-table-gridlines]=\"showGridlines()\"\n [class.hx-table-hoverable]=\"hoverRows()\"\n [class.hx-table-sticky]=\"!!scrollHeight()\"\n >\n @if (hasCaption()) {\n <caption [class.hx-data-table-caption-hidden]=\"captionHidden()\">\n @if (captionTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n {{ caption() ?? ariaLabel() }}\n }\n </caption>\n }\n <thead>\n <tr>\n @if (expanderColumn()) {\n <th scope=\"col\" class=\"hx-data-table-expander-cell\"><span class=\"hx-data-table-caption-hidden\">Row details</span></th>\n }\n @if (checkboxColumn()) {\n <th scope=\"col\" class=\"hx-data-table-select-cell\">\n <input type=\"checkbox\" hx-checkbox [attr.aria-label]=\"selectAllLabel()\" [checked]=\"allSelected()\" [indeterminate]=\"someSelected()\" (change)=\"toggleSelectAll($any($event.target).checked)\" />\n </th>\n }\n @if (headerTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: columns() }\" />\n } @else {\n @for (column of columns(); track column.field) {\n <th\n scope=\"col\"\n [class]=\"'hx-data-table-align-' + (column.align ?? 'left')\"\n [class.hx-data-table-sorted]=\"orderOf(column) !== 0\"\n [style.width]=\"column.width ?? null\"\n [attr.aria-sort]=\"ariaSort(column)\"\n [attr.title]=\"column.title ?? null\"\n >\n @let extra = columnHeaders().get(column.field);\n @let menu = filterDisplay() === 'menu' && column.filter;\n @if (extra || menu) {\n <div class=\"hx-data-table-header-content\">\n <ng-container [ngTemplateOutlet]=\"label\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n @if (extra) {\n <ng-container [ngTemplateOutlet]=\"extra\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n }\n @if (menu) {\n <button\n type=\"button\"\n class=\"hx-data-table-filter-button\"\n [class.hx-data-table-filter-active]=\"!!filters()[column.field]\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"activeFilterColumn()?.field === column.field\"\n [attr.aria-label]=\"filterLabelFor(column)\"\n (click)=\"openFilter($event, column)\"\n >\n <span class=\"hx-data-table-filter-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"label\" [ngTemplateOutletContext]=\"{ $implicit: column }\" />\n }\n </th>\n }\n }\n </tr>\n @if (filterRow()) {\n <tr class=\"hx-data-table-filter-row\">\n @if (expanderColumn()) { <th></th> }\n @if (checkboxColumn()) { <th></th> }\n @for (column of columns(); track column.field) {\n <th>\n @if (column.filter) {\n <input type=\"text\" hx-input size=\"small\" fluid [attr.aria-label]=\"filterLabelFor(column)\" [value]=\"filters()[column.field] ?? ''\" (input)=\"setFilter(column, $any($event.target).value)\" />\n }\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (row of visibleRows(); track trackRow(row, $index); let i = $index) {\n <tr\n [class]=\"rowClassOf(row)\"\n [class.hx-data-table-selectable]=\"selectable()\"\n [attr.aria-selected]=\"selectionMode() ? (isSelected(row) ? 'true' : 'false') : null\"\n [attr.tabindex]=\"selectable() ? 0 : null\"\n (click)=\"selectRow(row, $event)\"\n (keydown.enter)=\"onRowKey(row, $event)\"\n (keydown.space)=\"onRowKey(row, $event)\"\n >\n @if (expanderColumn()) {\n <td class=\"hx-data-table-expander-cell\">\n <button type=\"button\" class=\"hx-data-table-expander\" [class.hx-data-table-expander-open]=\"isExpanded(row, i)\" [attr.aria-expanded]=\"isExpanded(row, i)\" [attr.aria-label]=\"isExpanded(row, i) ? collapseLabel() : expandLabel()\" (click)=\"toggleExpansion(row, i)\"></button>\n </td>\n }\n @if (checkboxColumn()) {\n <td class=\"hx-data-table-select-cell\">\n <input type=\"checkbox\" hx-checkbox [attr.aria-label]=\"selectRowLabel().replace('{row}', '' + (first() + i + 1))\" [checked]=\"isSelected(row)\" (change)=\"toggleRowCheckbox(row, $any($event.target).checked)\" />\n </td>\n }\n @if (bodyTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: row, index: i, columns: columns() }\" />\n } @else {\n @for (column of columns(); track column.field) {\n <td [class]=\"'hx-data-table-align-' + (column.align ?? 'left')\">\n @if (cells().get(column.field); as cell) {\n <ng-container [ngTemplateOutlet]=\"cell\" [ngTemplateOutletContext]=\"{ $implicit: row, value: valueOf(row, column), index: i }\" />\n } @else {\n {{ valueOf(row, column) ?? emptyValue() }}\n }\n </td>\n }\n }\n </tr>\n @if (expansionTemplate(); as tpl) {\n @if (isExpanded(row, i)) {\n <tr class=\"hx-data-table-expansion\">\n <td [attr.colspan]=\"colspan()\">\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: row, index: i, columns: columns() }\" />\n </td>\n </tr>\n }\n }\n } @empty {\n <tr class=\"hx-data-table-empty\">\n <td [attr.colspan]=\"colspan()\">\n @if (emptyTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n {{ emptyMessage() }}\n }\n </td>\n </tr>\n }\n </tbody>\n @if (footerTemplate(); as tpl) {\n <tfoot>\n <tr>\n @if (expanderColumn()) { <td></td> }\n @if (checkboxColumn()) { <td></td> }\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: columns() }\" />\n </tr>\n </tfoot>\n }\n </table>\n </div>\n <span class=\"hx-data-table-caption-hidden\" aria-live=\"polite\">{{ announcement() }}</span>\n @if (loading()) {\n <div class=\"hx-data-table-loading\" role=\"status\">\n <hx-progress-spinner ariaLabel=\"Loading\" />\n </div>\n }\n @if (paginator()) {\n <hx-paginator\n class=\"hx-data-table-paginator\"\n [rows]=\"rows()\"\n [first]=\"first()\"\n [totalRecords]=\"total()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n [showAll]=\"showAll()\"\n (showAllChange)=\"showAll.set($event)\"\n [allLabel]=\"allLabel()\"\n [showCurrentPageReport]=\"showCurrentPageReport()\"\n (pageChange)=\"onPage($event)\"\n />\n }\n</div>\n\n@if (filterDisplay() === 'menu') {\n @let active = activeFilterColumn();\n <hx-popover panelClass=\"hx-data-table-filter-popover\" [ariaLabel]=\"active ? filterLabelFor(active) : undefined\" (hidden)=\"activeFilterColumn.set(null)\">\n @if (active) {\n <div class=\"hx-data-table-filter-menu\">\n <input #filterInput type=\"text\" hx-input size=\"small\" fluid [attr.aria-label]=\"filterLabelFor(active)\" [value]=\"filters()[active.field] ?? ''\" (input)=\"setFilter(active, $any($event.target).value)\" (keydown.enter)=\"filterPopover()?.hide()\" />\n <button hx-button type=\"button\" size=\"small\" variant=\"text\" class=\"hx-data-table-filter-clear\" (click)=\"clearFilter(active)\">{{ clearLabel() }}</button>\n </div>\n }\n </hx-popover>\n}\n\n<ng-template #label let-column>\n @if (column.sortable) {\n <button type=\"button\" class=\"hx-data-table-sort\" (click)=\"sort(column)\">\n <span>{{ column.header }}</span>\n <span class=\"hx-data-table-sort-icon\" [class.hx-data-table-sort-asc]=\"orderOf(column) === 1\" [class.hx-data-table-sort-desc]=\"orderOf(column) === -1\" aria-hidden=\"true\"></span>\n @if (sortRank(column); as rank) {\n <span class=\"hx-data-table-sort-rank\" aria-hidden=\"true\">{{ rank }}</span>\n }\n </button>\n } @else {\n {{ column.header }}\n }\n</ng-template>\n","/** Date helpers of the date picker: they work on local calendar days; only `withTime` and `clampTime` look at the time of day. */\n\nexport function startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\n/** Moves by whole months and clamps the day (31 January + 1 month is the last day of February). */\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const last = daysInMonth(target.getFullYear(), target.getMonth());\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), last));\n}\n\nexport function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return (\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** Negative when `a` is before `b`, by day. */\nexport function compareDays(a: Date, b: Date): number {\n return startOfDay(a).getTime() - startOfDay(b).getTime();\n}\n\n/** The same day at the given local time. */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n\n/** `date` moved into `min`..`max` (either may be missing), compared including the time of day. */\nexport function clampTime(date: Date, min?: Date | null, max?: Date | null): Date {\n if (isValidDate(min) && date.getTime() < min.getTime()) return new Date(min);\n if (isValidDate(max) && date.getTime() > max.getTime()) return new Date(max);\n return date;\n}\n\nexport function isValidDate(value: unknown): value is Date {\n return value instanceof Date && !Number.isNaN(value.getTime());\n}\n\n/** The 7 × n cells of a month: `null` before the first and after the last day, a day otherwise. */\nexport function monthCells(year: number, month: number, firstDayOfWeek: number): (Date | null)[][] {\n const lead = (new Date(year, month, 1).getDay() - firstDayOfWeek + 7) % 7;\n const cells: (Date | null)[] = Array.from({ length: lead }, () => null);\n for (let d = 1; d <= daysInMonth(year, month); d++) cells.push(new Date(year, month, d));\n while (cells.length % 7 !== 0) cells.push(null);\n const rows: (Date | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) rows.push(cells.slice(i, i + 7));\n return rows;\n}\n","import { addDays, startOfDay } from '../internal/dates';\n\n/** A relative range in the popup's preset list; `from` and `to` are read when it is chosen (`now` stays current). */\nexport interface HxDateTimeRangePreset {\n label: string;\n /** Called with the picker's settings, so a calendar range can follow its `firstDayOfWeek`. */\n from: (context?: HxDateTimeRangePresetContext) => Date;\n to: (context?: HxDateTimeRangePresetContext) => Date;\n}\n\nexport interface HxDateTimeRangePresetContext {\n firstDayOfWeek: number;\n}\n\n/** The ends of a preset as a picker takes them: `null` for an empty end, `undefined` when the picker refuses one. */\nexport type HxPresetFit = (date: Date, side: 'from' | 'to') => Date | null | undefined;\n\n/**\n * Reads a preset against the current time and fits each end with `fit` (the day only without a time, refused on a\n * disabled day, ...); ends that come out reversed are ordered. `undefined` when `fit` refuses an end.\n */\nexport function hxResolvePreset(\n preset: HxDateTimeRangePreset,\n context: HxDateTimeRangePresetContext,\n fit: HxPresetFit,\n): { from: Date | null; to: Date | null } | undefined {\n const from = fit(preset.from(context), 'from');\n const to = fit(preset.to(context), 'to');\n if (from === undefined || to === undefined) return undefined;\n return from && to && to < from ? { from: to, to: from } : { from, to };\n}\n\n/** The ids of the built-in presets; `hxDateRangePresets` takes a label per id. */\nexport type HxDateRangePresetId =\n | 'last15Minutes'\n | 'last1Hour'\n | 'last6Hours'\n | 'last24Hours'\n | 'last7Days'\n | 'last30Days'\n | 'today'\n | 'yesterday'\n | 'thisWeek'\n | 'thisMonth';\n\nconst ENGLISH: Record<HxDateRangePresetId, string> = {\n last15Minutes: 'Last 15 minutes',\n last1Hour: 'Last 1 hour',\n last6Hours: 'Last 6 hours',\n last24Hours: 'Last 24 hours',\n last7Days: 'Last 7 days',\n last30Days: 'Last 30 days',\n today: 'Today',\n yesterday: 'Yesterday',\n thisWeek: 'This week',\n thisMonth: 'This month',\n};\n\nconst minutesAgo = (minutes: number) => () => new Date(Date.now() - minutes * 60_000);\nconst now = () => new Date();\n/** The last millisecond of the day, as the date math `roundUp` of `/d` (`now/d` as an end). */\nconst endOfDay = (date: Date) =>\n new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n/** The week starts on `firstDayOfWeek` (0 = Sunday, the picker's default). */\nconst startOfWeek = (date: Date, firstDayOfWeek = 0) =>\n addDays(startOfDay(date), -((date.getDay() - firstDayOfWeek + 7) % 7));\n\n/** The built-in ranges by id, in the order of the list. */\nconst RANGES: Record<HxDateRangePresetId, Pick<HxDateTimeRangePreset, 'from' | 'to'>> = {\n last15Minutes: { from: minutesAgo(15), to: now },\n last1Hour: { from: minutesAgo(60), to: now },\n last6Hours: { from: minutesAgo(360), to: now },\n last24Hours: { from: minutesAgo(1440), to: now },\n last7Days: { from: () => addDays(startOfDay(new Date()), -6), to: now },\n last30Days: { from: () => addDays(startOfDay(new Date()), -29), to: now },\n today: { from: () => startOfDay(new Date()), to: now },\n yesterday: {\n from: () => addDays(startOfDay(new Date()), -1),\n to: () => endOfDay(addDays(new Date(), -1)),\n },\n thisWeek: {\n from: (c) => startOfWeek(new Date(), c?.firstDayOfWeek),\n to: (c) => endOfDay(addDays(startOfWeek(new Date(), c?.firstDayOfWeek), 6)),\n },\n thisMonth: {\n from: () => new Date(new Date().getFullYear(), new Date().getMonth(), 1),\n to: () => endOfDay(new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0)),\n },\n};\n\nconst DAY_IDS: readonly HxDateRangePresetId[] = ['today', 'last7Days', 'thisMonth'];\n\nconst build = (\n ids: readonly HxDateRangePresetId[],\n labels: Partial<Record<HxDateRangePresetId, string>>,\n): HxDateTimeRangePreset[] =>\n ids.map((id) => ({ label: labels[id] ?? ENGLISH[id], ...RANGES[id] }));\n\n/**\n * The built-in presets with `labels` in place of the English ones (any id may be left out). `Today`, `Yesterday`,\n * `This week`, `This month` and the day-based `Last 7 days` / `Last 30 days` (calendar days: they start at midnight\n * of the first day, not 7 x 24 hours ago) start at midnight, so they also fit a picker without time pickers;\n * `today` and `Last N days` end now, `yesterday` and the `this ...` ranges end at 23:59:59.999 of their last day.\n */\nexport function hxDateRangePresets(\n labels: Partial<Record<HxDateRangePresetId, string>> = {},\n): HxDateTimeRangePreset[] {\n return build(Object.keys(RANGES) as HxDateRangePresetId[], labels);\n}\n\n/** All built-in presets with English labels (a fresh list per call is `hxDateRangePresets()`). */\nexport const HX_DATE_RANGE_PRESETS: readonly HxDateTimeRangePreset[] = hxDateRangePresets();\n\n/** The day-based built-in presets (no time of day) for a picker without time pickers: Today, Last 7 days, This month. */\nexport const HX_DATE_RANGE_DAY_PRESETS: readonly HxDateTimeRangePreset[] = build(DAY_IDS, {});\n","import { addDays, addMonths, compareDays, isSameDay } from '../dates';\n\nexport type CalendarView = 'day' | 'month' | 'year';\n\nexport interface DisabledRules {\n min?: Date | null;\n max?: Date | null;\n disabledDates?: readonly Date[];\n}\n\n/** `2026-9-5`, the `data-date` of a day button. */\nexport function dateKey(date: Date): string {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n/** Whether a day lies outside `min`..`max` (by day) or is one of `disabledDates`. */\nexport function isDateDisabled(date: Date, rules: DisabledRules): boolean {\n const { min, max, disabledDates = [] } = rules;\n return (\n (!!min && compareDays(date, min) < 0) ||\n (!!max && compareDays(date, max) > 0) ||\n disabledDates.some((d) => isSameDay(d, date))\n );\n}\n\n/** Whether a day lies strictly between the two dates of a complete range. */\nexport function isInRange(date: Date, selected: readonly Date[], mode: string): boolean {\n const [from, to] = selected;\n return (\n mode === 'range' && !!from && !!to && compareDays(date, from) > 0 && compareDays(date, to) < 0\n );\n}\n\n/** The focused day after the previous (`-1`) or next (`1`) button of the header: a month, a year or 12 years. */\nexport function stepFocus(view: CalendarView, current: Date, direction: 1 | -1): Date {\n const months = view === 'day' ? 1 : view === 'month' ? 12 : 144;\n return addMonths(current, months * direction);\n}\n\n/** The focused day after choosing a month (`0` to `11`) in the month view. */\nexport function focusMonth(current: Date, month: number): Date {\n return addMonths(new Date(current.getFullYear(), 0, current.getDate()), month);\n}\n\n/** The focused day after choosing a year in the year view. */\nexport function focusYear(current: Date, year: number): Date {\n return addMonths(new Date(year, current.getMonth(), 1), 0);\n}\n\n/** The 12 years of the page that holds `year`. */\nexport function decadeOf(year: number): number[] {\n const start = Math.floor(year / 12) * 12;\n return Array.from({ length: 12 }, (_, i) => start + i);\n}\n\n/** The day a key of the day grid moves the focus to, or `null` for a key that does nothing. */\nexport function dayKeyTarget(\n key: string,\n date: Date,\n firstDayOfWeek: number,\n shift = false,\n): Date | null {\n const weekday = (date.getDay() - firstDayOfWeek + 7) % 7;\n switch (key) {\n case 'ArrowLeft':\n return addDays(date, -1);\n case 'ArrowRight':\n return addDays(date, 1);\n case 'ArrowUp':\n return addDays(date, -7);\n case 'ArrowDown':\n return addDays(date, 7);\n case 'Home':\n return addDays(date, -weekday);\n case 'End':\n return addDays(date, 6 - weekday);\n case 'PageUp':\n return addMonths(date, shift ? -12 : -1);\n case 'PageDown':\n return addMonths(date, shift ? 12 : 1);\n default:\n return null;\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n Injector,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { isSameDay, monthCells } from '../dates';\nimport {\n type CalendarView,\n dateKey,\n dayKeyTarget,\n decadeOf,\n focusMonth,\n focusYear,\n isDateDisabled,\n isInRange,\n stepFocus,\n} from './calendar-helpers';\n\n/**\n * The calendar of `hx-date-picker`: the header with the month and year buttons, and the day, month and year views\n * with the keyboard of the day grid. It holds no value: the picker passes the selection in and takes `picked` out.\n * The markup and the `hx-date-picker-*` classes are the picker's.\n */\n@Component({\n selector: 'hx-calendar',\n templateUrl: './calendar.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents' },\n})\nexport class HxCalendar {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The day with the focus in the grid, and the month the grid shows. */\n readonly focusedDate = model.required<Date>();\n readonly view = model<CalendarView>('day');\n readonly selectedDates = input<readonly Date[]>([]);\n readonly selectionMode = input('single');\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n readonly firstDayOfWeek = input(0);\n readonly locale = input<string>();\n readonly disabled = input(false);\n readonly titleId = input.required<string>();\n readonly today = input.required<Date>();\n\n /** A day button was clicked (it may be a disabled day: the owner decides). */\n readonly picked = output<Date>();\n\n protected readonly viewYear = computed(() => this.focusedDate().getFullYear());\n\n readonly #formats = computed(() => {\n const locale = this.locale();\n return {\n month: new Intl.DateTimeFormat(locale, { month: 'long' }),\n monthShort: new Intl.DateTimeFormat(locale, { month: 'short' }),\n weekdayShort: new Intl.DateTimeFormat(locale, { weekday: 'short' }),\n weekdayLong: new Intl.DateTimeFormat(locale, { weekday: 'long' }),\n full: new Intl.DateTimeFormat(locale, { dateStyle: 'full' }),\n };\n });\n\n protected readonly monthName = computed(() => this.#formats().month.format(this.focusedDate()));\n protected readonly monthNames = computed(() =>\n Array.from({ length: 12 }, (_, m) => this.#formats().monthShort.format(new Date(2026, m, 1))),\n );\n protected readonly weekdays = computed(() => {\n const first = this.firstDayOfWeek();\n return Array.from({ length: 7 }, (_, i) => {\n const day = new Date(2026, 0, 4 + ((first + i) % 7)); // 4 January 2026 is a Sunday\n return {\n short: this.#formats().weekdayShort.format(day),\n long: this.#formats().weekdayLong.format(day),\n };\n });\n });\n protected readonly weeks = computed(() =>\n monthCells(\n this.focusedDate().getFullYear(),\n this.focusedDate().getMonth(),\n this.firstDayOfWeek(),\n ),\n );\n protected readonly decade = computed(() => decadeOf(this.focusedDate().getFullYear()));\n\n protected readonly dateKey = dateKey;\n\n protected dayLabel(date: Date): string {\n return this.#formats().full.format(date);\n }\n\n protected isToday(date: Date): boolean {\n return isSameDay(date, this.today());\n }\n\n protected isSelected(date: Date): boolean {\n return this.selectedDates().some((d) => isSameDay(d, date));\n }\n\n protected isInRange(date: Date): boolean {\n return isInRange(date, this.selectedDates(), this.selectionMode());\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n /** One day of the grid takes the tab stop: the focused day, or the first day when the focus is elsewhere. */\n protected isFocusTarget(date: Date): boolean {\n return isSameDay(date, this.focusedDate());\n }\n\n protected step(direction: 1 | -1): void {\n this.focusedDate.set(stepFocus(this.view(), this.focusedDate(), direction));\n }\n\n protected chooseMonth(month: number): void {\n this.focusedDate.set(focusMonth(this.focusedDate(), month));\n this.view.set('day');\n }\n\n protected chooseYear(year: number): void {\n this.focusedDate.set(focusYear(this.focusedDate(), year));\n this.view.set('month');\n }\n\n protected onDayKeydown(event: KeyboardEvent, date: Date): void {\n const target = dayKeyTarget(event.key, date, this.firstDayOfWeek(), event.shiftKey);\n if (!target) return;\n event.preventDefault();\n this.focusedDate.set(target);\n afterNextRender(() => this.focusDay(), { injector: this.#injector });\n }\n\n /** Moves the focus to the button of the focused day, if it is in the grid. */\n focusDay(): void {\n this.#host.nativeElement\n .querySelector<HTMLElement>(\n `.hx-date-picker-date[data-date=\"${dateKey(this.focusedDate())}\"]`,\n )\n ?.focus();\n }\n}\n","<div class=\"hx-date-picker-header\">\n <button\n type=\"button\"\n class=\"hx-date-picker-nav hx-date-picker-prev\"\n [attr.aria-label]=\"view() === 'day' ? 'Previous month' : view() === 'month' ? 'Previous year' : 'Previous years'\"\n [disabled]=\"disabled()\"\n (click)=\"step(-1)\"\n >\n <span class=\"hx-date-picker-prev-icon\" aria-hidden=\"true\"></span>\n </button>\n <div class=\"hx-date-picker-title\" [id]=\"titleId()\" aria-live=\"polite\">\n @switch (view()) {\n @case ('day') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('month')\">{{ monthName() }}</button>\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @case ('month') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"disabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @default {\n <span class=\"hx-date-picker-title-text\">{{ decade()[0] }} – {{ decade()[11] }}</span>\n }\n }\n </div>\n <button\n type=\"button\"\n class=\"hx-date-picker-nav hx-date-picker-next\"\n [attr.aria-label]=\"view() === 'day' ? 'Next month' : view() === 'month' ? 'Next year' : 'Next years'\"\n [disabled]=\"disabled()\"\n (click)=\"step(1)\"\n >\n <span class=\"hx-date-picker-next-icon\" aria-hidden=\"true\"></span>\n </button>\n</div>\n\n@switch (view()) {\n @case ('day') {\n <table class=\"hx-date-picker-grid\" role=\"grid\" [attr.aria-labelledby]=\"titleId()\" [attr.aria-multiselectable]=\"selectionMode() !== 'single' ? 'true' : null\">\n <thead>\n <tr>\n @for (day of weekdays(); track $index) {\n <th scope=\"col\" class=\"hx-date-picker-weekday\" [attr.abbr]=\"day.long\">{{ day.short }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of weeks(); track $index) {\n <tr>\n @for (cell of row; track $index) {\n @if (cell) {\n <td\n role=\"gridcell\"\n class=\"hx-date-picker-cell\"\n [attr.aria-selected]=\"isSelected(cell)\"\n >\n <button\n type=\"button\"\n class=\"hx-date-picker-date\"\n [class.hx-date-picker-date-selected]=\"isSelected(cell)\"\n [class.hx-date-picker-date-in-range]=\"isInRange(cell)\"\n [class.hx-date-picker-date-today]=\"isToday(cell)\"\n [attr.data-date]=\"dateKey(cell)\"\n [attr.tabindex]=\"isFocusTarget(cell) ? 0 : -1\"\n [attr.aria-label]=\"dayLabel(cell)\"\n [attr.aria-current]=\"isToday(cell) ? 'date' : null\"\n [attr.aria-disabled]=\"isDateDisabled(cell) ? 'true' : null\"\n [disabled]=\"disabled()\"\n (click)=\"picked.emit(cell)\"\n (keydown)=\"onDayKeydown($event, cell)\"\n >\n {{ cell.getDate() }}\n </button>\n </td>\n } @else {\n <td class=\"hx-date-picker-cell hx-date-picker-cell-empty\" role=\"gridcell\"></td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n }\n @case ('month') {\n <div class=\"hx-date-picker-months\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n class=\"hx-date-picker-month\"\n [class.hx-date-picker-month-selected]=\"$index === focusedDate().getMonth() && viewYear() === focusedDate().getFullYear()\"\n [disabled]=\"disabled()\"\n (click)=\"chooseMonth($index)\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n @default {\n <div class=\"hx-date-picker-years\">\n @for (year of decade(); track year) {\n <button\n type=\"button\"\n class=\"hx-date-picker-year\"\n [class.hx-date-picker-year-selected]=\"year === focusedDate().getFullYear()\"\n [disabled]=\"disabled()\"\n (click)=\"chooseYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n}\n","import { startOfDay, withTime } from '../dates';\n\n/** A date from the text: numbers in the order the locale writes them, or `yyyy-mm-dd`. */\nexport function parseDateText(text: string, locale?: string): Date | null {\n const numbers = text.match(/\\d+/g)?.map(Number);\n if (!numbers || numbers.length !== 3) return null;\n let [year, month, day] = [0, 0, 0];\n if (/^\\d{4}\\D/.test(text.trim())) {\n [year, month, day] = numbers;\n } else {\n const order = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n })\n .formatToParts(new Date(2000, 10, 22))\n .filter((p) => ['day', 'month', 'year'].includes(p.type))\n .map((p) => p.type);\n const byType = Object.fromEntries(order.map((type, i) => [type, numbers[i]]));\n [year, month, day] = [byType['year'], byType['month'], byType['day']];\n }\n if (year < 100) year += 2000;\n const date = new Date(year, month - 1, day);\n const sane =\n date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;\n return sane ? date : null;\n}\n\nexport interface DateTimeTextOptions {\n locale?: string;\n showMinutes: boolean;\n /** The text is only a time: the day is `fallbackDay`. */\n timeOnly: boolean;\n fallbackDay: Date;\n}\n\n/** A date and a time from the text (`10/09/2026, 3:45 PM`), or only a time for `timeOnly`. */\nexport function parseDateTimeText(text: string, options: DateTimeTextOptions): Date | null {\n const period12 = '(?:\\\\s*([ap])\\\\.?\\\\s*m\\\\.?)?';\n // hour only: `14` or `2 PM` at the end (with a date before it), else `14:30` or `14:30:05`\n const match = options.showMinutes\n ? new RegExp(`(\\\\d{1,2}):(\\\\d{2})(?::(\\\\d{2}))?${period12}`, 'i').exec(text)\n : new RegExp(`(?:^|[\\\\s,;T])(\\\\d{1,2})(?::00(?::00)?)?${period12}\\\\s*$`, 'i').exec(text);\n if (!match) return null;\n let hours = Number(match[1]);\n const hourOnly = !options.showMinutes;\n const [minutes, seconds] = hourOnly ? [0, 0] : [Number(match[2]), Number(match[3] ?? 0)];\n const period = (hourOnly ? match[2] : match[4])?.toLowerCase();\n if (period) {\n if (hours < 1 || hours > 12) return null;\n hours = (hours % 12) + (period === 'p' ? 12 : 0);\n }\n if (hours > 23 || minutes > 59 || seconds > 59) return null;\n const rest = text.replace(match[0], hourOnly ? ' ' : '').replace(/^[\\s,;T]+|[\\s,;T]+$/g, '');\n if (/\\p{L}/u.test(rest)) return null;\n const day =\n options.timeOnly && rest === ''\n ? startOfDay(options.fallbackDay)\n : parseDateText(rest, options.locale);\n return day && withTime(day, hours, minutes, seconds);\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport type { HxDateTimeRangePreset } from '../../date-range-presets/date-range-presets';\nimport { HxSelect } from '../../select/select';\n\n/**\n * Internal: the preset list of the range pickers (`hx-date-picker` in range mode, `hx-date-time-range-picker`),\n * as a group of native buttons or as one `hx-select`. It only shows the presets and reports a choice; the picker\n * applies it. The select shows `selected`: a choice the picker refuses (`selected` stays) is put back.\n */\n@Component({\n selector: 'hx-range-presets',\n imports: [HxSelect],\n template: `\n @if (display() === 'select') {\n <hx-select\n class=\"hx-range-preset-select\"\n fluid\n [options]=\"presets()\"\n optionLabel=\"label\"\n [optionValue]=\"presetValue\"\n [placeholder]=\"label()\"\n [ariaLabel]=\"label()\"\n [ariaDescribedby]=\"describedBy()\"\n [disabled]=\"disabled()\"\n [value]=\"selected()\"\n (valueChange)=\"chooseInSelect($event)\"\n />\n } @else {\n @for (preset of presets(); track $index) {\n <button\n type=\"button\"\n class=\"hx-date-picker-button hx-range-preset\"\n [disabled]=\"disabled()\"\n [attr.aria-describedby]=\"describedBy()\"\n (click)=\"chosen.emit(preset)\"\n >\n {{ preset.label }}\n </button>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-range-presets',\n '[class.hx-range-presets-select]': \"display() === 'select'\",\n '[attr.role]': \"display() === 'select' ? null : 'group'\",\n '[attr.aria-label]': \"display() === 'select' ? null : label()\",\n },\n})\nexport class HxRangePresets {\n readonly presets = input.required<readonly HxDateTimeRangePreset[]>();\n /** A row of `buttons` or one `select`. */\n readonly display = input<'buttons' | 'select'>('buttons');\n /** The name of the button group, or the select's name and placeholder. */\n readonly label = input('Presets');\n readonly disabled = input(false, { transform: booleanAttribute });\n /** The preset the select shows (`null`: the placeholder). */\n readonly selected = input<HxDateTimeRangePreset | null>(null);\n /** The `id` of a message about the last choice (a refused preset) for the buttons and the select. */\n readonly describedBy = input<string | null>(null);\n /** A preset was chosen (a button or an entry of the select). */\n readonly chosen = output<HxDateTimeRangePreset>();\n\n private readonly select = viewChild(HxSelect);\n /** The value of an option of the select: the preset itself. */\n protected readonly presetValue = (preset: HxDateTimeRangePreset) => preset;\n\n /** Set while the select is put back, whose model then reports the change again. */\n #restoring = false;\n\n protected chooseInSelect(preset: unknown): void {\n if (!preset || this.#restoring) return;\n this.chosen.emit(preset as HxDateTimeRangePreset);\n // the select shows what the picker says: a taken preset arrives through `selected`, a refused one is undone\n this.#restoring = true;\n try {\n this.select()?.value.set(this.selected());\n } finally {\n this.#restoring = false;\n }\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport {\n type HxDateTimeRangePreset,\n hxResolvePreset,\n} from '../date-range-presets/date-range-presets';\nimport { HxCalendar } from '../internal/calendar/calendar';\nimport { type CalendarView, isDateDisabled } from '../internal/calendar/calendar-helpers';\nimport { clampTime, compareDays, isSameDay, isValidDate, startOfDay } from '../internal/dates';\nimport { parseDateText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxRangePresets } from '../internal/range-presets/range-presets';\nimport { isInSelectOverlay } from '../select/select';\n\nconst startOfDayOrNull = (date: Date | null) => (isValidDate(date) ? startOfDay(date) : null);\n\nexport type HxDatePickerSelectionMode = 'single' | 'range' | 'multiple';\nexport type HxDatePickerValue = Date | Date[] | null;\n/**\n * A date field that opens a calendar, or with `[inline]=\"true\"` the calendar alone, to choose a day, a range or\n * several days. Typing a date in the field parses it; month and year views are one click on the title. Day, month and weekday names come from `Intl.DateTimeFormat` for the `locale`.\n *\n * ```html\n * <hx-date-picker inputId=\"arrival\" showIcon showButtonBar [(ngModel)]=\"arrival\" />\n * <hx-date-picker inline ariaLabel=\"Arrival\" [(ngModel)]=\"arrival\" />\n * <hx-date-picker inline selectionMode=\"range\" [minDate]=\"today\" [firstDayOfWeek]=\"1\" [(value)]=\"stay\" />\n * ```\n *\n * The value is a `Date` (`single`) or a `Date[]` (`multiple`; `range`: one date while the range is open, two when\n * it is complete). It works with `ngModel`, reactive forms and signal forms (`[formField]`).\n *\n * The field shows the value formatted with `Intl.DateTimeFormat` (`dateFormat` options, numeric by default so a\n * typed date parses back). The popup is a non-modal dialog: focus moves to the selected or today's day and returns\n * to the field on close; a range keeps it open until the second date.\n *\n * Keyboard in the day grid: arrows move by a day or a week, Home and End to the start and end of the week,\n * Page Up and Page Down by a month (with Shift by a year), Enter or Space selects.\n *\n * With `selectionMode=\"range\"`, `presets` lists ready-made ranges above the calendar (as buttons, or with\n * `presetDisplay=\"select\"` in a select), for example `HX_DATE_RANGE_DAY_PRESETS` (Today, Last 7 days, This month).\n * Choosing one sets the value at once to the days of its ends (midnight, in order; moved into `minDate`..`maxDate`)\n * and closes the popup. A preset with an end on a disabled day, or one that lies wholly outside\n * `minDate`..`maxDate`, is refused with an inline message (`presetRefusedLabel`, `role=\"alert\"`).\n *\n * ```html\n * <hx-date-picker selectionMode=\"range\" [presets]=\"dayPresets\" presetDisplay=\"select\" [(ngModel)]=\"stay\" />\n * ```\n */\n@Component({\n selector: 'hx-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxCalendar, HxRangePresets],\n templateUrl: './date-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxDatePicker), multi: true },\n ],\n host: {\n class: 'hx-date-picker',\n '[class.hx-date-picker-inline]': 'inline()',\n '[class.hx-date-picker-disabled]': 'isDisabled()',\n '[class.hx-date-picker-invalid]': 'invalid()',\n '[class.hx-date-picker-open]': 'open()',\n '[class.hx-date-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDatePicker implements ControlValueAccessor, FormValueControl<HxDatePickerValue> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A calendar button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Today and Clear buttons under the calendar of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /**\n * `Intl.DateTimeFormat` options of the text in the field. By default numeric, so a typed date parses back.\n */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly todayLabel = input('Today');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose date');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** Shows the calendar in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n readonly selectionMode = input<HxDatePickerSelectionMode>('single');\n /** The earliest and latest day that can be chosen. */\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n /** Days that cannot be chosen. */\n readonly disabledDates = input<readonly Date[]>([]);\n /** `0` Sunday … `6` Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** A BCP 47 tag for the names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** Ready-made ranges above the calendar, only with `selectionMode=\"range\"`; choosing one sets the value. */\n readonly presets = input<readonly HxDateTimeRangePreset[]>([]);\n /** The presets as a row of `buttons` (default) or in a compact `select`. */\n readonly presetDisplay = input<'buttons' | 'select'>('buttons');\n /** The name of the group of preset buttons, and of the preset select. */\n readonly presetsLabel = input('Presets');\n /** The message shown when a preset cannot be chosen (a disabled day, outside `minDate`..`maxDate`). */\n readonly presetRefusedLabel = input('This range cannot be chosen.');\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDatePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly titleId = nextId('hx-date-picker-title');\n protected readonly popupId = nextId('hx-date-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly calendar = viewChild(HxCalendar);\n /** The presets shown: range mode only. */\n protected readonly shownPresets = computed(() =>\n this.selectionMode() === 'range' ? this.presets() : [],\n );\n /** The last preset chosen and the value it made. */\n readonly #chosen = signal<{ preset: HxDateTimeRangePreset; from: Date; to: Date } | null>(null);\n /**\n * The preset the select shows: the chosen one while the value still holds its days, looked up by label in the\n * current list (a new `presets` array with the same entries keeps it).\n */\n protected readonly selectedPreset = computed(() => {\n const chosen = this.#chosen();\n if (!chosen) return null;\n const days = this.selectedDates();\n const same =\n days.length === 2 && isSameDay(days[0], chosen.from) && isSameDay(days[1], chosen.to);\n if (!same) return null;\n const list = this.shownPresets();\n return (\n list.find((p) => p === chosen.preset) ??\n list.find((p) => p.label === chosen.preset.label) ??\n null\n );\n });\n /** A preset was refused: the message under the presets, until the next choice or edit. */\n protected readonly presetError = signal(false);\n protected readonly presetErrorId = nextId('hx-date-picker-preset-error');\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n protected readonly view = signal<CalendarView>('day');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The day with the focus in the grid, and the month the grid shows. */\n protected readonly focusedDate = signal(startOfDay(new Date()));\n protected readonly today = startOfDay(new Date());\n\n protected readonly selectedDates = computed<Date[]>(() => {\n const value = this.value();\n if (Array.isArray(value)) return value.filter(isValidDate);\n return isValidDate(value) ? [value] : [];\n });\n\n readonly #format = computed(\n () =>\n new Intl.DateTimeFormat(\n this.locale(),\n this.dateFormat() ?? { day: '2-digit', month: '2-digit', year: 'numeric' },\n ),\n );\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const dates = this.selectedDates();\n const fmt = this.#format();\n if (this.selectionMode() === 'range') return dates.map((d) => fmt.format(d)).join(' – ');\n return dates.map((d) => fmt.format(d)).join(', ');\n });\n\n constructor() {\n // a value set from outside (a binding, a form) brings its month into view; without a value, today moved into\n // `minDate`..`maxDate` does\n effect(() => {\n const first =\n this.selectedDates()[0] ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate());\n const shown = untracked(() => this.focusedDate());\n if (\n first &&\n (first.getFullYear() !== shown.getFullYear() || first.getMonth() !== shown.getMonth())\n ) {\n this.focusedDate.set(startOfDay(first));\n }\n });\n }\n\n #onChange: (value: HxDatePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxDatePickerValue): void {\n this.#typed.set(null);\n this.presetError.set(false);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxDatePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the day of an inline calendar (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusDay();\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n protected isSelected(date: Date): boolean {\n return this.selectedDates().some((d) => isSameDay(d, date));\n }\n\n protected pick(date: Date): void {\n if (this.isDisabled() || this.isDateDisabled(date)) return;\n const day = startOfDay(date);\n this.focusedDate.set(day);\n const selected = this.selectedDates();\n let next: HxDatePickerValue;\n const mode = this.selectionMode();\n switch (mode) {\n case 'multiple':\n next = this.isSelected(day)\n ? selected.filter((d) => !isSameDay(d, day))\n : [...selected, day];\n break;\n case 'range': {\n if (selected.length !== 1) {\n next = [day];\n } else {\n next = compareDays(day, selected[0]) < 0 ? [day, selected[0]] : [selected[0], day];\n }\n break;\n }\n default:\n next = day;\n }\n this.#typed.set(null);\n this.#commit(next);\n if (!this.inline()) {\n const done =\n mode === 'single' || (mode === 'range' && Array.isArray(next) && next.length === 2);\n if (done) this.close(true);\n }\n }\n\n /**\n * Sets the value to the days of a preset (midnight, in order, inside `minDate`..`maxDate`) and closes the popup.\n * A preset with an end on a disabled day, or wholly outside `minDate`..`maxDate` (both ends before `minDate` or\n * both after `maxDate`), changes nothing and shows the inline message; one that overlaps the limits is cut to them.\n */\n protected applyPreset(preset: HxDateTimeRangePreset): void {\n if (this.isDisabled()) return;\n const range = hxResolvePreset(preset, { firstDayOfWeek: this.firstDayOfWeek() }, (date) =>\n this.#presetDay(date),\n );\n const [min, max] = [this.minDate(), this.maxDate()];\n const outside =\n !range?.from ||\n !range.to ||\n (isValidDate(min) && compareDays(range.to, min) < 0) ||\n (isValidDate(max) && compareDays(range.from, max) > 0);\n const from = range?.from && this.#inLimits(range.from);\n const to = range?.to && this.#inLimits(range.to);\n if (outside || !from || !to || this.isDateDisabled(from) || this.isDateDisabled(to)) {\n this.presetError.set(true);\n return;\n }\n const next = [from, to];\n this.#typed.set(null);\n this.focusedDate.set(from);\n this.#commit(next);\n this.#chosen.set({ preset, from, to });\n if (this.inline() || !this.open()) return;\n this.close();\n // after the render: the preset select puts the focus back on itself first, then the popup is gone\n afterNextRender(() => this.field()?.nativeElement.focus(), { injector: this.#injector });\n }\n\n /** An end of a preset as a day: midnight; `undefined` on a day in `disabledDates`, `null` for an invalid date. */\n #presetDay(date: Date): Date | null | undefined {\n if (!isValidDate(date)) return null;\n const day = startOfDay(date);\n return this.disabledDates().some((d) => isSameDay(d, day)) ? undefined : day;\n }\n\n /** A day moved into the days `minDate`..`maxDate`. */\n #inLimits(day: Date): Date {\n const max = this.maxDate();\n return clampTime(\n day,\n startOfDayOrNull(this.minDate()),\n isValidDate(max) ? startOfDay(max) : null,\n );\n }\n\n #commit(next: HxDatePickerValue): void {\n this.presetError.set(false);\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusDay(): void {\n afterNextRender(\n () => {\n this.calendar()?.focusDay();\n },\n { injector: this.#injector },\n );\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.presetError.set(false);\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n // the day to take the focus: the first selected day, or today moved into `minDate`..`maxDate`\n const first = this.selectedDates()[0];\n this.view.set('day');\n this.focusedDate.set(\n startOfDay(first ?? clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate())),\n );\n this.#focusDay();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n // the list of the preset select is its own overlay\n if (isInSelectOverlay(event.target)) return;\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable or disabled date puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null) return;\n this.#typed.set(null);\n this.#parseAndCommit(typed);\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n #parseAndCommit(typed: string): void {\n const text = typed.trim();\n if (text === '') {\n this.#commit(this.selectionMode() === 'single' ? null : []);\n return;\n }\n const parts = this.selectionMode() === 'single' ? [text] : text.split(/\\s*(?:,|–)\\s*/);\n const dates = parts.map((part) => this.#parse(part));\n if (dates.some((d) => d === null || this.isDateDisabled(d))) return;\n const valid = dates as Date[];\n if (this.selectionMode() === 'range' && valid.length > 2) return;\n this.#commit(this.selectionMode() === 'single' ? valid[0] : valid);\n if (valid[0]) this.focusedDate.set(startOfDay(valid[0]));\n }\n\n #parse(text: string): Date | null {\n return parseDateText(text, this.locale());\n }\n\n protected selectToday(): void {\n this.pick(this.today);\n }\n\n protected clear(): void {\n this.#typed.set(null);\n this.#commit(this.selectionMode() === 'single' ? null : []);\n this.close(true);\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-date-picker-popup') || this.#host.nativeElement.contains(next)) return;\n if (this.open()) return;\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n if (!this.inline()) return;\n const host = this.#host.nativeElement;\n const next = event.relatedTarget as Node | null;\n if (host.contains(next) || isInSelectOverlay(next)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"calendar\" />\n} @else {\n <div class=\"hx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-date-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-date-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? 'Choose date'\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"calendar\" />\n @if (showButtonBar()) {\n <div class=\"hx-date-picker-buttonbar\">\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"selectToday()\">{{ todayLabel() }}</button>\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #calendar>\n<div\n class=\"hx-date-picker-panel\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() ?? 'Calendar'\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onFocusOut($event)\"\n>\n @if (shownPresets().length > 0) {\n <hx-range-presets\n [presets]=\"shownPresets()\"\n [display]=\"presetDisplay()\"\n [label]=\"presetsLabel()\"\n [disabled]=\"isDisabled()\"\n [selected]=\"selectedPreset()\"\n [describedBy]=\"presetError() ? presetErrorId : null\"\n (chosen)=\"applyPreset($event)\"\n />\n @if (presetError()) {\n <p class=\"hx-date-picker-error\" role=\"alert\" [id]=\"presetErrorId\">{{ presetRefusedLabel() }}</p>\n }\n }\n <hx-calendar\n [(focusedDate)]=\"focusedDate\"\n [(view)]=\"view\"\n [selectedDates]=\"selectedDates()\"\n [selectionMode]=\"selectionMode()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [titleId]=\"titleId\"\n [today]=\"today\"\n (picked)=\"pick($event)\"\n />\n</div>\n</ng-template>\n","import { addMonths } from '../dates';\n\n/** A date math unit: second, minute, hour, day, week, Month (capital M, as in Kibana), year. */\nexport type HxDateMathUnit = 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y';\n\n/** Options for {@link hxParseDateMath}. */\nexport interface HxDateMathOptions {\n /** The instant `now` resolves to. Defaults to the current time. */\n now?: Date;\n /** The weekday a week starts on for `/w` (0 = Sunday, the default; 1 = Monday). */\n firstDayOfWeek?: number;\n /** Round `/unit` up to the last millisecond of the unit instead of down to its start (use for a range's end). */\n roundUp?: boolean;\n}\n\nconst EXPRESSION = /^now((?:[+-]\\d+[smhdwMy]|\\/[smhdwMy])*)$/;\nconst TOKEN = /([+-])(\\d+)([smhdwMy])|\\/([smhdwMy])/g;\nconst MS: Record<'s' | 'm' | 'h', number> = { s: 1000, m: 60_000, h: 3_600_000 };\n\nfunction add(date: Date, amount: number, unit: HxDateMathUnit): Date {\n switch (unit) {\n case 's':\n case 'm':\n case 'h':\n return new Date(date.getTime() + amount * MS[unit]);\n case 'd':\n case 'w': {\n // Calendar days, so the wall-clock time survives a DST change.\n const result = new Date(date);\n result.setDate(result.getDate() + amount * (unit === 'w' ? 7 : 1));\n return result;\n }\n case 'M':\n return addMonthsKeepingTime(date, amount);\n case 'y':\n return addMonthsKeepingTime(date, amount * 12);\n }\n}\n\n/** Like `addMonths` (clamps the day) but keeps the time of day. */\nfunction addMonthsKeepingTime(date: Date, months: number): Date {\n const day = addMonths(date, months);\n day.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return day;\n}\n\nfunction startOf(date: Date, unit: HxDateMathUnit, firstDayOfWeek: number): Date {\n const [y, mo, d, h, mi, s] = [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n ];\n switch (unit) {\n case 's':\n return new Date(y, mo, d, h, mi, s);\n case 'm':\n return new Date(y, mo, d, h, mi);\n case 'h':\n return new Date(y, mo, d, h);\n case 'd':\n return new Date(y, mo, d);\n case 'w':\n return new Date(y, mo, d - ((date.getDay() - firstDayOfWeek + 7) % 7));\n case 'M':\n return new Date(y, mo, 1);\n case 'y':\n return new Date(y, 0, 1);\n }\n}\n\nfunction round(date: Date, unit: HxDateMathUnit, options: HxDateMathOptions): Date {\n const start = startOf(date, unit, options.firstDayOfWeek ?? 0);\n if (!options.roundUp) return start;\n return new Date(add(start, 1, unit).getTime() - 1);\n}\n\n/**\n * Resolves a Kibana-style date math expression to a Date, or returns `null` when it is invalid (never throws).\n *\n * The expression is `now` followed by any number of adjustments: `+N<unit>` / `-N<unit>` shift by N units and\n * `/<unit>` rounds down to the start of the unit (or up to its last millisecond with `roundUp`). Units are\n * `s m h d w M y`, case-sensitive (`m` is minutes, `M` is months). Examples: `now`, `now-15m`, `now+2d`, `now/d`,\n * `now/w`, `now-1d/d`. Surrounding whitespace is ignored; the anchor must be `now`, amounts are non-negative\n * integers. Day, week, month and year shifts are calendar based (DST-safe); a month shift that overshoots clamps to\n * the last day of the target month (31 Mar - 1M = 28/29 Feb). `/w` honors `firstDayOfWeek`.\n */\nexport function hxParseDateMath(expression: string, options: HxDateMathOptions = {}): Date | null {\n const match = typeof expression === 'string' ? EXPRESSION.exec(expression.trim()) : null;\n const now = options.now ?? new Date();\n if (!match || Number.isNaN(now.getTime())) return null;\n\n let result = new Date(now);\n for (const token of match[1].matchAll(TOKEN)) {\n const [, sign, amount, shiftUnit, roundUnit] = token;\n result = roundUnit\n ? round(result, roundUnit as HxDateMathUnit, options)\n : add(result, (sign === '-' ? -1 : 1) * Number(amount), shiftUnit as HxDateMathUnit);\n if (Number.isNaN(result.getTime())) return null;\n }\n return result;\n}\n\n/**\n * The from/to expressions of a \"Last N\" or \"Next N\" range: `{ from: 'now-15m', to: 'now' }` for\n * `('last', 15, 'm')`, `{ from: 'now', to: 'now+2d' }` for `('next', 2, 'd')`. The amount must be a positive\n * safe integer, otherwise `null` is returned.\n */\nexport function hxRelativeRangeExpressions(\n direction: 'last' | 'next',\n amount: number,\n unit: HxDateMathUnit,\n): { from: string; to: string } | null {\n // a safe integer keeps the text plain digits (1e21 would print as `1e+21`, which is no date math)\n if (!Number.isSafeInteger(amount) || amount < 1) return null;\n return direction === 'last'\n ? { from: `now-${amount}${unit}`, to: 'now' }\n : { from: 'now', to: `now+${amount}${unit}` };\n}\n","import { type HxDateMathUnit, hxParseDateMath } from '../date-math/date-math';\n\n/** A range as two expressions: date math (`now-15m`, `now/d`) or an ISO date-time for an absolute side. */\nexport interface HxDateRangeExpression {\n from: string;\n to: string;\n}\n\n/** An entry of the quick select's \"Commonly used\" list. */\nexport interface HxQuickSelectRange extends HxDateRangeExpression {\n label: string;\n}\n\n/** The texts of the quick select; `{n}` and `{unit}` are replaced where a text names them. */\nexport interface HxQuickSelectLabels {\n quickSelect: string;\n last: string;\n next: string;\n amount: string;\n unit: string;\n direction: string;\n apply: string;\n commonlyUsed: string;\n recentlyUsed: string;\n start: string;\n end: string;\n absolute: string;\n relative: string;\n now: string;\n /** The text of the Now tab. */\n nowHint: string;\n /**\n * Shown when a range cannot be applied (a relative side next to an empty absolute side, a Relative tab with an\n * empty or invalid amount, a refused day, a typed date that cannot be read).\n */\n incompleteRange: string;\n /** The label of the typed date on the Absolute tab. */\n date: string;\n /** `Round to the {unit}` (with the singular unit name). */\n roundTo: string;\n /** `Last {n} {unit}` / `Next {n} {unit}` in the Recently used list. */\n lastRange: string;\n nextRange: string;\n /** The name of the start/end summary lines (`hx-date-range-quick-select`). */\n range: string;\n /** The summary of a side: `now`, `~ {n} {unit} ago`, `~ {n} {unit} from now`, with `rounded to the {unit}`. */\n nowSummary: string;\n agoSummary: string;\n fromNowSummary: string;\n roundedSummary: string;\n /** The summary of an empty side. */\n emptySide: string;\n /** `Resolves to {date}`: the date a relative or now side stands for at this moment (the side editor). */\n resolvesTo: string;\n /** The plural unit names (`minutes`) and the singular ones (`minute`, for `{n}` = 1 and `roundTo`). */\n units: Record<HxDateMathUnit, string>;\n unitsOne: Record<HxDateMathUnit, string>;\n /** The unit options of the Relative tab: `Minutes ago`, `Minutes from now`. */\n unitsAgo: Record<HxDateMathUnit, string>;\n unitsFromNow: Record<HxDateMathUnit, string>;\n}\n\n// Internal: the helpers without the `hx` prefix are shared with the picker but are not part of the public API.\n\nexport const QUICK_SELECT_UNITS: readonly HxDateMathUnit[] = ['s', 'm', 'h', 'd', 'w', 'M', 'y'];\n\n/** The English texts of the quick select (the default of `quickSelectLabels`). */\nexport const HX_QUICK_SELECT_LABELS: HxQuickSelectLabels = {\n quickSelect: 'Quick select',\n last: 'Last',\n next: 'Next',\n amount: 'Amount',\n unit: 'Unit',\n direction: 'Direction',\n apply: 'Apply',\n commonlyUsed: 'Commonly used',\n recentlyUsed: 'Recently used',\n start: 'Start',\n end: 'End',\n absolute: 'Absolute',\n relative: 'Relative',\n now: 'Now',\n nowHint: 'Set to the current time when the range is applied.',\n incompleteRange: 'Choose a start and an end that can be applied.',\n date: 'Date',\n roundTo: 'Round to the {unit}',\n lastRange: 'Last {n} {unit}',\n nextRange: 'Next {n} {unit}',\n range: 'Start and end',\n nowSummary: 'now',\n agoSummary: '~ {n} {unit} ago',\n fromNowSummary: '~ {n} {unit} from now',\n roundedSummary: 'rounded to the {unit}',\n emptySide: 'Not set',\n resolvesTo: 'Resolves to {date}',\n units: {\n s: 'seconds',\n m: 'minutes',\n h: 'hours',\n d: 'days',\n w: 'weeks',\n M: 'months',\n y: 'years',\n },\n unitsOne: { s: 'second', m: 'minute', h: 'hour', d: 'day', w: 'week', M: 'month', y: 'year' },\n unitsAgo: {\n s: 'Seconds ago',\n m: 'Minutes ago',\n h: 'Hours ago',\n d: 'Days ago',\n w: 'Weeks ago',\n M: 'Months ago',\n y: 'Years ago',\n },\n unitsFromNow: {\n s: 'Seconds from now',\n m: 'Minutes from now',\n h: 'Hours from now',\n d: 'Days from now',\n w: 'Weeks from now',\n M: 'Months from now',\n y: 'Years from now',\n },\n};\n\n/** The default \"Commonly used\" list (as in Kibana). */\nexport const HX_QUICK_SELECT_COMMONLY_USED: readonly HxQuickSelectRange[] = [\n { label: 'Today', from: 'now/d', to: 'now/d' },\n { label: 'This week', from: 'now/w', to: 'now/w' },\n { label: 'Last 15 minutes', from: 'now-15m', to: 'now' },\n { label: 'Last 30 minutes', from: 'now-30m', to: 'now' },\n { label: 'Last 1 hour', from: 'now-1h', to: 'now' },\n { label: 'Last 24 hours', from: 'now-24h', to: 'now' },\n { label: 'Last 7 days', from: 'now-7d', to: 'now' },\n { label: 'Last 30 days', from: 'now-30d', to: 'now' },\n { label: 'Last 90 days', from: 'now-90d', to: 'now' },\n { label: 'Last 1 year', from: 'now-1y', to: 'now' },\n];\n\n/** How many ranges the \"Recently used\" list keeps. */\nexport const RECENT_MAX = 5;\n\n/** The state of one side (start or end) in the quick select: its tab and the fields of the Relative tab. */\nexport interface QuickSelectSide {\n mode: 'absolute' | 'relative' | 'now';\n /** The amount of the Relative tab; `null` while its field is empty. */\n amount: number | null;\n unit: HxDateMathUnit;\n /** `ago` subtracts the amount (`now-15m`), `fromNow` adds it (`now+15m`). */\n direction: 'ago' | 'fromNow';\n /** Rounds to the unit (`now-15m/m`). */\n round: boolean;\n /** An expression from outside that the fields cannot show (`now-1d/d+2h`); used as is until a field changes. */\n raw: string | null;\n}\n\nexport const DEFAULT_SIDE: QuickSelectSide = {\n mode: 'absolute',\n amount: 15,\n unit: 'm',\n direction: 'ago',\n round: false,\n raw: null,\n};\n\n/** A side of the range: `from` (Start) or `to` (End). */\nexport type Side = 'from' | 'to';\nexport type SideMode = QuickSelectSide['mode'];\n/** The tabs of a side, in their order. */\nexport const SIDE_MODES: readonly SideMode[] = ['absolute', 'relative', 'now'];\nexport const ABSOLUTE_SIDES: Readonly<Record<Side, QuickSelectSide>> = {\n from: DEFAULT_SIDE,\n to: DEFAULT_SIDE,\n};\n\nconst SIMPLE = /^now(?:([+-])(\\d+)([smhdwMy]))?(?:\\/([smhdwMy]))?$/;\n\n/**\n * The side state for an expression: `now` is the Now tab, `now-15m`, `now+2d/d` or `now/w` the Relative tab,\n * another valid date math expression the Relative tab with `raw`; anything else (an ISO date) is absolute.\n */\nexport function sideFromExpression(expression: string): QuickSelectSide {\n const text = expression.trim();\n if (text === 'now') return { ...DEFAULT_SIDE, mode: 'now' };\n const match = SIMPLE.exec(text);\n if (match) {\n const [, sign, amount, shiftUnit, roundUnit] = match;\n // a shift and a rounding in different units (`now-1h/d`) cannot be shown by the fields\n if (!shiftUnit || !roundUnit || shiftUnit === roundUnit) {\n return {\n mode: 'relative',\n amount: amount ? Number(amount) : 0,\n unit: (shiftUnit ?? roundUnit) as HxDateMathUnit,\n direction: sign === '+' ? 'fromNow' : 'ago',\n round: !!roundUnit,\n raw: null,\n };\n }\n }\n if (hxParseDateMath(text)) return { ...DEFAULT_SIDE, mode: 'relative', raw: text };\n return { ...DEFAULT_SIDE };\n}\n\n/**\n * The date math expression of a relative or now side (`now-15m`, `now+2d/d`); `null` for an absolute side and for\n * a relative side whose amount is empty, not a number or negative (it is not taken as `now`).\n */\nexport function sideExpression(side: QuickSelectSide): string | null {\n if (side.mode === 'now') return 'now';\n if (side.mode === 'absolute') return null;\n if (side.raw) return side.raw;\n if (side.amount === null || !Number.isFinite(side.amount) || side.amount < 0) return null;\n // an amount too big for a plain integer text (1e21) stays in the text, so it is refused when resolved\n const amount = Math.floor(side.amount);\n const shift = amount > 0 ? `${side.direction === 'ago' ? '-' : '+'}${amount}${side.unit}` : '';\n return `now${shift}${side.round ? `/${side.unit}` : ''}`;\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\n/**\n * Resolves one side: date math against `now` (rounding up for the end), else an ISO date-time; a date-only ISO\n * text (`2026-10-14`) is local midnight, as `new Date(2026, 9, 14)`, not UTC. `null` when unreadable.\n */\nexport function hxResolveRangeSide(\n expression: string,\n options: { now?: Date; firstDayOfWeek?: number; roundUp?: boolean } = {},\n): Date | null {\n const math = hxParseDateMath(expression, options);\n if (math) return math;\n const text = typeof expression === 'string' ? expression.trim() : '';\n const day = DATE_ONLY.exec(text);\n if (day) {\n const [y, m, d] = [Number(day[1]), Number(day[2]) - 1, Number(day[3])];\n const date = new Date(y, m, d);\n // 2026-02-30 rolls over: refuse it\n return date.getFullYear() === y && date.getMonth() === m && date.getDate() === d ? date : null;\n }\n if (!/^\\d{4}-\\d{2}-\\d{2}T/.test(text)) return null;\n const date = new Date(text);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/**\n * Resolves a range expression (as the picker's `expression` model holds it) against the current time: `from`\n * rounds down, `to` rounds up (`now/d` to `now/d` is today from 00:00 to 23:59:59.999).\n */\nexport function hxResolveRangeExpression(\n range: HxDateRangeExpression,\n options: { now?: Date; firstDayOfWeek?: number } = {},\n): { from: Date | null; to: Date | null } {\n return {\n from: hxResolveRangeSide(range.from, { ...options, roundUp: false }),\n to: hxResolveRangeSide(range.to, { ...options, roundUp: true }),\n };\n}\n\nconst fill = (template: string, n: number | string, unit: string) =>\n template.replace('{n}', String(n)).replace('{unit}', unit);\n\n/**\n * The one-line summary of a relative or now side (`~ 15 minutes ago`, `now`, `~ 2 days from now, rounded to the\n * day`); a raw expression as is, `emptySide` for an amount that gives no expression. `null` for an absolute side.\n */\nexport function describeSide(side: QuickSelectSide, labels: HxQuickSelectLabels): string | null {\n if (side.mode === 'absolute') return null;\n if (side.mode === 'now') return labels.nowSummary;\n if (side.raw) return side.raw;\n if (sideExpression(side) === null) return labels.emptySide;\n const n = Math.floor(side.amount ?? 0);\n const unit = n === 1 ? labels.unitsOne[side.unit] : labels.units[side.unit];\n const text =\n n === 0\n ? labels.nowSummary\n : fill(side.direction === 'ago' ? labels.agoSummary : labels.fromNowSummary, n, unit);\n return side.round\n ? `${text}, ${fill(labels.roundedSummary, n, labels.unitsOne[side.unit])}`\n : text;\n}\n\n/**\n * A label for a range: the label of a commonly used range with the same expressions, `Last 15 minutes` /\n * `Next 2 days`, else both sides (`now-1d/d - now`, absolute sides through `formatDate`).\n */\nexport function describeRange(\n range: HxDateRangeExpression,\n labels: HxQuickSelectLabels,\n common: readonly HxQuickSelectRange[],\n formatDate: (date: Date) => string,\n separator = '-',\n): string {\n const known = common.find((c) => c.from === range.from && c.to === range.to);\n if (known) return known.label;\n const last = /^now-(\\d+)([smhdwMy])$/.exec(range.from);\n const next = /^now\\+(\\d+)([smhdwMy])$/.exec(range.to);\n const unitName = (n: number, unit: HxDateMathUnit) =>\n n === 1 ? labels.unitsOne[unit] : labels.units[unit];\n if (last && range.to === 'now') {\n const n = Number(last[1]);\n return fill(labels.lastRange, n, unitName(n, last[2] as HxDateMathUnit));\n }\n if (next && range.from === 'now') {\n const n = Number(next[1]);\n return fill(labels.nextRange, n, unitName(n, next[2] as HxDateMathUnit));\n }\n const side = (text: string) => {\n if (hxParseDateMath(text)) return text;\n const date = hxResolveRangeSide(text);\n return date ? formatDate(date) : text;\n };\n return `${side(range.from)} ${separator} ${side(range.to)}`;\n}\n\n/** Longest stored side; a date math expression or an ISO date is far shorter. */\nconst RECENT_SIDE_MAX = 64;\n\nconst isRangeSide = (value: unknown): value is string =>\n typeof value === 'string' &&\n value.length <= RECENT_SIDE_MAX &&\n hxResolveRangeSide(value) !== null;\n\n/** A stored entry is kept only when both sides are short and resolve to a date. */\nconst isRange = (value: unknown): value is HxDateRangeExpression =>\n !!value &&\n isRangeSide((value as HxDateRangeExpression).from) &&\n isRangeSide((value as HxDateRangeExpression).to);\n\n/** The browser storage, or `null` where there is none or touching it throws (blocked cookies, sandbox). */\nfunction storage(): Storage | null {\n try {\n return globalThis.localStorage ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * The recently used ranges stored under `key`: empty when nothing (valid) is stored, `null` when there is no key\n * or the storage cannot be read (blocked), so the caller can keep its in-memory list.\n */\nexport function readRecentRanges(key: string | null): HxDateRangeExpression[] | null {\n if (!key) return null;\n let text: string | null;\n try {\n const store = storage();\n if (!store) return null;\n text = store.getItem(key);\n } catch {\n return null; // blocked storage\n }\n try {\n const parsed: unknown = JSON.parse(text ?? '[]');\n if (!Array.isArray(parsed)) return [];\n // de-duplicated on read too: an edited or older list may hold the same range twice\n return parsed\n .filter(isRange)\n .reduce<HxDateRangeExpression[]>(\n (list, { from, to }) =>\n list.some((r) => r.from === from && r.to === to) ? list : [...list, { from, to }],\n [],\n )\n .slice(0, RECENT_MAX);\n } catch {\n return []; // damaged data: start empty\n }\n}\n\n/** Stores the recently used ranges; does nothing when storage is blocked or full. */\nexport function writeRecentRanges(\n key: string | null,\n ranges: readonly HxDateRangeExpression[],\n): void {\n if (!key) return;\n try {\n storage()?.setItem(key, JSON.stringify(ranges));\n } catch {\n // storage full or blocked: the list just does not survive a reload\n }\n}\n\n/** Puts `range` first, drops an equal older entry and keeps at most `max` entries. */\nexport function addRecentRange(\n ranges: readonly HxDateRangeExpression[],\n range: HxDateRangeExpression,\n max = RECENT_MAX,\n): HxDateRangeExpression[] {\n const rest = ranges.filter((r) => r.from !== range.from || r.to !== range.to);\n return [{ from: range.from, to: range.to }, ...rest].slice(0, max);\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\nimport { HxCalendar } from '../internal/calendar/calendar';\nimport { type CalendarView, isDateDisabled } from '../internal/calendar/calendar-helpers';\nimport {\n type HxDateMathUnit,\n hxParseDateMath,\n hxRelativeRangeExpressions,\n} from '../internal/date-math/date-math';\nimport { clampTime, isValidDate, startOfDay } from '../internal/dates';\nimport { parseDateText, parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport {\n ABSOLUTE_SIDES,\n addRecentRange,\n describeRange,\n describeSide,\n HX_QUICK_SELECT_COMMONLY_USED,\n HX_QUICK_SELECT_LABELS,\n type HxDateRangeExpression,\n type HxQuickSelectLabels,\n type HxQuickSelectRange,\n hxResolveRangeExpression,\n hxResolveRangeSide,\n QUICK_SELECT_UNITS,\n type QuickSelectSide,\n readRecentRanges,\n SIDE_MODES,\n type Side,\n type SideMode,\n sideExpression,\n sideFromExpression,\n writeRecentRanges,\n} from '../internal/quick-select/quick-select';\nimport { HxSelect, isInSelectOverlay } from '../select/select';\n\n/** The value of `hx-date-range-quick-select`: the resolved start and end (`null` while a side is empty). */\nexport interface HxDateRangeQuickSelectValue {\n from: Date | null;\n to: Date | null;\n}\n\nconst EMPTY: HxDateRangeQuickSelectValue = { from: null, to: null };\n/** How far a written value may be from the expression resolved now and still belong to it (the time between). */\nconst RESOLVE_TOLERANCE_MS = 1000;\n\nconst sameTime = (a: Date | null, b: Date | null, tolerance = 0) =>\n a === null || b === null ? a === b : Math.abs(a.getTime() - b.getTime()) <= tolerance;\n\n/** Two values with the same start and end times. */\nconst sameRange = (a: HxDateRangeQuickSelectValue, b: HxDateRangeQuickSelectValue | null) =>\n b !== null && sameTime(a.from, b.from) && sameTime(a.to, b.to);\nconst SIDE_KEYS: readonly Side[] = ['from', 'to'];\n\n/** The tabs of both sides for an expression (`null`: both absolute). */\nconst sidesFrom = (expression: HxDateRangeExpression | null): Record<Side, QuickSelectSide> =>\n expression\n ? { from: sideFromExpression(expression.from), to: sideFromExpression(expression.to) }\n : ABSOLUTE_SIDES;\n\n/**\n * A Kibana-style quick select for a date range: one read-only field with a button that opens a compact popup with\n * *Quick select* (Last/Next N unit, Apply), *Commonly used*, *Recently used* (the last five applied ranges, kept in\n * `localStorage` under `recentStorageKey`) and one summary line each for the start and the end.\n *\n * ```html\n * <hx-date-range-quick-select [(ngModel)]=\"range\" [(expression)]=\"expression\" />\n * ```\n *\n * A click on the start or the end opens the editor of that side alone: the tabs *Absolute* (a typed date and the\n * calendar), *Relative* (amount, unit, round to the unit, the resolved date) and *Now*. Escape closes the innermost\n * open layer: the side editor first, then the popup.\n *\n * Apply and a click on a commonly or recently used range commit the range at once and close the popup; an edit in\n * the side editor commits that side at once and keeps the popup open (the range is added to *Recently used* when\n * the popup closes). An edit that puts the start after the end swaps the ends (the editor follows the edited side),\n * as Apply and the lists do. An edit that cannot be applied (an empty amount, an unreadable date) keeps the last\n * applied range and shows the inline message until the side changes or its editor closes. Date math\n * (`now-15m`, `now/d`) is resolved against the current time when the range is applied; the value is\n * `{ from, to }` (moved into `minDate`..`maxDate`) and the expressions are in the `expression` model (`null` for an\n * absolute range). A range that cannot be applied (an amount out of range, an unreadable side) keeps the popup open\n * with an inline message. It works with `ngModel`, reactive forms and signal forms (`[formField]`). To restore a\n * persisted `expression`, bind the value resolved from it (`hxResolveRangeExpression`) with it: a value written from\n * outside keeps the expression only when it has the same times (see `expression`).\n */\n@Component({\n selector: 'hx-date-range-quick-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, HxCalendar, HxCheckbox, HxInput, HxSelect],\n templateUrl: './date-range-quick-select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HxDateRangeQuickSelect),\n multi: true,\n },\n ],\n host: {\n class: 'hx-date-range-quick-select',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDateRangeQuickSelect\n implements ControlValueAccessor, FormValueControl<HxDateRangeQuickSelectValue>\n{\n /** The texts of the quick select; any text left out stays English. */\n readonly labels = input<Partial<HxQuickSelectLabels>>({});\n /** The \"Commonly used\" ranges. */\n readonly commonlyUsed = input<readonly HxQuickSelectRange[]>(HX_QUICK_SELECT_COMMONLY_USED);\n /** The `localStorage` key of the \"Recently used\" list; `null` keeps the list only while the control lives. */\n readonly recentStorageKey = input<string | null>('hx-date-range-recent');\n /**\n * The applied range as expressions (`{ from: 'now-15m', to: 'now' }`, an absolute side as an ISO date-time);\n * `null` for an absolute range, and when `value` is set from outside (`writeValue`, a form's `setValue`/`reset`, a\n * new `[value]`) to a different range without a new expression with it. A value written with the same times as the\n * last one, or with the times the expression resolves to now (within a second, as `hxResolveRangeExpression` gives\n * them), keeps the expression: a persisted expression with `[(ngModel)]` survives ngModel's later `writeValue` when\n * the model holds the range resolved from it. Setting it from outside does not change `value` (resolve it yourself\n * with `hxResolveRangeExpression`); it changes the field's text and the summary. When the resolved ends come out\n * reversed (`now+1d` to `now`), the value is ordered and the expression is swapped with it.\n */\n readonly expression = model<HxDateRangeExpression | null>(null);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n readonly locale = input<string>();\n /** The format of absolute dates in the field, the summary and the Recently used list. */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n /** The text between the two dates. */\n readonly separator = input('-');\n readonly placeholder = input('');\n readonly chooseLabel = input('Choose date range');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDateRangeQuickSelectValue>(EMPTY);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n readonly open = signal(false);\n protected readonly popupId = nextId('hx-date-range-quick-select-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n /** Last/Next N unit. */\n protected readonly quickDirection = signal<'last' | 'next'>('last');\n /** The amount as typed: an emptied field stays empty (it does not turn into `0`). */\n protected readonly quickAmount = signal('15');\n protected readonly quickUnit = signal<HxDateMathUnit>('m');\n protected readonly recent = signal<HxDateRangeExpression[]>([]);\n /** A range could not be applied; shown under the lists and named by the Apply button. */\n protected readonly quickError = signal(false);\n protected readonly quickErrorId = `${this.popupId}-error`;\n /** The two sides of the summary, Start then End. */\n protected readonly sideKeys = SIDE_KEYS;\n protected readonly sideModes = SIDE_MODES;\n /** The side whose editor (tabs Absolute / Relative / Now) is open under the summary; one at a time. */\n protected readonly openSide = signal<Side | null>(null);\n /** The tab and the Relative fields of each side as edited; may hold an edit that was refused. */\n protected readonly sides = signal<Record<Side, QuickSelectSide>>(ABSOLUTE_SIDES);\n /** The sides as last applied (or set from outside): the summary shows them, a refused edit goes back to them. */\n readonly #appliedSides = signal<Record<Side, QuickSelectSide>>(ABSOLUTE_SIDES);\n /** An edit in the side editor was refused; the same message as `quickError`, named by the edited side. */\n protected readonly sideError = signal(false);\n /** The calendar of the Absolute tab: the focused day, the view and today. */\n protected readonly calendarFocus = signal(startOfDay(new Date()));\n protected readonly calendarView = signal<CalendarView>('day');\n protected readonly today = signal(startOfDay(new Date()));\n protected readonly calendarTitleId = `${this.popupId}-calendar-title`;\n protected readonly texts = computed<HxQuickSelectLabels>(() => ({\n ...HX_QUICK_SELECT_LABELS,\n ...this.labels(),\n }));\n protected readonly directionOptions = computed(() => [\n { label: this.texts().last, value: 'last' },\n { label: this.texts().next, value: 'next' },\n ]);\n protected readonly unitOptions = computed(() =>\n QUICK_SELECT_UNITS.map((unit) => ({ label: this.texts().units[unit], value: unit })),\n );\n /** The unit and direction of a relative side in one select (`Minutes ago`, `Minutes from now`). */\n protected readonly relativeOptions = computed(() => {\n const l = this.texts();\n return [\n ...QUICK_SELECT_UNITS.map((unit) => ({ label: l.unitsAgo[unit], value: `${unit}-ago` })),\n ...QUICK_SELECT_UNITS.map((unit) => ({\n label: l.unitsFromNow[unit],\n value: `${unit}-fromNow`,\n })),\n ];\n });\n protected readonly recentItems = computed(() =>\n this.recent().map((range) => ({ range, label: this.#describe(range) })),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n /** The field: the label of the expression (`Last 15 minutes`), else the two dates. */\n protected readonly text = computed(() => {\n const expression = this.expression();\n if (expression) return this.#describe(expression);\n const { from, to } = this.value();\n if (!from && !to) return '';\n const one = (d: Date | null) => (d ? this.#formatDate(d) : '');\n return `${one(from)} ${this.separator()} ${one(to)}`.trim();\n });\n\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly quickFirst = viewChild('quickFirst', { read: HxSelect });\n /** The summary buttons and the tabs live in the overlay, outside the host: found through the view, not the document. */\n private readonly sideButtons = viewChildren<ElementRef<HTMLElement>>('sideButton');\n private readonly sideTabs = viewChildren<ElementRef<HTMLElement>>('sideTab');\n readonly #cvaDisabled = signal(false);\n readonly #format = computed(\n () =>\n new Intl.DateTimeFormat(\n this.locale(),\n this.dateFormat() ?? {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: 'h23',\n },\n ),\n );\n\n #onChange: (value: HxDateRangeQuickSelectValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n /** The last `expression` seen and the value it belongs to (see the effect in the constructor). */\n #seenExpression: HxDateRangeExpression | null = null;\n #expressionValue: HxDateRangeQuickSelectValue | null = null;\n /** The value and expression the side editor committed last; anything else came from outside. */\n #editedValue: HxDateRangeQuickSelectValue | null = null;\n #editedExpression: HxDateRangeExpression | null = null;\n /** The range the side editor applied, added to Recently used when the popup closes. */\n #editedRange: HxDateRangeExpression | null = null;\n\n constructor() {\n // a control that is disabled while its popup is open closes it, so Apply cannot change a disabled control\n effect(() => {\n if (this.isDisabled()) untracked(() => this.close());\n });\n // A new expression (the control's own apply or one set from outside) belongs to the value of that moment. A value\n // that changes without a new expression (writeValue, setValue, reset, [value]) makes it stale: it is dropped,\n // unless the value is the same range (the same times as before, or the expression resolved now). So ngModel's\n // later writeValue of the range resolved from a persisted expression keeps that expression.\n effect(() => {\n const value = this.value();\n const expression = this.expression();\n untracked(() => {\n if (expression !== this.#seenExpression) {\n this.#seenExpression = expression;\n this.#expressionValue = value;\n } else if (expression !== null && value !== this.#expressionValue) {\n if (sameRange(value, this.#expressionValue) || this.#resolvesTo(expression, value)) {\n this.#expressionValue = value;\n } else {\n this.expression.set(null);\n }\n }\n // a value or an expression that the side editor did not set (Apply, a list entry, a form, a binding) sets the\n // tabs of both sides again\n if (value !== this.#editedValue || this.expression() !== this.#editedExpression) {\n this.#editedValue = null;\n this.#editedExpression = null;\n this.#editedRange = null;\n this.sideError.set(false);\n const sides = sidesFrom(this.expression());\n this.sides.set(sides);\n this.#appliedSides.set(sides);\n }\n });\n });\n }\n\n writeValue(value: HxDateRangeQuickSelectValue | null): void {\n this.value.set({ from: value?.from ?? null, to: value?.to ?? null });\n }\n registerOnChange(fn: (value: HxDateRangeQuickSelectValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the field (signal forms call this to focus the control). */\n focus(): void {\n this.field()?.nativeElement.focus();\n }\n\n /** Opening the popup: the recently used list from storage, no message, no side editor, no refused edit. */\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n // blocked storage (or no key) reads `null`: the in-memory list of this session stays\n const stored = readRecentRanges(this.recentStorageKey());\n if (stored) this.recent.set(stored);\n this.quickError.set(false);\n this.#dropRefusedEdit();\n this.openSide.set(null);\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n /**\n * Closes the popup, also when the overlay detaches itself (`detach`): a refused edit goes back, the side editor\n * closes and the range of the side editor is added to Recently used.\n */\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.#dropRefusedEdit();\n this.openSide.set(null);\n if (this.#editedRange) this.#remember(this.#editedRange);\n this.#editedRange = null;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n afterNextRender(() => this.quickFirst()?.focus(), { injector: this.#injector });\n }\n\n /** The read-only field opens with Enter, Space, Arrow Down or Alt+Arrow Up. */\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (\n event.key === 'ArrowDown' ||\n (event.altKey && event.key === 'ArrowUp') ||\n event.key === 'Enter' ||\n event.key === ' '\n ) {\n event.preventDefault();\n this.show();\n }\n }\n\n /** Escape closes the innermost open layer: the side editor first, then the popup. */\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Escape') return;\n event.preventDefault();\n if (this.openSide()) this.closeSide();\n else this.close(true);\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n // the lists of the selects are their own overlays\n if (isInSelectOverlay(event.target)) return;\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected setQuickDirection(direction: unknown): void {\n if (direction === 'last' || direction === 'next') this.quickDirection.set(direction);\n }\n\n protected setQuickAmount(event: Event): void {\n this.quickError.set(false);\n this.quickAmount.set((event.target as HTMLInputElement).value);\n }\n\n protected setQuickUnit(unit: unknown): void {\n if (QUICK_SELECT_UNITS.includes(unit as HxDateMathUnit)) {\n this.quickUnit.set(unit as HxDateMathUnit);\n }\n }\n\n /**\n * Applies *Last/Next N unit* at once; an amount that is not a positive safe integer, or one whose date is out of\n * the range of `Date`, shows the inline message instead.\n */\n protected applyQuick(): void {\n const text = this.quickAmount().trim();\n const range = hxRelativeRangeExpressions(\n this.quickDirection(),\n text === '' ? Number.NaN : Number(text),\n this.quickUnit(),\n );\n if (!range || !this.#applyRange(range)) this.quickError.set(true);\n }\n\n /** A commonly or recently used range is applied at once; a refused one shows the inline message. */\n protected applyRange(range: HxDateRangeExpression): void {\n if (!this.#applyRange(range)) this.quickError.set(true);\n }\n\n /**\n * The summary line of a side as applied: a relative or now side (`~ 15 minutes ago`, `now`), else the date of the\n * value, else `Not set`.\n */\n protected sideSummary(side: Side): string {\n const relative = describeSide(this.#appliedSides()[side], this.texts());\n if (relative !== null) return relative;\n const date = this.value()[side];\n return date ? this.#formatDate(date) : this.texts().emptySide;\n }\n\n protected sideButtonId(side: Side): string {\n return `${this.popupId}-${side}-button`;\n }\n\n protected editorId(side: Side): string {\n return `${this.popupId}-${side}-editor`;\n }\n\n protected tabId(side: Side, mode: SideMode): string {\n return `${this.popupId}-${side}-${mode}`;\n }\n\n protected panelId(side: Side): string {\n return `${this.popupId}-${side}-panel`;\n }\n\n /** A click on the start or the end opens the editor of that side and focuses its tab; a second click closes it. */\n protected toggleSide(side: Side): void {\n if (this.openSide() === side) {\n this.closeSide();\n return;\n }\n this.#dropRefusedEdit();\n this.openSide.set(side);\n this.#showDay(side);\n afterNextRender(\n () => this.#focusById(this.sideTabs(), this.tabId(side, this.sides()[side].mode)),\n {\n injector: this.#injector,\n },\n );\n }\n\n /** Closes the side editor (a refused edit goes back to the applied side) and focuses its summary button. */\n protected closeSide(): void {\n const side = this.openSide();\n if (!side) return;\n this.#dropRefusedEdit();\n this.openSide.set(null);\n this.#focusById(this.sideButtons(), this.sideButtonId(side));\n }\n\n /** A tab chosen: the side becomes absolute (its current date), relative or now, and is applied at once. */\n protected setSideMode(side: Side, mode: SideMode): void {\n const sides = this.sides();\n if (sides[side].mode === mode) return;\n this.#editSides({ ...sides, [side]: { ...sides[side], mode } });\n if (mode === 'absolute') this.#showDay(side);\n }\n\n /** Arrow Left/Right move between the tabs of a side (wrapping), Home and End go to the first and last. */\n protected onTabKeydown(side: Side, event: KeyboardEvent): void {\n const index = SIDE_MODES.indexOf(this.sides()[side].mode);\n const last = SIDE_MODES.length - 1;\n const next =\n event.key === 'ArrowRight'\n ? (index + 1) % SIDE_MODES.length\n : event.key === 'ArrowLeft'\n ? (index + last) % SIDE_MODES.length\n : event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? last\n : -1;\n if (next < 0) return;\n event.preventDefault();\n this.setSideMode(side, SIDE_MODES[next]);\n const tabs = (event.currentTarget as HTMLElement).querySelectorAll<HTMLElement>('[role=tab]');\n tabs[next]?.focus();\n }\n\n /** The amount of a Relative tab; an emptied field is `null` (refused, and shown empty), not `0` (`now`). */\n protected setSideAmount(side: Side, event: Event): void {\n const text = (event.target as HTMLInputElement).value.trim();\n this.#patchSide(side, { amount: text === '' ? null : Number(text) });\n }\n\n protected setSideUnit(side: Side, value: unknown): void {\n const [unit, direction] = String(value).split('-');\n if (!QUICK_SELECT_UNITS.includes(unit as HxDateMathUnit)) return;\n this.#patchSide(side, {\n unit: unit as HxDateMathUnit,\n direction: direction === 'fromNow' ? 'fromNow' : 'ago',\n });\n }\n\n protected setSideRound(side: Side, event: Event): void {\n this.#patchSide(side, { round: (event.target as HTMLInputElement).checked });\n }\n\n protected sideUnitValue(side: Side): string {\n const state = this.sides()[side];\n return `${state.unit}-${state.direction}`;\n }\n\n protected sideRoundLabel(side: Side): string {\n return this.texts().roundTo.replace('{unit}', this.texts().unitsOne[this.sides()[side].unit]);\n }\n\n protected sideExpressionText(side: Side): string {\n return sideExpression(this.sides()[side]) ?? '';\n }\n\n /** `Resolves to <date>`: a relative or now side as it would be applied at this moment (inside the limits). */\n protected sideResolvedText(side: Side): string {\n const state = this.sides()[side];\n // an absolute side has no expression: it resolves to the date it holds\n const expression = sideExpression(state);\n const resolved =\n state.mode === 'absolute'\n ? this.value()[side]\n : expression\n ? hxResolveRangeSide(expression, {\n firstDayOfWeek: this.firstDayOfWeek(),\n roundUp: side === 'to',\n })\n : null;\n if (!isValidDate(resolved)) return '';\n const date = clampTime(resolved, this.minDate(), this.maxDate());\n return this.texts().resolvesTo.replace('{date}', this.#formatDate(date));\n }\n\n /** The date of an absolute side in its text field. */\n protected sideText(side: Side): string {\n const date = this.value()[side];\n return date ? this.#formatDate(date) : '';\n }\n\n /** The days of the calendar that are selected: the date of the side. */\n protected sideDays(side: Side): Date[] {\n const date = this.value()[side];\n return date ? [date] : [];\n }\n\n /**\n * The date typed on an Absolute tab (a date with a time, or a date at midnight; empty clears the side); an\n * unreadable date or one outside `minDate`..`maxDate` is refused with the inline message. Enter and the `change`\n * that follows it commit once: a text that shows the applied date is no edit.\n */\n protected setAbsoluteSide(side: Side, event: Event): void {\n const field = event.target as HTMLInputElement;\n const text = field.value.trim();\n if (text === this.sideText(side)) {\n this.#dropRefusedEdit();\n return;\n }\n let date: Date | null = null;\n if (text !== '') {\n date =\n parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: true,\n timeOnly: false,\n fallbackDay: this.value()[side] ?? new Date(),\n }) ?? parseDateText(text, this.locale());\n const [min, max] = [this.minDate(), this.maxDate()];\n if (!date || (min && date < min) || (max && date > max)) {\n this.sideError.set(true);\n return;\n }\n }\n if (!this.#editSides(this.sides(), { [side]: date })) return;\n if (date) this.calendarFocus.set(startOfDay(date));\n // a date across the other side swapped the ends: the field now edits the other side\n field.value = this.sideText(this.openSide() ?? side);\n }\n\n /**\n * A day picked in the calendar of an Absolute tab keeps the side's time (an empty start takes 00:00, an empty end\n * 23:59:59.999), inside `minDate`..`maxDate`; a disabled day is ignored.\n */\n protected pickDay(side: Side, day: Date): void {\n const [min, max] = [this.minDate(), this.maxDate()];\n if (this.isDisabled() || isDateDisabled(day, { min, max })) return;\n const old = this.value()[side];\n const date = startOfDay(day);\n if (old)\n date.setHours(old.getHours(), old.getMinutes(), old.getSeconds(), old.getMilliseconds());\n else if (side === 'to') date.setHours(23, 59, 59, 999);\n this.calendarFocus.set(startOfDay(day));\n this.#editSides(this.sides(), { [side]: clampTime(date, min, max) });\n }\n\n #patchSide(side: Side, patch: Partial<QuickSelectSide>): void {\n const sides = this.sides();\n this.#editSides({ ...sides, [side]: { ...sides[side], ...patch, raw: null } });\n }\n\n /** Takes an edit of the side editor and applies it; a refused edit stays in the fields with the message. */\n #editSides(\n sides: Record<Side, QuickSelectSide>,\n dates: Partial<Record<Side, Date | null>> = {},\n ): boolean {\n this.sides.set(sides);\n const applied = this.#applySides(sides, dates);\n this.sideError.set(!applied);\n return applied;\n }\n\n /**\n * Applies the sides as edited: an absolute side keeps its date (or takes the one of `dates`), a relative or now\n * side is resolved against the current time (`to` rounds up) and moved into `minDate`..`maxDate`. Refused for a\n * relative side that gives no expression or no date. A start after the end swaps the ends, as Apply and the lists\n * do: the sides and the expression are swapped with the value and the open editor follows the edited side. An\n * empty side is allowed (the other side is set alone); the expression model holds both sides only when both are set\n * and one of them is relative.\n */\n #applySides(\n edited: Record<Side, QuickSelectSide>,\n dates: Partial<Record<Side, Date | null>>,\n ): boolean {\n let sides = edited;\n const options = { now: new Date(), firstDayOfWeek: this.firstDayOfWeek() };\n const resolved: Record<Side, Date | null> = { from: null, to: null };\n const texts: Record<Side, string | null> = { from: null, to: null };\n for (const side of SIDE_KEYS) {\n const state = sides[side];\n if (state.mode === 'absolute') {\n const date = side in dates ? (dates[side] ?? null) : this.value()[side];\n resolved[side] = date;\n texts[side] = date?.toISOString() ?? null;\n continue;\n }\n const expression = sideExpression(state);\n const date = expression\n ? hxResolveRangeSide(expression, { ...options, roundUp: side === 'to' })\n : null;\n if (!expression || !isValidDate(date)) return false;\n resolved[side] = date;\n texts[side] = expression;\n }\n // reversed ends are ordered; the sides and their texts are swapped with them (as in #applyRange)\n if (resolved.from && resolved.to && resolved.from > resolved.to) {\n [resolved.from, resolved.to] = [resolved.to, resolved.from];\n [texts.from, texts.to] = [texts.to, texts.from];\n sides = { from: sides.to, to: sides.from };\n this.sides.set(sides);\n const open = this.openSide();\n if (open) this.openSide.set(open === 'from' ? 'to' : 'from');\n }\n const inside = (d: Date | null) => d && clampTime(d, this.minDate(), this.maxDate());\n const next = { from: inside(resolved.from), to: inside(resolved.to) };\n const range =\n texts.from !== null && texts.to !== null ? { from: texts.from, to: texts.to } : null;\n const relative = sides.from.mode !== 'absolute' || sides.to.mode !== 'absolute';\n const expression = relative ? range : null;\n this.#editedValue = next;\n this.#editedExpression = expression;\n this.#editedRange = range;\n this.#appliedSides.set(sides);\n this.#commit(next);\n this.expression.set(expression);\n return true;\n }\n\n #focusById(elements: readonly ElementRef<HTMLElement>[], id: string): void {\n elements.find((e) => e.nativeElement.id === id)?.nativeElement.focus();\n }\n\n /** A refused edit goes back to the sides as applied. */\n #dropRefusedEdit(): void {\n if (!this.sideError()) return;\n this.sideError.set(false);\n this.sides.set(this.#appliedSides());\n }\n\n /** The calendar shows the month of the side's date, else today (inside the limits). */\n #showDay(side: Side): void {\n const today = startOfDay(new Date());\n this.today.set(today);\n const min = this.minDate();\n const date = this.value()[side] ?? clampTime(today, min && startOfDay(min), this.maxDate());\n this.calendarFocus.set(startOfDay(date));\n this.calendarView.set('day');\n }\n\n /**\n * Resolves a range against the current time (`to` rounds up), refused for an unreadable side; each side is moved\n * into `minDate`..`maxDate`. Then remembers it, sets the value and the `expression` model and closes the popup.\n */\n #applyRange(range: HxDateRangeExpression): boolean {\n const options = { now: new Date(), firstDayOfWeek: this.firstDayOfWeek() };\n const from = hxResolveRangeSide(range.from, { ...options, roundUp: false });\n const to = hxResolveRangeSide(range.to, { ...options, roundUp: true });\n if (!isValidDate(from) || !isValidDate(to)) return false;\n // reversed ends are ordered; the expression is swapped with them, so it stays the source of the value\n const swapped = to < from;\n const stored = swapped\n ? { from: range.to, to: range.from }\n : { from: range.from, to: range.to };\n const inside = (d: Date) => clampTime(d, this.minDate(), this.maxDate());\n const next = swapped\n ? { from: inside(to), to: inside(from) }\n : { from: inside(from), to: inside(to) };\n const relative = hxParseDateMath(range.from) !== null || hxParseDateMath(range.to) !== null;\n // this range is remembered instead of the one of the side editor\n this.#editedRange = null;\n this.#remember(stored);\n this.#commit(next);\n this.expression.set(relative ? stored : null);\n this.close(true);\n return true;\n }\n\n /**\n * The value is the expression resolved now, give or take `RESOLVE_TOLERANCE_MS` (as an app resolves it with\n * `hxResolveRangeExpression`, or as the control applies it: moved into `minDate`..`maxDate`, reversed ends ordered).\n */\n #resolvesTo(expression: HxDateRangeExpression, value: HxDateRangeQuickSelectValue): boolean {\n const { from, to } = hxResolveRangeExpression(expression, {\n firstDayOfWeek: this.firstDayOfWeek(),\n });\n const inside = (d: Date | null) =>\n isValidDate(d) ? clampTime(d, this.minDate(), this.maxDate()) : null;\n const near = (a: Date | null, b: Date | null) => sameTime(a, b, RESOLVE_TOLERANCE_MS);\n const matches = (start: Date | null, end: Date | null) =>\n (near(value.from, start) && near(value.to, end)) ||\n (near(value.from, inside(start)) && near(value.to, inside(end)));\n return matches(from, to) || matches(to, from);\n }\n\n #remember(range: HxDateRangeExpression): void {\n const next = addRecentRange(this.recent(), range);\n this.recent.set(next);\n writeRecentRanges(this.recentStorageKey(), next);\n }\n\n #describe(range: HxDateRangeExpression): string {\n return describeRange(\n range,\n this.texts(),\n this.commonlyUsed(),\n (d) => this.#formatDate(d),\n this.separator(),\n );\n }\n\n #formatDate(date: Date): string {\n return this.#format().format(date).replace(/,\\s*/, ' ');\n }\n\n /** The focus left the control (field, button and popup): the popup closes and the control is touched. */\n protected onHostFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n isInSelectOverlay(next) ||\n next?.closest('.hx-date-range-quick-select-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n // a click on the popup's own non-focusable area has no related target: stay open\n if (this.open() && !next) return;\n this.close();\n this.markTouched();\n }\n\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n !next ||\n isInSelectOverlay(next) ||\n next.closest('.hx-date-range-quick-select-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n this.close();\n this.markTouched();\n }\n\n protected markTouched(): void {\n this.#onTouched();\n this.touch.emit();\n }\n\n #commit(next: HxDateRangeQuickSelectValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n}\n","<div\n class=\"hx-date-picker hx-date-picker-has-icon hx-date-range-quick-select-control\"\n [class.hx-date-picker-open]=\"open()\"\n [class.hx-date-picker-disabled]=\"isDisabled()\"\n [class.hx-date-picker-invalid]=\"invalid()\"\n>\n <div class=\"hx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n readonly\n class=\"hx-date-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"hx-date-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n >\n @let l = texts();\n <div\n class=\"hx-date-picker-popup hx-date-range-quick-select-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n <section class=\"hx-date-range-quick-select-section\" [attr.aria-labelledby]=\"popupId + '-quick'\">\n <span class=\"hx-date-range-quick-select-caption\" [id]=\"popupId + '-quick'\">{{ l.quickSelect }}</span>\n <div class=\"hx-date-range-quick-select-row\">\n <hx-select\n #quickFirst\n class=\"hx-date-range-quick-select-direction\"\n [options]=\"directionOptions()\"\n [ariaLabel]=\"l.direction\"\n [value]=\"quickDirection()\"\n (valueChange)=\"setQuickDirection($event)\"\n />\n <input\n hx-input\n type=\"number\"\n min=\"1\"\n step=\"1\"\n class=\"hx-date-range-quick-select-amount\"\n [attr.aria-label]=\"l.amount\"\n [attr.aria-invalid]=\"quickError() ? 'true' : null\"\n [attr.aria-describedby]=\"quickError() ? quickErrorId : null\"\n [value]=\"quickAmount()\"\n (input)=\"setQuickAmount($event)\"\n (keydown.enter)=\"$event.preventDefault(); applyQuick()\"\n />\n <hx-select\n class=\"hx-date-range-quick-select-unit\"\n [options]=\"unitOptions()\"\n [ariaLabel]=\"l.unit\"\n [value]=\"quickUnit()\"\n (valueChange)=\"setQuickUnit($event)\"\n />\n <button\n type=\"button\"\n class=\"hx-date-picker-button hx-date-range-quick-select-apply\"\n [attr.aria-describedby]=\"quickError() ? quickErrorId : null\"\n (click)=\"applyQuick()\"\n >\n {{ l.apply }}\n </button>\n </div>\n </section>\n @if (commonlyUsed().length > 0) {\n <section class=\"hx-date-range-quick-select-section\" [attr.aria-labelledby]=\"popupId + '-common'\">\n <span class=\"hx-date-range-quick-select-caption\" [id]=\"popupId + '-common'\">{{ l.commonlyUsed }}</span>\n <ul class=\"hx-date-range-quick-select-ranges hx-date-range-quick-select-common\">\n @for (range of commonlyUsed(); track $index) {\n <li>\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"applyRange(range)\">{{ range.label }}</button>\n </li>\n }\n </ul>\n </section>\n }\n @if (recentItems().length > 0) {\n <section class=\"hx-date-range-quick-select-section\" [attr.aria-labelledby]=\"popupId + '-recent'\">\n <span class=\"hx-date-range-quick-select-caption\" [id]=\"popupId + '-recent'\">{{ l.recentlyUsed }}</span>\n <ul class=\"hx-date-range-quick-select-ranges hx-date-range-quick-select-recent\">\n @for (item of recentItems(); track item.range.from + ' ' + item.range.to) {\n <li>\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"applyRange(item.range)\">{{ item.label }}</button>\n </li>\n }\n </ul>\n </section>\n }\n <!-- one line per side; a click opens the editor of that side (Absolute / Relative / Now) below -->\n <div class=\"hx-date-range-quick-select-summary\" role=\"group\" [attr.aria-label]=\"l.range\">\n @for (s of sideKeys; track s) {\n <button\n #sideButton\n type=\"button\"\n class=\"hx-date-range-quick-select-side-line\"\n [class]=\"'hx-date-range-quick-select-side-line-' + s\"\n [id]=\"sideButtonId(s)\"\n [attr.aria-expanded]=\"openSide() === s\"\n [attr.aria-controls]=\"openSide() === s ? editorId(s) : null\"\n (click)=\"toggleSide(s)\"\n >\n <span class=\"hx-date-range-quick-select-side-name\">{{ s === 'from' ? l.start : l.end }}</span>&ngsp;\n <span class=\"hx-date-range-quick-select-side-value\">{{ sideSummary(s) }}</span>\n </button>\n }\n </div>\n @if (openSide(); as s) {\n @let state = sides()[s];\n @let sideName = s === 'from' ? l.start : l.end;\n <section\n class=\"hx-date-range-quick-select-editor\"\n [class]=\"'hx-date-range-quick-select-editor-' + s\"\n [id]=\"editorId(s)\"\n [attr.aria-labelledby]=\"sideButtonId(s)\"\n >\n <div\n class=\"hx-date-range-quick-select-tabs\"\n role=\"tablist\"\n [attr.aria-labelledby]=\"sideButtonId(s)\"\n (keydown)=\"onTabKeydown(s, $event)\"\n >\n @for (mode of sideModes; track mode) {\n <button\n #sideTab\n type=\"button\"\n role=\"tab\"\n class=\"hx-date-range-quick-select-tab\"\n [id]=\"tabId(s, mode)\"\n [attr.aria-selected]=\"state.mode === mode\"\n [attr.aria-controls]=\"panelId(s)\"\n [attr.tabindex]=\"state.mode === mode ? 0 : -1\"\n (click)=\"setSideMode(s, mode)\"\n >\n {{ mode === 'absolute' ? l.absolute : mode === 'relative' ? l.relative : l.now }}\n </button>\n }\n </div>\n <div\n class=\"hx-date-range-quick-select-tabpanel\"\n role=\"tabpanel\"\n tabindex=\"0\"\n [id]=\"panelId(s)\"\n [attr.aria-labelledby]=\"tabId(s, state.mode)\"\n [attr.aria-describedby]=\"sideError() ? quickErrorId : null\"\n >\n @switch (state.mode) {\n @case ('absolute') {\n <input\n hx-input\n fluid\n type=\"text\"\n autocomplete=\"off\"\n class=\"hx-date-range-quick-select-side-date\"\n [attr.aria-label]=\"sideName + ' ' + l.date\"\n [attr.aria-invalid]=\"sideError() ? 'true' : null\"\n [attr.aria-describedby]=\"sideError() ? quickErrorId : null\"\n [value]=\"sideText(s)\"\n (change)=\"setAbsoluteSide(s, $event)\"\n (keydown.enter)=\"$event.preventDefault(); setAbsoluteSide(s, $event)\"\n />\n <p class=\"hx-date-range-quick-select-side-resolved\">\n <span class=\"hx-date-range-quick-select-resolved-date\">{{ sideResolvedText(s) }}</span>\n </p>\n <div class=\"hx-date-range-quick-select-calendar\" role=\"group\" [attr.aria-label]=\"sideName + ' ' + l.date\">\n <hx-calendar\n [(focusedDate)]=\"calendarFocus\"\n [(view)]=\"calendarView\"\n [selectedDates]=\"sideDays(s)\"\n selectionMode=\"single\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [titleId]=\"calendarTitleId\"\n [today]=\"today()\"\n (picked)=\"pickDay(s, $event)\"\n />\n </div>\n }\n @case ('relative') {\n <div class=\"hx-date-range-quick-select-row\">\n <input\n hx-input\n type=\"number\"\n min=\"0\"\n step=\"1\"\n class=\"hx-date-range-quick-select-side-amount\"\n [attr.aria-label]=\"l.amount\"\n [attr.aria-invalid]=\"sideError() ? 'true' : null\"\n [attr.aria-describedby]=\"sideError() ? quickErrorId : null\"\n [value]=\"state.amount ?? ''\"\n (input)=\"setSideAmount(s, $event)\"\n />\n <hx-select\n class=\"hx-date-range-quick-select-side-unit\"\n [options]=\"relativeOptions()\"\n [ariaLabel]=\"l.unit\"\n [value]=\"sideUnitValue(s)\"\n (valueChange)=\"setSideUnit(s, $event)\"\n />\n </div>\n <label class=\"hx-date-range-quick-select-side-round\">\n <input type=\"checkbox\" hx-checkbox [checked]=\"state.round\" (change)=\"setSideRound(s, $event)\" />\n {{ sideRoundLabel(s) }}\n </label>\n <p class=\"hx-date-range-quick-select-side-resolved\">\n <code class=\"hx-date-range-quick-select-expression\">{{ sideExpressionText(s) }}</code>&ngsp;\n <span class=\"hx-date-range-quick-select-resolved-date\">{{ sideResolvedText(s) }}</span>\n </p>\n }\n @case ('now') {\n <p class=\"hx-date-range-quick-select-now-hint\">{{ l.nowHint }}</p>\n <p class=\"hx-date-range-quick-select-side-resolved\">\n <span class=\"hx-date-range-quick-select-resolved-date\">{{ sideResolvedText(s) }}</span>\n </p>\n }\n }\n </div>\n </section>\n }\n @if (quickError() || sideError()) {\n <p class=\"hx-date-range-quick-select-error\" role=\"alert\" [id]=\"quickErrorId\">{{ l.incompleteRange }}</p>\n }\n </div>\n </ng-template>\n</div>\n","export type TimeUnit = 'hour' | 'minute' | 'second' | 'period';\n\nexport interface TimeColumn {\n unit: TimeUnit;\n label: string;\n now: number;\n min: number;\n max: number;\n text: string;\n valueText: string;\n}\n\nexport interface TimeOfDay {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nexport interface TimeColumnOptions {\n hour12: boolean;\n showMinutes: boolean;\n showSeconds: boolean;\n locale?: string;\n labels: { hour: string; minute: string; second: string; period: string };\n}\n\nexport interface TimeSteps {\n hour: number;\n minute: number;\n second: number;\n}\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/** The spinbutton columns of a time row: hour, minute, second, AM/PM as the options ask. */\nexport function buildTimeColumns(time: TimeOfDay, options: TimeColumnOptions): TimeColumn[] {\n const { hours, minutes, seconds } = time;\n const { hour12: twelve, labels } = options;\n const hourNow = twelve ? hours % 12 || 12 : hours;\n const columns: TimeColumn[] = [\n {\n unit: 'hour',\n label: labels.hour,\n now: hourNow,\n min: twelve ? 1 : 0,\n max: twelve ? 12 : 23,\n text: pad(hourNow),\n valueText: String(hourNow),\n },\n ];\n if (options.showMinutes) {\n columns.push({\n unit: 'minute',\n label: labels.minute,\n now: minutes,\n min: 0,\n max: 59,\n text: pad(minutes),\n valueText: String(minutes),\n });\n }\n if (options.showMinutes && options.showSeconds) {\n columns.push({\n unit: 'second',\n label: labels.second,\n now: seconds,\n min: 0,\n max: 59,\n text: pad(seconds),\n valueText: String(seconds),\n });\n }\n if (twelve) {\n const parts = new Intl.DateTimeFormat(options.locale, { hour: 'numeric', hourCycle: 'h12' });\n const period = (h: number) =>\n parts.formatToParts(new Date(2026, 0, 1, h)).find((p) => p.type === 'dayPeriod')?.value ??\n (h < 12 ? 'AM' : 'PM');\n const pm = hours >= 12 ? 1 : 0;\n columns.push({\n unit: 'period',\n label: labels.period,\n now: pm,\n min: 0,\n max: 1,\n text: period(pm ? 12 : 0),\n valueText: period(pm ? 12 : 0),\n });\n }\n return columns;\n}\n\n/** The values a time unit can take: from its minimum in steps, up to its maximum. */\nexport function unitValues(column: TimeColumn, steps: TimeSteps): number[] {\n const step =\n column.unit === 'hour'\n ? steps.hour\n : column.unit === 'minute'\n ? steps.minute\n : column.unit === 'second'\n ? steps.second\n : 1;\n const values: number[] = [];\n for (let v = column.min; v <= column.max; v += Math.max(1, step || 1)) values.push(v);\n return values;\n}\n\n/** The next (`1`) or previous (`-1`) value of a column's steps, wrapping around. */\nexport function nextUnitValue(column: TimeColumn, steps: TimeSteps, direction: 1 | -1): number {\n const values = unitValues(column, steps);\n return direction > 0\n ? (values.find((v) => v > column.now) ?? values[0])\n : (values.filter((v) => v < column.now).pop() ?? values[values.length - 1]);\n}\n\n/** The time with one unit set (in the units shown: 1 to 12 with AM/PM). */\nexport function applyUnit(\n time: TimeOfDay,\n unit: TimeUnit,\n value: number,\n hour12: boolean,\n): TimeOfDay {\n const { hours } = time;\n switch (unit) {\n case 'hour':\n return { ...time, hours: hour12 ? (value % 12) + (hours >= 12 ? 12 : 0) : value };\n case 'minute':\n return { ...time, minutes: value };\n case 'second':\n return { ...time, seconds: value };\n default:\n return { ...time, hours: (hours % 12) + (value ? 12 : 0) };\n }\n}\n\n/** The value a key of a spinbutton jumps to (Page Up/Down, Home, End), or `null` for another key. */\nexport function jumpKeyTarget(key: string, column: TimeColumn, steps: TimeSteps): number | null {\n const values = unitValues(column, steps);\n const page = column.unit === 'hour' ? 6 : 10;\n const nearest = (target: number) =>\n values.reduce((best, v) => (Math.abs(v - target) < Math.abs(best - target) ? v : best));\n switch (key) {\n case 'PageUp':\n return nearest(Math.min(column.max, column.now + page));\n case 'PageDown':\n return nearest(Math.max(column.min, column.now - page));\n case 'Home':\n return values[0];\n case 'End':\n return values[values.length - 1];\n default:\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n applyUnit,\n buildTimeColumns,\n jumpKeyTarget,\n nextUnitValue,\n type TimeColumn,\n type TimeOfDay,\n} from './time-row-helpers';\n\n/**\n * The time row of `hx-time-picker`, `hx-date-time-picker` and `hx-date-time-range-picker`: one spinbutton column per unit (hour, minute, second, AM/PM) with the arrow\n * buttons and the keys. It holds no value: the control passes the time in and takes `timeChange` out.\n */\n@Component({\n selector: 'hx-time-row',\n templateUrl: './time-row.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: contents' },\n})\nexport class HxTimeRow {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The time of day shown. */\n readonly time = input.required<TimeOfDay>();\n readonly hour12 = input(false);\n readonly showMinutes = input(true);\n readonly showSeconds = input(false);\n readonly stepHour = input(1);\n readonly stepMinute = input(1);\n readonly stepSecond = input(1);\n readonly locale = input<string>();\n readonly disabled = input(false);\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n\n /** A column changed: the whole time of day with the new unit. */\n readonly timeChange = output<TimeOfDay>();\n\n readonly #steps = computed(() => ({\n hour: this.stepHour(),\n minute: this.stepMinute(),\n second: this.stepSecond(),\n }));\n\n protected readonly columns = computed<TimeColumn[]>(() =>\n buildTimeColumns(this.time(), {\n hour12: this.hour12(),\n showMinutes: this.showMinutes(),\n showSeconds: this.showSeconds(),\n locale: this.locale(),\n labels: {\n hour: this.hourLabel(),\n minute: this.minuteLabel(),\n second: this.secondLabel(),\n period: this.periodLabel(),\n },\n }),\n );\n\n /** Moves the focus to the first spinbutton. */\n focus(): void {\n this.#host.nativeElement.querySelector<HTMLElement>('.hx-date-picker-time-spin')?.focus();\n }\n\n #set(column: TimeColumn, value: number): void {\n if (this.disabled()) return;\n this.timeChange.emit(applyUnit(this.time(), column.unit, value, this.hour12()));\n }\n\n /** Moves a column to the next (`1`) or previous (`-1`) value of its steps, wrapping around. */\n protected stepTime(column: TimeColumn, direction: 1 | -1): void {\n this.#set(column, nextUnitValue(column, this.#steps(), direction));\n }\n\n protected onTimeKeydown(event: KeyboardEvent, column: TimeColumn): void {\n if (this.disabled()) return;\n if (event.key === 'ArrowUp') this.stepTime(column, 1);\n else if (event.key === 'ArrowDown') this.stepTime(column, -1);\n else {\n const target = jumpKeyTarget(event.key, column, this.#steps());\n if (target === null) return;\n this.#set(column, target);\n }\n event.preventDefault();\n }\n}\n","<div class=\"hx-date-picker-time\" role=\"group\" [attr.aria-label]=\"timeLabel()\">\n @for (column of columns(); track column.unit) {\n @if (column.unit !== 'hour' && column.unit !== 'period') {\n <span class=\"hx-date-picker-time-separator\" aria-hidden=\"true\">:</span>\n }\n <div class=\"hx-date-picker-time-column\">\n <button type=\"button\" class=\"hx-date-picker-time-button\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"disabled()\" (mousedown)=\"$event.preventDefault()\" (click)=\"stepTime(column, 1)\">\n <span class=\"hx-date-picker-time-up-icon\" aria-hidden=\"true\"></span>\n </button>\n <div\n class=\"hx-date-picker-time-spin\"\n role=\"spinbutton\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"column.label\"\n [attr.aria-valuenow]=\"column.now\"\n [attr.aria-valuemin]=\"column.min\"\n [attr.aria-valuemax]=\"column.max\"\n [attr.aria-valuetext]=\"column.valueText\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n (keydown)=\"onTimeKeydown($event, column)\"\n >\n {{ column.text }}\n </div>\n <button type=\"button\" class=\"hx-date-picker-time-button\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"disabled()\" (mousedown)=\"$event.preventDefault()\" (click)=\"stepTime(column, -1)\">\n <span class=\"hx-date-picker-time-down-icon\" aria-hidden=\"true\"></span>\n </button>\n </div>\n }\n</div>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCalendar } from '../internal/calendar/calendar';\nimport { type CalendarView, isDateDisabled } from '../internal/calendar/calendar-helpers';\nimport { clampTime, isValidDate, startOfDay, withTime } from '../internal/dates';\nimport { parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxTimeRow } from '../internal/time-row/time-row';\nimport type { TimeOfDay } from '../internal/time-row/time-row-helpers';\n\nconst startOfDayOrNull = (date: Date | null) => (isValidDate(date) ? startOfDay(date) : null);\n\nexport type HxDateTimePickerValue = Date | null;\n\n/**\n * A date and time field that opens a calendar with a time row under it (hour, minute, optionally second and AM/PM),\n * or with `[inline]=\"true\"` the calendar and the time row alone. The value is one `Date`; clearing the field gives\n * `null`. Typing parses `10/09/2026, 14:30` or `10/09/2026 2:30 PM`.\n *\n * ```html\n * <hx-date-time-picker inputId=\"start\" showIcon showButtonBar [stepMinute]=\"15\" [(ngModel)]=\"start\" />\n * <hx-date-time-picker inline ariaLabel=\"Start\" [(value)]=\"start\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). Choosing a day keeps the time already set;\n * setting a time with no date takes today. `minDate` and `maxDate` are compared including the time. The popup is a\n * non-modal dialog that stays open until Escape, the focus leaves the control or a button of the button bar.\n *\n * Each time column is a `spinbutton`: Arrow Up and Down change it by the step, Page Up and Page Down by a larger step,\n * Home and End go to the first and last value. Keyboard in the day grid: arrows move by a day or a week, Home and End\n * to the start and end of the week, Page Up and Page Down by a month (with Shift by a year), Enter or Space selects.\n */\n@Component({\n selector: 'hx-date-time-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxCalendar, HxTimeRow],\n templateUrl: './date-time-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxDateTimePicker), multi: true },\n ],\n host: {\n class: 'hx-date-time-picker',\n '[class.hx-date-time-picker-inline]': 'inline()',\n '[class.hx-date-time-picker-disabled]': 'isDisabled()',\n '[class.hx-date-time-picker-invalid]': 'invalid()',\n '[class.hx-date-time-picker-open]': 'open()',\n '[class.hx-date-time-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDateTimePicker\n implements ControlValueAccessor, FormValueControl<HxDateTimePickerValue>\n{\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A calendar button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Today and Clear buttons under the time row of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /**\n * `Intl.DateTimeFormat` options of the text in the field. By default numeric, so a typed date parses back: day,\n * month and year, plus hour and minute (and second), with the `hourCycle` of `hourFormat`.\n */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly todayLabel = input('Today');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose date and time');\n /** Accessible names of the time row and its columns. */\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** `'12'` shows hours from 1 to 12 and an AM/PM column. */\n readonly hourFormat = input<'24' | '12'>('24');\n /** A minutes column; `false` picks the hour only (minutes and seconds are `0`, `showSeconds` is ignored). */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** A seconds column. */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n /** Step of the arrow keys and buttons of the hour column. */\n readonly stepHour = input(1, { transform: numberAttribute });\n /** Step of the minute column. */\n readonly stepMinute = input(1, { transform: numberAttribute });\n /** Step of the second column. */\n readonly stepSecond = input(1, { transform: numberAttribute });\n\n /** Shows the calendar and the time row in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n /** The earliest and latest moment that can be chosen, compared including the time. */\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n /** Days that cannot be chosen. */\n readonly disabledDates = input<readonly Date[]>([]);\n /** `0` Sunday … `6` Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** A BCP 47 tag for the names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDateTimePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly titleId = nextId('hx-date-time-picker-title');\n protected readonly popupId = nextId('hx-date-time-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly calendar = viewChild(HxCalendar);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n protected readonly view = signal<CalendarView>('day');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The day with the focus in the grid, and the month the grid shows. */\n protected readonly focusedDate = signal(startOfDay(new Date()));\n protected readonly today = startOfDay(new Date());\n\n protected readonly selectedDate = computed<Date | null>(() => {\n const value = this.value();\n return isValidDate(value) ? value : null;\n });\n protected readonly selectedDates = computed<Date[]>(() => {\n const date = this.selectedDate();\n return date ? [date] : [];\n });\n protected readonly hour12 = computed(() => this.hourFormat() === '12');\n\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n hourCycle: this.hour12() ? 'h12' : 'h23',\n };\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n\n /** The time of day shown in the time row: the value's, or midnight while there is none. */\n protected readonly time = computed<TimeOfDay>(() => {\n const date = this.selectedDate();\n const minutes = this.showMinutes();\n return {\n hours: date?.getHours() ?? 0,\n minutes: minutes ? (date?.getMinutes() ?? 0) : 0,\n seconds: minutes ? (date?.getSeconds() ?? 0) : 0,\n };\n });\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const date = this.selectedDate();\n return date ? this.#format().format(date) : '';\n });\n\n constructor() {\n // a value set from outside drops the text typed and not yet committed (as `writeValue` does)\n effect(() => {\n this.value();\n untracked(() => this.#typed.set(null));\n });\n // a control that becomes disabled closes its popup\n effect(() => {\n if (this.isDisabled()) untracked(() => this.open.set(false));\n });\n // a value set from outside (a binding, a form) brings its month into view; without a value, today moved into\n // `minDate`..`maxDate` does\n effect(() => {\n const first =\n this.selectedDate() ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate());\n const shown = untracked(() => this.focusedDate());\n if (\n first &&\n (first.getFullYear() !== shown.getFullYear() || first.getMonth() !== shown.getMonth())\n ) {\n this.focusedDate.set(startOfDay(first));\n }\n });\n }\n\n #onChange: (value: HxDateTimePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxDateTimePickerValue): void {\n this.#typed.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxDateTimePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the day of an inline calendar (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusDay();\n }\n\n protected isDateDisabled(date: Date): boolean {\n return isDateDisabled(date, {\n min: this.minDate(),\n max: this.maxDate(),\n disabledDates: this.disabledDates(),\n });\n }\n\n /** Whether a date with a time lies outside `minDate`..`maxDate`, compared including the time. */\n #outsideTimeRange(date: Date): boolean {\n return clampTime(date, this.minDate(), this.maxDate()).getTime() !== date.getTime();\n }\n\n /** Chooses a day, keeping the time; `false` when the day is not accepted. */\n protected pick(date: Date): boolean {\n if (this.isDisabled() || this.isDateDisabled(date)) return false;\n const day = startOfDay(date);\n this.focusedDate.set(day);\n this.#typed.set(null);\n this.#commit(this.#atTime(day, this.time()));\n return true;\n }\n\n /** `day` at a time of day, moved into `minDate`..`maxDate` including their times. */\n #atTime(day: Date, time: TimeOfDay): Date {\n return clampTime(\n withTime(day, time.hours, time.minutes, time.seconds),\n this.minDate(),\n this.maxDate(),\n );\n }\n\n /** The time row changed a unit: keep the day, or take today. */\n protected setTime(time: TimeOfDay): void {\n if (this.isDisabled()) return;\n const day = this.selectedDate() ?? this.today;\n if (this.isDateDisabled(day)) return;\n this.#typed.set(null);\n this.#commit(this.#atTime(day, time));\n }\n\n #commit(next: HxDateTimePickerValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusDay(): void {\n afterNextRender(() => this.calendar()?.focusDay(), { injector: this.#injector });\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n // the day to take the focus: the selected day, or today moved into `minDate`..`maxDate`\n this.view.set('day');\n this.focusedDate.set(\n startOfDay(\n this.selectedDate() ??\n clampTime(this.today, startOfDayOrNull(this.minDate()), this.maxDate()),\n ),\n );\n this.#focusDay();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n if (this.isDisabled()) return;\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable, disabled or out of range date and time puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null || this.isDisabled()) return;\n this.#typed.set(null);\n const text = typed.trim();\n if (text === '') {\n if (this.value() !== null) this.#commit(null);\n } else {\n const parsed = parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: false,\n fallbackDay: this.selectedDate() ?? this.today,\n });\n if (parsed && !this.isDateDisabled(parsed) && !this.#outsideTimeRange(parsed)) {\n this.#commit(parsed);\n this.focusedDate.set(startOfDay(parsed));\n }\n }\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n protected selectToday(): void {\n // the time row keeps the popup open on a day: the button bar closes it\n if (this.pick(this.today)) this.close(true);\n }\n\n protected clear(): void {\n if (this.isDisabled()) return;\n this.#typed.set(null);\n this.#commit(null);\n this.close(true);\n }\n\n #leave(): void {\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-date-time-picker-popup') || this.#host.nativeElement.contains(next))\n return;\n // an open popup stays open while the focus is on nothing (a click on its padding); leaving for another element closes it\n if (this.open() && !next) return;\n this.#leave();\n }\n\n /** The focus left the popup for something outside the control. */\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n !next ||\n next.closest('.hx-date-time-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n this.#leave();\n }\n\n /** The focus left an inline calendar and time row for something outside the control. */\n protected onInlineFocusOut(event: FocusEvent): void {\n if (!this.inline() || this.#host.nativeElement.contains(event.relatedTarget as Node | null))\n return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"panel\" />\n} @else {\n <div class=\"hx-date-time-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-date-time-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-date-time-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-time-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-time-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-time-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"panel\" />\n @if (showButtonBar()) {\n <div class=\"hx-date-time-picker-buttonbar\">\n <button type=\"button\" class=\"hx-date-time-picker-button\" (click)=\"selectToday()\">{{ todayLabel() }}</button>\n <button type=\"button\" class=\"hx-date-time-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #panel>\n <div\n class=\"hx-date-time-picker-panel\"\n role=\"group\"\n [attr.aria-label]=\"inline() ? (ariaLabel() ?? chooseLabel()) : null\"\n [attr.aria-labelledby]=\"inline() ? (ariaLabelledby() ?? null) : null\"\n (focusout)=\"onInlineFocusOut($event)\"\n >\n <hx-calendar\n [(focusedDate)]=\"focusedDate\"\n [(view)]=\"view\"\n [selectedDates]=\"selectedDates()\"\n selectionMode=\"single\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [titleId]=\"titleId\"\n [today]=\"today\"\n (picked)=\"pick($event)\"\n />\n <hx-time-row\n [time]=\"time()\"\n [hour12]=\"hour12()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [timeLabel]=\"timeLabel()\"\n [hourLabel]=\"hourLabel()\"\n [minuteLabel]=\"minuteLabel()\"\n [secondLabel]=\"secondLabel()\"\n [periodLabel]=\"periodLabel()\"\n (timeChange)=\"setTime($event)\"\n />\n </div>\n</ng-template>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { clampTime, isValidDate, withTime } from '../internal/dates';\nimport { parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxTimeRow } from '../internal/time-row/time-row';\nimport type { TimeOfDay } from '../internal/time-row/time-row-helpers';\n\nexport type HxTimePickerValue = Date | null;\n\n/**\n * A time field that opens a time row (hour, minute, optionally second and AM/PM), or with `[inline]=\"true\"` the\n * time row alone. The value is a `Date` that is today at the chosen time; clearing the field gives `null`. Typing\n * parses `14:30`, `2:30 PM` and, with `[showMinutes]=\"false\"`, `14`.\n *\n * ```html\n * <hx-time-picker inputId=\"alarm\" hourFormat=\"12\" showIcon [(ngModel)]=\"alarm\" />\n * <hx-time-picker [showMinutes]=\"false\" [(value)]=\"opens\" />\n * <hx-time-picker inline [stepMinute]=\"15\" ariaLabel=\"Start\" [(value)]=\"start\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). Each column is a `spinbutton`: Arrow Up\n * and Down change it by the step, Page Up and Page Down by a larger step, Home and End go to the first and last\n * value. `minTime` and `maxTime` limit the time of day (only the time of the dates counts). The popup is a non-modal\n * dialog that stays open until Escape, the focus leaves the control or a button of the button bar.\n */\n@Component({\n selector: 'hx-time-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet, HxTimeRow],\n templateUrl: './time-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxTimePicker), multi: true },\n ],\n host: {\n class: 'hx-time-picker',\n '[class.hx-time-picker-inline]': 'inline()',\n '[class.hx-time-picker-disabled]': 'isDisabled()',\n '[class.hx-time-picker-invalid]': 'invalid()',\n '[class.hx-time-picker-open]': 'open()',\n '[class.hx-time-picker-has-icon]': 'showIcon() && !inline()',\n '[class.hx-filled]': '!inline() && text() !== \"\"',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxTimePicker implements ControlValueAccessor, FormValueControl<HxTimePickerValue> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The text field's placeholder. */\n readonly placeholder = input('');\n /** A clock button at the end of the field. */\n readonly showIcon = input(false, { transform: booleanAttribute });\n /** Now and Clear buttons under the time row of the popup. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n /** `Intl.DateTimeFormat` options of the text in the field (default: numeric hour, minute, second with the `hourCycle`). */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly nowLabel = input('Now');\n readonly clearLabel = input('Clear');\n readonly chooseLabel = input('Choose time');\n /** Accessible names of the time row and its columns. */\n readonly timeLabel = input('Time');\n readonly hourLabel = input('Hour');\n readonly minuteLabel = input('Minute');\n readonly secondLabel = input('Second');\n readonly periodLabel = input('AM/PM');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n\n /** `'12'` shows hours from 1 to 12 and an AM/PM column. */\n readonly hourFormat = input<'24' | '12'>('24');\n /** A minutes column; `false` picks the hour only (minutes and seconds are `0`, `showSeconds` is ignored). */\n readonly showMinutes = input(true, { transform: booleanAttribute });\n /** A seconds column. */\n readonly showSeconds = input(false, { transform: booleanAttribute });\n readonly stepHour = input(1, { transform: numberAttribute });\n readonly stepMinute = input(1, { transform: numberAttribute });\n readonly stepSecond = input(1, { transform: numberAttribute });\n /** The earliest and latest time of day; only the time of the dates counts. */\n readonly minTime = input<Date | null>(null);\n readonly maxTime = input<Date | null>(null);\n\n /** Shows the time row in the page. */\n readonly inline = input(false, { transform: booleanAttribute });\n /** A BCP 47 tag for the format and the AM/PM names (default: the browser's). */\n readonly locale = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxTimePickerValue>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly popupId = nextId('hx-time-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly timeRow = viewChild(HxTimeRow);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly hour12 = computed(() => this.hourFormat() === '12');\n\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n hourCycle: this.hour12() ? 'h12' : 'h23',\n };\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n\n /** The time of day shown in the time row: the value's, or midnight while there is none. */\n protected readonly time = computed<TimeOfDay>(() => {\n const value = this.value();\n const date = isValidDate(value) ? value : null;\n const minutes = this.showMinutes();\n return {\n hours: date?.getHours() ?? 0,\n minutes: minutes ? (date?.getMinutes() ?? 0) : 0,\n seconds: minutes ? (date?.getSeconds() ?? 0) : 0,\n };\n });\n\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const value = this.value();\n return isValidDate(value) ? this.#format().format(value) : '';\n });\n\n #onChange: (value: HxTimePickerValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxTimePickerValue): void {\n this.#typed.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: HxTimePickerValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field, or the first column of an inline time row (signal forms call this to focus the control). */\n focus(): void {\n const field = this.field();\n if (field) field.nativeElement.focus();\n else this.#focusRow();\n }\n\n /** `date` moved into `minTime`..`maxTime`, comparing only the time of day. */\n #clamp(date: Date): Date {\n const onDay = (limit: Date | null) =>\n isValidDate(limit)\n ? withTime(date, limit.getHours(), limit.getMinutes(), limit.getSeconds())\n : null;\n return clampTime(date, onDay(this.minTime()), onDay(this.maxTime()));\n }\n\n #outsideRange(date: Date): boolean {\n return this.#clamp(date).getTime() !== date.getTime();\n }\n\n /** The time row changed a unit: today at that time. */\n protected setTime(time: TimeOfDay): void {\n if (this.isDisabled()) return;\n this.#typed.set(null);\n this.#commit(this.#clamp(withTime(new Date(), time.hours, time.minutes, time.seconds)));\n }\n\n #commit(next: HxTimePickerValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n\n #focusRow(): void {\n afterNextRender(() => this.timeRow()?.focus(), { injector: this.#injector });\n }\n\n protected show(): void {\n if (this.isDisabled() || this.inline() || this.open()) return;\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n this.#focusRow();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || (event.altKey && event.key === 'ArrowUp')) {\n event.preventDefault();\n this.show();\n } else if (event.key === 'Enter') {\n this.commitTyping();\n }\n }\n\n protected onTyping(event: Event): void {\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed text; an unreadable time or one outside `minTime`..`maxTime` puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null) return;\n this.#typed.set(null);\n const text = typed.trim();\n if (text === '') {\n this.#commit(null);\n } else {\n const parsed = parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: true,\n fallbackDay: new Date(),\n });\n if (parsed && !this.#outsideRange(parsed)) this.#commit(parsed);\n }\n // the binding does not change when the value stays: put the field's text back by hand\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n protected selectNow(): void {\n const now = new Date();\n this.setTime({\n hours: now.getHours(),\n minutes: this.showMinutes() ? now.getMinutes() : 0,\n seconds: this.showMinutes() ? now.getSeconds() : 0,\n });\n this.close(true);\n }\n\n protected clear(): void {\n this.#typed.set(null);\n this.#commit(null);\n this.close(true);\n }\n\n #leave(): void {\n this.close();\n this.commitTyping();\n this.#onTouched();\n this.touch.emit();\n }\n\n protected onHostFocusOut(event: FocusEvent): void {\n if (this.inline()) return;\n const next = event.relatedTarget as HTMLElement | null;\n if (next?.closest('.hx-time-picker-popup') || this.#host.nativeElement.contains(next)) return;\n // an open popup stays open while the focus is on nothing (a click on its padding); leaving for another element closes it\n if (this.open() && !next) return;\n this.#leave();\n }\n\n /** The focus left an inline time row for something outside the control. */\n protected onInlineFocusOut(event: FocusEvent): void {\n if (!this.inline() || this.#host.nativeElement.contains(event.relatedTarget as Node | null))\n return;\n this.#onTouched();\n this.touch.emit();\n }\n\n /** The focus left the popup for something outside the control. */\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next || next.closest('.hx-time-picker-popup') || this.#host.nativeElement.contains(next))\n return;\n this.#leave();\n }\n}\n","@if (inline()) {\n <ng-container [ngTemplateOutlet]=\"row\" />\n} @else {\n <div class=\"hx-time-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n class=\"hx-time-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"show()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n @if (showIcon()) {\n <button\n type=\"button\"\n class=\"hx-time-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-time-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-time-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-time-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"row\" />\n @if (showButtonBar()) {\n <div class=\"hx-time-picker-buttonbar\">\n <button type=\"button\" class=\"hx-time-picker-button\" (click)=\"selectNow()\">{{ nowLabel() }}</button>\n <button type=\"button\" class=\"hx-time-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n </div>\n }\n </div>\n </ng-template>\n}\n\n<ng-template #row>\n <div\n class=\"hx-time-picker-panel\"\n [attr.role]=\"inline() ? 'group' : null\"\n [attr.aria-label]=\"inline() ? (ariaLabel() ?? timeLabel()) : null\"\n [attr.aria-labelledby]=\"inline() ? (ariaLabelledby() ?? null) : null\"\n (focusout)=\"onInlineFocusOut($event)\"\n >\n <hx-time-row\n [time]=\"time()\"\n [hour12]=\"hour12()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n [timeLabel]=\"timeLabel()\"\n [hourLabel]=\"hourLabel()\"\n [minuteLabel]=\"minuteLabel()\"\n [secondLabel]=\"secondLabel()\"\n [periodLabel]=\"periodLabel()\"\n (timeChange)=\"setTime($event)\"\n />\n </div>\n</ng-template>\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxDatePicker, type HxDatePickerValue } from '../date-picker/date-picker';\nimport {\n type HxDateTimeRangePreset,\n hxResolvePreset,\n} from '../date-range-presets/date-range-presets';\nimport { clampTime, isSameDay, isValidDate, startOfDay, withTime } from '../internal/dates';\nimport { parseDateText, parseDateTimeText } from '../internal/field/date-text';\nimport { nextId } from '../internal/ids';\nimport { HxRangePresets } from '../internal/range-presets/range-presets';\nimport { isInSelectOverlay } from '../select/select';\nimport { HxTimePicker, type HxTimePickerValue } from '../time-picker/time-picker';\n\nexport interface HxDateTimeRangeValue {\n from: Date | null;\n to: Date | null;\n}\n\nconst EMPTY: HxDateTimeRangeValue = { from: null, to: null };\nconst earlier = (a: Date | null, b: Date | null) => (a && b ? (a <= b ? a : b) : (a ?? b));\nconst sameTime = (a: Date | null, b: Date | null) => a?.getTime() === b?.getTime();\nconst sameRange = (a: HxDateTimeRangeValue, b: HxDateTimeRangeValue) =>\n sameTime(a.from, b.from) && sameTime(a.to, b.to);\nconst later = (a: Date | null, b: Date | null) => (a && b ? (a >= b ? a : b) : (a ?? b));\n\n/**\n * A from and a to date-time range in one field with one button. The field shows the range as one text\n * (`1/1/2026 00:00 - 1/2/2026 00:15`); the popup holds one calendar (an inline range `hx-date-picker`) and a time picker for each end,\n * from and to. The value is `{ from, to }` (`null` while a side is empty); `to` is never before `from`: the `to`\n * time picker starts at `from` (including the time), the `from` time picker ends at `to`, and a choice that crosses the\n * other side moves it. The field is read-only unless `typeable`, which lets the range be typed in the field's\n * format (Enter or leaving the field commits it, an unreadable range puts the value back); the popup stays open\n * until Escape, an outside click or the focus leaving it.\n *\n * ```html\n * <hx-date-time-range-picker [stepMinute]=\"15\" [(ngModel)]=\"shift\" />\n * <hx-date-time-range-picker timeOnly [showMinutes]=\"false\" [(value)]=\"opening\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). The time options are those of\n * `hx-time-picker`. The popup is a dialog named by `ariaLabel` / `ariaLabelledby`; its time pickers are named\n * `fromLabel` / `toLabel`.\n */\n@Component({\n selector: 'hx-date-time-range-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, HxDatePicker, HxRangePresets, HxTimePicker],\n templateUrl: './date-time-range-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HxDateTimeRangePicker),\n multi: true,\n },\n ],\n host: {\n class: 'hx-date-time-range-picker',\n '(focusout)': 'onHostFocusOut($event)',\n },\n})\nexport class HxDateTimeRangePicker\n implements ControlValueAccessor, FormValueControl<HxDateTimeRangeValue>\n{\n /** The names of the two time pickers in the popup. */\n readonly fromLabel = input('From');\n readonly toLabel = input('To');\n /** The text between the two dates in the field. */\n readonly separator = input('-');\n readonly placeholder = input('');\n /** The name of the group of preset buttons. */\n readonly presetsLabel = input('Presets');\n /** Ready-made ranges listed in the popup; choosing one fills the draft, Submit applies it. */\n readonly presets = input<readonly HxDateTimeRangePreset[]>([]);\n /** The presets as a row of `buttons` (default) or in a compact `select`. */\n readonly presetDisplay = input<'buttons' | 'select'>('buttons');\n readonly clearLabel = input('Clear');\n readonly cancelLabel = input('Cancel');\n readonly submitLabel = input('Submit');\n readonly chooseLabel = input('Choose date range');\n /** The `id` of the text field, for a `<label for>`. */\n readonly inputId = input<string>();\n /** The range can be typed into the field (`from separator to`); otherwise the field is read-only. */\n readonly typeable = input(false, { transform: booleanAttribute });\n\n /** The time picker options, for both ends. */\n readonly showTime = input(true, { transform: booleanAttribute });\n readonly timeOnly = input(false, { transform: booleanAttribute });\n readonly hourFormat = input<'24' | '12'>('24');\n readonly showMinutes = input(true, { transform: booleanAttribute });\n readonly showSeconds = input(false, { transform: booleanAttribute });\n readonly stepHour = input(1, { transform: numberAttribute });\n readonly stepMinute = input(1, { transform: numberAttribute });\n readonly stepSecond = input(1, { transform: numberAttribute });\n readonly dateFormat = input<Intl.DateTimeFormatOptions>();\n readonly locale = input<string>();\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<readonly Date[]>([]);\n /** A Clear button next to Cancel and Submit. */\n readonly showButtonBar = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxDateTimeRangeValue>(EMPTY);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n readonly open = signal(false);\n /** The range being edited in the popup; Submit makes it the value, Cancel drops it. */\n protected readonly draft = signal<HxDateTimeRangeValue>(EMPTY);\n /** The preset chosen in the select (shown until the draft changes otherwise or the popup opens again). */\n protected readonly selectedPreset = signal<HxDateTimeRangePreset | null>(null);\n protected readonly popupId = nextId('hx-date-time-range-picker-popup');\n protected readonly positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 2,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -2,\n },\n ];\n private readonly field = viewChild<ElementRef<HTMLInputElement>>('field');\n private readonly daysPicker = viewChild(HxDatePicker);\n private readonly timePicker = viewChild(HxTimePicker);\n /** The times of the last complete sides, kept while a side is empty (a range being chosen in the calendar). */\n #lastFrom: Date | null = null;\n #lastTo: Date | null = null;\n readonly #cvaDisabled = signal(false);\n /** The text typed and not yet committed; `null` while the field shows the value. */\n readonly #typed = signal<string | null>(null);\n readonly #format = computed(() => {\n const custom = this.dateFormat();\n if (custom) return new Intl.DateTimeFormat(this.locale(), custom);\n const options: Intl.DateTimeFormatOptions = this.timeOnly()\n ? {}\n : { day: 'numeric', month: 'numeric', year: 'numeric' };\n if (this.showTime() || this.timeOnly()) {\n options.hour = 'numeric';\n if (this.showMinutes()) options.minute = '2-digit';\n if (this.showMinutes() && this.showSeconds()) options.second = '2-digit';\n options.hourCycle = this.hourFormat() === '12' ? 'h12' : 'h23';\n }\n return new Intl.DateTimeFormat(this.locale(), options);\n });\n /** `1/1/2026 00:00 - 1/2/2026 00:15`: the date and the time are separated by a space, not a comma. */\n protected readonly text = computed(() => {\n const typed = this.#typed();\n if (typed !== null) return typed;\n const { from, to } = this.value();\n if (!from && !to) return '';\n const one = (d: Date | null) => (d ? this.#formatDate(d) : '');\n return `${one(from)} ${this.separator()} ${one(to)}`.trim();\n });\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n /** `from` ends at `to`, `to` starts at `from`, each inside `minDate`..`maxDate`. */\n protected readonly fromMax = computed(() => earlier(this.draft().to, this.maxDate()));\n protected readonly toMin = computed(() => later(this.draft().from, this.minDate()));\n /** Counts the refused changes of a time picker; the pickers' values depend on it, so they show the draft again. */\n readonly #refused = signal(0);\n /** The values of the two time pickers: a fresh `Date` per draft change (midnight while a side is empty). */\n protected readonly fromValue = computed<HxTimePickerValue>(() =>\n this.#pickerValue(this.draft().from),\n );\n protected readonly toValue = computed<HxTimePickerValue>(() =>\n this.#pickerValue(this.draft().to),\n );\n\n #onChange: (value: HxDateTimeRangeValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n constructor() {\n // a value set from outside drops the text typed and not yet committed (as `writeValue` does)\n effect(() => {\n this.value();\n untracked(() => this.#typed.set(null));\n });\n }\n\n writeValue(value: HxDateTimeRangeValue | null): void {\n this.value.set({ from: value?.from ?? null, to: value?.to ?? null });\n }\n registerOnChange(fn: (value: HxDateTimeRangeValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the text field (signal forms call this to focus the control). */\n focus(): void {\n this.field()?.nativeElement.focus();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.#stage(this.value());\n this.selectedPreset.set(null);\n this.open.set(true);\n }\n\n protected toggle(): void {\n if (this.open()) this.close(true);\n else this.show();\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (refocus) this.field()?.nativeElement.focus();\n }\n\n protected onAttach(): void {\n afterNextRender(() => (this.daysPicker() ?? this.timePicker())?.focus(), {\n injector: this.#injector,\n });\n }\n\n /** A typeable field opens with the button, Arrow Down or Alt+Arrow Up (click, Enter and Space are for typing). */\n protected onFieldClick(): void {\n if (!this.typeable()) this.show();\n }\n\n protected onFieldKeydown(event: KeyboardEvent): void {\n if (this.typeable() && event.key === 'Enter') {\n // a surrounding form is not submitted: Enter commits the typed text\n event.preventDefault();\n this.commitTyping();\n } else if (this.typeable() && event.key === 'Escape' && this.#typed() !== null) {\n event.preventDefault();\n this.#revertTyping();\n } else if (\n event.key === 'ArrowDown' ||\n (event.altKey && event.key === 'ArrowUp') ||\n (!this.typeable() && (event.key === 'Enter' || event.key === ' '))\n ) {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onTyping(event: Event): void {\n if (!this.typeable() || this.isDisabled()) return;\n this.#typed.set((event.target as HTMLInputElement).value);\n }\n\n /** Parses the typed range; an unreadable side, a disabled day or a time outside the limits puts the value back. */\n protected commitTyping(): void {\n const typed = this.#typed();\n if (typed === null || this.isDisabled()) return;\n this.#typed.set(null);\n const next = this.#parseRange(typed);\n if (next && !sameRange(next, this.value())) {\n this.#commit(next);\n // an open popup edits the typed range from now on\n if (this.open()) this.#stage(next);\n }\n this.#showValue();\n }\n\n /** Escape drops the typed text and shows the value again. */\n #revertTyping(): void {\n this.#typed.set(null);\n this.#showValue();\n }\n\n /** The binding does not change when the value stays: puts the field's text back by hand. */\n #showValue(): void {\n const field = this.field();\n if (field) field.nativeElement.value = this.text();\n }\n\n /** `from separator to`; either side may be empty (`10/9/2026 09:00 -`), a text without the separator is `from`. */\n #parseRange(typed: string): HxDateTimeRangeValue | null {\n const text = typed.trim();\n if (text === '') return EMPTY;\n const separator = this.separator()\n .trim()\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n // the separator stands alone: the `-` of `2026-10-09` is not one\n const parts = separator ? text.split(new RegExp(`(?:^|\\\\s+)${separator}(?:\\\\s+|$)`)) : [text];\n if (parts.length > 2) return null;\n const { from: oldFrom, to: oldTo } = this.value();\n const from = this.#parseSide(parts[0], oldFrom);\n const to = this.#parseSide(parts[1] ?? '', oldTo ?? oldFrom);\n if (from === undefined || to === undefined) return null;\n return from && to && to < from ? { from: to, to: from } : { from, to };\n }\n\n /** `null` for an empty side, `undefined` for one that is unreadable, on a disabled day or outside the limits. */\n #parseSide(part: string, old: Date | null): Date | null | undefined {\n const text = part.trim();\n if (text === '') return null;\n const date = this.#timed()\n ? parseDateTimeText(text, {\n locale: this.locale(),\n showMinutes: this.showMinutes(),\n timeOnly: this.timeOnly(),\n fallbackDay: old ?? new Date(),\n })\n : parseDateText(text, this.locale());\n if (!date || this.#isBlocked(date)) return undefined;\n const [min, max] = [this.minDate(), this.maxDate()];\n if ((min && date < min) || (max && date > max)) return undefined;\n return date;\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n // the list of the preset select is its own overlay\n if (this.#inSelectList(event.target)) return;\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n /** Empties the draft; Submit applies the empty range. */\n protected clear(): void {\n this.#stage(EMPTY);\n }\n\n /** A preset chosen (a button or the select): fills the draft; the select shows it (staging resets it, so set after). */\n protected selectPreset(preset: HxDateTimeRangePreset): void {\n if (this.applyPreset(preset)) this.selectedPreset.set(preset);\n }\n\n #inSelectList(target: EventTarget | null): boolean {\n return isInSelectOverlay(target);\n }\n\n /** Puts a preset into the draft (the calendar and the time pickers show it); Submit commits it. */\n protected applyPreset(preset: HxDateTimeRangePreset): boolean {\n const { from: oldFrom, to: oldTo } = this.draft();\n const range = hxResolvePreset(preset, { firstDayOfWeek: this.firstDayOfWeek() }, (date, side) =>\n this.#fitPreset(date, side === 'from' ? oldFrom : (oldTo ?? oldFrom)),\n );\n // a side on a day in `disabledDates` refuses the preset, as a click or a typed day would\n if (!range) return false;\n this.#stage(range);\n return true;\n }\n\n /**\n * A preset side as the picker can show it (as a typed side is read): the day only without the time pickers, the\n * time only on the day of the draft (or today) with `timeOnly`; `undefined` on a disabled day.\n */\n #fitPreset(date: Date, old: Date | null): Date | null | undefined {\n if (!isValidDate(date)) return null;\n const fitted = this.timeOnly()\n ? this.#atTime(old ?? new Date(), date)\n : this.#timed()\n ? date\n : startOfDay(date);\n return this.#isBlocked(fitted) ? undefined : fitted;\n }\n\n /** The value has a time (the time pickers are shown). */\n #timed(): boolean {\n return this.showTime() || this.timeOnly();\n }\n\n protected submit(): void {\n this.#commit(this.draft());\n this.close(true);\n }\n\n #formatDate(date: Date): string {\n return this.#format().format(date).replace(/,\\s*/, ' ');\n }\n\n /** The focus left the control (field, button and popup): the popup closes and the control is touched. */\n protected onHostFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n this.#inSelectList(next) ||\n next?.closest('.hx-date-time-range-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n // a click on the popup's own non-focusable area has no related target: stay open\n if (this.open() && !next) return;\n this.close();\n this.markTouched();\n }\n\n protected onPopupFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as HTMLElement | null;\n if (\n !next ||\n this.#inSelectList(next) ||\n next.closest('.hx-date-time-range-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\n this.close();\n this.markTouched();\n }\n\n /** The days of the calendar: `[from]` while the range is open, `[from, to]` when complete. */\n protected readonly days = computed<Date[]>(() => {\n const { from, to } = this.draft();\n return [from, to].filter((d): d is Date => d !== null);\n });\n\n /** A choice in the calendar sets the days and keeps the times already chosen (midnight while there is none). */\n protected setDays(picked: HxDatePickerValue): void {\n const [first, second] = (Array.isArray(picked) ? [...picked] : [picked])\n .filter(isValidDate)\n .sort((a, b) => a.getTime() - b.getTime());\n const old = this.draft();\n const [fromTime, toTime] = [old.from ?? this.#lastFrom, old.to ?? this.#lastTo ?? old.from];\n const at = (day: Date | undefined, time: Date | null) =>\n day\n ? withTime(\n startOfDay(day),\n time?.getHours() ?? 0,\n time?.getMinutes() ?? 0,\n time?.getSeconds() ?? 0,\n )\n : null;\n const from = at(first, fromTime);\n const to = at(second, toTime);\n this.#stage({ from, to: from && to && to < from ? from : to });\n }\n\n /** The `from` picker changed: the day of `from` (else of `to`, else today) at the new time, not after `to`. */\n protected setFromTime(picked: HxTimePickerValue): void {\n if (!picked) {\n this.#restage();\n return;\n }\n const { from, to } = this.draft();\n const day = from ?? to ?? new Date();\n if (this.#isBlocked(day)) {\n this.#restage();\n return;\n }\n const next = clampTime(this.#atTime(day, picked), this.minDate(), this.fromMax());\n this.#stage({ from: next, to });\n }\n\n /** The `to` picker changed: the day of `to` (else of `from`, else today) at the new time, not before `from`. */\n protected setToTime(picked: HxTimePickerValue): void {\n if (!picked) {\n this.#restage();\n return;\n }\n const { from, to } = this.draft();\n const day = to ?? from ?? new Date();\n if (this.#isBlocked(day)) {\n this.#restage();\n return;\n }\n const next = clampTime(this.#atTime(day, picked), this.toMin(), this.maxDate());\n // a `to` chosen while `from` is empty starts the range at midnight of that day (what the `from` picker shows)\n this.#stage({ from: from ?? startOfDay(next), to: next });\n }\n\n #pickerValue(side: Date | null): Date {\n this.#refused();\n return side ? new Date(side) : startOfDay(new Date());\n }\n\n /** Puts the draft back into the pickers after a time they changed was refused. */\n #restage(): void {\n this.#refused.update((n) => n + 1);\n }\n\n /** A time is not set on a day in `disabledDates`. */\n #isBlocked(day: Date): boolean {\n return this.disabledDates().some((d) => isSameDay(d, day));\n }\n\n #atTime(day: Date, time: Date): Date {\n return withTime(startOfDay(day), time.getHours(), time.getMinutes(), time.getSeconds());\n }\n\n protected markTouched(): void {\n this.#onTouched();\n this.touch.emit();\n }\n\n /** Sets the draft; a side is moved into `minDate`..`maxDate` including the time. */\n #stage(next: HxDateTimeRangeValue): void {\n const clean = this.#inside(next);\n // a changed draft is a new attempt: the preset select can take any preset again\n this.selectedPreset.set(null);\n if (clean.from) this.#lastFrom = clean.from;\n if (clean.to) this.#lastTo = clean.to;\n this.draft.set(clean);\n }\n\n /** A range with each side moved into `minDate`..`maxDate` including the time (an invalid side is empty). */\n #inside(next: HxDateTimeRangeValue): HxDateTimeRangeValue {\n const inside = (d: Date | null) =>\n isValidDate(d) ? clampTime(d, this.minDate(), this.maxDate()) : null;\n return { from: inside(next.from), to: inside(next.to) };\n }\n\n #commit(next: HxDateTimeRangeValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n}\n","<div\n class=\"hx-date-picker hx-date-picker-has-icon hx-date-time-range-picker-control\"\n [class.hx-date-picker-open]=\"open()\"\n [class.hx-date-picker-disabled]=\"isDisabled()\"\n [class.hx-date-picker-invalid]=\"invalid()\"\n>\n <div class=\"hx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n #field\n type=\"text\"\n [readOnly]=\"!typeable()\"\n class=\"hx-date-picker-input\"\n autocomplete=\"off\"\n aria-haspopup=\"dialog\"\n [attr.id]=\"inputId() ?? null\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"text()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? popupId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onTyping($event)\"\n (change)=\"commitTyping()\"\n (click)=\"onFieldClick()\"\n (keydown)=\"onFieldKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"hx-date-picker-trigger\"\n aria-haspopup=\"dialog\"\n [attr.aria-label]=\"chooseLabel()\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-date-picker-trigger-icon\" aria-hidden=\"true\"></span>\n </button>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-date-picker-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <div\n class=\"hx-date-picker-popup hx-date-time-range-picker-popup\"\n role=\"dialog\"\n aria-modal=\"false\"\n [id]=\"popupId\"\n [attr.aria-label]=\"ariaLabel() ?? chooseLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (focusout)=\"onPopupFocusOut($event)\"\n >\n @if (presets().length > 0) {\n <hx-range-presets\n [presets]=\"presets()\"\n [display]=\"presetDisplay()\"\n [label]=\"presetsLabel()\"\n [disabled]=\"isDisabled()\"\n [selected]=\"selectedPreset()\"\n (chosen)=\"selectPreset($event)\"\n />\n }\n <div class=\"hx-date-time-range-picker-body\">\n @if (!timeOnly()) {\n <hx-date-picker\n class=\"hx-date-time-range-picker-days\"\n inline\n selectionMode=\"range\"\n [ariaLabel]=\"chooseLabel()\"\n [value]=\"days()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [locale]=\"locale()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [disabledDates]=\"disabledDates()\"\n (valueChange)=\"setDays($event)\"\n />\n }\n @if (showTime() || timeOnly()) {\n <div class=\"hx-date-time-range-picker-times\">\n <div class=\"hx-date-time-range-picker-time\">\n <span class=\"hx-date-time-range-picker-caption\" aria-hidden=\"true\">{{ fromLabel() }}</span>\n <hx-time-picker\n inline\n class=\"hx-date-time-range-picker-from\"\n [ariaLabel]=\"fromLabel()\"\n [value]=\"fromValue()\"\n [hourFormat]=\"hourFormat()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"setFromTime($event)\"\n />\n </div>\n <div class=\"hx-date-time-range-picker-time\">\n <span class=\"hx-date-time-range-picker-caption\" aria-hidden=\"true\">{{ toLabel() }}</span>\n <hx-time-picker\n inline\n class=\"hx-date-time-range-picker-to\"\n [ariaLabel]=\"toLabel()\"\n [value]=\"toValue()\"\n [hourFormat]=\"hourFormat()\"\n [showMinutes]=\"showMinutes()\"\n [showSeconds]=\"showSeconds()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [locale]=\"locale()\"\n [disabled]=\"isDisabled()\"\n (valueChange)=\"setToTime($event)\"\n />\n </div>\n </div>\n }\n </div>\n <div class=\"hx-date-picker-buttonbar hx-date-time-range-picker-footer\">\n @if (showButtonBar()) {\n <button type=\"button\" class=\"hx-date-picker-button\" (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n <span class=\"hx-date-time-range-picker-spacer\"></span>\n <button type=\"button\" class=\"hx-date-picker-button hx-date-time-range-picker-cancel\" (click)=\"close(true)\">{{ cancelLabel() }}</button>\n <button\n type=\"button\"\n class=\"hx-date-picker-button hx-date-time-range-picker-submit\"\n (click)=\"submit()\"\n >{{ submitLabel() }}</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxDividerLayout = 'horizontal' | 'vertical';\nexport type HxDividerType = 'solid' | 'dashed' | 'dotted';\nexport type HxDividerAlign = 'start' | 'center' | 'end';\n\n/**\n * A line between content; the projected content is a label sitting on the line.\n *\n * ```html\n * <hx-divider />\n * <hx-divider align=\"center\">or</hx-divider>\n * <hx-divider layout=\"vertical\" />\n * ```\n */\n@Component({\n selector: 'hx-divider',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-divider',\n role: 'separator',\n '[attr.aria-orientation]': 'layout()',\n '[class.hx-divider-horizontal]': \"layout() === 'horizontal'\",\n '[class.hx-divider-vertical]': \"layout() === 'vertical'\",\n '[class.hx-divider-dashed]': \"type() === 'dashed'\",\n '[class.hx-divider-dotted]': \"type() === 'dotted'\",\n '[class.hx-divider-start]': \"align() === 'start'\",\n '[class.hx-divider-center]': \"align() === 'center'\",\n '[class.hx-divider-end]': \"align() === 'end'\",\n },\n})\nexport class HxDivider {\n readonly layout = input<HxDividerLayout>('horizontal');\n readonly type = input<HxDividerType>('solid');\n /** Where the label sits on the line (start, center, end); without a label it has no effect. */\n readonly align = input<HxDividerAlign>();\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n type TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { HxDialogFrame } from '../dialog/dialog';\nimport { nextId } from '../internal/ids';\n\nexport type HxDrawerPosition = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * A panel that slides in from an edge of the screen, with the same dialog semantics as `hx-dialog`, on\n * `@angular/cdk/dialog`.\n *\n * ```html\n * <hx-drawer [(visible)]=\"open\" header=\"Filters\" position=\"right\">\n * …\n * <div hxDialogFooter><button hx-button (click)=\"open = false\">Done</button></div>\n * </hx-drawer>\n * ```\n *\n * `visible` is two-way. A modal drawer puts a mask behind it, traps the focus and returns it when it closes; a click\n * on the mask (`dismissable`, on by default) or Escape closes it. The slide-in stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-drawer',\n imports: [HxDialogFrame],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-drawer-anchor' },\n template: `\n <ng-template #panel>\n <hx-dialog-frame class=\"hx-drawer\" [header]=\"header()\" [titleId]=\"titleId\" [closable]=\"closable()\" [closeLabel]=\"closeLabel()\" (closeClick)=\"visible.set(false)\">\n <ng-container ngProjectAs=\"[hxDialogHeader]\"><ng-content select=\"[hxDialogHeader]\" /></ng-container>\n <ng-content />\n <ng-container ngProjectAs=\"[hxDialogFooter]\"><ng-content select=\"[hxDialogFooter]\" /></ng-container>\n </hx-dialog-frame>\n </ng-template>\n `,\n})\nexport class HxDrawer {\n readonly #dialog = inject(Dialog);\n readonly #overlay = inject(Overlay);\n private readonly panel = viewChild<TemplateRef<unknown>>('panel');\n\n /** Whether the drawer is open. */\n readonly visible = model(false);\n readonly header = input<string>();\n readonly position = input<HxDrawerPosition>('left');\n /** A mask behind the drawer, a focus trap, and the page behind hidden from assistive technology. */\n readonly modal = input(true, { transform: booleanAttribute });\n /** A click on the mask closes a modal drawer. */\n readonly dismissable = input(true, { transform: booleanAttribute });\n readonly closable = input(true, { transform: booleanAttribute });\n readonly closeOnEscape = input(true, { transform: booleanAttribute });\n /** Covers the whole screen. */\n readonly fullScreen = input(false, { transform: booleanAttribute });\n /** CSS width of a left or right drawer (`20rem` by default). */\n readonly width = input<string>();\n /** CSS height of a top or bottom drawer (`20rem` by default). */\n readonly height = input<string>();\n readonly panelClass = input<string | string[]>();\n readonly closeLabel = input('Close');\n /** Accessible name of the drawer when there is no `header`. */\n readonly ariaLabel = input<string>();\n\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n protected readonly titleId = nextId('hx-drawer-title');\n #ref: DialogRef<unknown, unknown> | undefined;\n\n constructor() {\n effect(() => {\n const visible = this.visible();\n const panel = this.panel();\n untracked(() => {\n if (visible && panel) this.#open(panel);\n else if (!visible) this.#ref?.close();\n });\n });\n inject(DestroyRef).onDestroy(() => this.#ref?.close());\n }\n\n #open(panel: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const position = this.position();\n const modal = this.modal();\n const header = this.header();\n const full = this.fullScreen();\n const sideways = position === 'left' || position === 'right';\n const strategy = this.#overlay.position().global();\n if (full) strategy.top('0').left('0');\n else if (position === 'left') strategy.top('0').left('0');\n else if (position === 'right') strategy.top('0').right('0');\n else if (position === 'top') strategy.top('0').left('0');\n else strategy.bottom('0').left('0');\n const size = (sideways ? this.width() : this.height()) ?? '20rem';\n const ref = this.#dialog.open(panel, {\n hasBackdrop: modal,\n backdropClass: 'hx-dialog-backdrop',\n panelClass: [\n 'hx-drawer-panel',\n `hx-drawer-panel-${full ? 'full' : position}`,\n ...[this.panelClass() ?? []].flat(),\n ],\n width: full ? '100vw' : sideways ? size : '100vw',\n height: full ? '100vh' : sideways ? '100vh' : size,\n maxWidth: '100vw',\n maxHeight: '100vh',\n positionStrategy: strategy,\n ariaModal: modal,\n ariaLabelledBy: header ? this.titleId : null,\n ariaLabel: header ? null : (this.ariaLabel() ?? null),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (\n event.key === 'Escape' &&\n this.closeOnEscape() &&\n !event.shiftKey &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => {\n if (this.dismissable()) this.visible.set(false);\n });\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n this.hidden.emit();\n }\n });\n this.shown.emit();\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * A native `<fieldset>` with a `<legend>` that groups related controls and can collapse.\n *\n * ```html\n * <hx-fieldset legend=\"Shipping address\" toggleable [(collapsed)]=\"closed\">\n * <label for=\"street\">Street</label> <input hx-input id=\"street\" />\n * </hx-fieldset>\n * ```\n *\n * When `toggleable`, the legend holds a `<button>` with `aria-expanded` and `aria-controls`; the content is `inert`\n * while collapsed so its controls leave the tab order. Expanding and collapsing is animated unless the user\n * prefers reduced motion. Legend and fieldset keep their native meaning for assistive technology.\n */\n@Component({\n selector: 'hx-fieldset',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-fieldset',\n '[class.hx-fieldset-toggleable]': 'toggleable()',\n '[class.hx-fieldset-collapsed]': 'isCollapsed()',\n },\n template: `\n <fieldset class=\"hx-fieldset-box\">\n <legend class=\"hx-fieldset-legend\">\n @if (toggleable()) {\n <button\n type=\"button\"\n class=\"hx-fieldset-toggle\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n [attr.aria-controls]=\"contentId\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-fieldset-toggle-icon\" aria-hidden=\"true\"></span>\n <span>{{ legend() }}</span>\n </button>\n } @else {\n <span class=\"hx-fieldset-legend-text\">{{ legend() }}</span>\n }\n </legend>\n <div class=\"hx-fieldset-collapse\" [attr.inert]=\"isCollapsed() ? '' : null\">\n <div class=\"hx-fieldset-collapse-inner\">\n <div class=\"hx-fieldset-content\" [id]=\"contentId\"><ng-content /></div>\n </div>\n </div>\n </fieldset>\n `,\n})\nexport class HxFieldset {\n /** The legend text. */\n readonly legend = input('');\n /** The legend gets a button that collapses and expands the content. */\n readonly toggleable = input(false, { transform: booleanAttribute });\n /** Whether the content is collapsed (only a `toggleable` fieldset collapses). */\n readonly collapsed = model(false);\n\n protected readonly contentId = nextId('hx-fieldset-content');\n protected isCollapsed(): boolean {\n return this.toggleable() && this.collapsed();\n }\n\n protected toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n input,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { HxButton } from '../button/button';\nimport { nextId } from '../internal/ids';\n\nexport type HxFileUploadMode = 'basic' | 'advanced';\n\n/** `1536` → `1.5 KB`. */\nexport function formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB', 'TB'];\n let value = bytes / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return `${Number.isInteger(value) ? value : value.toFixed(1)} ${units[unit]}`;\n}\n\n/** Whether a file matches an `accept` list: `.png`, `image/*`, `application/pdf`, separated by commas. */\nexport function matchesAccept(file: File, accept: string): boolean {\n const rules = accept\n .split(',')\n .map((r) => r.trim().toLowerCase())\n .filter(Boolean);\n if (rules.length === 0) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return rules.some((rule) =>\n rule.startsWith('.')\n ? name.endsWith(rule)\n : rule.endsWith('/*')\n ? type.startsWith(rule.slice(0, -1))\n : type === rule,\n );\n}\n\n/**\n * Choosing files, with a drop zone and a list. There is no HTTP in it: the component collects the files and\n * emits them, the app uploads.\n *\n * ```html\n * <hx-file-upload accept=\"image/*,.pdf\" multiple [maxFileSize]=\"1_000_000\" [progress]=\"percent()\"\n * (select)=\"onSelect($event)\" (upload)=\"upload($event)\" />\n * <hx-file-upload mode=\"basic\" accept=\".csv\" chooseLabel=\"Import\" (select)=\"import($event)\" />\n * ```\n *\n * The choose control is a native `<input type=\"file\">` inside a button-like label, so it works by keyboard; the\n * drop zone is an extra way to add files. Files that are too large, of the wrong type or beyond `fileLimit` are not\n * added; the reason is shown in a live region.\n */\n@Component({\n selector: 'hx-file-upload',\n imports: [HxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-file-upload',\n '[class.hx-file-upload-basic]': \"mode() === 'basic'\",\n '[class.hx-file-upload-disabled]': 'disabled()',\n '[class.hx-file-upload-highlight]': 'dragging()',\n },\n template: `\n @if (mode() === 'basic') {\n <label class=\"hx-button hx-file-upload-choose\" [class.hx-button-disabled]=\"disabled()\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <input #picker type=\"file\" class=\"hx-file-upload-input\" [accept]=\"accept()\" [multiple]=\"multiple()\" [disabled]=\"disabled()\" (change)=\"onPick($event)\" />\n {{ chooseLabel() }}\n </label>\n @if (files().length) {\n <span class=\"hx-file-upload-names\">{{ names() }}</span>\n }\n } @else {\n <div class=\"hx-file-upload-header\">\n <label class=\"hx-button hx-file-upload-choose\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <input #picker type=\"file\" class=\"hx-file-upload-input\" [accept]=\"accept()\" [multiple]=\"multiple()\" [disabled]=\"disabled()\" (change)=\"onPick($event)\" />\n {{ chooseLabel() }}\n </label>\n @if (showUploadButton()) {\n <button hx-button type=\"button\" severity=\"secondary\" [disabled]=\"disabled() || !files().length\" (click)=\"doUpload()\">{{ uploadLabel() }}</button>\n }\n @if (showCancelButton()) {\n <button hx-button type=\"button\" severity=\"secondary\" [disabled]=\"disabled() || !files().length\" (click)=\"cancel()\">{{ cancelLabel() }}</button>\n }\n </div>\n <div\n class=\"hx-file-upload-content\"\n (dragenter)=\"onDrag($event, true)\"\n (dragover)=\"onDrag($event, true)\"\n (dragleave)=\"onDrag($event, false)\"\n (drop)=\"onDrop($event)\"\n >\n @if (progress() !== null && progress() !== undefined) {\n <div\n class=\"hx-file-upload-progress\"\n role=\"progressbar\"\n aria-label=\"Upload progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"progress()\"\n >\n <div class=\"hx-file-upload-progress-bar\" [style.width.%]=\"progress()\"></div>\n </div>\n }\n <div class=\"hx-file-upload-messages\" [id]=\"messagesId\" role=\"status\" aria-live=\"polite\">\n @for (message of messages(); track $index) {\n <p class=\"hx-file-upload-message\">{{ message }}</p>\n }\n </div>\n @if (files().length) {\n <ul class=\"hx-file-upload-list\">\n @for (file of files(); track file) {\n <li class=\"hx-file-upload-file\">\n <span class=\"hx-file-upload-file-info\">\n <span class=\"hx-file-upload-file-name\">{{ file.name }}</span>\n <span class=\"hx-file-upload-file-size\">{{ size(file) }}</span>\n </span>\n <button hx-button type=\"button\" variant=\"outlined\" severity=\"danger\" size=\"small\" [attr.aria-label]=\"'Remove ' + file.name\" [disabled]=\"disabled()\" (click)=\"removeFile(file)\">{{ removeLabel() }}</button>\n </li>\n }\n </ul>\n } @else {\n <p class=\"hx-file-upload-empty\">{{ dropLabel() }}</p>\n }\n </div>\n }\n @if (mode() === 'basic') {\n <div class=\"hx-file-upload-messages\" [id]=\"messagesId\" role=\"status\" aria-live=\"polite\">\n @for (message of messages(); track $index) {\n <p class=\"hx-file-upload-message\">{{ message }}</p>\n }\n </div>\n }\n `,\n})\nexport class HxFileUpload {\n readonly mode = input<HxFileUploadMode>('advanced');\n /** Allowed types: `.png`, `image/*`, `application/pdf`, separated by commas. */\n readonly accept = input('');\n readonly multiple = input(false, { transform: booleanAttribute });\n /** The largest file in bytes. */\n readonly maxFileSize = input(undefined, {\n transform: (v: unknown) => (v == null || v === '' ? undefined : numberAttribute(v)),\n });\n /** The most files in the list. */\n readonly fileLimit = input(undefined, {\n transform: (v: unknown) => (v == null || v === '' ? undefined : numberAttribute(v)),\n });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly chooseLabel = input('Choose');\n readonly uploadLabel = input('Upload');\n readonly cancelLabel = input('Cancel');\n readonly removeLabel = input('Remove');\n readonly dropLabel = input('Drag and drop files here');\n readonly showUploadButton = input(true, { transform: booleanAttribute });\n readonly showCancelButton = input(true, { transform: booleanAttribute });\n /** Upload progress, 0 to 100; the bar shows while it is set. */\n readonly progress = input<number | null>(null);\n readonly invalidFileSizeMessage = input(\n '{0}: Invalid file size, file size should be smaller than {1}.',\n );\n readonly invalidFileTypeMessage = input('{0}: Invalid file type, allowed file types: {1}.');\n readonly invalidFileLimitMessage = input(\n 'Maximum number of files exceeded, limit is {0} at most.',\n );\n\n /** The files that were added by one choice or drop. */\n readonly select = output<File[]>();\n /** The file the user removed from the list. */\n readonly remove = output<File>();\n /** The user emptied the list with Cancel. */\n readonly clear = output<void>();\n /** The files in the list, when the user presses Upload. */\n readonly upload = output<File[]>();\n\n protected readonly messagesId = nextId('hx-file-upload-messages');\n readonly files = signal<File[]>([]);\n protected readonly messages = signal<string[]>([]);\n protected readonly dragging = signal(false);\n protected readonly names = computed(() =>\n this.files()\n .map((f) => f.name)\n .join(', '),\n );\n private readonly picker = viewChild<ElementRef<HTMLInputElement>>('picker');\n\n protected size(file: File): string {\n return formatFileSize(file.size);\n }\n\n protected onPick(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.add([...(input.files ?? [])]);\n input.value = ''; // the same file can be chosen again\n }\n\n protected onDrag(event: DragEvent, over: boolean): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.dragging.set(over);\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n this.dragging.set(false);\n if (this.disabled()) return;\n this.add([...(event.dataTransfer?.files ?? [])]);\n }\n\n /** Adds files after checking type, size and limit; the first problem of each file is reported. */\n add(candidates: File[]): void {\n const messages: string[] = [];\n const accepted: File[] = [];\n const kept = this.multiple() ? this.files() : [];\n const limit = this.fileLimit();\n const fill = (template: string, ...values: (string | number)[]) =>\n values.reduce<string>((text, v, i) => text.replace(`{${i}}`, String(v)), template);\n for (const file of this.multiple() ? candidates : candidates.slice(0, 1)) {\n if (this.accept() && !matchesAccept(file, this.accept())) {\n messages.push(fill(this.invalidFileTypeMessage(), file.name, this.accept()));\n } else if (this.maxFileSize() !== undefined && file.size > (this.maxFileSize() as number)) {\n messages.push(\n fill(\n this.invalidFileSizeMessage(),\n file.name,\n formatFileSize(this.maxFileSize() as number),\n ),\n );\n } else if (limit !== undefined && kept.length + accepted.length >= limit) {\n messages.push(fill(this.invalidFileLimitMessage(), limit));\n break;\n } else {\n accepted.push(file);\n }\n }\n this.messages.set(messages);\n if (accepted.length === 0) return;\n this.files.set([...kept, ...accepted]);\n this.select.emit(accepted);\n }\n\n protected removeFile(file: File): void {\n this.files.set(this.files().filter((f) => f !== file));\n this.messages.set([]);\n this.remove.emit(file);\n }\n\n protected cancel(): void {\n this.reset();\n this.clear.emit();\n }\n\n protected doUpload(): void {\n this.upload.emit(this.files());\n }\n\n /** Empties the list and the messages (the app calls it after an upload). */\n reset(): void {\n this.files.set([]);\n this.messages.set([]);\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\nexport type HxFloatLabelVariant = 'over' | 'in' | 'on';\n\n/**\n * A label that sits in the field and moves up when the field has focus or a value. Wrap one control and put\n * its `<label for>` after it.\n *\n * ```html\n * <hx-float-label variant=\"on\">\n * <input hx-input id=\"email\" [(ngModel)]=\"email\" />\n * <label for=\"email\">Email</label>\n * </hx-float-label>\n * ```\n *\n * Native inputs and textareas float by `:focus-within` and `:placeholder-shown` (an input without a\n * placeholder gets a blank one, so the label never sits on top of a hint). The helix-ui components float by\n * the `hx-filled` class they set while they hold a value. The label stays a real `<label>`.\n */\n@Component({\n selector: 'hx-float-label',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-float-label',\n '[class.hx-float-label-in]': \"variant() === 'in'\",\n '[class.hx-float-label-on]': \"variant() === 'on'\",\n },\n template: '<ng-content />',\n})\nexport class HxFloatLabel {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** `over`: above the field, `in`: inside it (the field gets room), `on`: on its top border. */\n readonly variant = input<HxFloatLabelVariant>('over');\n\n constructor() {\n afterNextRender(() => {\n for (const field of this.#host.nativeElement.querySelectorAll(\n ':scope > input, :scope > textarea',\n )) {\n if (!field.hasAttribute('placeholder')) field.setAttribute('placeholder', ' ');\n }\n });\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/** One picture of a galleria. */\nexport interface HxGalleriaItem {\n src: string;\n alt: string;\n /** A smaller picture for the thumbnail strip (default: `src`). */\n thumbnailSrc?: string;\n title?: string;\n caption?: string;\n}\n\nexport type HxGalleriaThumbnailsPosition = 'bottom' | 'top' | 'left' | 'right';\n\nexport interface HxGalleriaItemContext {\n $implicit: HxGalleriaItem;\n index: number;\n}\n\n/** The template of the stage: `<ng-template hxGalleriaItem let-item let-index=\"index\">`. */\n@Directive({ selector: 'ng-template[hxGalleriaItem]' })\nexport class HxGalleriaItemTemplate {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/** The template of a thumbnail: `<ng-template hxGalleriaThumbnail let-item>`. */\n@Directive({ selector: 'ng-template[hxGalleriaThumbnail]' })\nexport class HxGalleriaThumbnail {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/** The template of the caption over the stage: `<ng-template hxGalleriaCaption let-item>`. */\n@Directive({ selector: 'ng-template[hxGalleriaCaption]' })\nexport class HxGalleriaCaption {\n readonly template = inject<TemplateRef<HxGalleriaItemContext>>(TemplateRef);\n}\n\n/**\n * An image gallery: a stage with the current picture, a strip of thumbnails, previous/next buttons, captions and an\n * optional full-screen mode in a modal overlay.\n *\n * ```html\n * <hx-galleria [value]=\"pictures\" [(activeIndex)]=\"index\" [numVisible]=\"5\" circular ariaLabel=\"Product pictures\" />\n * <hx-galleria [value]=\"pictures\" fullScreen [(visible)]=\"open\" />\n * ```\n *\n * The stage is a `region` with `aria-roledescription=\"carousel\"` and the arrow keys move between pictures; the\n * thumbnails are a `tablist`. Full screen is a modal dialog: the focus is trapped, Escape closes it and the focus goes\n * back to where it was.\n */\n@Component({\n selector: 'hx-galleria',\n imports: [NgTemplateOutlet],\n templateUrl: './galleria.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-galleria-host',\n '(mouseenter)': 'hovered.set(true)',\n '(mouseleave)': 'hovered.set(false)',\n },\n})\nexport class HxGalleria {\n readonly value = input<readonly HxGalleriaItem[]>([]);\n /** The picture on the stage (0-based); `activeIndexChange` is its output. */\n readonly activeIndex = model(0);\n /** Thumbnails shown at a time. */\n readonly numVisible = input(5, { transform: numberAttribute });\n /** After the last picture comes the first again. */\n readonly circular = input(false, { transform: booleanAttribute });\n readonly autoplay = input(false, { transform: booleanAttribute });\n readonly autoplayInterval = input(4000, { transform: numberAttribute });\n readonly showThumbnails = input(true, { transform: booleanAttribute });\n /** Dots over the stage. */\n readonly showIndicators = input(false, { transform: booleanAttribute });\n readonly showItemNavigators = input(true, { transform: booleanAttribute });\n readonly thumbnailsPosition = input<HxGalleriaThumbnailsPosition>('bottom');\n /** The gallery is not shown inline; `visible` opens it in a modal overlay. */\n readonly fullScreen = input(false, { transform: booleanAttribute });\n /** Full screen open (with `fullScreen`); `visibleChange` is its output. */\n readonly visible = model(false);\n /** CSS height of the stage inline (full screen uses the viewport). */\n readonly height = input('24rem');\n readonly ariaLabel = input('Gallery');\n readonly prevLabel = input('Previous picture');\n readonly nextLabel = input('Next picture');\n readonly closeLabel = input('Close');\n /** `{index}` and `{count}` are replaced. */\n readonly itemLabelTemplate = input('{index} of {count}');\n\n protected readonly itemTemplate = contentChild(HxGalleriaItemTemplate);\n protected readonly thumbnailTemplate = contentChild(HxGalleriaThumbnail);\n protected readonly captionTemplate = contentChild(HxGalleriaCaption);\n private readonly content = viewChild<TemplateRef<unknown>>('content');\n\n protected readonly hovered = signal(false);\n protected readonly focused = signal(false);\n protected readonly id = nextId('hx-galleria');\n readonly #dialog = inject(Dialog);\n #ref: DialogRef<unknown, unknown> | undefined;\n private readonly reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n protected readonly count = computed(() => this.value().length);\n protected readonly index = computed(() =>\n this.count() ? Math.min(Math.max(0, this.activeIndex()), this.count() - 1) : 0,\n );\n protected readonly current = computed<HxGalleriaItem | undefined>(\n () => this.value()[this.index()],\n );\n protected readonly isFirst = computed(() => this.index() === 0);\n protected readonly isLast = computed(() => this.index() >= this.count() - 1);\n protected readonly prevDisabled = computed(() => !this.circular() && this.isFirst());\n protected readonly nextDisabled = computed(() => !this.circular() && this.isLast());\n protected readonly indices = computed(() => Array.from({ length: this.count() }, (_, i) => i));\n protected readonly hasCaption = computed(\n () => !!this.captionTemplate() || !!this.current()?.title || !!this.current()?.caption,\n );\n\n /** The first thumbnail of the strip: the strip moves so the active picture stays visible. */\n private readonly thumbStart = signal(0);\n protected readonly thumbsVisible = computed(() =>\n Math.max(1, Math.min(this.numVisible(), this.count())),\n );\n protected readonly thumbNavigation = computed(() => this.count() > this.thumbsVisible());\n protected readonly thumbs = computed(() => {\n const start = this.thumbStart();\n return this.indices().slice(start, start + this.thumbsVisible());\n });\n protected readonly thumbPrevDisabled = computed(() => this.thumbStart() === 0);\n protected readonly thumbNextDisabled = computed(\n () => this.thumbStart() + this.thumbsVisible() >= this.count(),\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n // the strip follows the active picture\n effect(() => {\n const index = this.index();\n const visible = this.thumbsVisible();\n const max = Math.max(0, this.count() - visible);\n untracked(() => {\n const start = this.thumbStart();\n if (index < start) this.thumbStart.set(index);\n else if (index >= start + visible) this.thumbStart.set(Math.min(index - visible + 1, max));\n else if (start > max) this.thumbStart.set(max);\n });\n });\n // autoplay\n let timer: ReturnType<typeof setInterval> | undefined;\n const stop = () => {\n if (timer !== undefined) clearInterval(timer);\n timer = undefined;\n };\n effect(() => {\n const on = this.autoplay() && this.autoplayInterval() > 0 && this.count() > 1;\n const paused = this.hovered() || this.focused() || this.reducedMotion;\n stop();\n if (on && !paused)\n timer = setInterval(() => untracked(() => this.next(true)), this.autoplayInterval());\n });\n // full screen\n effect(() => {\n const open = this.fullScreen() && this.visible();\n const content = this.content();\n untracked(() => {\n if (open && content) this.#open(content);\n else if (!open) this.#close();\n });\n });\n destroyRef.onDestroy(() => {\n stop();\n this.#close();\n });\n }\n\n protected itemLabel(index: number): string {\n return this.itemLabelTemplate()\n .replace('{index}', String(index + 1))\n .replace('{count}', String(this.count()));\n }\n\n protected thumbnailSrc(item: HxGalleriaItem): string {\n return item.thumbnailSrc ?? item.src;\n }\n\n /** Shows a picture (0-based); wraps around when `circular`, else clamps. */\n goTo(index: number): void {\n const count = this.count();\n if (!count) return;\n const target = this.circular()\n ? ((index % count) + count) % count\n : Math.min(Math.max(0, index), count - 1);\n if (target !== this.index()) this.activeIndex.set(target);\n }\n\n next(auto = false): void {\n if (auto && !this.circular() && this.isLast()) {\n this.goTo(0);\n return;\n }\n this.goTo(this.index() + 1);\n }\n\n prev(): void {\n this.goTo(this.index() - 1);\n }\n\n protected scrollThumbs(delta: number): void {\n const max = Math.max(0, this.count() - this.thumbsVisible());\n this.thumbStart.set(Math.min(Math.max(0, this.thumbStart() + delta), max));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n this.prev();\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n this.next();\n break;\n case 'Home':\n event.preventDefault();\n this.goTo(0);\n break;\n case 'End':\n event.preventDefault();\n this.goTo(this.count() - 1);\n break;\n }\n }\n\n protected onThumbKeydown(event: KeyboardEvent): void {\n this.onKeydown(event);\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const list = (event.currentTarget as HTMLElement).closest('.hx-galleria-thumbnail-list');\n queueMicrotask(() => list?.querySelector<HTMLElement>('[aria-selected=\"true\"]')?.focus());\n }\n }\n\n protected onFocusIn(): void {\n this.focused.set(true);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (!event.relatedTarget || !host.contains(event.relatedTarget as Node))\n this.focused.set(false);\n }\n\n protected close(): void {\n this.visible.set(false);\n }\n\n #open(content: TemplateRef<unknown>): void {\n if (this.#ref) return;\n const ref = this.#dialog.open(content, {\n hasBackdrop: true,\n backdropClass: 'hx-galleria-backdrop',\n panelClass: 'hx-galleria-panel',\n width: '100vw',\n height: '100vh',\n maxWidth: '100vw',\n maxHeight: '100vh',\n ariaModal: true,\n ariaLabel: this.ariaLabel(),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.visible.set(false);\n }\n });\n ref.backdropClick.subscribe(() => this.visible.set(false));\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.visible.set(false);\n }\n });\n }\n\n #close(): void {\n this.#ref?.close();\n }\n}\n","<ng-template #content>\n <div\n [class]=\"'hx-galleria hx-galleria-thumbnails-' + thumbnailsPosition() + (fullScreen() ? ' hx-galleria-fullscreen' : '')\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <div class=\"hx-galleria-content\">\n <div class=\"hx-galleria-stage\" role=\"region\" aria-roledescription=\"carousel\" [attr.aria-label]=\"ariaLabel()\" [attr.aria-live]=\"autoplay() && !(hovered() || focused()) ? 'off' : 'polite'\" tabindex=\"0\" [style.height]=\"fullScreen() ? null : height()\" (keydown)=\"onKeydown($event)\">\n @if (current(); as item) {\n <div class=\"hx-galleria-item\" role=\"group\" aria-roledescription=\"slide\" [attr.aria-label]=\"itemLabel(index())\">\n @if (itemTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: index() }\" />\n } @else {\n <img class=\"hx-galleria-image\" [src]=\"item.src\" [alt]=\"item.alt\" />\n }\n </div>\n @if (hasCaption()) {\n <div class=\"hx-galleria-caption\">\n @if (captionTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: item, index: index() }\" />\n } @else {\n @if (item.title) { <div class=\"hx-galleria-caption-title\">{{ item.title }}</div> }\n @if (item.caption) { <div class=\"hx-galleria-caption-text\">{{ item.caption }}</div> }\n }\n </div>\n }\n }\n @if (showItemNavigators() && count() > 1) {\n <button type=\"button\" class=\"hx-galleria-nav hx-galleria-prev\" [disabled]=\"prevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"prev()\"></button>\n <button type=\"button\" class=\"hx-galleria-nav hx-galleria-next\" [disabled]=\"nextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"next()\"></button>\n }\n @if (showIndicators() && count() > 1) {\n <div class=\"hx-galleria-indicators\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' pictures'\">\n @for (i of indices(); track i) {\n <button type=\"button\" class=\"hx-galleria-indicator\" role=\"tab\" [class.hx-galleria-indicator-active]=\"i === index()\" [attr.aria-selected]=\"i === index()\" [attr.aria-label]=\"itemLabel(i)\" [attr.tabindex]=\"i === index() ? 0 : -1\" (click)=\"goTo(i)\" (keydown)=\"onThumbKeydown($event)\"></button>\n }\n </div>\n }\n </div>\n @if (showThumbnails() && count() > 1) {\n <div class=\"hx-galleria-thumbnails\">\n @if (thumbNavigation()) {\n <button type=\"button\" class=\"hx-galleria-thumbnail-nav hx-galleria-thumbnail-prev\" [disabled]=\"thumbPrevDisabled()\" [attr.aria-label]=\"prevLabel()\" (click)=\"scrollThumbs(-1)\"></button>\n }\n <div class=\"hx-galleria-thumbnail-list\" role=\"tablist\" [attr.aria-label]=\"ariaLabel() + ' thumbnails'\">\n @for (i of thumbs(); track i) {\n <button\n type=\"button\"\n class=\"hx-galleria-thumbnail\"\n role=\"tab\"\n [class.hx-galleria-thumbnail-active]=\"i === index()\"\n [attr.aria-selected]=\"i === index()\"\n [attr.aria-label]=\"value()[i].alt\"\n [attr.tabindex]=\"i === index() ? 0 : -1\"\n (click)=\"goTo(i)\"\n (keydown)=\"onThumbKeydown($event)\"\n >\n @if (thumbnailTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" [ngTemplateOutletContext]=\"{ $implicit: value()[i], index: i }\" />\n } @else {\n <img class=\"hx-galleria-thumbnail-image\" [src]=\"thumbnailSrc(value()[i])\" alt=\"\" />\n }\n </button>\n }\n </div>\n @if (thumbNavigation()) {\n <button type=\"button\" class=\"hx-galleria-thumbnail-nav hx-galleria-thumbnail-next\" [disabled]=\"thumbNextDisabled()\" [attr.aria-label]=\"nextLabel()\" (click)=\"scrollThumbs(1)\"></button>\n }\n </div>\n }\n </div>\n @if (fullScreen()) {\n <button type=\"button\" class=\"hx-galleria-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n }\n </div>\n</ng-template>\n@if (!fullScreen()) {\n <ng-container [ngTemplateOutlet]=\"content\" />\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\nexport type HxIconPosition = 'left' | 'right';\n\n/**\n * An icon inside a text field. Wrap an `hx-input` (or `hx-password`) and one `hx-input-icon` element; the\n * field gets room for the icon, which sits on the start (`left`, default) or end (`right`) edge.\n *\n * ```html\n * <hx-icon-field>\n * <i class=\"pi pi-search\" hx-input-icon></i>\n * <input hx-input placeholder=\"Search\" aria-label=\"Search\" />\n * </hx-icon-field>\n * <hx-icon-field iconPosition=\"right\">…</hx-icon-field>\n * ```\n *\n * `left` and `right` follow the writing direction (start and end). The icon is decorative and ignores clicks.\n */\n@Component({\n selector: 'hx-icon-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-icon-field',\n '[class.hx-icon-field-left]': \"iconPosition() === 'left'\",\n '[class.hx-icon-field-right]': \"iconPosition() === 'right'\",\n },\n template: '<ng-content />',\n})\nexport class HxIconField {\n readonly iconPosition = input<HxIconPosition>('left');\n}\n\n/**\n * The icon of an `hx-icon-field`: any element, for example `<i class=\"pi pi-search\" hx-input-icon></i>` or an\n * inline `<svg>`. It is hidden from assistive technology unless it has an `aria-label`.\n */\n@Directive({\n selector: '[hx-input-icon]',\n host: {\n class: 'hx-input-icon',\n '[attr.aria-hidden]': 'hidden()',\n },\n})\nexport class HxInputIcon {\n readonly #element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected hidden(): 'true' | null {\n return this.#element.hasAttribute('aria-label') ? null : 'true';\n }\n}\n","import { Dialog, type DialogRef } from '@angular/cdk/dialog';\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\n/** The content of the hover indicator over a previewable image: `<ng-template hxImageIndicator>`. */\n@Directive({ selector: 'ng-template[hxImageIndicator]' })\nexport class HxImageIndicator {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n/**\n * An image, optionally with a preview: a click (or Enter on the button over it) opens the picture in a modal\n * overlay with a toolbar to rotate, zoom and close.\n *\n * ```html\n * <hx-image src=\"product.jpg\" alt=\"Bamboo watch\" width=\"250\" preview />\n * <hx-image src=\"thumb.jpg\" previewImageSrc=\"large.jpg\" alt=\"Bamboo watch\" preview />\n * ```\n *\n * The preview trigger is a button named \"Preview {alt}\"; the overlay is a modal dialog (focus trap, Escape closes,\n * focus restored); the toolbar buttons are labelled; + and - zoom from the keyboard.\n */\n@Component({\n selector: 'hx-image',\n imports: [NgStyle, NgTemplateOutlet],\n templateUrl: './image.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-image', '[class.hx-image-preview]': 'preview()' },\n})\nexport class HxImage {\n readonly src = input.required<string>();\n readonly alt = input.required<string>();\n /** Width and height of the inline image (CSS or number of pixels). */\n readonly width = input<string | number>();\n readonly height = input<string | number>();\n /** A click opens the picture in an overlay. */\n readonly preview = input(false, { transform: booleanAttribute });\n /** A larger picture for the overlay (default: `src`). */\n readonly previewImageSrc = input<string>();\n readonly imageClass = input<string>();\n readonly imageStyle = input<Record<string, string>>();\n readonly showToolbar = input(true, { transform: booleanAttribute });\n readonly zoomStep = input(0.25, { transform: numberAttribute });\n readonly zoomMin = input(0.5, { transform: numberAttribute });\n readonly zoomMax = input(3, { transform: numberAttribute });\n /** `{alt}` is replaced. */\n readonly previewLabelTemplate = input('Preview {alt}');\n readonly rotateLeftLabel = input('Rotate left');\n readonly rotateRightLabel = input('Rotate right');\n readonly zoomOutLabel = input('Zoom out');\n readonly zoomInLabel = input('Zoom in');\n readonly closeLabel = input('Close');\n\n /** The preview opened. */\n readonly show = output<void>();\n /** The preview closed. */\n readonly hide = output<void>();\n\n protected readonly indicatorTemplate = contentChild(HxImageIndicator);\n private readonly overlay = viewChild<TemplateRef<unknown>>('overlay');\n readonly #dialog = inject(Dialog);\n #ref: DialogRef<unknown, unknown> | undefined;\n\n protected readonly rotation = signal(0);\n protected readonly scale = signal(1);\n protected readonly transform = computed(\n () => `rotate(${this.rotation()}deg) scale(${this.scale()})`,\n );\n protected readonly previewLabel = computed(() =>\n this.previewLabelTemplate().replace('{alt}', this.alt()),\n );\n protected readonly previewSrc = computed(() => this.previewImageSrc() ?? this.src());\n protected readonly zoomOutDisabled = computed(() => this.scale() <= this.zoomMin() + 1e-9);\n protected readonly zoomInDisabled = computed(() => this.scale() >= this.zoomMax() - 1e-9);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.#ref?.close());\n }\n\n protected cssSize(value: string | number | undefined): string | null {\n if (value === undefined || value === null || value === '') return null;\n return typeof value === 'number' || /^\\d+$/.test(value) ? `${value}px` : value;\n }\n\n /** Opens the preview. */\n open(): void {\n const overlay = this.overlay();\n if (!this.preview() || this.#ref || !overlay) return;\n this.rotation.set(0);\n this.scale.set(1);\n const ref = this.#dialog.open(overlay, {\n hasBackdrop: true,\n backdropClass: 'hx-image-backdrop',\n panelClass: 'hx-image-panel',\n width: '100vw',\n height: '100vh',\n maxWidth: '100vw',\n maxHeight: '100vh',\n ariaModal: true,\n ariaLabel: this.alt(),\n disableClose: true,\n autoFocus: 'first-tabbable',\n restoreFocus: true,\n });\n this.#ref = ref;\n ref.keydownEvents.subscribe((event) => this.onKeydown(event));\n ref.backdropClick.subscribe(() => this.close());\n ref.closed.subscribe(() => {\n if (this.#ref === ref) {\n this.#ref = undefined;\n this.hide.emit();\n }\n });\n this.show.emit();\n }\n\n /** Closes the preview. */\n close(): void {\n this.#ref?.close();\n }\n\n protected rotate(degrees: number): void {\n this.rotation.update((r) => r + degrees);\n }\n\n protected zoom(direction: 1 | -1): void {\n const next = this.scale() + direction * this.zoomStep();\n this.scale.set(\n Math.min(this.zoomMax(), Math.max(this.zoomMin(), Math.round(next * 1000) / 1000)),\n );\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoom(1);\n break;\n case '-':\n event.preventDefault();\n this.zoom(-1);\n break;\n }\n }\n}\n","<img\n [class]=\"'hx-image-img ' + (imageClass() ?? '')\"\n [src]=\"src()\"\n [alt]=\"alt()\"\n [style.width]=\"cssSize(width())\"\n [style.height]=\"cssSize(height())\"\n [ngStyle]=\"imageStyle() ?? null\"\n/>\n@if (preview()) {\n <button type=\"button\" class=\"hx-image-preview-mask\" [attr.aria-label]=\"previewLabel()\" (click)=\"open()\">\n @if (indicatorTemplate(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl.template\" />\n } @else {\n <span class=\"hx-image-preview-icon\" aria-hidden=\"true\"></span>\n }\n </button>\n}\n\n<ng-template #overlay>\n <div class=\"hx-image-overlay\">\n @if (showToolbar()) {\n <div class=\"hx-image-toolbar\">\n <button type=\"button\" class=\"hx-image-action hx-image-rotate-left\" [attr.aria-label]=\"rotateLeftLabel()\" (click)=\"rotate(-90)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-rotate-right\" [attr.aria-label]=\"rotateRightLabel()\" (click)=\"rotate(90)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-zoom-out\" [disabled]=\"zoomOutDisabled()\" [attr.aria-label]=\"zoomOutLabel()\" (click)=\"zoom(-1)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-zoom-in\" [disabled]=\"zoomInDisabled()\" [attr.aria-label]=\"zoomInLabel()\" (click)=\"zoom(1)\"></button>\n <button type=\"button\" class=\"hx-image-action hx-image-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n </div>\n } @else {\n <button type=\"button\" class=\"hx-image-action hx-image-close hx-image-close-only\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"></button>\n }\n <div class=\"hx-image-stage\">\n <img class=\"hx-image-original\" [src]=\"previewSrc()\" [alt]=\"alt()\" [style.transform]=\"transform()\" />\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Joins a field with text or button addons into one control. Children: `hx-input`, `hx-select`,\n * `hx-input-number`, `hx-icon-field`, `button[hx-button]` and `hx-input-group-addon`. Inner borders and radii\n * are joined, the outer corners keep the radius.\n *\n * ```html\n * <hx-input-group>\n * <hx-input-group-addon>https://</hx-input-group-addon>\n * <input hx-input aria-label=\"Domain\" aria-describedby=\"scheme\" />\n * <button hx-button>Go</button>\n * </hx-input-group>\n * ```\n *\n * The group has no role of its own. An addon is not part of the field's name: reference it with\n * `aria-describedby` (give the addon an `id`) when it carries information.\n */\n@Component({\n selector: 'hx-input-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-input-group' },\n template: '<ng-content />',\n})\nexport class HxInputGroup {}\n\n/** Text or an icon next to a field inside an `hx-input-group`. */\n@Component({\n selector: 'hx-input-group-addon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-input-group-addon' },\n template: '<ng-content />',\n})\nexport class HxInputGroupAddon {}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxInput, type HxInputSize, type HxInputVariant } from '../input/input';\nimport { nextId } from '../internal/ids';\n\nexport type HxInputNumberMode = 'decimal' | 'currency';\nexport type HxInputNumberButtonLayout = 'stacked' | 'horizontal';\nexport type HxInputNumberSize = HxInputSize;\nexport type HxInputNumberVariant = HxInputVariant;\n\n/** Delay before a held step button starts to repeat, and the pause between repeats (ms). */\nconst REPEAT_DELAY = 400;\nconst REPEAT_INTERVAL = 60;\n\n/**\n * A numeric field with locale formatting and optional step buttons. The value is a `number | null`; the text\n * is formatted with `Intl.NumberFormat` when the field loses focus and parsed in the same locale while the\n * user types. Works with `ngModel`, reactive forms and signal forms (`[formField]`).\n *\n * ```html\n * <label for=\"qty\">Quantity</label>\n * <hx-input-number inputId=\"qty\" [(ngModel)]=\"qty\" [min]=\"0\" [max]=\"99\" showButtons />\n * <hx-input-number ariaLabel=\"Price\" mode=\"currency\" currency=\"EUR\" locale=\"de-DE\" [formField]=\"form.price\" />\n * ```\n *\n * Fractions are rounded to `maxFractionDigits` (3 for decimals, 2 for most currencies), so set it to match\n * `step` when the step is finer than that. Give the field a visible `<label for>` (with `inputId`) or an\n * `ariaLabel`.\n */\n@Component({\n selector: 'hx-input-number',\n imports: [HxInput],\n templateUrl: './input-number.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxInputNumber), multi: true },\n ],\n host: {\n class: 'hx-input-number',\n '[class.hx-input-number-fluid]': 'fluid()',\n '[class.hx-input-number-stacked]': \"showButtons() && buttonLayout() === 'stacked'\",\n '[class.hx-input-number-horizontal]': \"showButtons() && buttonLayout() === 'horizontal'\",\n '[class.hx-input-number-disabled]': 'isDisabled()',\n '[class.hx-filled]': \"displayText() !== ''\",\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxInputNumber implements ControlValueAccessor, FormValueControl<number | null> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n\n readonly min = input<number>();\n readonly max = input<number>();\n readonly step = input(1);\n readonly minFractionDigits = input<number>();\n readonly maxFractionDigits = input<number>();\n /** A BCP 47 tag; the browser's locale when not set. */\n readonly locale = input<string>();\n readonly useGrouping = input(true, { transform: booleanAttribute });\n readonly mode = input<HxInputNumberMode>('decimal');\n /** ISO 4217 code for `mode=\"currency\"` (default `USD`). */\n readonly currency = input<string>();\n readonly prefix = input('');\n readonly suffix = input('');\n readonly showButtons = input(false, { transform: booleanAttribute });\n readonly buttonLayout = input<HxInputNumberButtonLayout>('stacked');\n readonly incrementLabel = input('Increment');\n readonly decrementLabel = input('Decrement');\n readonly placeholder = input('');\n readonly size = input<HxInputNumberSize>('medium');\n readonly variant = input<HxInputNumberVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The `id` of the field, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<number | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly defaultId = nextId('hx-input-number');\n /** The text the user is typing; `null` while the field shows the formatted value. */\n protected readonly editing = signal<string | null>(null);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n\n readonly #formatter = computed(\n () =>\n new Intl.NumberFormat(this.locale(), {\n style: this.mode() === 'currency' ? 'currency' : 'decimal',\n currency: this.mode() === 'currency' ? (this.currency() ?? 'USD') : undefined,\n minimumFractionDigits: this.minFractionDigits(),\n maximumFractionDigits: this.maxFractionDigits(),\n useGrouping: this.useGrouping(),\n }),\n );\n\n /** The characters of the locale that the parser must understand. */\n readonly #symbols = computed(() => {\n const locale = this.#formatter().resolvedOptions().locale;\n const part = (parts: Intl.NumberFormatPart[], type: string) =>\n parts.find((p) => p.type === type)?.value;\n const decimal = part(\n new Intl.NumberFormat(locale, { minimumFractionDigits: 1 }).formatToParts(1.1),\n 'decimal',\n );\n const group = part(new Intl.NumberFormat(locale).formatToParts(11111), 'group');\n const minus = part(new Intl.NumberFormat(locale).formatToParts(-1), 'minusSign');\n const digits = new Intl.NumberFormat(locale, { useGrouping: false });\n return {\n decimal: decimal ?? '.',\n group,\n minus: minus ?? '-',\n digits: [...Array(10).keys()].map((i) => digits.format(i)),\n };\n });\n\n protected readonly displayText = computed(() => this.editing() ?? this.#format(this.value()));\n protected readonly ariaValueText = computed(() => {\n const value = this.value();\n return value === null ? null : this.#format(value);\n });\n protected readonly canIncrement = computed(() => {\n const [value, max] = [this.value(), this.max()];\n return !this.isDisabled() && (value === null || max === undefined || value < max);\n });\n protected readonly canDecrement = computed(() => {\n const [value, min] = [this.value(), this.min()];\n return !this.isDisabled() && (value === null || min === undefined || value > min);\n });\n\n #onChange: (value: number | null) => void = () => {};\n #onTouched: () => void = () => {};\n #repeat: ReturnType<typeof setTimeout> | undefined;\n #holding = false;\n #pointerStepped = false;\n\n constructor() {\n this.#destroyRef.onDestroy(() => this.#stopRepeat());\n }\n\n // ControlValueAccessor (template-driven and reactive forms)\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n this.editing.set(null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the field (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n this.editing.set(text);\n const parsed = this.#parse(text);\n // an unparsable text (\"-\", \"1.2.3\") keeps the last value; the field is reformatted on blur\n if (parsed !== undefined) this.#commit(parsed === null ? null : this.#normalize(parsed));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const { key } = event;\n if (key === 'ArrowUp' || key === 'ArrowDown') {\n event.preventDefault();\n this.#stepBy(key === 'ArrowUp' ? 1 : -1);\n } else if (key === 'Home' && this.min() !== undefined) {\n event.preventDefault();\n this.#setNumber(this.min() as number);\n } else if (key === 'End' && this.max() !== undefined) {\n event.preventDefault();\n this.#setNumber(this.max() as number);\n } else if (key === 'Enter') {\n this.editing.set(null);\n }\n }\n\n protected onBlur(): void {\n this.editing.set(null);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.#host.nativeElement.contains(next)) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n /** Pointer down on a step button: one step now, then repeat while it is held. */\n protected onPress(event: PointerEvent, direction: 1 | -1): void {\n if (event.button > 0) return;\n this.#pointerStepped = true;\n this.#stopRepeat();\n this.#holding = true;\n this.#stepBy(direction); // stops the repeat when a limit is reached\n const tick = () => {\n this.#stepBy(direction);\n if (this.#holding) this.#repeat = setTimeout(tick, REPEAT_INTERVAL);\n };\n if (this.#holding) this.#repeat = setTimeout(tick, REPEAT_DELAY);\n }\n\n protected onRelease(): void {\n this.#stopRepeat();\n }\n\n /** A click that did not come from a pointer press (assistive technology, `button.click()`) steps once. */\n protected onClick(direction: 1 | -1): void {\n if (this.#pointerStepped) this.#pointerStepped = false;\n else this.#stepBy(direction);\n }\n\n #stopRepeat(): void {\n this.#holding = false;\n clearTimeout(this.#repeat);\n this.#repeat = undefined;\n }\n\n #stepBy(direction: 1 | -1): void {\n if (this.isDisabled()) return;\n const typed = this.editing();\n const current = (typed === null ? undefined : this.#parse(typed)) ?? this.value() ?? 0;\n this.#setNumber(current + direction * this.step());\n }\n\n #setNumber(next: number): void {\n const value = this.#normalize(next);\n const changed = value !== this.value();\n this.editing.set(null);\n if (changed) this.#commit(value);\n else this.#stopRepeat(); // at a limit\n }\n\n #commit(value: number | null): void {\n this.value.set(value);\n this.#onChange(value);\n }\n\n /** Clamps to `min`/`max` and rounds to the fraction digits the field shows. */\n #normalize(value: number): number {\n const min = this.min();\n const max = this.max();\n let result = value;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n const digits = this.#formatter().resolvedOptions().maximumFractionDigits ?? 3;\n return Number(result.toFixed(digits));\n }\n\n #format(value: number | null): string {\n return value === null\n ? ''\n : `${this.prefix()}${this.#formatter().format(value)}${this.suffix()}`;\n }\n\n /** The number in `text`, `null` for an empty text, `undefined` when it is not a number. */\n #parse(text: string): number | null | undefined {\n const { decimal, group, minus, digits } = this.#symbols();\n let s = text.trim();\n if (!s) return null;\n for (const affix of [this.prefix(), this.suffix()]) if (affix) s = s.replace(affix, '');\n digits.forEach((local, i) => {\n if (local !== String(i)) s = s.replaceAll(local, String(i));\n });\n s = s.replaceAll(minus, '-').replaceAll('−', '-');\n if (group) s = /\\s/.test(group) ? s.replace(/\\s/g, '') : s.replaceAll(group, '');\n s = s.replaceAll(decimal, '.').replace(/[^0-9.-]/g, '');\n if (!/^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(s)) return undefined;\n return Number(s);\n }\n}\n","@if (showButtons() && buttonLayout() === 'horizontal') {\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-decrement\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n [attr.aria-label]=\"decrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, -1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(-1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14\" /></svg>\n </button>\n}\n<input\n #field\n hx-input\n type=\"text\"\n role=\"spinbutton\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [id]=\"inputId() ?? defaultId\"\n [value]=\"displayText()\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuetext]=\"ariaValueText()\"\n [disabled]=\"isDisabled()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [fluid]=\"true\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n/>\n@if (showButtons()) {\n @if (buttonLayout() === 'stacked') {\n <span class=\"hx-input-number-spin\">\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-increment\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n [attr.aria-label]=\"incrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, 1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"0.75em\" height=\"0.75em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 15 6-6 6 6\" /></svg>\n </button>\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-decrement\"\n tabindex=\"-1\"\n [disabled]=\"!canDecrement()\"\n [attr.aria-label]=\"decrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, -1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(-1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"0.75em\" height=\"0.75em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\" /></svg>\n </button>\n </span>\n } @else {\n <button\n type=\"button\"\n class=\"hx-input-number-button hx-input-number-increment\"\n tabindex=\"-1\"\n [disabled]=\"!canIncrement()\"\n [attr.aria-label]=\"incrementLabel()\"\n [attr.aria-controls]=\"inputId() ?? defaultId\"\n (pointerdown)=\"onPress($event, 1)\"\n (pointerup)=\"onRelease()\"\n (pointerleave)=\"onRelease()\"\n (pointercancel)=\"onRelease()\"\n (click)=\"onClick(1)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" /></svg>\n </button>\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\n/**\n * An inline list of options, single or `multiple`, on the CDK listbox (`aria-multiselectable`, active\n * descendant, typeahead, arrows, Home, End). With `filter` a text field above the list narrows the options by\n * their label.\n *\n * ```html\n * <hx-listbox ariaLabel=\"City\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\" [(ngModel)]=\"city\" />\n * <hx-listbox ariaLabel=\"Toppings\" [options]=\"toppings\" multiple checkmark filter [(value)]=\"chosen\" />\n * ```\n *\n * The value is the option's value, or an array of values with `multiple`. It works with `ngModel`, reactive forms\n * and signal forms (`[formField]`).\n */\n@Component({\n selector: 'hx-listbox',\n imports: [CdkListbox, CdkOption],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxListbox), multi: true },\n ],\n host: {\n class: 'hx-listbox',\n '[class.hx-listbox-disabled]': 'isDisabled()',\n '[class.hx-listbox-invalid]': 'invalid()',\n '[class.hx-listbox-checkmark]': 'checkmark()',\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n @if (filter()) {\n <div class=\"hx-listbox-header\">\n <input\n type=\"text\"\n class=\"hx-listbox-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"listId\"\n [placeholder]=\"filterPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n </div>\n }\n <div class=\"hx-listbox-scroll\" [style.max-height]=\"scrollHeight()\">\n <div\n cdkListbox\n class=\"hx-listbox-list\"\n [id]=\"listId\"\n [cdkListboxMultiple]=\"multiple()\"\n [cdkListboxDisabled]=\"isDisabled()\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-listbox-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-listbox-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-listbox-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n `,\n})\nexport class HxListbox<V = unknown> implements ControlValueAccessor, FormValueControl<unknown> {\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n /** Several options can be chosen; the value is then an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** A check in front of the selected options. */\n readonly checkmark = input(false, { transform: booleanAttribute });\n /** A text field above the list that narrows the options by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Filter');\n readonly emptyMessage = input('No options');\n /** Maximum height of the list (a CSS length such as `14rem`); it scrolls beyond. */\n readonly scrollHeight = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to find the selected options (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly listId = nextId('hx-listbox');\n protected readonly query = signal('');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n private readonly listbox = viewChild(CdkListbox);\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(\n this.options(),\n this.optionLabel(),\n this.optionValue(),\n this.optionDisabled(),\n ),\n );\n\n protected readonly visibleItems = computed(() => {\n const query = this.query().trim().toLowerCase();\n return query ? this.items().filter((i) => i.label.toLowerCase().includes(query)) : this.items();\n });\n\n protected readonly selectedValues = computed(() => {\n const current = this.value();\n if (this.multiple()) return Array.isArray(current) ? current : [];\n return current === null || current === undefined ? [] : [current];\n });\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the list (signal forms call this to focus the control). */\n focus(): void {\n this.listbox()?.focus();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<unknown>): void {\n // work from the clicked option, not from the CDK's value list: that one lacks the selected options the filter hides\n const option = event.option;\n if (!option) return;\n const same = this.compareWith();\n const current = this.selectedValues();\n const chosen = current.some((v) => same(v, option.value));\n let next: unknown;\n if (this.multiple()) {\n next = chosen ? current.filter((v) => !same(v, option.value)) : [...current, option.value];\n } else if (chosen) {\n // a single list keeps its choice when the chosen option is clicked again\n this.listbox()?.select(option);\n return;\n } else {\n next = option.value;\n }\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, viewChild } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * The list of a menu, shared by `hx-menu` and `hx-menubar` (internal): an ARIA menu from `@angular/cdk/menu` whose\n * items are links, buttons or submenu triggers. With `groups` an item at this level that has children and no action of\n * its own is drawn as a group heading above them; elsewhere children open as a submenu.\n */\n@Component({\n selector: 'hx-menu-panel',\n imports: [CdkMenu, CdkMenuItem, CdkMenuTrigger, NgTemplateOutlet, RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menu-panel' },\n // The items must be declared inside the element that carries `cdkMenu`: the CDK finds them as content children.\n template: `\n <div cdkMenu class=\"hx-menu-list\" [attr.aria-label]=\"ariaLabel() ?? null\">\n <ng-template #content let-item let-submenu=\"submenu\">\n @if (item.icon) {\n <span class=\"hx-menu-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-menu-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"hx-menu-badge\">{{ item.badge }}</span>\n }\n @if (submenu) {\n <span class=\"hx-menu-submenu-icon\" aria-hidden=\"true\"></span>\n }\n </ng-template>\n\n <ng-template #entries let-list let-top=\"top\">\n @for (item of visible(list); track $index) {\n @if (item.separator) {\n <div class=\"hx-menu-separator\" role=\"separator\"></div>\n } @else if (top && item.items?.length && !item.command && !item.routerLink && !item.url) {\n <div class=\"hx-menu-group\" role=\"group\" [attr.aria-label]=\"item.label\">\n <div class=\"hx-menu-heading\" role=\"presentation\">{{ item.label }}</div>\n <ng-container [ngTemplateOutlet]=\"entries\" [ngTemplateOutletContext]=\"{ $implicit: item.items, top: false }\" />\n </div>\n } @else if (item.items?.length) {\n <button\n type=\"button\"\n class=\"hx-menu-item hx-menu-item-submenu\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"sub\"\n [cdkMenuItemDisabled]=\"!!item.disabled\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item, submenu: true }\" />\n </button>\n <ng-template #sub>\n <hx-menu-panel class=\"hx-menu-submenu\" [items]=\"item.items ?? []\" [groups]=\"false\" [notify]=\"notify() ?? emit\" />\n </ng-template>\n } @else if (item.disabled) {\n <button type=\"button\" class=\"hx-menu-item\" cdkMenuItem [cdkMenuItemDisabled]=\"true\" [attr.id]=\"item.id ?? null\" [attr.aria-label]=\"item.ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n } @else if (item.routerLink) {\n <a\n class=\"hx-menu-item\"\n cdkMenuItem\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else if (item.url) {\n <a\n class=\"hx-menu-item\"\n cdkMenuItem\n [href]=\"item.url\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"hx-menu-item\"\n cdkMenuItem\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n }\n }\n </ng-template>\n\n <ng-container [ngTemplateOutlet]=\"entries\" [ngTemplateOutletContext]=\"{ $implicit: items(), top: groups() }\" />\n </div>\n `,\n})\nexport class HxMenuPanel {\n readonly items = input<readonly HxMenuItem[]>([]);\n /** Draw items with children and no action as group headings (the first level of `hx-menu`). */\n readonly groups = input(true);\n readonly ariaLabel = input<string>();\n /** An item was activated (after its `command` ran). */\n readonly triggered = output<HxMenuItem>();\n /**\n * Where a submenu reports an activated item. The CDK closes (and destroys) a submenu before the click handler\n * runs, and an output of a destroyed component no longer delivers, so submenus call this function of the root.\n */\n readonly notify = input<(item: HxMenuItem) => void>();\n\n private readonly menu = viewChild(CdkMenu);\n protected readonly visible = (list: readonly HxMenuItem[]) =>\n list.filter((item) => item.visible !== false);\n\n focusFirst(): void {\n this.menu()?.focusFirstItem('keyboard');\n }\n\n protected run(item: HxMenuItem, originalEvent: Event): void {\n item.command?.({ originalEvent, item });\n const notify = this.notify();\n if (notify) notify(item);\n else this.triggered.emit(item);\n }\n\n protected readonly emit = (item: HxMenuItem) => this.triggered.emit(item);\n}\n","import { CdkConnectedOverlay, type ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Injector,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { HxMenuItem } from '../menu-item';\nimport { HxMenuPanel } from './menu-panel';\n\n/**\n * A menu of `HxMenuItem`s, inline or as a popup, with nested submenus, on `@angular/cdk/menu`.\n *\n * ```html\n * <button hx-button aria-haspopup=\"menu\" (click)=\"menu.toggle($event)\">Actions</button>\n * <hx-menu #menu popup ariaLabel=\"Actions\" [model]=\"items\" />\n *\n * <hx-menu [model]=\"items\" ariaLabel=\"Account\" />\n * ```\n *\n * An item with children and no action of its own, on the first level, is a group heading above its children; deeper\n * levels open as submenus. A popup menu opens at the element that called `toggle(event)` (or `show(event)`), moves the\n * focus into the menu and returns it to that element on Escape or when an item is chosen.\n *\n * Keyboard (the WAI-ARIA menu pattern from the CDK): Arrow Down/Up move, Home and End jump, typing jumps by\n * label, Right or Enter opens a submenu and Left closes it, Enter or Space activates, Escape closes.\n */\n@Component({\n selector: 'hx-menu',\n imports: [CdkConnectedOverlay, HxMenuPanel],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menu', '[class.hx-menu-popup]': 'popup()' },\n template: `\n @if (popup()) {\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-menu-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin() ?? fallbackOrigin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"open.set(false)\"\n >\n <hx-menu-panel class=\"hx-menu-root\" [items]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"onTriggered($event)\" />\n </ng-template>\n } @else {\n <hx-menu-panel class=\"hx-menu-root\" [items]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"triggered.emit($event)\" />\n }\n `,\n})\nexport class HxMenu {\n readonly #injector = inject(Injector);\n readonly model = input<readonly HxMenuItem[]>([]);\n /** Shows the menu in an overlay when `toggle` or `show` is called. */\n readonly popup = input(false, { transform: booleanAttribute });\n /** Accessible name of the menu. */\n readonly ariaLabel = input<string>();\n\n /** An item was activated. */\n readonly triggered = output<HxMenuItem>();\n readonly shown = output<void>();\n readonly hidden = output<void>();\n\n readonly open = signal(false);\n protected readonly origin = signal<Element | null>(null);\n protected readonly fallbackOrigin = document.body;\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -2 },\n ];\n private readonly panel = viewChild(HxMenuPanel);\n\n /** Opens the popup at the element of the event, or closes it when it is open. */\n toggle(event: Event): void {\n if (this.open()) this.hide();\n else this.show(event);\n }\n\n show(event: Event): void {\n if (!this.popup() || this.open()) return;\n const target = (event.currentTarget ?? event.target) as Element | null;\n this.origin.set(target);\n this.open.set(true);\n this.shown.emit();\n }\n\n hide(refocus = true): void {\n if (!this.open()) return;\n this.open.set(false);\n this.hidden.emit();\n if (refocus) (this.origin() as HTMLElement | null)?.focus?.();\n }\n\n protected onAttach(): void {\n afterNextRender(() => this.panel()?.focusFirst(), { injector: this.#injector });\n }\n\n protected onTriggered(item: HxMenuItem): void {\n this.triggered.emit(item);\n this.hide();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.hide();\n } else if (event.key === 'Tab') {\n this.hide(false);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.origin()?.contains(event.target as Node)) this.hide(false);\n }\n}\n","import { CdkMenuBar, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HxMenu } from '../menu/menu';\nimport { HxMenuPanel } from '../menu/menu-panel';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * A horizontal menu of `HxMenuItem`s with dropdown submenus, on `@angular/cdk/menu`.\n *\n * ```html\n * <hx-menubar ariaLabel=\"Main\" [model]=\"items\">\n * <a hxMenubarStart routerLink=\"/\">Helix</a>\n * <button hxMenubarEnd hx-button>Sign in</button>\n * </hx-menubar>\n * ```\n *\n * Content marked `hxMenubarStart` / `hxMenubarEnd` sits before and after the items. Below `breakpoint` (px) the\n * items collapse into a button that opens them as a `hx-menu` popup.\n *\n * Keyboard (the WAI-ARIA menubar pattern from the CDK): Left and Right move between the top items, Down (or Enter)\n * opens a submenu and moves into it, Escape closes it and returns to the item, typing jumps by label.\n */\n@Component({\n selector: 'hx-menubar',\n imports: [\n CdkMenuBar,\n CdkMenuItem,\n CdkMenuTrigger,\n NgTemplateOutlet,\n RouterLink,\n HxMenu,\n HxMenuPanel,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-menubar', '[class.hx-menubar-collapsed]': 'collapsed()' },\n template: `\n <div class=\"hx-menubar-start\"><ng-content select=\"[hxMenubarStart]\" /></div>\n\n @if (collapsed()) {\n <button\n type=\"button\"\n class=\"hx-menubar-button\"\n aria-haspopup=\"menu\"\n [attr.aria-label]=\"buttonLabel()\"\n (click)=\"menu.toggle($event)\"\n >\n <span class=\"hx-menubar-button-icon\" aria-hidden=\"true\"></span>\n </button>\n <hx-menu #menu popup [model]=\"model()\" [ariaLabel]=\"ariaLabel()\" (triggered)=\"triggered.emit($event)\" />\n } @else {\n <div cdkMenuBar class=\"hx-menubar-list\" [attr.aria-label]=\"ariaLabel() ?? null\">\n <ng-template #content let-item let-submenu=\"submenu\">\n @if (item.icon) {\n <span class=\"hx-menu-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-menu-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"hx-menu-badge\">{{ item.badge }}</span>\n }\n @if (submenu) {\n <span class=\"hx-menubar-submenu-icon\" aria-hidden=\"true\"></span>\n }\n </ng-template>\n\n @for (item of visible(); track $index) {\n @if (item.separator) {\n <div class=\"hx-menubar-separator\" role=\"separator\"></div>\n } @else if (item.items?.length) {\n <button\n type=\"button\"\n class=\"hx-menubar-item\"\n cdkMenuItem\n [cdkMenuTriggerFor]=\"sub\"\n [cdkMenuItemDisabled]=\"!!item.disabled\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item, submenu: true }\" />\n </button>\n <ng-template #sub>\n <hx-menu-panel class=\"hx-menubar-submenu\" [items]=\"item.items ?? []\" [groups]=\"false\" [notify]=\"notify\" />\n </ng-template>\n } @else if (item.disabled) {\n <button type=\"button\" class=\"hx-menubar-item\" cdkMenuItem [cdkMenuItemDisabled]=\"true\" [attr.id]=\"item.id ?? null\" [attr.aria-label]=\"item.ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n } @else if (item.routerLink) {\n <a\n class=\"hx-menubar-item\"\n cdkMenuItem\n [routerLink]=\"item.routerLink\"\n [queryParams]=\"item.queryParams\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else if (item.url) {\n <a\n class=\"hx-menubar-item\"\n cdkMenuItem\n [href]=\"item.url\"\n [attr.target]=\"item.target ?? null\"\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"hx-menubar-item\"\n cdkMenuItem\n [attr.id]=\"item.id ?? null\"\n [attr.aria-label]=\"item.ariaLabel ?? null\"\n (click)=\"run(item, $event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n </button>\n }\n }\n </div>\n }\n\n <div class=\"hx-menubar-end\"><ng-content select=\"[hxMenubarEnd]\" /></div>\n `,\n})\nexport class HxMenubar {\n readonly model = input<readonly HxMenuItem[]>([]);\n /** Width in px below which the items collapse into a button. */\n readonly breakpoint = input(960, { transform: numberAttribute });\n /** Accessible name of the menubar. */\n readonly ariaLabel = input<string>();\n /** Accessible name of the button shown when collapsed. */\n readonly buttonLabel = input('Menu');\n\n /** An item was activated (after its `command`). */\n readonly triggered = output<HxMenuItem>();\n\n /** Whether the viewport is narrower than `breakpoint`. */\n readonly collapsed = signal(false);\n protected readonly visible = () => this.model().filter((item) => item.visible !== false);\n\n constructor() {\n effect((onCleanup) => {\n if (typeof matchMedia !== 'function') return;\n const query = matchMedia(`(max-width: ${this.breakpoint() - 0.02}px)`);\n const update = () => this.collapsed.set(query.matches);\n update();\n query.addEventListener('change', update);\n onCleanup(() => query.removeEventListener('change', update));\n });\n }\n\n protected readonly notify = (item: HxMenuItem) => this.triggered.emit(item);\n\n protected run(item: HxMenuItem, originalEvent: Event): void {\n item.command?.({ originalEvent, item });\n this.triggered.emit(item);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\n\nexport type HxMessageSeverity = 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast';\nexport type HxMessageVariant = 'filled' | 'outlined' | 'simple';\nexport type HxMessageSize = 'small' | 'medium' | 'large';\n\n/**\n * An inline message next to the content it is about.\n *\n * ```html\n * <hx-message severity=\"error\" closable (close)=\"onClose()\">The card was declined.</hx-message>\n * <hx-message severity=\"info\" variant=\"outlined\" icon=\"pi pi-star\" [life]=\"5000\">Saved</hx-message>\n * ```\n *\n * The message is a live region: `role=\"status\"`, and `role=\"alert\"` for `error`. `closable` adds a close button\n * (`closeLabel` is its name); `life` hides the message after that many milliseconds. Both emit `(close)`.\n */\n@Component({\n selector: 'hx-message',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-message',\n '[class.hx-message-success]': \"severity() === 'success'\",\n '[class.hx-message-info]': \"severity() === 'info'\",\n '[class.hx-message-warn]': \"severity() === 'warn'\",\n '[class.hx-message-error]': \"severity() === 'error'\",\n '[class.hx-message-secondary]': \"severity() === 'secondary'\",\n '[class.hx-message-contrast]': \"severity() === 'contrast'\",\n '[class.hx-message-outlined]': \"variant() === 'outlined'\",\n '[class.hx-message-simple]': \"variant() === 'simple'\",\n '[class.hx-message-sm]': \"size() === 'small'\",\n '[class.hx-message-lg]': \"size() === 'large'\",\n '[attr.role]': \"severity() === 'error' ? 'alert' : 'status'\",\n '[hidden]': '!visible()',\n },\n template: `\n <div class=\"hx-message-content\">\n @if (icon()) {\n <i class=\"hx-message-icon-custom\" [class]=\"icon()\" aria-hidden=\"true\"></i>\n } @else {\n <span class=\"hx-message-icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-message-text\"><ng-content /></span>\n @if (closable()) {\n <button type=\"button\" class=\"hx-message-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"dismiss()\">\n <span class=\"hx-message-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n `,\n})\nexport class HxMessage {\n readonly severity = input<HxMessageSeverity>('info');\n readonly variant = input<HxMessageVariant>('filled');\n readonly size = input<HxMessageSize>('medium');\n /** Icon classes (for example `pi pi-star`) instead of the built-in icon of the severity. */\n readonly icon = input('');\n /** Shows a close button. */\n readonly closable = input(false, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n /** Milliseconds until the message hides itself; `0` keeps it. */\n readonly life = input(0, { transform: numberAttribute });\n\n /** The message was closed by the button or by `life`. */\n readonly close = output<void>();\n\n protected readonly visible = signal(true);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n effect((onCleanup) => {\n const life = this.life();\n if (life > 0) {\n const timer = setTimeout(() => untracked(() => this.dismiss()), life);\n onCleanup(() => clearTimeout(timer));\n }\n });\n destroyRef.onDestroy(() => this.visible.set(false));\n }\n\n protected dismiss(): void {\n if (!this.visible()) return;\n this.visible.set(false);\n this.close.emit();\n }\n}\n","import { CdkListbox, CdkOption, type ListboxValueChangeEvent } from '@angular/cdk/listbox';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n type ConnectedPosition,\n} from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n Injector,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { nextId } from '../internal/ids';\nimport { type Accessor, compareValues, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxMultiSelectSize = 'small' | 'medium' | 'large';\nexport type HxMultiSelectVariant = 'outlined' | 'filled';\nexport type HxMultiSelectDisplay = 'comma' | 'chip';\n\n/**\n * A select for several values: a `combobox` that opens a multi-select listbox in a CDK connected overlay. The panel\n * stays open while the user chooses; Escape and a click outside close it. The value is an array of option values.\n *\n * ```html\n * <label for=\"cities\">Cities</label>\n * <hx-multi-select inputId=\"cities\" [options]=\"cities\" optionLabel=\"name\" optionValue=\"code\" display=\"chip\"\n * filter showToggleAll [(ngModel)]=\"visited\" />\n * ```\n *\n * `display=\"comma\"` lists the labels, `chip` shows a removable chip per value; beyond `maxSelectedLabels` both show\n * `selectedItemsLabel` (\"3 items selected\"). It works with `ngModel`, reactive forms and signal forms\n * (`[formField]`). Give it a visible `<label for>` (with `inputId`) or an `ariaLabel`.\n */\n@Component({\n selector: 'hx-multi-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, CdkListbox, CdkOption, HxCheckbox],\n templateUrl: './multi-select.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxMultiSelect), multi: true },\n ],\n host: {\n class: 'hx-multi-select',\n '[class.hx-multi-select-open]': 'open()',\n '[class.hx-multi-select-filled]': \"variant() === 'filled'\",\n '[class.hx-multi-select-sm]': \"size() === 'small'\",\n '[class.hx-multi-select-lg]': \"size() === 'large'\",\n '[class.hx-multi-select-fluid]': 'fluid()',\n '[class.hx-multi-select-disabled]': 'isDisabled()',\n '[class.hx-multi-select-has-clear]': 'canClear()',\n '[class.hx-multi-select-invalid]': 'invalid()',\n '[class.hx-filled]': 'selected().length > 0',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class HxMultiSelect<V = unknown> implements ControlValueAccessor, FormValueControl<V[]> {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The options: primitives or objects. */\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n readonly placeholder = input('');\n readonly emptyMessage = input('No options');\n readonly size = input<HxMultiSelectSize>('medium');\n readonly variant = input<HxMultiSelectVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** `comma`: the labels in a line, `chip`: a removable chip per value. */\n readonly display = input<HxMultiSelectDisplay>('comma');\n /** More values than this show `selectedItemsLabel` instead of the labels. */\n readonly maxSelectedLabels = input(3, { transform: numberAttribute });\n /** Text for many values; `{0}` is the count. */\n readonly selectedItemsLabel = input('{0} items selected');\n /** A text field above the list that narrows the options by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n readonly filterPlaceholder = input('Search');\n /** A checkbox above the list that selects or clears all (visible) options. */\n readonly showToggleAll = input(false, { transform: booleanAttribute });\n readonly toggleAllLabel = input('Select all');\n /** Shows a button that clears the selection. */\n readonly showClear = input(false, { transform: booleanAttribute });\n /** The `id` of the trigger, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n /** How values are compared to find the selected options (default: `Object.is`). */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>(compareValues);\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<V[]>([]);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly open = signal(false);\n protected readonly query = signal('');\n protected readonly panelWidth = signal(0);\n protected readonly panelId = nextId('hx-multi-select-panel');\n protected readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 2 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -2 },\n ];\n\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly listbox = viewChild(CdkListbox);\n private readonly filterField = viewChild<ElementRef<HTMLInputElement>>('filterField');\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxOption<V>[]>(() =>\n resolveOptions<V>(\n this.options(),\n this.optionLabel(),\n this.optionValue(),\n this.optionDisabled(),\n ),\n );\n\n protected readonly visibleItems = computed(() => {\n const query = this.query().trim().toLowerCase();\n return query ? this.items().filter((i) => i.label.toLowerCase().includes(query)) : this.items();\n });\n\n protected readonly selectedValues = computed(() => this.value() ?? []);\n\n /** The options of the selected values, in the order of the values. */\n protected readonly selected = computed(() => {\n const same = this.compareWith();\n const items = this.items();\n return this.selectedValues()\n .map((v) => items.find((item) => same(item.value, v)))\n .filter((item): item is HxOption<V> => item !== undefined);\n });\n\n protected readonly commaLabel = computed(() =>\n this.selected()\n .map((i) => i.label)\n .join(', '),\n );\n\n /** The \"n items selected\" text, empty while the labels fit. */\n protected readonly summary = computed(() => {\n const count = this.selected().length;\n return count > this.maxSelectedLabels()\n ? this.selectedItemsLabel().replace('{0}', String(count))\n : '';\n });\n\n protected readonly canClear = computed(\n () => this.showClear() && this.selected().length > 0 && !this.isDisabled(),\n );\n\n readonly #toggleable = computed(() => this.visibleItems().filter((i) => !i.disabled));\n protected readonly allSelected = computed(() => {\n const same = this.compareWith();\n const rows = this.#toggleable();\n return (\n rows.length > 0 && rows.every((r) => this.selectedValues().some((v) => same(v, r.value)))\n );\n });\n\n #onChange: (value: V[]) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: V[] | null): void {\n this.value.set(value ?? []);\n }\n registerOnChange(fn: (value: V[]) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n /** Focuses the trigger (signal forms call this to focus the control). */\n focus(options?: FocusOptions): void {\n this.trigger().nativeElement.focus(options);\n }\n\n protected toggle(): void {\n if (this.open()) this.close();\n else this.show();\n }\n\n protected show(): void {\n if (this.isDisabled() || this.open()) return;\n this.panelWidth.set(this.#host.nativeElement.getBoundingClientRect().width);\n this.open.set(true);\n }\n\n protected close(refocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n this.query.set('');\n if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the panel lives in the overlay template: focus the filter, or the list, once it has rendered\n afterNextRender(\n () => {\n const field = this.filterField();\n if (field) field.nativeElement.focus();\n else this.listbox()?.focus();\n },\n { injector: this.#injector },\n );\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (['ArrowDown', 'ArrowUp', 'Enter', ' '].includes(event.key)) {\n event.preventDefault();\n this.show();\n }\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n } else if (event.key === 'Tab') {\n // the list is the last stop of the panel, the first control the first: leaving either closes the panel\n const panel = (event.target as HTMLElement).closest('.hx-multi-select-panel');\n const stops = panel\n ? [...panel.querySelectorAll<HTMLElement>('input, [role=\"listbox\"]')]\n : [];\n const at = stops.indexOf(event.target as HTMLElement);\n if (event.shiftKey ? at <= 0 : at === stops.length - 1) this.close(event.shiftKey);\n }\n }\n\n protected onOutsideClick(event: MouseEvent): void {\n if (!this.#host.nativeElement.contains(event.target as Node)) this.close();\n }\n\n protected onSelect(event: ListboxValueChangeEvent<V>): void {\n // work from the clicked option, not from the CDK's value list: that one lacks the selected options the filter hides\n const option = event.option;\n if (!option) return;\n const same = this.compareWith();\n const current = this.selectedValues();\n const chosen = current.some((v) => same(v, option.value));\n this.#commit(\n chosen ? current.filter((v) => !same(v, option.value)) : [...current, option.value],\n );\n }\n\n protected toggleAll(): void {\n const same = this.compareWith();\n const rows = this.#toggleable();\n const current = this.selectedValues();\n if (this.allSelected()) {\n this.#commit(current.filter((v) => !rows.some((r) => same(r.value, v))));\n } else {\n this.#commit([\n ...current,\n ...rows.filter((r) => !current.some((v) => same(v, r.value))).map((r) => r.value),\n ]);\n }\n }\n\n protected removeChip(event: Event, item: HxOption<V>): void {\n event.stopPropagation();\n const same = this.compareWith();\n this.#commit(this.selectedValues().filter((v) => !same(v, item.value)));\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.#commit([]);\n this.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (this.open() || (next && this.#host.nativeElement.contains(next))) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n #commit(value: V[]): void {\n this.value.set(value);\n this.#onChange(value);\n }\n}\n","<div\n #trigger\n class=\"hx-multi-select-trigger\"\n role=\"combobox\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"listbox\"\n [attr.id]=\"inputId() ?? null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"open() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (click)=\"toggle()\"\n (keydown)=\"onTriggerKeydown($event)\"\n>\n <span class=\"hx-multi-select-label\" [class.hx-multi-select-placeholder]=\"!selected().length\">\n @if (!selected().length) {\n {{ placeholder() }}\n } @else if (summary(); as text) {\n {{ text }}\n } @else if (display() === 'chip') {\n @for (item of selected(); track $index) {\n <span class=\"hx-multi-select-chip\">\n <span>{{ item.label }}</span>\n <button\n type=\"button\"\n class=\"hx-multi-select-chip-remove\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"isDisabled()\"\n (click)=\"removeChip($event, item)\"\n >\n <span class=\"hx-multi-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n </span>\n }\n } @else {\n {{ commaLabel() }}\n }\n </span>\n <span class=\"hx-multi-select-chevron\" aria-hidden=\"true\"></span>\n</div>\n@if (canClear()) {\n <button type=\"button\" class=\"hx-multi-select-clear\" aria-label=\"Clear selection\" (click)=\"clear($event)\">\n <span class=\"hx-multi-select-clear-icon\" aria-hidden=\"true\"></span>\n </button>\n}\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayPanelClass=\"hx-multi-select-overlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"panelWidth()\"\n (overlayOutsideClick)=\"onOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n>\n <div class=\"hx-multi-select-panel\">\n @if (filter() || showToggleAll()) {\n <div class=\"hx-multi-select-header\">\n @if (showToggleAll()) {\n <input\n type=\"checkbox\"\n hx-checkbox\n class=\"hx-multi-select-toggle-all\"\n [attr.aria-label]=\"toggleAllLabel()\"\n [checked]=\"allSelected()\"\n (change)=\"toggleAll()\"\n />\n }\n @if (filter()) {\n <input\n #filterField\n type=\"text\"\n class=\"hx-multi-select-filter\"\n autocomplete=\"off\"\n [attr.aria-label]=\"filterPlaceholder()\"\n [attr.aria-controls]=\"panelId\"\n [placeholder]=\"filterPlaceholder()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n }\n </div>\n }\n <div\n cdkListbox\n class=\"hx-multi-select-list\"\n [id]=\"panelId\"\n [cdkListboxMultiple]=\"true\"\n [cdkListboxValue]=\"selectedValues()\"\n [cdkListboxUseActiveDescendant]=\"true\"\n [cdkListboxCompareWith]=\"compareWith()\"\n [attr.aria-label]=\"ariaLabel() ?? placeholder() ?? null\"\n [attr.aria-labelledby]=\"ariaLabelledby() ?? null\"\n (cdkListboxValueChange)=\"onSelect($event)\"\n >\n @for (item of visibleItems(); track item) {\n <div\n class=\"hx-multi-select-option\"\n [cdkOption]=\"item.value\"\n [cdkOptionDisabled]=\"item.disabled\"\n [cdkOptionTypeaheadLabel]=\"item.label\"\n >\n <span class=\"hx-multi-select-check\" aria-hidden=\"true\"></span>\n <span>{{ item.label }}</span>\n </div>\n } @empty {\n <div class=\"hx-multi-select-empty\">{{ emptyMessage() }}</div>\n }\n </div>\n </div>\n</ng-template>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * A titled container that can collapse. The `header` input is the title; `[hxPanelHeader]` adds content next to it\n * (icons, buttons) and `[hxPanelFooter]` is the footer.\n *\n * ```html\n * <hx-panel header=\"Filters\" toggleable [(collapsed)]=\"closed\">\n * <button hxPanelHeader hx-button size=\"small\">Reset</button>\n * ...\n * <div hxPanelFooter>3 filters active</div>\n * </hx-panel>\n * ```\n *\n * When `toggleable`, the header carries a `<button>` with `aria-expanded` and `aria-controls`; the content is a\n * region labelled by the title. Expanding and collapsing is animated unless the user prefers reduced motion.\n */\n@Component({\n selector: 'hx-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-panel',\n '[class.hx-panel-toggleable]': 'toggleable()',\n '[class.hx-panel-collapsed]': 'isCollapsed()',\n },\n template: `\n <div class=\"hx-panel-header\">\n <span class=\"hx-panel-title\" [id]=\"titleId\">{{ header() }}</span>\n <div class=\"hx-panel-header-actions\"><ng-content select=\"[hxPanelHeader]\" /></div>\n @if (toggleable()) {\n <button\n type=\"button\"\n class=\"hx-panel-toggle\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n >\n <span class=\"hx-panel-toggle-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n <div class=\"hx-panel-collapse\" [attr.inert]=\"isCollapsed() ? '' : null\">\n <div class=\"hx-panel-collapse-inner\">\n <div class=\"hx-panel-content\" role=\"region\" [id]=\"contentId\" [attr.aria-labelledby]=\"titleId\">\n <ng-content />\n </div>\n <div class=\"hx-panel-footer\"><ng-content select=\"[hxPanelFooter]\" /></div>\n </div>\n </div>\n `,\n})\nexport class HxPanel {\n /** The title. */\n readonly header = input('');\n /** The header gets a button that collapses and expands the content. */\n readonly toggleable = input(false, { transform: booleanAttribute });\n /** Whether the content is collapsed (only a `toggleable` panel collapses). */\n readonly collapsed = model(false);\n\n protected readonly titleId = nextId('hx-panel-title');\n protected readonly contentId = nextId('hx-panel-content');\n protected isCollapsed(): boolean {\n return this.toggleable() && this.collapsed();\n }\n\n protected toggle(): void {\n this.collapsed.set(!this.collapsed());\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n type ElementRef,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { HxInput, type HxInputSize, type HxInputVariant } from '../input/input';\nimport { nextId } from '../internal/ids';\n\n/**\n * A password field with a button that shows or hides the text. Works with `ngModel`, reactive forms and\n * signal forms (`[formField]`).\n *\n * ```html\n * <label for=\"pw\">Password</label>\n * <hx-password inputId=\"pw\" [(ngModel)]=\"password\" toggleMask fluid />\n * ```\n */\n@Component({\n selector: 'hx-password',\n imports: [HxInput],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxPassword), multi: true },\n ],\n host: {\n class: 'hx-password',\n '[class.hx-password-fluid]': 'fluid()',\n '[class.hx-password-has-toggle]': 'toggleMask()',\n '[class.hx-filled]': \"value() !== ''\",\n },\n template: `\n <input\n #field\n hx-input\n [id]=\"inputId() ?? defaultId\"\n [type]=\"visible() ? 'text' : 'password'\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [disabled]=\"isDisabled()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [fluid]=\"true\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (toggleMask()) {\n <button\n type=\"button\"\n class=\"hx-password-toggle\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"visible() ? hideLabel() : showLabel()\"\n [attr.aria-pressed]=\"visible()\"\n (click)=\"visible.set(!visible())\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n @if (visible()) {\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <path d=\"m1 1 22 22\" />\n } @else {\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n }\n </svg>\n </button>\n }\n `,\n})\nexport class HxPassword implements ControlValueAccessor, FormValueControl<string> {\n readonly placeholder = input('');\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n readonly autocomplete = input('current-password');\n readonly size = input<HxInputSize>('medium');\n readonly variant = input<HxInputVariant>('outlined');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** Shows the button that reveals the text. */\n readonly toggleMask = input(false, { transform: booleanAttribute });\n readonly showLabel = input('Show password');\n readonly hideLabel = input('Hide password');\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly defaultId = nextId('hx-password');\n protected readonly visible = signal(false);\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n\n #onChange: (value: string) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.field().nativeElement.focus(options);\n }\n\n protected onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.value.set(value);\n this.#onChange(value);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { Directive, input } from '@angular/core';\n\nexport type HxRadioSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<input type=\"radio\">` drawn as a Helix radio button (CSS only). Group radios with the same\n * `name` (or a forms API's `formControlName`/`ngModel` name) exactly as with native radios; arrow keys move\n * the selection natively.\n *\n * ```html\n * <label><input type=\"radio\" hx-radio name=\"plan\" value=\"free\" [(ngModel)]=\"plan\" /> Free</label>\n * <label><input type=\"radio\" hx-radio name=\"plan\" value=\"pro\" [(ngModel)]=\"plan\" /> Pro</label>\n * ```\n */\n@Directive({\n selector: 'input[hx-radio]',\n exportAs: 'hx-radio',\n host: {\n class: 'hx-radio',\n '[class.hx-radio-sm]': \"size() === 'small'\",\n '[class.hx-radio-lg]': \"size() === 'large'\",\n },\n})\nexport class HxRadio {\n readonly size = input<HxRadioSize>('medium');\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { nextId } from '../internal/ids';\n\n/**\n * A star rating: pick 1 to `stars`. It is the radio group pattern: each star is a visually hidden\n * `input type=\"radio\"` labelled \"n stars\", so the arrow keys change the value. With `readonly` it is a plain image\n * with the label \"n of 5 stars\".\n *\n * ```html\n * <hx-rating ariaLabel=\"Quality\" [(ngModel)]=\"score\" />\n * <hx-rating readonly [stars]=\"10\" [value]=\"7\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). The value is `null` until a star is\n * chosen.\n */\n@Component({\n selector: 'hx-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxRating), multi: true }],\n host: {\n class: 'hx-rating',\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\n '[attr.aria-label]': 'groupLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[attr.aria-invalid]': \"invalid() ? 'true' : null\",\n '[class.hx-rating-readonly]': 'readonly()',\n '[class.hx-rating-disabled]': 'isDisabled()',\n '[class.hx-rating-invalid]': 'invalid()',\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n @for (n of items(); track n) {\n @if (readonly()) {\n <span class=\"hx-rating-star\" [class.hx-rating-star-active]=\"n <= current()\"><span class=\"hx-rating-icon\"></span></span>\n } @else {\n <label class=\"hx-rating-star\" [class.hx-rating-star-active]=\"n <= current()\">\n <input\n type=\"radio\"\n class=\"hx-rating-input\"\n [name]=\"groupName\"\n [value]=\"n\"\n [checked]=\"n === value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"n === 1 ? '1 star' : n + ' stars'\"\n (change)=\"select(n)\"\n />\n <span class=\"hx-rating-icon\"></span>\n </label>\n }\n }\n `,\n})\nexport class HxRating implements ControlValueAccessor, FormValueControl<number | null> {\n /** The number of stars. */\n readonly stars = input(5, { transform: numberAttribute });\n /** Shows the value without a way to change it. */\n readonly readonly = input(false, { transform: booleanAttribute });\n /** The name of the group (not used when read only). */\n readonly ariaLabel = input('Rating');\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<number | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected readonly groupName = nextId('hx-rating');\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly items = computed(() =>\n Array.from({ length: Math.max(0, Math.floor(this.stars())) }, (_, i) => i + 1),\n );\n protected readonly current = computed(() => this.value() ?? 0);\n protected readonly groupLabel = computed(() =>\n this.readonly() ? `${this.current()} of ${this.stars()} stars` : this.ariaLabel(),\n );\n\n #onChange: (value: number | null) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: number | null) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected select(n: number): void {\n this.value.set(n);\n this.#onChange(n);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { type Accessor, type HxOption, resolveOptions } from '../internal/options';\n\nexport type HxSelectButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A choice among a few options shown as a joined group of toggle buttons. Single choice by default,\n * `multiple` for a list of values. The buttons are native buttons with `aria-pressed`.\n *\n * ```html\n * <hx-select-button [options]=\"['Left', 'Center', 'Right']\" [(ngModel)]=\"align\" [allowEmpty]=\"false\" />\n * ```\n */\n@Component({\n selector: 'hx-select-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSelectButton), multi: true },\n ],\n host: {\n class: 'hx-select-button',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\n '[class.hx-select-button-sm]': \"size() === 'small'\",\n '[class.hx-select-button-lg]': \"size() === 'large'\",\n '[class.hx-select-button-fluid]': 'fluid()',\n '[class.hx-select-button-invalid]': 'invalid()',\n '[class.hx-select-button-disabled]': 'isDisabled()',\n },\n template: `\n @for (item of items(); track $index) {\n <button\n type=\"button\"\n class=\"hx-select-button-option\"\n [class.hx-select-button-option-checked]=\"isChecked(item)\"\n [attr.aria-pressed]=\"isChecked(item)\"\n [disabled]=\"isDisabled() || item.disabled\"\n (click)=\"toggle(item)\"\n (blur)=\"onBlur()\"\n >\n <span class=\"hx-select-button-content\">{{ item.label }}</span>\n </button>\n }\n `,\n})\nexport class HxSelectButton implements ControlValueAccessor, FormValueControl<unknown> {\n readonly options = input<readonly unknown[]>([]);\n readonly optionLabel = input<Accessor<never, string>>('label');\n readonly optionValue = input<Accessor<never, unknown>>('value');\n readonly optionDisabled = input<Accessor<never, boolean>>('disabled');\n /** Several options can be chosen; the value is then an array. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Whether the chosen option can be switched off again (single choice). */\n readonly allowEmpty = input(true, { transform: booleanAttribute });\n readonly size = input<HxSelectButtonSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<unknown>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n protected readonly items = computed<HxOption[]>(() =>\n resolveOptions(this.options(), this.optionLabel(), this.optionValue(), this.optionDisabled()),\n );\n\n #onChange: (value: unknown) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: unknown): void {\n this.value.set(value ?? (this.multiple() ? [] : null));\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected isChecked(item: HxOption): boolean {\n const current = this.value();\n return this.multiple()\n ? Array.isArray(current) && current.some((v) => Object.is(v, item.value))\n : Object.is(current, item.value);\n }\n\n protected toggle(item: HxOption): void {\n const checked = this.isChecked(item);\n let next: unknown;\n if (this.multiple()) {\n const current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n next = checked ? current.filter((v) => !Object.is(v, item.value)) : [...current, item.value];\n } else if (checked) {\n if (!this.allowEmpty()) return;\n next = null;\n } else {\n next = item.value;\n }\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type HxSkeletonShape = 'rectangle' | 'circle';\nexport type HxSkeletonAnimation = 'wave' | 'none';\n\n/**\n * A placeholder shaped like the content that is still loading.\n *\n * ```html\n * <hx-skeleton width=\"10rem\" height=\"1rem\" />\n * <hx-skeleton shape=\"circle\" size=\"4rem\" />\n * ```\n *\n * It is hidden from assistive technology (`aria-hidden`), so it says nothing by itself: the container of the loading\n * content announces the state, e.g. `aria-busy=\"true\"` on it, or a visually hidden \"Loading…\" in a live region.\n * The wave stops under `prefers-reduced-motion`.\n */\n@Component({\n selector: 'hx-skeleton',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-skeleton',\n 'aria-hidden': 'true',\n '[class.hx-skeleton-circle]': \"shape() === 'circle'\",\n '[class.hx-skeleton-wave]': \"animation() === 'wave'\",\n '[style.width]': 'boxWidth()',\n '[style.height]': 'boxHeight()',\n '[style.border-radius]': 'borderRadius() ?? null',\n },\n})\nexport class HxSkeleton {\n readonly shape = input<HxSkeletonShape>('rectangle');\n /** Any CSS length; `100%` by default. */\n readonly width = input('100%');\n /** Any CSS length; `1rem` by default. */\n readonly height = input('1rem');\n /** Width and height at once, e.g. for a circle; wins over `width` and `height`. */\n readonly size = input<string>();\n /** Any CSS radius, replacing the one of the theme (a circle is always round). */\n readonly borderRadius = input<string>();\n readonly animation = input<HxSkeletonAnimation>('wave');\n\n protected readonly boxWidth = computed(() => this.size() ?? this.width());\n protected readonly boxHeight = computed(() => this.size() ?? this.height());\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nexport type HxSliderOrientation = 'horizontal' | 'vertical';\nexport type HxSliderValue = number | readonly [number, number];\n\n/**\n * A number, or with `range` a pair of numbers, chosen on a track. It is built on native\n * `<input type=\"range\">` elements (one, or two for a range), so the keyboard (arrows, Home, End, Page Up/Down)\n * and screen readers work natively; the track and the thumbs are drawn with the Helix tokens.\n *\n * ```html\n * <hx-slider ariaLabel=\"Volume\" [(ngModel)]=\"volume\" />\n * <hx-slider range ariaLabelStart=\"Minimum price\" ariaLabelEnd=\"Maximum price\" [min]=\"0\" [max]=\"500\" [(value)]=\"price\" />\n * <hx-slider orientation=\"vertical\" ariaLabel=\"Gain\" [(value)]=\"gain\" />\n * ```\n *\n * It works with `ngModel`, reactive forms and signal forms (`[formField]`). A range keeps the start thumb at or\n * below the end thumb.\n */\n@Component({\n selector: 'hx-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxSlider), multi: true }],\n host: {\n class: 'hx-slider',\n '[class.hx-slider-vertical]': \"orientation() === 'vertical'\",\n '[class.hx-slider-range-mode]': 'range()',\n '[class.hx-slider-invalid]': 'invalid()',\n '[class.hx-slider-disabled]': 'isDisabled()',\n '[style.--hx-slider-start]': \"startPercent() + '%'\",\n '[style.--hx-slider-end]': \"endPercent() + '%'\",\n '(focusout)': 'onFocusOut($event)',\n },\n template: `\n <div class=\"hx-slider-track\"><div class=\"hx-slider-fill\"></div></div>\n @if (range()) {\n <input\n type=\"range\"\n class=\"hx-slider-input hx-slider-input-start\"\n [style.z-index]=\"startPercent() > 50 ? 3 : 1\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"start()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabelStart()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 0)\"\n />\n <input\n type=\"range\"\n class=\"hx-slider-input hx-slider-input-end\"\n [style.z-index]=\"2\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"end()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabelEnd()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 1)\"\n />\n } @else {\n <input\n type=\"range\"\n class=\"hx-slider-input\"\n [attr.id]=\"inputId() ?? null\"\n [min]=\"lower()\"\n [max]=\"upper()\"\n [step]=\"step()\"\n [value]=\"end()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n (input)=\"onInput($event, 1)\"\n />\n }\n `,\n})\n// `any`: the contract types `min` and `max` like the value, which is a number or a pair here\n// biome-ignore lint/suspicious/noExplicitAny: see above\nexport class HxSlider implements ControlValueAccessor, FormValueControl<any> {\n /** Two thumbs; the value is `[start, end]`. */\n readonly range = input(false, { transform: booleanAttribute });\n /** Lower bound (default 0). */\n readonly min = input<number | undefined>();\n /** Upper bound (default 100). */\n readonly max = input<number | undefined>();\n readonly step = input(1, { transform: numberAttribute });\n readonly orientation = input<HxSliderOrientation>('horizontal');\n /** The `id` of the thumb of a single slider, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelStart = input<string>();\n readonly ariaLabelEnd = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model<HxSliderValue>(0);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n\n /** The start thumb: the first of a range, the minimum for a single slider (it has no start thumb). */\n protected readonly lower = computed(() => this.min() ?? 0);\n protected readonly upper = computed(() => this.max() ?? 100);\n\n protected readonly start = computed(() => {\n const value = this.value();\n return this.range() && Array.isArray(value) ? value[0] : this.lower();\n });\n protected readonly end = computed(() => {\n const value = this.value();\n if (Array.isArray(value)) return value[this.range() ? 1 : 0];\n return typeof value === 'number' ? value : this.upper();\n });\n\n protected readonly startPercent = computed(() => this.#percent(this.start()));\n protected readonly endPercent = computed(() => this.#percent(this.end()));\n\n #onChange: (value: HxSliderValue) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: HxSliderValue | null): void {\n this.value.set(value ?? (this.range() ? [this.lower(), this.upper()] : this.lower()));\n }\n registerOnChange(fn: (value: HxSliderValue) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n #percent(value: number): number {\n const span = this.upper() - this.lower();\n return span <= 0 ? 0 : Math.min(100, Math.max(0, ((value - this.lower()) / span) * 100));\n }\n\n protected onInput(event: Event, thumb: 0 | 1): void {\n const field = event.target as HTMLInputElement;\n let next = field.valueAsNumber;\n if (this.range()) {\n // the thumbs may touch but not cross; show the clamped value in the field\n next = thumb === 0 ? Math.min(next, this.end()) : Math.max(next, this.start());\n field.value = String(next);\n this.#commit(thumb === 0 ? [next, this.end()] : [this.start(), next]);\n } else {\n this.#commit(next);\n }\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const host = event.currentTarget as HTMLElement;\n if (host.contains(event.relatedTarget as Node | null)) return;\n this.#onTouched();\n this.touch.emit();\n }\n\n #commit(next: HxSliderValue): void {\n this.value.set(next);\n this.#onChange(next);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport {\n HxButton,\n type HxButtonSeverity,\n type HxButtonSize,\n type HxButtonVariant,\n} from '../button/button';\nimport { HxMenu } from '../menu/menu';\nimport type { HxMenuItem } from '../menu-item';\n\n/**\n * A default action with a menu of related actions: a button and, joined to it, a button that opens an `hx-menu`.\n *\n * ```html\n * <hx-split-button label=\"Save\" icon=\"pi pi-save\" [model]=\"items\" (click)=\"save()\" />\n * ```\n *\n * `(click)` is the native click of the main button (clicks on the menu button do not reach it); `(triggered)` fires for\n * an item chosen in the menu, after its `command`. The look comes from `severity`, `variant` and `size` as on\n * `hx-button`. The menu button needs a name: `menuButtonLabel` (default \"More actions\").\n */\n@Component({\n selector: 'hx-split-button',\n imports: [HxButton, HxMenu],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-split-button',\n role: 'group',\n '[attr.aria-label]': 'label() || null',\n '[class.hx-split-button-rounded]': 'rounded()',\n '[class.hx-split-button-raised]': 'raised()',\n '[class.hx-split-button-outlined]': \"variant() === 'outlined'\",\n },\n template: `\n <button\n hx-button\n type=\"button\"\n class=\"hx-split-button-main\"\n [variant]=\"variant()\"\n [severity]=\"severity()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n >\n @if (icon()) {\n <span class=\"hx-button-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n {{ label() }}\n </button>\n <button\n hx-button\n iconOnly\n type=\"button\"\n class=\"hx-split-button-menu\"\n aria-haspopup=\"menu\"\n [variant]=\"variant()\"\n [severity]=\"severity()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"menu.open()\"\n [attr.aria-label]=\"menuButtonLabel()\"\n (click)=\"$event.stopPropagation(); menu.toggle($event)\"\n >\n <span class=\"hx-split-button-chevron\" aria-hidden=\"true\"></span>\n </button>\n <hx-menu #menu popup [model]=\"model()\" [ariaLabel]=\"menuButtonLabel()\" (triggered)=\"triggered.emit($event)\" />\n `,\n})\nexport class HxSplitButton {\n /** Text of the main button. */\n readonly label = input<string>();\n /** CSS classes of an icon font for the main button, e.g. `pi pi-save`. */\n readonly icon = input<string>();\n /** The related actions in the menu. */\n readonly model = input<readonly HxMenuItem[]>([]);\n readonly variant = input<HxButtonVariant>('filled');\n readonly severity = input<HxButtonSeverity>('primary');\n readonly size = input<HxButtonSize>('medium');\n readonly rounded = input(false, { transform: booleanAttribute });\n readonly raised = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Accessible name of the button that opens the menu. */\n readonly menuButtonLabel = input('More actions');\n\n /** An item of the menu was activated. */\n readonly triggered = output<HxMenuItem>();\n\n private readonly menu = viewChild.required(HxMenu);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n inject,\n input,\n model,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/** Identifies a step and its panel. */\nexport type HxStepValue = string | number;\n\n/** What the template of a lazy step panel receives. */\nexport interface HxStepContentContext {\n /** Makes the step with this value the active one, e.g. `(click)=\"activateCallback(2)\"`. */\n activateCallback: (value: HxStepValue) => void;\n /** The value of the panel. */\n value: HxStepValue;\n}\n\n/**\n * The steps of a process, one panel at a time.\n *\n * ```html\n * <hx-stepper [(value)]=\"step\" linear>\n * <hx-step-list>\n * <hx-step [value]=\"1\">Account</hx-step>\n * <hx-step [value]=\"2\">Address</hx-step>\n * </hx-step-list>\n * <hx-step-panels>\n * <hx-step-panel [value]=\"1\">\n * <ng-template hxStepContent let-activateCallback=\"activateCallback\">\n * <button hx-button (click)=\"activateCallback(2)\">Next</button>\n * </ng-template>\n * </hx-step-panel>\n * <hx-step-panel [value]=\"2\">…</hx-step-panel>\n * </hx-step-panels>\n * </hx-stepper>\n * ```\n *\n * `value` is the `value` of the active step (the first enabled step while it is `null`). The steps before it count\n * as completed. With `linear` the steps after the active one are disabled: the way forward is `activateCallback` (or\n * `next()`), which the app calls once the step is valid; going back is always possible. A panel with an\n * `<ng-template hxStepContent>` is lazy: created when its step becomes active and, without `keepAlive`, destroyed when\n * the step is left. Plain panel content is created up front and only hidden.\n */\n@Component({\n selector: 'hx-stepper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-stepper' },\n template: '<ng-content />',\n})\nexport class HxStepper {\n /** The `value` of the active step. */\n readonly value = model<HxStepValue | null>(null);\n /** Steps after the active one cannot be chosen from their header. */\n readonly linear = input(false, { transform: booleanAttribute });\n /** Keep the content of lazy panels after their step is left. */\n readonly keepAlive = input(false, { transform: booleanAttribute });\n\n readonly id = nextId('hx-stepper');\n /** The steps in the order they were declared. */\n readonly steps = signal<readonly HxStep[]>([]);\n readonly visited = signal<ReadonlySet<HxStepValue>>(new Set());\n /** Index of the active step, -1 while there is none. */\n readonly activeIndex = computed(() => this.steps().findIndex((s) => s.value() === this.value()));\n\n constructor() {\n effect(() => {\n const value = this.value();\n const first = this.steps().find((s) => !s.disabled());\n untracked(() => {\n if (value === null) {\n if (first) this.value.set(first.value());\n } else if (!this.visited().has(value)) {\n this.visited.set(new Set([...this.visited(), value]));\n }\n });\n });\n }\n\n register(step: HxStep): () => void {\n this.steps.update((steps) => [...steps, step]);\n return () => this.steps.update((steps) => steps.filter((s) => s !== step));\n }\n\n stepId(value: HxStepValue): string {\n return `${this.id}-step-${value}`;\n }\n\n panelId(value: HxStepValue): string {\n return `${this.id}-panel-${value}`;\n }\n\n activate(value: HxStepValue): void {\n this.value.set(value);\n }\n\n /** Activates the step after the active one. */\n next(): void {\n const step = this.steps()[this.activeIndex() + 1];\n if (step) this.activate(step.value());\n }\n\n /** Activates the step before the active one. */\n previous(): void {\n const step = this.steps()[this.activeIndex() - 1];\n if (step) this.activate(step.value());\n }\n}\n\n/** The row of step headers. */\n@Component({\n selector: 'hx-step-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-step-list', role: 'list' },\n template: '<ng-content />',\n})\nexport class HxStepList {}\n\n/** The header of one step: a button with the number and the title. */\n@Component({\n selector: 'hx-step',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-step',\n role: 'listitem',\n '[class.hx-step-active]': 'active()',\n '[class.hx-step-completed]': 'completed()',\n '[class.hx-step-disabled]': 'unavailable()',\n '[class.hx-step-last]': 'last()',\n },\n template: `\n <button\n type=\"button\"\n class=\"hx-step-header\"\n [id]=\"stepper.stepId(value())\"\n [disabled]=\"unavailable()\"\n [attr.aria-current]=\"active() ? 'step' : null\"\n [attr.aria-controls]=\"stepper.panelId(value())\"\n (click)=\"stepper.activate(value())\"\n >\n <span class=\"hx-step-number\" aria-hidden=\"true\">\n @if (completed()) {\n <span class=\"hx-step-check\"></span>\n } @else {\n {{ index() + 1 }}\n }\n </span>\n <span class=\"hx-step-title\"><ng-content /></span>\n </button>\n @if (!last()) {\n <span class=\"hx-step-separator\" aria-hidden=\"true\"></span>\n }\n `,\n})\nexport class HxStep {\n protected readonly stepper = inject(HxStepper);\n /** Identifies the step and its panel. */\n readonly value = input.required<HxStepValue>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly index = computed(() => this.stepper.steps().indexOf(this));\n protected readonly last = computed(() => this.index() === this.stepper.steps().length - 1);\n protected readonly active = computed(() => this.stepper.value() === this.value());\n protected readonly completed = computed(\n () => this.stepper.activeIndex() > this.index() && this.index() >= 0,\n );\n /** Disabled by the app, or ahead of the active step in a linear stepper. */\n protected readonly unavailable = computed(\n () => this.disabled() || (this.stepper.linear() && this.index() > this.stepper.activeIndex()),\n );\n\n constructor() {\n const unregister = this.stepper.register(this);\n inject(DestroyRef).onDestroy(unregister);\n }\n}\n\n/** The container of the panels. */\n@Component({\n selector: 'hx-step-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-step-panels' },\n template: '<ng-content />',\n})\nexport class HxStepPanels {}\n\n/** Marks the lazy content of a panel: `<ng-template hxStepContent let-activateCallback=\"activateCallback\">`. */\n@Directive({ selector: 'ng-template[hxStepContent]' })\nexport class HxStepContent {\n readonly template = inject<TemplateRef<HxStepContentContext>>(TemplateRef);\n\n static ngTemplateContextGuard(\n _: HxStepContent,\n context: unknown,\n ): context is HxStepContentContext {\n return true;\n }\n}\n\n/** The content of one step. */\n@Component({\n selector: 'hx-step-panel',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-step-panel',\n role: 'region',\n '[id]': 'stepper.panelId(value())',\n '[attr.aria-labelledby]': 'stepper.stepId(value())',\n '[hidden]': '!active()',\n },\n template: `\n @if (lazy(); as lazy) {\n @if (render()) {\n <ng-container [ngTemplateOutlet]=\"lazy.template\" [ngTemplateOutletContext]=\"context()\" />\n }\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxStepPanel {\n protected readonly stepper = inject(HxStepper);\n /** The `value` of the step this panel belongs to. */\n readonly value = input.required<HxStepValue>();\n protected readonly lazy = contentChild(HxStepContent);\n protected readonly context = computed<HxStepContentContext>(() => ({\n activateCallback: (value) => this.stepper.activate(value),\n value: this.value(),\n }));\n\n protected active(): boolean {\n return this.stepper.value() === this.value();\n }\n\n protected render(): boolean {\n return this.active() || (this.stepper.keepAlive() && this.stepper.visited().has(this.value()));\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * A native `<input type=\"checkbox\">` with `role=\"switch\"`, drawn as a Helix toggle switch (CSS only).\n * Use it for a setting that takes effect immediately; label it with the setting's name, not the action.\n *\n * ```html\n * <label><input type=\"checkbox\" hx-switch [(ngModel)]=\"darkMode\" /> Dark mode</label>\n * ```\n */\n@Directive({\n selector: 'input[hx-switch]',\n exportAs: 'hx-switch',\n host: {\n class: 'hx-switch',\n role: 'switch',\n },\n})\nexport class HxSwitch {}\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\nexport type HxTableSize = 'small' | 'medium' | 'large';\n\n/**\n * A native `<table>` drawn as a Helix table (CSS only): header, body and footer rows, hover, stripes and gridlines\n * from the `--h-datatable-*` tokens. For small static tables; there is no sorting, paging or selection here: data grids\n * use AG Grid through `helix-ag-grid`.\n *\n * ```html\n * <div class=\"hx-table-scroll\">\n * <table hx-table striped hoverable>\n * <caption>Invoices</caption>\n * <thead><tr><th scope=\"col\">No.</th><th scope=\"col\">Amount</th></tr></thead>\n * <tbody><tr><th scope=\"row\">1001</th><td>€ 120</td></tr></tbody>\n * </table>\n * </div>\n * ```\n *\n * The table keeps its native semantics: nothing is added to the roles. Give it a `<caption>` (it is drawn as the table\n * header), mark header cells with `<th scope=\"col\">` / `<th scope=\"row\">`, and mark a selected row with\n * `aria-selected=\"true\"`, which is also what is styled. Wrap a wide table in `.hx-table-scroll` for horizontal\n * scrolling; with `stickyHeader` and a `max-height` on the wrapper the header stays in view. The wrapper is a scroll\n * container, so give it `tabindex=\"0\"` and a name (`role=\"region\"` with `aria-label`) when it scrolls.\n */\n@Directive({\n selector: 'table[hx-table]',\n host: {\n class: 'hx-table',\n '[class.hx-table-sm]': \"size() === 'small'\",\n '[class.hx-table-lg]': \"size() === 'large'\",\n '[class.hx-table-striped]': 'striped()',\n '[class.hx-table-gridlines]': 'gridlines()',\n '[class.hx-table-hoverable]': 'hoverable()',\n '[class.hx-table-sticky]': 'stickyHeader()',\n },\n})\nexport class HxTable {\n readonly size = input<HxTableSize>('medium');\n /** Alternate rows get a background. */\n readonly striped = input(false, { transform: booleanAttribute });\n /** Borders around every cell. */\n readonly gridlines = input(false, { transform: booleanAttribute });\n /** Rows of the body change colour under the pointer. */\n readonly hoverable = input(false, { transform: booleanAttribute });\n /** The header stays at the top of its scroll container (`.hx-table-scroll` with a `max-height`). */\n readonly stickyHeader = input(false, { transform: booleanAttribute });\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChild,\n DestroyRef,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n model,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\n/**\n * Tabs with panels, in the WAI-ARIA tabs pattern.\n *\n * ```html\n * <hx-tabs [(value)]=\"tab\">\n * <hx-tab-list>\n * <hx-tab value=\"a\">Profile</hx-tab>\n * <hx-tab value=\"b\">Billing</hx-tab>\n * <hx-tab value=\"c\" disabled>Soon</hx-tab>\n * </hx-tab-list>\n * <hx-tab-panels>\n * <hx-tab-panel value=\"a\">Profile content</hx-tab-panel>\n * <hx-tab-panel value=\"b\"><ng-template hxTabContent>Billing content, created when first shown</ng-template></hx-tab-panel>\n * </hx-tab-panels>\n * </hx-tabs>\n * ```\n *\n * `value` is the `value` of the active tab (the first enabled tab while it is `null`). A panel with an\n * `<ng-template hxTabContent>` is lazy: its content is created when the tab first becomes active and, with\n * `keepAlive`, kept afterwards; without `keepAlive` it is destroyed when the tab is left. Plain panel content is\n * created up front and only hidden.\n *\n * Roving tabindex: Tab enters the active tab, Left/Right (Home/End) move to the previous/next (first/last) enabled tab\n * and activate it. With `scrollable`, buttons at the ends of the list scroll tabs that overflow.\n */\n@Component({\n selector: 'hx-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tabs' },\n template: '<ng-content />',\n})\nexport class HxTabs {\n /** The `value` of the active tab. */\n readonly value = model<string | null>(null);\n /** Buttons at the ends of the tab list scroll tabs that overflow. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n /** Keep the content of lazy panels after their tab is left. */\n readonly keepAlive = input(false, { transform: booleanAttribute });\n\n readonly id = nextId('hx-tabs');\n /** The first tab registered that is enabled, to start with. */\n readonly #first = signal<string | null>(null);\n readonly visited = signal<ReadonlySet<string>>(new Set());\n\n constructor() {\n effect(() => {\n const value = this.value();\n const first = this.#first();\n untracked(() => {\n if (value === null) {\n if (first !== null) this.value.set(first);\n } else if (!this.visited().has(value)) {\n this.visited.set(new Set([...this.visited(), value]));\n }\n });\n });\n }\n\n registerTab(value: string, disabled: boolean): void {\n if (!disabled && this.#first() === null) this.#first.set(value);\n }\n\n tabId(value: string): string {\n return `${this.id}-tab-${value}`;\n }\n\n panelId(value: string): string {\n return `${this.id}-panel-${value}`;\n }\n\n activate(value: string): void {\n this.value.set(value);\n }\n}\n\n/** The row of tabs. Handles the arrow keys and, with `scrollable`, the scroll buttons. */\n@Component({\n selector: 'hx-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tab-list', '[class.hx-tab-list-scrollable]': 'tabs.scrollable()' },\n template: `\n @if (tabs.scrollable() && overflowing()) {\n <button type=\"button\" class=\"hx-tab-nav hx-tab-nav-prev\" tabindex=\"-1\" aria-label=\"Scroll tabs left\" (click)=\"scroll(-1)\">\n <span class=\"hx-tab-nav-icon-prev\" aria-hidden=\"true\"></span>\n </button>\n }\n <div #scroller class=\"hx-tab-scroller\" (scroll)=\"measure()\">\n <div class=\"hx-tab-tabs\" role=\"tablist\" (keydown)=\"onKeydown($event)\"><ng-content /></div>\n </div>\n @if (tabs.scrollable() && overflowing()) {\n <button type=\"button\" class=\"hx-tab-nav hx-tab-nav-next\" tabindex=\"-1\" aria-label=\"Scroll tabs right\" (click)=\"scroll(1)\">\n <span class=\"hx-tab-nav-icon-next\" aria-hidden=\"true\"></span>\n </button>\n }\n `,\n})\nexport class HxTabList {\n protected readonly tabs = inject(HxTabs);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n private readonly scroller = viewChild<ElementRef<HTMLElement>>('scroller');\n protected readonly overflowing = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this.measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(this.#host.nativeElement);\n this.#destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n protected measure(): void {\n const el = this.scroller()?.nativeElement;\n if (el) this.overflowing.set(el.scrollWidth > el.clientWidth + 1);\n }\n\n protected scroll(direction: 1 | -1): void {\n const el = this.scroller()?.nativeElement;\n el?.scrollBy?.({ left: direction * el.clientWidth * 0.6, behavior: 'smooth' });\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n const tabs = [\n ...this.#host.nativeElement.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([aria-disabled=\"true\"])',\n ),\n ];\n const at = tabs.indexOf(event.target as HTMLElement);\n if (at < 0) return;\n event.preventDefault();\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? tabs.length - 1\n : (at + (event.key === 'ArrowRight' ? 1 : -1) + tabs.length) % tabs.length;\n tabs[next].focus();\n tabs[next].click(); // automatic activation\n }\n}\n\n/** One tab. */\n@Component({\n selector: 'hx-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tab',\n role: 'tab',\n '[id]': 'tabs.tabId(value())',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'tabs.panelId(value())',\n '[attr.aria-disabled]': \"disabled() ? 'true' : null\",\n '[attr.tabindex]': 'selected() && !disabled() ? 0 : -1',\n '[class.hx-tab-active]': 'selected()',\n '[class.hx-tab-disabled]': 'disabled()',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onClick()',\n '(keydown.space)': 'onSpace($event)',\n },\n template: '<ng-content />',\n})\nexport class HxTab {\n protected readonly tabs = inject(HxTabs);\n /** Identifies the tab and its panel. */\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected selected(): boolean {\n return this.tabs.value() === this.value();\n }\n\n constructor() {\n effect(() => this.tabs.registerTab(this.value(), this.disabled()));\n }\n\n protected onClick(): void {\n if (!this.disabled()) this.tabs.activate(this.value());\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.onClick();\n }\n}\n\n/** The container of the panels. */\n@Component({\n selector: 'hx-tab-panels',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tab-panels' },\n template: '<ng-content />',\n})\nexport class HxTabPanels {}\n\n/** Marks the lazy content of a panel: `<ng-template hxTabContent>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTabContent]' })\nexport class HxTabContent {\n readonly template = inject(TemplateRef);\n}\n\n/** The content of one tab. */\n@Component({\n selector: 'hx-tab-panel',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tab-panel',\n role: 'tabpanel',\n tabindex: '0',\n '[id]': 'tabs.panelId(value())',\n '[attr.aria-labelledby]': 'tabs.tabId(value())',\n '[hidden]': '!active()',\n },\n template: `\n @if (lazy(); as lazy) {\n @if (render()) {\n <ng-container [ngTemplateOutlet]=\"lazy.template\" />\n }\n } @else {\n <ng-content />\n }\n `,\n})\nexport class HxTabPanel {\n protected readonly tabs = inject(HxTabs);\n /** The `value` of the tab this panel belongs to. */\n readonly value = input.required<string>();\n protected readonly lazy = contentChild(HxTabContent);\n\n protected active(): boolean {\n return this.tabs.value() === this.value();\n }\n\n protected render(): boolean {\n return this.active() || (this.tabs.keepAlive() && this.tabs.visited().has(this.value()));\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type HxTagSeverity =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'info'\n | 'warn'\n | 'danger'\n | 'contrast';\n\n/**\n * A label for a category or a status. The text is the `value` or the projected content.\n *\n * ```html\n * <hx-tag value=\"New\" severity=\"success\" />\n * <hx-tag severity=\"warn\" rounded icon=\"pi pi-exclamation-triangle\">Pending</hx-tag>\n * ```\n *\n * A tag is plain text and the icon is decorative (`aria-hidden`), so the colour must not be the only carrier of the\n * meaning: the text says it too.\n */\n@Component({\n selector: 'hx-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-tag',\n '[class.hx-tag-rounded]': 'rounded()',\n '[class.hx-tag-secondary]': \"severity() === 'secondary'\",\n '[class.hx-tag-success]': \"severity() === 'success'\",\n '[class.hx-tag-info]': \"severity() === 'info'\",\n '[class.hx-tag-warn]': \"severity() === 'warn'\",\n '[class.hx-tag-danger]': \"severity() === 'danger'\",\n '[class.hx-tag-contrast]': \"severity() === 'contrast'\",\n },\n template: `\n @if (icon()) {\n <span class=\"hx-tag-icon\" [class]=\"icon()\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-tag-label\">{{ value() }}<ng-content /></span>\n `,\n})\nexport class HxTag {\n /** The text; content can be projected instead. */\n readonly value = input<string | number | null>(null);\n readonly severity = input<HxTagSeverity>('primary');\n /** A pill instead of the small radius. */\n readonly rounded = input(false, { transform: booleanAttribute });\n /** CSS classes of an icon font, e.g. `pi pi-check`. */\n readonly icon = input<string>();\n}\n","// The surface scales the theme service offers: the neutral scales of Tailwind and three Helix extras. Each is the\n// 12 steps of `--h-surface-0 … --h-surface-950`; the scale replaces the surface of both colour schemes.\nexport const HX_SURFACES = {\n slate: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n gray: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n zinc: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n neutral: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n stone: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n soho: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d',\n },\n viva: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315',\n },\n ocean: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920',\n },\n} as const;\n\nexport type HxSurface = keyof typeof HX_SURFACES;\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n type EnvironmentProviders,\n effect,\n Injectable,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n PLATFORM_ID,\n provideEnvironmentInitializer,\n signal,\n} from '@angular/core';\nimport { HX_SURFACES, type HxSurface } from './surfaces';\n\n/** The colour scales an app can choose as its primary colour; `noir` uses the surface scale (black and white). */\nexport const HX_PRIMARY_COLORS = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'noir',\n] as const;\nexport type HxPrimaryColor = (typeof HX_PRIMARY_COLORS)[number];\nexport const HX_SURFACE_NAMES = Object.keys(HX_SURFACES) as HxSurface[];\nexport type { HxSurface };\n\nconst STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const;\nconst SURFACE_STEPS = [0, ...STEPS] as const;\n\nexport interface HxThemeOptions {\n /**\n * How dark mode is switched on: a class on `<html>` (`.app-dark`, the default, also the selector of\n * `tokens.css`) or an attribute (`[data-theme=\"dark\"]`).\n */\n darkSelector?: string;\n /**\n * `false`: the host app owns the dark class/attribute (e.g. from `prefers-color-scheme`), HxTheme never writes it\n * to `<html>`. `dark()` still follows `setDark()` for the colour overrides. Default `true`.\n */\n manageDark?: boolean;\n /** Where the choice is remembered (localStorage). `null` (the default) remembers nothing. */\n storageKey?: string | null;\n /** Dark mode when nothing is remembered; by default the system setting (`prefers-color-scheme`). */\n dark?: boolean;\n /** The primary colour when nothing is remembered; `null` is the one of the preset (indigo). */\n primary?: HxPrimaryColor | null;\n /** The surface scale when nothing is remembered; `null` is the one of the preset. */\n surface?: HxSurface | null;\n /**\n * Cross-fades the page when dark mode is switched, with the View Transitions API where the browser has it\n * (the first value at start-up is applied at once). Default `false`.\n */\n viewTransition?: boolean;\n}\n\n/** The scales of the surfaces, by name: for swatches in a colour chooser (`HX_SURFACES.zinc[500]`). */\nexport { HX_SURFACES };\n\nexport const HX_THEME_OPTIONS = new InjectionToken<HxThemeOptions>('HX_THEME_OPTIONS', {\n providedIn: 'root',\n factory: () => ({}),\n});\n\ninterface Saved {\n dark?: boolean;\n primary?: HxPrimaryColor | null;\n surface?: HxSurface | null;\n}\n\n/** A class (`.app-dark`) or an attribute (`[data-theme=\"dark\"]`) selector, split into what the DOM needs. */\nexport function parseDarkSelector(selector: string): {\n css: string;\n apply: (el: Element, on: boolean) => void;\n} {\n const cls = /^\\.([a-zA-Z][\\w-]*)$/.exec(selector);\n if (cls) {\n return { css: selector, apply: (el, on) => el.classList.toggle(cls[1], on) };\n }\n const attr = /^\\[([\\w-]+)(?:=[\"']?([^\"'\\]]+)[\"']?)?\\]$/.exec(selector);\n if (attr) {\n const [, name, value = ''] = attr;\n return {\n css: selector,\n apply: (el, on) => (on ? el.setAttribute(name, value) : el.removeAttribute(name)),\n };\n }\n throw new Error(\n `HxTheme darkSelector \"${selector}\": use a class (\".app-dark\") or an attribute (\"[data-theme=dark]\")`,\n );\n}\n\nconst scale = (name: string) =>\n STEPS.map((step) => `--h-primary-${step}:var(--h-${name}-${step});`).join('');\n\n/** The primary colour: its scale, and for `noir` the scheme-dependent roles that are no scale step. */\nfunction primaryCss(primary: HxPrimaryColor, dark: string): string {\n if (primary !== 'noir') return `:root:root{${scale(primary)}}`;\n const light =\n `${STEPS.map((step) => `--h-primary-${step}:var(--h-surface-${step});`).join('')}` +\n '--h-primary-color:var(--h-primary-950);--h-primary-contrast-color:#ffffff;' +\n '--h-primary-hover-color:var(--h-primary-800);--h-primary-active-color:var(--h-primary-700);' +\n '--h-highlight-background:var(--h-primary-950);--h-highlight-focus-background:var(--h-primary-700);' +\n '--h-highlight-color:#ffffff;--h-highlight-focus-color:#ffffff;';\n const night =\n '--h-primary-color:var(--h-primary-50);--h-primary-contrast-color:var(--h-primary-950);' +\n '--h-primary-hover-color:var(--h-primary-200);--h-primary-active-color:var(--h-primary-300);' +\n '--h-highlight-background:var(--h-primary-50);--h-highlight-focus-background:var(--h-primary-300);' +\n '--h-highlight-color:var(--h-primary-950);--h-highlight-focus-color:var(--h-primary-950);';\n return `:root:root{${light}}:root:root${dark}{${night}}`;\n}\n\n/** The surface scale, the same in both colour schemes (as the configurator of the shell always did). */\nfunction surfaceCss(surface: HxSurface, dark: string): string {\n const palette = HX_SURFACES[surface] as Record<number, string>;\n const body = SURFACE_STEPS.map((step) => `--h-surface-${step}:${palette[step]};`).join('');\n return `:root:root{${body}}:root:root${dark}{${body}}`;\n}\n\n/**\n * Switches dark mode, the primary colour and the surface scale while the app runs, with CSS custom properties\n * only: no styling engine, no rebuild of the tokens. `tokens.css` defines every `--h-*` token for the Helix look;\n * this service overrides the ones that carry the colour choice, in a style sheet of its own that wins over\n * `tokens.css` in both colour schemes.\n *\n * ```ts\n * // app.config.ts\n * provideHxTheme({ storageKey: 'my-app-theme' })\n *\n * // anywhere\n * readonly theme = inject(HxTheme);\n * theme.toggleDark();\n * theme.setPrimary('emerald');\n * theme.setSurface('zinc');\n * ```\n *\n * Nothing touches the DOM on the server; `css()` is the style text, for an app that renders it itself.\n */\n@Injectable({ providedIn: 'root' })\nexport class HxTheme {\n readonly #doc = inject(DOCUMENT);\n readonly #browser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #options = inject(HX_THEME_OPTIONS);\n readonly #darkSelector = parseDarkSelector(this.#options.darkSelector ?? '.app-dark');\n readonly #saved = this.#load();\n\n readonly #dark = signal(this.#saved.dark ?? this.#options.dark ?? this.#systemDark());\n readonly #primary = signal<HxPrimaryColor | null>(\n this.#saved.primary ?? this.#options.primary ?? null,\n );\n readonly #surface = signal<HxSurface | null>(\n this.#saved.surface ?? this.#options.surface ?? null,\n );\n\n readonly dark = this.#dark.asReadonly();\n readonly primary = this.#primary.asReadonly();\n readonly surface = this.#surface.asReadonly();\n\n /** The overrides for the chosen primary colour and surface (empty while both are the preset's own). */\n readonly css = computed(() => {\n const dark = this.#darkSelector.css;\n const primary = this.#primary();\n const surface = this.#surface();\n return `${surface ? surfaceCss(surface, dark) : ''}${primary ? primaryCss(primary, dark) : ''}`;\n });\n\n #darkApplied = false;\n #write: ((css: string) => void) | null = null;\n #remove: (() => void) | null = null;\n\n constructor() {\n effect(() => {\n const dark = this.#dark();\n if (!this.#browser || this.#options.manageDark === false) return;\n const root = this.#doc.documentElement;\n const doc = this.#doc as Document & { startViewTransition?: (update: () => void) => unknown };\n const apply = () => this.#darkSelector.apply(root, dark);\n // the first value is the start-up state: nothing to cross-fade from\n if (this.#darkApplied && this.#options.viewTransition && doc.startViewTransition) {\n doc.startViewTransition(apply);\n } else {\n apply();\n }\n this.#darkApplied = true;\n });\n effect(() => {\n const css = this.css();\n if (this.#browser) this.#writeSheet(css);\n });\n effect(() =>\n this.#save({ dark: this.#dark(), primary: this.#primary(), surface: this.#surface() }),\n );\n // an instance that is not the root one (provided on a component) takes its overrides with it\n inject(DestroyRef).onDestroy(() => this.#remove?.());\n }\n\n setDark(dark: boolean): void {\n this.#dark.set(dark);\n }\n\n toggleDark(): void {\n this.#dark.update((dark) => !dark);\n }\n\n /** `null` goes back to the primary colour of the preset. */\n setPrimary(primary: HxPrimaryColor | null): void {\n if (primary !== null && !HX_PRIMARY_COLORS.includes(primary))\n throw new Error(`unknown primary colour \"${primary}\"`);\n this.#primary.set(primary);\n }\n\n /** `null` goes back to the surface scale of the preset. */\n setSurface(surface: HxSurface | null): void {\n if (surface !== null && !(surface in HX_SURFACES))\n throw new Error(`unknown surface \"${surface}\"`);\n this.#surface.set(surface);\n }\n\n #systemDark(): boolean {\n const view = this.#doc.defaultView;\n return this.#browser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\n }\n\n #load(): Saved {\n const key = this.#options.storageKey;\n if (!this.#browser || !key) return {};\n try {\n const value = JSON.parse(\n this.#doc.defaultView?.localStorage.getItem(key) ?? 'null',\n ) as Saved | null;\n return value && typeof value === 'object' ? value : {};\n } catch {\n return {}; // blocked or damaged storage: start from the defaults\n }\n }\n\n #save(state: Saved): void {\n const key = this.#options.storageKey;\n if (!this.#browser || !key) return;\n try {\n this.#doc.defaultView?.localStorage.setItem(key, JSON.stringify(state));\n } catch {\n // storage full or blocked: the choice just does not survive a reload\n }\n }\n\n /** One style sheet of the service: a constructed one where the browser has them, else a `<style>`. */\n #writeSheet(css: string): void {\n if (!this.#write) {\n const doc = this.#doc;\n const view = doc.defaultView as (Window & { CSSStyleSheet?: typeof CSSStyleSheet }) | null;\n if (\n view?.CSSStyleSheet &&\n 'adoptedStyleSheets' in doc &&\n 'replaceSync' in view.CSSStyleSheet.prototype\n ) {\n const sheet = new view.CSSStyleSheet();\n doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, sheet];\n this.#write = (text) => sheet.replaceSync(text);\n this.#remove = () => {\n doc.adoptedStyleSheets = doc.adoptedStyleSheets.filter((s) => s !== sheet);\n };\n } else {\n const style = doc.createElement('style');\n style.setAttribute('data-hx-theme', '');\n doc.head.appendChild(style);\n this.#write = (text) => {\n style.textContent = text;\n };\n this.#remove = () => style.remove();\n }\n }\n this.#write(css);\n }\n}\n\n/** Provides the theme service with its options and creates it at start-up, so the saved choice applies at once. */\nexport function provideHxTheme(options: HxThemeOptions = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: HX_THEME_OPTIONS, useValue: options },\n provideEnvironmentInitializer(() => {\n inject(HxTheme);\n }),\n ]);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n Directive,\n inject,\n input,\n TemplateRef,\n} from '@angular/core';\n\nexport type HxTimelineAlign = 'left' | 'right' | 'alternate';\nexport type HxTimelineLayout = 'vertical' | 'horizontal';\n\n/** What the templates of a timeline receive: the event (`let-event`) and its index (`let-index=\"index\"`). */\nexport interface HxTimelineContext<T = unknown> {\n $implicit: T;\n index: number;\n}\n\n/** The content of an event: `<ng-template hxTimelineContent let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineContent]' })\nexport class HxTimelineContent {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/** The text on the other side of the line: `<ng-template hxTimelineOpposite let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineOpposite]' })\nexport class HxTimelineOpposite {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/** Replaces the dot on the line: `<ng-template hxTimelineMarker let-event>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTimelineMarker]' })\nexport class HxTimelineMarker {\n readonly template = inject<TemplateRef<HxTimelineContext>>(TemplateRef);\n}\n\n/**\n * Events along a line.\n *\n * ```html\n * <hx-timeline [value]=\"events\" align=\"alternate\">\n * <ng-template hxTimelineContent let-event>{{ event.status }}</ng-template>\n * <ng-template hxTimelineOpposite let-event>{{ event.date }}</ng-template>\n * </hx-timeline>\n * ```\n *\n * `align` (vertical): `left` puts the content right of the line and the opposite text left of it, `right` the other\n * way round, `alternate` switches with every event. Horizontal: `left` puts the content below the line, `right`\n * above it, `alternate` switches. It is an ordered list; markers are decorative (`aria-hidden`), so put whatever\n * must be read (a date, a status) in the content or opposite templates.\n */\n@Component({\n selector: 'hx-timeline',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-timeline',\n '[class.hx-timeline-vertical]': \"layout() === 'vertical'\",\n '[class.hx-timeline-horizontal]': \"layout() === 'horizontal'\",\n },\n template: `\n <ol class=\"hx-timeline-events\">\n @for (event of value(); track $index; let i = $index; let last = $last) {\n <li class=\"hx-timeline-event\" [class.hx-timeline-event-reversed]=\"reversed(i)\">\n <div class=\"hx-timeline-event-opposite\">\n @if (opposite(); as opposite) {\n <ng-container [ngTemplateOutlet]=\"opposite.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n }\n </div>\n <div class=\"hx-timeline-event-separator\" aria-hidden=\"true\">\n @if (marker(); as marker) {\n <div class=\"hx-timeline-event-marker-custom\">\n <ng-container [ngTemplateOutlet]=\"marker.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n </div>\n } @else {\n <div class=\"hx-timeline-event-marker\"></div>\n }\n @if (!last) {\n <div class=\"hx-timeline-event-connector\"></div>\n }\n </div>\n <div class=\"hx-timeline-event-content\">\n @if (content(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.template\" [ngTemplateOutletContext]=\"{ $implicit: event, index: i }\" />\n }\n </div>\n </li>\n }\n </ol>\n `,\n})\nexport class HxTimeline {\n /** The events; any objects, handed to the templates. */\n readonly value = input<readonly unknown[]>([]);\n readonly align = input<HxTimelineAlign>('left');\n readonly layout = input<HxTimelineLayout>('vertical');\n\n protected readonly content = contentChild(HxTimelineContent);\n protected readonly opposite = contentChild(HxTimelineOpposite);\n protected readonly marker = contentChild(HxTimelineMarker);\n\n protected reversed(index: number): boolean {\n const align = this.align();\n return align === 'right' || (align === 'alternate' && index % 2 === 1);\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport type HxToastSeverity = 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast';\n\n/** What to show: the arguments of `HxMessageService.add`. */\nexport interface HxToastMessageInput {\n severity?: HxToastSeverity;\n summary?: string;\n detail?: string;\n /** Milliseconds until the toast goes away (default 3000). */\n life?: number;\n /** Stays until the user closes it. */\n sticky?: boolean;\n /** Shows a close button (default `true`). */\n closable?: boolean;\n /** Only a `<hx-toast key=\"…\">` with the same key shows it. */\n key?: string;\n}\n\nexport interface HxToastMessage extends HxToastMessageInput {\n readonly id: number;\n}\n\n/**\n * Sends short messages to the `<hx-toast>` components of the app.\n *\n * ```ts\n * readonly messages = inject(HxMessageService);\n * this.messages.add({ severity: 'success', summary: 'Saved', detail: 'The order was saved.' });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class HxMessageService {\n #nextId = 1;\n readonly #messages = signal<readonly HxToastMessage[]>([]);\n\n /** The messages that are showing. */\n readonly messages = this.#messages.asReadonly();\n\n /** Shows a message and returns its id. */\n add(message: HxToastMessageInput): number {\n const id = this.#nextId++;\n this.#messages.update((all) => [...all, { ...message, id }]);\n return id;\n }\n\n addAll(messages: readonly HxToastMessageInput[]): number[] {\n return messages.map((m) => this.add(m));\n }\n\n /** Removes one message. */\n remove(id: number): void {\n this.#messages.update((all) => all.filter((m) => m.id !== id));\n }\n\n /** Removes all messages, or only those sent with `key`. */\n clear(key?: string): void {\n this.#messages.update((all) => (key === undefined ? [] : all.filter((m) => m.key !== key)));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n type OnInit,\n} from '@angular/core';\nimport { HxMessageService, type HxToastMessage } from './message-service';\n\nexport type HxToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'center'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/** One message: pauses its timer while the pointer or the focus is on it. */\n@Component({\n selector: 'hx-toast-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-toast-item',\n '[class.hx-toast-info]': \"severity() === 'info'\",\n '[class.hx-toast-success]': \"severity() === 'success'\",\n '[class.hx-toast-warn]': \"severity() === 'warn'\",\n '[class.hx-toast-error]': \"severity() === 'error'\",\n '[class.hx-toast-secondary]': \"severity() === 'secondary'\",\n '[class.hx-toast-contrast]': \"severity() === 'contrast'\",\n '[attr.role]': \"severity() === 'warn' || severity() === 'error' ? 'alert' : 'status'\",\n '[attr.aria-live]': \"severity() === 'warn' || severity() === 'error' ? 'assertive' : 'polite'\",\n 'aria-atomic': 'true',\n '(mouseenter)': 'pause()',\n '(mouseleave)': 'resume()',\n '(focusin)': 'pause()',\n '(focusout)': 'resume()',\n },\n template: `\n <div class=\"hx-toast-content\">\n <span class=\"hx-toast-icon\" aria-hidden=\"true\"></span>\n <div class=\"hx-toast-text\">\n @if (message().summary) {\n <span class=\"hx-toast-summary\">{{ message().summary }}</span>\n }\n @if (message().detail) {\n <div class=\"hx-toast-detail\">{{ message().detail }}</div>\n }\n </div>\n @if (message().closable !== false) {\n <button type=\"button\" class=\"hx-toast-close\" aria-label=\"Close\" (click)=\"close()\">\n <span class=\"hx-toast-close-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n `,\n})\nexport class HxToastItem implements OnInit {\n readonly message = input.required<HxToastMessage>();\n readonly #service = inject(HxMessageService);\n readonly #destroyRef = inject(DestroyRef);\n protected readonly severity = computed(() => this.message().severity ?? 'info');\n #timer: ReturnType<typeof setTimeout> | undefined;\n #remaining = 0;\n #started = 0;\n\n constructor() {\n this.#destroyRef.onDestroy(() => clearTimeout(this.#timer));\n }\n\n ngOnInit(): void {\n const { sticky, life } = this.message();\n if (sticky) return;\n this.#remaining = life ?? 3000;\n this.#start();\n }\n\n #start(): void {\n clearTimeout(this.#timer);\n if (this.message().sticky) return;\n this.#started = Date.now();\n this.#timer = setTimeout(() => this.close(), this.#remaining);\n }\n\n protected pause(): void {\n if (this.#timer === undefined) return;\n clearTimeout(this.#timer);\n this.#timer = undefined;\n this.#remaining = Math.max(500, this.#remaining - (Date.now() - this.#started));\n }\n\n protected resume(): void {\n if (this.message().sticky || this.#timer !== undefined) return;\n this.#start();\n }\n\n protected close(): void {\n clearTimeout(this.#timer);\n this.#service.remove(this.message().id);\n }\n}\n\n/**\n * Shows the messages sent through `HxMessageService`. Put one `<hx-toast>` in the root component.\n *\n * ```html\n * <hx-toast position=\"top-right\" />\n * <hx-toast key=\"form\" position=\"bottom-center\" />\n * ```\n *\n * A toast with a `key` shows only messages sent with that key; one without shows those sent without. Each message is\n * a live region (`polite` for info and success, `assertive` for warn and error). The timer of a message pauses\n * while the pointer or the focus is on it, so it is not removed while someone reads it or reaches for its close button.\n */\n@Component({\n selector: 'hx-toast',\n imports: [HxToastItem],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'hx-toast',\n '[class.hx-toast-top-left]': \"position() === 'top-left'\",\n '[class.hx-toast-top-center]': \"position() === 'top-center'\",\n '[class.hx-toast-top-right]': \"position() === 'top-right'\",\n '[class.hx-toast-center]': \"position() === 'center'\",\n '[class.hx-toast-bottom-left]': \"position() === 'bottom-left'\",\n '[class.hx-toast-bottom-center]': \"position() === 'bottom-center'\",\n '[class.hx-toast-bottom-right]': \"position() === 'bottom-right'\",\n },\n template: `\n @for (message of shown(); track message.id) {\n <hx-toast-item [message]=\"message\" />\n }\n `,\n})\nexport class HxToast {\n readonly #service = inject(HxMessageService);\n /** Only messages sent with this key are shown here. */\n readonly key = input<string>();\n readonly position = input<HxToastPosition>('top-right');\n protected readonly shown = computed(() =>\n this.#service.messages().filter((m) => m.key === this.key()),\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nexport type HxToggleButtonSize = 'small' | 'medium' | 'large';\n\n/**\n * A two-state button with its own labels for on and off. It is a native `<button>` with `aria-pressed`, and\n * works with `ngModel`, reactive forms and signal forms (`[formField]`) like `hx-select`.\n *\n * ```html\n * <hx-toggle-button onLabel=\"Subscribed\" offLabel=\"Subscribe\" onIcon=\"pi pi-check\" [(ngModel)]=\"subscribed\" />\n * <hx-toggle-button ariaLabel=\"Bold\" onIcon=\"pi pi-bold\" offIcon=\"pi pi-bold\" onLabel=\"\" offLabel=\"\" [(value)]=\"bold\" />\n * ```\n *\n * With only icons, give `ariaLabel`. An `ariaLabel` is also the stable name when the labels change with the\n * state: `aria-pressed` already tells the state.\n */\n@Component({\n selector: 'hx-toggle-button',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HxToggleButton), multi: true },\n ],\n host: {\n class: 'hx-toggle-button',\n '[class.hx-toggle-button-sm]': \"size() === 'small'\",\n '[class.hx-toggle-button-lg]': \"size() === 'large'\",\n '[class.hx-toggle-button-fluid]': 'fluid()',\n '[class.hx-toggle-button-checked]': 'value()',\n '[class.hx-toggle-button-invalid]': 'invalid()',\n '[class.hx-toggle-button-disabled]': 'isDisabled()',\n },\n template: `\n <button\n type=\"button\"\n class=\"hx-toggle-button-control\"\n [attr.id]=\"inputId() ?? null\"\n [attr.aria-pressed]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (blur)=\"onBlur()\"\n >\n <span class=\"hx-toggle-button-content\">\n @if (icon(); as icon) {\n <i class=\"hx-toggle-button-icon\" [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n @if (label(); as label) {\n <span class=\"hx-toggle-button-label\">{{ label }}</span>\n }\n </span>\n </button>\n `,\n})\nexport class HxToggleButton implements ControlValueAccessor, FormValueControl<boolean> {\n readonly onLabel = input('Yes');\n readonly offLabel = input('No');\n /** Icon classes (for example `pi pi-check`) shown while on or off. */\n readonly onIcon = input('');\n readonly offIcon = input('');\n readonly size = input<HxToggleButtonSize>('medium');\n readonly fluid = input(false, { transform: booleanAttribute });\n /** The `id` of the button, for a `<label for>`. */\n readonly inputId = input<string>();\n readonly ariaLabel = input<string>();\n readonly ariaLabelledby = input<string>();\n\n // The signal-forms contract (FormValueControl): value, disabled, invalid, touch.\n readonly value = model(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n readonly #cvaDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.#cvaDisabled());\n protected readonly label = computed(() => (this.value() ? this.onLabel() : this.offLabel()));\n protected readonly icon = computed(() => (this.value() ? this.onIcon() : this.offIcon()));\n\n #onChange: (value: boolean) => void = () => {};\n #onTouched: () => void = () => {};\n\n writeValue(value: boolean | null): void {\n this.value.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n setDisabledState(disabled: boolean): void {\n this.#cvaDisabled.set(disabled);\n }\n\n protected toggle(): void {\n const next = !this.value();\n this.value.set(next);\n this.#onChange(next);\n }\n\n protected onBlur(): void {\n this.#onTouched();\n this.touch.emit();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * A bar that groups actions in a start, a center and an end area. It wraps on small screens.\n *\n * ```html\n * <hx-toolbar>\n * <button hxToolbarStart hx-button>New</button>\n * <span hxToolbarCenter>3 selected</span>\n * <button hxToolbarEnd hx-button>Export</button>\n * </hx-toolbar>\n * ```\n *\n * It is a plain group with no `role=\"toolbar\"`: that role promises one tab stop and arrow-key navigation, which\n * this component does not do, so every control keeps its own tab stop.\n */\n@Component({\n selector: 'hx-toolbar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-toolbar' },\n template: `\n <div class=\"hx-toolbar-start\"><ng-content select=\"[hxToolbarStart]\" /></div>\n <div class=\"hx-toolbar-center\"><ng-content select=\"[hxToolbarCenter]\" /></div>\n <div class=\"hx-toolbar-end\"><ng-content select=\"[hxToolbarEnd]\" /></div>\n `,\n})\nexport class HxToolbar {}\n","import { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { nextId } from '../internal/ids';\n\nexport type HxTooltipPosition = 'top' | 'right' | 'bottom' | 'left';\nexport type HxTooltipEvent = 'hover' | 'focus' | 'both';\n\n/** The bubble. Created by the directive in a CDK overlay. */\n@Component({\n selector: 'hx-tooltip-bubble',\n template: '{{ text() }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tooltip', role: 'tooltip', '[id]': 'id' },\n})\nexport class HxTooltipBubble {\n readonly text = signal('');\n id = '';\n}\n\nconst POSITIONS = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },\n} as const;\n\n/** Where to flip to when the preferred side does not fit. */\nconst OPPOSITE: Record<HxTooltipPosition, HxTooltipPosition> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n};\n\n/**\n * A short text that explains an element, shown on hover and/or keyboard focus (CDK overlay, `role=\"tooltip\"`,\n * `aria-describedby` on the host). Escape closes it. It is a hint, not a place for essential information.\n *\n * ```html\n * <button hx-button iconOnly aria-label=\"Add\" hx-tooltip=\"Add item\" hxTooltipPosition=\"right\">+</button>\n * ```\n */\n@Directive({\n selector: '[hx-tooltip]',\n host: {\n '[attr.aria-describedby]': 'shown() ? bubbleId : null',\n '(mouseenter)': 'onEnter(\"hover\")',\n '(mouseleave)': 'onLeave(\"hover\")',\n '(focusin)': 'onEnter(\"focus\")',\n '(focusout)': 'onLeave(\"focus\")',\n '(keydown.escape)': 'hide()',\n '(click)': 'hide()',\n },\n})\nexport class HxTooltip {\n readonly #overlay = inject(Overlay);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The text. Empty or null shows nothing. */\n readonly text = input<string | null | undefined>('', { alias: 'hx-tooltip' });\n readonly position = input<HxTooltipPosition>('top', { alias: 'hxTooltipPosition' });\n readonly event = input<HxTooltipEvent>('both', { alias: 'hxTooltipEvent' });\n readonly disabled = input(false, { alias: 'hxTooltipDisabled' });\n /** Milliseconds before it appears. */\n readonly showDelay = input(0, { alias: 'hxTooltipShowDelay' });\n\n protected readonly bubbleId = nextId('hx-tooltip');\n protected readonly shown = signal(false);\n #ref: OverlayRef | null = null;\n #bubble: HxTooltipBubble | null = null;\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.dispose());\n // keep a visible bubble in sync with the inputs, and drop it when it has nothing to say\n effect(() => {\n const text = this.text();\n if (this.disabled() || !text) this.hide();\n else if (this.#bubble) this.#bubble.text.set(text);\n this.position();\n this.#ref?.updatePositionStrategy(this.#strategy());\n });\n }\n\n protected onEnter(source: 'hover' | 'focus'): void {\n const event = this.event();\n if (event !== 'both' && event !== source) return;\n this.show();\n }\n\n protected onLeave(source: 'hover' | 'focus'): void {\n const event = this.event();\n if (event !== 'both' && event !== source) return;\n this.hide();\n }\n\n #strategy() {\n const preferred = this.position();\n const margin = 4;\n const offset = (p: HxTooltipPosition) =>\n p === 'top'\n ? { offsetY: -margin }\n : p === 'bottom'\n ? { offsetY: margin }\n : p === 'left'\n ? { offsetX: -margin }\n : { offsetX: margin };\n return this.#overlay\n .position()\n .flexibleConnectedTo(this.#host)\n .withPositions(\n [preferred, OPPOSITE[preferred]].map((p) => ({ ...POSITIONS[p], ...offset(p) })),\n )\n .withPush(true);\n }\n\n show(): void {\n const text = this.text();\n if (this.disabled() || !text || this.#ref) return;\n clearTimeout(this.#timer);\n const delay = this.showDelay();\n if (delay > 0) this.#timer = setTimeout(() => this.#create(text), delay);\n else this.#create(text);\n }\n\n #create(text: string): void {\n if (this.#ref) return;\n this.#ref = this.#overlay.create({\n positionStrategy: this.#strategy(),\n scrollStrategy: this.#overlay.scrollStrategies.close(),\n panelClass: 'hx-tooltip-overlay',\n });\n const bubble = this.#ref.attach(new ComponentPortal(HxTooltipBubble));\n bubble.instance.id = this.bubbleId;\n bubble.instance.text.set(text);\n this.#bubble = bubble.instance;\n this.shown.set(true);\n }\n\n hide(): void {\n clearTimeout(this.#timer);\n this.dispose();\n }\n\n private dispose(): void {\n clearTimeout(this.#timer);\n this.#ref?.dispose();\n this.#ref = null;\n this.#bubble = null;\n this.shown.set(false);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n} from '@angular/core';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\n\n/** One node of the tree. Keys must be unique in the whole tree. */\nexport interface HxTreeNode<T = unknown> {\n key: string;\n label: string;\n /** CSS classes of an icon font, e.g. `pi pi-folder`. */\n icon?: string;\n children?: HxTreeNode<T>[];\n /**\n * `true`: no toggle. `false`: has a toggle even without children (children are loaded when it is expanded, see\n * `nodeExpand`). By default a node is a leaf when it has no children.\n */\n leaf?: boolean;\n /** Starts expanded. */\n expanded?: boolean;\n /** Shows a spinner instead of the toggle, e.g. while the children load. */\n loading?: boolean;\n disabled?: boolean;\n /** Anything the app wants to read back in templates and events. */\n data?: T;\n}\n\nexport type HxTreeSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\nexport type HxTreeFilterMode = 'lenient' | 'strict';\n\n/** `selection` of a tree: a key (single), keys (multiple, checkbox) or `null`. */\nexport type HxTreeSelection = string | readonly string[] | null;\n\n/** What a `nodeExpand` / `nodeCollapse` event carries. */\nexport interface HxTreeNodeEvent<T = unknown> {\n node: HxTreeNode<T>;\n}\n\n/** What the node template receives. */\nexport interface HxTreeNodeContext<T = unknown> {\n $implicit: HxTreeNode<T>;\n selected: boolean;\n expanded: boolean;\n level: number;\n}\n\n/** Replaces the label of a node: `<ng-template hxTreeNode let-node>…</ng-template>`. */\n@Directive({ selector: 'ng-template[hxTreeNode]' })\nexport class HxTreeNodeTemplate {\n readonly template = inject<TemplateRef<HxTreeNodeContext>>(TemplateRef);\n}\n\ninterface TreeEntry {\n node: HxTreeNode;\n parent: string | null;\n}\n\ninterface ViewNode {\n node: HxTreeNode;\n children: ViewNode[];\n leaf: boolean;\n /** Filtering opens a node whose descendants match. */\n forceOpen: boolean;\n}\n\n/**\n * Hierarchical data with expand, collapse, selection, filter and lazy children, in the WAI-ARIA tree view pattern.\n *\n * ```html\n * <hx-tree [value]=\"nodes\" selectionMode=\"single\" [(selection)]=\"selected\" ariaLabel=\"Files\" />\n * <hx-tree [value]=\"nodes\" selectionMode=\"checkbox\" [(selection)]=\"checked\" filter />\n * ```\n *\n * `selection` holds node keys: one key (or `null`) with `single`, an array with `multiple` and `checkbox`. In\n * `checkbox` mode checking a node checks everything below it, and a parent is checked when all its children are and\n * shown as mixed when only some are.\n *\n * Lazy children: give the node `leaf: false`; `(nodeExpand)` fires when it is expanded, the app sets `loading` and\n * then puts the children into a new `value`.\n *\n * Keyboard: Tab enters the tree once; Up/Down move, Right expands or goes to the first child, Left collapses or goes\n * to the parent, Home/End jump, typing jumps by label, Enter or Space selects (checks).\n */\n@Component({\n selector: 'hx-tree',\n imports: [NgTemplateOutlet, HxInput, HxCheckbox],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-tree' },\n template: `\n @if (filter()) {\n <input\n hx-input\n type=\"search\"\n class=\"hx-tree-filter\"\n [placeholder]=\"filterPlaceholder()\"\n [attr.aria-label]=\"filterLabel()\"\n [value]=\"query()\"\n (input)=\"query.set($any($event.target).value)\"\n />\n }\n <ul\n class=\"hx-tree-list\"\n role=\"tree\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-multiselectable]=\"multiple() ? 'true' : null\"\n (keydown)=\"onKeydown($event)\"\n (focusin)=\"onFocusIn($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"level\" [ngTemplateOutletContext]=\"{ $implicit: view(), depth: 1 }\" />\n </ul>\n @if (filtering() && view().length === 0) {\n <div class=\"hx-tree-empty\" role=\"status\">{{ emptyMessage() }}</div>\n }\n\n <ng-template #level let-items let-depth=\"depth\">\n @for (item of items; track item.node.key; let i = $index) {\n <li\n class=\"hx-tree-node\"\n role=\"treeitem\"\n [attr.data-key]=\"item.node.key\"\n [attr.aria-level]=\"depth\"\n [attr.aria-setsize]=\"items.length\"\n [attr.aria-posinset]=\"i + 1\"\n [attr.aria-expanded]=\"item.leaf ? null : isOpen(item)\"\n [attr.aria-selected]=\"mode() === 'single' || mode() === 'multiple' ? isSelected(item.node.key) : null\"\n [attr.aria-checked]=\"mode() === 'checkbox' ? checkState(item.node.key) : null\"\n [attr.aria-disabled]=\"item.node.disabled ? 'true' : null\"\n [attr.tabindex]=\"item.node.key === tabKey() ? 0 : -1\"\n >\n <div\n class=\"hx-tree-node-content\"\n [class.hx-tree-node-selected]=\"mode() !== 'checkbox' && isSelected(item.node.key)\"\n [class.hx-tree-node-disabled]=\"item.node.disabled\"\n (click)=\"onClick(item, $event)\"\n >\n <span class=\"hx-tree-node-toggle\" [class.hx-tree-node-toggle-leaf]=\"item.leaf\" aria-hidden=\"true\" (click)=\"onToggleClick(item, $event)\">\n @if (item.node.loading) {\n <span class=\"hx-tree-loading-icon\"></span>\n } @else if (!item.leaf) {\n <span class=\"hx-tree-toggle-icon\" [class.hx-tree-toggle-icon-open]=\"isOpen(item)\"></span>\n }\n </span>\n @if (mode() === 'checkbox') {\n <input\n hx-checkbox\n type=\"checkbox\"\n class=\"hx-tree-node-checkbox\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [checked]=\"checkState(item.node.key) === 'true'\"\n [indeterminate]=\"checkState(item.node.key) === 'mixed'\"\n [disabled]=\"!!item.node.disabled\"\n />\n }\n @if (template(); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: item.node, selected: isSelected(item.node.key), expanded: isOpen(item), level: depth }\"\n />\n } @else {\n @if (item.node.icon) {\n <span class=\"hx-tree-node-icon\" [class]=\"item.node.icon\" aria-hidden=\"true\"></span>\n }\n <span class=\"hx-tree-node-label\">{{ item.node.label }}</span>\n }\n </div>\n @if (!item.leaf && isOpen(item) && item.children.length) {\n <ul class=\"hx-tree-group\" role=\"group\">\n <ng-container [ngTemplateOutlet]=\"level\" [ngTemplateOutletContext]=\"{ $implicit: item.children, depth: depth + 1 }\" />\n </ul>\n }\n </li>\n }\n </ng-template>\n `,\n})\nexport class HxTree {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The root nodes. Pass a new array (or new nodes) to change the tree; the tree never mutates it. */\n readonly value = input<readonly HxTreeNode[]>([]);\n readonly selectionMode = input<HxTreeSelectionMode>('none');\n /** Keys of the selected (checked) nodes: a key with `single`, an array otherwise. */\n readonly selection = model<HxTreeSelection>(null);\n /** Shows a text field above the tree that filters it by label. */\n readonly filter = input(false, { transform: booleanAttribute });\n /** `lenient`: a matching node shows all its children; `strict`: only matching nodes and their ancestors. */\n readonly filterMode = input<HxTreeFilterMode>('lenient');\n readonly filterPlaceholder = input('');\n readonly filterLabel = input('Filter');\n readonly emptyMessage = input('No results found');\n /** Accessible name of the tree. */\n readonly ariaLabel = input<string>();\n\n /** A node was expanded; load its children here when it is lazy. */\n readonly nodeExpand = output<HxTreeNodeEvent>();\n readonly nodeCollapse = output<HxTreeNodeEvent>();\n\n protected readonly template = contentChild(HxTreeNodeTemplate);\n protected readonly query = signal('');\n protected readonly mode = computed(() => this.selectionMode());\n protected readonly multiple = computed(\n () => this.mode() === 'multiple' || this.mode() === 'checkbox',\n );\n protected readonly filtering = computed(() => this.filter() && this.query().trim() !== '');\n\n /** Keys of the expanded nodes. */\n readonly #expanded = signal<ReadonlySet<string>>(new Set());\n readonly #focused = signal<string | null>(null);\n\n readonly #index = computed(() => {\n const map = new Map<string, TreeEntry>();\n const walk = (nodes: readonly HxTreeNode[], parent: string | null) => {\n for (const node of nodes) {\n map.set(node.key, { node, parent });\n if (node.children) walk(node.children, node.key);\n }\n };\n walk(this.value(), null);\n return map;\n });\n\n readonly #selected = computed<ReadonlySet<string>>(() => {\n const selection = this.selection();\n if (selection === null || selection === undefined) return new Set();\n return new Set(typeof selection === 'string' ? [selection] : selection);\n });\n\n protected readonly view = computed(() => {\n const filtering = this.filtering();\n const query = this.query().trim().toLowerCase();\n const strict = this.filterMode() === 'strict';\n const build = (nodes: readonly HxTreeNode[], shown: boolean): ViewNode[] => {\n const out: ViewNode[] = [];\n for (const node of nodes) {\n const matches = !filtering || node.label.toLowerCase().includes(query);\n const children = node.children\n ? build(node.children, !strict && filtering && (shown || matches))\n : [];\n const included = !filtering || matches || shown || children.length > 0;\n if (!included) continue;\n out.push({\n node,\n children,\n leaf: node.leaf ?? !node.children?.length,\n forceOpen: filtering && children.length > 0 && !shown,\n });\n }\n return out;\n };\n return build(this.value(), false);\n });\n\n /** The tree item that is in the tab order: the focused one while it is visible, else the first. */\n protected readonly tabKey = computed(() => {\n const visible = this.#visibleKeys();\n const focused = this.#focused();\n if (focused !== null && visible.includes(focused)) return focused;\n const selected = visible.find((key) => this.#selected().has(key));\n return selected ?? visible[0] ?? null;\n });\n\n readonly #visibleKeys = computed(() => {\n const keys: string[] = [];\n const walk = (items: readonly ViewNode[]) => {\n for (const item of items) {\n keys.push(item.node.key);\n if (!item.leaf && this.isOpen(item)) walk(item.children);\n }\n };\n walk(this.view());\n return keys;\n });\n\n /** Keys that have been in a `value` already, so `expanded` only applies to nodes the first time they appear. */\n readonly #seen = new Set<string>();\n #typed = '';\n #typedTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n // nodes that ask to start expanded; a node the user collapsed stays collapsed when the value is replaced\n effect(() => {\n const nodes = this.value();\n untracked(() => {\n const open = new Set(this.#expanded());\n const walk = (list: readonly HxTreeNode[]) => {\n for (const node of list) {\n if (node.expanded && !this.#seen.has(node.key)) open.add(node.key);\n this.#seen.add(node.key);\n if (node.children) walk(node.children);\n }\n };\n walk(nodes);\n this.#expanded.set(open);\n });\n });\n }\n\n isOpen(item: ViewNode): boolean {\n return item.forceOpen || this.#expanded().has(item.node.key);\n }\n\n isSelected(key: string): boolean {\n return this.#selected().has(key);\n }\n\n /** `'true'`, `'false'` or `'mixed'` (some descendants checked) for `aria-checked`. */\n protected checkState(key: string): 'true' | 'false' | 'mixed' {\n if (this.#selected().has(key)) return 'true';\n const entry = this.#index().get(key);\n const some = (node: HxTreeNode): boolean =>\n !!node.children?.some((child) => this.#selected().has(child.key) || some(child));\n return entry && some(entry.node) ? 'mixed' : 'false';\n }\n\n expand(key: string): void {\n const entry = this.#index().get(key);\n if (!entry || this.#expanded().has(key)) return;\n this.#expanded.set(new Set([...this.#expanded(), key]));\n this.nodeExpand.emit({ node: entry.node });\n }\n\n collapse(key: string): void {\n const entry = this.#index().get(key);\n if (!entry || !this.#expanded().has(key)) return;\n const open = new Set(this.#expanded());\n open.delete(key);\n this.#expanded.set(open);\n this.nodeCollapse.emit({ node: entry.node });\n }\n\n toggle(key: string): void {\n if (this.#expanded().has(key)) this.collapse(key);\n else this.expand(key);\n }\n\n expandAll(): void {\n for (const [key, { node }] of this.#index()) if (node.children?.length) this.expand(key);\n }\n\n collapseAll(): void {\n for (const key of [...this.#expanded()]) this.collapse(key);\n }\n\n protected onToggleClick(item: ViewNode, event: Event): void {\n if (item.leaf || item.node.disabled) return;\n event.stopPropagation();\n this.toggle(item.node.key);\n }\n\n protected onClick(item: ViewNode, event: MouseEvent): void {\n if (item.node.disabled) return;\n this.#focusItem(item.node.key, false);\n this.select(item.node.key, event.ctrlKey || event.metaKey);\n }\n\n /** Selects, or toggles, the node according to the selection mode. */\n select(key: string, deselect = false): void {\n const mode = this.mode();\n if (mode === 'none') return;\n const selected = this.#selected();\n if (mode === 'single') {\n this.selection.set(selected.has(key) && deselect ? null : key);\n } else if (mode === 'multiple') {\n const next = new Set(selected);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n this.selection.set([...next]);\n } else {\n this.selection.set([...this.#toggleChecked(key, selected)]);\n }\n }\n\n #toggleChecked(key: string, selected: ReadonlySet<string>): Set<string> {\n const index = this.#index();\n const next = new Set(selected);\n const subtree = (node: HxTreeNode, out: string[] = []): string[] => {\n out.push(node.key);\n for (const child of node.children ?? []) subtree(child, out);\n return out;\n };\n const entry = index.get(key);\n if (!entry) return next;\n const keys = subtree(entry.node).filter((k) => !index.get(k)?.node.disabled);\n const checking = !next.has(key);\n for (const k of keys) {\n if (checking) next.add(k);\n else next.delete(k);\n }\n // parents are checked exactly when all their children are\n for (let parent = entry.parent; parent !== null; parent = index.get(parent)?.parent ?? null) {\n const node = index.get(parent)?.node;\n if (!node?.children?.length) break;\n if (node.children.every((child) => next.has(child.key))) next.add(parent);\n else next.delete(parent);\n }\n return next;\n }\n\n protected onFocusIn(event: FocusEvent): void {\n const key = (event.target as HTMLElement)\n .closest<HTMLElement>('[role=treeitem]')\n ?.getAttribute('data-key');\n if (key) this.#focused.set(key);\n }\n\n #items(): HTMLElement[] {\n return [...this.#host.nativeElement.querySelectorAll<HTMLElement>('[role=treeitem]')];\n }\n\n #focusItem(key: string, move = true): void {\n this.#focused.set(key);\n if (!move) return;\n const el = this.#items().find((item) => item.getAttribute('data-key') === key);\n el?.focus();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const target = (event.target as HTMLElement).closest<HTMLElement>('[role=treeitem]');\n if (!target || event.ctrlKey || event.metaKey || event.altKey) return;\n const key = target.getAttribute('data-key') as string;\n const items = this.#items();\n const at = items.indexOf(target);\n const entry = this.#index().get(key);\n const goto = (el: HTMLElement | undefined) => {\n if (!el) return;\n event.preventDefault();\n el.focus();\n };\n const open = target.getAttribute('aria-expanded');\n switch (event.key) {\n case 'ArrowDown':\n goto(items[at + 1]);\n return;\n case 'ArrowUp':\n goto(items[at - 1]);\n return;\n case 'Home':\n goto(items[0]);\n return;\n case 'End':\n goto(items[items.length - 1]);\n return;\n case 'ArrowRight':\n if (open === 'false') {\n event.preventDefault();\n this.expand(key);\n } else if (open === 'true') {\n goto(\n target.querySelector<HTMLElement>(':scope > [role=group] > [role=treeitem]') ??\n undefined,\n );\n }\n return;\n case 'ArrowLeft':\n if (open === 'true') {\n event.preventDefault();\n this.collapse(key);\n } else if (entry?.parent != null) {\n goto(items.find((item) => item.getAttribute('data-key') === entry.parent));\n }\n return;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (!entry?.node.disabled) this.select(key, false);\n return;\n default:\n if (event.key.length === 1) this.#typeahead(event.key, items, at, goto);\n }\n }\n\n #typeahead(\n char: string,\n items: HTMLElement[],\n at: number,\n goto: (el: HTMLElement | undefined) => void,\n ): void {\n clearTimeout(this.#typedTimer);\n this.#typed += char.toLowerCase();\n this.#typedTimer = setTimeout(() => {\n this.#typed = '';\n }, 500);\n const label = (el: HTMLElement) =>\n el\n .querySelector(':scope > .hx-tree-node-content .hx-tree-node-label')\n ?.textContent?.trim()\n .toLowerCase() ?? '';\n const ordered = [...items.slice(at + 1), ...items.slice(0, at + 1)];\n // typing the same letter again cycles through the items that start with it\n const search = /^(.)\\1*$/.test(this.#typed) ? this.#typed[0] : this.#typed;\n goto(ordered.find((el) => label(el).startsWith(search)));\n }\n}\n"],"mappings":"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A;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAA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AA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;I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AAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,MAAM;EACJ,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,MAAM;EACJ,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,SAAS;EACP,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,OAAO;EACL,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,MAAM;EACJ,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,MAAM;EACJ,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;CACD,OAAO;EACL,GAAG;EACH,IAAI;EACJ,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACN;AACO;AClGV,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACQ;AAEV,MAAa,mBAAmB,OAAO,KAAK,WAAW;AAGvD,MAAM,QAAQ;CAAC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"}
|