@gravionlabs/helix-ui 22.2.1 → 22.2.2

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.
@@ -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/chart/chart.ts","../../../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-picker/date-picker.ts","../../../projects/ui/src/lib/date-picker/date-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/icon-field/icon-field.ts","../../../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 { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n effect,\n InjectionToken,\n inject,\n input,\n NgZone,\n numberAttribute,\n output,\n PLATFORM_ID,\n untracked,\n viewChild,\n} from '@angular/core';\n\nexport type HxChartType =\n | 'bar'\n | 'line'\n | 'scatter'\n | 'bubble'\n | 'pie'\n | 'doughnut'\n | 'polarArea'\n | 'radar';\n\n/** What `(dataSelect)` carries: the click and what chart.js found under it. */\nexport interface HxChartSelectEvent {\n originalEvent: Event;\n /** The nearest element under the pointer (chart.js `{ datasetIndex, index, element }`). */\n element: unknown;\n /** The elements of that dataset. */\n dataset: unknown[];\n}\n\n/** The part of chart.js this component uses; the real module is `chart.js/auto`. */\nexport interface HxChartModule {\n default: new (canvas: HTMLCanvasElement, config: unknown) => HxChartInstance;\n}\n\nexport interface HxChartInstance {\n data: unknown;\n options: unknown;\n update(mode?: string): void;\n destroy(): void;\n getElementsAtEventForMode(\n event: Event,\n mode: string,\n options: object,\n useFinalPosition: boolean,\n ): unknown[];\n}\n\n/**\n * Loads chart.js. The default is a dynamic `import('chart.js/auto')`, so chart.js is only fetched by apps that show\n * a chart; provide another function to register a smaller set of chart.js parts or to replace it in tests.\n */\nexport const HX_CHART_LOADER = new InjectionToken<() => Promise<HxChartModule>>('HX_CHART_LOADER', {\n providedIn: 'root',\n factory: () => () => import('chart.js/auto') as unknown as Promise<HxChartModule>,\n});\n\n/** Colours of the datasets that do not set their own, as tokens in the order they are used. */\nconst PALETTE = [\n '--h-primary-color',\n '--h-orange-500',\n '--h-green-500',\n '--h-purple-500',\n '--h-sky-500',\n '--h-red-500',\n '--h-yellow-500',\n '--h-teal-500',\n];\n\ntype Json = Record<string, unknown>;\n\n/** The parts of chart.js data and datasets that are read here; everything else is passed on untouched. */\ninterface ChartDataLike extends Json {\n datasets?: unknown;\n}\ninterface DatasetLike extends Json {\n data?: unknown;\n backgroundColor?: unknown;\n borderColor?: unknown;\n}\n\nconst isObject = (value: unknown): value is Json =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** `defaults` underneath, `overrides` on top; objects merge, everything else is replaced. */\nfunction merge(defaults: Json, overrides: Json): Json {\n const out: Json = { ...defaults };\n for (const [key, value] of Object.entries(overrides)) {\n const base = out[key];\n out[key] = isObject(base) && isObject(value) ? merge(base, value) : value;\n }\n return out;\n}\n\n/**\n * A chart.js chart whose colours, grid and font come from the Helix tokens.\n *\n * ```html\n * <hx-chart type=\"bar\" [data]=\"data\" [options]=\"options\" height=\"20rem\" ariaLabel=\"Sales per month\">\n * <table hxChartFallback>…the same numbers as text…</table>\n * </hx-chart>\n * ```\n *\n * chart.js is an optional peer dependency, loaded with a dynamic import (see `HX_CHART_LOADER`) the first time a\n * chart is shown. Datasets without colours get the Helix palette; text, grid and legend colours come from\n * `--h-text-muted-color` and `--h-content-border-color` of the element. Your `options` win over these defaults.\n * The chart is redrawn when `class` or `style` of `<html>` change (dark mode, the primary colour).\n *\n * The canvas is an `img` named by `ariaLabel` / `ariaLabelledBy`; content marked `hxChartFallback` becomes the\n * canvas fallback content, which assistive technology reads: put the numbers there as text or as a table.\n */\n@Component({\n selector: 'hx-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-chart' },\n template: `\n <div class=\"hx-chart-frame\" [style.width]=\"width() ?? null\" [style.height]=\"height() ?? null\">\n <canvas\n #canvas\n class=\"hx-chart-canvas\"\n role=\"img\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"onClick($event)\"\n ><ng-content select=\"[hxChartFallback]\" /></canvas>\n </div>\n `,\n})\nexport class HxChart {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #zone = inject(NgZone);\n readonly #loader = inject(HX_CHART_LOADER);\n readonly #platform = inject(PLATFORM_ID);\n private readonly canvas = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n readonly type = input<HxChartType>('bar');\n /** chart.js data: `{ labels, datasets }`. Pass a new object to update the chart. */\n readonly data = input<ChartDataLike>({});\n /** chart.js options, on top of the token defaults. Pass a new object to update the chart. */\n readonly options = input<Json>({});\n /** Extra chart.js plugins for this chart. */\n readonly plugins = input<readonly unknown[]>([]);\n /** CSS width of the frame, e.g. `30rem`; the chart fills its container by default. */\n readonly width = input<string>();\n /** CSS height of the frame; without it chart.js keeps its aspect ratio. */\n readonly height = input<string>();\n /** Resize with the container. */\n readonly responsive = input(true, { transform: (v: unknown) => v !== false && v !== 'false' });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledBy = input<string>();\n /** Delay of a redraw after the theme changed, in ms; the style change is usually followed by more. */\n readonly themeDelay = input(50, { transform: numberAttribute });\n\n /** A data point or dataset was clicked. */\n readonly dataSelect = output<HxChartSelectEvent>();\n\n #chart: HxChartInstance | undefined;\n #chartType: HxChartType | undefined;\n #ready = false;\n #loading = false;\n #observer: MutationObserver | undefined;\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n afterNextRender(() => {\n this.#ready = true;\n void this.#render();\n this.#watchTheme();\n });\n effect(() => {\n this.type();\n this.data();\n this.options();\n this.plugins();\n this.responsive();\n this.width();\n this.height();\n untracked(() => {\n if (this.#ready) void this.#render();\n });\n });\n inject(DestroyRef).onDestroy(() => {\n clearTimeout(this.#timer);\n this.#observer?.disconnect();\n this.#chart?.destroy();\n this.#chart = undefined;\n this.#ready = false;\n });\n }\n\n /** The chart.js instance, once it exists; `undefined` before chart.js has loaded. */\n get chart(): HxChartInstance | undefined {\n return this.#chart;\n }\n\n /** Redraws the chart, e.g. after the theme changed in a way the component cannot see. */\n refresh(): void {\n if (this.#chart) {\n this.#apply(this.#chart);\n this.#chart.update();\n }\n }\n\n protected onClick(event: MouseEvent): void {\n const chart = this.#chart;\n if (!chart) return;\n const element = chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);\n const dataset = chart.getElementsAtEventForMode(event, 'dataset', { intersect: true }, false);\n if (element?.[0] && dataset)\n this.dataSelect.emit({ originalEvent: event, element: element[0], dataset });\n }\n\n async #render(): Promise<void> {\n if (!isPlatformBrowser(this.#platform)) return;\n const type = this.type();\n if (this.#chart && this.#chartType === type) {\n this.#apply(this.#chart);\n this.#chart.update();\n return;\n }\n if (this.#loading) return;\n this.#loading = true;\n try {\n const module = await this.#loader();\n if (!this.#ready) return; // destroyed while chart.js loaded\n this.#chart?.destroy();\n const Chart = module.default;\n this.#zone.runOutsideAngular(() => {\n this.#chart = new Chart(this.canvas().nativeElement, {\n type: this.type(),\n data: this.#themedData(),\n options: this.#themedOptions(),\n plugins: [...this.plugins()],\n });\n });\n this.#chartType = this.type();\n } catch (error) {\n console.error(\n 'hx-chart: chart.js could not be loaded. Is the peer dependency \"chart.js\" installed?',\n error,\n );\n return;\n } finally {\n this.#loading = false;\n }\n // inputs may have changed while chart.js loaded\n if (this.#chart && this.#chartType !== this.type()) await this.#render();\n }\n\n #apply(chart: HxChartInstance): void {\n chart.data = this.#themedData();\n chart.options = this.#themedOptions();\n }\n\n #token(name: string): string {\n return getComputedStyle(this.#host).getPropertyValue(name).trim();\n }\n\n /** The datasets with palette colours where they set none. The input is not changed. */\n #themedData(): Json {\n const data = this.data();\n const datasets = data.datasets;\n if (!Array.isArray(datasets)) return data;\n const palette = PALETTE.map((name) => this.#token(name)).filter(Boolean);\n if (palette.length === 0) return data;\n const perPoint = ['pie', 'doughnut', 'polarArea'].includes(this.type());\n return {\n ...data,\n datasets: datasets.map((dataset: DatasetLike, i: number) => {\n if (!isObject(dataset)) return dataset;\n const color = palette[i % palette.length];\n const count = Array.isArray(dataset.data) ? dataset.data.length : 0;\n const points = Array.from({ length: count }, (_, n) => palette[n % palette.length]);\n const filled = this.type() === 'line' || this.type() === 'radar';\n return {\n ...dataset,\n backgroundColor:\n dataset.backgroundColor ??\n (perPoint ? points : filled ? `color-mix(in srgb, ${color}, transparent 80%)` : color),\n borderColor:\n dataset.borderColor ?? (perPoint ? this.#token('--h-content-background') : color),\n };\n }),\n };\n }\n\n #themedOptions(): Json {\n const text = this.#token('--h-text-color');\n const muted = this.#token('--h-text-muted-color');\n const grid = this.#token('--h-content-border-color');\n const axis = { ticks: { color: muted }, grid: { color: grid }, border: { color: grid } };\n const radial = {\n ticks: { color: muted, backdropColor: 'transparent' },\n grid: { color: grid },\n angleLines: { color: grid },\n pointLabels: { color: text },\n };\n const type = this.type();\n const scales =\n type === 'radar' || type === 'polarArea'\n ? { r: radial }\n : type === 'pie' || type === 'doughnut'\n ? {}\n : { x: axis, y: axis };\n const defaults: Json = {\n responsive: this.responsive(),\n maintainAspectRatio: !(this.height() || this.width()),\n color: muted,\n borderColor: grid,\n plugins: { legend: { labels: { color: text } } },\n scales,\n };\n return merge(defaults, this.options());\n }\n\n #watchTheme(): void {\n if (typeof MutationObserver === 'undefined') return;\n this.#observer = new MutationObserver(() => {\n clearTimeout(this.#timer);\n this.#timer = setTimeout(() => this.refresh(), this.themeDelay());\n });\n this.#observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style', 'data-theme'],\n });\n }\n}\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 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\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 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 if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the listbox lives in the overlay template: focus it once it has rendered\n afterNextRender(() => this.listbox()?.focus(), { injector: this.#injector });\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 <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 items(); track $index) {\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\">{{ emptyMessage() }}</div>\n }\n </div>\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}\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[]>();\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\n readonly pageChange = output<HxPageEvent>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.rows()))),\n );\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.rows()))),\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) => ({ label: String(n), value: n })),\n );\n\n protected readonly report = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.page() * this.rows() + 1;\n const last = Math.min(total, (this.page() + 1) * this.rows());\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.rows()) return;\n this.first.set(target * this.rows());\n this.emit();\n }\n\n protected setRows(value: unknown): void {\n const rows = Number(value);\n if (!rows || rows === this.rows()) return;\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.rows(),\n page: this.page(),\n pageCount: this.pageCount(),\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]=\"rows()\" (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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n inject,\n input,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\nimport { type HxPageEvent, HxPaginator } from '../paginator/paginator';\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 /** 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\"`). */\n filter?: boolean;\n}\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\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 | 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`.\n */\n@Component({\n selector: 'hx-data-table',\n imports: [NgTemplateOutlet, HxProgressSpinner, HxPaginator, HxCheckbox, HxInput],\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 /** 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\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[]>();\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 /** `row`: a filter row with a text input under the headers of columns with `filter: true`. */\n readonly filterDisplay = input<'row'>();\n /** The text of the column filters, by field. */\n readonly filters = model<Record<string, string>>({});\n readonly filterLabel = input('Filter {header}');\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\n protected readonly cellTemplates = contentChildren(HxCell);\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()) 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 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 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: ascending, then descending, then not at all. */\n sort(column: HxColumn): void {\n const order = this.orderOf(column);\n const next: 0 | 1 | -1 = order === 0 ? 1 : order === 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 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.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 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 >\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 </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]=\"filterLabel().replace('{header}', column.header)\" [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.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) }}\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 [showCurrentPageReport]=\"showCurrentPageReport()\"\n (pageChange)=\"onPage($event)\"\n />\n }\n</div>\n","/** Date helpers of the date picker: all work on local calendar days (the time of day is ignored). */\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\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 {\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 addDays,\n addMonths,\n compareDays,\n isSameDay,\n isValidDate,\n monthCells,\n startOfDay,\n} from '../internal/dates';\nimport { nextId } from '../internal/ids';\n\nexport type HxDatePickerSelectionMode = 'single' | 'range' | 'multiple';\nexport type HxDatePickerValue = Date | Date[] | null;\ntype CalendarView = 'day' | 'month' | 'year';\n\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],\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 /** `Intl.DateTimeFormat` options of the text in the field (numeric by default, so a typed date parses back). */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>({\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n });\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 /** 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 viewYear = computed(() => this.focusedDate().getFullYear());\n 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 #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 readonly #format = computed(() => new Intl.DateTimeFormat(this.locale(), this.dateFormat()));\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 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(() => {\n const start = Math.floor(this.focusedDate().getFullYear() / 12) * 12;\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n constructor() {\n // a value set from outside (a binding, a form) brings its month into view\n effect(() => {\n const first = this.selectedDates()[0];\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 dateKey(date: Date): string {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n }\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 const [from, to] = this.selectedDates();\n return (\n this.selectionMode() === 'range' &&\n !!from &&\n !!to &&\n compareDays(date, from) > 0 &&\n compareDays(date, to) < 0\n );\n }\n\n protected isDateDisabled(date: Date): boolean {\n const [min, max] = [this.minDate(), this.maxDate()];\n return (\n (!!min && compareDays(date, min) < 0) ||\n (!!max && compareDays(date, max) > 0) ||\n this.disabledDates().some((d) => isSameDay(d, date))\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 const current = this.focusedDate();\n const next =\n this.view() === 'day'\n ? addMonths(current, direction)\n : this.view() === 'month'\n ? addMonths(current, 12 * direction)\n : addMonths(current, 144 * direction);\n this.focusedDate.set(next);\n }\n\n protected chooseMonth(month: number): void {\n const current = this.focusedDate();\n this.focusedDate.set(addMonths(new Date(current.getFullYear(), 0, current.getDate()), month));\n this.view.set('day');\n }\n\n protected chooseYear(year: number): void {\n const current = this.focusedDate();\n this.focusedDate.set(addMonths(new Date(year, current.getMonth(), 1), 0));\n this.view.set('month');\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 protected onDayKeydown(event: KeyboardEvent, date: Date): void {\n const first = this.firstDayOfWeek();\n const weekday = (date.getDay() - first + 7) % 7;\n let target: Date | null = null;\n switch (event.key) {\n case 'ArrowLeft':\n target = addDays(date, -1);\n break;\n case 'ArrowRight':\n target = addDays(date, 1);\n break;\n case 'ArrowUp':\n target = addDays(date, -7);\n break;\n case 'ArrowDown':\n target = addDays(date, 7);\n break;\n case 'Home':\n target = addDays(date, -weekday);\n break;\n case 'End':\n target = addDays(date, 6 - weekday);\n break;\n case 'PageUp':\n target = addMonths(date, event.shiftKey ? -12 : -1);\n break;\n case 'PageDown':\n target = addMonths(date, event.shiftKey ? 12 : 1);\n break;\n default:\n return;\n }\n event.preventDefault();\n this.focusedDate.set(target);\n this.#focusDay();\n }\n\n #focusDay(): void {\n afterNextRender(\n () => {\n const key = this.dateKey(this.focusedDate());\n // the popup lives in the overlay, outside the host\n const root = this.inline()\n ? this.#host.nativeElement\n : document.getElementById(this.popupId);\n root?.querySelector<HTMLElement>(`.hx-date-picker-date[data-date=\"${key}\"]`)?.focus();\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\n const first = this.selectedDates()[0];\n this.view.set('day');\n this.focusedDate.set(first ? startOfDay(first) : this.#today);\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 /** A date from the text: numbers in the order the locale writes them, or `yyyy-mm-dd`. */\n #parse(text: 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(this.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\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 (\n this.open() ||\n next?.closest('.hx-date-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\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 (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 <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]=\"isDisabled()\"\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]=\"isDisabled()\" (click)=\"view.set('month')\">{{ monthName() }}</button>\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"isDisabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @case ('month') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"isDisabled()\" (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]=\"isDisabled()\"\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]=\"isDisabled()\"\n (click)=\"pick(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]=\"isDisabled()\"\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]=\"isDisabled()\"\n (click)=\"chooseYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n }\n</div>\n</ng-template>\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 {\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 { 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 /** 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) 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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"}
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/chart/chart.ts","../../../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-picker/date-picker.ts","../../../projects/ui/src/lib/date-picker/date-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 { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n effect,\n InjectionToken,\n inject,\n input,\n NgZone,\n numberAttribute,\n output,\n PLATFORM_ID,\n untracked,\n viewChild,\n} from '@angular/core';\n\nexport type HxChartType =\n | 'bar'\n | 'line'\n | 'scatter'\n | 'bubble'\n | 'pie'\n | 'doughnut'\n | 'polarArea'\n | 'radar';\n\n/** What `(dataSelect)` carries: the click and what chart.js found under it. */\nexport interface HxChartSelectEvent {\n originalEvent: Event;\n /** The nearest element under the pointer (chart.js `{ datasetIndex, index, element }`). */\n element: unknown;\n /** The elements of that dataset. */\n dataset: unknown[];\n}\n\n/** The part of chart.js this component uses; the real module is `chart.js/auto`. */\nexport interface HxChartModule {\n default: new (canvas: HTMLCanvasElement, config: unknown) => HxChartInstance;\n}\n\nexport interface HxChartInstance {\n data: unknown;\n options: unknown;\n update(mode?: string): void;\n destroy(): void;\n getElementsAtEventForMode(\n event: Event,\n mode: string,\n options: object,\n useFinalPosition: boolean,\n ): unknown[];\n}\n\n/**\n * Loads chart.js. The default is a dynamic `import('chart.js/auto')`, so chart.js is only fetched by apps that show\n * a chart; provide another function to register a smaller set of chart.js parts or to replace it in tests.\n */\nexport const HX_CHART_LOADER = new InjectionToken<() => Promise<HxChartModule>>('HX_CHART_LOADER', {\n providedIn: 'root',\n factory: () => () => import('chart.js/auto') as unknown as Promise<HxChartModule>,\n});\n\n/** Colours of the datasets that do not set their own, as tokens in the order they are used. */\nconst PALETTE = [\n '--h-primary-color',\n '--h-orange-500',\n '--h-green-500',\n '--h-purple-500',\n '--h-sky-500',\n '--h-red-500',\n '--h-yellow-500',\n '--h-teal-500',\n];\n\ntype Json = Record<string, unknown>;\n\n/** The parts of chart.js data and datasets that are read here; everything else is passed on untouched. */\ninterface ChartDataLike extends Json {\n datasets?: unknown;\n}\ninterface DatasetLike extends Json {\n data?: unknown;\n backgroundColor?: unknown;\n borderColor?: unknown;\n}\n\nconst isObject = (value: unknown): value is Json =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** `defaults` underneath, `overrides` on top; objects merge, everything else is replaced. */\nfunction merge(defaults: Json, overrides: Json): Json {\n const out: Json = { ...defaults };\n for (const [key, value] of Object.entries(overrides)) {\n const base = out[key];\n out[key] = isObject(base) && isObject(value) ? merge(base, value) : value;\n }\n return out;\n}\n\n/**\n * A chart.js chart whose colours, grid and font come from the Helix tokens.\n *\n * ```html\n * <hx-chart type=\"bar\" [data]=\"data\" [options]=\"options\" height=\"20rem\" ariaLabel=\"Sales per month\">\n * <table hxChartFallback>…the same numbers as text…</table>\n * </hx-chart>\n * ```\n *\n * chart.js is an optional peer dependency, loaded with a dynamic import (see `HX_CHART_LOADER`) the first time a\n * chart is shown. Datasets without colours get the Helix palette; text, grid and legend colours come from\n * `--h-text-muted-color` and `--h-content-border-color` of the element. Your `options` win over these defaults.\n * The chart is redrawn when `class` or `style` of `<html>` change (dark mode, the primary colour).\n *\n * The canvas is an `img` named by `ariaLabel` / `ariaLabelledBy`; content marked `hxChartFallback` becomes the\n * canvas fallback content, which assistive technology reads: put the numbers there as text or as a table.\n */\n@Component({\n selector: 'hx-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'hx-chart' },\n template: `\n <div class=\"hx-chart-frame\" [style.width]=\"width() ?? null\" [style.height]=\"height() ?? null\">\n <canvas\n #canvas\n class=\"hx-chart-canvas\"\n role=\"img\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"onClick($event)\"\n ><ng-content select=\"[hxChartFallback]\" /></canvas>\n </div>\n `,\n})\nexport class HxChart {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #zone = inject(NgZone);\n readonly #loader = inject(HX_CHART_LOADER);\n readonly #platform = inject(PLATFORM_ID);\n private readonly canvas = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n readonly type = input<HxChartType>('bar');\n /** chart.js data: `{ labels, datasets }`. Pass a new object to update the chart. */\n readonly data = input<ChartDataLike>({});\n /** chart.js options, on top of the token defaults. Pass a new object to update the chart. */\n readonly options = input<Json>({});\n /** Extra chart.js plugins for this chart. */\n readonly plugins = input<readonly unknown[]>([]);\n /** CSS width of the frame, e.g. `30rem`; the chart fills its container by default. */\n readonly width = input<string>();\n /** CSS height of the frame; without it chart.js keeps its aspect ratio. */\n readonly height = input<string>();\n /** Resize with the container. */\n readonly responsive = input(true, { transform: (v: unknown) => v !== false && v !== 'false' });\n readonly ariaLabel = input<string>();\n readonly ariaLabelledBy = input<string>();\n /** Delay of a redraw after the theme changed, in ms; the style change is usually followed by more. */\n readonly themeDelay = input(50, { transform: numberAttribute });\n\n /** A data point or dataset was clicked. */\n readonly dataSelect = output<HxChartSelectEvent>();\n\n #chart: HxChartInstance | undefined;\n #chartType: HxChartType | undefined;\n #ready = false;\n #loading = false;\n #observer: MutationObserver | undefined;\n #timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n afterNextRender(() => {\n this.#ready = true;\n void this.#render();\n this.#watchTheme();\n });\n effect(() => {\n this.type();\n this.data();\n this.options();\n this.plugins();\n this.responsive();\n this.width();\n this.height();\n untracked(() => {\n if (this.#ready) void this.#render();\n });\n });\n inject(DestroyRef).onDestroy(() => {\n clearTimeout(this.#timer);\n this.#observer?.disconnect();\n this.#chart?.destroy();\n this.#chart = undefined;\n this.#ready = false;\n });\n }\n\n /** The chart.js instance, once it exists; `undefined` before chart.js has loaded. */\n get chart(): HxChartInstance | undefined {\n return this.#chart;\n }\n\n /** Redraws the chart, e.g. after the theme changed in a way the component cannot see. */\n refresh(): void {\n if (this.#chart) {\n this.#apply(this.#chart);\n this.#chart.update();\n }\n }\n\n protected onClick(event: MouseEvent): void {\n const chart = this.#chart;\n if (!chart) return;\n const element = chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);\n const dataset = chart.getElementsAtEventForMode(event, 'dataset', { intersect: true }, false);\n if (element?.[0] && dataset)\n this.dataSelect.emit({ originalEvent: event, element: element[0], dataset });\n }\n\n async #render(): Promise<void> {\n if (!isPlatformBrowser(this.#platform)) return;\n const type = this.type();\n if (this.#chart && this.#chartType === type) {\n this.#apply(this.#chart);\n this.#chart.update();\n return;\n }\n if (this.#loading) return;\n this.#loading = true;\n try {\n const module = await this.#loader();\n if (!this.#ready) return; // destroyed while chart.js loaded\n this.#chart?.destroy();\n const Chart = module.default;\n this.#zone.runOutsideAngular(() => {\n this.#chart = new Chart(this.canvas().nativeElement, {\n type: this.type(),\n data: this.#themedData(),\n options: this.#themedOptions(),\n plugins: [...this.plugins()],\n });\n });\n this.#chartType = this.type();\n } catch (error) {\n console.error(\n 'hx-chart: chart.js could not be loaded. Is the peer dependency \"chart.js\" installed?',\n error,\n );\n return;\n } finally {\n this.#loading = false;\n }\n // inputs may have changed while chart.js loaded\n if (this.#chart && this.#chartType !== this.type()) await this.#render();\n }\n\n #apply(chart: HxChartInstance): void {\n chart.data = this.#themedData();\n chart.options = this.#themedOptions();\n }\n\n #token(name: string): string {\n return getComputedStyle(this.#host).getPropertyValue(name).trim();\n }\n\n /** The datasets with palette colours where they set none. The input is not changed. */\n #themedData(): Json {\n const data = this.data();\n const datasets = data.datasets;\n if (!Array.isArray(datasets)) return data;\n const palette = PALETTE.map((name) => this.#token(name)).filter(Boolean);\n if (palette.length === 0) return data;\n const perPoint = ['pie', 'doughnut', 'polarArea'].includes(this.type());\n return {\n ...data,\n datasets: datasets.map((dataset: DatasetLike, i: number) => {\n if (!isObject(dataset)) return dataset;\n const color = palette[i % palette.length];\n const count = Array.isArray(dataset.data) ? dataset.data.length : 0;\n const points = Array.from({ length: count }, (_, n) => palette[n % palette.length]);\n const filled = this.type() === 'line' || this.type() === 'radar';\n return {\n ...dataset,\n backgroundColor:\n dataset.backgroundColor ??\n (perPoint ? points : filled ? `color-mix(in srgb, ${color}, transparent 80%)` : color),\n borderColor:\n dataset.borderColor ?? (perPoint ? this.#token('--h-content-background') : color),\n };\n }),\n };\n }\n\n #themedOptions(): Json {\n const text = this.#token('--h-text-color');\n const muted = this.#token('--h-text-muted-color');\n const grid = this.#token('--h-content-border-color');\n const axis = { ticks: { color: muted }, grid: { color: grid }, border: { color: grid } };\n const radial = {\n ticks: { color: muted, backdropColor: 'transparent' },\n grid: { color: grid },\n angleLines: { color: grid },\n pointLabels: { color: text },\n };\n const type = this.type();\n const scales =\n type === 'radar' || type === 'polarArea'\n ? { r: radial }\n : type === 'pie' || type === 'doughnut'\n ? {}\n : { x: axis, y: axis };\n const defaults: Json = {\n responsive: this.responsive(),\n maintainAspectRatio: !(this.height() || this.width()),\n color: muted,\n borderColor: grid,\n plugins: { legend: { labels: { color: text } } },\n scales,\n };\n return merge(defaults, this.options());\n }\n\n #watchTheme(): void {\n if (typeof MutationObserver === 'undefined') return;\n this.#observer = new MutationObserver(() => {\n clearTimeout(this.#timer);\n this.#timer = setTimeout(() => this.refresh(), this.themeDelay());\n });\n this.#observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style', 'data-theme'],\n });\n }\n}\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 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\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 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 if (refocus) this.focus();\n }\n\n protected onAttach(): void {\n // the listbox lives in the overlay template: focus it once it has rendered\n afterNextRender(() => this.listbox()?.focus(), { injector: this.#injector });\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 <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 items(); track $index) {\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\">{{ emptyMessage() }}</div>\n }\n </div>\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}\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[]>();\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\n readonly pageChange = output<HxPageEvent>();\n\n protected readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.totalRecords() / Math.max(1, this.rows()))),\n );\n protected readonly page = computed(() =>\n Math.min(this.pageCount() - 1, Math.floor(this.first() / Math.max(1, this.rows()))),\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) => ({ label: String(n), value: n })),\n );\n\n protected readonly report = computed(() => {\n const total = this.totalRecords();\n const first = total === 0 ? 0 : this.page() * this.rows() + 1;\n const last = Math.min(total, (this.page() + 1) * this.rows());\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.rows()) return;\n this.first.set(target * this.rows());\n this.emit();\n }\n\n protected setRows(value: unknown): void {\n const rows = Number(value);\n if (!rows || rows === this.rows()) return;\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.rows(),\n page: this.page(),\n pageCount: this.pageCount(),\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]=\"rows()\" (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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n inject,\n input,\n model,\n type OnInit,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { HxCheckbox } from '../checkbox/checkbox';\nimport { HxInput } from '../input/input';\nimport { type HxPageEvent, HxPaginator } from '../paginator/paginator';\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 /** 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\"`). */\n filter?: boolean;\n}\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\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 | 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`.\n */\n@Component({\n selector: 'hx-data-table',\n imports: [NgTemplateOutlet, HxProgressSpinner, HxPaginator, HxCheckbox, HxInput],\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 /** 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\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[]>();\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 /** `row`: a filter row with a text input under the headers of columns with `filter: true`. */\n readonly filterDisplay = input<'row'>();\n /** The text of the column filters, by field. */\n readonly filters = model<Record<string, string>>({});\n readonly filterLabel = input('Filter {header}');\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\n protected readonly cellTemplates = contentChildren(HxCell);\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()) 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 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 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: ascending, then descending, then not at all. */\n sort(column: HxColumn): void {\n const order = this.orderOf(column);\n const next: 0 | 1 | -1 = order === 0 ? 1 : order === 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 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.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 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 >\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 </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]=\"filterLabel().replace('{header}', column.header)\" [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.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) }}\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 [showCurrentPageReport]=\"showCurrentPageReport()\"\n (pageChange)=\"onPage($event)\"\n />\n }\n</div>\n","/** Date helpers of the date picker: all work on local calendar days (the time of day is ignored). */\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\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 {\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 addDays,\n addMonths,\n compareDays,\n isSameDay,\n isValidDate,\n monthCells,\n startOfDay,\n} from '../internal/dates';\nimport { nextId } from '../internal/ids';\n\nexport type HxDatePickerSelectionMode = 'single' | 'range' | 'multiple';\nexport type HxDatePickerValue = Date | Date[] | null;\ntype CalendarView = 'day' | 'month' | 'year';\n\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],\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 /** `Intl.DateTimeFormat` options of the text in the field (numeric by default, so a typed date parses back). */\n readonly dateFormat = input<Intl.DateTimeFormatOptions>({\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n });\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 /** 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 viewYear = computed(() => this.focusedDate().getFullYear());\n 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 #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 readonly #format = computed(() => new Intl.DateTimeFormat(this.locale(), this.dateFormat()));\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 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(() => {\n const start = Math.floor(this.focusedDate().getFullYear() / 12) * 12;\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n constructor() {\n // a value set from outside (a binding, a form) brings its month into view\n effect(() => {\n const first = this.selectedDates()[0];\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 dateKey(date: Date): string {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n }\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 const [from, to] = this.selectedDates();\n return (\n this.selectionMode() === 'range' &&\n !!from &&\n !!to &&\n compareDays(date, from) > 0 &&\n compareDays(date, to) < 0\n );\n }\n\n protected isDateDisabled(date: Date): boolean {\n const [min, max] = [this.minDate(), this.maxDate()];\n return (\n (!!min && compareDays(date, min) < 0) ||\n (!!max && compareDays(date, max) > 0) ||\n this.disabledDates().some((d) => isSameDay(d, date))\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 const current = this.focusedDate();\n const next =\n this.view() === 'day'\n ? addMonths(current, direction)\n : this.view() === 'month'\n ? addMonths(current, 12 * direction)\n : addMonths(current, 144 * direction);\n this.focusedDate.set(next);\n }\n\n protected chooseMonth(month: number): void {\n const current = this.focusedDate();\n this.focusedDate.set(addMonths(new Date(current.getFullYear(), 0, current.getDate()), month));\n this.view.set('day');\n }\n\n protected chooseYear(year: number): void {\n const current = this.focusedDate();\n this.focusedDate.set(addMonths(new Date(year, current.getMonth(), 1), 0));\n this.view.set('month');\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 protected onDayKeydown(event: KeyboardEvent, date: Date): void {\n const first = this.firstDayOfWeek();\n const weekday = (date.getDay() - first + 7) % 7;\n let target: Date | null = null;\n switch (event.key) {\n case 'ArrowLeft':\n target = addDays(date, -1);\n break;\n case 'ArrowRight':\n target = addDays(date, 1);\n break;\n case 'ArrowUp':\n target = addDays(date, -7);\n break;\n case 'ArrowDown':\n target = addDays(date, 7);\n break;\n case 'Home':\n target = addDays(date, -weekday);\n break;\n case 'End':\n target = addDays(date, 6 - weekday);\n break;\n case 'PageUp':\n target = addMonths(date, event.shiftKey ? -12 : -1);\n break;\n case 'PageDown':\n target = addMonths(date, event.shiftKey ? 12 : 1);\n break;\n default:\n return;\n }\n event.preventDefault();\n this.focusedDate.set(target);\n this.#focusDay();\n }\n\n #focusDay(): void {\n afterNextRender(\n () => {\n const key = this.dateKey(this.focusedDate());\n // the popup lives in the overlay, outside the host\n const root = this.inline()\n ? this.#host.nativeElement\n : document.getElementById(this.popupId);\n root?.querySelector<HTMLElement>(`.hx-date-picker-date[data-date=\"${key}\"]`)?.focus();\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\n const first = this.selectedDates()[0];\n this.view.set('day');\n this.focusedDate.set(first ? startOfDay(first) : this.#today);\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 /** A date from the text: numbers in the order the locale writes them, or `yyyy-mm-dd`. */\n #parse(text: 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(this.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\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 (\n this.open() ||\n next?.closest('.hx-date-picker-popup') ||\n this.#host.nativeElement.contains(next)\n )\n return;\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 (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 <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]=\"isDisabled()\"\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]=\"isDisabled()\" (click)=\"view.set('month')\">{{ monthName() }}</button>\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"isDisabled()\" (click)=\"view.set('year')\">{{ viewYear() }}</button>\n }\n @case ('month') {\n <button type=\"button\" class=\"hx-date-picker-title-button\" [disabled]=\"isDisabled()\" (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]=\"isDisabled()\"\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]=\"isDisabled()\"\n (click)=\"pick(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]=\"isDisabled()\"\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]=\"isDisabled()\"\n (click)=\"chooseYear(year)\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n }\n</div>\n</ng-template>\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 /** 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) 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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"}