ng-hub-ui-forms 22.23.0 → 22.23.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":"ng-hub-ui-forms.mjs","sources":["../../../projects/forms/src/lib/utils/utils.ts","../../../projects/forms/src/lib/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/directives/validation-error.directive.ts","../../../projects/forms/src/lib/interfaces/datepicker.interface.ts","../../../projects/forms/src/lib/utils/file-size.ts","../../../projects/forms/src/lib/interfaces/file-input.interface.ts","../../../projects/forms/src/lib/interfaces/input.interface.ts","../../../projects/forms/src/lib/shared/hub-error-display.ts","../../../projects/forms/src/lib/services/forms-config.ts","../../../projects/forms/src/lib/shared/hub-field-control.ts","../../../projects/forms/src/lib/shared/hub-group-control.ts","../../../projects/forms/src/lib/services/file-uploader.ts","../../../projects/forms/src/lib/interfaces/common.interface.ts","../../../projects/forms/src/lib/directives/input-prefix.directive.ts","../../../projects/forms/src/lib/directives/input-suffix.directive.ts","../../../projects/forms/src/lib/directives/append.directive.ts","../../../projects/forms/src/lib/directives/prepend.directive.ts","../../../projects/forms/src/lib/utils/mask.ts","../../../projects/forms/src/lib/utils/password-strength.ts","../../../projects/forms/src/lib/components/input/input.component.ts","../../../projects/forms/src/lib/components/input/input.component.html","../../../projects/forms/src/lib/components/otp/otp.component.ts","../../../projects/forms/src/lib/directives/autoresize.directive.ts","../../../projects/forms/src/lib/components/textarea/textarea.component.ts","../../../projects/forms/src/lib/components/textarea/textarea.component.html","../../../projects/forms/src/lib/components/slider/slider.component.ts","../../../projects/forms/src/lib/components/slider/slider.component.html","../../../projects/forms/src/lib/directives/segmented-option.directive.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.html","../../../projects/forms/src/lib/directives/legend.directive.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.html","../../../projects/forms/src/lib/components/form/form.component.ts","../../../projects/forms/src/lib/components/form/form.component.html","../../../projects/forms/src/lib/components/legend/legend.component.ts","../../../projects/forms/src/lib/interfaces/select.interface.ts","../../../projects/forms/src/lib/directives/select-suffix.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/value-utils.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-templates.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/config.service.ts","../../../projects/forms/src/lib/select/vendor/lib/console.service.ts","../../../projects/forms/src/lib/select/vendor/lib/id.ts","../../../projects/forms/src/lib/select/vendor/lib/search-helper.ts","../../../projects/forms/src/lib/select/vendor/lib/items-list.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.service.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-option.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.types.ts","../../../projects/forms/src/lib/select/vendor/lib/selection-model.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.html","../../../projects/forms/src/lib/select/select.component.ts","../../../projects/forms/src/lib/select/select.component.html","../../../projects/forms/src/lib/components/datepicker/date-utils.ts","../../../projects/forms/src/lib/components/datepicker/time-utils.ts","../../../projects/forms/src/lib/components/datepicker/period-grid.component.ts","../../../projects/forms/src/lib/components/datepicker/time-field.component.ts","../../../projects/forms/src/lib/components/datepicker/value-format.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.html","../../../projects/forms/src/lib/components/timepicker/timepicker.component.ts","../../../projects/forms/src/lib/directives/file-icon.directive.ts","../../../projects/forms/src/lib/directives/file-dropzone-notice.directive.ts","../../../projects/forms/src/lib/directives/file-preview.directive.ts","../../../projects/forms/src/lib/utils/file-accept.ts","../../../projects/forms/src/lib/utils/file-key.ts","../../../projects/forms/src/lib/utils/file-value.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.html","../../../projects/forms/src/lib/pipes/invert-color.pipe.ts","../../../projects/forms/src/lib/pipes/join-but-last.pipe.ts","../../../projects/forms/src/lib/pipes/map.pipe.ts","../../../projects/forms/src/lib/pipes/safe-url.pipe.ts","../../../projects/forms/src/lib/pipes/snake-upper.pipe.ts","../../../projects/forms/src/lib/pipes/ucfirst.pipe.ts","../../../projects/forms/src/lib/validators/are-equal.validator.ts","../../../projects/forms/src/lib/validators/accepted-files.validator.ts","../../../projects/forms/src/lib/validators/max-file-size.validator.ts","../../../projects/forms/src/lib/validators/min-file-size.validator.ts","../../../projects/forms/src/lib/validators/max-total-size.validator.ts","../../../projects/forms/src/lib/validators/max-files.validator.ts","../../../projects/forms/src/lib/validators/min-files.validator.ts","../../../projects/forms/src/lib/integrations/form-control-adapter.ts","../../../projects/forms/src/public-api.ts","../../../projects/forms/src/ng-hub-ui-forms.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { AbstractControl, FormControl } from '@angular/forms';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Checks if a value is a string.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is a string.\n */\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a value is defined and not null.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is neither `undefined` nor `null`.\n */\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Operator that runs the source observable within a specified Angular zone.\n *\n * @param zone - The `NgZone` instance used to run emissions.\n * @returns An `OperatorFunction` that re-enters the given zone for every notification.\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst onNext = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst onError = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst onComplete = () => zone.run(() => observer.complete());\n\n\t\t\treturn source.subscribe(onNext, onError, onComplete);\n\t\t});\n\t};\n}\n\n/**\n * Joins an array of strings using a separator for all but the last element, which uses `lastSeparator`.\n *\n * @param texts - Strings to join.\n * @param separator - Separator used between all but the last element. Defaults to `', '`.\n * @param lastSeparator - Separator used before the last element. Defaults to `' and '`.\n * @returns The joined string.\n */\nexport function joinButLast(texts: string[], separator = ', ', lastSeparator = ' and '): string {\n\tif (texts.length < 2) {\n\t\treturn texts.join();\n\t}\n\n\treturn `${texts.slice(0, texts.length - 1).join(separator)} ${lastSeparator} ${texts[texts.length - 1]}`;\n}\n\n/**\n * Checks if two values are equal, taking different types into account.\n *\n * Primitives are compared with strict equality; everything else is compared by JSON serialization.\n *\n * @param first - First value.\n * @param second - Second value.\n * @returns `true` when both values are considered equal.\n */\nexport function areEqual(first: any, second: any): boolean {\n\tconst primitives = ['string', 'number', 'boolean'];\n\n\tif (!primitives.includes(typeof first) || !primitives.includes(typeof second)) {\n\t\treturn JSON.stringify(first) === JSON.stringify(second);\n\t} else {\n\t\treturn first === second;\n\t}\n}\n\n/**\n * Checks whether a control declares a `min` or `max` validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns `true` when the validator is present.\n */\nexport function controlHasMinOrMaxValidator(control: AbstractControl, type: 'min' | 'max'): boolean {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn false;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors;\n}\n\n/**\n * Reads the configured `min`/`max` value from a control's validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns The configured bound, or `null` when not present.\n */\nexport function getMinOrMaxValueFromValidator(control: AbstractControl, type: 'min' | 'max'): number | null {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn null;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors ? errors[type][type] : null;\n}\n\n/**\n * Retrieves a value from an object following a dot-separated path, with an optional fallback.\n *\n * @param object - Source object.\n * @param path - Dot-separated path (e.g. `'a.b.c'`).\n * @param fallback - Value returned when the path cannot be resolved. Defaults to `null`.\n * @returns The resolved value, or the fallback.\n */\nexport function get(object: { [key: string]: any }, path: string, fallback: any = null): any {\n\tconst dotIndex = path.indexOf('.');\n\n\tif (!isDefined(object)) {\n\t\treturn fallback || undefined;\n\t}\n\n\tif (dotIndex === -1) {\n\t\tif (path.length && path in object) {\n\t\t\treturn object[path];\n\t\t}\n\n\t\treturn fallback || undefined;\n\t}\n\n\treturn get(object[path.substring(0, dotIndex)], path.substring(dotIndex + 1), fallback);\n}\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n *\n * @param value - camelCase identifier.\n * @returns The UPPER_SNAKE_CASE representation.\n */\nexport function camelToSnakeUpper(value: string): string {\n\treturn value.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\n/**\n * Generates a UUID using `crypto.randomUUID()` when available, falling back to a timestamp-based id.\n *\n * @returns A unique string identifier.\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID();\n\t} catch (error) {\n\t\treturn (Date.now() + Math.floor(Math.random() * 10000)).toString();\n\t}\n}\n\n/**\n * Returns the active element within the given root, descending into shadow roots when needed.\n *\n * @param root - The document or shadow root to search. Defaults to `document`.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot = document): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\n","import { AfterContentInit, Directive, input, model, OnDestroy, OnInit } from '@angular/core';\nimport {\n\tControlContainer,\n\tFormControlDirective,\n\tFormControlName,\n\tFormControlStatus,\n\tNgControl,\n\tValidators\n} from '@angular/forms';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { isDefined } from '../utils/utils';\n\n/**\n * Base class for every form field in `ng-hub-ui-forms`.\n *\n * Provides the shared `ControlValueAccessor`-adjacent plumbing used by the field components:\n * reactive `required` tracking derived from the bound control's validators, programmatic\n * show/hide/toggle helpers exposed on the underlying `AbstractControl`, and lifecycle wiring.\n *\n * Subclasses must provide the injected `NgControl` and `ControlContainer` instances.\n */\n@Directive({\n\thost: {\n\t\t'[class.hidden-control]': 'hidden'\n\t}\n})\nexport abstract class HubFormControl implements OnInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Name of the form control when used within a form group/array.\n\t */\n\treadonly formControlName = input<string>();\n\n\t/**\n\t * Whether the control is required. Derived from the bound control's validators when reactive.\n\t */\n\treadonly required = model<boolean | null>(null);\n\n\t/**\n\t * Whether the control is hidden.\n\t */\n\thidden: boolean = false;\n\n\tprotected _destroy$ = new Subject();\n\tprotected _isFormControl: boolean = false;\n\tprotected abstract _control: NgControl;\n\tprotected abstract _controlContainer: ControlContainer;\n\n\t/**\n\t * Shows the control.\n\t */\n\tshow = () => {\n\t\tthis.hidden = false;\n\t};\n\n\t/**\n\t * Hides the control.\n\t */\n\thide = () => {\n\t\tthis.hidden = true;\n\t};\n\n\t/**\n\t * Toggles the control visibility.\n\t */\n\ttoggle = () => {\n\t\tthis.hidden = !this.hidden;\n\t};\n\n\tngOnInit(): void {\n\t\tif (this._control) {\n\t\t\tthis.setShowAndHideFunctions();\n\t\t\tthis._isFormControl = !!this.formControlName();\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (this._control && !this._control.control && formControlName) {\n\t\t\tthrow new Error(`Can't find form control with name ${formControlName}`);\n\t\t}\n\n\t\t// Derive `required` from the reactive control's validators for BOTH reactive\n\t\t// bindings (`formControlName` and `[formControl]`); template-driven bindings\n\t\t// (ngModel) keep honoring the inline `required` input instead.\n\t\tconst isReactiveBinding = this._control instanceof FormControlName || this._control instanceof FormControlDirective;\n\n\t\tif (this._control?.control && isReactiveBinding) {\n\t\t\tconst control = this._control.control;\n\n\t\t\tif (isDefined(this.required())) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`You're using the inline property \"required\" with a reactive control. The property will be overwritten with the validators of the control.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\tcontrol.statusChanges\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t\t\ttap((status: FormControlStatus) => {\n\t\t\t\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.subscribe();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next(null);\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Attaches `show`, `hide` and `toggle` helpers to the underlying form control object.\n\t *\n\t * Best-effort: if the control cannot be resolved (e.g. the container is not yet initialized),\n\t * the helpers are simply not attached. This never throws — a missing convenience must not break\n\t * rendering.\n\t */\n\tprotected setShowAndHideFunctions() {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (!formControlName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = this._controlContainer?.control?.get(formControlName) as any;\n\n\t\tif (!control) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontrol['show'] = this.show;\n\t\tcontrol['hide'] = this.hide;\n\t\tcontrol['toggle'] = this.toggle;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as form helper text projected into a form field.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\">\n * <ng-template hubFormText>We'll never share your email.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFormText]'\n})\nexport class HubFormTextDirective {\n\t/** Template reference for the helper text. */\n\treadonly template = inject(TemplateRef);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the validation error message for a specific error key.\n *\n * Used by form fields and form containers to override the default message rendered\n * for a given validation error (e.g. `required`, `min`, `equal`).\n *\n * @example\n * ```html\n * <hub-input formControlName=\"age\">\n * <ng-template hubValidationError key=\"min\">Must be at least 18.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubValidationError]'\n})\nexport class HubValidationErrorDirective {\n\t/** Unique key for the validation error (e.g. `'required'`, `'min'`). */\n\treadonly key = input.required<string>();\n\n\t/** Template reference for the error message. */\n\treadonly template = inject(TemplateRef);\n}\n","/**\n * Selection mode for `<hub-datepicker>`: how many points are picked, and how they relate.\n *\n * - `'single'` — one point.\n * - `'range'` — two independent points, each with its own date and its own time.\n * - `'day-time-range'` — **one** date and two times within it: the day, from 09:00 to 11:00.\n * This is what booking a room, a slot or a shift actually is, and `'range'` cannot express it\n * — its two ends are free to land on different days. The value is still a\n * {@link HubDateRange}, so serialization, `min`/`max` and `valueFormat` are unchanged; what\n * the mode adds is the guarantee that both ends share a calendar day, enforced by a control\n * that cannot express anything else rather than by a validator that rejects it afterwards.\n * Implies a time: a granularity coarser than `hour` is raised to it.\n */\nexport type HubDatepickerMode = 'single' | 'range' | 'day-time-range';\n\n/**\n * Precision carried by each selected point, from a whole year down to a second.\n *\n * Orthogonal to {@link HubDatepickerMode}: `mode` says how many points are selected,\n * `granularity` says how precise each one is. Selects the panel too — `year` and `month`\n * render a 12-cell period grid, `day` and finer render the day grid (plus a time strip\n * from `hour` onwards).\n */\nexport type HubDatepickerGranularity = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\n/**\n * How a picked point is serialized into the bound form control.\n *\n * - `'iso'` — an ISO 8601 string whose shape follows the granularity: `2026`, `2026-09`,\n * `2026-09-01`, or `2026-09-01T09:30:00+02:00` once a time is carried. **The time is the\n * reader's local wall clock and the offset is that of the emitted date** (so a January and\n * an August value in Madrid carry `+01:00` and `+02:00` respectively).\n * - `'date'` — a native `Date` truncated to the granularity, in the reader's zone.\n * - `'timestamp'` — epoch milliseconds of that same `Date`.\n * - A function — full escape hatch, receives the truncated `Date`.\n */\nexport type HubDatepickerValueFormat = 'iso' | 'date' | 'timestamp' | ((date: Date) => unknown);\n\n/**\n * A selected range. `T` follows {@link HubDatepickerValueFormat} and defaults to `string`, so\n * an existing `HubDateRange` annotation keeps meaning exactly what it meant (ISO strings).\n *\n * In `day-time-range` mode both ends are guaranteed to fall on the same calendar day.\n */\nexport interface HubDateRange<T = string> {\n\tstart: T | null;\n\tend: T | null;\n}\n\n/**\n * The CVA value of `<hub-datepicker>`: a single point in `single` mode, a {@link HubDateRange}\n * in `range` and `day-time-range` modes. `T` defaults to `string` — consumers on the default\n * `valueFormat` of `'iso'` keep typing their control as `HubDateValue` and keep receiving\n * strings.\n */\nexport type HubDateValue<T = string> = T | HubDateRange<T> | null;\n\n/**\n * Localizable, overridable labels for the datepicker (button text + accessibility names).\n * Month names, weekday names and the AM/PM day period come from the `Intl` API and need no\n * translation.\n */\nexport interface HubDatepickerLabels {\n\t/** Aria label for the calendar trigger button. */\n\topenCalendar: string;\n\t/** Aria label for the previous-month button. */\n\tpreviousMonth: string;\n\t/** Aria label for the next-month button. */\n\tnextMonth: string;\n\t/** Aria label for the previous-year button. */\n\tpreviousYear: string;\n\t/** Aria label for the next-year button. */\n\tnextYear: string;\n\t/** Text + aria label for the \"today\" shortcut button. */\n\ttoday: string;\n\t/** Text + aria label for the \"clear\" button. */\n\tclear: string;\n\t/** Text + aria label for the \"done\" button, shown when a time is being picked. */\n\tdone: string;\n\t/** Aria label for the hour spinbutton. */\n\thour: string;\n\t/** Aria label for the minute spinbutton. */\n\tminute: string;\n\t/** Aria label for the second spinbutton. */\n\tsecond: string;\n\t/** Aria label for the AM/PM toggle. */\n\tmeridiem: string;\n\t/** Row label for the time strip in `single` mode. */\n\ttime: string;\n\t/** Row label for the start time in `range` mode. */\n\tstartTime: string;\n\t/** Row label for the end time in `range` mode. */\n\tendTime: string;\n}\n\n/** Global datepicker defaults, set via {@link provideHubForms}. */\nexport interface HubDatepickerConfig {\n\t/** First weekday (0 = Sunday, 1 = Monday…). */\n\tfirstDayOfWeek: number;\n\t/** Weekday header width. */\n\tweekdayFormat: 'short' | 'narrow' | 'long';\n\t/** `Intl` options used to format the displayed value. */\n\tdisplayFormat: Intl.DateTimeFormatOptions;\n\t/** Separator between the two dates of a range in the input display. */\n\trangeSeparator: string;\n\t/** Precision each picked point carries. */\n\tgranularity: HubDatepickerGranularity;\n\t/** How a picked point is serialized into the control. */\n\tvalueFormat: HubDatepickerValueFormat;\n\t/** Minute increment of the minute spinbutton. */\n\tminuteStep: number;\n\t/** Second increment of the second spinbutton. */\n\tsecondStep: number;\n\t/** Force a 12- or 24-hour clock. `undefined` derives it from the locale. */\n\thourFormat: '12' | '24' | undefined;\n\t/** `Intl` options composed over {@link displayFormat} when the granularity carries a time. */\n\ttimeDisplayFormat: Intl.DateTimeFormatOptions;\n\t/** Localizable labels. */\n\tlabels: HubDatepickerLabels;\n}\n\n/** Built-in (English) datepicker labels. */\nexport const defaultHubDatepickerLabels: HubDatepickerLabels = {\n\topenCalendar: 'Open calendar',\n\tpreviousMonth: 'Previous month',\n\tnextMonth: 'Next month',\n\tpreviousYear: 'Previous year',\n\tnextYear: 'Next year',\n\ttoday: 'Today',\n\tclear: 'Clear',\n\tdone: 'Done',\n\thour: 'Hour',\n\tminute: 'Minute',\n\tsecond: 'Second',\n\tmeridiem: 'AM/PM',\n\ttime: 'Time',\n\tstartTime: 'Start time',\n\tendTime: 'End time'\n};\n\n/** Built-in datepicker defaults. */\nexport const defaultHubDatepickerConfig: HubDatepickerConfig = {\n\tfirstDayOfWeek: 1,\n\tweekdayFormat: 'short',\n\tdisplayFormat: { year: 'numeric', month: '2-digit', day: '2-digit' },\n\trangeSeparator: ' – ',\n\tgranularity: 'day',\n\tvalueFormat: 'iso',\n\tminuteStep: 5,\n\tsecondStep: 1,\n\thourFormat: undefined,\n\ttimeDisplayFormat: { hour: '2-digit', minute: '2-digit' },\n\tlabels: defaultHubDatepickerLabels\n};\n","/** Binary size units, ascending. */\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * Formats a byte count as human-readable text using binary multiples (1 KB = 1024 B).\n *\n * Values below 10 in their unit keep one decimal (`1.4 MB`); larger ones are rounded (`24 MB`).\n * The decimal separator follows the given locale, or the runtime's default when omitted.\n *\n * @param bytes - The size in bytes.\n * @param locale - BCP 47 locale used to format the number. Defaults to the runtime locale.\n * @returns The formatted size, or an empty string when `bytes` is not a finite, non-negative number.\n */\nexport function formatFileSize(bytes: number, locale?: string): string {\n\tif (!Number.isFinite(bytes) || bytes < 0) {\n\t\treturn '';\n\t}\n\n\tif (bytes < 1024) {\n\t\treturn `${bytes} ${FILE_SIZE_UNITS[0]}`;\n\t}\n\n\tlet value = bytes;\n\tlet unit = 0;\n\n\twhile (value >= 1024 && unit < FILE_SIZE_UNITS.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit++;\n\t}\n\n\tconst formatted = new Intl.NumberFormat(locale, { maximumFractionDigits: value < 10 ? 1 : 0 }).format(value);\n\n\treturn `${formatted} ${FILE_SIZE_UNITS[unit]}`;\n}\n","import { formatFileSize } from '../utils/file-size';\n\n/** Why a file was refused by `<hub-file-input>` before it ever reached the form value. */\nexport type HubFileRejectionReason = 'accept' | 'maxSize' | 'minSize' | 'maxFiles' | 'maxTotalSize' | 'duplicate';\n\n/** A file the component refused, together with the constraint that refused it. */\nexport interface HubFileRejection {\n\t/** The refused file. */\n\tfile: File;\n\t/** The constraint that refused it. */\n\treason: HubFileRejectionReason;\n\t/** The configured limit that was violated (`accept` string, byte count, file count), when applicable. */\n\tlimit: string | number | null;\n}\n\n/** Lifecycle of a single accepted file. `uploading`/`done`/`error` only occur when an uploader is registered. */\nexport type HubFileStatus = 'ready' | 'uploading' | 'done' | 'error';\n\n/**\n * The rich, per-file state exposed by `<hub-file-input>` through its `files()` signal.\n *\n * This is deliberately **not** the form-control value: the control holds plain `File` objects so it\n * can be handed straight to a `FormData`. Preview URLs, upload status and progress live here.\n */\nexport interface HubFileItem {\n\t/** Stable id for the lifetime of the item; used by `remove`, `cancel` and `retry`. */\n\treadonly id: string;\n\t/** The underlying native file. */\n\treadonly file: File;\n\t/** Object URL of the thumbnail, for image files in a browser. `null` otherwise. */\n\treadonly previewUrl: string | null;\n\t/** Current lifecycle status. */\n\treadonly status: HubFileStatus;\n\t/**\n\t * Upload progress from 0 to 100, or `null` when the total size is unknown — the case when the\n\t * transport does not report a total (e.g. `HttpClient` emits `total: undefined`). A `null`\n\t * progress must render as an indeterminate bar, never as 0%.\n\t */\n\treadonly progress: number | null;\n\t/** The error thrown by the uploader, when `status` is `'error'`. */\n\treadonly error: unknown | null;\n\t/**\n\t * The body the uploader reported on `done` — typically the record the server created, whose id\n\t * the application needs to reference the stored file. `null` until the upload succeeds, and\n\t * again after a `retry` restarts it.\n\t */\n\treadonly response: unknown | null;\n}\n\n/** How the accepted files are previewed below the dropzone. */\nexport type HubFilePreview = 'none' | 'list' | 'grid';\n\n/** The active restrictions of a `<hub-file-input>`, handed to the `constraints` label. */\nexport interface HubFileConstraints {\n\t/** The `accept` specification, or `null` when everything is allowed. */\n\taccept: string | null;\n\t/** Maximum size per file in bytes, or `null`. */\n\tmaxSize: number | null;\n\t/** Maximum number of files, or `null`. */\n\tmaxFiles: number | null;\n}\n\n/**\n * Localizable, overridable labels for `<hub-file-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover both visible text and the\n * accessible names of the internal buttons.\n */\nexport interface HubFileInputLabels {\n\t/** Text of the button that opens the native file dialog. */\n\tbrowse: string;\n\t/** Invitation rendered inside the dropzone. */\n\tdropHere: string;\n\t/**\n\t * Second line of the invitation, under {@link dropHere}. Empty by default, so it renders\n\t * nothing. A dropzone that sets it usually stacks the prompt too, with\n\t * `--hub-file-input-prompt-direction: column`.\n\t */\n\tdropSubtext: string;\n\t/** Accessible name of the per-file remove button. */\n\tremove: string;\n\t/** Text + accessible name of the \"remove all\" button. */\n\tclear: string;\n\t/** Accessible name of the per-file retry button (uploader only). */\n\tretry: string;\n\t/** Accessible name of the per-file cancel button (uploader only). */\n\tcancel: string;\n\t/** Screen-reader summary of the current selection. */\n\tfilesSelected: (count: number) => string;\n\t/** Renders a byte count as human-readable text. */\n\tformatSize: (bytes: number) => string;\n\t/** Renders the reason a file was refused; announced in the live region. */\n\trejection: (rejection: HubFileRejection) => string;\n\t/** Renders the hint that summarizes the active restrictions under the dropzone. */\n\tconstraints: (constraints: HubFileConstraints) => string;\n}\n\n/** Built-in (English) file-input labels. */\nexport const defaultHubFileInputLabels: HubFileInputLabels = {\n\tbrowse: 'Browse files',\n\tdropHere: 'Drag files here, or',\n\tdropSubtext: '',\n\tremove: 'Remove file',\n\tclear: 'Remove all',\n\tretry: 'Retry upload',\n\tcancel: 'Cancel upload',\n\tfilesSelected: (count: number) => (count === 1 ? '1 file selected' : `${count} files selected`),\n\tformatSize: (bytes: number) => formatFileSize(bytes),\n\trejection: ({ file, reason, limit }: HubFileRejection) => {\n\t\tswitch (reason) {\n\t\t\tcase 'accept':\n\t\t\t\treturn `${file.name}: file type not allowed.`;\n\t\t\tcase 'maxSize':\n\t\t\t\treturn `${file.name}: exceeds the maximum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'minSize':\n\t\t\t\treturn `${file.name}: below the minimum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'maxFiles':\n\t\t\t\treturn `${file.name}: at most ${limit} files can be selected.`;\n\t\t\tcase 'maxTotalSize':\n\t\t\t\treturn `${file.name}: the total size would exceed ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'duplicate':\n\t\t\t\treturn `${file.name}: already selected.`;\n\t\t\tdefault:\n\t\t\t\treturn `${file.name}: rejected.`;\n\t\t}\n\t},\n\tconstraints: ({ accept, maxSize, maxFiles }: HubFileConstraints) => {\n\t\tconst parts: string[] = [];\n\n\t\tif (accept) {\n\t\t\tparts.push(accept);\n\t\t}\n\n\t\tif (maxSize != null) {\n\t\t\tparts.push(`up to ${formatFileSize(maxSize)} each`);\n\t\t}\n\n\t\tif (maxFiles != null) {\n\t\t\tparts.push(maxFiles === 1 ? '1 file max' : `${maxFiles} files max`);\n\t\t}\n\n\t\treturn parts.join(' · ');\n\t}\n};\n","/**\n * Supported formats (native input types) for the `<hub-input>` component.\n */\nexport type HubInputFormat =\n\t'text' | 'number' | 'password' | 'email' | 'tel' | 'url' | 'color' | 'checkbox' | 'switch' | 'counter' | 'file';\n\n/**\n * Enum mirror of {@link HubInputFormat} for ergonomic template usage.\n */\nexport enum HubInputFormats {\n\tText = 'text',\n\tNumber = 'number',\n\tPassword = 'password',\n\tEmail = 'email',\n\tTel = 'tel',\n\tUrl = 'url',\n\tColor = 'color',\n\tCheckbox = 'checkbox',\n\tSwitch = 'switch',\n\tCounter = 'counter',\n\tFile = 'file'\n}\n\n/** Strength score produced by the password strength meter (0 = empty/none, 4 = strongest). */\nexport type HubPasswordStrengthScore = 0 | 1 | 2 | 3 | 4;\n\n/**\n * Localizable, overridable labels and hooks for the password format of `<hub-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover the accessible names of the\n * reveal toggle, the Caps Lock hint and the strength-meter level names.\n */\nexport interface HubPasswordLabels {\n\t/** Accessible name of the toggle while the value is masked. */\n\tshowPasswordLabel: string;\n\t/** Accessible name of the toggle while the value is revealed. */\n\thidePasswordLabel: string;\n\t/** Hint shown while Caps Lock is active and the field is focused. */\n\tcapsLockWarning: string;\n\t/** Strength level names, weakest to strongest (scores 1–4). */\n\tstrengthLabels: [string, string, string, string];\n\t/**\n\t * Optional scoring override for the strength meter. Called synchronously on every value\n\t * change — keep it cheap, or debounce upstream before plugging an expensive scorer\n\t * (zxcvbn-grade).\n\t */\n\tstrengthFn?: (value: string) => HubPasswordStrengthScore;\n}\n\n/** Built-in (English) password labels. */\nexport const defaultHubPasswordLabels: HubPasswordLabels = {\n\tshowPasswordLabel: 'Show password',\n\thidePasswordLabel: 'Hide password',\n\tcapsLockWarning: 'Caps Lock is on',\n\tstrengthLabels: ['Weak', 'Fair', 'Good', 'Strong']\n};\n","import { formatFileSize } from '../utils/file-size';\n\n/**\n * Default, human-readable messages for the most common Angular validation errors.\n *\n * Consumers can override this per field (via the `invalidFeedbackTemplateFn` input) or globally\n * (via {@link provideHubForms}). The function receives the error `key` and its `value` (the payload\n * Angular stores for that error) and returns the message string (HTML allowed).\n *\n * @param key - The validation error key (e.g. `required`, `min`, `minlength`, `equal`).\n * @param value - The error payload as stored on the control's `errors` object.\n * @returns A localized-by-default English message describing the error.\n */\nexport function defaultInvalidFeedback(key: string, value: any): string {\n\tswitch (key) {\n\t\tcase 'fileAccept':\n\t\t\treturn `Only ${value?.accept ?? 'certain'} files are allowed.`;\n\t\tcase 'fileMaxSize':\n\t\t\treturn `Each file must be at most ${formatFileSize(value?.max)}.`;\n\t\tcase 'fileMinSize':\n\t\t\treturn `Each file must be at least ${formatFileSize(value?.min)}.`;\n\t\tcase 'fileMaxTotalSize':\n\t\t\treturn `The files must add up to at most ${formatFileSize(value?.max)}.`;\n\t\tcase 'fileMaxFiles':\n\t\t\treturn `Select at most ${value?.max ?? ''} files.`;\n\t\tcase 'fileMinFiles':\n\t\t\treturn `Select at least ${value?.min ?? ''} files.`;\n\t\tcase 'required':\n\t\t\treturn 'This field is required.';\n\t\tcase 'email':\n\t\t\treturn 'Enter a valid email address.';\n\t\tcase 'pattern':\n\t\t\treturn 'The value has an invalid format.';\n\t\tcase 'equal':\n\t\t\treturn 'The values do not match.';\n\t\tcase 'min':\n\t\t\treturn `The value must be greater than or equal to ${value?.min ?? value}.`;\n\t\tcase 'max':\n\t\t\treturn `The value must be less than or equal to ${value?.max ?? value}.`;\n\t\tcase 'minlength':\n\t\t\treturn `Use at least ${value?.requiredLength ?? ''} characters.`;\n\t\tcase 'maxlength':\n\t\t\treturn `Use at most ${value?.requiredLength ?? ''} characters.`;\n\t\tcase 'step':\n\t\t\treturn 'The value does not match the allowed step.';\n\t\tdefault:\n\t\t\treturn `The field has the following error: ${key}.`;\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { defaultHubDatepickerConfig, HubDatepickerConfig } from '../interfaces/datepicker.interface';\nimport { defaultHubFileInputLabels, HubFileInputLabels } from '../interfaces/file-input.interface';\nimport { defaultHubPasswordLabels, HubPasswordLabels } from '../interfaces/input.interface';\nimport { defaultInvalidFeedback } from '../shared/hub-error-display';\n\n/**\n * Global configuration contract for `ng-hub-ui-forms`.\n */\nexport interface HubFormsConfig {\n\t/**\n\t * Builds the message shown for a given validation error.\n\t *\n\t * @param key - The validation error key (e.g. `required`, `min`).\n\t * @param value - The error payload stored on the control.\n\t * @returns The message string (HTML allowed).\n\t */\n\tinvalidFeedbackTemplateFn: (key: string, value: any) => string;\n\n\t/**\n\t * Whether fields render the opt-in valid/success state by default once they\n\t * are touched and valid. `false` keeps the success state off everywhere\n\t * (only invalid is automatic); a per-field `showValid` input overrides this.\n\t */\n\tshowValid: boolean;\n\n\t/** Global datepicker defaults (locale labels, formats, first day of week…). */\n\tdatepicker: HubDatepickerConfig;\n\n\t/** Global file-input labels (button text, accessible names, size and rejection formatting). */\n\tfileInput: HubFileInputLabels;\n\n\t/** Global password labels (toggle accessible names, Caps Lock hint, strength levels). */\n\tpassword: HubPasswordLabels;\n}\n\n/**\n * Default configuration used when {@link provideHubForms} is not called.\n */\nexport const defaultHubFormsConfig: HubFormsConfig = {\n\tinvalidFeedbackTemplateFn: defaultInvalidFeedback,\n\tshowValid: false,\n\tdatepicker: defaultHubDatepickerConfig,\n\tfileInput: defaultHubFileInputLabels,\n\tpassword: defaultHubPasswordLabels\n};\n\n/**\n * Injection token holding the resolved {@link HubFormsConfig}.\n *\n * Falls back to {@link defaultHubFormsConfig} when no provider is registered, so the library works\n * out of the box without bootstrapping.\n */\nexport const HUB_FORMS_CONFIG = new InjectionToken<HubFormsConfig>('HUB_FORMS_CONFIG', {\n\tprovidedIn: 'root',\n\tfactory: () => defaultHubFormsConfig\n});\n\n/**\n * Registers a global configuration for `ng-hub-ui-forms`.\n *\n * @param config - Partial configuration; unspecified fields keep their defaults.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's providers).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [\n * provideHubForms({\n * invalidFeedbackTemplateFn: (key) => myI18n.translate(`errors.${key}`)\n * })\n * ]\n * });\n * ```\n */\nexport function provideHubForms(config?: DeepPartial<HubFormsConfig>): EnvironmentProviders {\n\tconst datepicker: HubDatepickerConfig = {\n\t\t...defaultHubFormsConfig.datepicker,\n\t\t...config?.datepicker,\n\t\tlabels: { ...defaultHubFormsConfig.datepicker.labels, ...config?.datepicker?.labels }\n\t};\n\n\tconst fileInput: HubFileInputLabels = {\n\t\t...defaultHubFormsConfig.fileInput,\n\t\t...(config?.fileInput as Partial<HubFileInputLabels> | undefined)\n\t};\n\n\tconst password: HubPasswordLabels = {\n\t\t...defaultHubFormsConfig.password,\n\t\t...(config?.password as Partial<HubPasswordLabels> | undefined)\n\t};\n\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_FORMS_CONFIG,\n\t\t\tuseValue: { ...defaultHubFormsConfig, ...config, datepicker, fileInput, password } as HubFormsConfig\n\t\t}\n\t]);\n}\n\n/** Recursively-optional version of a type, for partial config overrides. */\ntype DeepPartial<T> = {\n\t[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { ControlContainer, ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { HubFormTextDirective } from '../directives/form-text.directive';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\nimport { HubFormControl } from './hub-form-control';\nimport { isDefined, uuid } from '../utils/utils';\n\n/**\n * Shared base for single-value form fields (input, textarea, slider, select…).\n *\n * Extends {@link HubFormControl} with the `ControlValueAccessor` plumbing and the automatic\n * validation-error display that every field shares:\n *\n * - Injects the bound `NgControl` / `ControlContainer` and registers itself as value accessor.\n * - Exposes `isInvalid` / `errors`, resolving from the reactive control or from native validity.\n * - Collects projected `hubValidationError` templates and resolves messages through the per-field\n * override, the global {@link provideHubForms} config, or the built-in defaults.\n * - Keeps the (OnPush) view in sync with the control via `control.events` + `markForCheck`.\n *\n * Subclasses only implement the value-specific bits: the `_value` signal, `writeValue`, the change\n * handler and their own template/inputs.\n */\n@Directive({\n\thost: {\n\t\t'(focusout)': 'handleBlur($event)'\n\t}\n})\nexport abstract class HubFieldControl extends HubFormControl implements ControlValueAccessor, AfterContentInit {\n\tprotected readonly _elementRef = inject(ElementRef);\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\n\tprotected readonly _control = inject(NgControl, { self: true, optional: true })!;\n\tprotected readonly _controlContainer = inject(ControlContainer, { skipSelf: true, host: true, optional: true })!;\n\n\t/** Resolved templates that override the default message of a given error key. */\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/** Stable unique id linking the label and the control. */\n\treadonly id = uuid();\n\n\t/** Query for a projected `hubFormText` helper template. */\n\treadonly formTextTmp = contentChild(HubFormTextDirective, { read: TemplateRef });\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\t/** Whether the field is disabled. */\n\treadonly disabled = model(false);\n\n\t/** Per-field override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/**\n\t * Opt-in success state. When `true`, a touched + valid field renders the\n\t * `--valid` styling (success border + ring). Defaults to the global\n\t * {@link HubFormsConfig.showValid}; the success state is never automatic\n\t * unless enabled. Has no effect while the field is invalid.\n\t */\n\treadonly showValid = input(this.#config.showValid);\n\n\t/** Optional success message shown below the control while {@link showsValid}. */\n\treadonly validFeedback = input<string | null>(null);\n\n\tonChange: (value: any) => void = () => {};\n\tonTouched: () => void = () => {};\n\n\tprotected readonly _nativeErrors = signal<ValidationErrors | null>(null);\n\tprotected readonly _nativeTouched = signal(false);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this._control) {\n\t\t\tthis._control.valueAccessor = this;\n\t\t}\n\t}\n\n\t/** Whether the field should display its error feedback (touched + invalid). */\n\tget isInvalid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.invalid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !!this._nativeErrors();\n\t}\n\n\t/** Whether the field is touched and valid (independent of the opt-in). */\n\tget isValid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.valid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !this._nativeErrors();\n\t}\n\n\t/** Whether the opt-in success state should be displayed (touched + valid + `showValid`). */\n\tget showsValid(): boolean {\n\t\treturn this.showValid() && this.isValid;\n\t}\n\n\t/** Current validation errors, from the reactive control or from native validity. */\n\tget errors(): ValidationErrors | null {\n\t\tif (this._control) {\n\t\t\treturn this._control.errors ?? null;\n\t\t}\n\n\t\treturn this._nativeErrors();\n\t}\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\n\t\t// Re-render on touched/pristine/status/value changes of the bound reactive control.\n\t\t// `markAllAsTouched()` on a parent form would otherwise not reach this OnPush component,\n\t\t// leaving the error feedback stale.\n\t\tthis._control?.control?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n\n\t/**\n\t * Marks the field as touched when focus leaves it.\n\t *\n\t * @param event - The originating focus event.\n\t */\n\thandleBlur(event?: FocusEvent): void {\n\t\tif (!this._control) {\n\t\t\tthis._nativeTouched.set(true);\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t}\n\n\t\tthis.onTouched?.();\n\t}\n\n\tregisterOnChange(fn: (value: any) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * Resolves the message for a given validation error, honoring per-field and global overrides.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this.#config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\tabstract writeValue(value: any): void;\n\n\t/**\n\t * Derives native validation errors when the field is used without a reactive control.\n\t *\n\t * @param target - The DOM element to read validity from, if available.\n\t */\n\tprotected updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet el = target as HTMLInputElement | HTMLTextAreaElement | null;\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tel = this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`) as\n\t\t\t\tHTMLInputElement | HTMLTextAreaElement | null;\n\t\t}\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tthis._nativeErrors.set(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst validity = el.validity;\n\t\tconst errors: ValidationErrors = {};\n\t\tconst valueLength = (el.value ?? '').length;\n\n\t\tif (validity.valueMissing) errors['required'] = true;\n\t\tif (validity.typeMismatch) errors[el.type || 'type'] = true;\n\t\tif (validity.patternMismatch) errors['pattern'] = true;\n\t\tif (validity.tooShort) errors['minlength'] = { requiredLength: el.minLength, actualLength: valueLength };\n\t\tif (validity.tooLong) errors['maxlength'] = { requiredLength: el.maxLength, actualLength: valueLength };\n\t\tif (validity.rangeUnderflow && 'min' in el) errors['min'] = { min: (el as HTMLInputElement).min, actual: el.value };\n\t\tif (validity.rangeOverflow && 'max' in el) errors['max'] = { max: (el as HTMLInputElement).max, actual: el.value };\n\t\tif (validity.stepMismatch && 'step' in el) errors['step'] = { step: (el as HTMLInputElement).step, actual: el.value };\n\t\tif (validity.badInput) errors['badInput'] = true;\n\n\t\tthis._nativeErrors.set(isDefined(errors) && Object.keys(errors).length ? errors : null);\n\t}\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, ValidationErrors } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\n\n/** When a container reveals its group-level validation errors. */\nexport type HubGroupErrorTrigger = 'touched' | 'submit' | 'always';\n\n/**\n * Shared base for form *containers* (`hub-form`, `hub-fieldset`, `hub-legend`).\n *\n * Resolves a target `FormGroup`/`FormArray` — provided explicitly via the `group` input or by name\n * from the parent `ControlContainer` — and automatically surfaces its **group-level** validation\n * errors (those set on the group itself by cross-field validators such as `hubAreEqual`), the same\n * way the field components surface control-level errors.\n *\n * It intentionally ignores child-control errors: those are rendered by the individual fields.\n */\n@Directive()\nexport abstract class HubGroupControl implements AfterContentInit, OnDestroy {\n\tprotected readonly _config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\tprivate readonly _parent = inject(ControlContainer, { optional: true, skipSelf: true });\n\tprivate readonly _self = inject(ControlContainer, { optional: true, self: true });\n\n\tprotected _destroy$ = new Subject<void>();\n\n\t/** Explicit target group/array. Takes precedence over name resolution. */\n\treadonly group = input<AbstractControl | null>(null);\n\n\t/** Name of the target group/array within the parent container (alternative to `group`). */\n\treadonly groupName = input<string>();\n\n\t/** When to reveal the group-level errors. `touched` (default) or `always`. */\n\treadonly errorTrigger = input<HubGroupErrorTrigger>('touched');\n\n\t/** Per-container override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/**\n\t * The currently bound group control. A `computed` (not an `effect`-fed signal) so it resolves\n\t * synchronously on first render — otherwise a `<form [formGroup]>` would briefly bind `null` and\n\t * the projected `formControlName` fields would fail to locate their controls.\n\t */\n\tprotected readonly _control = computed<AbstractControl | null>(() => {\n\t\tconst explicit = this.group();\n\n\t\tif (explicit) {\n\t\t\treturn explicit;\n\t\t}\n\n\t\tconst name = this.groupName();\n\n\t\tif (name) {\n\t\t\treturn this._parent?.control?.get(name) ?? null;\n\t\t}\n\n\t\t// `_self` covers `form[hubForm]` (the `formGroup` directive lives on the same host);\n\t\t// `_parent` covers a container nested inside an outer form/group.\n\t\treturn this._self?.control ?? this._parent?.control ?? null;\n\t});\n\n\t/** Whether the owning form has been submitted (set by `hub-form`; drives the `submit` trigger). */\n\tprotected readonly _submitted = signal(false);\n\n\tconstructor() {\n\t\t// Keep the OnPush view in sync with the resolved control's touched/status changes.\n\t\teffect(() => this.#subscribe(this._control()));\n\t}\n\n\t/** Whether the group's own (cross-field) errors should be displayed. */\n\tget isInvalid(): boolean {\n\t\tconst control = this._control();\n\n\t\tif (!control || !control.errors) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (this.errorTrigger()) {\n\t\t\tcase 'always':\n\t\t\t\treturn true;\n\t\t\tcase 'submit':\n\t\t\t\treturn this._submitted();\n\t\t\tdefault:\n\t\t\t\treturn control.touched || this._submitted();\n\t\t}\n\t}\n\n\t/** The group's own validation errors (excludes child-control errors). */\n\tget errors(): ValidationErrors | null {\n\t\treturn this._control()?.errors ?? null;\n\t}\n\n\tngAfterContentInit(): void {\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Resolves the message for a given group-level validation error.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this._config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\t/**\n\t * (Re)subscribes to the bound control's events so the OnPush view refreshes on touched/status\n\t * changes (e.g. a parent `markAllAsTouched()`).\n\t *\n\t * @param control - The newly resolved control, if any.\n\t */\n\t#subscribe(control: AbstractControl | null): void {\n\t\tthis._destroy$.next();\n\n\t\tcontrol?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { HubFileUploader } from '../interfaces/file-uploader.interface';\n\n/**\n * Injection token holding the {@link HubFileUploader} that `<hub-file-input>` delegates uploads to.\n *\n * It has **no default**: when nothing is registered, the component resolves it as `null` and behaves\n * as a pure picker — no automatic upload, no progress bar, no cancel or retry. Register one with\n * {@link provideHubFileUploader}.\n */\nexport const HUB_FILE_UPLOADER = new InjectionToken<HubFileUploader>('HUB_FILE_UPLOADER');\n\n/**\n * Registers the uploader that `<hub-file-input>` uses to send files.\n *\n * The library defines the contract, not the transport: an uploader that knows your endpoint, field\n * name, headers and retry policy is application code. Implement {@link HubFileUploader} there and\n * hand it over here.\n *\n * Passing a class provides it in the same injector and aliases the token to that single instance, so\n * the uploader can inject `HttpClient` and hold its own state.\n *\n * @param uploader - The uploader class (dependency-injected) or a ready-made instance.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's `providers`).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideHttpClient(), provideHubFileUploader(ApiFileUploader)]\n * });\n * ```\n */\nexport function provideHubFileUploader(uploader: HubFileUploader | Type<HubFileUploader>): EnvironmentProviders {\n\tif (typeof uploader === 'function') {\n\t\tconst uploaderType = uploader as Type<HubFileUploader>;\n\n\t\treturn makeEnvironmentProviders([uploaderType, { provide: HUB_FILE_UPLOADER, useExisting: uploaderType }]);\n\t}\n\n\treturn makeEnvironmentProviders([{ provide: HUB_FILE_UPLOADER, useValue: uploader }]);\n}\n","/**\n * Possible display types for form helper text.\n */\nexport type FormTextType = 'bottom' | 'tooltip';\n\n/**\n * Enum for form helper text display types.\n */\nexport enum FormTextTypes {\n\tBottom = 'bottom',\n\tTooltip = 'tooltip'\n}\n\n/**\n * Possible label display types shared by the form field components.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal'\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Projects content into the **inline-start** affix area of a `<hub-input>` (left in\n * LTR, right in RTL). Use it for a leading icon — a `<hub-icon>`, currency symbol,\n * inline `<svg>` or even a small button.\n *\n * The input automatically reserves inline padding so its text never overlaps the\n * affix, and themes a projected `<hub-icon>` with its `--hub-input-icon-*` tokens.\n *\n * ```html\n * <hub-input placeholder=\"Search…\">\n * <hub-icon hubInputPrefix name=\"fa:solid:magnifying-glass\" />\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubInputPrefix]',\n\thost: { class: 'hub-input__affix-content' }\n})\nexport class HubInputPrefixDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Projects content into the **inline-end** affix area of a `<hub-input>` (right in\n * LTR, left in RTL). Use it for a trailing icon or a unit label. For a clear\n * button, prefer the built-in `[clearable]` input instead of projecting one.\n *\n * The input automatically reserves inline padding so its text never overlaps the\n * affix, and themes a projected `<hub-icon>` with its `--hub-input-icon-*` tokens.\n *\n * ```html\n * <hub-input>\n * <hub-icon hubInputSuffix name=\"fa:solid:circle-info\" />\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubInputSuffix]',\n\thost: { class: 'hub-input__affix-content' }\n})\nexport class HubInputSuffixDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks content attached to the **inline-end edge** of a field (right in LTR, left in RTL) —\n * an icon, a button, another field, anything richer than the text an `append` string can carry.\n * This is the slot for whatever operates on the field's value: search it, calculate it, copy it,\n * configure it, or say what unit it is in.\n *\n * **A field is allowed too, not only an action.** `hub-input`, `hub-select`, `hub-textarea` and\n * `hub-datepicker` may be projected here and close flush against the host field, which is how a\n * price and the period it is a price of stay one statement — \"180 € a month\" — instead of two\n * fields the reader has to put back together. It works a level deeper than for a button: a field\n * keeps its box on the control inside it rather than on its host, so the host gives up the border\n * and padding it should never have taken and the inner control takes the squaring. Only those\n * four, and only as a **direct child** of the template — wrap one in a `<div>` and it falls back\n * to the treatment an action gets.\n *\n * Works on every field that renders as a box with a value: `<hub-input>`, `<hub-select>`,\n * `<hub-textarea>` and `<hub-datepicker>`. Composes with the `append` input, which stays the\n * shorter way to attach plain text: the strings render first, this last, so an action always\n * ends up outermost — a unit labels the field, the button acts on it.\n *\n * Deliberately not the same slot as the input's `[hubInputSuffix]`. That one sits *inside* the\n * box, which is right for an icon or a unit but wrong for a control: inside a field it competes\n * for the same corner as the clear button (and, in a select, the dropdown arrow), and a click\n * landing on the wrong one of them does something nobody asked for. This one attaches outside\n * the box and shares its border, so the two read as one field with an action on it.\n *\n * Declared as a template rather than plain projected content because a field's `<ng-content>`\n * is already spoken for — the select's carries `<ng-option>` through to its engine — so\n * anything projected plainly would land in the wrong place. Rendering from a template also\n * keeps the action after the control in the DOM, so tabbing reaches the field before the button\n * acting on it.\n *\n * ```html\n * <hub-input formControlName=\"query\" label=\"Search\">\n * <ng-template hubAppend>\n * <button type=\"button\" (click)=\"search()\"><hub-icon name=\"fa:solid:magnifying-glass\" /></button>\n * </ng-template>\n * </hub-input>\n * ```\n */\n@Directive({ selector: '[hubAppend]' })\nexport class HubAppendDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks content attached to the **inline-start edge** of a field (left in LTR, right in RTL) —\n * an icon, a button, another field, anything richer than the text a `prepend` string can carry.\n *\n * **A field is allowed too, not only an action.** `hub-input`, `hub-select`, `hub-textarea` and\n * `hub-datepicker` may be projected here and close flush against the host field, which is how a\n * price and the period it is a price of stay one statement — \"180 € a month\" — instead of two\n * fields the reader has to put back together. It works a level deeper than for a button: a field\n * keeps its box on the control inside it rather than on its host, so the host gives up the border\n * and padding it should never have taken and the inner control takes the squaring. Only those\n * four, and only as a **direct child** of the template — wrap one in a `<div>` and it falls back\n * to the treatment an action gets.\n *\n * Works on every field that renders as a box with a value: `<hub-input>`, `<hub-select>`,\n * `<hub-textarea>` and `<hub-datepicker>`. Composes with the `prepend` input, which stays the\n * shorter way to attach plain text: the strings render first, this last, so the projected\n * content is always the outermost element on that side.\n *\n * Declared as a template rather than plain projected content because a field's `<ng-content>`\n * is already spoken for — the select's carries `<ng-option>` through to its engine, and the\n * input projects its in-field affixes — so anything projected plainly would land in the wrong\n * place. Rendering from a template also fixes the DOM order, which is what keeps tabbing sane\n * around an attached button.\n *\n * Whatever is projected wears the field's border, radius and height rather than its own, so a\n * `hubButton` does not draw a second, thicker seam beside the control — and a projected field\n * hands that over from its host to the control inside it, for the same reason.\n *\n * ```html\n * <hub-input formControlName=\"amount\" label=\"Amount\">\n * <ng-template hubPrepend>\n * <button type=\"button\" (click)=\"pickCurrency()\"><hub-icon name=\"fa:solid:coins\" /></button>\n * </ng-template>\n * </hub-input>\n * ```\n */\n@Directive({ selector: '[hubPrepend]' })\nexport class HubPrependDirective {}\n","/**\n * Pattern-mask utilities for `hub-input`.\n *\n * A mask is a template string where these tokens accept user input and every other\n * character is a literal separator that is inserted automatically as the user types:\n *\n * | Token | Accepts |\n * |-------|------------------------|\n * | `0` | a digit (`0`–`9`) |\n * | `A` | a letter (`a`–`z`/`A`–`Z`) |\n * | `*` | a letter or a digit |\n *\n * Examples: card `0000 0000 0000 0000`, date `00/00/0000`, IBAN `AA00 0000 0000 0000 0000 0000`,\n * phone `+00 000 000 000`.\n */\n\n/** Predicate per mask token. */\nconst MASK_TOKENS: Record<string, (char: string) => boolean> = {\n\t'0': (char) => /\\d/.test(char),\n\tA: (char) => /[a-zA-Z]/.test(char),\n\t'*': (char) => /[a-zA-Z0-9]/.test(char)\n};\n\n/** Result of applying a mask: the formatted string and its raw (separator-free) value. */\nexport interface HubMaskResult {\n\t/** The value formatted with literals inserted, e.g. `1234 5678`. */\n\treadonly masked: string;\n\t/** Only the characters that filled tokens, e.g. `12345678`. */\n\treadonly unmasked: string;\n}\n\n/**\n * Returns whether a mask string actually contains at least one input token.\n *\n * @param mask Mask template (may be empty).\n * @returns True when the mask has a `0`, `A` or `*` token.\n */\nexport function isMaskActive(mask: string | null | undefined): boolean {\n\treturn !!mask && [...mask].some((char) => char in MASK_TOKENS);\n}\n\n/**\n * Formats a raw input string against a mask template.\n *\n * The input may already contain literals from a previous pass (live re-formatting):\n * non-matching characters are skipped, and literals present in the input are consumed.\n * Formatting stops as soon as the input is exhausted, so no trailing separators are shown\n * before the user has typed the next character.\n *\n * @param value Raw user input (with or without separators).\n * @param mask Mask template.\n * @returns The masked and unmasked representations.\n */\nexport function applyMask(value: string | null | undefined, mask: string): HubMaskResult {\n\tconst chars = [...String(value ?? '')];\n\tlet masked = '';\n\tlet unmasked = '';\n\tlet cursor = 0;\n\n\tfor (let position = 0; position < mask.length; position++) {\n\t\tif (cursor >= chars.length) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst maskChar = mask[position];\n\t\tconst matches = MASK_TOKENS[maskChar];\n\n\t\tif (matches) {\n\t\t\t// Advance to the next input character that satisfies this token.\n\t\t\twhile (cursor < chars.length && !matches(chars[cursor])) {\n\t\t\t\tcursor++;\n\t\t\t}\n\t\t\tif (cursor >= chars.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmasked += chars[cursor];\n\t\t\tunmasked += chars[cursor];\n\t\t\tcursor++;\n\t\t} else {\n\t\t\t// Literal separator: insert it, and consume it from the input if present.\n\t\t\tmasked += maskChar;\n\t\t\tif (chars[cursor] === maskChar) {\n\t\t\t\tcursor++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { masked, unmasked };\n}\n","import { HubPasswordStrengthScore } from '../interfaces/input.interface';\n\n/**\n * Default password-strength heuristic: one point each for length ≥ 8, mixed case, a digit and a\n * symbol. Deliberately simple and dependency-free; override per app via\n * `provideHubForms({ password: { strengthFn } })` for zxcvbn-grade scoring.\n *\n * The symbol rule (`[^A-Za-z0-9]`) is ASCII-only, so accented and non-Latin letters (e.g. `é`,\n * `ñ`) count as symbols too — a minor over-count, not a correctness issue for this heuristic.\n */\nexport function scorePasswordStrength(value: string): HubPasswordStrengthScore {\n\tif (!value) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\n\tif (value.length >= 8) {\n\t\tscore++;\n\t}\n\n\tif (/[a-z]/.test(value) && /[A-Z]/.test(value)) {\n\t\tscore++;\n\t}\n\n\tif (/\\d/.test(value)) {\n\t\tscore++;\n\t}\n\n\tif (/[^A-Za-z0-9]/.test(value)) {\n\t\tscore++;\n\t}\n\n\treturn score as HubPasswordStrengthScore;\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tmodel,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, Validators } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubInputFormat, HubInputFormats, HubPasswordStrengthScore } from '../../interfaces/input.interface';\nimport { HubInputPrefixDirective } from '../../directives/input-prefix.directive';\nimport { HubInputSuffixDirective } from '../../directives/input-suffix.directive';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { controlHasMinOrMaxValidator, isDefined } from '../../utils/utils';\nimport { applyMask, isMaskActive } from '../../utils/mask';\nimport { scorePasswordStrength } from '../../utils/password-strength';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/**\n * Accessible form field with automatic validation-error display.\n *\n * Works both with Reactive Forms (`formControlName` / `[formControl]`) and as a standalone\n * value-bound control. When invalid and touched, it renders the control's errors using the\n * default messages, the global {@link provideHubForms} config, the per-field\n * `invalidFeedbackTemplateFn` input, or projected `hubValidationError` templates.\n *\n * Formats: `text`, `number`, `password`, `email`, `tel`, `url`, `color`, `checkbox`, `switch`,\n * `counter` and `file`. Label types: `stacked`, `floating`, `horizontal`. Text-like formats support\n * prepend / append addons (input groups). Numeric formats auto-attach `min`/`max` validators when\n * bound to a reactive control.\n *\n * The `file` format is **deprecated since 22.6.0** in favour of `<hub-file-input>`: it is a bare\n * picker that cannot enforce `accept` on a drop, and has no size limits, no preview and no per-file\n * removal. It keeps working until the next major.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <hub-input formControlName=\"accept\" type=\"switch\" label=\"Accept terms\" />\n * <hub-input formControlName=\"qty\" type=\"counter\" label=\"Quantity\" [min]=\"1\" [max]=\"9\" />\n * ```\n */\n@Component({\n\tselector: 'hub-input',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './input.component.html',\n\tstyleUrl: './input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-input-host]': 'true'\n\t}\n})\nexport class HubInputComponent extends HubFieldControl {\n\tprotected readonly _inputFormats = HubInputFormats;\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubInputValue>('');\n\n\t/**\n\t * Whether the password value is currently revealed (password format only). Two-way\n\t * bindable, so the reveal state can be driven or observed from outside.\n\t */\n\treadonly passwordRevealed = model(false);\n\n\t/** Resolved password labels from the global forms config. */\n\tprotected readonly _passwordLabels = inject(HUB_FORMS_CONFIG).password;\n\n\t/** Whether the reveal toggle button is rendered (password format only). */\n\treadonly passwordToggle = input(true, { transform: booleanAttribute });\n\n\t/** Whether the integrated reveal toggle should render right now. */\n\tprotected readonly showsPasswordToggle = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Password && this.passwordToggle()\n\t);\n\n\t/** Whether a revealed password re-masks when focus leaves the field. */\n\treadonly hideOnBlur = input(true, { transform: booleanAttribute });\n\n\t/** Whether the Caps Lock hint renders while Caps Lock is active (password format only). */\n\treadonly capsLockWarning = input(true, { transform: booleanAttribute });\n\n\t/** Whether Caps Lock is currently detected as active on the focused password field. */\n\tprotected readonly capsLockOn = signal(false);\n\n\t/** Whether the Caps Lock hint should render right now. */\n\tprotected readonly showsCapsLock = computed<boolean>(\n\t\t() => this.capsLockOn() && this.capsLockWarning() && this.type() === this._inputFormats.Password\n\t);\n\n\t/** Whether the opt-in strength meter renders under the field (password format only). */\n\treadonly passwordStrength = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Current strength score of the typed value. Clamped to `[0, 4]` here — at the source —\n\t * so a misconfigured custom `strengthFn` returning an out-of-range number (e.g. `5` or\n\t * `-1`) cannot corrupt the label lookup or the template's segment/`data-level` rendering.\n\t */\n\tprotected readonly strengthScore = computed<HubPasswordStrengthScore>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !value) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst raw = (this._passwordLabels.strengthFn ?? scorePasswordStrength)(value);\n\t\treturn Math.min(Math.max(raw, 0), 4) as HubPasswordStrengthScore;\n\t});\n\n\t/** Whether the strength meter should render right now. */\n\tprotected readonly showsStrength = computed<boolean>(() => {\n\t\tconst value = this._value();\n\t\treturn (\n\t\t\tthis.passwordStrength() && this.type() === this._inputFormats.Password && typeof value === 'string' && value !== ''\n\t\t);\n\t});\n\n\t/** Level name for the current score; a non-empty value never drops below the weakest label. */\n\tprotected readonly strengthLabel = computed<string>(\n\t\t() => this._passwordLabels.strengthLabels[Math.max(this.strengthScore(), 1) - 1]\n\t);\n\n\t/** Segment indexes of the strength bar. */\n\tprotected readonly _strengthSegments = [1, 2, 3, 4] as const;\n\n\t/** Native input type. */\n\treadonly type = input<HubInputFormat>(this._inputFormats.Text);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `floating`, `horizontal`). */\n\treadonly labelType = model<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = model<string>('');\n\n\t/** Native `autocomplete` attribute (text-like formats), e.g. `current-password` or `new-password`. */\n\treadonly autocomplete = input<string>('');\n\n\t/** Minimum value (numeric / counter inputs). */\n\treadonly min = model<number | undefined>(undefined);\n\n\t/** Maximum value (numeric / counter inputs). */\n\treadonly max = model<number | undefined>(undefined);\n\n\t/** Step value (numeric / counter inputs). */\n\treadonly step = input(1, { transform: numberAttribute });\n\n\t/** Whether the input is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Text shown before the control as an input-group addon (text-like formats). */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as an input-group addon (text-like formats). */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected inline-start affix (`[hubInputPrefix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly prefixDir = contentChild(HubInputPrefixDirective);\n\n\t/** Projected inline-end affix (`[hubInputSuffix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly suffixDir = contentChild(HubInputSuffixDirective);\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Whether content is attached to the leading edge, which squares off that corner. */\n\tprotected readonly hasPrependTpl = computed<boolean>(() => !!this._prependTpl());\n\n\t/** Whether content is attached to the trailing edge. */\n\tprotected readonly hasAppendTpl = computed<boolean>(() => !!this._appendTpl());\n\n\t/**\n\t * When true, a clear (✕) button is rendered inside the field once it holds a\n\t * value; activating it resets the control. The glyph comes from the\n\t * `--hub-input-clear-icon` CSS token, so it can be restyled without touching\n\t * the template.\n\t */\n\treadonly clearable = input(false, { transform: booleanAttribute });\n\n\t/** Whether the internal clear button should be shown right now. */\n\tprotected readonly showClear = computed<boolean>(\n\t\t() => this.clearable() && !this.disabled() && !this.readonly() && this._value() != null && this._value() !== ''\n\t);\n\n\t/** Whether an inline-start affix (projected prefix) is present. */\n\tprotected readonly hasPrefix = computed<boolean>(() => !!this.prefixDir());\n\n\t/** Whether an inline-end affix (projected suffix or the clear button) is present. */\n\tprotected readonly hasSuffix = computed<boolean>(() => !!this.suffixDir() || this.showClear());\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Pattern mask for text-like formats. Tokens: `0` = digit, `A` = letter, `*` =\n\t * alphanumeric; any other character is an auto-inserted literal separator.\n\t * Example: `0000 0000 0000 0000` (card), `00/00/0000` (date).\n\t */\n\treadonly mask = input<string>('');\n\n\t/**\n\t * When a `mask` is set, controls the form value: `false` (default) stores the\n\t * formatted text (e.g. `1234 5678`); `true` stores only the typed characters\n\t * (e.g. `12345678`).\n\t */\n\treadonly unmaskValue = input(false, { transform: booleanAttribute });\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubInputValue>();\n\n\t/** Emits the current value when Enter is pressed. */\n\treadonly enter = output<HubInputValue>();\n\n\t/** Debounce in milliseconds before {@link search} fires. `0` emits on every keystroke. */\n\treadonly debounceTime = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Debounced typeahead event: emits the current term (stringified) `debounceTime`\n\t * ms after the user stops typing. Wire it to drive search / autocomplete without\n\t * rolling your own debounce. Text-like formats only; `valueChange` stays synchronous.\n\t */\n\treadonly search = output<string>();\n\n\t/** Pending typeahead-debounce timer. */\n\t#searchTimer?: ReturnType<typeof setTimeout>;\n\n\t/** Last term emitted via {@link search}, used to skip duplicate emits. */\n\t#lastSearchTerm: string | null = null;\n\n\t/** Clears any pending debounce timer when the component is destroyed. */\n\tprivate readonly _searchCleanup = inject(DestroyRef).onDestroy(() => clearTimeout(this.#searchTimer));\n\n\t/**\n\t * Accepted file types (file format), e.g. `image/*,.pdf`.\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`, which enforces `accept` on drops and pastes\n\t * too. Removed in the next major.\n\t */\n\treadonly accept = input<string>('*');\n\n\t/**\n\t * Whether multiple files can be selected (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`. Removed in the next major.\n\t */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text of the file-picker button (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>` and its `buttonLabel`. Removed in the next major.\n\t */\n\treadonly buttonLabel = input<string>('Choose file');\n\n\t/** Reference to the hidden native file input. */\n\tprotected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n\t/** Whether the current format renders a checkable control (checkbox / switch). */\n\tprotected readonly isCheckable = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Checkbox || this.type() === this._inputFormats.Switch\n\t);\n\n\t/** Whether the current format renders a typeable text-like control (drives the `search` event). */\n\tprotected readonly isTextLike = computed<boolean>(() => {\n\t\tconst t = this.type();\n\t\treturn (\n\t\t\tt !== this._inputFormats.Checkbox &&\n\t\t\tt !== this._inputFormats.Switch &&\n\t\t\tt !== this._inputFormats.Counter &&\n\t\t\tt !== this._inputFormats.Color &&\n\t\t\tt !== this._inputFormats.File\n\t\t);\n\t});\n\n\t/** Display label for the selected file(s). */\n\tprotected readonly fileLabel = computed<string>(() => {\n\t\tconst v = this._value();\n\n\t\tif (v instanceof File) {\n\t\t\treturn v.name;\n\t\t}\n\n\t\tif (typeof FileList !== 'undefined' && v instanceof FileList) {\n\t\t\treturn v.length === 1 ? v[0].name : `${v.length} files`;\n\t\t}\n\n\t\treturn '';\n\t});\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether a leading addon is present. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0);\n\n\t/** Whether a trailing addon is present. */\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0);\n\n\t/** Resolves the actual native `type` attribute, accounting for password reveal. */\n\tprotected readonly resolvedType = computed<string>(() => {\n\t\t// Readonly must not auto-expose the secret by falling through to type=\"text\"; an\n\t\t// explicit toggle click may still reveal it.\n\t\tif (this.type() === this._inputFormats.Password) {\n\t\t\treturn this.passwordRevealed() ? 'text' : 'password';\n\t\t}\n\n\t\tif (this.readonly()) {\n\t\t\treturn this._inputFormats.Text;\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Counter) {\n\t\t\treturn this._inputFormats.Number;\n\t\t}\n\n\t\treturn this.type();\n\t});\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\t\tthis.#attachNumericValidators();\n\t\tthis.#warnDeprecatedFileFormat();\n\t}\n\n\twriteValue(value: HubInputValue): void {\n\t\tif (this.isCheckable()) {\n\t\t\tthis._value.set(!!value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Display masked values formatted, regardless of whether the form stores the\n\t\t// masked or unmasked representation.\n\t\tif (isMaskActive(this.mask()) && value != null && typeof value === 'string') {\n\t\t\tthis._value.set(applyMask(value, this.mask()).masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Reads the new value from an input/model event and propagates it to the form and outputs.\n\t *\n\t * @param event - A DOM event or the raw value emitted by `ngModelChange`.\n\t */\n\tsetValue(event: any): void {\n\t\tconst hasTarget = !!event?.target;\n\t\tlet newValue: HubInputValue;\n\n\t\tif (this.isCheckable()) {\n\t\t\tnewValue = hasTarget ? !!event.target.checked : !!event;\n\t\t} else if (this.type() === this._inputFormats.Number || this.type() === this._inputFormats.Counter) {\n\t\t\tnewValue = hasTarget\n\t\t\t\t? isNaN(event.target.valueAsNumber)\n\t\t\t\t\t? null\n\t\t\t\t\t: event.target.valueAsNumber\n\t\t\t\t: isNaN(Number(event))\n\t\t\t\t\t? null\n\t\t\t\t\t: Number(event);\n\t\t} else {\n\t\t\tnewValue = hasTarget ? event.target.value : event;\n\t\t}\n\n\t\t// Apply the pattern mask for text-like formats: the field shows the formatted\n\t\t// value while the form receives the formatted or unmasked value per `unmaskValue`.\n\t\tif (isMaskActive(this.mask()) && typeof newValue === 'string') {\n\t\t\tconst { masked, unmasked } = applyMask(newValue, this.mask());\n\t\t\tthis._value.set(masked);\n\t\t\tif (hasTarget && event.target) {\n\t\t\t\tevent.target.value = masked;\n\t\t\t}\n\t\t\tconst formValue = this.unmaskValue() ? unmasked : masked;\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t\tthis.onChange?.(formValue);\n\t\t\tthis.valueChange.emit(formValue);\n\t\t\tthis.#scheduleSearch(masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(newValue);\n\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\tthis.onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\t\tthis.#scheduleSearch(newValue);\n\t}\n\n\t/**\n\t * Schedules a debounced {@link search} emit for text-like formats. Coalesces rapid\n\t * keystrokes into a single emit after {@link debounceTime} ms and skips no-op repeats.\n\t *\n\t * @param value - The latest control value.\n\t */\n\t#scheduleSearch(value: HubInputValue): void {\n\t\tif (!this.isTextLike()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst term = value == null ? '' : String(value);\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis.#searchTimer = setTimeout(() => {\n\t\t\tif (term === this.#lastSearchTerm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastSearchTerm = term;\n\t\t\tthis.search.emit(term);\n\t\t}, this.debounceTime());\n\t}\n\n\t/** Increments the counter value, clamped to `max`. */\n\tprotected add(): void {\n\t\tconst current = Number(this._value() ?? this.min() ?? 0);\n\t\tconst next = current + this.step();\n\t\tconst max = this.max();\n\n\t\tthis.setValue(isDefined(max) && next > max! ? max! : next);\n\t}\n\n\t/** Decrements the counter value, clamped to `min`. */\n\tprotected subtract(): void {\n\t\tconst current = Number(this._value() ?? this.max() ?? 0);\n\t\tconst next = current - this.step();\n\t\tconst min = this.min();\n\n\t\tthis.setValue(isDefined(min) && next < min! ? min! : next);\n\t}\n\n\t/** Toggles password visibility. */\n\tprotected togglePassword(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.passwordRevealed.update((revealed) => !revealed);\n\t\t}\n\t}\n\n\t/**\n\t * Tracks the Caps Lock modifier from key events. `getModifierState` is the only reliable\n\t * signal — there is no global Caps Lock state exposed to the page.\n\t */\n\tprotected updateCapsLock(event: KeyboardEvent): void {\n\t\tif (this.type() !== this._inputFormats.Password || !this.capsLockWarning()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.capsLockOn.set(event.getModifierState?.('CapsLock') ?? false);\n\t}\n\n\t/**\n\t * Re-masks the password when focus leaves the whole group. `focusout` fires when focus moves\n\t * onto the toggle too, so the handler ignores transitions that stay inside the group —\n\t * otherwise clicking \"hide\" would re-mask on blur and immediately re-reveal on click.\n\t */\n\tprotected handleGroupFocusOut(event: FocusEvent): void {\n\t\tif (this.type() !== this._inputFormats.Password) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = event.currentTarget as HTMLElement;\n\n\t\tif (group.contains(event.relatedTarget as Node | null)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.capsLockOn.set(false);\n\n\t\tif (this.hideOnBlur() && this.passwordRevealed()) {\n\t\t\tthis.passwordRevealed.set(false);\n\t\t}\n\t}\n\n\t/** Opens the native file dialog. */\n\tprotected triggerFile(): void {\n\t\tif (!this.disabled() && !this.readonly()) {\n\t\t\tthis.fileInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Reads the selected file(s) from the native input and propagates them.\n\t *\n\t * @param event - The native `change` event of the file input.\n\t */\n\tprotected setFileValue(event: Event): void {\n\t\tconst files = (event.target as HTMLInputElement).files;\n\t\tconst value: HubInputValue = !files || files.length === 0 ? null : this.multiple() ? files : files.item(0);\n\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/** Resets a text-like control to empty via the internal clear button. */\n\tprotected clear(): void {\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis._value.set('');\n\t\tthis.onChange?.('');\n\t\tthis.valueChange.emit('');\n\t\tthis.search.emit('');\n\t}\n\n\t/** Clears the selected file(s). */\n\tprotected clearFile(): void {\n\t\tconst native = this.fileInput()?.nativeElement;\n\n\t\tif (native) {\n\t\t\tnative.value = '';\n\t\t}\n\n\t\tthis._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\n\t}\n\n\t/**\n\t * Warns once, in development only, that the `file` format is deprecated.\n\t *\n\t * It still works, but it cannot enforce `accept` on a drop, has no size limits, no preview and\n\t * no per-file removal. `<hub-file-input>` supersedes it.\n\t */\n\t#warnDeprecatedFileFormat(): void {\n\t\tif (isDevMode() && this.type() === this._inputFormats.File) {\n\t\t\tconsole.warn(\n\t\t\t\t'[ng-hub-ui-forms] <hub-input type=\"file\"> is deprecated since 22.6.0 and will be removed in the next major. Use <hub-file-input> instead.'\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Auto-attaches `Validators.min` / `Validators.max` to the bound reactive control when `min` /\n\t * `max` are set and not already present, so the inline bounds become real validation.\n\t */\n\t#attachNumericValidators(): void {\n\t\tconst control = this._control?.control;\n\n\t\tif (!control || !this._isFormControl) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tlet changed = false;\n\n\t\tif (isDefined(min) && !controlHasMinOrMaxValidator(control, 'min')) {\n\t\t\tcontrol.addValidators(Validators.min(min!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (isDefined(max) && !controlHasMinOrMaxValidator(control, 'max')) {\n\t\t\tcontrol.addValidators(Validators.max(max!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) {\n\t\t\tcontrol.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input (string or string[]) to a string list.\n\t *\n\t * @param value - The raw addon input.\n\t * @returns The list of addon strings (empty when none).\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-input\"\n\t[class.hub-field--horizontal]=\"!isCheckable() && (labelType() === _labelTypes.Horizontal || (!label() && required()))\"\n\t[class.hub-input--checkable]=\"isCheckable()\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t/>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<span class=\"hub-input__check-label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</span>\n\t\t\t}\n\t\t</label>\n\t} @else {\n\t\t@if ((label() || required()) && labelType() !== _labelTypes.Floating) {\n\t\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t\t{{ label() }}\n\t\t\t\t@if (required()) {\n\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t}\n\n\t\t<div class=\"hub-field__body hub-input__row\">\n\t\t\t@switch (type()) {\n\t\t\t\t@case (_inputFormats.Counter) {\n\t\t\t\t\t<div class=\"hub-input__group hub-input__counter\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (min() != null && $any(_value()) <= $any(min()))\"\n\t\t\t\t\t\t\taria-label=\"Decrease\"\n\t\t\t\t\t\t\t(click)=\"subtract()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t&minus;\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--counter\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t\t[attr.min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[attr.max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (max() != null && $any(_value()) >= $any(max()))\"\n\t\t\t\t\t\t\taria-label=\"Increase\"\n\t\t\t\t\t\t\t(click)=\"add()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.Color) {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.File) {\n\t\t\t\t\t<div class=\"hub-input__file\" [class.hub-input__file--invalid]=\"isInvalid\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#fileInput\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-native\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t(change)=\"setFileValue($event)\"\n\t\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-button\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"triggerFile()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ buttonLabel() }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<span class=\"hub-input__file-name\">{{ fileLabel() || placeholder() }}</span>\n\t\t\t\t\t\t@if (fileLabel() && !disabled() && !readonly()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__file-clear\" aria-label=\"Clear\" (click)=\"clearFile()\">\n\t\t\t\t\t\t\t\t&times;\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@default {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-input__group\"\n\t\t\t\t\t\t[class.hub-input__group--floating]=\"labelType() === _labelTypes.Floating\"\n\t\t\t\t\t\t[class.hub-input__group--has-prefix]=\"hasPrefix()\"\n\t\t\t\t\t\t[class.hub-input__group--has-suffix]=\"hasSuffix()\"\n\t\t\t\t\t\t[class.hub-input__group--has-prepend]=\"hasPrepend() || hasPrependTpl()\"\n\t\t\t\t\t\t[class.hub-input__group--has-append]=\"hasAppend() || hasAppendTpl()\"\n\t\t\t\t\t\t[class.hub-input__group--has-toggle]=\"showsPasswordToggle()\"\n\t\t\t\t\t\t(focusout)=\"handleGroupFocusOut($event)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t\t\t\t<span class=\"hub-input__attached hub-input__attached--prepend\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t\t\t\t<span class=\"hub-input__addon hub-input__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<span class=\"hub-input__affix hub-input__affix--prefix\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<ng-content select=\"[hubInputPrefix]\"></ng-content>\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"hub-field__control\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[type]=\"resolvedType()\"\n\t\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t\t(keyup.enter)=\"enter.emit(_value())\"\n\t\t\t\t\t\t\t(keydown)=\"updateCapsLock($event)\"\n\t\t\t\t\t\t\t(keyup)=\"updateCapsLock($event)\"\n\t\t\t\t\t\t\t[placeholder]=\"labelType() === _labelTypes.Floating ? placeholder() || ' ' : placeholder()\"\n\t\t\t\t\t\t\t[attr.min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[attr.max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"autocomplete() || null\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t@if (showClear()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__clear\" aria-label=\"Clear\" (click)=\"clear()\"></button>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<span class=\"hub-input__affix hub-input__affix--suffix\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<ng-content select=\"[hubInputSuffix]\"></ng-content>\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t\t\t\t<span class=\"hub-input__addon hub-input__addon--append\">{{ addon }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<!-- Attached content goes last: addons label the field, an action acts on it. -->\n\t\t\t\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t\t\t\t<span class=\"hub-input__attached hub-input__attached--append\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (showsPasswordToggle()) {\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-input__password-toggle\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"\n\t\t\t\t\t\t\t\t\tpasswordRevealed() ? _passwordLabels.hidePasswordLabel : _passwordLabels.showPasswordLabel\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[attr.aria-pressed]=\"passwordRevealed()\"\n\t\t\t\t\t\t\t\t(click)=\"togglePassword()\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__password-icon\"\n\t\t\t\t\t\t\t\t\t[class.hub-input__password-icon--visible]=\"passwordRevealed()\"\n\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (labelType() === _labelTypes.Floating && (label() || required())) {\n\t\t\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-input__label--floating\">\n\t\t\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (showsCapsLock()) {\n\t\t<div class=\"hub-field__form-text hub-input__capslock\" role=\"status\">{{ _passwordLabels.capsLockWarning }}</div>\n\t}\n\n\t@if (showsStrength()) {\n\t\t<div class=\"hub-input__strength\" [attr.data-level]=\"strengthScore()\">\n\t\t\t<div class=\"hub-input__strength-bar\" role=\"presentation\">\n\t\t\t\t@for (segment of _strengthSegments; track segment) {\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"hub-input__strength-segment\"\n\t\t\t\t\t\t[class.hub-input__strength-segment--active]=\"strengthScore() >= segment\"\n\t\t\t\t\t></span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<span class=\"hub-input__strength-label\" aria-live=\"polite\">{{ strengthLabel() }}</span>\n\t\t</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tElementRef,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Character set accepted by the OTP field. */\nexport type HubOtpMode = 'numeric' | 'alphanumeric' | 'alpha';\n\n/**\n * Segmented one-time-code input (`hub-otp-input`): a row of single-character cells for\n * entering verification / 2FA codes. Supports auto-advance, backspace navigation, arrow\n * keys, and pasting the whole code at once. Implements `ControlValueAccessor`, so the\n * form value is the concatenated string.\n *\n * ```html\n * <hub-otp-input formControlName=\"code\" [length]=\"6\" label=\"Verification code\" />\n * <hub-otp-input formControlName=\"pin\" [length]=\"4\" mode=\"numeric\" [secret]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-otp-input',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-otp-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-otp\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div class=\"hub-otp__cells\" role=\"group\" [attr.aria-label]=\"label() || null\" (focusout)=\"onFocusOut($event)\">\n\t\t\t\t\t@for (index of cells(); track index) {\n\t\t\t\t\t\t@if (separatorEvery() && index > 0 && index % separatorEvery() === 0) {\n\t\t\t\t\t\t\t<span class=\"hub-otp__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#cell\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-otp__cell\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[type]=\"secret() ? 'password' : 'text'\"\n\t\t\t\t\t\t\t[attr.inputmode]=\"mode() === 'numeric' ? 'numeric' : 'text'\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"index === 0 ? 'one-time-code' : 'off'\"\n\t\t\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"ariaCellLabel() + ' ' + (index + 1)\"\n\t\t\t\t\t\t\tmaxlength=\"1\"\n\t\t\t\t\t\t\t[value]=\"chars()[index]\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(input)=\"onInput(index, $event)\"\n\t\t\t\t\t\t\t(keydown)=\"onKeydown(index, $event)\"\n\t\t\t\t\t\t\t(paste)=\"onPaste(index, $event)\"\n\t\t\t\t\t\t\t(focus)=\"select(index)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ formText() }}</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{\n\t\t\t\t\t\t\t\t\t\tgetInvalidFeedbackTemplate(error.key, error.value)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './otp.component.scss'\n})\nexport class HubOtpInputComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Number of cells / characters in the code. */\n\treadonly length = input(6, { transform: numberAttribute });\n\n\t/** Accepted character set. */\n\treadonly mode = input<HubOtpMode>('numeric');\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the cells. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Masks the characters like a password. */\n\treadonly secret = input(false, { transform: booleanAttribute });\n\n\t/** Renders the cells read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Inserts a visual separator every N cells (0 = none). */\n\treadonly separatorEvery = input(0, { transform: numberAttribute });\n\n\t/** The separator character shown between groups. */\n\treadonly separator = input<string>('-');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Emits the full code once every cell is filled. */\n\treadonly completed = output<string>();\n\n\t/** The current value, stored as a plain string. */\n\treadonly #value = signal<string>('');\n\n\t/** References to the cell inputs, for focus management. */\n\tprivate readonly _cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n\t/** Index list driving the `@for`. */\n\treadonly cells = computed<number[]>(() => Array.from({ length: Math.max(1, this.length()) }, (_, index) => index));\n\n\t/** Per-cell characters derived from the current value. */\n\treadonly chars = computed<string[]>(() => {\n\t\tconst value = this.#value();\n\t\treturn Array.from({ length: Math.max(1, this.length()) }, (_, index) => value[index] ?? '');\n\t});\n\n\t/** Regex matching a single accepted character for the active mode. */\n\treadonly #pattern = computed<RegExp>(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'alpha':\n\t\t\t\treturn /[a-zA-Z]/;\n\t\t\tcase 'alphanumeric':\n\t\t\t\treturn /[a-zA-Z0-9]/;\n\t\t\tdefault:\n\t\t\t\treturn /[0-9]/;\n\t\t}\n\t});\n\n\t/** ARIA label prefix for each cell. */\n\treadonly ariaCellLabel = computed<string>(() => (this.mode() === 'numeric' ? 'Digit' : 'Character'));\n\n\twriteValue(value: unknown): void {\n\t\tconst raw = typeof value === 'string' ? value : value == null ? '' : String(value);\n\t\tthis.#value.set(this.#sanitize(raw).slice(0, this.length()));\n\t}\n\n\t/** Handles typing into a cell: keep the last valid char, advance focus, and emit. */\n\tprotected onInput(index: number, event: Event): void {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tconst typed = this.#sanitize(target.value);\n\t\tconst char = typed.slice(-1);\n\t\tconst chars = [...this.chars()];\n\n\t\tif (!char) {\n\t\t\tchars[index] = '';\n\t\t\ttarget.value = '';\n\t\t\tthis.#commit(chars.join(''));\n\t\t\treturn;\n\t\t}\n\n\t\tchars[index] = char;\n\t\ttarget.value = char;\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(index + 1);\n\t}\n\n\t/** Handles navigation / deletion keys. */\n\tprotected onKeydown(index: number, event: KeyboardEvent): void {\n\t\tconst chars = [...this.chars()];\n\n\t\tif (event.key === 'Backspace') {\n\t\t\tif (chars[index]) {\n\t\t\t\tchars[index] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t} else if (index > 0) {\n\t\t\t\tchars[index - 1] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t\tthis.#focus(index - 1);\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowLeft' && index > 0) {\n\t\t\tthis.#focus(index - 1);\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowRight' && index < this.length() - 1) {\n\t\t\tthis.#focus(index + 1);\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t/** Distributes a pasted code across the cells starting at the current one. */\n\tprotected onPaste(index: number, event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pasted = this.#sanitize(event.clipboardData?.getData('text') ?? '');\n\t\tif (!pasted) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst chars = [...this.chars()];\n\t\tlet cursor = index;\n\t\tfor (const char of pasted) {\n\t\t\tif (cursor >= this.length()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchars[cursor] = char;\n\t\t\tcursor++;\n\t\t}\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(Math.min(cursor, this.length() - 1));\n\t}\n\n\t/** Selects the cell content on focus for quick overwrite. */\n\tprotected select(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.select();\n\t}\n\n\t/** Marks the field as touched when focus leaves the whole group. */\n\tprotected onFocusOut(event: FocusEvent): void {\n\t\tconst next = event.relatedTarget as Node | null;\n\t\tconst group = event.currentTarget as HTMLElement;\n\t\tif (!next || !group.contains(next)) {\n\t\t\tthis.onTouched();\n\t\t}\n\t}\n\n\t/** Keeps only characters allowed by the active mode. */\n\t#sanitize(value: string): string {\n\t\tconst pattern = this.#pattern();\n\t\treturn [...value].filter((char) => pattern.test(char)).join('');\n\t}\n\n\t/** Stores, propagates and (when full) signals completion. */\n\t#commit(value: string): void {\n\t\tconst next = value.slice(0, this.length());\n\t\tthis.#value.set(next);\n\t\tthis.onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t\tif (next.length === this.length()) {\n\t\t\tthis.completed.emit(next);\n\t\t}\n\t}\n\n\t/** Moves focus to the cell at `index`, if it exists. */\n\t#focus(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.focus();\n\t}\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\n\n/**\n * Auto-resizes a `<textarea>` to fit its content height.\n *\n * @example\n * ```html\n * <textarea hubAutoresize></textarea>\n * ```\n */\n@Directive({\n\tselector: 'textarea[hubAutoresize]',\n\thost: {\n\t\t'(:focusin)': 'onChange()',\n\t\t'(:focusout)': 'onChange()',\n\t\t'(:input)': 'onChange()'\n\t}\n})\nexport class HubAutoresizeDirective implements OnInit {\n\treadonly #elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n\n\t/** Whether auto-resizing is enabled. */\n\treadonly hubAutoresize = input(true, { transform: booleanAttribute });\n\n\tonChange(): void {\n\t\tthis.resize();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.#elementRef.nativeElement.scrollHeight) {\n\t\t\tsetTimeout(() => this.resize(), 1);\n\t\t}\n\t}\n\n\t/** Resizes the textarea to fit its content. */\n\tresize(): void {\n\t\tif (this.hubAutoresize()) {\n\t\t\tconst el = this.#elementRef.nativeElement;\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 4 + 'px';\n\t\t}\n\t}\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HubAutoresizeDirective } from '../../directives/autoresize.directive';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Accessible multi-line text field with optional auto-resize, character counter and automatic\n * validation-error display.\n *\n * Shares all the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}.\n *\n * @example\n * ```html\n * <hub-textarea formControlName=\"bio\" label=\"Biography\" [rows]=\"4\" [maxlength]=\"280\" [counter]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-textarea',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule, HubAutoresizeDirective],\n\ttemplateUrl: './textarea.component.html',\n\tstyleUrl: './textarea.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-textarea-host]': 'true'\n\t}\n})\nexport class HubTextareaComponent extends HubFieldControl {\n\t/** Text shown before the control as a group addon. A string is one; an array a run. */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Normalized addon lists. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether anything is attached to each edge, which squares off that side. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0 || !!this._prependTpl());\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0 || !!this._appendTpl());\n\n\t/** Drops empty entries so `prepend=\"\"` renders nothing rather than an empty box. */\n\t#toAddonList(value: string | string[]): string[] {\n\t\treturn Array.isArray(value) ? value.filter((item) => item != null && item !== '') : value ? [value] : [];\n\t}\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<string>('');\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = input<string>('');\n\n\t/** Number of visible text rows. */\n\treadonly rows = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Number of visible columns. When set, the textarea stops stretching to full width. */\n\treadonly cols = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Maximum number of characters. Drives both the native limit and the counter. */\n\treadonly maxlength = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Whether the textarea grows to fit its content. */\n\treadonly autoresize = input(false, { transform: booleanAttribute });\n\n\t/** Whether to show a character counter below the control. */\n\treadonly counter = input(false, { transform: booleanAttribute });\n\n\t/** Whether the textarea is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported in the MVP. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Current character counter text (e.g. `12 / 280`). */\n\tprotected readonly counterText = computed<string>(() => {\n\t\tconst length = (this._value() ?? '').length;\n\t\tconst max = this.maxlength();\n\n\t\treturn max != null ? `${length} / ${max}` : `${length}`;\n\t});\n\n\twriteValue(value: string | null): void {\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Updates the value from the textarea and propagates it to the form and outputs.\n\t *\n\t * @param value - The new textarea value.\n\t */\n\tsetValue(value: string): void {\n\t\tthis._value.set(value ?? '');\n\t\tthis.updateNativeErrors(this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`));\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-textarea\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\tclass=\"hub-textarea__group\"\n\t\t\t[class.hub-textarea__group--has-prepend]=\"hasPrepend()\"\n\t\t\t[class.hub-textarea__group--has-append]=\"hasAppend()\"\n\t\t>\n\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-textarea__attached hub-textarea__attached--prepend\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t<span class=\"hub-textarea__addon hub-textarea__addon--prepend\">{{ addon }}</span>\n\t\t\t}\n\t\t\t<textarea\n\t\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[id]=\"id\"\n\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t[ngModel]=\"_value()\"\n\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t[attr.rows]=\"rows()\"\n\t\t\t[attr.cols]=\"cols()\"\n\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[readonly]=\"readonly()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[style.width]=\"cols() ? 'auto' : '100%'\"\n\t\t\t></textarea>\n\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t<span class=\"hub-textarea__addon hub-textarea__addon--append\">{{ addon }}</span>\n\t\t\t}\n\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-textarea__attached hub-textarea__attached--append\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (counter()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Value of `<hub-slider>`: a number in single mode, a `[lower, upper]` tuple in range mode. */\nexport type HubSliderValue = number | [number, number];\n\n/**\n * Accessible numeric slider with an optional value bubble. Supports a single thumb or a\n * **dual-thumb range** (`range`), whose value is a `[lower, upper]` tuple.\n *\n * Shares the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}. The filled track and bubbles are\n * positioned from the `--hub-slider-from` / `--hub-slider-to` percentages.\n *\n * @example\n * ```html\n * <hub-slider formControlName=\"volume\" label=\"Volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n * <hub-slider formControlName=\"price\" label=\"Price\" [range]=\"true\" [min]=\"0\" [max]=\"1000\" />\n * ```\n */\n@Component({\n\tselector: 'hub-slider',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './slider.component.html',\n\tstyleUrl: './slider.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-slider-host]': 'true'\n\t}\n})\nexport class HubSliderComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubSliderValue>(0);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Whether the slider selects a `[lower, upper]` range with two thumbs. */\n\treadonly range = input(false, { transform: booleanAttribute });\n\n\t/** Minimum value. */\n\treadonly min = input<number, string | number>(0, { transform: numberAttribute });\n\n\t/** Maximum value. */\n\treadonly max = input<number, string | number>(100, { transform: numberAttribute });\n\n\t/** Step increment. */\n\treadonly step = input<number, string | number>(1, { transform: numberAttribute });\n\n\t/** Whether to show the value bubble(s) above the thumb(s). */\n\treadonly showValue = input(true, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubSliderValue>();\n\n\t/** Current single value (single mode). */\n\tprotected readonly single = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : v;\n\t});\n\n\t/** Lower bound of the current range (range mode). */\n\tprotected readonly lower = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : this.min();\n\t});\n\n\t/** Upper bound of the current range (range mode). */\n\tprotected readonly upper = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[1] : this.max();\n\t});\n\n\t/** Single-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly percent = computed<number>(() => this.#toPercent(this.single()));\n\n\t/** Lower-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly lowerPercent = computed<number>(() => this.#toPercent(this.lower()));\n\n\t/** Upper-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly upperPercent = computed<number>(() => this.#toPercent(this.upper()));\n\n\twriteValue(value: HubSliderValue | null): void {\n\t\tif (this.range()) {\n\t\t\tconst tuple = Array.isArray(value) ? value : [this.min(), this.max()];\n\t\t\tthis._value.set([+tuple[0], +tuple[1]]);\n\t\t} else {\n\t\t\tthis._value.set(+((value as number) ?? 0));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the single value and propagates it.\n\t *\n\t * @param value - The new value (string from the DOM or number).\n\t */\n\tsetValue(value: string | number): void {\n\t\tthis.#emit(+value);\n\t}\n\n\t/**\n\t * Updates the lower thumb (clamped not to cross the upper thumb).\n\t *\n\t * @param value - The new lower value.\n\t */\n\tsetLower(value: string | number): void {\n\t\tconst next = Math.min(+value, this.upper());\n\t\tthis.#emit([next, this.upper()]);\n\t}\n\n\t/**\n\t * Updates the upper thumb (clamped not to cross the lower thumb).\n\t *\n\t * @param value - The new upper value.\n\t */\n\tsetUpper(value: string | number): void {\n\t\tconst next = Math.max(+value, this.lower());\n\t\tthis.#emit([this.lower(), next]);\n\t}\n\n\t#emit(value: HubSliderValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t#toPercent(value: number): number {\n\t\tconst span = this.max() - this.min();\n\t\tconst ratio = span === 0 ? 0 : ((value - this.min()) / span) * 100;\n\n\t\treturn Math.min(100, Math.max(0, ratio));\n\t}\n}\n","<div\n\tclass=\"hub-field hub-slider\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n\t[style.--hub-slider-percent]=\"percent()\"\n\t[style.--hub-slider-from]=\"lowerPercent()\"\n\t[style.--hub-slider-to]=\"upperPercent()\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div\n\t\tclass=\"hub-field__body hub-slider__range\"\n\t\t[class.hub-slider__range--dual]=\"range()\"\n\t\t[class.hub-slider__range--flush]=\"!showValue()\"\n\t>\n\t\t@if (range()) {\n\t\t\t<div class=\"hub-slider__rail\" aria-hidden=\"true\"></div>\n\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--lower\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"lower()\"\n\t\t\t\t(input)=\"setLower($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range start\"\n\t\t\t\t[attr.aria-valuetext]=\"lower()\"\n\t\t\t/>\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--upper\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"upper()\"\n\t\t\t\t(input)=\"setUpper($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range end\"\n\t\t\t\t[attr.aria-valuetext]=\"upper()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--lower\" aria-hidden=\"true\">{{ lower() }}</span>\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--upper\" aria-hidden=\"true\">{{ upper() }}</span>\n\t\t\t}\n\t\t} @else {\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"single()\"\n\t\t\t\t(input)=\"setValue($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-valuetext]=\"single()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble\" aria-hidden=\"true\">{{ single() }}</span>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubSegmentedOption } from '../components/segmented/segmented.component';\n\n/** Context handed to a projected `hubSegmentedOption` template. */\nexport interface HubSegmentedOptionContext {\n\t/** The option being rendered. */\n\t$implicit: HubSegmentedOption;\n\t/** Whether the option is currently selected. */\n\tselected: boolean;\n\t/** Position of the option within the control. */\n\tindex: number;\n}\n\n/**\n * Replaces the rendering of each option's content in `<hub-segmented>`.\n *\n * By default a segment renders its `label` as plain text; this template takes over the\n * inside of the segment button (icons, badges, rich markup) while the component keeps\n * owning selection state, keyboard navigation and ARIA semantics.\n *\n * @example\n * ```html\n * <hub-segmented formControlName=\"view\" [options]=\"views\">\n * <ng-template hubSegmentedOption let-option let-selected=\"selected\">\n * <hub-icon [name]=\"option.value\" [label]=\"option.label\" />\n * {{ option.label }}\n * </ng-template>\n * </hub-segmented>\n * ```\n */\n@Directive({\n\tselector: '[hubSegmentedOption]'\n})\nexport class HubSegmentedOptionDirective {\n\t/** Template reference for the option content. */\n\treadonly template = inject<TemplateRef<HubSegmentedOptionContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-option` and the extra bindings.\n\t */\n\tstatic ngTemplateContextGuard(\n\t\t_directive: HubSegmentedOptionDirective,\n\t\t_context: unknown\n\t): _context is HubSegmentedOptionContext {\n\t\treturn true;\n\t}\n}\n","import {\n\tafterNextRender,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tPLATFORM_ID,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubSegmentedOptionDirective } from '../../directives/segmented-option.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { resolveHubAccent } from 'ng-hub-ui-utils';\n\n/** A single choice rendered by {@link HubSegmentedComponent}. */\nexport interface HubSegmentedOption {\n\t/** Value written to the form control when this option is selected. */\n\tvalue: unknown;\n\t/** Visible label for the segment. */\n\tlabel: string;\n\t/** When `true`, the segment is rendered but cannot be selected. */\n\tdisabled?: boolean;\n}\n\n/** Density of the segmented control. */\nexport type HubSegmentedSize = 'sm' | 'md' | 'lg';\n\n/**\n * Segmented button bar (`hub-segmented`): a compact group of 2..n options rendered as an inline\n * (or vertical) segmented control. A full `ng-hub-ui-forms` field — it extends\n * {@link HubFieldControl}, so it binds with `formControlName` / `ngModel` and shares the label,\n * helper text and validation chrome with every other field.\n *\n * Two selection modes:\n * - **single** (default): exclusive choice following the WAI-ARIA radiogroup pattern\n * (`role=\"radiogroup\"` wrapping `role=\"radio\"` buttons). Arrow keys move focus **and** select.\n * The value is the scalar of the chosen option.\n * - **multiple** (`[multiple]=\"true\"`): a toggle group (`role=\"group\"` wrapping\n * `aria-pressed` buttons). Clicking toggles membership; arrow keys only move focus.\n * The value is an array of the selected option values.\n *\n * ```html\n * <hub-segmented\n * formControlName=\"view\"\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'grid', label: 'Grid' }]\"\n * />\n *\n * <hub-segmented formControlName=\"tags\" [multiple]=\"true\" [vertical]=\"true\" [options]=\"tags\" />\n * ```\n */\n@Component({\n\tselector: 'hub-segmented',\n\tstandalone: true,\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './segmented.component.html',\n\tstyleUrl: './segmented.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-segmented-host]': 'true'\n\t}\n})\nexport class HubSegmentedComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\n\t/** The selectable options, in render order. */\n\treadonly options = input<HubSegmentedOption[]>([]);\n\n\t/** Optional `hubSegmentedOption` template replacing each option's content. */\n\tprotected readonly optionTpt = contentChild(HubSegmentedOptionDirective);\n\n\t/** Visual density. */\n\treadonly size = input<HubSegmentedSize>('md');\n\n\t/**\n\t * Accent for the selected pill. Accepts ANY colour value:\n\t * - a built-in semantic name (`primary`, `success`, …) or any registered accent → resolves to\n\t * the matching `--hub-sys-color-*` design-system token;\n\t * - a literal colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `rebeccapurple`) → used as-is.\n\t * Both the sliding indicator and the multiple-mode pill follow it, and the selected label gets a\n\t * derived contrast colour automatically. Empty string (default) keeps the neutral white-pill look.\n\t */\n\treadonly color = input<string>('');\n\n\t/**\n\t * Resolves {@link color} to a paintable accent for the `--hub-segmented-accent` slot: a bareword\n\t * becomes a `--hub-sys-color-*` token with the word as raw fallback (so named CSS colours work\n\t * too), while a literal `#hex` / `rgb()` / `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly accentVar = computed<string | null>(() => resolveHubAccent(this.color()));\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** When `true`, options toggle independently and the value is an array. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** When `true`, the segments stack vertically instead of sitting in a row. */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Currently selected value — a scalar in single mode, an array in multiple mode. */\n\treadonly value = model<unknown>();\n\n\t/** The rendered option buttons, used to move focus during keyboard navigation. */\n\tprivate readonly _buttons = viewChildren<ElementRef<HTMLButtonElement>>('optionButton');\n\n\t/** The segmented bar element — the positioning context for the sliding indicator. */\n\tprivate readonly _bar = viewChild<ElementRef<HTMLElement>>('segmentedBar');\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// The sliding indicator is a browser-only affordance (it measures rendered geometry) and\n\t\t// applies to single mode only. Guard SSR so no DOM reads happen off the browser.\n\t\tif (this._isBrowser) {\n\t\t\t// Re-measure whenever anything that moves or resizes the selected pill changes.\n\t\t\tafterRenderEffect(() => {\n\t\t\t\t// Track the geometry-affecting state so the effect re-runs on any of them.\n\t\t\t\tthis.value();\n\t\t\t\tthis.options();\n\t\t\t\tthis.size();\n\t\t\t\tthis.vertical();\n\t\t\t\tthis.multiple();\n\t\t\t\tthis._buttons();\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\n\t\t\t// Initial placement plus a ResizeObserver so the pill follows layout/reflow changes\n\t\t\t// (container resize, font swaps, wrapping) that no signal reports.\n\t\t\tafterNextRender(() => {\n\t\t\t\tconst bar = this._bar()?.nativeElement;\n\t\t\t\tif (!bar) return;\n\n\t\t\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\t\t\tconst observer = new ResizeObserver(() => this.updateIndicator());\n\t\t\t\t\tobserver.observe(bar);\n\t\t\t\t\tthis._destroyRef.onDestroy(() => observer.disconnect());\n\t\t\t\t}\n\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Index of the option that owns the group's tab stop (roving tabindex): the first selected\n\t * option, or the first enabled option when nothing is selected yet.\n\t */\n\treadonly rovingIndex = computed<number>(() => {\n\t\tconst options = this.options();\n\t\tconst selected = options.findIndex((option) => this.isSelected(option));\n\t\tif (selected >= 0) return selected;\n\t\treturn options.findIndex((option) => !option.disabled);\n\t});\n\n\t/** Whether the given option is currently selected (mode-aware). */\n\tisSelected(option: HubSegmentedOption): boolean {\n\t\tif (this.multiple()) {\n\t\t\tconst current = this.value();\n\t\t\treturn Array.isArray(current) && current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t}\n\n\t\treturn this.#isSameValue(option.value, this.value());\n\t}\n\n\t/**\n\t * Selects (single) or toggles (multiple) an option and notifies the form. No-op when the\n\t * control or the option is disabled.\n\t */\n\tselect(option: HubSegmentedOption): void {\n\t\tif (this.disabled() || option.disabled) return;\n\n\t\tif (this.multiple()) {\n\t\t\tconst current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n\t\t\tconst exists = current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t\tconst next = exists\n\t\t\t\t? current.filter((entry) => !this.#isSameValue(entry, option.value))\n\t\t\t\t: [...current, option.value];\n\t\t\tthis.value.set(next);\n\t\t\tthis.onChange(next);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#isSameValue(option.value, this.value())) return;\n\t\tthis.value.set(option.value);\n\t\tthis.onChange(option.value);\n\t}\n\n\t/**\n\t * Keyboard navigation. In single mode the arrow keys move to (and select) the next / previous\n\t * enabled option (radiogroup pattern); in multiple mode they only move focus and selection is\n\t * left to the native button click (`Space` / `Enter`). `Home` / `End` jump to the first / last\n\t * enabled option.\n\t */\n\tonKeydown(event: KeyboardEvent): void {\n\t\tif (this.disabled()) return;\n\t\tconst options = this.options();\n\t\tif (options.length === 0) return;\n\n\t\tconst current = this.rovingIndex();\n\t\tlet target: number | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#nextEnabled(current, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#nextEnabled(current, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#nextEnabled(-1, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#nextEnabled(options.length, -1);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (target === null) return;\n\t\tevent.preventDefault();\n\n\t\tif (!this.multiple()) {\n\t\t\tthis.select(options[target]);\n\t\t}\n\n\t\tthis._buttons()[target]?.nativeElement.focus();\n\t}\n\n\t/** Writes an incoming value from the form model (coerces to an array in multiple mode). */\n\toverride writeValue(value: unknown): void {\n\t\tif (this.multiple()) {\n\t\t\tthis.value.set(Array.isArray(value) ? value : []);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(value);\n\t}\n\n\t/**\n\t * Measures the selected option (single mode) and writes its position and size onto the bar as\n\t * `--hub-segmented-indicator-{x,y,width,height}` px custom properties, which the sliding\n\t * indicator reads. Collapses the indicator (width/height 0) in multiple mode or when nothing is\n\t * selected. Browser-only — invoked from `afterRenderEffect` / `afterNextRender` / the\n\t * `ResizeObserver`, so the DOM is always up to date when it runs.\n\t */\n\tprivate updateIndicator(): void {\n\t\tconst bar = this._bar()?.nativeElement;\n\t\tif (!bar) return;\n\n\t\tconst collapse = (): void => {\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-width', '0px');\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-height', '0px');\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.options().findIndex((option) => this.isSelected(option));\n\t\tconst button = index >= 0 ? this._buttons()[index]?.nativeElement : undefined;\n\n\t\tif (!button) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tbar.style.setProperty('--hub-segmented-indicator-x', `${button.offsetLeft}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-y', `${button.offsetTop}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-width', `${button.offsetWidth}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-height', `${button.offsetHeight}px`);\n\t}\n\n\t/**\n\t * Finds the next enabled option starting from `from`, moving in `step` direction.\n\t * Wraps around the ends and returns `null` when no enabled option exists.\n\t */\n\t#nextEnabled(from: number, step: number): number | null {\n\t\tconst options = this.options();\n\t\tconst count = options.length;\n\t\tfor (let offset = 1; offset <= count; offset++) {\n\t\t\tconst index = (((from + step * offset) % count) + count) % count;\n\t\t\tif (!options[index].disabled) return index;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Value equality used across selection — reference / `Object.is` semantics. */\n\t#isSameValue(a: unknown, b: unknown): boolean {\n\t\treturn Object.is(a, b);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-segmented-field\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\t#segmentedBar\n\t\t\t[id]=\"id\"\n\t\t\tclass=\"hub-segmented\"\n\t\t\t[class.hub-segmented--sm]=\"size() === 'sm'\"\n\t\t\t[class.hub-segmented--lg]=\"size() === 'lg'\"\n\t\t\t[class.hub-segmented--vertical]=\"vertical()\"\n\t\t\t[class.hub-segmented--multiple]=\"multiple()\"\n\t\t\t[class.hub-segmented--disabled]=\"disabled()\"\n\t\t\t[attr.data-variant]=\"color() || null\"\n\t\t\t[style.--hub-segmented-accent]=\"accentVar()\"\n\t\t\t[attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n\t\t\t[attr.aria-required]=\"multiple() ? null : required() ? 'true' : null\"\n\t\t\t[attr.aria-disabled]=\"disabled() ? 'true' : null\"\n\t\t\t(keydown)=\"onKeydown($event)\"\n\t\t>\n\t\t\t@if (!multiple()) {\n\t\t\t\t<span class=\"hub-segmented__indicator\" aria-hidden=\"true\"></span>\n\t\t\t}\n\n\t\t\t@for (option of options(); track option.value; let index = $index) {\n\t\t\t\t<button\n\t\t\t\t\t#optionButton\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-segmented__option\"\n\t\t\t\t\t[class.hub-segmented__option--selected]=\"isSelected(option)\"\n\t\t\t\t\t[attr.role]=\"multiple() ? null : 'radio'\"\n\t\t\t\t\t[attr.aria-checked]=\"multiple() ? null : isSelected(option)\"\n\t\t\t\t\t[attr.aria-pressed]=\"multiple() ? isSelected(option) : null\"\n\t\t\t\t\t[disabled]=\"disabled() || !!option.disabled\"\n\t\t\t\t\t[tabindex]=\"rovingIndex() === index ? 0 : -1\"\n\t\t\t\t\t(click)=\"select(option)\"\n\t\t\t\t>\n\t\t\t\t\t@if (optionTpt(); as tpt) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: option, selected: isSelected(option), index }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the legend content of a `<hub-fieldset>`.\n *\n * @example\n * ```html\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n * ```\n */\n@Directive({\n\tselector: '[hubLegend]'\n})\nexport class HubLegendDirective {\n\t/** Template reference for the legend content. */\n\treadonly template = inject(TemplateRef);\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, contentChild, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Groups related fields under a `<fieldset>`/`<legend>` and **automatically displays the\n * group-level (cross-field) validation errors** of the bound `FormGroup`/`FormArray`.\n *\n * Bind the target group explicitly with `[group]` (recommended) or by `groupName` resolved from the\n * parent container. Errors set on the group itself — e.g. by `hubAreEqual` — are rendered without\n * any extra wiring, mirroring how the field components show control-level errors.\n *\n * @example\n * ```html\n * <hub-fieldset legend=\"Credentials\" [group]=\"form.controls.credentials\">\n * <hub-input formControlName=\"password\" type=\"password\" label=\"Password\" />\n * <hub-input formControlName=\"confirm\" type=\"password\" label=\"Confirm\" />\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './fieldset.component.html',\n\tstyleUrl: './fieldset.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-fieldset-host]': 'true'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/** Legend text. Ignored when a `hubLegend` template is projected. */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Query for a projected `hubLegend` template. */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n}\n","<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t@if (legend() || legendTmp()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t@if (legendTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"legendTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ legend() }}\n\t\t\t}\n\t\t</legend>\n\t}\n\n\t<div class=\"hub-fieldset__content\">\n\t\t<ng-content></ng-content>\n\t</div>\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</fieldset>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Applied to a reactive `<form [formGroup]>`, **automatically displays the form-level validation\n * errors** (cross-field errors set on the root group) and centralizes submit handling.\n *\n * Because it sits on the same host as the `formGroup` directive, projected `formControlName` fields\n * resolve their control normally — no extra wiring. On submit it prevents the default navigation,\n * marks the whole tree as touched (so every field reveals its errors) and reveals the form-level\n * errors. Bind the form's own `(submit)` event for your handler — there is no custom output, which\n * keeps the API idiomatic and avoids the double-emit you get when a directive output shadows the\n * native `submit` event on a `<form>`.\n *\n * @example\n * ```html\n * <form [formGroup]=\"form\" hubForm (submit)=\"save()\">\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <button type=\"submit\">Save</button>\n * </form>\n * ```\n */\n@Component({\n\tselector: 'form[hubForm]',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-form-host]': 'true',\n\t\t'[class.hub-form--invalid]': 'isInvalid',\n\t\t'(submit)': 'handleSubmit($event)'\n\t}\n})\nexport class HubFormComponent extends HubGroupControl {\n\t/**\n\t * Augments the native form submit: prevents the default navigation, marks the tree as touched\n\t * and flips the submitted state so form-level errors appear. The consumer's own `(submit)`\n\t * binding still fires for their handler.\n\t *\n\t * @param event - The native submit event.\n\t */\n\tprotected handleSubmit(event: Event): void {\n\t\tevent.preventDefault();\n\t\tthis._control()?.markAllAsTouched();\n\t\tthis._submitted.set(true);\n\t}\n}\n","<ng-content></ng-content>\n\n@if (isInvalid) {\n\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t<ul>\n\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t<li>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</li>\n\t\t\t}\n\t\t</ul>\n\t</div>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Presentational legend for a `<hub-fieldset>` (or any grouped section), with optional\n * required/invalid state styling.\n *\n * Use it inside a `hubLegend` template, or standalone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <ng-template hubLegend>\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\n * </ng-template>\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-legend',\n\ttemplate: `<span class=\"hub-legend\" [class.hub-legend--invalid]=\"invalid()\">\n\t\t<ng-content></ng-content>\n\t\t@if (required()) {\n\t\t\t<span class=\"hub-legend__required\" aria-hidden=\"true\">*</span>\n\t\t}\n\t</span>`,\n\tstyleUrl: './legend.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { '[class.hub-legend-host]': 'true' }\n})\nexport class HubLegendComponent {\n\t/** Whether to render the required indicator. */\n\treadonly required = input(false, { transform: booleanAttribute });\n\n\t/** Whether to render the invalid state styling. */\n\treadonly invalid = input(false, { transform: booleanAttribute });\n}\n","/**\n * Rendering formats for `<hub-select>`.\n *\n * - `dropdown` — the ng-select engine (search, virtual scroll, tags…).\n * - `buttons` — a toggle-button group (single or multiple, per `multiple`).\n * - `checkbox` — a list of checkboxes (always multiple).\n * - `radio` — a list of radios (always single).\n */\nexport type HubSelectFormat = 'dropdown' | 'buttons' | 'checkbox' | 'radio';\n\n/**\n * Enum mirror of {@link HubSelectFormat} for ergonomic template usage.\n */\nexport enum HubSelectFormats {\n\tDropdown = 'dropdown',\n\tButtons = 'buttons',\n\tCheckbox = 'checkbox',\n\tRadio = 'radio'\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks the action **attached to the inline-end edge** of a `<hub-select>` (right in LTR,\n * left in RTL) — a button that acts on whatever is selected: configure it, look it up,\n * create a new one.\n *\n * Deliberately not the same slot as `[hubInputSuffix]`. An input's affix sits *inside*\n * the box, which is right for an icon or a unit but wrong for a control: inside a select\n * it would compete for the same corner as the dropdown arrow and the clear button, and a\n * click landing on the wrong one of the three opens a panel when somebody meant to open a\n * dialog. This one is attached outside the box and shares its border, so the two read as\n * one field with an action on it.\n *\n * Declared as a template rather than projected content because the select's catch-all\n * `<ng-content>` — which carries `<ng-option>` through to the engine — is declared first\n * and would swallow it. Rendering from a template also keeps the action after the control\n * in the DOM, so tabbing reaches the field before the button acting on it.\n *\n * ```html\n * <hub-select [items]=\"products\">\n * <ng-template hubSelectSuffix>\n * <button hubButton variant=\"outline\" color=\"neutral\" (click)=\"configure()\">\n * <hub-icon name=\"pencil-simple\" />\n * </button>\n * </ng-template>\n * </hub-select>\n * ```\n *\n * @deprecated since 22.16.0 — use `[hubAppend]`, which does the same thing on every field that\n * takes one rather than only on the select. Shipped in 22.15.0 and superseded one release later:\n * generalising the slot left the select with two names for one concept, and retiring the narrower\n * one now costs less than documenting the difference forever. This keeps working and renders\n * through the same slot; `[hubAppend]` wins if both are present.\n */\n@Directive({ selector: '[hubSelectSuffix]' })\nexport class HubSelectSuffixDirective {}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst unescapedHTMLExp = /[&<>\"']/g;\nconst hasUnescapedHTMLExp = RegExp(unescapedHTMLExp.source);\nconst htmlEscapes = {\n\t'&': '&amp;',\n\t'<': '&lt;',\n\t'>': '&gt;',\n\t'\"': '&quot;',\n\t\"'\": '&#39;',\n};\n\nexport function escapeHTML(value: string) {\n\treturn value && hasUnescapedHTMLExp.test(value) ? value.replace(unescapedHTMLExp, (chr) => htmlEscapes[chr]) : value;\n}\n\nexport function isDefined(value: any) {\n\treturn value !== undefined && value !== null;\n}\n\nexport function isObject(value: any) {\n\treturn typeof value === 'object' && isDefined(value);\n}\n\nexport function isPromise(value: any) {\n\treturn value instanceof Promise;\n}\n\nexport function isFunction(value: any) {\n\treturn value instanceof Function;\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Directive, effect, ElementRef, inject, input, TemplateRef } from '@angular/core';\nimport { escapeHTML } from './value-utils';\n\n@Directive({\n\tselector: '[ngItemLabel]',\n\tstandalone: true,\n})\nexport class NgItemLabelDirective {\n\tprivate element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tngItemLabel = input<string>();\n\tescape = input(true);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.element.nativeElement.innerHTML = this.escape()\n\t\t\t\t? escapeHTML(this.ngItemLabel())\n\t\t\t\t: this.ngItemLabel();\n\t\t})\n\t}\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-option-tmp]',\n\tstandalone: true,\n})\nexport class NgOptionTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-optgroup-tmp]',\n\tstandalone: true,\n})\nexport class NgOptgroupTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-label-tmp]',\n\tstandalone: true,\n})\nexport class NgLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-multi-label-tmp]',\n\tstandalone: true,\n})\nexport class NgMultiLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-header-tmp]',\n\tstandalone: true,\n})\nexport class NgHeaderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-footer-tmp]',\n\tstandalone: true,\n})\nexport class NgFooterTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-notfound-tmp]',\n\tstandalone: true,\n})\nexport class NgNotFoundTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-placeholder-tmp]',\n\tstandalone: true,\n})\nexport class NgPlaceholderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-typetosearch-tmp]',\n\tstandalone: true,\n})\nexport class NgTypeToSearchTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingtext-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingTextTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-tag-tmp]',\n\tstandalone: true,\n})\nexport class NgTagTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingspinner-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingSpinnerTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ng-clearbutton-tmp]', standalone: true })\nexport class NgClearButtonTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n\tplaceholder: string;\n\tfixedPlaceholder = true;\n\tnotFoundText = 'No items found';\n\ttypeToSearchText = 'Type to search';\n\taddTagText = 'Add item';\n\tloadingText = 'Loading...';\n\tclearAllText = 'Clear all';\n\tariaLabelDropdown = 'Options List';\n\tdisableVirtualScroll = true;\n\topenOnEnter = true;\n\tappendTo: string;\n\tbindValue: string;\n\tbindLabel: string;\n\tappearance = 'underline';\n\tclearSearchOnAdd: boolean;\n\tdeselectOnClick: boolean;\n\ttabFocusOnClear = true;\n\t/**\n\t * Controls which DOM event is used to detect outside clicks for closing the dropdown.\n\t * Defaults to 'click'. Set to 'mousedown' to handle early outside interactions\n\t * (useful when backdrops load on click and would otherwise close the dropdown).\n\t */\n\toutsideClickEvent: 'click' | 'mousedown' = 'click';\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\twarn(message: string) {\n\t\tconsole.warn(message);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport function newId() {\n\t// First character is an 'a', it's good practice to tag id to begin with a letter\n\treturn 'axxxxxxxxxxx'.replace(/[x]/g, () => {\n\t\tconst val = (Math.random() * 16) | 0;\n\t\treturn val.toString(16);\n\t});\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst diacritics = {\n\t'\\u24B6': 'A',\n\t'\\uFF21': 'A',\n\t'\\u00C0': 'A',\n\t'\\u00C1': 'A',\n\t'\\u00C2': 'A',\n\t'\\u1EA6': 'A',\n\t'\\u1EA4': 'A',\n\t'\\u1EAA': 'A',\n\t'\\u1EA8': 'A',\n\t'\\u00C3': 'A',\n\t'\\u0100': 'A',\n\t'\\u0102': 'A',\n\t'\\u1EB0': 'A',\n\t'\\u1EAE': 'A',\n\t'\\u1EB4': 'A',\n\t'\\u1EB2': 'A',\n\t'\\u0226': 'A',\n\t'\\u01E0': 'A',\n\t'\\u00C4': 'A',\n\t'\\u01DE': 'A',\n\t'\\u1EA2': 'A',\n\t'\\u00C5': 'A',\n\t'\\u01FA': 'A',\n\t'\\u01CD': 'A',\n\t'\\u0200': 'A',\n\t'\\u0202': 'A',\n\t'\\u1EA0': 'A',\n\t'\\u1EAC': 'A',\n\t'\\u1EB6': 'A',\n\t'\\u1E00': 'A',\n\t'\\u0104': 'A',\n\t'\\u023A': 'A',\n\t'\\u2C6F': 'A',\n\t'\\uA732': 'AA',\n\t'\\u00C6': 'AE',\n\t'\\u01FC': 'AE',\n\t'\\u01E2': 'AE',\n\t'\\uA734': 'AO',\n\t'\\uA736': 'AU',\n\t'\\uA738': 'AV',\n\t'\\uA73A': 'AV',\n\t'\\uA73C': 'AY',\n\t'\\u24B7': 'B',\n\t'\\uFF22': 'B',\n\t'\\u1E02': 'B',\n\t'\\u1E04': 'B',\n\t'\\u1E06': 'B',\n\t'\\u0243': 'B',\n\t'\\u0182': 'B',\n\t'\\u0181': 'B',\n\t'\\u24B8': 'C',\n\t'\\uFF23': 'C',\n\t'\\u0106': 'C',\n\t'\\u0108': 'C',\n\t'\\u010A': 'C',\n\t'\\u010C': 'C',\n\t'\\u00C7': 'C',\n\t'\\u1E08': 'C',\n\t'\\u0187': 'C',\n\t'\\u023B': 'C',\n\t'\\uA73E': 'C',\n\t'\\u24B9': 'D',\n\t'\\uFF24': 'D',\n\t'\\u1E0A': 'D',\n\t'\\u010E': 'D',\n\t'\\u1E0C': 'D',\n\t'\\u1E10': 'D',\n\t'\\u1E12': 'D',\n\t'\\u1E0E': 'D',\n\t'\\u0110': 'D',\n\t'\\u018B': 'D',\n\t'\\u018A': 'D',\n\t'\\u0189': 'D',\n\t'\\uA779': 'D',\n\t'\\u01F1': 'DZ',\n\t'\\u01C4': 'DZ',\n\t'\\u01F2': 'Dz',\n\t'\\u01C5': 'Dz',\n\t'\\u24BA': 'E',\n\t'\\uFF25': 'E',\n\t'\\u00C8': 'E',\n\t'\\u00C9': 'E',\n\t'\\u00CA': 'E',\n\t'\\u1EC0': 'E',\n\t'\\u1EBE': 'E',\n\t'\\u1EC4': 'E',\n\t'\\u1EC2': 'E',\n\t'\\u1EBC': 'E',\n\t'\\u0112': 'E',\n\t'\\u1E14': 'E',\n\t'\\u1E16': 'E',\n\t'\\u0114': 'E',\n\t'\\u0116': 'E',\n\t'\\u00CB': 'E',\n\t'\\u1EBA': 'E',\n\t'\\u011A': 'E',\n\t'\\u0204': 'E',\n\t'\\u0206': 'E',\n\t'\\u1EB8': 'E',\n\t'\\u1EC6': 'E',\n\t'\\u0228': 'E',\n\t'\\u1E1C': 'E',\n\t'\\u0118': 'E',\n\t'\\u1E18': 'E',\n\t'\\u1E1A': 'E',\n\t'\\u0190': 'E',\n\t'\\u018E': 'E',\n\t'\\u24BB': 'F',\n\t'\\uFF26': 'F',\n\t'\\u1E1E': 'F',\n\t'\\u0191': 'F',\n\t'\\uA77B': 'F',\n\t'\\u24BC': 'G',\n\t'\\uFF27': 'G',\n\t'\\u01F4': 'G',\n\t'\\u011C': 'G',\n\t'\\u1E20': 'G',\n\t'\\u011E': 'G',\n\t'\\u0120': 'G',\n\t'\\u01E6': 'G',\n\t'\\u0122': 'G',\n\t'\\u01E4': 'G',\n\t'\\u0193': 'G',\n\t'\\uA7A0': 'G',\n\t'\\uA77D': 'G',\n\t'\\uA77E': 'G',\n\t'\\u24BD': 'H',\n\t'\\uFF28': 'H',\n\t'\\u0124': 'H',\n\t'\\u1E22': 'H',\n\t'\\u1E26': 'H',\n\t'\\u021E': 'H',\n\t'\\u1E24': 'H',\n\t'\\u1E28': 'H',\n\t'\\u1E2A': 'H',\n\t'\\u0126': 'H',\n\t'\\u2C67': 'H',\n\t'\\u2C75': 'H',\n\t'\\uA78D': 'H',\n\t'\\u24BE': 'I',\n\t'\\uFF29': 'I',\n\t'\\u00CC': 'I',\n\t'\\u00CD': 'I',\n\t'\\u00CE': 'I',\n\t'\\u0128': 'I',\n\t'\\u012A': 'I',\n\t'\\u012C': 'I',\n\t'\\u0130': 'I',\n\t'\\u00CF': 'I',\n\t'\\u1E2E': 'I',\n\t'\\u1EC8': 'I',\n\t'\\u01CF': 'I',\n\t'\\u0208': 'I',\n\t'\\u020A': 'I',\n\t'\\u1ECA': 'I',\n\t'\\u012E': 'I',\n\t'\\u1E2C': 'I',\n\t'\\u0197': 'I',\n\t'\\u24BF': 'J',\n\t'\\uFF2A': 'J',\n\t'\\u0134': 'J',\n\t'\\u0248': 'J',\n\t'\\u24C0': 'K',\n\t'\\uFF2B': 'K',\n\t'\\u1E30': 'K',\n\t'\\u01E8': 'K',\n\t'\\u1E32': 'K',\n\t'\\u0136': 'K',\n\t'\\u1E34': 'K',\n\t'\\u0198': 'K',\n\t'\\u2C69': 'K',\n\t'\\uA740': 'K',\n\t'\\uA742': 'K',\n\t'\\uA744': 'K',\n\t'\\uA7A2': 'K',\n\t'\\u24C1': 'L',\n\t'\\uFF2C': 'L',\n\t'\\u013F': 'L',\n\t'\\u0139': 'L',\n\t'\\u013D': 'L',\n\t'\\u1E36': 'L',\n\t'\\u1E38': 'L',\n\t'\\u013B': 'L',\n\t'\\u1E3C': 'L',\n\t'\\u1E3A': 'L',\n\t'\\u0141': 'L',\n\t'\\u023D': 'L',\n\t'\\u2C62': 'L',\n\t'\\u2C60': 'L',\n\t'\\uA748': 'L',\n\t'\\uA746': 'L',\n\t'\\uA780': 'L',\n\t'\\u01C7': 'LJ',\n\t'\\u01C8': 'Lj',\n\t'\\u24C2': 'M',\n\t'\\uFF2D': 'M',\n\t'\\u1E3E': 'M',\n\t'\\u1E40': 'M',\n\t'\\u1E42': 'M',\n\t'\\u2C6E': 'M',\n\t'\\u019C': 'M',\n\t'\\u24C3': 'N',\n\t'\\uFF2E': 'N',\n\t'\\u01F8': 'N',\n\t'\\u0143': 'N',\n\t'\\u00D1': 'N',\n\t'\\u1E44': 'N',\n\t'\\u0147': 'N',\n\t'\\u1E46': 'N',\n\t'\\u0145': 'N',\n\t'\\u1E4A': 'N',\n\t'\\u1E48': 'N',\n\t'\\u0220': 'N',\n\t'\\u019D': 'N',\n\t'\\uA790': 'N',\n\t'\\uA7A4': 'N',\n\t'\\u01CA': 'NJ',\n\t'\\u01CB': 'Nj',\n\t'\\u24C4': 'O',\n\t'\\uFF2F': 'O',\n\t'\\u00D2': 'O',\n\t'\\u00D3': 'O',\n\t'\\u00D4': 'O',\n\t'\\u1ED2': 'O',\n\t'\\u1ED0': 'O',\n\t'\\u1ED6': 'O',\n\t'\\u1ED4': 'O',\n\t'\\u00D5': 'O',\n\t'\\u1E4C': 'O',\n\t'\\u022C': 'O',\n\t'\\u1E4E': 'O',\n\t'\\u014C': 'O',\n\t'\\u1E50': 'O',\n\t'\\u1E52': 'O',\n\t'\\u014E': 'O',\n\t'\\u022E': 'O',\n\t'\\u0230': 'O',\n\t'\\u00D6': 'O',\n\t'\\u022A': 'O',\n\t'\\u1ECE': 'O',\n\t'\\u0150': 'O',\n\t'\\u01D1': 'O',\n\t'\\u020C': 'O',\n\t'\\u020E': 'O',\n\t'\\u01A0': 'O',\n\t'\\u1EDC': 'O',\n\t'\\u1EDA': 'O',\n\t'\\u1EE0': 'O',\n\t'\\u1EDE': 'O',\n\t'\\u1EE2': 'O',\n\t'\\u1ECC': 'O',\n\t'\\u1ED8': 'O',\n\t'\\u01EA': 'O',\n\t'\\u01EC': 'O',\n\t'\\u00D8': 'O',\n\t'\\u01FE': 'O',\n\t'\\u0186': 'O',\n\t'\\u019F': 'O',\n\t'\\uA74A': 'O',\n\t'\\uA74C': 'O',\n\t'\\u01A2': 'OI',\n\t'\\uA74E': 'OO',\n\t'\\u0222': 'OU',\n\t'\\u24C5': 'P',\n\t'\\uFF30': 'P',\n\t'\\u1E54': 'P',\n\t'\\u1E56': 'P',\n\t'\\u01A4': 'P',\n\t'\\u2C63': 'P',\n\t'\\uA750': 'P',\n\t'\\uA752': 'P',\n\t'\\uA754': 'P',\n\t'\\u24C6': 'Q',\n\t'\\uFF31': 'Q',\n\t'\\uA756': 'Q',\n\t'\\uA758': 'Q',\n\t'\\u024A': 'Q',\n\t'\\u24C7': 'R',\n\t'\\uFF32': 'R',\n\t'\\u0154': 'R',\n\t'\\u1E58': 'R',\n\t'\\u0158': 'R',\n\t'\\u0210': 'R',\n\t'\\u0212': 'R',\n\t'\\u1E5A': 'R',\n\t'\\u1E5C': 'R',\n\t'\\u0156': 'R',\n\t'\\u1E5E': 'R',\n\t'\\u024C': 'R',\n\t'\\u2C64': 'R',\n\t'\\uA75A': 'R',\n\t'\\uA7A6': 'R',\n\t'\\uA782': 'R',\n\t'\\u24C8': 'S',\n\t'\\uFF33': 'S',\n\t'\\u1E9E': 'S',\n\t'\\u015A': 'S',\n\t'\\u1E64': 'S',\n\t'\\u015C': 'S',\n\t'\\u1E60': 'S',\n\t'\\u0160': 'S',\n\t'\\u1E66': 'S',\n\t'\\u1E62': 'S',\n\t'\\u1E68': 'S',\n\t'\\u0218': 'S',\n\t'\\u015E': 'S',\n\t'\\u2C7E': 'S',\n\t'\\uA7A8': 'S',\n\t'\\uA784': 'S',\n\t'\\u24C9': 'T',\n\t'\\uFF34': 'T',\n\t'\\u1E6A': 'T',\n\t'\\u0164': 'T',\n\t'\\u1E6C': 'T',\n\t'\\u021A': 'T',\n\t'\\u0162': 'T',\n\t'\\u1E70': 'T',\n\t'\\u1E6E': 'T',\n\t'\\u0166': 'T',\n\t'\\u01AC': 'T',\n\t'\\u01AE': 'T',\n\t'\\u023E': 'T',\n\t'\\uA786': 'T',\n\t'\\uA728': 'TZ',\n\t'\\u24CA': 'U',\n\t'\\uFF35': 'U',\n\t'\\u00D9': 'U',\n\t'\\u00DA': 'U',\n\t'\\u00DB': 'U',\n\t'\\u0168': 'U',\n\t'\\u1E78': 'U',\n\t'\\u016A': 'U',\n\t'\\u1E7A': 'U',\n\t'\\u016C': 'U',\n\t'\\u00DC': 'U',\n\t'\\u01DB': 'U',\n\t'\\u01D7': 'U',\n\t'\\u01D5': 'U',\n\t'\\u01D9': 'U',\n\t'\\u1EE6': 'U',\n\t'\\u016E': 'U',\n\t'\\u0170': 'U',\n\t'\\u01D3': 'U',\n\t'\\u0214': 'U',\n\t'\\u0216': 'U',\n\t'\\u01AF': 'U',\n\t'\\u1EEA': 'U',\n\t'\\u1EE8': 'U',\n\t'\\u1EEE': 'U',\n\t'\\u1EEC': 'U',\n\t'\\u1EF0': 'U',\n\t'\\u1EE4': 'U',\n\t'\\u1E72': 'U',\n\t'\\u0172': 'U',\n\t'\\u1E76': 'U',\n\t'\\u1E74': 'U',\n\t'\\u0244': 'U',\n\t'\\u24CB': 'V',\n\t'\\uFF36': 'V',\n\t'\\u1E7C': 'V',\n\t'\\u1E7E': 'V',\n\t'\\u01B2': 'V',\n\t'\\uA75E': 'V',\n\t'\\u0245': 'V',\n\t'\\uA760': 'VY',\n\t'\\u24CC': 'W',\n\t'\\uFF37': 'W',\n\t'\\u1E80': 'W',\n\t'\\u1E82': 'W',\n\t'\\u0174': 'W',\n\t'\\u1E86': 'W',\n\t'\\u1E84': 'W',\n\t'\\u1E88': 'W',\n\t'\\u2C72': 'W',\n\t'\\u24CD': 'X',\n\t'\\uFF38': 'X',\n\t'\\u1E8A': 'X',\n\t'\\u1E8C': 'X',\n\t'\\u24CE': 'Y',\n\t'\\uFF39': 'Y',\n\t'\\u1EF2': 'Y',\n\t'\\u00DD': 'Y',\n\t'\\u0176': 'Y',\n\t'\\u1EF8': 'Y',\n\t'\\u0232': 'Y',\n\t'\\u1E8E': 'Y',\n\t'\\u0178': 'Y',\n\t'\\u1EF6': 'Y',\n\t'\\u1EF4': 'Y',\n\t'\\u01B3': 'Y',\n\t'\\u024E': 'Y',\n\t'\\u1EFE': 'Y',\n\t'\\u24CF': 'Z',\n\t'\\uFF3A': 'Z',\n\t'\\u0179': 'Z',\n\t'\\u1E90': 'Z',\n\t'\\u017B': 'Z',\n\t'\\u017D': 'Z',\n\t'\\u1E92': 'Z',\n\t'\\u1E94': 'Z',\n\t'\\u01B5': 'Z',\n\t'\\u0224': 'Z',\n\t'\\u2C7F': 'Z',\n\t'\\u2C6B': 'Z',\n\t'\\uA762': 'Z',\n\t'\\u24D0': 'a',\n\t'\\uFF41': 'a',\n\t'\\u1E9A': 'a',\n\t'\\u00E0': 'a',\n\t'\\u00E1': 'a',\n\t'\\u00E2': 'a',\n\t'\\u1EA7': 'a',\n\t'\\u1EA5': 'a',\n\t'\\u1EAB': 'a',\n\t'\\u1EA9': 'a',\n\t'\\u00E3': 'a',\n\t'\\u0101': 'a',\n\t'\\u0103': 'a',\n\t'\\u1EB1': 'a',\n\t'\\u1EAF': 'a',\n\t'\\u1EB5': 'a',\n\t'\\u1EB3': 'a',\n\t'\\u0227': 'a',\n\t'\\u01E1': 'a',\n\t'\\u00E4': 'a',\n\t'\\u01DF': 'a',\n\t'\\u1EA3': 'a',\n\t'\\u00E5': 'a',\n\t'\\u01FB': 'a',\n\t'\\u01CE': 'a',\n\t'\\u0201': 'a',\n\t'\\u0203': 'a',\n\t'\\u1EA1': 'a',\n\t'\\u1EAD': 'a',\n\t'\\u1EB7': 'a',\n\t'\\u1E01': 'a',\n\t'\\u0105': 'a',\n\t'\\u2C65': 'a',\n\t'\\u0250': 'a',\n\t'\\uA733': 'aa',\n\t'\\u00E6': 'ae',\n\t'\\u01FD': 'ae',\n\t'\\u01E3': 'ae',\n\t'\\uA735': 'ao',\n\t'\\uA737': 'au',\n\t'\\uA739': 'av',\n\t'\\uA73B': 'av',\n\t'\\uA73D': 'ay',\n\t'\\u24D1': 'b',\n\t'\\uFF42': 'b',\n\t'\\u1E03': 'b',\n\t'\\u1E05': 'b',\n\t'\\u1E07': 'b',\n\t'\\u0180': 'b',\n\t'\\u0183': 'b',\n\t'\\u0253': 'b',\n\t'\\u24D2': 'c',\n\t'\\uFF43': 'c',\n\t'\\u0107': 'c',\n\t'\\u0109': 'c',\n\t'\\u010B': 'c',\n\t'\\u010D': 'c',\n\t'\\u00E7': 'c',\n\t'\\u1E09': 'c',\n\t'\\u0188': 'c',\n\t'\\u023C': 'c',\n\t'\\uA73F': 'c',\n\t'\\u2184': 'c',\n\t'\\u24D3': 'd',\n\t'\\uFF44': 'd',\n\t'\\u1E0B': 'd',\n\t'\\u010F': 'd',\n\t'\\u1E0D': 'd',\n\t'\\u1E11': 'd',\n\t'\\u1E13': 'd',\n\t'\\u1E0F': 'd',\n\t'\\u0111': 'd',\n\t'\\u018C': 'd',\n\t'\\u0256': 'd',\n\t'\\u0257': 'd',\n\t'\\uA77A': 'd',\n\t'\\u01F3': 'dz',\n\t'\\u01C6': 'dz',\n\t'\\u24D4': 'e',\n\t'\\uFF45': 'e',\n\t'\\u00E8': 'e',\n\t'\\u00E9': 'e',\n\t'\\u00EA': 'e',\n\t'\\u1EC1': 'e',\n\t'\\u1EBF': 'e',\n\t'\\u1EC5': 'e',\n\t'\\u1EC3': 'e',\n\t'\\u1EBD': 'e',\n\t'\\u0113': 'e',\n\t'\\u1E15': 'e',\n\t'\\u1E17': 'e',\n\t'\\u0115': 'e',\n\t'\\u0117': 'e',\n\t'\\u00EB': 'e',\n\t'\\u1EBB': 'e',\n\t'\\u011B': 'e',\n\t'\\u0205': 'e',\n\t'\\u0207': 'e',\n\t'\\u1EB9': 'e',\n\t'\\u1EC7': 'e',\n\t'\\u0229': 'e',\n\t'\\u1E1D': 'e',\n\t'\\u0119': 'e',\n\t'\\u1E19': 'e',\n\t'\\u1E1B': 'e',\n\t'\\u0247': 'e',\n\t'\\u025B': 'e',\n\t'\\u01DD': 'e',\n\t'\\u24D5': 'f',\n\t'\\uFF46': 'f',\n\t'\\u1E1F': 'f',\n\t'\\u0192': 'f',\n\t'\\uA77C': 'f',\n\t'\\u24D6': 'g',\n\t'\\uFF47': 'g',\n\t'\\u01F5': 'g',\n\t'\\u011D': 'g',\n\t'\\u1E21': 'g',\n\t'\\u011F': 'g',\n\t'\\u0121': 'g',\n\t'\\u01E7': 'g',\n\t'\\u0123': 'g',\n\t'\\u01E5': 'g',\n\t'\\u0260': 'g',\n\t'\\uA7A1': 'g',\n\t'\\u1D79': 'g',\n\t'\\uA77F': 'g',\n\t'\\u24D7': 'h',\n\t'\\uFF48': 'h',\n\t'\\u0125': 'h',\n\t'\\u1E23': 'h',\n\t'\\u1E27': 'h',\n\t'\\u021F': 'h',\n\t'\\u1E25': 'h',\n\t'\\u1E29': 'h',\n\t'\\u1E2B': 'h',\n\t'\\u1E96': 'h',\n\t'\\u0127': 'h',\n\t'\\u2C68': 'h',\n\t'\\u2C76': 'h',\n\t'\\u0265': 'h',\n\t'\\u0195': 'hv',\n\t'\\u24D8': 'i',\n\t'\\uFF49': 'i',\n\t'\\u00EC': 'i',\n\t'\\u00ED': 'i',\n\t'\\u00EE': 'i',\n\t'\\u0129': 'i',\n\t'\\u012B': 'i',\n\t'\\u012D': 'i',\n\t'\\u00EF': 'i',\n\t'\\u1E2F': 'i',\n\t'\\u1EC9': 'i',\n\t'\\u01D0': 'i',\n\t'\\u0209': 'i',\n\t'\\u020B': 'i',\n\t'\\u1ECB': 'i',\n\t'\\u012F': 'i',\n\t'\\u1E2D': 'i',\n\t'\\u0268': 'i',\n\t'\\u0131': 'i',\n\t'\\u24D9': 'j',\n\t'\\uFF4A': 'j',\n\t'\\u0135': 'j',\n\t'\\u01F0': 'j',\n\t'\\u0249': 'j',\n\t'\\u24DA': 'k',\n\t'\\uFF4B': 'k',\n\t'\\u1E31': 'k',\n\t'\\u01E9': 'k',\n\t'\\u1E33': 'k',\n\t'\\u0137': 'k',\n\t'\\u1E35': 'k',\n\t'\\u0199': 'k',\n\t'\\u2C6A': 'k',\n\t'\\uA741': 'k',\n\t'\\uA743': 'k',\n\t'\\uA745': 'k',\n\t'\\uA7A3': 'k',\n\t'\\u24DB': 'l',\n\t'\\uFF4C': 'l',\n\t'\\u0140': 'l',\n\t'\\u013A': 'l',\n\t'\\u013E': 'l',\n\t'\\u1E37': 'l',\n\t'\\u1E39': 'l',\n\t'\\u013C': 'l',\n\t'\\u1E3D': 'l',\n\t'\\u1E3B': 'l',\n\t'\\u017F': 'l',\n\t'\\u0142': 'l',\n\t'\\u019A': 'l',\n\t'\\u026B': 'l',\n\t'\\u2C61': 'l',\n\t'\\uA749': 'l',\n\t'\\uA781': 'l',\n\t'\\uA747': 'l',\n\t'\\u01C9': 'lj',\n\t'\\u24DC': 'm',\n\t'\\uFF4D': 'm',\n\t'\\u1E3F': 'm',\n\t'\\u1E41': 'm',\n\t'\\u1E43': 'm',\n\t'\\u0271': 'm',\n\t'\\u026F': 'm',\n\t'\\u24DD': 'n',\n\t'\\uFF4E': 'n',\n\t'\\u01F9': 'n',\n\t'\\u0144': 'n',\n\t'\\u00F1': 'n',\n\t'\\u1E45': 'n',\n\t'\\u0148': 'n',\n\t'\\u1E47': 'n',\n\t'\\u0146': 'n',\n\t'\\u1E4B': 'n',\n\t'\\u1E49': 'n',\n\t'\\u019E': 'n',\n\t'\\u0272': 'n',\n\t'\\u0149': 'n',\n\t'\\uA791': 'n',\n\t'\\uA7A5': 'n',\n\t'\\u01CC': 'nj',\n\t'\\u24DE': 'o',\n\t'\\uFF4F': 'o',\n\t'\\u00F2': 'o',\n\t'\\u00F3': 'o',\n\t'\\u00F4': 'o',\n\t'\\u1ED3': 'o',\n\t'\\u1ED1': 'o',\n\t'\\u1ED7': 'o',\n\t'\\u1ED5': 'o',\n\t'\\u00F5': 'o',\n\t'\\u1E4D': 'o',\n\t'\\u022D': 'o',\n\t'\\u1E4F': 'o',\n\t'\\u014D': 'o',\n\t'\\u1E51': 'o',\n\t'\\u1E53': 'o',\n\t'\\u014F': 'o',\n\t'\\u022F': 'o',\n\t'\\u0231': 'o',\n\t'\\u00F6': 'o',\n\t'\\u022B': 'o',\n\t'\\u1ECF': 'o',\n\t'\\u0151': 'o',\n\t'\\u01D2': 'o',\n\t'\\u020D': 'o',\n\t'\\u020F': 'o',\n\t'\\u01A1': 'o',\n\t'\\u1EDD': 'o',\n\t'\\u1EDB': 'o',\n\t'\\u1EE1': 'o',\n\t'\\u1EDF': 'o',\n\t'\\u1EE3': 'o',\n\t'\\u1ECD': 'o',\n\t'\\u1ED9': 'o',\n\t'\\u01EB': 'o',\n\t'\\u01ED': 'o',\n\t'\\u00F8': 'o',\n\t'\\u01FF': 'o',\n\t'\\u0254': 'o',\n\t'\\uA74B': 'o',\n\t'\\uA74D': 'o',\n\t'\\u0275': 'o',\n\t'\\u01A3': 'oi',\n\t'\\u0223': 'ou',\n\t'\\uA74F': 'oo',\n\t'\\u24DF': 'p',\n\t'\\uFF50': 'p',\n\t'\\u1E55': 'p',\n\t'\\u1E57': 'p',\n\t'\\u01A5': 'p',\n\t'\\u1D7D': 'p',\n\t'\\uA751': 'p',\n\t'\\uA753': 'p',\n\t'\\uA755': 'p',\n\t'\\u24E0': 'q',\n\t'\\uFF51': 'q',\n\t'\\u024B': 'q',\n\t'\\uA757': 'q',\n\t'\\uA759': 'q',\n\t'\\u24E1': 'r',\n\t'\\uFF52': 'r',\n\t'\\u0155': 'r',\n\t'\\u1E59': 'r',\n\t'\\u0159': 'r',\n\t'\\u0211': 'r',\n\t'\\u0213': 'r',\n\t'\\u1E5B': 'r',\n\t'\\u1E5D': 'r',\n\t'\\u0157': 'r',\n\t'\\u1E5F': 'r',\n\t'\\u024D': 'r',\n\t'\\u027D': 'r',\n\t'\\uA75B': 'r',\n\t'\\uA7A7': 'r',\n\t'\\uA783': 'r',\n\t'\\u24E2': 's',\n\t'\\uFF53': 's',\n\t'\\u00DF': 's',\n\t'\\u015B': 's',\n\t'\\u1E65': 's',\n\t'\\u015D': 's',\n\t'\\u1E61': 's',\n\t'\\u0161': 's',\n\t'\\u1E67': 's',\n\t'\\u1E63': 's',\n\t'\\u1E69': 's',\n\t'\\u0219': 's',\n\t'\\u015F': 's',\n\t'\\u023F': 's',\n\t'\\uA7A9': 's',\n\t'\\uA785': 's',\n\t'\\u1E9B': 's',\n\t'\\u24E3': 't',\n\t'\\uFF54': 't',\n\t'\\u1E6B': 't',\n\t'\\u1E97': 't',\n\t'\\u0165': 't',\n\t'\\u1E6D': 't',\n\t'\\u021B': 't',\n\t'\\u0163': 't',\n\t'\\u1E71': 't',\n\t'\\u1E6F': 't',\n\t'\\u0167': 't',\n\t'\\u01AD': 't',\n\t'\\u0288': 't',\n\t'\\u2C66': 't',\n\t'\\uA787': 't',\n\t'\\uA729': 'tz',\n\t'\\u24E4': 'u',\n\t'\\uFF55': 'u',\n\t'\\u00F9': 'u',\n\t'\\u00FA': 'u',\n\t'\\u00FB': 'u',\n\t'\\u0169': 'u',\n\t'\\u1E79': 'u',\n\t'\\u016B': 'u',\n\t'\\u1E7B': 'u',\n\t'\\u016D': 'u',\n\t'\\u00FC': 'u',\n\t'\\u01DC': 'u',\n\t'\\u01D8': 'u',\n\t'\\u01D6': 'u',\n\t'\\u01DA': 'u',\n\t'\\u1EE7': 'u',\n\t'\\u016F': 'u',\n\t'\\u0171': 'u',\n\t'\\u01D4': 'u',\n\t'\\u0215': 'u',\n\t'\\u0217': 'u',\n\t'\\u01B0': 'u',\n\t'\\u1EEB': 'u',\n\t'\\u1EE9': 'u',\n\t'\\u1EEF': 'u',\n\t'\\u1EED': 'u',\n\t'\\u1EF1': 'u',\n\t'\\u1EE5': 'u',\n\t'\\u1E73': 'u',\n\t'\\u0173': 'u',\n\t'\\u1E77': 'u',\n\t'\\u1E75': 'u',\n\t'\\u0289': 'u',\n\t'\\u24E5': 'v',\n\t'\\uFF56': 'v',\n\t'\\u1E7D': 'v',\n\t'\\u1E7F': 'v',\n\t'\\u028B': 'v',\n\t'\\uA75F': 'v',\n\t'\\u028C': 'v',\n\t'\\uA761': 'vy',\n\t'\\u24E6': 'w',\n\t'\\uFF57': 'w',\n\t'\\u1E81': 'w',\n\t'\\u1E83': 'w',\n\t'\\u0175': 'w',\n\t'\\u1E87': 'w',\n\t'\\u1E85': 'w',\n\t'\\u1E98': 'w',\n\t'\\u1E89': 'w',\n\t'\\u2C73': 'w',\n\t'\\u24E7': 'x',\n\t'\\uFF58': 'x',\n\t'\\u1E8B': 'x',\n\t'\\u1E8D': 'x',\n\t'\\u24E8': 'y',\n\t'\\uFF59': 'y',\n\t'\\u1EF3': 'y',\n\t'\\u00FD': 'y',\n\t'\\u0177': 'y',\n\t'\\u1EF9': 'y',\n\t'\\u0233': 'y',\n\t'\\u1E8F': 'y',\n\t'\\u00FF': 'y',\n\t'\\u1EF7': 'y',\n\t'\\u1E99': 'y',\n\t'\\u1EF5': 'y',\n\t'\\u01B4': 'y',\n\t'\\u024F': 'y',\n\t'\\u1EFF': 'y',\n\t'\\u24E9': 'z',\n\t'\\uFF5A': 'z',\n\t'\\u017A': 'z',\n\t'\\u1E91': 'z',\n\t'\\u017C': 'z',\n\t'\\u017E': 'z',\n\t'\\u1E93': 'z',\n\t'\\u1E95': 'z',\n\t'\\u01B6': 'z',\n\t'\\u0225': 'z',\n\t'\\u0240': 'z',\n\t'\\u2C6C': 'z',\n\t'\\uA763': 'z',\n\t'\\u0386': '\\u0391',\n\t'\\u0388': '\\u0395',\n\t'\\u0389': '\\u0397',\n\t'\\u038A': '\\u0399',\n\t'\\u03AA': '\\u0399',\n\t'\\u038C': '\\u039F',\n\t'\\u038E': '\\u03A5',\n\t'\\u03AB': '\\u03A5',\n\t'\\u038F': '\\u03A9',\n\t'\\u03AC': '\\u03B1',\n\t'\\u03AD': '\\u03B5',\n\t'\\u03AE': '\\u03B7',\n\t'\\u03AF': '\\u03B9',\n\t'\\u03CA': '\\u03B9',\n\t'\\u0390': '\\u03B9',\n\t'\\u03CC': '\\u03BF',\n\t'\\u03CD': '\\u03C5',\n\t'\\u03CB': '\\u03C5',\n\t'\\u03B0': '\\u03C5',\n\t'\\u03C9': '\\u03C9',\n\t'\\u03C2': '\\u03C3',\n};\n\nexport function stripSpecialChars(text: string): string {\n\tconst match = (a: string): string => diacritics[a] || a;\n\t// eslint-disable-next-line no-control-regex\n\treturn text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map<string | NgOption, NgOption[]>;\n\nexport class ItemsList {\n\tprivate _groups: OptionGroups;\n\n\tconstructor(\n\t\tprivate _ngSelect: NgSelectComponent,\n\t\tprivate _selectionModel: SelectionModel,\n\t) {}\n\n\tprivate _items: NgOption[] = [];\n\n\tget items(): NgOption[] {\n\t\treturn this._items;\n\t}\n\n\tprivate _filteredItems: NgOption[] = [];\n\n\tget filteredItems(): NgOption[] {\n\t\treturn this._filteredItems;\n\t}\n\n\tprivate _markedIndex = -1;\n\n\tget markedIndex(): number {\n\t\treturn this._markedIndex;\n\t}\n\n\tget selectedItems() {\n\t\treturn this._selectionModel.value;\n\t}\n\n\tget markedItem(): NgOption {\n\t\treturn this._filteredItems[this._markedIndex];\n\t}\n\n\tget noItemsToSelect(): boolean {\n\t\treturn this._ngSelect.hideSelected() && this._items.length === this.selectedItems.length;\n\t}\n\n\tget maxItemsSelected(): boolean {\n\t\treturn this._ngSelect.multiple() && this._ngSelect.maxSelectedItems() <= this.selectedItems.length;\n\t}\n\n\tget lastSelectedItem() {\n\t\tlet i = this.selectedItems.length - 1;\n\t\tfor (; i >= 0; i--) {\n\t\t\tconst item = this.selectedItems[i];\n\t\t\tif (!item.disabled) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetItems(items: readonly any[]) {\n\t\tthis._items = items.map((item, index) => this.mapItem(item, index));\n\t\tconst groupBy = this._ngSelect.groupBy();\n\t\tif (groupBy) {\n\t\t\tthis._groups = this._groupBy(this._items, groupBy);\n\t\t\tthis._items = this._flatten(this._groups);\n\t\t} else {\n\t\t\tthis._groups = new Map();\n\t\t\tthis._groups.set(undefined, this._items);\n\t\t}\n\t\tthis._filteredItems = [...this._items];\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (item.selected || this.maxItemsSelected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tif (!multiple) {\n\t\t\tthis.clearSelected(false);\n\t\t}\n\n\t\tthis._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel());\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._hideSelected(item);\n\t\t}\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tthis._selectionModel.unselect(item, multiple);\n\t\tif (this._ngSelect.hideSelected() && isDefined(item.index) && multiple) {\n\t\t\tthis._showSelected(item);\n\t\t}\n\t}\n\n\tfindItem(value: any): NgOption {\n\t\tlet findBy: (item: NgOption) => boolean;\n\t\tif (this._ngSelect.compareWith()) {\n\t\t\tfindBy = (item) => this._ngSelect.compareWith()(item.value, value);\n\t\t} else if (this._ngSelect.bindValue()) {\n\t\t\tfindBy = (item) => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue()) === value;\n\t\t} else {\n\t\t\tfindBy = (item) =>\n\t\t\t\titem.value === value || (!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel()));\n\t\t}\n\t\treturn this._items.find((item) => findBy(item));\n\t}\n\n\taddItem(item: any) {\n\t\tconst option = this.mapItem(item, this._items.length);\n\t\tthis._items.push(option);\n\t\tthis._filteredItems.push(option);\n\t\treturn option;\n\t}\n\n\tclearSelected(keepDisabled: boolean) {\n\t\tthis._selectionModel.clear(keepDisabled);\n\t\tthis._items.forEach((item) => {\n\t\t\titem.selected = keepDisabled && item.selected && item.disabled;\n\t\t\titem.marked = false;\n\t\t});\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis.resetFilteredItems();\n\t\t}\n\t}\n\n\tfindByLabel(term: string) {\n\t\tterm = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\treturn this.filteredItems.find((item) => {\n\t\t\tconst label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n\t\t\treturn label.substr(0, term.length) === term;\n\t\t});\n\t}\n\n\tfilter(term: string): void {\n\t\tif (!term) {\n\t\t\tthis.resetFilteredItems();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._filteredItems = [];\n\t\tterm = this._ngSelect.searchFn() ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\tconst match = this._ngSelect.searchFn() || this._defaultSearchFn;\n\t\tconst hideSelected = this._ngSelect.hideSelected();\n\n\t\tfor (const key of Array.from(this._groups.keys())) {\n\t\t\tconst matchedItems = [];\n\t\t\tfor (const item of this._groups.get(key)) {\n\t\t\t\tif (hideSelected && ((item.parent && item.parent.selected) || item.selected)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst searchItem = this._ngSelect.searchFn() ? item.value : item;\n\t\t\t\tif (match(term, searchItem)) {\n\t\t\t\t\tmatchedItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (matchedItems.length > 0) {\n\t\t\t\tconst [last] = matchedItems.slice(-1);\n\t\t\t\tif (last.parent) {\n\t\t\t\t\tconst head = this._items.find((x) => x === last.parent);\n\t\t\t\t\tthis._filteredItems.push(head);\n\t\t\t\t}\n\t\t\t\tthis._filteredItems.push(...matchedItems);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetFilteredItems() {\n\t\tif (this._filteredItems.length === this._items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected() && this.selectedItems.length > 0) {\n\t\t\tthis._filteredItems = this._items.filter((x) => !x.selected);\n\t\t} else {\n\t\t\tthis._filteredItems = this._items;\n\t\t}\n\t}\n\n\tunmarkItem() {\n\t\tthis._markedIndex = -1;\n\t}\n\n\tmarkNextItem() {\n\t\tthis._stepToItem(+1);\n\t}\n\n\tmarkPreviousItem() {\n\t\tthis._stepToItem(-1);\n\t}\n\n\tmarkItem(item: NgOption) {\n\t\tthis._markedIndex = this._filteredItems.indexOf(item);\n\t}\n\n\tmarkSelectedOrDefault(markDefault?: boolean) {\n\t\tif (this._filteredItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastMarkedIndex = this._getLastMarkedIndex();\n\t\tif (lastMarkedIndex > -1) {\n\t\t\tthis._markedIndex = lastMarkedIndex;\n\t\t} else {\n\t\t\tthis._markedIndex = markDefault ? this.filteredItems.findIndex((x) => !x.disabled) : -1;\n\t\t}\n\t}\n\n\tresolveNested(option: any, key: string): any {\n\t\tif (!isObject(option)) {\n\t\t\treturn option;\n\t\t}\n\t\tif (key.indexOf('.') === -1) {\n\t\t\treturn option[key];\n\t\t} else {\n\t\t\tconst keys: string[] = key.split('.');\n\t\t\tlet value = option;\n\t\t\tfor (let i = 0, len = keys.length; i < len; ++i) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tvalue = value[keys[i]];\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tmapItem(item: any, index: number): NgOption {\n\t\tconst hasNgOptionLabel = isObject(item) && '$ngOptionLabel' in item;\n\t\tconst hasNgOptionValue = isObject(item) && '$ngOptionValue' in item;\n\t\tconst label = hasNgOptionLabel ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel());\n\t\tconst value = hasNgOptionValue ? item.$ngOptionValue : item;\n\t\treturn {\n\t\t\tindex,\n\t\t\tlabel: isDefined(label) ? label.toString() : '',\n\t\t\tvalue,\n\t\t\tdisabled: item && item.disabled ? item.disabled : false,\n\t\t\thtmlId: `${this._ngSelect.dropdownId}-${index}`,\n\t\t};\n\t}\n\n\tmapSelectedItems() {\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tfor (const selected of this.selectedItems) {\n\t\t\tconst bindValue = this._ngSelect.bindValue();\n\t\t\tconst value = bindValue ? this.resolveNested(selected.value, bindValue) : selected.value;\n\t\t\tconst valueFound = isDefined(value);\n\t\t\tlet item = valueFound ? this.findItem(value) : null;\n\n\t\t\tif (!item && !valueFound && this._ngSelect.compareWith()) {\n\t\t\t\titem = this._items.find((item) => this._ngSelect.compareWith()(item.value, selected.value));\n\t\t\t}\n\n\t\t\tthis._selectionModel.unselect(selected, multiple);\n\t\t\tthis._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel());\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => this.selectedItems.indexOf(x) === -1);\n\t\t}\n\t}\n\n\tprivate _showSelected(item: NgOption) {\n\t\tthis._filteredItems.push(item);\n\t\tif (item.parent) {\n\t\t\tconst parent = item.parent;\n\t\t\tconst parentExists = this._filteredItems.find((x) => x === parent);\n\t\t\tif (!parentExists) {\n\t\t\t\tthis._filteredItems.push(parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tfor (const child of item.children) {\n\t\t\t\tchild.selected = false;\n\t\t\t\tthis._filteredItems.push(child);\n\t\t\t}\n\t\t}\n\t\tthis._filteredItems = [...this._filteredItems.sort((a, b) => a.index - b.index)];\n\t}\n\n\tprivate _hideSelected(item: NgOption) {\n\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item);\n\t\tif (item.parent) {\n\t\t\tconst children = item.parent.children;\n\t\t\tif (children.every((x) => x.selected)) {\n\t\t\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item.parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => x.parent !== item);\n\t\t}\n\t}\n\n\tprivate _defaultSearchFn(search: string, opt: NgOption) {\n\t\tconst label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n\t\treturn label.indexOf(search) > -1;\n\t}\n\n\tprivate _getNextItemIndex(steps: number) {\n\t\tif (steps > 0) {\n\t\t\treturn this._markedIndex >= this._filteredItems.length - 1 ? 0 : this._markedIndex + 1;\n\t\t}\n\t\treturn this._markedIndex <= 0 ? this._filteredItems.length - 1 : this._markedIndex - 1;\n\t}\n\n\tprivate _stepToItem(steps: number) {\n\t\tif (this._filteredItems.length === 0 || this._filteredItems.every((x) => x.disabled)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._markedIndex = this._getNextItemIndex(steps);\n\t\tif (this.markedItem.disabled) {\n\t\t\tthis._stepToItem(steps);\n\t\t}\n\t}\n\n\tprivate _getLastMarkedIndex() {\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (this._markedIndex > -1 && this.markedItem === undefined) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n\t\tif (this.lastSelectedItem && selectedIndex < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn Math.max(this.markedIndex, selectedIndex);\n\t}\n\n\tprivate _groupBy(items: NgOption[], prop: string | ((value: any) => any)): OptionGroups {\n\t\tconst groups = new Map<string | NgOption, NgOption[]>();\n\t\tif (items.length === 0) {\n\t\t\treturn groups;\n\t\t}\n\n\t\t// Check if items are already grouped by given key.\n\t\tconst firstValue = items[0].value;\n\t\tif (firstValue != null && Array.isArray(firstValue[<string>prop])) {\n\t\t\tfor (const item of items) {\n\t\t\t\tconst children = (item.value?.[<string>prop] || []).map((x, index) => this.mapItem(x, index));\n\t\t\t\tgroups.set(item, children);\n\t\t\t}\n\t\t\treturn groups;\n\t\t}\n\n\t\tconst isFnKey = isFunction(this._ngSelect.groupBy());\n\t\tconst keyFn = (item: NgOption) => {\n\t\t\tconst key = isFnKey ? (<(value: any) => any>prop)(item.value) : item.value?.[<string>prop];\n\t\t\treturn isDefined(key) ? key : undefined;\n\t\t};\n\n\t\t// Group items by key.\n\t\tfor (const item of items) {\n\t\t\tconst key = keyFn(item);\n\t\t\tconst group = groups.get(key);\n\t\t\tif (group) {\n\t\t\t\tgroup.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(key, [item]);\n\t\t\t}\n\t\t}\n\t\treturn groups;\n\t}\n\n\tprivate _flatten(groups: OptionGroups) {\n\t\tconst isGroupByFn = isFunction(this._ngSelect.groupBy());\n\t\tconst items = [];\n\t\tfor (const key of Array.from(groups.keys())) {\n\t\t\tlet i = items.length;\n\t\t\tif (key === undefined) {\n\t\t\t\tconst withoutGroup = groups.get(undefined) || [];\n\t\t\t\titems.push(\n\t\t\t\t\t...withoutGroup.map((x) => {\n\t\t\t\t\t\tx.index = i++;\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isObjectKey = isObject(key);\n\t\t\tconst parent: NgOption = {\n\t\t\t\tlabel: isObjectKey ? '' : String(key),\n\t\t\t\tchildren: undefined,\n\t\t\t\tparent: null,\n\t\t\t\tindex: i++,\n\t\t\t\tdisabled: !this._ngSelect.selectableGroup(),\n\t\t\t\thtmlId: newId(),\n\t\t\t};\n\t\t\tconst groupKey = isGroupByFn ? this._ngSelect.bindLabel() : <string>this._ngSelect.groupBy();\n\t\t\tconst groupValue =\n\t\t\t\tthis._ngSelect.groupValue() ||\n\t\t\t\t(() => {\n\t\t\t\t\tif (isObjectKey) {\n\t\t\t\t\t\treturn (<NgOption>key).value;\n\t\t\t\t\t}\n\t\t\t\t\treturn { [groupKey]: key };\n\t\t\t\t});\n\t\t\tconst children = groups.get(key).map((x) => {\n\t\t\t\tx.parent = parent;\n\t\t\t\tx.children = undefined;\n\t\t\t\tx.index = i++;\n\t\t\t\treturn x;\n\t\t\t});\n\t\t\tparent.children = children;\n\t\t\tparent.value = groupValue(\n\t\t\t\tkey,\n\t\t\t\tchildren.map((x) => x.value),\n\t\t\t);\n\t\t\titems.push(parent);\n\t\t\titems.push(...children);\n\t\t}\n\t\treturn items;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n\tscrollHeight: number;\n\ttopPadding: number;\n\tstart: number;\n\tend: number;\n}\n\nexport interface PanelDimensions {\n\titemHeight: number;\n\tpanelHeight: number;\n\titemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\tprivate _dimensions: PanelDimensions = {\n\t\titemHeight: 0,\n\t\tpanelHeight: 0,\n\t\titemsPerViewport: 0,\n\t};\n\n\tget dimensions() {\n\t\treturn this._dimensions;\n\t}\n\n\tcalculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n\t\tconst d = this._dimensions;\n\t\tconst scrollHeight = d.itemHeight * itemsLength;\n\n\t\tconst scrollTop = Math.max(0, scrollPos);\n\t\tconst indexByScrollTop = (scrollTop / scrollHeight) * itemsLength;\n\t\tlet end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n\t\tconst maxStartEnd = end;\n\t\tconst maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n\t\tlet start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n\t\tlet topPadding = d.itemHeight * Math.ceil(start) - d.itemHeight * Math.min(start, buffer);\n\t\ttopPadding = !isNaN(topPadding) ? topPadding : 0;\n\t\tstart = !isNaN(start) ? start : -1;\n\t\tend = !isNaN(end) ? end : -1;\n\t\tstart -= buffer;\n\t\tstart = Math.max(0, start);\n\t\tend += buffer;\n\t\tend = Math.min(itemsLength, end);\n\n\t\treturn {\n\t\t\ttopPadding,\n\t\t\tscrollHeight,\n\t\t\tstart,\n\t\t\tend,\n\t\t};\n\t}\n\n\tsetDimensions(itemHeight: number, panelHeight: number) {\n\t\tconst itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n\t\tthis._dimensions = {\n\t\t\titemHeight,\n\t\t\tpanelHeight,\n\t\t\titemsPerViewport,\n\t\t};\n\t}\n\n\tgetScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n\t\tconst { panelHeight } = this.dimensions;\n\t\tconst itemBottom = itemTop + itemHeight;\n\t\tconst top = lastScroll;\n\t\tconst bottom = top + panelHeight;\n\n\t\tif (panelHeight >= itemBottom && lastScroll === itemTop) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (itemBottom > bottom) {\n\t\t\treturn top + itemBottom - bottom;\n\t\t} else if (itemTop <= top) {\n\t\t\treturn itemTop;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { animationFrameScheduler, asapScheduler, fromEvent } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\nimport { DropdownPosition, NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst CSS_POSITIONS: readonly string[] = ['top', 'right', 'bottom', 'left'];\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tselector: 'ng-dropdown-panel',\n\ttemplate: `\n\t\t@if (headerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-header\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t\t<div #scroll role=\"listbox\" class=\"ng-dropdown-panel-items scroll-host\" [attr.aria-label]=\"ariaLabelDropdown()\">\n\t\t\t<div #padding [class.total-padding]=\"virtualScroll()\"></div>\n\t\t\t<div #content [class.scrollable-content]=\"virtualScroll() && items().length\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\t\t</div>\n\t\t@if (footerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-footer\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"footerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges {\n\treadonly items = input<NgOption[]>([]);\n\treadonly showAddTag = input(false, { transform: booleanAttribute });\n\treadonly markedItem = input<NgOption>(undefined);\n\treadonly position = input<DropdownPosition>('auto');\n\treadonly appendTo = input<string>(undefined);\n\treadonly bufferAmount = input<number>(undefined);\n\treadonly virtualScroll = input(false, { transform: booleanAttribute });\n\treadonly headerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly footerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly filterValue = input<string>(null);\n\treadonly ariaLabelDropdown = input<string | null>(null);\n\t/**\n\t * Which DOM event to listen to for outside click detection\n\t */\n\treadonly outsideClickEvent = input<'click' | 'mousedown'>('click');\n\treadonly popover = input(false, { transform: booleanAttribute });\n\treadonly update = output<any[]>();\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>();\n\treadonly scrollToEnd = output<void>();\n\treadonly outsideClick = output<void>();\n\tprivate _renderer = inject(Renderer2);\n\tprivate _zone = inject(NgZone);\n\tprivate _panelService = inject(NgDropdownPanelService);\n\tprivate _document = inject(DOCUMENT, { optional: true })!;\n\tprivate _destroyRef = inject(DestroyRef);\n\tprivate _dropdown = inject(ElementRef<HTMLElement>).nativeElement;\n\tprivate readonly contentElementRef = viewChild('content', { read: ElementRef });\n\tprivate readonly scrollElementRef = viewChild('scroll', { read: ElementRef });\n\tprivate readonly paddingElementRef = viewChild('padding', { read: ElementRef });\n\n\tprivate readonly _virtualPadding = computed(() => this.paddingElementRef()?.nativeElement);\n\tprivate readonly _scrollablePanel = computed(() => this.scrollElementRef()?.nativeElement);\n\tprivate readonly _contentPanel = computed(() => this.contentElementRef()?.nativeElement);\n\n\tprivate _select: HTMLElement | undefined;\n\tprivate _parent: HTMLElement;\n\tprivate _scrollToEndFired = false;\n\tprivate _updateScrollHeight = false;\n\tprivate _lastScrollPosition = 0;\n\n\tconstructor() {\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tif (this.appendTo()) {\n\t\t\t\tthis._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _currentPosition: DropdownPosition;\n\n\tget currentPosition(): DropdownPosition {\n\t\treturn this._currentPosition;\n\t}\n\n\tprivate _itemsLength: number;\n\n\tprivate get itemsLength() {\n\t\treturn this._itemsLength;\n\t}\n\n\tprivate set itemsLength(value: number) {\n\t\tif (value !== this._itemsLength) {\n\t\t\tthis._itemsLength = value;\n\t\t\tthis._onItemsLengthChanged();\n\t\t}\n\t}\n\n\tprivate get _startOffset() {\n\t\tif (this.markedItem()) {\n\t\t\tconst { itemHeight, panelHeight } = this._panelService.dimensions;\n\t\t\tconst offset = this.markedItem().index * itemHeight;\n\t\t\treturn panelHeight > offset ? 0 : offset;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tngOnInit() {\n\t\tthis._select = this._dropdown.parentElement;\n\t\tthis._handleScroll();\n\t\tthis._handleOutsideClick();\n\t\tthis._appendDropdown();\n\t\tthis._setupMousedownListener();\n\t\tthis._handleWindowScroll();\n\t\tthis._showPopoverIfNeeded();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.items) {\n\t\t\tconst change = changes.items;\n\t\t\tthis._onItemsOrShowAddTagChange(change.currentValue, this.showAddTag(), change.firstChange);\n\t\t}\n\t\tif (changes.showAddTag) {\n\t\t\tconst change = changes.showAddTag;\n\t\t\tthis._onItemsOrShowAddTagChange(this.items(), change.currentValue, change.firstChange);\n\t\t}\n\t}\n\n\tscrollTo(option: NgOption, startFromOption = false) {\n\t\tif (!option) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.items().indexOf(option);\n\t\tif (index < 0 || index >= this.itemsLength) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet scrollTo;\n\t\tif (this.virtualScroll()) {\n\t\t\tconst itemHeight = this._panelService.dimensions.itemHeight;\n\t\t\tscrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n\t\t} else {\n\t\t\tconst item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n\t\t\tconst lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n\t\t\tscrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n\t\t}\n\n\t\tif (isDefined(scrollTo)) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTo;\n\t\t}\n\t}\n\n\tscrollToTag() {\n\t\tconst panel = this._scrollablePanel();\n\t\tpanel.scrollTop = panel.scrollHeight - panel.clientHeight;\n\t}\n\n\tadjustPosition() {\n\t\tthis._updateYPosition();\n\t}\n\n\tprivate _handleDropdownPosition() {\n\t\tthis._currentPosition = this._calculateCurrentPosition(this._dropdown);\n\t\tif (CSS_POSITIONS.includes(this._currentPosition)) {\n\t\t\tthis._updateDropdownClass(this._currentPosition);\n\t\t} else {\n\t\t\tthis._updateDropdownClass('bottom');\n\t\t}\n\n\t\tif (this.appendTo() || this.popover()) {\n\t\t\tthis._updateYPosition();\n\t\t}\n\n\t\tthis._dropdown.style.opacity = '1';\n\t}\n\n\tprivate _updateDropdownClass(currentPosition: string) {\n\t\tCSS_POSITIONS.forEach((position) => {\n\t\t\tconst REMOVE_CSS_CLASS = `ng-select-${position}`;\n\t\t\tthis._renderer.removeClass(this._dropdown, REMOVE_CSS_CLASS);\n\t\t\tthis._renderer.removeClass(this._select, REMOVE_CSS_CLASS);\n\t\t});\n\n\t\tconst ADD_CSS_CLASS = `ng-select-${currentPosition}`;\n\t\tthis._renderer.addClass(this._dropdown, ADD_CSS_CLASS);\n\t\tthis._renderer.addClass(this._select, ADD_CSS_CLASS);\n\t}\n\n\tprivate _handleScroll() {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tconst scrollablePanel = this._scrollablePanel();\n\t\t\tif (!scrollablePanel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfromEvent(scrollablePanel, 'scroll')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (scrollablePanel && 'scrollTop' in scrollablePanel) {\n\t\t\t\t\t\tthis._onContentScrolled(scrollablePanel.scrollTop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleOutsideClick() {\n\t\tif (!this._document) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, this.outsideClickEvent(), { capture: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe(($event) => this._checkToClose($event));\n\t\t});\n\t}\n\n\tprivate _checkToClose($event: any) {\n\t\tif (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst path = $event.path || ($event.composedPath && $event.composedPath());\n\t\tif ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.run(() => this.outsideClick.emit());\n\t}\n\n\tprivate _onItemsOrShowAddTagChange(items: NgOption[] = [], showAddTag: boolean, firstChange: boolean) {\n\t\tthis._scrollToEndFired = false;\n\t\tthis.itemsLength = items.length;\n\t\tif (showAddTag && items.length) {\n\t\t\tthis.itemsLength++;\n\t\t}\n\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._updateItemsRange(firstChange);\n\t\t} else {\n\t\t\tthis._setVirtualHeight();\n\t\t\tthis._updateItems(firstChange);\n\t\t}\n\t}\n\n\tprivate _updateItems(firstChange: boolean) {\n\t\tthis.update.emit(this.items());\n\t\tif (firstChange === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\t\tthis._panelService.setDimensions(0, panelHeight);\n\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\tthis.scrollTo(this.markedItem(), firstChange);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _updateItemsRange(firstChange: boolean) {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tthis._measureDimensions().then(() => {\n\t\t\t\tif (firstChange) {\n\t\t\t\t\tthis._renderItemsRange(this._startOffset);\n\t\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis._renderItemsRange();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _onContentScrolled(scrollTop: number) {\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._renderItemsRange(scrollTop);\n\t\t}\n\t\tthis._lastScrollPosition = scrollTop;\n\t\tthis._fireScrollToEnd(scrollTop);\n\t}\n\n\tprivate _updateVirtualHeight(height: number) {\n\t\tif (this._updateScrollHeight) {\n\t\t\tthis._virtualPadding().style.height = `${height}px`;\n\t\t\tthis._updateScrollHeight = false;\n\t\t}\n\t}\n\n\tprivate _setVirtualHeight() {\n\t\tif (!this._virtualPadding()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._virtualPadding().style.height = `0px`;\n\t}\n\n\tprivate _onItemsLengthChanged() {\n\t\tthis._updateScrollHeight = true;\n\t}\n\n\tprivate _renderItemsRange(scrollTop = null) {\n\t\tif (scrollTop && this._lastScrollPosition === scrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\tscrollTop = scrollTop || this._scrollablePanel().scrollTop;\n\t\tconst range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount());\n\t\tthis._updateVirtualHeight(range.scrollHeight);\n\t\tthis._contentPanel().style.transform = `translateY(${range.topPadding}px)`;\n\n\t\tthis._zone.run(() => {\n\t\t\tthis.update.emit(this.items().slice(range.start, range.end));\n\t\t\tthis.scroll.emit({ start: range.start, end: range.end });\n\t\t});\n\n\t\tif (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTop;\n\t\t\tthis._lastScrollPosition = scrollTop;\n\t\t}\n\t}\n\n\tprivate _measureDimensions(): Promise<PanelDimensions> {\n\t\tif (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n\t\t\treturn Promise.resolve(this._panelService.dimensions);\n\t\t}\n\n\t\tconst [first] = this.items();\n\t\tthis.update.emit([first]);\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\tconst option = this._dropdown.querySelector(`#${first.htmlId}`);\n\t\t\tconst optionHeight = option.clientHeight;\n\t\t\tthis._virtualPadding().style.height = `${optionHeight * this.itemsLength}px`;\n\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\tthis._panelService.setDimensions(optionHeight, panelHeight);\n\n\t\t\treturn this._panelService.dimensions;\n\t\t});\n\t}\n\n\tprivate _fireScrollToEnd(scrollTop: number) {\n\t\tif (this._scrollToEndFired || scrollTop === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst padding = this.virtualScroll() ? this._virtualPadding() : this._contentPanel();\n\n\t\tif (scrollTop + this._dropdown.clientHeight >= padding.clientHeight - 1) {\n\t\t\tthis._zone.run(() => this.scrollToEnd.emit());\n\t\t\tthis._scrollToEndFired = true;\n\t\t}\n\t}\n\n\tprivate _calculateCurrentPosition(dropdownEl: HTMLElement) {\n\t\tconst position = this.position();\n\t\tif (position !== 'auto') {\n\t\t\treturn position;\n\t\t}\n\t\tconst selectRect: ClientRect = this._select.getBoundingClientRect();\n\t\tconst scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n\t\tconst offsetTop = selectRect.top + window.pageYOffset;\n\t\tconst height = selectRect.height;\n\t\tconst dropdownHeight = dropdownEl.getBoundingClientRect().height;\n\t\tif (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n\t\t\treturn 'top';\n\t\t} else {\n\t\t\treturn 'bottom';\n\t\t}\n\t}\n\n\tprivate _appendDropdown() {\n\t\tif (!this.appendTo()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parent = this._dropdown.shadowRoot\n\t\t\t? this._dropdown.shadowRoot.querySelector(this.appendTo())\n\t\t\t: document.querySelector(this.appendTo());\n\t\tif (!this._parent) {\n\t\t\tthrow new Error(`appendTo selector ${this.appendTo()} did not found any parent element`);\n\t\t}\n\t\tthis._updateXPosition();\n\t\tthis._parent.appendChild(this._dropdown);\n\t}\n\n\tprivate _updateXPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst isRTL = document.documentElement.dir === 'rtl';\n\t\tconst offsetLeft = select.left - parent.left;\n\n\t\tif (isRTL) {\n\t\t\tconst offsetRight = parent.right - select.right;\n\t\t\tthis._dropdown.style.right = offsetRight + 'px';\n\t\t\tthis._dropdown.style.left = 'auto';\n\t\t} else {\n\t\t\tthis._dropdown.style.left = offsetLeft + 'px';\n\t\t\tthis._dropdown.style.right = 'auto';\n\t\t}\n\n\t\tthis._dropdown.style.width = select.width + 'px';\n\t\tthis._dropdown.style.minWidth = select.width + 'px';\n\t}\n\n\tprivate _updateYPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst selectContainer = this._select.querySelector('.ng-select-container') as HTMLElement;\n\t\tconst containerRect = selectContainer?.getBoundingClientRect() ?? select;\n\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst offsetBottom = parent.bottom - containerRect.top;\n\t\t\tthis._dropdown.style.bottom = offsetBottom + 'px';\n\t\t\tthis._dropdown.style.top = 'auto';\n\t\t} else if (this._currentPosition === 'bottom') {\n\t\t\tconst offsetTop = containerRect.bottom - parent.top;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = 'auto';\n\t\t}\n\t}\n\n\tprivate _setupMousedownListener(): void {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._dropdown, 'mousedown')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe((event: MouseEvent) => {\n\t\t\t\t\tconst target = event.target as HTMLElement;\n\t\t\t\t\tif (target.tagName === 'INPUT') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleWindowScroll() {\n\t\tif (!this.appendTo() && !this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, 'scroll', { capture: true, passive: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis._updateXPosition();\n\t\t\t\t\tthis._updateYPosition();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _showPopoverIfNeeded() {\n\t\tif (!this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this._dropdown.showPopover === 'function') {\n\t\t\tthis._renderer.setAttribute(this._dropdown, 'popover', 'manual');\n\t\t\tthis._dropdown.showPopover();\n\t\t\tthis._parent = globalThis.document.body;\n\t\t\tthis._updateXPosition();\n\t\t\tthis._updateYPosition();\n\t\t}\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tafterEveryRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n} from '@angular/core';\n\n@Component({\n\tselector: 'ng-option',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `<ng-content />`,\n})\nexport class NgOptionComponent implements OnInit {\n\n\tpublic readonly value = input<any>();\n\tpublic readonly disabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\tpublic readonly elementRef = inject(ElementRef<HTMLElement>);\n\n\tpublic readonly label = signal<string>('');\n\n\t/** True when this component's inputs are initialized (after first change detection). */\n\tpublic readonly isInitialized = signal<boolean>(false);\n\n\tconstructor() {\n\t\tafterEveryRender(() => {\n\t\t\t// Update label signal after render (innerHTML updated by template bindings)\n\t\t\tconst currentLabel = (this.elementRef.nativeElement.innerHTML || '').trim();\n\t\t\tif (currentLabel !== this.label()) {\n\t\t\t\tthis.label.set(currentLabel);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.isInitialized.set(true);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport interface NgOption {\n\t[name: string]: any;\n\n\tindex?: number;\n\thtmlId?: string;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tmarked?: boolean;\n\tlabel?: string;\n\tvalue?: string | any;\n\tparent?: NgOption;\n\tchildren?: NgOption[];\n}\n\nexport enum KeyCode {\n\tTab = 'Tab',\n\tEnter = 'Enter',\n\tEsc = 'Escape',\n\tSpace = ' ',\n\tArrowUp = 'ArrowUp',\n\tArrowDown = 'ArrowDown',\n\tBackspace = 'Backspace',\n}\n\nexport type DropdownPosition = 'top' | 'right' | 'bottom' | 'left' | 'auto';\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n\treturn new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n\tvalue: NgOption[];\n\tselect(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n\tunselect(item: NgOption, multiple: boolean);\n\tclear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n\tprivate _selected: NgOption[] = [];\n\n\tget value(): NgOption[] {\n\t\treturn this._selected;\n\t}\n\n\tselect(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n\t\titem.selected = true;\n\t\tif (!item.children || (!multiple && groupAsModel)) {\n\t\t\tthis._selected.push(item);\n\t\t}\n\t\tif (multiple) {\n\t\t\tif (item.parent) {\n\t\t\t\tconst childrenCount = item.parent.children.length;\n\t\t\t\tconst selectedCount = item.parent.children.filter((x) => x.selected).length;\n\t\t\t\titem.parent.selected = childrenCount === selectedCount;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, true);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t\tif (groupAsModel && this._activeChildren(item)) {\n\t\t\t\t\tthis._selected = [...this._selected.filter((x) => x.parent !== item), item];\n\t\t\t\t} else {\n\t\t\t\t\tthis._selected = [...this._selected, ...item.children.filter((x) => !x.disabled)];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tunselect(item: NgOption, multiple: boolean) {\n\t\tthis._selected = this._selected.filter((x) => x !== item);\n\t\titem.selected = false;\n\t\tif (multiple) {\n\t\t\tif (item.parent && item.parent.selected) {\n\t\t\t\tconst children = item.parent.children;\n\t\t\t\tthis._removeParent(item.parent);\n\t\t\t\tthis._removeChildren(item.parent);\n\t\t\t\tthis._selected.push(...children.filter((x) => x !== item && !x.disabled));\n\t\t\t\titem.parent.selected = false;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, false);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(keepDisabled: boolean) {\n\t\tthis._selected = keepDisabled ? this._selected.filter((x) => x.disabled) : [];\n\t}\n\n\tprivate _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n\t\tfor (const child of children) {\n\t\t\tif (child.disabled) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchild.selected = selected;\n\t\t}\n\t}\n\n\tprivate _removeChildren(parent: NgOption) {\n\t\tthis._selected = [\n\t\t\t...this._selected.filter((x) => x.parent !== parent),\n\t\t\t...parent.children.filter((x) => x.parent === parent && x.disabled && x.selected),\n\t\t];\n\t}\n\n\tprivate _removeParent(parent: NgOption) {\n\t\tthis._selected = this._selected.filter((x) => x !== parent);\n\t}\n\n\tprivate _activeChildren(item: NgOption): boolean {\n\t\treturn item.children.every((x) => !x.disabled || x.selected);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tAfterViewInit,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostAttributeToken,\n\tHostListener,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tsignal,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgItemLabelDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgPlaceholderTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n} from './ng-templates.directive';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgSelectConfig } from './config.service';\nimport { ConsoleService } from './console.service';\nimport { newId } from './id';\nimport { ItemsList } from './items-list';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\nimport { NgOptionComponent } from './ng-option.component';\nimport { DropdownPosition, KeyCode, NgOption } from './ng-select.types';\nimport { DefaultSelectionModelFactory, SelectionModelFactory } from './selection-model';\nimport { isDefined, isFunction, isObject, isPromise } from './value-utils';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken<SelectionModelFactory>('ng-select-selection-model');\nexport type AddTagFn = (term: string) => any | Promise<any>;\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | any, children: any[]) => string | any;\n\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n\treturn value == null ? undefined : booleanAttribute(value);\n}\n\n@Component({\n\tselector: 'ng-select',\n\texportAs: 'ngSelect',\n\ttemplateUrl: './ng-select.component.html',\n\tstyleUrls: ['./ng-select.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => NgSelectComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\tNgDropdownPanelService,\n\t],\n\tencapsulation: ViewEncapsulation.None\t,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, NgItemLabelDirective, NgDropdownPanelComponent],\n\thost: {\n\t\t'[class.ng-select]': 'true',\n\t\t'[class.ng-select-single]': '!multiple()',\n\t\t'[class.ng-select-typeahead]': 'typeahead()',\n\t\t'[class.ng-select-multiple]': 'multiple()',\n\t\t'[class.ng-select-taggable]': 'addTag()',\n\t\t'[class.ng-select-searchable]': 'searchable()',\n\t\t'[class.ng-select-clearable]': 'clearable()',\n\t\t'[class.ng-select-filtered]': 'filtered',\n\t\t'[class.ng-select-disabled]': 'disabled()',\n\t},\n})\nexport class NgSelectComponent implements OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n\treadonly classes = inject(new HostAttributeToken('class'), { optional: true });\n\treadonly config = inject(NgSelectConfig);\n\tprivate readonly _cd = inject(ChangeDetectorRef);\n\tprivate readonly _console = inject(ConsoleService);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\t// signals\n\tpublic readonly _disabled = signal<boolean>(false);\n\t// inputs: underscored input() + alias + linkedSignal() for stable public names (back compat)\n\treadonly _ariaLabelDropdown = input<string>(undefined, { alias: 'ariaLabelDropdown' });\n\treadonly ariaLabelDropdown = linkedSignal(() => this._ariaLabelDropdown());\n\n\treadonly _ariaLabel = input<string | undefined>(undefined, { alias: 'ariaLabel' });\n\treadonly ariaLabel = linkedSignal(() => this._ariaLabel());\n\n\treadonly _markFirst = input(true, { alias: 'markFirst', transform: booleanAttribute });\n\treadonly markFirst = linkedSignal(() => this._markFirst());\n\n\treadonly _placeholder = input<string>(this.config.placeholder, { alias: 'placeholder' });\n\treadonly placeholder = linkedSignal(() => this._placeholder());\n\n\treadonly _fixedPlaceholder = input<boolean>(true, { alias: 'fixedPlaceholder' });\n\treadonly fixedPlaceholder = linkedSignal(() => this._fixedPlaceholder());\n\n\treadonly _notFoundText = input<string>(undefined, { alias: 'notFoundText' });\n\treadonly notFoundText = linkedSignal(() => this._notFoundText());\n\n\treadonly _typeToSearchText = input<string>(undefined, { alias: 'typeToSearchText' });\n\treadonly typeToSearchText = linkedSignal(() => this._typeToSearchText());\n\n\treadonly _preventToggleOnRightClick = input<boolean>(false, { alias: 'preventToggleOnRightClick' });\n\treadonly preventToggleOnRightClick = linkedSignal(() => this._preventToggleOnRightClick());\n\n\treadonly _addTagText = input<string>(undefined, { alias: 'addTagText' });\n\treadonly addTagText = linkedSignal(() => this._addTagText());\n\n\treadonly _loadingText = input<string>(undefined, { alias: 'loadingText' });\n\treadonly loadingText = linkedSignal(() => this._loadingText());\n\n\treadonly _clearAllText = input<string>(undefined, { alias: 'clearAllText' });\n\treadonly clearAllText = linkedSignal(() => this._clearAllText());\n\n\treadonly _dropdownPosition = input<DropdownPosition>('auto', { alias: 'dropdownPosition' });\n\treadonly dropdownPosition = linkedSignal(() => this._dropdownPosition());\n\n\treadonly _appendTo = input<string>(undefined, { alias: 'appendTo' });\n\treadonly appendTo = linkedSignal(() => this._appendTo());\n\n\treadonly _outsideClickEvent = input<'click' | 'mousedown'>(this.config.outsideClickEvent, { alias: 'outsideClickEvent' });\n\treadonly outsideClickEvent = linkedSignal(() => this._outsideClickEvent());\n\n\treadonly _loading = input(false, { alias: 'loading', transform: booleanAttribute });\n\treadonly loading = linkedSignal(() => this._loading());\n\n\treadonly _closeOnSelect = input(true, { alias: 'closeOnSelect', transform: booleanAttribute });\n\treadonly closeOnSelect = linkedSignal(() => this._closeOnSelect());\n\n\treadonly _hideSelected = input(false, { alias: 'hideSelected', transform: booleanAttribute });\n\treadonly hideSelected = linkedSignal(() => this._hideSelected());\n\n\treadonly _selectOnTab = input(false, { alias: 'selectOnTab', transform: booleanAttribute });\n\treadonly selectOnTab = linkedSignal(() => this._selectOnTab());\n\n\treadonly _openOnEnter = input(undefined, { alias: 'openOnEnter', transform: booleanAttribute });\n\treadonly openOnEnter = linkedSignal(() => this._openOnEnter());\n\n\treadonly _maxSelectedItems = input<number, unknown>(undefined, { alias: 'maxSelectedItems', transform: numberAttribute });\n\treadonly maxSelectedItems = linkedSignal(() => this._maxSelectedItems());\n\n\treadonly _groupBy = input<string | ((value: any) => any)>(undefined, { alias: 'groupBy' });\n\treadonly groupBy = linkedSignal(() => this._groupBy());\n\n\treadonly _groupValue = input<GroupValueFn>(undefined, { alias: 'groupValue' });\n\treadonly groupValue = linkedSignal(() => this._groupValue());\n\n\treadonly _bufferAmount = input(4, { alias: 'bufferAmount', transform: numberAttribute });\n\treadonly bufferAmount = linkedSignal(() => this._bufferAmount());\n\n\treadonly _virtualScroll = input<boolean | undefined, unknown>(undefined, {\n\t\talias: 'virtualScroll',\n\t\ttransform: optionalBooleanAttribute,\n\t});\n\treadonly virtualScroll = linkedSignal(() => this._virtualScroll());\n\treadonly dropdownVirtualScroll = computed(() => {\n\t\tconst value = this._virtualScroll();\n\t\treturn isDefined(value) ? value : this.isVirtualScrollDisabled(this.config);\n\t});\n\n\treadonly _selectableGroup = input(false, { alias: 'selectableGroup', transform: booleanAttribute });\n\treadonly selectableGroup = linkedSignal(() => this._selectableGroup());\n\n\treadonly _tabFocusOnClearButton = input<boolean | undefined>(undefined, { alias: 'tabFocusOnClearButton' });\n\treadonly tabFocusOnClearButton = linkedSignal(() => this._tabFocusOnClearButton());\n\n\treadonly _selectableGroupAsModel = input(true, { alias: 'selectableGroupAsModel', transform: booleanAttribute });\n\treadonly selectableGroupAsModel = linkedSignal(() => this._selectableGroupAsModel());\n\n\treadonly _searchFn = input(null, { alias: 'searchFn' });\n\treadonly searchFn = linkedSignal(() => this._searchFn());\n\n\treadonly _trackByFn = input(null, { alias: 'trackByFn' });\n\treadonly trackByFn = linkedSignal(() => this._trackByFn());\n\n\treadonly _clearOnBackspace = input(true, { alias: 'clearOnBackspace', transform: booleanAttribute });\n\treadonly clearOnBackspace = linkedSignal(() => this._clearOnBackspace());\n\n\treadonly _labelForId = input(null, { alias: 'labelForId' });\n\treadonly labelForId = linkedSignal(() => this._labelForId());\n\n\treadonly _inputAttrs = input<Record<string, string>>({}, { alias: 'inputAttrs' });\n\treadonly inputAttrs = linkedSignal(() => this._inputAttrs());\n\n\treadonly _tabIndex = input<number, unknown>(undefined, { alias: 'tabIndex', transform: numberAttribute });\n\treadonly tabIndex = linkedSignal(() => this._tabIndex());\n\n\treadonly _readonly = input(false, { alias: 'readonly', transform: booleanAttribute });\n\treadonly readonly = linkedSignal(() => this._readonly());\n\n\treadonly _searchWhileComposing = input(true, { alias: 'searchWhileComposing', transform: booleanAttribute });\n\treadonly searchWhileComposing = linkedSignal(() => this._searchWhileComposing());\n\n\treadonly _minTermLength = input(0, { alias: 'minTermLength', transform: numberAttribute });\n\treadonly minTermLength = linkedSignal(() => this._minTermLength());\n\n\treadonly _editableSearchTerm = input(false, { alias: 'editableSearchTerm', transform: booleanAttribute });\n\treadonly editableSearchTerm = linkedSignal(() => this._editableSearchTerm());\n\n\treadonly _ngClass = input(null, { alias: 'ngClass' });\n\treadonly ngClass = linkedSignal(() => this._ngClass());\n\n\treadonly _typeahead = input<Subject<string>>(undefined, { alias: 'typeahead' });\n\treadonly typeahead = linkedSignal(() => this._typeahead());\n\n\treadonly _multiple = input(false, { alias: 'multiple', transform: booleanAttribute });\n\treadonly multiple = linkedSignal(() => this._multiple());\n\n\treadonly _addTag = input<boolean | AddTagFn>(false, { alias: 'addTag' });\n\treadonly addTag = linkedSignal(() => this._addTag());\n\n\treadonly _searchable = input(true, { alias: 'searchable', transform: booleanAttribute });\n\treadonly searchable = linkedSignal(() => this._searchable());\n\n\treadonly _clearable = input(true, { alias: 'clearable', transform: booleanAttribute });\n\treadonly clearable = linkedSignal(() => this._clearable());\n\n\treadonly _clearKeepsDisabledOptions = input(true, { alias: 'clearKeepsDisabledOptions', transform: booleanAttribute });\n\treadonly clearKeepsDisabledOptions = linkedSignal(() => this._clearKeepsDisabledOptions());\n\n\treadonly _deselectOnClick = input<boolean>(undefined, { alias: 'deselectOnClick' });\n\treadonly deselectOnClick = linkedSignal(() => this._deselectOnClick());\n\n\treadonly _clearSearchOnAdd = input(undefined, { alias: 'clearSearchOnAdd' });\n\treadonly clearSearchOnAdd = linkedSignal(() => this._clearSearchOnAdd());\n\n\treadonly _compareWith = input(undefined, {\n\t\talias: 'compareWith',\n\t\ttransform: (fn: CompareWithFn | undefined) => {\n\t\t\tif (fn !== undefined && fn !== null && !isFunction(fn)) {\n\t\t\t\tthrow Error('`compareWith` must be a function.');\n\t\t\t}\n\t\t\treturn fn;\n\t\t},\n\t});\n\treadonly compareWith = linkedSignal(() => this._compareWith());\n\n\treadonly _keyDownFn = input<(_: KeyboardEvent) => boolean>((_: KeyboardEvent) => true, { alias: 'keyDownFn' });\n\treadonly keyDownFn = linkedSignal(() => this._keyDownFn());\n\n\treadonly _popover = input(false, { alias: 'popover', transform: booleanAttribute });\n\treadonly popover = linkedSignal(() => this._popover());\n\n\t// models\n\treadonly bindLabel = model<string>(undefined);\n\treadonly bindValue = model<string>(undefined);\n\treadonly appearance = model<string>(undefined);\n\treadonly isOpen = model<boolean | undefined>(false);\n\treadonly items = model<readonly any[]>([]);\n\n\t// output events\n\treadonly blurEvent = output<any>({ alias: 'blur' });\n\treadonly focusEvent = output<any>({ alias: 'focus' });\n\treadonly changeEvent = output<any>({ alias: 'change' });\n\treadonly openEvent = output({ alias: 'open' });\n\treadonly closeEvent = output({ alias: 'close' });\n\treadonly searchEvent = output<{\n\t\tterm: string;\n\t\titems: any[];\n\t}>({ alias: 'search' });\n\treadonly clearEvent = output({ alias: 'clear' });\n\treadonly addEvent = output<any>({ alias: 'add' });\n\treadonly removeEvent = output<any>({ alias: 'remove' });\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>({ alias: 'scroll' });\n\treadonly scrollToEnd = output<any>({ alias: 'scrollToEnd' });\n\n\t// computed\n\treadonly disabled = computed(() => this.readonly() || this._disabled());\n\treadonly clearSearchOnAddValue = computed(() => {\n\t\tif (isDefined(this.clearSearchOnAdd())) {\n\t\t\treturn this.clearSearchOnAdd();\n\t\t}\n\t\tif (isDefined(this.config.clearSearchOnAdd)) {\n\t\t\treturn this.config.clearSearchOnAdd;\n\t\t}\n\t\treturn this.closeOnSelect();\n\t});\n\treadonly deselectOnClickValue = computed(() => {\n\t\tif (isDefined(this.deselectOnClick())) {\n\t\t\treturn this.deselectOnClick();\n\t\t}\n\t\tif (isDefined(this.config.deselectOnClick)) {\n\t\t\treturn this.config.deselectOnClick;\n\t\t}\n\t\treturn this.multiple();\n\t});\n\t// content child queries\n\treadonly optionTemplate = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\treadonly optgroupTemplate = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\treadonly labelTemplate = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\treadonly multiLabelTemplate = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\treadonly headerTemplate = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\treadonly footerTemplate = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\treadonly notFoundTemplate = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\treadonly placeholderTemplate = contentChild(NgPlaceholderTemplateDirective, { read: TemplateRef });\n\treadonly typeToSearchTemplate = contentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef });\n\treadonly loadingTextTemplate = contentChild(NgLoadingTextTemplateDirective, { read: TemplateRef });\n\treadonly tagTemplate = contentChild(NgTagTemplateDirective, { read: TemplateRef });\n\treadonly loadingSpinnerTemplate = contentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef });\n\treadonly clearButtonTemplate = contentChild(NgClearButtonTemplateDirective, { read: TemplateRef });\n\treadonly ngOptions = contentChildren(NgOptionComponent, { descendants: true });\n\n\t// view children queries\n\treadonly dropdownPanel = viewChild(forwardRef(() => NgDropdownPanelComponent));\n\treadonly searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\treadonly clearButton = viewChild<ElementRef<HTMLSpanElement>>('clearButton');\n\t// public variables\n\treadonly dropdownId = newId();\n\treadonly element: HTMLElement;\n\n\t// variables\n\tescapeHTML = true;\n\titemsList: ItemsList;\n\tviewPortItems: NgOption[] = [];\n\ttabFocusOnClear = signal<boolean>(true);\n\tprivate readonly autoFocus = inject(new HostAttributeToken('autofocus'), { optional: true });\n\t// private variables\n\tprivate readonly _defaultLabel = 'label';\n\tprivate readonly _editableSearchTermActive = computed(() => this.editableSearchTerm() && !this.multiple());\n\tprivate _focused: boolean;\n\tprivate _injector = inject(Injector);\n\tprivate _isComposing = false;\n\tprivate _itemsAreUsed: boolean;\n\tprivate readonly _keyPress$ = new Subject<string>();\n\tprivate _manualOpen: boolean;\n\tprivate _pressedKeys: string[] = [];\n\tprivate _primitive: any;\n\tprivate readonly _searchTerm = signal<string>(null);\n\tprivate readonly _validTerm = computed(() => {\n\t\tconst term = this._searchTerm()?.trim();\n\t\treturn term && term.length >= this.minTermLength();\n\t});\n\n\t/** Adds/removes `ng-select-opened` on the host — assigned in the constructor. */\n\tprivate _reflectOpenState!: (open: boolean) => void;\n\n\tconstructor() {\n\t\tconst config = this.config;\n\t\tconst newSelectionModel = inject<SelectionModelFactory | undefined>(SELECTION_MODEL_FACTORY, { optional: true });\n\t\tconst _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\t\tconst _renderer = inject(Renderer2);\n\n\t\tthis._mergeGlobalConfig(config);\n\t\tthis.itemsList = new ItemsList(this, newSelectionModel ? newSelectionModel() : DefaultSelectionModelFactory());\n\t\tthis.element = _elementRef.nativeElement;\n\n\t\t// Reflect the open state imperatively — the same mechanism the dropdown\n\t\t// panel uses for `ng-select-bottom/top`. As a `host` binding this class\n\t\t// only applied when the PARENT view happened to be refreshed: open()\n\t\t// ends in a LOCAL `_cd.detectChanges()`, which updates the own template\n\t\t// (panel, aria-expanded) but neither applies host bindings nor flushes\n\t\t// effects — so themes keyed on `.ng-select-opened` (the caret flip)\n\t\t// never engaged until some unrelated global tick. open()/close() call\n\t\t// `_reflectOpenState` synchronously; this effect covers the remaining\n\t\t// signal writes (`[isOpen]` input–driven manual mode).\n\t\tthis._reflectOpenState = (open: boolean) => {\n\t\t\tif (open) {\n\t\t\t\t_renderer.addClass(this.element, 'ng-select-opened');\n\t\t\t} else {\n\t\t\t\t_renderer.removeClass(this.element, 'ng-select-opened');\n\t\t\t}\n\t\t};\n\t\teffect(() => this._reflectOpenState(this.isOpen() ?? false));\n\t}\n\n\tget filtered() {\n\t\treturn (!!this.searchTerm && this.searchable()) || this._isComposing;\n\t}\n\n\tget focused() {\n\t\treturn this._focused;\n\t}\n\n\tget searchTerm() {\n\t\treturn this._searchTerm();\n\t}\n\n\tget selectedItems(): NgOption[] {\n\t\treturn this.itemsList.selectedItems;\n\t}\n\n\tget selectedValues() {\n\t\treturn this.selectedItems.map((x) => x.value);\n\t}\n\n\tget hasValue() {\n\t\treturn this.selectedItems.length > 0;\n\t}\n\n\tget currentPanelPosition(): DropdownPosition {\n\t\tif (this.dropdownPanel()) {\n\t\t\treturn this.dropdownPanel().currentPosition;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tget showAddTag() {\n\t\tif (!this._validTerm()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst term = this.searchTerm.toLowerCase().trim();\n\t\treturn (\n\t\t\tthis.addTag() &&\n\t\t\t!this.itemsList.filteredItems.some((x) => x.label.toLowerCase() === term) &&\n\t\t\t((!this.hideSelected() && this.isOpen()) || !this.selectedItems.some((x) => x.label.toLowerCase() === term)) &&\n\t\t\t!this.loading()\n\t\t);\n\t}\n\n\tclearItem = (item: any) => {\n\t\tconst option = this.selectedItems.find((x) => x.value === item);\n\t\tthis.unselect(option);\n\t};\n\n\tngOnInit() {\n\t\tthis._handleKeyPresses();\n\t\tthis._setInputAttributes();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.multiple) {\n\t\t\tthis.itemsList.clearSelected(false);\n\t\t}\n\t\tif (changes.items) {\n\t\t\tthis._itemsAreUsed = true;\n\t\t\tthis._setItems(changes.items.currentValue || []);\n\t\t}\n\t\tif (changes.isOpen) {\n\t\t\tthis._manualOpen = isDefined(changes.isOpen.currentValue);\n\t\t}\n\t\tif (changes.groupBy) {\n\t\t\tif (!changes.items) {\n\t\t\t\tthis._setItems([...this.items()]);\n\t\t\t}\n\t\t}\n\t\tif (changes.inputAttrs) {\n\t\t\tthis._setInputAttributes();\n\t\t}\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\tngAfterViewInit() {\n\t\tif (!this._itemsAreUsed) {\n\t\t\tthis.escapeHTML = false;\n\t\t\tthis._setItemsFromNgOptions();\n\t\t}\n\n\t\tif (isDefined(this.autoFocus)) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t@HostListener('keydown', ['$event'])\n\thandleKeyDown($event: KeyboardEvent) {\n\t\tconst keyName = $event.key;\n\t\tif (Object.values(KeyCode).includes(keyName as KeyCode)) {\n\t\t\tif (this.keyDownFn()($event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handleKeyCode($event);\n\t\t} else if (keyName && keyName.length === 1) {\n\t\t\tthis._keyPress$.next(keyName.toLocaleLowerCase());\n\t\t}\n\t}\n\n\thandleKeyCode($event: KeyboardEvent) {\n\t\tconst target = $event.target;\n\n\t\tif (this.clearButton() && this.clearButton().nativeElement === target) {\n\t\t\tthis.handleKeyCodeClear($event);\n\t\t} else {\n\t\t\tthis.handleKeyCodeInput($event);\n\t\t}\n\t}\n\n\thandleKeyCodeInput($event: KeyboardEvent) {\n\t\tswitch ($event.key) {\n\t\t\tcase KeyCode.ArrowDown:\n\t\t\t\tthis._handleArrowDown($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.ArrowUp:\n\t\t\t\tthis._handleArrowUp($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Space:\n\t\t\t\tthis._handleSpace($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Enter:\n\t\t\t\tthis._handleEnter($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Tab:\n\t\t\t\tthis._handleTab($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Esc:\n\t\t\t\tthis.close();\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Backspace:\n\t\t\t\tthis._handleBackspace();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\thandleKeyCodeClear($event: KeyboardEvent) {\n\t\tswitch ($event.key) {\n\t\t\tcase KeyCode.Enter:\n\t\t\t\tthis.handleClearClick();\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\thandleMousedown($event: MouseEvent) {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.preventToggleOnRightClick() && $event.button === 2) {\n\t\t\treturn false;\n\t\t}\n\t\tconst target = $event.target as HTMLElement;\n\t\tif (target.tagName !== 'INPUT') {\n\t\t\t$event.preventDefault();\n\t\t}\n\n\t\tif (target.classList.contains('ng-clear-wrapper')) {\n\t\t\t// Don't handle clear on mousedown - let click event handle it\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.classList.contains('ng-arrow-wrapper')) {\n\t\t\tthis.handleArrowClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.classList.contains('ng-value-icon')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._focused) {\n\t\t\tthis.focus();\n\t\t}\n\n\t\tif (this.searchable()) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\thandleArrowClick() {\n\t\tif (this.isOpen()) {\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\thandleClearClick(_event?: MouseEvent) {\n\t\tif (this.hasValue) {\n\t\t\tthis.itemsList.clearSelected(this.clearKeepsDisabledOptions());\n\t\t\tthis._updateNgModel();\n\t\t}\n\t\tthis._clearSearch();\n\t\tthis.focus();\n\t\tthis.clearEvent.emit();\n\n\t\tthis._onSelectionChanged();\n\t}\n\n\tclearModel() {\n\t\tif (!this.clearable()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.clearSelected(false);\n\t\tthis._updateNgModel();\n\t}\n\n\twriteValue(value: any | any[]): void {\n\t\tthis.itemsList.clearSelected(false);\n\t\tthis._handleWriteValue(value);\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._cd.markForCheck();\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(state: boolean): void {\n\t\tthis._disabled.set(state);\n\t\tthis._cd.markForCheck();\n\t}\n\n\ttoggle() {\n\t\tif (!this.isOpen()) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\topen() {\n\t\tif (this.disabled() || this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.typeahead()?.observed && !this.addTag() && this.itemsList.noItemsToSelect) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isOpen.set(true);\n\t\tthis._reflectOpenState(true);\n\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\tthis.openEvent.emit();\n\t\tif (!this.searchTerm) {\n\t\t\tthis.focus();\n\t\t}\n\t\tthis.detectChanges();\n\t}\n\n\tclose() {\n\t\tif (!this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isOpen.set(false);\n\t\tthis._reflectOpenState(false);\n\t\tthis._isComposing = false;\n\t\tif (!this._editableSearchTermActive()) {\n\t\t\tthis._clearSearch();\n\t\t} else {\n\t\t\tthis.itemsList.resetFilteredItems();\n\t\t}\n\t\tthis.itemsList.unmarkItem();\n\t\tthis._onTouched();\n\t\tthis.closeEvent.emit();\n\t\tthis.detectChanges();\n\t}\n\n\ttoggleItem(item: NgOption) {\n\t\tif (!item || item.disabled || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.deselectOnClickValue() && item.selected) {\n\t\t\tthis.unselect(item);\n\t\t} else {\n\t\t\tthis.select(item);\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\tthis.itemsList.select(item);\n\t\t\tif (this.clearSearchOnAddValue() && !this._editableSearchTermActive()) {\n\t\t\t\tthis._clearSearch();\n\t\t\t}\n\n\t\t\tthis._updateNgModel();\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.addEvent.emit(item.value);\n\t\t\t}\n\t\t}\n\n\t\tif (this.closeOnSelect() || this.itemsList.noItemsToSelect) {\n\t\t\tthis.close();\n\t\t}\n\n\t\tthis._onSelectionChanged();\n\t}\n\n\tfocus() {\n\t\tthis.searchInput().nativeElement.focus();\n\t}\n\n\tblur() {\n\t\tthis.searchInput().nativeElement.blur();\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.itemsList.unselect(item);\n\t\tthis.focus();\n\t\tthis._updateNgModel();\n\t\tthis.removeEvent.emit(item.value);\n\t\tthis._onSelectionChanged();\n\t}\n\n\tselectTag() {\n\t\tlet tag;\n\t\tif (isFunction(this.addTag())) {\n\t\t\ttag = (<AddTagFn>this.addTag())(this.searchTerm);\n\t\t} else {\n\t\t\ttag = this._primitive ? this.searchTerm : { [this.bindLabel()]: this.searchTerm };\n\t\t}\n\n\t\tconst handleTag = (item) =>\n\t\t\tthis.typeahead()?.observed || !this.isOpen() ? this.itemsList.mapItem(item, null) : this.itemsList.addItem(item);\n\t\tif (isPromise(tag)) {\n\t\t\t// The same guard the synchronous branch has always had. An `addTag` that\n\t\t\t// resolves with nothing is saying \"there is nothing to add\" — a creation\n\t\t\t// dialog dismissed, a request refused — and selecting it anyway turned that\n\t\t\t// into an option built out of `false` or `null`, added to the list and\n\t\t\t// written into the form. The caller had said no and the field answered with\n\t\t\t// a record that does not exist.\n\t\t\ttag.then((item) => {\n\t\t\t\tif (item) {\n\t\t\t\t\tthis.select(handleTag(item));\n\t\t\t\t}\n\t\t\t}).catch(() => {});\n\t\t} else if (tag) {\n\t\t\tthis.select(handleTag(tag));\n\t\t}\n\t}\n\n\tshowClear() {\n\t\treturn this.clearable() && (this.hasValue || this.searchTerm) && !this.disabled();\n\t}\n\n\tfocusOnClear() {\n\t\tthis.blur();\n\t\tif (this.clearButton()) {\n\t\t\tthis.clearButton().nativeElement.focus();\n\t\t}\n\t}\n\n\ttrackByOption = (_: number, item: NgOption) => {\n\t\tif (this.trackByFn()) {\n\t\t\treturn this.trackByFn()(item.value);\n\t\t}\n\n\t\treturn item;\n\t};\n\n\tshowNoItemsFound() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn (\n\t\t\t((empty && !this.typeahead()?.observed && !this.loading()) ||\n\t\t\t\t(empty && this.typeahead()?.observed && this._validTerm() && !this.loading())) &&\n\t\t\t!this.showAddTag\n\t\t);\n\t}\n\n\tshowTypeToSearch() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn empty && this.typeahead()?.observed && !this._validTerm() && !this.loading();\n\t}\n\n\tonCompositionStart() {\n\t\tthis._isComposing = true;\n\t}\n\n\tonCompositionEnd(term: string) {\n\t\tthis._isComposing = false;\n\t\tif (this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.filter(term);\n\t}\n\n\tfilter(term: string) {\n\t\tif (this._isComposing && !this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._searchTerm.set(term);\n\t\tif (this.typeahead()?.observed && (this._validTerm() || this.minTermLength() === 0)) {\n\t\t\tthis.typeahead().next(term);\n\t\t}\n\n\t\tif (!this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(term);\n\t\t\tif (this.isOpen()) {\n\t\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t\t}\n\t\t}\n\n\t\tthis.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((x) => x.value) });\n\t\tthis.open();\n\t}\n\n\tonInputFocus($event: FocusEvent) {\n\t\tif (this._focused) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\n\t\tthis.element.classList.add('ng-select-focused');\n\t\tthis.focusEvent.emit($event);\n\t\tthis._focused = true;\n\t}\n\n\tonInputBlur($event: FocusEvent) {\n\t\tthis.element.classList.remove('ng-select-focused');\n\t\tthis.blurEvent.emit($event);\n\t\tif (!this.isOpen() && !this.disabled()) {\n\t\t\tthis._onTouched();\n\t\t}\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._focused = false;\n\t}\n\n\tonItemHover(item: NgOption) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.markItem(item);\n\t}\n\n\tdetectChanges() {\n\t\tif (!(<any>this._cd).destroyed) {\n\t\t\tthis._cd.detectChanges();\n\t\t}\n\t}\n\n\tprivate _onChange = (_: any) => {};\n\n\tprivate _onTouched = () => {};\n\n\tprivate _setSearchTermFromItems() {\n\t\tconst selected = this.selectedItems?.[0];\n\t\tthis._searchTerm.set(selected?.label ?? null);\n\t}\n\n\tprivate _setItems(items: readonly any[]) {\n\t\tconst firstItem = items[0];\n\t\tthis.bindLabel.set(this.bindLabel() || this._defaultLabel);\n\t\tthis._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel() === this._defaultLabel;\n\t\tthis.itemsList.setItems(items);\n\t\tif (items.length > 0 && this.hasValue) {\n\t\t\tthis.itemsList.mapSelectedItems();\n\t\t}\n\t\tif (this.isOpen() && isDefined(this.searchTerm) && !this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(this.searchTerm);\n\t\t}\n\t\tif (this.typeahead()?.observed || this.isOpen()) {\n\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t}\n\t}\n\n\tprivate _setItemsFromNgOptions() {\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst options = this.ngOptions();\n\t\t\t\t// Wait until all ng-option inputs are initialized (avoids _groupBy crash when values load async)\n\t\t\t\tif (options.length > 0 && !options.every((opt) => opt.isInitialized())) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.bindLabel.set(this._defaultLabel);\n\t\t\t\tconst items =\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t$ngOptionValue: option.value(),\n\t\t\t\t\t\t$ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n\t\t\t\t\t\tdisabled: option.disabled(),\n\t\t\t\t\t})) ?? [];\n\t\t\t\tthis.items.set(items);\n\t\t\t\tthis.itemsList.setItems(items);\n\t\t\t\tif (this.hasValue) {\n\t\t\t\t\tthis.itemsList.mapSelectedItems();\n\t\t\t\t}\n\t\t\t\tthis._cd.detectChanges();\n\n\t\t\t\toptions\n\t\t\t\t\t// find item for each option\n\t\t\t\t\t.map((option) => ({\n\t\t\t\t\t\toption,\n\t\t\t\t\t\titem: this.itemsList.findItem(option.value()),\n\t\t\t\t\t}))\n\t\t\t\t\t// filter non found items\n\t\t\t\t\t.filter(({ item }) => isDefined(item))\n\t\t\t\t\t// process to update disabled and label\n\t\t\t\t\t.forEach(({ option, item }) => {\n\t\t\t\t\t\titem.disabled = option.disabled();\n\t\t\t\t\t\titem.label = option.label() || item.label;\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this._injector },\n\t\t);\n\t}\n\n\tprivate _isValidWriteValue(value: any): boolean {\n\t\tif (!isDefined(value) || (this.multiple() && value === '') || (Array.isArray(value) && value.length === 0)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst validateBinding = (item: any): boolean => {\n\t\t\tif (!isDefined(this.compareWith()) && isObject(item) && this.bindValue()) {\n\t\t\t\tthis._console.warn(\n\t\t\t\t\t`Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthis._console.warn('Multiple select ngModel should be array.');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn value.every((item) => validateBinding(item));\n\t\t} else {\n\t\t\treturn validateBinding(value);\n\t\t}\n\t}\n\n\tprivate _handleWriteValue(ngModel: any | any[]) {\n\t\tif (!this._isValidWriteValue(ngModel)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst select = (val: any) => {\n\t\t\tlet item = this.itemsList.findItem(val);\n\t\t\tif (item) {\n\t\t\t\tthis.itemsList.select(item);\n\t\t\t} else {\n\t\t\t\tconst isValObject = isObject(val);\n\t\t\t\tconst isPrimitive = !isValObject && !this.bindValue();\n\t\t\t\tif (isValObject || isPrimitive) {\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(val, null));\n\t\t\t\t} else if (this.bindValue()) {\n\t\t\t\t\titem = {\n\t\t\t\t\t\t[this.bindLabel()]: null,\n\t\t\t\t\t\t[this.bindValue()]: val,\n\t\t\t\t\t};\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(item, null));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\t(<any[]>ngModel).forEach((item) => select(item));\n\t\t} else {\n\t\t\tselect(ngModel);\n\t\t}\n\t}\n\n\tprivate _handleKeyPresses() {\n\t\tif (this.searchable()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._keyPress$\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttap((letter) => this._pressedKeys.push(letter)),\n\t\t\t\tdebounceTime(200),\n\t\t\t\tfilter(() => this._pressedKeys.length > 0),\n\t\t\t\tmap(() => this._pressedKeys.join('')),\n\t\t\t)\n\t\t\t.subscribe((term) => {\n\t\t\t\tconst item = this.itemsList.findByLabel(term);\n\t\t\t\tif (item) {\n\t\t\t\t\tif (this.isOpen()) {\n\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\tthis.itemsList.markItem(item);\n\t\t\t\t\t\t\tthis._scrollToMarked();\n\t\t\t\t\t\t\tthis._cd.markForCheck();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.select(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._pressedKeys = [];\n\t\t\t});\n\t}\n\n\tprivate _setInputAttributes() {\n\t\tconst input = this.searchInput().nativeElement;\n\t\tconst attributes = {\n\t\t\ttype: 'text',\n\t\t\tautocorrect: 'off',\n\t\t\tautocapitalize: 'off',\n\t\t\tautocomplete: 'off',\n\t\t\t'aria-controls': this.dropdownId,\n\t\t\t...this.inputAttrs(),\n\t\t};\n\n\t\tfor (const key of Object.keys(attributes)) {\n\t\t\tinput.setAttribute(key, attributes[key]);\n\t\t}\n\t}\n\n\tprivate _setTabFocusOnClear() {\n\t\tthis.tabFocusOnClear.set(isDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear);\n\t}\n\n\tprivate _updateNgModel() {\n\t\tconst model = [];\n\t\tfor (const item of this.selectedItems) {\n\t\t\tif (this.bindValue()) {\n\t\t\t\tlet value = null;\n\t\t\t\tif (item.children) {\n\t\t\t\t\tconst groupKey = this.groupValue() ? this.bindValue() : <string>this.groupBy();\n\t\t\t\t\tvalue = item.value[groupKey || <string>this.groupBy()];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = this.itemsList.resolveNested(item.value, this.bindValue());\n\t\t\t\t}\n\t\t\t\tmodel.push(value);\n\t\t\t} else {\n\t\t\t\tmodel.push(item.value);\n\t\t\t}\n\t\t}\n\n\t\tconst selected = this.selectedItems.map((x) => x.value);\n\t\tif (this.multiple()) {\n\t\t\tthis._onChange(model);\n\t\t\tthis.changeEvent.emit(selected);\n\t\t} else {\n\t\t\tthis._onChange(isDefined(model[0]) ? model[0] : null);\n\t\t\tthis.changeEvent.emit(selected[0]);\n\t\t}\n\n\t\tthis._cd.markForCheck();\n\t}\n\n\tprivate _clearSearch() {\n\t\tif (!this.searchTerm) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._changeSearch(null);\n\t\tthis.itemsList.resetFilteredItems();\n\t}\n\n\tprivate _changeSearch(searchTerm: string) {\n\t\tthis._searchTerm.set(searchTerm);\n\t\tif (this.typeahead()?.observed) {\n\t\t\tthis.typeahead().next(searchTerm);\n\t\t}\n\t}\n\n\tprivate _scrollToMarked() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollTo(this.itemsList.markedItem);\n\t}\n\n\tprivate _scrollToTag() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollToTag();\n\t}\n\n\tprivate _onSelectionChanged() {\n\t\tconst appendTo = this.appendTo() ?? this.config.appendTo;\n\t\tif (this.isOpen() && this.deselectOnClickValue() && appendTo) {\n\t\t\t// Make sure items are rendered.\n\t\t\tthis._cd.detectChanges();\n\t\t\tthis.dropdownPanel().adjustPosition();\n\t\t}\n\t}\n\n\tprivate _handleTab($event: KeyboardEvent) {\n\t\tif (this.isOpen() === false) {\n\t\t\tif (this.showClear() && !$event.shiftKey && this.tabFocusOnClear()) {\n\t\t\t\tthis.focusOnClear();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (!this.addTag()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.selectOnTab()) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprivate _handleEnter($event: KeyboardEvent) {\n\t\tconst openOnEnter = this.openOnEnter() ?? this.config.openOnEnter;\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t}\n\t\t} else if (openOnEnter) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleSpace($event: KeyboardEvent) {\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowDown($event: KeyboardEvent) {\n\t\tif (this._nextItemIsTag(+1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markNextItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowUp($event: KeyboardEvent) {\n\t\tif (!this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._nextItemIsTag(-1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markPreviousItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _nextItemIsTag(nextStep: number): boolean {\n\t\tconst nextIndex = this.itemsList.markedIndex + nextStep;\n\t\treturn (\n\t\t\tthis.addTag() && this.searchTerm && this.itemsList.markedItem && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n\t\t);\n\t}\n\n\tprivate _handleBackspace() {\n\t\tif (this.searchTerm || !this.clearable() || !this.clearOnBackspace() || !this.hasValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tthis.unselect(this.itemsList.lastSelectedItem);\n\t\t} else {\n\t\t\tthis.clearModel();\n\t\t}\n\t}\n\n\tprivate _mergeGlobalConfig(config: NgSelectConfig) {\n\t\tthis.bindValue.set(this.bindValue() || config.bindValue);\n\t\tthis.bindLabel.set(this.bindLabel() || config.bindLabel);\n\t\tthis.appearance.set(this.appearance() || config.appearance);\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\t/**\n\t * Gets virtual scroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if virtual scroll is enabled, `false` otherwise\n\t */\n\tprivate getVirtualScroll(config: NgSelectConfig): boolean {\n\t\treturn isDefined(this._virtualScroll()) ? this._virtualScroll()! : this.isVirtualScrollDisabled(config);\n\t}\n\n\t/**\n\t * Gets disableVirtualScroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if disableVirtualScroll is enabled, `false` otherwise\n\t */\n\tprivate isVirtualScrollDisabled(config: NgSelectConfig) {\n\t\treturn isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;\n\t}\n}\n","<div\n\t(mousedown)=\"handleMousedown($event)\"\n\t[class.ng-appearance-outline]=\"appearance() === 'outline'\"\n\t[class.ng-appearance-fill]=\"appearance() === 'fill'\"\n\t[class.ng-has-value]=\"hasValue\"\n\tclass=\"ng-select-container\">\n\t<div class=\"ng-value-container\">\n\t\t@if ((selectedItems.length === 0 && !searchTerm) || (fixedPlaceholder() ?? config.fixedPlaceholder)) {\n\t\t\t<ng-template #defaultPlaceholderTemplate>\n\t\t\t\t<div class=\"ng-placeholder\">{{ placeholder() ?? config.placeholder }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"placeholderTemplate() || defaultPlaceholderTemplate\"> </ng-template>\n\t\t}\n\n\t\t@if ((!multiLabelTemplate() || !multiple()) && selectedItems.length > 0) {\n\t\t\t@for (item of selectedItems; track trackByOption($index, item)) {\n\t\t\t\t<div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\">\n\t\t\t\t\t<ng-template #defaultLabelTemplate>\n\t\t\t\t\t\t<span class=\"ng-value-icon left\" (click)=\"unselect(item)\" aria-hidden=\"true\">×</span>\n\t\t\t\t\t\t<span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"labelTemplate() || defaultLabelTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\n\t\t@if (multiple() && multiLabelTemplate() && selectedValues.length > 0) {\n\t\t\t<ng-template [ngTemplateOutlet]=\"multiLabelTemplate()\" [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n\t\t\t</ng-template>\n\t\t}\n\n\t\t<div class=\"ng-input\">\n\t\t\t<input\n\t\t\t\t#searchInput\n\t\t\t\t(blur)=\"onInputBlur($event)\"\n\t\t\t\t(change)=\"$event.stopPropagation()\"\n\t\t\t\t(compositionend)=\"onCompositionEnd(searchInput.value)\"\n\t\t\t\t(compositionstart)=\"onCompositionStart()\"\n\t\t\t\t(focus)=\"onInputFocus($event)\"\n\t\t\t\t(input)=\"filter(searchInput.value)\"\n\t\t\t\t[attr.aria-activedescendant]=\"isOpen() ? itemsList?.markedItem?.htmlId : null\"\n\t\t\t\t[attr.aria-controls]=\"isOpen() ? dropdownId : null\"\n\t\t\t\t[attr.aria-expanded]=\"isOpen()\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\t\t[attr.id]=\"labelForId()\"\n\t\t\t\t[attr.tabindex]=\"tabIndex()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readOnly]=\"!searchable() || itemsList.maxItemsSelected\"\n\t\t\t\t[value]=\"searchTerm ?? ''\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\trole=\"combobox\" />\n\t\t</div>\n\t</div>\n\n\t@if (loading()) {\n\t\t<ng-template #defaultLoadingSpinnerTemplate>\n\t\t\t<div class=\"ng-spinner-loader\"></div>\n\t\t</ng-template>\n\t\t<ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate() || defaultLoadingSpinnerTemplate\"></ng-template>\n\t}\n\n\t@if (showClear()) {\n\t\t<span\n\t\t\tclass=\"ng-clear-wrapper\"\n\t\t\trole=\"button\"\n\t\t\ttabindex=\"0\"\n\t\t\t[attr.tabindex]=\"tabFocusOnClear() ? 0 : -1\"\n\t\t\ttitle=\"{{ clearAllText() || config.clearAllText }}\"\n\t\t\t#clearButton\n\t\t\t(click)=\"handleClearClick($event)\">\n\t\t\t@if (clearButtonTemplate()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"clearButtonTemplate()\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t<span class=\"ng-clear\" aria-hidden=\"true\">×</span>\n\t\t\t}\n\t\t</span>\n\t}\n\n\t<span class=\"ng-arrow-wrapper\">\n\t\t<span class=\"ng-arrow\"></span>\n\t</span>\n</div>\n\n@if (isOpen()) {\n\t@let appendToValue = appendTo() || config.appendTo;\n\t<ng-dropdown-panel\n\t\tclass=\"ng-dropdown-panel\"\n\t\t[virtualScroll]=\"dropdownVirtualScroll()\"\n\t\t[bufferAmount]=\"bufferAmount()\"\n\t\t[appendTo]=\"appendToValue\"\n\t\t[position]=\"dropdownPosition()\"\n\t\t[outsideClickEvent]=\"outsideClickEvent()\"\n\t\t[headerTemplate]=\"headerTemplate()\"\n\t\t[footerTemplate]=\"footerTemplate()\"\n\t\t[filterValue]=\"searchTerm\"\n\t\t[items]=\"itemsList.filteredItems\"\n\t\t[showAddTag]=\"showAddTag\"\n\t\t[markedItem]=\"itemsList.markedItem\"\n\t\t(update)=\"viewPortItems = $event\"\n\t\t(scroll)=\"scroll.emit($event)\"\n\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t(outsideClick)=\"close()\"\n\t\t[class.ng-select-multiple]=\"multiple()\"\n\t\t[class]=\"appendToValue ? (ngClass() ? ngClass() : classes) : null\"\n\t\t[id]=\"dropdownId\"\n\t\t[ariaLabelDropdown]=\"ariaLabelDropdown() ?? config.ariaLabelDropdown\"\n\t\t[popover]=\"popover()\">\n\t\t<ng-container>\n\t\t\t@for (item of viewPortItems; track trackByOption($index, item)) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[attr.role]=\"item.children ? 'group' : 'option'\"\n\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t(mouseover)=\"onItemHover(item)\"\n\t\t\t\t\t[class.ng-option-disabled]=\"item.disabled\"\n\t\t\t\t\t[class.ng-option-selected]=\"item.selected\"\n\t\t\t\t\t[class.ng-optgroup]=\"item.children\"\n\t\t\t\t\t[class.ng-option]=\"!item.children\"\n\t\t\t\t\t[class.ng-option-child]=\"!!item.parent\"\n\t\t\t\t\t[class.ng-option-marked]=\"item === itemsList.markedItem\"\n\t\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t\t[attr.id]=\"item?.htmlId\"\n\t\t\t\t\t[attr.aria-setsize]=\"itemsList.filteredItems.length\"\n\t\t\t\t\t[attr.aria-posinset]=\"(item.index ?? 0) + 1\">\n\t\t\t\t\t<ng-template #defaultOptionTemplate>\n\t\t\t\t\t\t<span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\titem.children ? optgroupTemplate() || defaultOptionTemplate : optionTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, item$: item, index: item.index, searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (showAddTag) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[class.ng-option-marked]=\"!itemsList.markedItem\"\n\t\t\t\t\t(mouseover)=\"itemsList.unmarkItem()\"\n\t\t\t\t\trole=\"option\"\n\t\t\t\t\t[attr.aria-selected]=\"false\"\n\t\t\t\t\t(click)=\"selectTag()\">\n\t\t\t\t\t<ng-template #defaultTagTemplate>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t><span class=\"ng-tag-label\">{{ addTagText() || config.addTagText }}</span\n\t\t\t\t\t\t\t>\"{{ searchTerm }}\"</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"tagTemplate() || defaultTagTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-container>\n\t\t@if (showNoItemsFound()) {\n\t\t\t<ng-template #defaultNotFoundTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ notFoundText() ?? config.notFoundText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"notFoundTemplate() || defaultNotFoundTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t\t@if (showTypeToSearch()) {\n\t\t\t<ng-template #defaultTypeToSearchTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ typeToSearchText() || config.typeToSearchText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"typeToSearchTemplate() || defaultTypeToSearchTemplate\"></ng-template>\n\t\t}\n\t\t@if (loading() && itemsList.filteredItems.length === 0) {\n\t\t\t<ng-template #defaultLoadingTextTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ loadingText() || config.loadingText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"loadingTextTemplate() || defaultLoadingTextTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t</ng-dropdown-panel>\n}\n\n<!-- Always present aria-live region -->\n<div aria-atomic=\"true\" aria-live=\"polite\" class=\"ng-visually-hidden\" role=\"status\">\n\t@if (isOpen() && showNoItemsFound()) {\n\t\t{{ notFoundText() ?? config.notFoundText }}\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../interfaces/common.interface';\nimport { HubSelectFormat, HubSelectFormats } from '../interfaces/select.interface';\nimport { HubSelectSuffixDirective } from '../directives/select-suffix.directive';\nimport { HubAppendDirective } from '../directives/append.directive';\nimport { HubPrependDirective } from '../directives/prepend.directive';\nimport { HubFieldControl } from '../shared/hub-field-control';\nimport { areEqual, get } from '../utils/utils';\nimport { NgSelectComponent } from './vendor/lib/ng-select.component';\nimport { NgSelectConfig } from './vendor/lib/config.service';\nimport { NgOptionComponent } from './vendor/lib/ng-option.component';\nimport {\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective\n} from './vendor/lib/ng-templates.directive';\n\n/**\n * Accessible select / multiselect / autocomplete built on the vendored ng-select engine, with the\n * `ng-hub-ui-forms` conventions on top: CVA binding, automatic error display (via\n * {@link HubFieldControl}), label, helper text and `--hub-select-*` token theming.\n *\n * The underlying ng-select DOM is themed in place from this component's stylesheet\n * (`ViewEncapsulation.None`) using hub tokens — no external `::ng-deep` overrides, and the vendored\n * source stays untouched so the upstream sync remains automatic.\n *\n * @example\n * ```html\n * <hub-select formControlName=\"country\" label=\"Country\" [items]=\"countries\" bindLabel=\"name\" bindValue=\"code\" />\n * ```\n */\n@Component({\n\tselector: 'hub-select',\n\timports: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tFormsModule,\n\t\tNgSelectComponent,\n\t\tNgOptionComponent,\n\t\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective\n\t],\n\ttemplateUrl: './select.component.html',\n\tstyleUrl: './select.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-select-host]': 'true'\n\t}\n})\nexport class HubSelectComponent extends HubFieldControl {\n\t/**\n\t * The app's global select configuration, read here rather than left to the engine: the\n\t * vendored source is re-synced from upstream, so a fallback that lives in its template is\n\t * one sync away from disappearing. See {@link placeholder}.\n\t */\n\tprotected readonly _ngSelectConfig = inject(NgSelectConfig);\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _selectFormats = HubSelectFormats;\n\tprotected readonly _value = signal<any>(null);\n\n\t// ── Customization templates ──────────────────────────────────────────────\n\t// ng-select resolves its templates with `contentChild` (no `descendants`),\n\t// which does NOT see through this wrapper's `<ng-content>`. We grab the\n\t// consumer-projected templates here and re-declare them as direct content of\n\t// the inner ng-select (see the template), forwarding each with its context —\n\t// so `<ng-template ng-option-tmp>` etc. work through `<hub-select>`.\n\tprotected readonly _optionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\n\t/** Deprecated select-only slot, superseded by `[hubAppend]`. */\n\tprotected readonly _legacySuffixTpl = contentChild(HubSelectSuffixDirective, { read: TemplateRef });\n\n\t/** Projected inline-start content (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected inline-end content (`[hubAppend]`), falling back to the deprecated slot. */\n\tprotected readonly _appendTpl = computed(() => this._genericAppendTpl() ?? this._legacySuffixTpl());\n\n\t/** The generic slot on its own, so `[hubAppend]` wins when both are declared. */\n\tprivate readonly _genericAppendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Whether content is attached to the trailing edge. */\n\tprotected readonly hasAppendTpl = computed<boolean>(() => !!this._appendTpl());\n\n\t/** Whether content is attached to the leading edge. */\n\tprotected readonly hasPrependTpl = computed<boolean>(() => !!this._prependTpl());\n\n\t/**\n\t * Text shown before the control as a group addon — the same contract as `hub-input`, so a\n\t * currency, a unit or a protocol reads identically whichever field carries it. A single\n\t * string is one addon; an array is a run of them.\n\t *\n\t * Distinct from `[hubSelectSuffix]`: an addon is a static label sharing the field's border,\n\t * while the suffix is an interactive control. Both can be present.\n\t */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether a leading addon is present. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0);\n\n\t/** Whether a trailing addon is present. */\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0);\n\n\t/**\n\t * Rendering format (`dropdown`, `buttons`, `checkbox`, `radio`).\n\t *\n\t * @deprecated The non-dropdown values (`buttons` / `checkbox` / `radio`) are deprecated and\n\t * will be removed in the next major — use `<hub-segmented>` instead, which is the dedicated,\n\t * lightweight control for inline options as segments/buttons (single **and** multiple selection,\n\t * horizontal **and** vertical, with label / helper text). Migration: `format=\"buttons\"` →\n\t * `<hub-segmented>`; `format=\"checkbox\"` → `<hub-segmented [multiple]=\"true\">`; `format=\"radio\"`\n\t * → `<hub-segmented [vertical]=\"true\">`. Only `dropdown` (the default) will remain on `hub-select`.\n\t */\n\treadonly format = input<HubSelectFormat>(this._selectFormats.Dropdown);\n\n\t/**\n\t * Lay out the `buttons`/`checkbox`/`radio` options vertically.\n\t *\n\t * @deprecated Tied to the deprecated non-dropdown `format` values — use `<hub-segmented [vertical]=\"true\">` instead.\n\t */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Items to choose from. */\n\treadonly items = input<any[]>([]);\n\n\t/** Property used as the visible label for object items. */\n\treadonly bindLabel = input<string | undefined>(undefined);\n\n\t/** Property used as the bound value for object items. */\n\treadonly bindValue = input<string | undefined>(undefined);\n\n\t/** Property (or fn) used to group items. */\n\treadonly groupBy = input<string | undefined>(undefined);\n\n\t/**\n\t * How typing matches an item, when matching its label is not enough.\n\t *\n\t * The underlying select has always taken one; this wrapper did not pass it on, so a\n\t * consumer who wanted to search by something the option shows but the label does not\n\t * — the building a room is in, the code beside a name — had to smuggle it into\n\t * `bindLabel` and then hide it again with a label template.\n\t */\n\treadonly searchFn = input<((term: string, item: any) => boolean) | undefined>(\n\t\tundefined\n\t);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/**\n\t * Placeholder text. Left undefined so the engine falls back to the app's `NgSelectConfig`,\n\t * which carries no placeholder of its own unless the app sets one. See {@link notFoundText}.\n\t */\n\treadonly placeholder = input<string | undefined>(undefined);\n\n\t/** Whether multiple selection is allowed. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Whether the options can be searched. */\n\treadonly searchable = input(true, { transform: booleanAttribute });\n\n\t/** Whether the selection can be cleared. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\n\n\t/** Whether the dropdown closes after a selection. */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Keep the placeholder visible even when a value is selected. Defaults to `false` (the\n\t * placeholder hides on selection) — ng-select v23 defaults this to `true`, which is not the\n\t * conventional behavior.\n\t */\n\treadonly fixedPlaceholder = input(false, { transform: booleanAttribute });\n\n\t/** Whether the control shows a loading state. */\n\treadonly loading = input(false, { transform: booleanAttribute });\n\n\t/** Whether the control is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text shown when no items match. Left undefined so the engine falls back to the app's\n\t * `NgSelectConfig`, which is where a translated build sets it once for every select.\n\t */\n\treadonly notFoundText = input<string | undefined>(undefined);\n\n\t/**\n\t * Where the dropdown panel is rendered, as a CSS selector. Defaults to\n\t * `'body'` so the panel escapes `overflow`/`transform` ancestors (cards,\n\t * scroll containers, modals) and is never clipped. Pass `undefined` to\n\t * render it inline within the component instead.\n\t */\n\treadonly appendTo = input<string | undefined>('body');\n\n\t/**\n\t * Allows creating new items from the search term (dropdown format). `true`\n\t * adds the term as-is; a function maps the term to a new item (sync or\n\t * `Promise`).\n\t */\n\treadonly addTag = input<boolean | ((term: string) => any | Promise<any>)>(false);\n\n\t/**\n\t * Label of the \"add item\" row shown while typing when `addTag` is enabled. Left undefined\n\t * so the engine falls back to the app's `NgSelectConfig`. See {@link notFoundText}.\n\t */\n\treadonly addTagText = input<string | undefined>(undefined);\n\n\t/** Minimum search-term length before filtering (or `typeahead`) kicks in. */\n\treadonly minTermLength = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Subject that receives search-term changes for async/server-side loading\n\t * (dropdown format). When provided, the control stops filtering client-side\n\t * and pushes each term here; feed the results back through `items`.\n\t *\n\t * Note: the vendor also pushes `null` through the Subject when it clears the\n\t * search box (e.g. right after a selection) — filter it out if you only\n\t * expect strings.\n\t */\n\treadonly typeahead = input<Subject<string> | undefined>(undefined);\n\n\t/**\n\t * Custom equality between an item and the bound value (e.g. objects compared\n\t * by id). When omitted, the vendor's built-in comparison applies.\n\t */\n\treadonly compareWith = input<((a: any, b: any) => boolean) | undefined>(undefined);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** ARIA attributes forwarded to the vendor's combobox search input. */\n\tprotected readonly a11yInputAttrs = computed<Record<string, string>>(() => {\n\t\tconst attrs: Record<string, string> = {};\n\t\tif (this.required()) {\n\t\t\tattrs['aria-required'] = 'true';\n\t\t}\n\t\treturn attrs;\n\t});\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<any>();\n\n\t/** Emits when the control gains focus (dropdown format). */\n\treadonly onFocus = output<any>();\n\n\t/** Emits when the control loses focus (dropdown format). */\n\treadonly onBlur = output<any>();\n\n\t/** Emits when the dropdown opens. */\n\treadonly onOpen = output<void>();\n\n\t/** Emits when the dropdown closes. */\n\treadonly onClose = output<void>();\n\n\t/** Emits when the value is cleared. */\n\treadonly onClear = output<void>();\n\n\t/** Emits on search-term changes (use with `typeahead`/async data). */\n\treadonly onSearch = output<{ term: string; items: any[] }>();\n\n\t/** Emits when an item is added to the selection. */\n\treadonly onAdd = output<any>();\n\n\t/** Emits when an item is removed from the selection. */\n\treadonly onRemove = output<any>();\n\n\t/** Emits while the dropdown list scrolls (virtual scroll window). */\n\treadonly scroll = output<{ start: number; end: number }>();\n\n\t/** Emits when the dropdown list is scrolled to the end (infinite loading). */\n\treadonly scrollToEnd = output<any>();\n\n\t/** Whether the current format selects multiple values. */\n\tprotected readonly isMulti = computed<boolean>(() => {\n\t\tswitch (this.format()) {\n\t\t\tcase this._selectFormats.Checkbox:\n\t\t\t\treturn true;\n\t\t\tcase this._selectFormats.Radio:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn this.multiple();\n\t\t}\n\t});\n\n\twriteValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t}\n\n\t/**\n\t * Propagates the value to the form and outputs.\n\t *\n\t * @param value - The new value emitted by the control.\n\t */\n\tsetValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Resolves the visible label of an item, honoring `bindLabel`.\n\t *\n\t * @param item - The source item.\n\t * @returns The label to display.\n\t */\n\tprotected itemLabel(item: any): any {\n\t\tconst bind = this.bindLabel();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Resolves the bound value of an item, honoring `bindValue`.\n\t *\n\t * @param item - The source item.\n\t * @returns The value stored when the item is selected.\n\t */\n\tprotected itemValue(item: any): any {\n\t\tconst bind = this.bindValue();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Whether an item is currently selected (used by the buttons/checkbox/radio formats).\n\t *\n\t * @param item - The source item.\n\t * @returns `true` when the item's value is part of the current selection.\n\t */\n\tprotected isSelected(item: any): boolean {\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\treturn Array.isArray(this._value()) && this._value().some((v: any) => areEqual(v, value));\n\t\t}\n\n\t\treturn areEqual(this._value(), value);\n\t}\n\n\t/**\n\t * Toggles an item's selection for the buttons/checkbox/radio formats.\n\t *\n\t * @param item - The item to toggle.\n\t */\n\tprotected toggleItem(item: any): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\tconst current: any[] = Array.isArray(this._value()) ? [...this._value()] : [];\n\t\t\tconst index = current.findIndex((v) => areEqual(v, value));\n\n\t\t\tif (index >= 0) {\n\t\t\t\tcurrent.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tcurrent.push(value);\n\t\t\t}\n\n\t\t\tthis.setValue(current);\n\t\t\treturn;\n\t\t}\n\n\t\t// Single selection: clicking the selected item clears it when clearable.\n\t\tif (this.isSelected(item)) {\n\t\t\tthis.setValue(this.clearable() ? null : value);\n\t\t} else {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input to a list, dropping empties so `prepend=\"\"` renders nothing\n\t * rather than an empty box.\n\t *\n\t * @param value - A single addon or a run of them.\n\t * @returns The addons to render, in order.\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-select\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t@switch (format()) {\n\t\t\t@case (_selectFormats.Dropdown) {\n\t\t\t\t<!-- [disabled] is claimed by the NgModel below (alias of its isDisabled input), not by\n\t\t\t\t ng-select — the engine's own `disabled` is a computed fed by setDisabledState.\n\t\t\t\t Dropping [ngModel] here would silently un-wire the disabled state. -->\n\t\t\t\t<!--\n\t\t\t\t\tThe control and its attached action are one field: the group is what makes\n\t\t\t\t\tthem share a line and a border, so a select with a button beside it does not\n\t\t\t\t\tread as two unrelated things that happen to be adjacent.\n\t\t\t\t-->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__group\"\n\t\t\t\t\t[class.hub-select__group--has-prepend]=\"hasPrepend() || hasPrependTpl()\"\n\t\t\t\t\t[class.hub-select__group--has-append]=\"hasAppend() || hasAppendTpl()\"\n\t\t\t\t>\n\t\t\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t\t\t<span class=\"hub-select__attached hub-select__attached--prepend\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-select__addon hub-select__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<ng-select\n\t\t\t\t\t\tclass=\"hub-select__control\"\n\t\t\t\t\t\t[class.hub-select__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[labelForId]=\"$any(id)\"\n\t\t\t\t\t\t[items]=\"items()\"\n\t\t\t\t\t\t[bindLabel]=\"$any(bindLabel())\"\n\t\t\t\t\t\t[searchFn]=\"$any(searchFn())\"\n\t\t\t\t\t\t[bindValue]=\"$any(bindValue())\"\n\t\t\t\t\t\t[groupBy]=\"$any(groupBy())\"\n\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t[searchable]=\"searchable()\"\n\t\t\t\t\t\t[clearable]=\"clearable()\"\n\t\t\t\t\t\t[closeOnSelect]=\"closeOnSelect()\"\n\t\t\t\t\t\t[fixedPlaceholder]=\"fixedPlaceholder()\"\n\t\t\t\t\t\t[loading]=\"loading()\"\n\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[placeholder]=\"placeholder() ?? _ngSelectConfig.placeholder\"\n\t\t\t\t\t\t[notFoundText]=\"notFoundText()\"\n\t\t\t\t\t\t[appendTo]=\"appendTo()\"\n\t\t\t\t\t\t[addTag]=\"$any(addTag())\"\n\t\t\t\t\t\t[addTagText]=\"addTagText()\"\n\t\t\t\t\t\t[minTermLength]=\"minTermLength()\"\n\t\t\t\t\t\t[typeahead]=\"$any(typeahead())\"\n\t\t\t\t\t\t[compareWith]=\"$any(compareWith())\"\n\t\t\t\t\t\t[inputAttrs]=\"a11yInputAttrs()\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t(focus)=\"onFocus.emit($event)\"\n\t\t\t\t\t\t(blur)=\"onBlur.emit($event)\"\n\t\t\t\t\t\t(open)=\"onOpen.emit()\"\n\t\t\t\t\t\t(close)=\"onClose.emit()\"\n\t\t\t\t\t\t(clear)=\"onClear.emit()\"\n\t\t\t\t\t\t(search)=\"onSearch.emit($event)\"\n\t\t\t\t\t\t(add)=\"onAdd.emit($event)\"\n\t\t\t\t\t\t(remove)=\"onRemove.emit($event)\"\n\t\t\t\t\t\t(scroll)=\"scroll.emit($event)\"\n\t\t\t\t\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (_optionTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template\n\t\t\t\t\t\t\t\tng-option-tmp\n\t\t\t\t\t\t\t\tlet-item=\"item\"\n\t\t\t\t\t\t\t\tlet-item$=\"item$\"\n\t\t\t\t\t\t\t\tlet-index=\"index\"\n\t\t\t\t\t\t\t\tlet-searchTerm=\"searchTerm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpl\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item, item$, index, searchTerm }\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_optgroupTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template\n\t\t\t\t\t\t\t\tng-optgroup-tmp\n\t\t\t\t\t\t\t\tlet-item=\"item\"\n\t\t\t\t\t\t\t\tlet-item$=\"item$\"\n\t\t\t\t\t\t\t\tlet-index=\"index\"\n\t\t\t\t\t\t\t\tlet-searchTerm=\"searchTerm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpl\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item, item$, index, searchTerm }\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_labelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\" let-label=\"label\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, clear, label }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_multiLabelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ items, clear }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_headerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-header-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_footerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-footer-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_notFoundTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<ng-content></ng-content>\n\t\t\t\t\t</ng-select>\n\t\t\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-select__addon hub-select__addon--append\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<!--\n\t\t\t\t\t\tThe action goes last, after any append addon, mirroring where hub-input puts\n\t\t\t\t\t\tits password toggle: addons label the field, the action acts on it.\n\t\t\t\t\t-->\n\t\t\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t\t\t<span class=\"hub-select__attached hub-select__attached--append\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case (_selectFormats.Buttons) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__buttons\"\n\t\t\t\t\t[class.hub-select__buttons--vertical]=\"vertical()\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-select__button\"\n\t\t\t\t\t\t\t[class.hub-select__button--selected]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ itemLabel(item) }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__options\"\n\t\t\t\t\t[class.hub-select__options--vertical]=\"vertical()\"\n\t\t\t\t\t[attr.role]=\"format() === _selectFormats.Radio ? 'radiogroup' : 'group'\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<label class=\"hub-select__option\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-select__option-input\"\n\t\t\t\t\t\t\t\t[type]=\"format() === _selectFormats.Radio ? 'radio' : 'checkbox'\"\n\t\t\t\t\t\t\t\t[name]=\"id\"\n\t\t\t\t\t\t\t\t[checked]=\"isSelected(item)\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t\t(change)=\"toggleItem(item)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"hub-select__option-label\">{{ itemLabel(item) }}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</div>\n","/**\n * Minimal native-`Date` helpers for the calendar. Keeps the library free of a date dependency.\n * All helpers operate on local time and treat a day as a calendar day (time ignored).\n */\n\n/** A single cell in the rendered calendar grid. */\nexport interface CalendarDay {\n\t/** The date this cell represents. */\n\tdate: Date;\n\t/** Day-of-month number (1–31). */\n\tday: number;\n\t/** Whether the date belongs to the month currently displayed. */\n\tcurrentMonth: boolean;\n\t/** Whether the date is today. */\n\ttoday: boolean;\n}\n\n/**\n * Formats a `Date` as an ISO `YYYY-MM-DD` string.\n *\n * @param date - The date to format.\n * @returns The ISO date string.\n */\nexport function formatISO(date: Date): string {\n\tconst m = `${date.getMonth() + 1}`.padStart(2, '0');\n\tconst d = `${date.getDate()}`.padStart(2, '0');\n\n\treturn `${date.getFullYear()}-${m}-${d}`;\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date (nullable).\n * @param b - Second date (nullable).\n * @returns `true` when both are non-null and on the same day.\n */\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n\treturn !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\n/**\n * Returns a copy of `date` shifted by `months` (clamping the day to the target month length).\n *\n * @param date - Base date.\n * @param months - Months to add (can be negative).\n * @returns The shifted date.\n */\nexport function addMonths(date: Date, months: number): Date {\n\tconst result = new Date(date.getFullYear(), date.getMonth() + months, 1);\n\tconst lastDay = new Date(result.getFullYear(), result.getMonth() + 1, 0).getDate();\n\n\tresult.setDate(Math.min(date.getDate(), lastDay));\n\n\treturn result;\n}\n\n/**\n * Builds the 6×7 calendar grid for the month containing `viewDate`.\n *\n * @param viewDate - Any date within the month to render.\n * @param firstDayOfWeek - First weekday (0 = Sunday, 1 = Monday…). Defaults to Monday.\n * @returns A flat list of 42 {@link CalendarDay} cells (6 weeks).\n */\nexport function buildCalendarGrid(viewDate: Date, firstDayOfWeek = 1): CalendarDay[] {\n\tconst year = viewDate.getFullYear();\n\tconst month = viewDate.getMonth();\n\tconst firstOfMonth = new Date(year, month, 1);\n\tconst offset = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;\n\tconst start = new Date(year, month, 1 - offset);\n\tconst today = new Date();\n\tconst days: CalendarDay[] = [];\n\n\tfor (let i = 0; i < 42; i++) {\n\t\tconst date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);\n\n\t\tdays.push({\n\t\t\tdate,\n\t\t\tday: date.getDate(),\n\t\t\tcurrentMonth: date.getMonth() === month,\n\t\t\ttoday: isSameDay(date, today)\n\t\t});\n\t}\n\n\treturn days;\n}\n\n/**\n * Returns localized weekday names ordered from `firstDayOfWeek`.\n *\n * @param locale - BCP-47 locale (e.g. `en-US`).\n * @param firstDayOfWeek - First weekday (0 = Sunday, 1 = Monday…).\n * @param format - Weekday width.\n * @returns Seven weekday labels.\n */\nexport function weekdayLabels(locale: string, firstDayOfWeek = 1, format: 'short' | 'narrow' | 'long' = 'short'): string[] {\n\tconst formatter = new Intl.DateTimeFormat(locale, { weekday: format });\n\tconst labels: string[] = [];\n\n\t// 2024-01-07 is a Sunday → use it as the week anchor.\n\tfor (let i = 0; i < 7; i++) {\n\t\tconst date = new Date(2024, 0, 7 + ((firstDayOfWeek + i) % 7));\n\t\tlabels.push(formatter.format(date));\n\t}\n\n\treturn labels;\n}\n\n/** Day-level comparison: returns -1, 0 or 1 like `Array.sort`. */\nexport function compareDay(a: Date, b: Date): number {\n\tconst da = new Date(a.getFullYear(), a.getMonth(), a.getDate()).getTime();\n\tconst db = new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime();\n\n\treturn da < db ? -1 : da > db ? 1 : 0;\n}\n\n/** Whether `date` is strictly before `ref` (day level). */\nexport function isBeforeDay(date: Date, ref: Date): boolean {\n\treturn compareDay(date, ref) < 0;\n}\n\n/** Whether `date` is strictly after `ref` (day level). */\nexport function isAfterDay(date: Date, ref: Date): boolean {\n\treturn compareDay(date, ref) > 0;\n}\n\n/**\n * Whether `date` lies strictly between `start` and `end` (exclusive of the endpoints).\n *\n * @param date - The candidate date.\n * @param start - Range start, or `null`.\n * @param end - Range end, or `null`.\n * @returns `true` when the date is inside the open range.\n */\nexport function isInRange(date: Date, start: Date | null, end: Date | null): boolean {\n\treturn !!start && !!end && isAfterDay(date, start) && isBeforeDay(date, end);\n}\n","/**\n * Granularity-aware helpers for the datepicker: truncation, bounds, parsing and ISO\n * serialization across the whole `year → second` axis.\n *\n * **Everything here works in the reader's local zone, by date parts.** A `Date` is never built\n * from a bare `YYYY-MM-DD` string through `new Date(...)`, because the spec reads that as UTC\n * midnight — which in Spain is the previous afternoon. The only place the engine is trusted to\n * parse is a string that already carries an offset, where it is unambiguous.\n */\n\nimport { HubDatepickerGranularity } from '../../interfaces/datepicker.interface';\n\n/** Granularity units ordered coarsest to finest. */\nconst UNITS: readonly HubDatepickerGranularity[] = ['year', 'month', 'day', 'hour', 'minute', 'second'] as const;\n\nconst pad = (n: number, width = 2): string => `${Math.abs(n)}`.padStart(width, '0');\n\n/** Position of a granularity on the coarse→fine axis. */\nexport function unitIndex(granularity: HubDatepickerGranularity): number {\n\treturn UNITS.indexOf(granularity);\n}\n\n/** Whether a granularity carries a time-of-day (`hour` and finer). */\nexport function carriesTime(granularity: HubDatepickerGranularity): boolean {\n\treturn unitIndex(granularity) >= unitIndex('hour');\n}\n\n/** Whether a granularity is coarser than a day (`year`, `month`) and so uses the period grid. */\nexport function isPeriodUnit(granularity: HubDatepickerGranularity): boolean {\n\treturn unitIndex(granularity) < unitIndex('day');\n}\n\n/**\n * Truncates a date down to the given granularity, keeping every coarser part.\n *\n * @param date - The date to truncate.\n * @param granularity - The precision to keep.\n * @returns A new local `Date` at the start of the unit.\n */\nexport function startOfUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\tconst y = date.getFullYear();\n\tconst mo = date.getMonth();\n\tconst d = date.getDate();\n\tconst h = date.getHours();\n\tconst mi = date.getMinutes();\n\n\tswitch (granularity) {\n\t\tcase 'year':\n\t\t\treturn new Date(y, 0, 1);\n\t\tcase 'month':\n\t\t\treturn new Date(y, mo, 1);\n\t\tcase 'day':\n\t\t\treturn new Date(y, mo, d);\n\t\tcase 'hour':\n\t\t\treturn new Date(y, mo, d, h);\n\t\tcase 'minute':\n\t\t\treturn new Date(y, mo, d, h, mi);\n\t\tcase 'second':\n\t\t\treturn new Date(y, mo, d, h, mi, date.getSeconds());\n\t}\n}\n\n/** Start of the unit immediately after the one containing `date`. */\nfunction startOfNextUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\tconst s = startOfUnit(date, granularity);\n\n\tswitch (granularity) {\n\t\tcase 'year':\n\t\t\treturn new Date(s.getFullYear() + 1, 0, 1);\n\t\tcase 'month':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth() + 1, 1);\n\t\tcase 'day':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate() + 1);\n\t\tcase 'hour':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours() + 1);\n\t\tcase 'minute':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours(), s.getMinutes() + 1);\n\t\tcase 'second':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours(), s.getMinutes(), s.getSeconds() + 1);\n\t}\n}\n\n/**\n * Last representable instant of the unit containing `date` (one millisecond before the next).\n *\n * @param date - Any date inside the unit.\n * @param granularity - The unit.\n * @returns A new local `Date` at the end of the unit.\n */\nexport function endOfUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\treturn new Date(startOfNextUnit(date, granularity).getTime() - 1);\n}\n\n/** Instant comparison: -1, 0 or 1 like `Array.sort`. */\nexport function compareInstant(a: Date, b: Date): number {\n\tconst ta = a.getTime();\n\tconst tb = b.getTime();\n\n\treturn ta < tb ? -1 : ta > tb ? 1 : 0;\n}\n\n/** Comparison at a given precision: two dates in the same unit compare equal. */\nexport function compareAt(a: Date, b: Date, granularity: HubDatepickerGranularity): number {\n\treturn compareInstant(startOfUnit(a, granularity), startOfUnit(b, granularity));\n}\n\n/**\n * Formats the UTC offset of a **specific date** as `+HH:mm`.\n *\n * Deliberately derived from the date itself and never from `new Date()`: the offset of a zone\n * changes with daylight saving, so a January and an August value in Madrid must not be stamped\n * with the same one.\n *\n * @param date - The date whose offset is wanted.\n * @returns The offset, e.g. `+02:00` or `-05:00`.\n */\nexport function formatOffset(date: Date): string {\n\tconst minutesEastOfUtc = -date.getTimezoneOffset();\n\tconst sign = minutesEastOfUtc < 0 ? '-' : '+';\n\tconst abs = Math.abs(minutesEastOfUtc);\n\n\treturn `${sign}${pad(Math.floor(abs / 60))}:${pad(abs % 60)}`;\n}\n\n/**\n * Serializes a date as ISO 8601 at the given granularity, in the reader's local zone.\n *\n * Coarse units yield a partial ISO date (`2026`, `2026-09`, `2026-09-01`); anything carrying a\n * time yields a full timestamp with an explicit offset (`2026-09-01T09:30:00+02:00`).\n *\n * @param date - The date to serialize (truncated internally).\n * @param granularity - The precision to emit.\n * @returns The ISO string.\n */\nexport function formatISOAt(date: Date, granularity: HubDatepickerGranularity): string {\n\tconst t = startOfUnit(date, granularity);\n\tconst year = `${t.getFullYear()}`.padStart(4, '0');\n\n\tif (granularity === 'year') {\n\t\treturn year;\n\t}\n\n\tconst month = pad(t.getMonth() + 1);\n\n\tif (granularity === 'month') {\n\t\treturn `${year}-${month}`;\n\t}\n\n\tconst day = pad(t.getDate());\n\n\tif (granularity === 'day') {\n\t\treturn `${year}-${month}-${day}`;\n\t}\n\n\tconst time = `${pad(t.getHours())}:${pad(t.getMinutes())}:${pad(t.getSeconds())}`;\n\n\treturn `${year}-${month}-${day}T${time}${formatOffset(t)}`;\n}\n\n/** Matches a date, with an optional time and an optional offset. */\nconst ISO_DATE_TIME = /^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.\\d+)?(Z|[+-]\\d{2}:?\\d{2})?)?$/;\n\n/**\n * Parses any accepted input shape into a local `Date`.\n *\n * Dispatches on shape so a bare calendar date is never handed to `new Date(string)`:\n *\n * | Input | Read as |\n * | --- | --- |\n * | `\"2026\"` | 1 January, local midnight |\n * | `\"2026-09\"` | 1st of the month, local midnight |\n * | `\"2026-09-01\"` | Local midnight |\n * | `\"2026-09-01T09:30\"` (no offset) | That local wall clock |\n * | `\"…+02:00\"` / `\"…Z\"` | An instant — unambiguous, so the engine parses it |\n * | `Date` | As-is |\n * | `number` | **Always** epoch milliseconds |\n *\n * @param value - The raw value.\n * @param parse - Optional consumer-supplied parser that overrides all of the above.\n * @returns A local `Date`, or `null` when the value is empty or unparseable.\n */\nexport function parseFlexible(value: unknown, parse?: ((raw: unknown) => Date | null) | null): Date | null {\n\tif (parse) {\n\t\tconst custom = parse(value);\n\n\t\treturn custom instanceof Date && !isNaN(custom.getTime()) ? custom : null;\n\t}\n\n\tif (value == null || value === '') {\n\t\treturn null;\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn isNaN(value.getTime()) ? null : value;\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn Number.isFinite(value) ? new Date(value) : null;\n\t}\n\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst yearOnly = /^(\\d{4})$/.exec(value);\n\n\tif (yearOnly) {\n\t\treturn new Date(+yearOnly[1], 0, 1);\n\t}\n\n\tconst yearMonth = /^(\\d{4})-(\\d{2})$/.exec(value);\n\n\tif (yearMonth) {\n\t\treturn new Date(+yearMonth[1], +yearMonth[2] - 1, 1);\n\t}\n\n\tconst match = ISO_DATE_TIME.exec(value);\n\n\tif (match) {\n\t\tconst [, y, mo, d, h, mi, s, offset] = match;\n\n\t\tif (offset) {\n\t\t\tconst instant = new Date(value);\n\n\t\t\treturn isNaN(instant.getTime()) ? null : instant;\n\t\t}\n\n\t\treturn new Date(+y, +mo - 1, +d, +(h ?? 0), +(mi ?? 0), +(s ?? 0));\n\t}\n\n\tconst fallback = new Date(value);\n\n\treturn isNaN(fallback.getTime()) ? null : fallback;\n}\n\n/**\n * Whether the whole unit containing `date` falls outside the bounds.\n *\n * A day that merely *starts* before `min` is still selectable — only a day with no allowed\n * instant in it is refused, so `min = 2026-09-01T14:00` leaves 1 September clickable and lets\n * the time controls do the finer refusing.\n *\n * @param date - The candidate.\n * @param min - Earliest allowed instant, or `null`.\n * @param max - Latest allowed instant, or `null`.\n * @param granularity - The unit the candidate represents.\n * @returns `true` when no instant of the unit is allowed.\n */\nexport function unitOutOfBounds(\n\tdate: Date,\n\tmin: Date | null,\n\tmax: Date | null,\n\tgranularity: HubDatepickerGranularity\n): boolean {\n\tif (min && compareInstant(endOfUnit(date, granularity), min) < 0) {\n\t\treturn true;\n\t}\n\n\treturn !!max && compareInstant(startOfUnit(date, granularity), max) > 0;\n}\n\n/**\n * Pulls a date back inside `[min, max]`, returning it untouched when already inside.\n *\n * @param date - The candidate.\n * @param min - Earliest allowed instant, or `null`.\n * @param max - Latest allowed instant, or `null`.\n * @returns The clamped date.\n */\nexport function clampToBounds(date: Date, min: Date | null, max: Date | null): Date {\n\tif (min && compareInstant(date, min) < 0) {\n\t\treturn new Date(min.getTime());\n\t}\n\n\tif (max && compareInstant(date, max) > 0) {\n\t\treturn new Date(max.getTime());\n\t}\n\n\treturn date;\n}\n\n/**\n * Moves a spinbutton value by one step, snapping to the step grid and wrapping at `cycle`.\n *\n * A value already off the grid snaps to the neighbouring multiple rather than keeping its\n * offset, so `09:07` with a 5-minute step goes to `09:10` up and `09:05` down.\n *\n * @param value - Current value.\n * @param step - Step size (values below 1 are treated as 1).\n * @param direction - `1` to increase, `-1` to decrease.\n * @param cycle - Exclusive upper bound the value wraps at (24 for hours, 60 for minutes).\n * @returns The next value.\n */\nexport function stepValue(value: number, step: number, direction: 1 | -1, cycle: number): number {\n\tconst size = Math.max(1, Math.floor(step));\n\tconst next = direction > 0 ? Math.floor(value / size) * size + size : Math.ceil(value / size) * size - size;\n\n\treturn ((next % cycle) + cycle) % cycle;\n}\n\n/**\n * Whether the locale (or an explicit override) wants a 12-hour clock.\n *\n * @param locale - BCP-47 locale.\n * @param hourFormat - Explicit override, or `undefined` to derive from the locale.\n * @returns `true` for a 12-hour clock.\n */\nexport function resolveHour12(locale: string, hourFormat: '12' | '24' | undefined): boolean {\n\tif (hourFormat === '12') {\n\t\treturn true;\n\t}\n\n\tif (hourFormat === '24') {\n\t\treturn false;\n\t}\n\n\treturn !!new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12;\n}\n\n/**\n * Localized AM/PM labels, taken from `Intl` like month and weekday names — so the day period\n * never needs a translation entry.\n *\n * @param locale - BCP-47 locale.\n * @returns A `[am, pm]` tuple.\n */\nexport function meridiemLabels(locale: string): [string, string] {\n\tconst formatter = new Intl.DateTimeFormat(locale, { hour: 'numeric', hour12: true });\n\tconst at = (hour: number, fallback: string): string =>\n\t\tformatter.formatToParts(new Date(2026, 0, 1, hour)).find((part) => part.type === 'dayPeriod')?.value ?? fallback;\n\n\treturn [at(9, 'AM'), at(21, 'PM')];\n}\n\n/**\n * Replaces the time-of-day of `date` with the given parts, keeping its calendar date.\n *\n * The result is read back from the constructed `Date` rather than assumed: on a daylight-saving\n * spring-forward day the requested wall clock may not exist (02:30 rolls to 03:30), and the\n * component must show the time it actually emits.\n *\n * @param date - The date whose calendar day is kept.\n * @param hours - Hours (0–23).\n * @param minutes - Minutes (0–59).\n * @param seconds - Seconds (0–59).\n * @returns A new local `Date`.\n */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { HubDatepickerGranularity, HubDatepickerLabels } from '../../interfaces/datepicker.interface';\nimport { compareAt, startOfUnit, unitOutOfBounds } from './time-utils';\n\n/** A cell of the month / year grid, enriched with its selection and range state. */\nexport interface PeriodCell {\n\t/** First instant of the period this cell represents. */\n\tdate: Date;\n\t/** Localized label (month name, or the year number). */\n\tlabel: string;\n\t/** Whether the period contains today. */\n\tcurrent: boolean;\n\t/** Whether the year falls outside the decade being shown (the two padding cells). */\n\toutside: boolean;\n\tdisabled: boolean;\n\tselected: boolean;\n\trangeStart: boolean;\n\trangeEnd: boolean;\n\tinRange: boolean;\n\tfocused: boolean;\n}\n\n/**\n * A year page shows one decade plus a padding year at each end, so 12 cells fill the 3×4 layout\n * and the neighbouring decades stay one click away — the same trick the day grid already uses to\n * show the tail of the previous month and the head of the next.\n */\nconst YEARS_PER_PAGE = 12;\n\n/** First year of the decade containing `year`. */\nexport function decadeStart(year: number): number {\n\treturn Math.floor(year / 10) * 10;\n}\n\n/**\n * The coarse-unit panel of `<hub-datepicker>`: a 12-cell grid of months, or of years.\n *\n * Internal to the datepicker and not part of the public API. It mirrors the day grid's keyboard\n * model at a coarser step (`←/→` ±1, `↑/↓` ±3 for one row, `Home`/`End` to the row ends,\n * `PageUp`/`PageDown` to the previous or next year / block) so the two panels do not ask the user\n * to learn different calendars.\n */\n@Component({\n\tselector: 'hub-datepicker-period',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { class: 'hub-datepicker__period' },\n\ttemplate: `\n\t\t<div class=\"hub-datepicker__period-grid\" role=\"grid\" (keydown)=\"onKeydown($event)\">\n\t\t\t@for (cell of cells(); track cell.date.getTime()) {\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\tclass=\"hub-datepicker__period-cell\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--outside]=\"cell.outside\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--current]=\"cell.current\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--in-range]=\"cell.inRange\"\n\t\t\t\t\t[attr.data-time]=\"cell.date.getTime()\"\n\t\t\t\t\t[attr.tabindex]=\"cell.focused ? 0 : -1\"\n\t\t\t\t\t[attr.aria-selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[disabled]=\"cell.disabled\"\n\t\t\t\t\t(click)=\"pick.emit(cell.date)\"\n\t\t\t\t>\n\t\t\t\t\t{{ cell.label }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t`\n})\nexport class HubDatepickerPeriodGridComponent {\n\t/** Which coarse unit the grid renders. */\n\treadonly granularity = input.required<Extract<HubDatepickerGranularity, 'year' | 'month'>>();\n\n\t/** Any date inside the year (for months) or the block (for years) being shown. */\n\treadonly viewDate = input.required<Date>();\n\n\t/** Cell holding keyboard focus. */\n\treadonly focusedDate = input.required<Date>();\n\n\t/** Selected point, or range start. */\n\treadonly selectionStart = input<Date | null>(null);\n\n\t/** Range end, or `null` outside `range` mode. */\n\treadonly selectionEnd = input<Date | null>(null);\n\n\t/** Whether the picker is in `range` mode. */\n\treadonly range = input(false);\n\n\t/** BCP-47 locale, used for month names. */\n\treadonly locale = input.required<string>();\n\n\treadonly min = input<Date | null>(null);\n\treadonly max = input<Date | null>(null);\n\n\t/** Resolved labels (unused today, kept so the grid can gain aria text without a new input). */\n\treadonly labels = input.required<HubDatepickerLabels>();\n\n\t/** Emits the first instant of the picked period. */\n\treadonly pick = output<Date>();\n\n\t/** Emits the date that should receive focus after an arrow key. */\n\treadonly focusMove = output<Date>();\n\n\t/** Emits when `Escape` is pressed. */\n\treadonly dismiss = output<void>();\n\n\t/** First period of the currently displayed page — January for months, the padding year for years. */\n\tprotected readonly pageStart = computed<Date>(() => {\n\t\tconst year = this.viewDate().getFullYear();\n\n\t\treturn this.granularity() === 'month' ? new Date(year, 0, 1) : new Date(decadeStart(year) - 1, 0, 1);\n\t});\n\n\tprotected readonly cells = computed<PeriodCell[]>(() => {\n\t\tconst granularity = this.granularity();\n\t\tconst start = this.pageStart();\n\t\tconst focused = this.focusedDate();\n\t\tconst selectionStart = this.selectionStart();\n\t\tconst selectionEnd = this.selectionEnd();\n\t\tconst isRange = this.range();\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst today = new Date();\n\t\tconst monthNames = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n\t\tconst decade = decadeStart(this.viewDate().getFullYear());\n\n\t\treturn Array.from({ length: YEARS_PER_PAGE }, (_, index) => {\n\t\t\tconst date =\n\t\t\t\tgranularity === 'month' ? new Date(start.getFullYear(), index, 1) : new Date(start.getFullYear() + index, 0, 1);\n\n\t\t\tconst isStart = !!selectionStart && compareAt(date, selectionStart, granularity) === 0;\n\t\t\tconst isEnd = !!selectionEnd && compareAt(date, selectionEnd, granularity) === 0;\n\n\t\t\treturn {\n\t\t\t\tdate,\n\t\t\t\tlabel: granularity === 'month' ? monthNames.format(date) : `${date.getFullYear()}`,\n\t\t\t\tcurrent: compareAt(date, today, granularity) === 0,\n\t\t\t\toutside: granularity === 'year' && (date.getFullYear() < decade || date.getFullYear() > decade + 9),\n\t\t\t\tdisabled: unitOutOfBounds(date, min, max, granularity),\n\t\t\t\tselected: !isRange && isStart,\n\t\t\t\trangeStart: isRange && isStart,\n\t\t\t\trangeEnd: isRange && isEnd,\n\t\t\t\tinRange:\n\t\t\t\t\tisRange &&\n\t\t\t\t\t!!selectionStart &&\n\t\t\t\t\t!!selectionEnd &&\n\t\t\t\t\tcompareAt(date, selectionStart, granularity) > 0 &&\n\t\t\t\t\tcompareAt(date, selectionEnd, granularity) < 0,\n\t\t\t\tfocused: compareAt(date, focused, granularity) === 0\n\t\t\t};\n\t\t});\n\t});\n\n\t/**\n\t * Keyboard navigation, mirroring the day grid one unit coarser.\n\t *\n\t * @param event - The originating key event (handled on the grid container).\n\t */\n\tprotected onKeydown(event: KeyboardEvent): void {\n\t\tconst grid = event.currentTarget as HTMLElement;\n\t\tconst focused = startOfUnit(this.focusedDate(), this.granularity());\n\t\t// Column comes from the cell's position on the page, not from the month or year number:\n\t\t// a year page starts on a padding year, so the two do not line up.\n\t\tconst focusedIndex = this.cells().findIndex((cell) => cell.focused);\n\t\tconst column = (focusedIndex < 0 ? 0 : focusedIndex) % 3;\n\t\tlet next: Date | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tnext = this.#shift(focused, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tnext = this.#shift(focused, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#shift(focused, -3);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#shift(focused, 3);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#shift(focused, -column);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#shift(focused, 2 - column);\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = this.#shift(focused, -this.#pageSize());\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = this.#shift(focused, this.#pageSize());\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst cell = this.cells().find((c) => c.focused);\n\n\t\t\t\tif (cell && !cell.disabled) {\n\t\t\t\t\tthis.pick.emit(cell.date);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.dismiss.emit();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.focusMove.emit(next);\n\n\t\t// Move DOM focus to the newly focused cell once the grid has re-rendered.\n\t\tconst time = next.getTime();\n\t\tsetTimeout(() => grid.querySelector<HTMLElement>(`[data-time=\"${time}\"]`)?.focus(), 0);\n\t}\n\n\t#shift(date: Date, delta: number): Date {\n\t\treturn this.granularity() === 'month'\n\t\t\t? new Date(date.getFullYear(), date.getMonth() + delta, 1)\n\t\t\t: new Date(date.getFullYear() + delta, 0, 1);\n\t}\n\n\t/** One page: a year of months, or a decade of years. */\n\t#pageSize(): number {\n\t\treturn this.granularity() === 'month' ? 12 : 10;\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, ViewEncapsulation } from '@angular/core';\nimport { HubDatepickerGranularity, HubDatepickerLabels } from '../../interfaces/datepicker.interface';\nimport { clampToBounds, compareInstant, meridiemLabels, stepValue, withTime } from './time-utils';\n\n/**\n * The time strip of `<hub-datepicker>`: hour, minute and (at second granularity) second, plus an\n * AM/PM toggle on a 12-hour clock.\n *\n * Internal to the datepicker and not part of the public API. It exists as a component rather than\n * inline template because `range` mode renders it twice — once per endpoint — and duplicating a\n * keyboard model is how the two halves drift apart.\n *\n * Each field is an ARIA `spinbutton`: arrows step by the configured amount, `PageUp`/`PageDown`\n * jump a full cycle of the next unit up, `Home`/`End` reach the extremes, and a typed value is\n * committed on blur or `Enter`. A step that would take the value outside `[min, max]` is refused\n * rather than clamped, so holding an arrow cannot silently walk past a bound.\n *\n * The emitted `Date` keeps the calendar day of the incoming one; only the time changes.\n */\n@Component({\n\tselector: 'hub-datepicker-time',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { class: 'hub-datepicker__time' },\n\ttemplate: `\n\t\t<span class=\"hub-datepicker__time-label\" [id]=\"labelId\">{{ label() }}</span>\n\n\t\t<span class=\"hub-datepicker__time-fields\" role=\"group\" [attr.aria-labelledby]=\"labelId\">\n\t\t\t<input\n\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\ttype=\"text\"\n\t\t\t\trole=\"spinbutton\"\n\t\t\t\tinputmode=\"numeric\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tsize=\"2\"\n\t\t\t\t[attr.aria-label]=\"labels().hour\"\n\t\t\t\t[attr.aria-valuenow]=\"value().getHours()\"\n\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t[attr.aria-valuemax]=\"23\"\n\t\t\t\t[attr.aria-valuetext]=\"hourValueText()\"\n\t\t\t\t[value]=\"displayHours()\"\n\t\t\t\t(keydown)=\"onKeydown($event, 'hour')\"\n\t\t\t\t(blur)=\"commit($event, 'hour')\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-datepicker__time-separator\" aria-hidden=\"true\">:</span>\n\n\t\t\t<input\n\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\ttype=\"text\"\n\t\t\t\trole=\"spinbutton\"\n\t\t\t\tinputmode=\"numeric\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tsize=\"2\"\n\t\t\t\t[attr.aria-label]=\"labels().minute\"\n\t\t\t\t[attr.aria-valuenow]=\"value().getMinutes()\"\n\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t[attr.aria-valuemax]=\"59\"\n\t\t\t\t[value]=\"pad(value().getMinutes())\"\n\t\t\t\t(keydown)=\"onKeydown($event, 'minute')\"\n\t\t\t\t(blur)=\"commit($event, 'minute')\"\n\t\t\t/>\n\n\t\t\t@if (showsSeconds()) {\n\t\t\t\t<span class=\"hub-datepicker__time-separator\" aria-hidden=\"true\">:</span>\n\n\t\t\t\t<input\n\t\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\trole=\"spinbutton\"\n\t\t\t\t\tinputmode=\"numeric\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tsize=\"2\"\n\t\t\t\t\t[attr.aria-label]=\"labels().second\"\n\t\t\t\t\t[attr.aria-valuenow]=\"value().getSeconds()\"\n\t\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t\t[attr.aria-valuemax]=\"59\"\n\t\t\t\t\t[value]=\"pad(value().getSeconds())\"\n\t\t\t\t\t(keydown)=\"onKeydown($event, 'second')\"\n\t\t\t\t\t(blur)=\"commit($event, 'second')\"\n\t\t\t\t/>\n\t\t\t}\n\n\t\t\t@if (hour12()) {\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__time-meridiem\"\n\t\t\t\t\t[attr.aria-label]=\"labels().meridiem\"\n\t\t\t\t\t[attr.aria-pressed]=\"isPm()\"\n\t\t\t\t\t(click)=\"toggleMeridiem()\"\n\t\t\t\t>\n\t\t\t\t\t{{ meridiemLabel() }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</span>\n\t`\n})\nexport class HubDatepickerTimeFieldComponent {\n\t/** The date whose time is being edited. Only the time-of-day is ever changed. */\n\treadonly value = model.required<Date>();\n\n\t/** Row label (\"Start time\", \"End time\", \"Time\"). */\n\treadonly label = input<string>('');\n\n\t/** Precision in play — `second` reveals the third field. */\n\treadonly granularity = input.required<HubDatepickerGranularity>();\n\n\t/** BCP-47 locale, used for the AM/PM wording. */\n\treadonly locale = input.required<string>();\n\n\t/** Whether to render a 12-hour clock with a meridiem toggle. */\n\treadonly hour12 = input.required<boolean>();\n\n\t/** Minute increment. */\n\treadonly minuteStep = input.required<number>();\n\n\t/** Second increment. */\n\treadonly secondStep = input.required<number>();\n\n\t/** Earliest allowed instant, or `null`. */\n\treadonly min = input<Date | null>(null);\n\n\t/** Latest allowed instant, or `null`. */\n\treadonly max = input<Date | null>(null);\n\n\t/** Resolved labels. */\n\treadonly labels = input.required<HubDatepickerLabels>();\n\n\t/** Links the row label to the field group. */\n\tprotected readonly labelId = `hub-dp-time-${Math.random().toString(36).slice(2, 9)}`;\n\n\tprotected readonly showsSeconds = computed(() => this.granularity() === 'second');\n\tprotected readonly isPm = computed(() => this.value().getHours() >= 12);\n\tprotected readonly meridiemLabel = computed(() => meridiemLabels(this.locale())[this.isPm() ? 1 : 0]);\n\n\tprotected readonly displayHours = computed(() => {\n\t\tconst hours = this.value().getHours();\n\n\t\treturn this.hour12() ? `${hours % 12 === 0 ? 12 : hours % 12}` : this.pad(hours);\n\t});\n\n\t/** Spoken form of the hour, so a 12-hour clock announces its day period too. */\n\tprotected readonly hourValueText = computed(() =>\n\t\tthis.hour12() ? `${this.displayHours()} ${this.meridiemLabel()}` : this.displayHours()\n\t);\n\n\tprotected pad(value: number): string {\n\t\treturn `${value}`.padStart(2, '0');\n\t}\n\n\t/**\n\t * Spinbutton keyboard model, shared by the three fields.\n\t *\n\t * @param event - The originating key event.\n\t * @param field - Which field it came from.\n\t */\n\tprotected onKeydown(event: KeyboardEvent, field: 'hour' | 'minute' | 'second'): void {\n\t\tconst current = this.value();\n\t\tlet next: Date | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#step(current, field, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#step(current, field, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = this.#jump(current, field, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = this.#jump(current, field, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#set(current, field, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#set(current, field, field === 'hour' ? 23 : 59);\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.commit(event, field);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.#apply(next);\n\t}\n\n\t/**\n\t * Commits a typed value, ignoring anything that is not a number in range and restoring the\n\t * field to the model on the way out.\n\t *\n\t * @param event - The blur or `Enter` event.\n\t * @param field - Which field it came from.\n\t */\n\tprotected commit(event: Event, field: 'hour' | 'minute' | 'second'): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst typed = parseInt(input.value, 10);\n\n\t\tif (!isNaN(typed)) {\n\t\t\tthis.#apply(this.#set(this.value(), field, this.#fromDisplayed(typed, field)));\n\t\t}\n\n\t\t// Re-render from the model: a rejected or clamped entry must not linger in the box.\n\t\tinput.value =\n\t\t\tfield === 'hour'\n\t\t\t\t? this.displayHours()\n\t\t\t\t: this.pad(field === 'minute' ? this.value().getMinutes() : this.value().getSeconds());\n\t}\n\n\t/** Flips AM↔PM by moving the hour half a day. */\n\tprotected toggleMeridiem(): void {\n\t\tconst current = this.value();\n\n\t\tthis.#apply(withTime(current, (current.getHours() + 12) % 24, current.getMinutes(), current.getSeconds()));\n\t}\n\n\t/** Translates a typed hour on a 12-hour clock back to its 24-hour value. */\n\t#fromDisplayed(typed: number, field: 'hour' | 'minute' | 'second'): number {\n\t\tif (field !== 'hour' || !this.hour12()) {\n\t\t\treturn typed;\n\t\t}\n\n\t\tconst base = typed % 12;\n\n\t\treturn this.isPm() ? base + 12 : base;\n\t}\n\n\t#set(date: Date, field: 'hour' | 'minute' | 'second', raw: number): Date {\n\t\tconst bounded = Math.max(0, Math.min(field === 'hour' ? 23 : 59, raw));\n\n\t\tswitch (field) {\n\t\t\tcase 'hour':\n\t\t\t\treturn withTime(date, bounded, date.getMinutes(), date.getSeconds());\n\t\t\tcase 'minute':\n\t\t\t\treturn withTime(date, date.getHours(), bounded, date.getSeconds());\n\t\t\tcase 'second':\n\t\t\t\treturn withTime(date, date.getHours(), date.getMinutes(), bounded);\n\t\t}\n\t}\n\n\t#step(date: Date, field: 'hour' | 'minute' | 'second', direction: 1 | -1): Date {\n\t\tswitch (field) {\n\t\t\tcase 'hour':\n\t\t\t\treturn this.#set(date, 'hour', stepValue(date.getHours(), 1, direction, 24));\n\t\t\tcase 'minute':\n\t\t\t\treturn this.#set(date, 'minute', stepValue(date.getMinutes(), this.minuteStep(), direction, 60));\n\t\t\tcase 'second':\n\t\t\t\treturn this.#set(date, 'second', stepValue(date.getSeconds(), this.secondStep(), direction, 60));\n\t\t}\n\t}\n\n\t/** `PageUp`/`PageDown`: a full cycle of the next unit up. */\n\t#jump(date: Date, field: 'hour' | 'minute' | 'second', direction: 1 | -1): Date {\n\t\tif (field === 'hour') {\n\t\t\treturn this.#set(date, 'hour', (date.getHours() + direction * 12 + 24) % 24);\n\t\t}\n\n\t\tconst value = field === 'minute' ? date.getMinutes() : date.getSeconds();\n\n\t\treturn this.#set(date, field, (value + direction * 60 + 60) % 60);\n\t}\n\n\t/**\n\t * Writes a candidate time to the model, refusing it outright when it would leave the bounds.\n\t *\n\t * Refusing rather than clamping is deliberate: clamping a repeated arrow press would pin the\n\t * value to the bound and read as the control being stuck.\n\t */\n\t#apply(next: Date | null): void {\n\t\tif (!next) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (compareInstant(clampToBounds(next, min, max), next) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(next);\n\t}\n}\n","/**\n * The value axis of the datepicker: turning a picked `Date` into whatever shape the bound\n * control expects, and reading it back.\n *\n * Kept apart from parsing (`time-utils`) and from display formatting (the component) because the\n * three are independent concerns that happen to meet on the same date.\n */\n\nimport { HubDatepickerGranularity, HubDatepickerValueFormat } from '../../interfaces/datepicker.interface';\nimport { formatISOAt, startOfUnit } from './time-utils';\n\n/**\n * Serializes a picked date into the control value.\n *\n * The date is truncated to the granularity first, so a `'date'` or `'timestamp'` value never\n * smuggles a precision the picker did not offer — a day-granularity pick is always local\n * midnight, whatever time the underlying `Date` happened to carry.\n *\n * @param date - The picked date, or `null`.\n * @param granularity - Precision to keep.\n * @param valueFormat - Target shape.\n * @returns The serialized value, or `null`.\n */\nexport function serializeValue(\n\tdate: Date | null,\n\tgranularity: HubDatepickerGranularity,\n\tvalueFormat: HubDatepickerValueFormat\n): unknown {\n\tif (!date) {\n\t\treturn null;\n\t}\n\n\tconst truncated = startOfUnit(date, granularity);\n\n\tif (typeof valueFormat === 'function') {\n\t\treturn valueFormat(truncated);\n\t}\n\n\tswitch (valueFormat) {\n\t\tcase 'date':\n\t\t\treturn truncated;\n\t\tcase 'timestamp':\n\t\t\treturn truncated.getTime();\n\t\tcase 'iso':\n\t\tdefault:\n\t\t\treturn formatISOAt(truncated, granularity);\n\t}\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { formatDate, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinject,\n\tinput,\n\tLOCALE_ID,\n\tcontentChild,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubDatepickerGranularity,\n\tHubDatepickerLabels,\n\tHubDatepickerMode,\n\tHubDatepickerValueFormat,\n\tHubDateRange,\n\tHubDateValue\n} from '../../interfaces/datepicker.interface';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { addMonths, buildCalendarGrid, isBeforeDay, isInRange, isSameDay, weekdayLabels } from './date-utils';\nimport { decadeStart, HubDatepickerPeriodGridComponent } from './period-grid.component';\nimport { HubDatepickerTimeFieldComponent } from './time-field.component';\nimport {\n\tcarriesTime,\n\tclampToBounds,\n\tcompareInstant,\n\tisPeriodUnit,\n\tparseFlexible,\n\tresolveHour12,\n\tstartOfUnit,\n\tunitOutOfBounds,\n\twithTime\n} from './time-utils';\nimport { serializeValue } from './value-format';\n\n/** A calendar cell enriched with its selection / range / disabled / focus state. */\ninterface DatepickerCell {\n\tdate: Date;\n\tday: number;\n\tcurrentMonth: boolean;\n\ttoday: boolean;\n\tdisabled: boolean;\n\tselected: boolean;\n\trangeStart: boolean;\n\trangeEnd: boolean;\n\tinRange: boolean;\n\t/** Inside the band a half-open range would take if it closed on the previewed cell. */\n\tpreview: boolean;\n\t/** The previewed cell itself — the end the range would take right now. */\n\tpreviewEnd: boolean;\n\tfocused: boolean;\n}\n\n/**\n * Accessible, fully customizable date / range picker built from scratch on native `Date` + CDK\n * Overlay (no date dependency). Shares the `ng-hub-ui-forms` conventions (CVA, auto error display,\n * label, helper text, `--hub-datepicker-*` theming) and adds:\n *\n * - `single` and `range` selection (`mode`).\n * - A granularity axis from a whole year down to a second (`granularity`), which also selects the\n * panel: `year` and `month` render a 12-cell period grid, `day` and finer render the calendar\n * (plus a time strip from `hour` onwards).\n * - Three independent format axes: `parse` (how values come in), `valueFormat` (what the bound\n * control holds) and `displayFormat` (what the user reads).\n * - `min` / `max` bounds — honouring the time, not just the day — and a `disabledDates` predicate.\n * - Keyboard navigation (arrows, Home/End, PageUp/Down, Enter, Escape) in every panel.\n * - `Today`, `Clear` and — while picking a time — `Done` shortcuts.\n * - Full i18n: locale-driven month, weekday and AM/PM names plus overridable `labels`,\n * `displayFormat`, `weekdayFormat`, `firstDayOfWeek` and `rangeSeparator` — per instance or\n * globally via {@link provideHubForms}.\n *\n * ## The zone of the emitted value\n *\n * Every calculation happens in **the reader's local zone, by date parts**. At `day` granularity\n * and coarser the value is a bare ISO date (`2026-09-01`) with no zone attached, exactly as it has\n * always been. From `hour` onwards it is a full ISO 8601 timestamp carrying **the local wall clock\n * and the offset of that very date** — `2026-09-01T09:00:00+02:00` in Madrid in September,\n * `+01:00` for the same clock in January. A consumer that wants UTC converts losslessly with\n * `new Date(value).toISOString()`.\n *\n * @example\n * ```html\n * <!-- unchanged default: a plain YYYY-MM-DD string -->\n * <hub-datepicker formControlName=\"stay\" mode=\"range\" label=\"Stay\" [min]=\"today\" />\n *\n * <!-- an access window: each endpoint carries its own time -->\n * <hub-datepicker formControlName=\"window\" mode=\"range\" granularity=\"minute\" [minuteStep]=\"15\" />\n * ```\n */\n@Component({\n\tselector: 'hub-datepicker',\n\timports: [NgTemplateOutlet, KeyValuePipe, OverlayModule, HubDatepickerTimeFieldComponent, HubDatepickerPeriodGridComponent],\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrl: './datepicker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-datepicker-host]': 'true'\n\t}\n})\nexport class HubDatepickerComponent extends HubFieldControl {\n\treadonly #localeId = inject(LOCALE_ID);\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/**\n\t * The selection, as local `Date`s. This — not the serialized value — is the component's single\n\t * source of truth: keeping `Date`s means the emitted shape is derived once, on the way out, and\n\t * a `valueFormat` change never has to round-trip through a string.\n\t */\n\tprotected readonly _start = signal<Date | null>(null);\n\tprotected readonly _end = signal<Date | null>(null);\n\n\t/**\n\t * Time-of-day held for each endpoint while no day has been picked yet, so the time strip is\n\t * editable from the moment the panel opens and the choice survives the first day click.\n\t */\n\tprotected readonly _startDraft = signal<Date>(startOfUnit(new Date(), 'day'));\n\tprotected readonly _endDraft = signal<Date>(startOfUnit(new Date(), 'day'));\n\n\t/** Month (or year / block) currently shown in the panel. */\n\tprotected readonly _viewDate = signal<Date>(new Date());\n\n\t/** Date that currently holds keyboard focus inside the grid. */\n\tprotected readonly _focusedDate = signal<Date>(new Date());\n\n\t/**\n\t * Cell a half-open range is currently being measured against — the pointer's, or the one\n\t * keyboard navigation last moved to.\n\t *\n\t * Fed by both so the two input methods give the same affordance, and held separately from\n\t * `_focusedDate` rather than derived from it: focus survives the pointer leaving the grid,\n\t * and a band that stayed lit across the whole panel while the cursor was elsewhere would be\n\t * claiming an end the user is no longer choosing.\n\t */\n\tprotected readonly _previewTarget = signal<Date | null>(null);\n\n\t/** Whether the calendar overlay is open. */\n\tprotected readonly _open = signal(false);\n\n\t// ── Inputs ──────────────────────────────────────────────────────────────────\n\n\t/** Selection mode (`single` or `range`). */\n\treadonly mode = input<HubDatepickerMode>('single');\n\n\t/**\n\t * Precision each picked point carries. Also selects the panel. Defaults to `day`, which is the\n\t * behaviour every existing call site already has.\n\t */\n\treadonly granularity = input<HubDatepickerGranularity | undefined>(undefined);\n\n\t/** How a picked point is serialized into the bound control. Defaults to `'iso'`. */\n\treadonly valueFormat = input<HubDatepickerValueFormat | undefined>(undefined);\n\n\t/**\n\t * Consumer-supplied parser for incoming values, overriding the built-in detection (ISO string\n\t * of any width, `Date`, or epoch milliseconds). Applies to `min` and `max` too.\n\t */\n\treadonly parse = input<((raw: unknown) => Date | null) | null>(null);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder shown when nothing is selected. */\n\treadonly placeholder = input<string>('');\n\n\t/** BCP-47 locale for the display value and month/weekday names. */\n\treadonly locale = input<string>(this.#localeId || 'en-US');\n\n\t/** First weekday (0 = Sunday, 1 = Monday…). Falls back to the global config. */\n\treadonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Weekday header width. Falls back to the global config. */\n\treadonly weekdayFormat = input<'short' | 'narrow' | 'long' | undefined>(undefined);\n\n\t/**\n\t * How the selected value is displayed in the input. Accepts `Intl` options (the original\n\t * contract), an Angular date pattern such as `'dd/MM/yyyy HH:mm'`, or a formatting function.\n\t * Falls back to the global config.\n\t */\n\treadonly displayFormat = input<Intl.DateTimeFormatOptions | string | ((date: Date) => string) | undefined>(undefined);\n\n\t/**\n\t * `Intl` options composed **over** {@link displayFormat} once the granularity carries a time, so\n\t * the day part of the display keeps whatever `displayFormat` already said.\n\t */\n\treadonly timeDisplayFormat = input<Intl.DateTimeFormatOptions | undefined>(undefined);\n\n\t/** Minute increment of the minute spinbutton. Falls back to the global config. */\n\treadonly minuteStep = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Second increment of the second spinbutton. Falls back to the global config. */\n\treadonly secondStep = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Force a 12- or 24-hour clock. Defaults to whatever the locale wants. */\n\treadonly hourFormat = input<'12' | '24' | undefined>(undefined);\n\n\t/** Separator between the two dates of a range. Falls back to the global config. */\n\treadonly rangeSeparator = input<string | undefined>(undefined);\n\n\t/** Earliest selectable instant (ISO string, `Date` or epoch millis). */\n\treadonly min = input<string | Date | number | null>(null);\n\n\t/** Latest selectable instant (ISO string, `Date` or epoch millis). */\n\treadonly max = input<string | Date | number | null>(null);\n\n\t/** Predicate marking individual dates as non-selectable. */\n\treadonly disabledDates = input<((date: Date) => boolean) | null>(null);\n\n\t/** Whether to show the clear shortcut. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\n\n\t/** Whether to show the \"today\" shortcut. */\n\treadonly showToday = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Whether picking closes the calendar. Honoured at `day` granularity and coarser; a\n\t * time-carrying granularity always keeps the panel open, because closing on the day click would\n\t * strand the time controls the user has not reached yet.\n\t */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/** Per-instance label overrides (merged over the global config). */\n\treadonly labels = input<Partial<HubDatepickerLabels>>({});\n\n\t/** Whether the picker is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Text shown before the control as a group addon. A string is one; an array a run. */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Normalized addon lists. */\n\tprotected readonly _prependAddons = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\tprotected readonly _appendAddons = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether anything is attached to each edge, which squares off that side. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prependAddons().length > 0 || !!this._prependTpl());\n\tprotected readonly hasAppend = computed<boolean>(() => this._appendAddons().length > 0 || !!this._appendTpl());\n\n\t// ── Outputs ─────────────────────────────────────────────────────────────────\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubDateValue<any>>();\n\n\t/** Emits when the calendar opens. */\n\treadonly opened = output<void>();\n\n\t/** Emits when the calendar closes. */\n\treadonly closed = output<void>();\n\n\t/** Emits the first day of the displayed month when navigating. */\n\treadonly viewChange = output<Date>();\n\n\t/** Emits when the value is cleared. */\n\treadonly cleared = output<void>();\n\n\t// ── Resolved config (input ?? global) ────────────────────────────────────────\n\n\tprotected readonly _labels = computed<HubDatepickerLabels>(() => ({ ...this.#config.labels, ...this.labels() }));\n\tprotected readonly _firstDayOfWeek = computed(() => this.firstDayOfWeek() ?? this.#config.firstDayOfWeek);\n\tprotected readonly _weekdayFormat = computed(() => this.weekdayFormat() ?? this.#config.weekdayFormat);\n\tprotected readonly _displayFormat = computed(() => this.displayFormat() ?? this.#config.displayFormat);\n\tprotected readonly _timeDisplayFormat = computed(() => this.timeDisplayFormat() ?? this.#config.timeDisplayFormat);\n\tprotected readonly _rangeSeparator = computed(() => this.rangeSeparator() ?? this.#config.rangeSeparator);\n\t/**\n\t * Precision each point carries.\n\t *\n\t * `day-time-range` raises anything coarser than an hour: the mode is defined as a day plus\n\t * two times within it, so a granularity carrying no time contradicts it, and the mode is the\n\t * more specific of the two statements. Raising it keeps a misconfigured control usable\n\t * instead of rendering two time strips that cannot exist.\n\t */\n\tprotected readonly _granularity = computed<HubDatepickerGranularity>(() => {\n\t\tconst declared = this.granularity() ?? this.#config.granularity;\n\n\t\treturn this.mode() === 'day-time-range' && !carriesTime(declared) ? 'hour' : declared;\n\t});\n\tprotected readonly _valueFormat = computed(() => this.valueFormat() ?? this.#config.valueFormat);\n\tprotected readonly _minuteStep = computed(() => this.minuteStep() ?? this.#config.minuteStep);\n\tprotected readonly _secondStep = computed(() => this.secondStep() ?? this.#config.secondStep);\n\tprotected readonly _hourFormat = computed(() => this.hourFormat() ?? this.#config.hourFormat);\n\n\tprotected readonly _minDate = computed(() => parseFlexible(this.min(), this.parse()));\n\tprotected readonly _maxDate = computed(() => parseFlexible(this.max(), this.parse()));\n\n\t// ── Derived panel state ───────────────────────────────────────────────────────\n\n\t/** Whether the granularity carries a time-of-day, and so shows the time strip. */\n\tprotected readonly _hasTime = computed(() => carriesTime(this._granularity()));\n\n\t/** Whether the granularity is coarser than a day, and so uses the period grid. */\n\tprotected readonly _isPeriod = computed(() => isPeriodUnit(this._granularity()));\n\n\t/**\n\t * Whether the day grid picks TWO days. False in `day-time-range`, which picks one — the\n\t * grid then behaves exactly as it does in `single` mode, and the second point is a time\n\t * rather than a date.\n\t */\n\tprotected readonly _isRange = computed(() => this.mode() === 'range');\n\n\t/** One date, two times within it. */\n\tprotected readonly _isDayTimeRange = computed(() => this.mode() === 'day-time-range');\n\n\t/**\n\t * Whether the value is a {@link HubDateRange} — true for both two-ended modes. Kept apart\n\t * from {@link _isRange} because the two questions have different answers here: the value has\n\t * two ends, but the day grid only ever picks one day.\n\t */\n\tprotected readonly _emitsRange = computed(() => this._isRange() || this._isDayTimeRange());\n\n\tprotected readonly _hour12 = computed(() => resolveHour12(this.locale(), this._hourFormat()));\n\n\t/** Last range actually published, so an abandoned half-selection has somewhere to return to. */\n\t#committed: { start: Date | null; end: Date | null } = { start: null, end: null };\n\n\tprotected readonly rangeStart = computed<Date | null>(() => this._start());\n\tprotected readonly rangeEnd = computed<Date | null>(() => (this._isRange() ? this._end() : null));\n\n\t/**\n\t * Time shown in the start row — the selection when there is one, the draft until then.\n\t *\n\t * The draft is clamped into `[min, max]` before it is shown. Without this it starts at local\n\t * midnight, which a bound like `min=\"now\"` puts out of range from the outset — and since a step\n\t * that would leave the bounds is refused, *every* arrow press would then be refused and the\n\t * spinbuttons would read as dead until a day was picked.\n\t */\n\tprotected readonly startTimeValue = computed<Date>(\n\t\t() => this._start() ?? clampToBounds(this._startDraft(), this._minDate(), this._maxDate())\n\t);\n\n\tprotected readonly endTimeValue = computed<Date>(\n\t\t() => this._end() ?? clampToBounds(this._endDraft(), this._minDate(), this._maxDate())\n\t);\n\n\t/** Locale-formatted display string for the input. */\n\tprotected readonly displayValue = computed<string>(() => {\n\t\tconst format = this.#resolveDisplay();\n\t\tconst start = this._start();\n\n\t\t// One day and two times reads as \"01/09/2026, 09:00 – 11:00\": naming the day twice would\n\t\t// be noise, since the mode guarantees it is the same one. Falls back to the generic\n\t\t// two-ended shape when `displayFormat` is a pattern or a function — the caller said\n\t\t// exactly what they wanted, and this is not the place to second-guess it.\n\t\tif (this._isDayTimeRange()) {\n\t\t\tif (!start) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst end = this._end();\n\t\t\tconst time = this.#resolveTimeDisplay();\n\n\t\t\tif (!end) {\n\t\t\t\treturn format(start);\n\t\t\t}\n\n\t\t\treturn `${format(start)}${this._rangeSeparator()}${time ? time(end) : format(end)}`;\n\t\t}\n\n\t\tif (!this._isRange()) {\n\t\t\treturn start ? format(start) : '';\n\t\t}\n\n\t\tconst end = this._end();\n\n\t\tif (!start && !end) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${start ? format(start) : ''}${this._rangeSeparator()}${end ? format(end) : ''}`;\n\t});\n\n\tprotected readonly weekdays = computed<string[]>(() =>\n\t\tweekdayLabels(this.locale(), this._firstDayOfWeek(), this._weekdayFormat())\n\t);\n\n\tprotected readonly monthYearLabel = computed<string>(() =>\n\t\tnew Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(this._viewDate())\n\t);\n\n\t/** Header title of the period panel: the year for months, the decade for years. */\n\tprotected readonly periodLabel = computed<string>(() => {\n\t\tconst year = this._viewDate().getFullYear();\n\n\t\tif (this._granularity() === 'month') {\n\t\t\treturn `${year}`;\n\t\t}\n\n\t\tconst start = decadeStart(year);\n\n\t\t// The page renders a padding year at each end; the title names the decade itself.\n\t\treturn `${start} – ${start + 9}`;\n\t});\n\n\t/**\n\t * The band a half-open range would take if it closed right now, ordered low to high.\n\t *\n\t * Only a range with a start and no end has one: before the first pick there is no anchor to\n\t * measure from, and once both ends are committed the preview has nothing left to say. The\n\t * target is normalized against the anchor because a range can be drawn backwards — picking\n\t * the later day first and sweeping left is as natural as the other way round.\n\t */\n\tprotected readonly previewRange = computed<{ from: Date; to: Date } | null>(() => {\n\t\tconst anchor = this._start();\n\t\tconst target = this._previewTarget();\n\n\t\tif (!this._isRange() || !anchor || this._end() || !target) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn isBeforeDay(target, anchor) ? { from: target, to: anchor } : { from: anchor, to: target };\n\t});\n\n\t/** Enriched 6×7 grid for the displayed month. */\n\tprotected readonly grid = computed<DatepickerCell[]>(() => {\n\t\tconst start = this._start();\n\t\tconst end = this.rangeEnd();\n\t\tconst focused = this._focusedDate();\n\t\tconst min = this._minDate();\n\t\tconst max = this._maxDate();\n\t\tconst disabledFn = this.disabledDates();\n\t\tconst isRange = this._isRange();\n\t\tconst preview = this.previewRange();\n\n\t\treturn buildCalendarGrid(this._viewDate(), this._firstDayOfWeek()).map((c) => ({\n\t\t\t...c,\n\t\t\tdisabled: unitOutOfBounds(c.date, min, max, 'day') || (disabledFn ? disabledFn(c.date) : false),\n\t\t\tselected: !isRange && isSameDay(c.date, start),\n\t\t\trangeStart: isRange && isSameDay(c.date, start),\n\t\t\trangeEnd: isRange && isSameDay(c.date, end),\n\t\t\tinRange: isRange && isInRange(c.date, start, end),\n\t\t\t// The anchor already paints as `rangeStart`, so the band starts after it — same\n\t\t\t// exclusive shape as `inRange`, with the previewed end drawn on top of it.\n\t\t\tpreview: !!preview && isInRange(c.date, preview.from, preview.to),\n\t\t\tpreviewEnd:\n\t\t\t\t!!preview && !isSameDay(c.date, start) && (isSameDay(c.date, preview.from) || isSameDay(c.date, preview.to)),\n\t\t\tfocused: isSameDay(c.date, focused)\n\t\t}));\n\t});\n\n\t// ── CVA ───────────────────────────────────────────────────────────────────────\n\n\twriteValue(value: unknown): void {\n\t\tconst granularity = this._granularity();\n\t\tconst parse = this.parse();\n\n\t\tif (this._emitsRange()) {\n\t\t\tconst range = (value ?? {}) as HubDateRange<unknown>;\n\t\t\tconst start = parseFlexible(range?.start ?? null, parse);\n\t\t\tconst incomingEnd = parseFlexible(range?.end ?? null, parse);\n\n\t\t\t// A `day-time-range` cannot express a span that crosses midnight, so an incoming one\n\t\t\t// is pulled onto the start's day, keeping the time the caller asked for. Silent on\n\t\t\t// purpose — `writeValue` must not write back — exactly like the granularity\n\t\t\t// truncation on the line below, which has always rewritten what it was handed.\n\t\t\tconst end =\n\t\t\t\tthis._isDayTimeRange() && start && incomingEnd\n\t\t\t\t\t? withTime(start, incomingEnd.getHours(), incomingEnd.getMinutes(), incomingEnd.getSeconds())\n\t\t\t\t\t: incomingEnd;\n\n\t\t\tthis._start.set(start ? startOfUnit(start, granularity) : null);\n\t\t\tthis._end.set(end ? startOfUnit(end, granularity) : null);\n\t\t\tthis.#committed = { start: this._start(), end: this._end() };\n\t\t\tthis.#anchor(start ?? new Date());\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst date = parseFlexible(value, parse);\n\n\t\tthis._start.set(date ? startOfUnit(date, granularity) : null);\n\t\tthis._end.set(null);\n\t\tthis.#anchor(date ?? new Date());\n\t}\n\n\t// ── Panel ──────────────────────────────────────────────────────────────────────\n\n\t/** Opens the calendar (no-op when disabled/read-only). */\n\tprotected open(): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#anchor(this._start() ?? new Date());\n\t\tthis._open.set(true);\n\t\tthis.opened.emit();\n\t}\n\n\t/** Closes the calendar and marks the control as touched. */\n\tprotected close(): void {\n\t\tif (!this._open()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#rollbackPendingRange();\n\t\tthis._open.set(false);\n\t\tthis._previewTarget.set(null);\n\t\tthis.onTouched?.();\n\t\tthis.closed.emit();\n\t}\n\n\t/** Toggles the calendar. */\n\tprotected toggleCalendar(): void {\n\t\tthis._open() ? this.close() : this.open();\n\t}\n\n\t/** Shifts the displayed month by `delta` and emits {@link viewChange}. */\n\tprotected shiftMonth(delta: number): void {\n\t\tconst next = addMonths(this._viewDate(), delta);\n\n\t\tthis._viewDate.set(next);\n\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t}\n\n\t/** Shifts the period panel by one page: a year for months, a decade for years. */\n\tprotected shiftPeriod(delta: number): void {\n\t\tconst view = this._viewDate();\n\t\tconst step = this._granularity() === 'month' ? delta : delta * 10;\n\t\tconst next = new Date(view.getFullYear() + step, view.getMonth(), 1);\n\n\t\tthis._viewDate.set(next);\n\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t}\n\n\t/** Jumps the view to today (and focuses it). */\n\tprotected goToToday(): void {\n\t\tconst today = new Date();\n\n\t\tthis._viewDate.set(today);\n\t\tthis._focusedDate.set(today);\n\t\tthis.viewChange.emit(new Date(today.getFullYear(), today.getMonth(), 1));\n\t}\n\n\t/** Clears the value. */\n\tprotected clear(): void {\n\t\tthis._start.set(null);\n\t\tthis._end.set(null);\n\t\tthis._previewTarget.set(null);\n\t\tthis.#emit();\n\t\tthis.cleared.emit();\n\t}\n\n\t// ── Selection ───────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Selects a day cell. In `single` mode it sets the value; in `range` mode it sets the start\n\t * (resetting the range) or completes it, keeping start ≤ end.\n\t *\n\t * @param cell - The picked cell.\n\t */\n\tprotected selectDay(cell: DatepickerCell): void {\n\t\tif (cell.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._focusedDate.set(cell.date);\n\t\tthis.#select(cell.date);\n\t}\n\n\t/**\n\t * Measures the pending range against the cell under the pointer.\n\t *\n\t * A disabled cell is skipped rather than cleared: sweeping across a blocked day on the way\n\t * to a valid one would otherwise make the band flicker off and back on.\n\t *\n\t * @param cell - The cell the pointer entered.\n\t */\n\tprotected previewDay(cell: DatepickerCell): void {\n\t\tif (!cell.disabled) {\n\t\t\tthis._previewTarget.set(cell.date);\n\t\t}\n\t}\n\n\t/** Drops the pending band — the pointer left the grid, or the range is no longer half-open. */\n\tprotected clearPreview(): void {\n\t\tthis._previewTarget.set(null);\n\t}\n\n\t/**\n\t * Selects a period cell (a month or a year) from the coarse panel.\n\t *\n\t * @param date - First instant of the picked period.\n\t */\n\tprotected selectPeriod(date: Date): void {\n\t\tthis._focusedDate.set(date);\n\t\tthis.#select(date);\n\t}\n\n\t/** Writes a new start time, emitting only once a day has actually been picked. */\n\tprotected onStartTimeChange(next: Date): void {\n\t\tif (this._start()) {\n\t\t\tthis._start.set(next);\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._startDraft.set(next);\n\t}\n\n\t/** Writes a new end time, emitting only once the range end has actually been picked. */\n\tprotected onEndTimeChange(next: Date): void {\n\t\tif (this._end()) {\n\t\t\tthis._end.set(next);\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._endDraft.set(next);\n\t}\n\n\t/**\n\t * Keyboard navigation within the day grid.\n\t *\n\t * @param event - The originating keyboard event (handled on the grid container).\n\t */\n\tprotected onGridKeydown(event: KeyboardEvent): void {\n\t\tconst grid = event.currentTarget as HTMLElement;\n\t\tlet next: Date | null = null;\n\t\tconst focused = this._focusedDate();\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tnext = this.#addDays(focused, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tnext = this.#addDays(focused, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#addDays(focused, -7);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#addDays(focused, 7);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#addDays(focused, -((focused.getDay() - this._firstDayOfWeek() + 7) % 7));\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#addDays(focused, 6 - ((focused.getDay() - this._firstDayOfWeek() + 7) % 7));\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = addMonths(focused, event.shiftKey ? -12 : -1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = addMonths(focused, event.shiftKey ? 12 : 1);\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst cell = this.grid().find((c) => isSameDay(c.date, focused));\n\t\t\t\tif (cell) this.selectDay(cell);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis._focusedDate.set(next);\n\t\t// Keyboard navigation measures the pending range too, so arrowing towards the end date\n\t\t// shows the same band the pointer would.\n\t\tthis._previewTarget.set(next);\n\n\t\tif (next.getMonth() !== this._viewDate().getMonth() || next.getFullYear() !== this._viewDate().getFullYear()) {\n\t\t\tthis._viewDate.set(next);\n\t\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t\t}\n\n\t\t// Move DOM focus to the newly focused cell after the grid re-renders.\n\t\tconst time = next.getTime();\n\t\tsetTimeout(() => grid.querySelector<HTMLElement>(`[data-time=\"${time}\"]`)?.focus(), 0);\n\t}\n\n\t/** Moves the period grid's focus without selecting. */\n\tprotected onPeriodFocusMove(date: Date): void {\n\t\tthis._focusedDate.set(date);\n\n\t\tif (date.getFullYear() !== this._viewDate().getFullYear()) {\n\t\t\tthis._viewDate.set(date);\n\t\t\tthis.viewChange.emit(new Date(date.getFullYear(), date.getMonth(), 1));\n\t\t}\n\t}\n\n\t// ── Internals ─────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Applies a picked calendar point to the selection, attaching the working time-of-day and\n\t * ordering the range endpoints **by instant** — which is what makes a same-day 21:00 → 09:00\n\t * pair reorder itself instead of being kept in click order.\n\t */\n\t#select(picked: Date): void {\n\t\tconst granularity = this._granularity();\n\t\tconst min = this._minDate();\n\t\tconst max = this._maxDate();\n\t\tconst compose = (time: Date): Date =>\n\t\t\tstartOfUnit(\n\t\t\t\tclampToBounds(\n\t\t\t\t\tthis._hasTime() ? withTime(picked, time.getHours(), time.getMinutes(), time.getSeconds()) : picked,\n\t\t\t\t\tmin,\n\t\t\t\t\tmax\n\t\t\t\t),\n\t\t\t\tgranularity\n\t\t\t);\n\n\t\t// One day, both ends. The two times are already on screen, so picking the day settles\n\t\t// the whole span at once — and there is no second day to wait for, which is the entire\n\t\t// difference from `range`.\n\t\tif (this._isDayTimeRange()) {\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis._end.set(compose(this.endTimeValue()));\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\t// Never auto-closes: the times are the rest of the answer.\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._isRange()) {\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis.#emit();\n\n\t\t\tif (this.closeOnSelect() && !this._hasTime()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst start = this._start();\n\t\tconst end = this._end();\n\n\t\tif (!start || end) {\n\t\t\t// Begin a new range.\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis._end.set(null);\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst candidate = compose(this.endTimeValue());\n\t\tconst [a, b] = compareInstant(candidate, start) < 0 ? [candidate, start] : [start, candidate];\n\n\t\tthis._start.set(a);\n\t\tthis._end.set(b);\n\t\tthis.#emit();\n\n\t\tif (!this._hasTime()) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/**\n\t * Drops a range that was only half picked when the panel closed.\n\t *\n\t * The first click of a span is a question, not an answer, and {@link #emit} never published\n\t * it. Leaving it on screen would show a selection the model does not hold, so the panel goes\n\t * back to the last value that was actually committed.\n\t */\n\t#rollbackPendingRange(): void {\n\t\tif (!this._emitsRange() || !this._start() || this._end()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._start.set(this.#committed.start);\n\t\tthis._end.set(this.#committed.end);\n\t}\n\n\t/** Keeps the two endpoints ordered after a time edit has moved one past the other. */\n\t#reorderIfNeeded(): void {\n\t\tconst start = this._start();\n\t\tconst end = this._end();\n\n\t\tif (start && end && compareInstant(start, end) > 0) {\n\t\t\tthis._start.set(end);\n\t\t\tthis._end.set(start);\n\t\t}\n\t}\n\n\t/** Points the view and the keyboard focus at a date. */\n\t#anchor(date: Date): void {\n\t\tthis._viewDate.set(date);\n\t\tthis._focusedDate.set(date);\n\t}\n\n\t/** Drops empty entries so `prepend=\"\"` renders nothing rather than an empty box. */\n\t#toAddonList(value: string | string[]): string[] {\n\t\treturn Array.isArray(value) ? value.filter((item) => item != null && item !== '') : value ? [value] : [];\n\t}\n\n\t#addDays(date: Date, days: number): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n\t}\n\n\t/**\n\t * Resolves {@link displayFormat} into a formatting function, narrowed to the granularity: the\n\t * time options are composed over it once a time is carried, and the parts finer than the unit\n\t * are dropped when it is coarser than a day.\n\t *\n\t * The narrowing matters because the default `displayFormat` names a day. Without it a month\n\t * picker emitting `2026-09` would read `09/01/2026` in the field — showing a day nobody chose.\n\t *\n\t * An explicit pattern string or function is never narrowed: the caller said exactly what they\n\t * wanted.\n\t */\n\t#resolveDisplay(): (date: Date) => string {\n\t\tconst format = this._displayFormat();\n\t\tconst locale = this.locale();\n\n\t\tif (typeof format === 'function') {\n\t\t\treturn format;\n\t\t}\n\n\t\tif (typeof format === 'string') {\n\t\t\treturn (date: Date) => formatDate(date, format, locale);\n\t\t}\n\n\t\tconst formatter = new Intl.DateTimeFormat(locale, this.#narrowOptions(format));\n\n\t\treturn (date: Date) => formatter.format(date);\n\t}\n\n\t/**\n\t * Formatter for the trailing end of a `day-time-range` — the time alone, since the date is\n\t * already on the other side of the separator.\n\t *\n\t * Returns `null` when `displayFormat` is a pattern string or a function: those describe a\n\t * whole point, there is no time half to extract from them, and the caller asked for exactly\n\t * that shape.\n\t *\n\t * @returns A time-only formatter, or `null` when the display format is caller-supplied.\n\t */\n\t#resolveTimeDisplay(): ((date: Date) => string) | null {\n\t\tif (typeof this._displayFormat() !== 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst formatter = new Intl.DateTimeFormat(this.locale(), {\n\t\t\t...this._timeDisplayFormat(),\n\t\t\t...(this._granularity() === 'second' ? { second: '2-digit' } : {}),\n\t\t\thour12: this._hour12()\n\t\t});\n\n\t\treturn (date: Date) => formatter.format(date);\n\t}\n\n\t/**\n\t * Fits `Intl` options to the current granularity, adding the time parts or removing the ones\n\t * finer than the picked unit.\n\t *\n\t * @param format - The resolved `Intl` options.\n\t * @returns Options describing exactly the precision the picker offers.\n\t */\n\t#narrowOptions(format: Intl.DateTimeFormatOptions): Intl.DateTimeFormatOptions {\n\t\tconst granularity = this._granularity();\n\n\t\tif (granularity === 'year') {\n\t\t\treturn { year: format.year ?? 'numeric' };\n\t\t}\n\n\t\tif (granularity === 'month') {\n\t\t\treturn { year: format.year ?? 'numeric', month: format.month ?? '2-digit' };\n\t\t}\n\n\t\tif (!this._hasTime()) {\n\t\t\treturn format;\n\t\t}\n\n\t\t// `hour12` is threaded through so the input cannot read `02:30 PM` while the panel that\n\t\t// produced it reads `14:30`.\n\t\treturn {\n\t\t\t...format,\n\t\t\t...this._timeDisplayFormat(),\n\t\t\t...(granularity === 'second' ? { second: '2-digit' } : {}),\n\t\t\thour12: this._hour12()\n\t\t};\n\t}\n\n\t/** Serializes the current selection and pushes it to the control and to {@link valueChange}. */\n\t#emit(): void {\n\t\tconst granularity = this._granularity();\n\t\tconst valueFormat = this._valueFormat();\n\t\tconst start = this._start();\n\n\t\tif (this._emitsRange()) {\n\t\t\tconst end = this._end();\n\n\t\t\t// A half-open range is not an answer, so it is not published. Emitting the first pick\n\t\t\t// used to destroy a complete value the instant the user began choosing a new span —\n\t\t\t// and if they then clicked away, the control was left holding `{ start, end: null }`,\n\t\t\t// a shape no consumer asked for and every consumer has to defend against. The pick\n\t\t\t// stays on screen; the model keeps what it had until the second end lands.\n\t\t\tif (start && !end) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value =\n\t\t\t\tstart || end\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstart: serializeValue(start, granularity, valueFormat),\n\t\t\t\t\t\t\tend: serializeValue(end, granularity, valueFormat)\n\t\t\t\t\t\t}\n\t\t\t\t\t: null;\n\n\t\t\tthis.#committed = { start, end };\n\t\t\tthis.onChange?.(value);\n\t\t\tthis.valueChange.emit(value as HubDateValue<any>);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = serializeValue(start, granularity, valueFormat);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value as HubDateValue<any>);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-datepicker\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\tclass=\"hub-datepicker__group\"\n\t\t\t[class.hub-datepicker__group--has-prepend]=\"hasPrepend()\"\n\t\t\t[class.hub-datepicker__group--has-append]=\"hasAppend()\"\n\t\t>\n\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-datepicker__attached hub-datepicker__attached--prepend\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t\t@for (addon of _prependAddons(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__addon hub-datepicker__addon--prepend\">{{ addon }}</span>\n\t\t\t}\n\t\t\t<div class=\"hub-datepicker__trigger\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n\t\t\t<input\n\t\t\tclass=\"hub-field__control hub-datepicker__input\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"text\"\n\t\t\treadonly\n\t\t\t[value]=\"displayValue()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t(blur)=\"handleBlur($event)\"\n\t\t/>\n\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">\n\t\t\t\t&times;\n\t\t\t</button>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t></button>\n\t\t\t</div>\n\t\t\t@for (addon of _appendAddons(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__addon hub-datepicker__addon--append\">{{ addon }}</span>\n\t\t\t}\n\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-datepicker__attached hub-datepicker__attached--append\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n\n<ng-template\n\tcdkConnectedOverlay\n\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t[cdkConnectedOverlayOpen]=\"_open()\"\n\t[cdkConnectedOverlayHasBackdrop]=\"true\"\n\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t[cdkConnectedOverlayOffsetY]=\"4\"\n\t(backdropClick)=\"close()\"\n\t(detach)=\"close()\"\n>\n\t<div class=\"hub-datepicker__panel\" role=\"dialog\" [attr.aria-label]=\"_isPeriod() ? periodLabel() : monthYearLabel()\">\n\t\t@if (_isPeriod()) {\n\t\t\t<header class=\"hub-datepicker__header\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().previousYear\"\n\t\t\t\t\t(click)=\"shiftPeriod(-1)\"\n\t\t\t\t>\n\t\t\t\t\t‹\n\t\t\t\t</button>\n\t\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ periodLabel() }}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().nextYear\"\n\t\t\t\t\t(click)=\"shiftPeriod(1)\"\n\t\t\t\t>\n\t\t\t\t\t›\n\t\t\t\t</button>\n\t\t\t</header>\n\n\t\t\t<hub-datepicker-period\n\t\t\t\t[granularity]=\"$any(_granularity())\"\n\t\t\t\t[viewDate]=\"_viewDate()\"\n\t\t\t\t[focusedDate]=\"_focusedDate()\"\n\t\t\t\t[selectionStart]=\"rangeStart()\"\n\t\t\t\t[selectionEnd]=\"rangeEnd()\"\n\t\t\t\t[range]=\"_isRange()\"\n\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t(pick)=\"selectPeriod($event)\"\n\t\t\t\t(focusMove)=\"onPeriodFocusMove($event)\"\n\t\t\t\t(dismiss)=\"close()\"\n\t\t\t/>\n\t\t} @else {\n\t\t\t<header class=\"hub-datepicker__header\">\n\t\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().previousYear\"\n\t\t\t\t\t\t(click)=\"shiftMonth(-12)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t«\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().previousMonth\"\n\t\t\t\t\t\t(click)=\"shiftMonth(-1)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t‹\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ monthYearLabel() }}</span>\n\t\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().nextMonth\"\n\t\t\t\t\t\t(click)=\"shiftMonth(1)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t›\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().nextYear\"\n\t\t\t\t\t\t(click)=\"shiftMonth(12)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t»\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</header>\n\n\t\t\t<div class=\"hub-datepicker__weekdays\" aria-hidden=\"true\">\n\t\t\t\t@for (wd of weekdays(); track $index) {\n\t\t\t\t\t<span class=\"hub-datepicker__weekday\">{{ wd }}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"hub-datepicker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\" (mouseleave)=\"clearPreview()\">\n\t\t\t\t@for (cell of grid(); track cell.date.getTime()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\tclass=\"hub-datepicker__cell\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--outside]=\"!cell.currentMonth\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--today]=\"cell.today\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--in-range]=\"cell.inRange\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--preview]=\"cell.preview\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--preview-end]=\"cell.previewEnd\"\n\t\t\t\t\t\t[attr.data-time]=\"cell.date.getTime()\"\n\t\t\t\t\t\t[attr.tabindex]=\"cell.focused ? 0 : -1\"\n\t\t\t\t\t\t[attr.aria-selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t\t[disabled]=\"cell.disabled\"\n\t\t\t\t\t\t(click)=\"selectDay(cell)\"\n\t\t\t\t\t\t(mouseenter)=\"previewDay(cell)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cell.day }}\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (_hasTime()) {\n\t\t\t<div class=\"hub-datepicker__times\">\n\t\t\t\t<hub-datepicker-time\n\t\t\t\t\t[value]=\"startTimeValue()\"\n\t\t\t\t\t(valueChange)=\"onStartTimeChange($event)\"\n\t\t\t\t\t[label]=\"_emitsRange() ? _labels().startTime : _labels().time\"\n\t\t\t\t\t[granularity]=\"_granularity()\"\n\t\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t\t[hour12]=\"_hour12()\"\n\t\t\t\t\t[minuteStep]=\"_minuteStep()\"\n\t\t\t\t\t[secondStep]=\"_secondStep()\"\n\t\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t/>\n\n\t\t\t\t@if (_emitsRange()) {\n\t\t\t\t\t<hub-datepicker-time\n\t\t\t\t\t\t[value]=\"endTimeValue()\"\n\t\t\t\t\t\t(valueChange)=\"onEndTimeChange($event)\"\n\t\t\t\t\t\t[label]=\"_labels().endTime\"\n\t\t\t\t\t\t[granularity]=\"_granularity()\"\n\t\t\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t\t\t[hour12]=\"_hour12()\"\n\t\t\t\t\t\t[minuteStep]=\"_minuteStep()\"\n\t\t\t\t\t\t[secondStep]=\"_secondStep()\"\n\t\t\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (showToday() || clearable() || _hasTime()) {\n\t\t\t<footer class=\"hub-datepicker__footer\">\n\t\t\t\t@if (showToday()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action\" (click)=\"goToToday()\">{{ _labels().today }}</button>\n\t\t\t\t}\n\t\t\t\t@if (clearable()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action\" (click)=\"clear()\">{{ _labels().clear }}</button>\n\t\t\t\t}\n\t\t\t\t@if (_hasTime()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action hub-datepicker__action--primary\" (click)=\"close()\">\n\t\t\t\t\t\t{{ _labels().done }}\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</footer>\n\t\t}\n\t</div>\n</ng-template>\n","import { KeyValuePipe } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport {\n\tFormTextType,\n\tFormTextTypes,\n\tHubLabelType,\n\tHubLabelTypes\n} from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Time field (`hub-timepicker`): a time of day, as `HH:MM`.\n *\n * The family had a date and no hour, so every product that needed one reached for a text\n * field with an `HH:MM` pattern. A pattern is the wrong tool three times over: it gives no\n * numeric keyboard on a phone, it offers nothing when the field is focused, and it lets\n * \"8:00\" through until the form is submitted rather than saying so while it is typed.\n *\n * Built on the platform's `<input type=\"time\">`, which brings the keyboard, the stepper and\n * the locale's own 12- or 24-hour presentation, and normalises what it publishes to `HH:MM`\n * — so what a form holds does not change with the reader's locale.\n *\n * ```html\n * <hub-timepicker formControlName=\"opensAt\" label=\"Abre a las\" />\n * <hub-timepicker formControlName=\"closesAt\" [step]=\"900\" [min]=\"'08:00'\" [max]=\"'22:00'\" />\n * ```\n */\n@Component({\n\tselector: 'hub-timepicker',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-timepicker-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-timepicker\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\" [attr.for]=\"id\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"time\"\n\t\t\t\t\tclass=\"hub-field__control hub-timepicker__control\"\n\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t[value]=\"value() ?? ''\"\n\t\t\t\t\t[attr.min]=\"min() || null\"\n\t\t\t\t\t[attr.max]=\"max() || null\"\n\t\t\t\t\t[attr.step]=\"step() || null\"\n\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[readOnly]=\"readonly()\"\n\t\t\t\t\t(input)=\"onInput($event)\"\n\t\t\t\t\t(blur)=\"onTouched()\"\n\t\t\t\t/>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-field__form-text\"\n\t\t\t\t\t\t[class.hub-field__form-text--disabled]=\"disabled()\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ formText() }}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{\n\t\t\t\t\t\t\t\t\t\tgetInvalidFeedbackTemplate(error.key, error.value)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './timepicker.component.scss'\n})\nexport class HubTimepickerComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Extra classes forwarded to the host, as every field of the family accepts. */\n\treadonly classlist = input<string>('');\n\n\t/** What the bound control holds, as `HH:MM`. */\n\tprotected readonly value = signal<string | null>(null);\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(HubLabelTypes.Stacked);\n\n\t/** Helper text shown below the field. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Earliest time the field accepts, as `HH:MM`. */\n\treadonly min = input<string>('');\n\n\t/** Latest time the field accepts, as `HH:MM`. */\n\treadonly max = input<string>('');\n\n\t/**\n\t * Granularity in **seconds**, which is what the platform's `step` means here.\n\t *\n\t * 900 offers quarter hours; 60 — the default the browser applies — offers minutes and\n\t * hides the seconds field. Anything under 60 makes the control show seconds, which is\n\t * a precision an opening time never has.\n\t */\n\treadonly step = input(0, { transform: numberAttribute });\n\n\t/** Renders the field read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Publishes `HH:MM`, and nothing else.\n\t *\n\t * The control's own value already is `HH:MM` — or `HH:MM:SS` when a sub-minute step is\n\t * asked for — so the seconds are trimmed here rather than left for every consumer to\n\t * decide about. An empty field publishes null and not the empty string: \"no time\" is\n\t * an absence, and a string of length zero would sail past a `required` written as a\n\t * null check.\n\t */\n\t/** @inheritDoc */\n\twriteValue(value: unknown): void {\n\t\t// Trimmed on the way in as well as out: a control fed \"09:00:00\" from an API — or a\n\t\t// full ISO instant — must still show the hour rather than nothing at all, because\n\t\t// `<input type=\"time\">` silently ignores a value it cannot parse.\n\t\tconst text = typeof value === 'string' ? value : '';\n\t\tconst match = text.match(/(\\d{2}:\\d{2})/);\n\n\t\tthis.value.set(match ? match[1] : null);\n\t}\n\n\tprotected onInput(event: Event): void {\n\t\tconst raw = (event.target as HTMLInputElement).value;\n\n\t\tconst time = raw ? raw.slice(0, 5) : null;\n\n\t\tthis.value.set(time);\n\t\tthis.onChange(time);\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFileIcon` template. */\nexport interface HubFileIconContext {\n\t/** The item whose icon is being rendered. */\n\t$implicit: HubFileItem;\n}\n\n/**\n * Overrides the glyph `<hub-file-input>` renders next to a non-image file.\n *\n * The library never depends on `ng-hub-ui-icons`: it draws a neutral document glyph from the\n * `--hub-file-input-file-icon` CSS token and lets you project anything richer — a `<hub-icon>` from\n * any pack, an inline `<svg>`, an emoji — through this template. The item is the implicit context,\n * so the glyph can vary with `file.type`.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFileIcon let-item>\n * <hub-icon [name]=\"item.file.type === 'application/pdf' ? 'fa:solid:file-pdf' : 'fa:solid:file'\" />\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileIcon]'\n})\nexport class HubFileIconDirective {\n\t/** Template reference for the icon. */\n\treadonly template = inject<TemplateRef<HubFileIconContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the implicit context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item`.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFileIconDirective, _context: unknown): _context is HubFileIconContext {\n\t\treturn true;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Projects arbitrary markup inside a `<hub-file-input>` dropzone, between the glyph and the\n * invitation.\n *\n * The slot exists for a notice the consumer computes per instance — \"2 documents still missing\",\n * a badge, a warning — which neither `dropText` (the invitation) nor `hint` (the constraints\n * summary, rendered at the bottom) can express, and which is too instance-specific to live in the\n * global labels.\n *\n * Renders nothing when the template is absent, so the dropzone is unchanged for every consumer\n * that does not project one.\n *\n * @example\n * ```html\n * <hub-file-input [multiple]=\"true\">\n * <ng-template hubFileDropzoneNotice>\n * <strong class=\"missing\">2 documents still missing</strong>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileDropzoneNotice]'\n})\nexport class HubFileDropzoneNoticeDirective {\n\t/** Template reference for the notice. */\n\treadonly template = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFilePreview` template. */\nexport interface HubFilePreviewContext {\n\t/** The item being rendered. */\n\t$implicit: HubFileItem;\n\t/** Removes this item from the selection (and cancels its upload, if any). */\n\tremove: () => void;\n\t/** Re-runs the upload of this item. No-op when no uploader is registered. */\n\tretry: () => void;\n\t/** Aborts the in-flight upload of this item. No-op when it is not uploading. */\n\tcancel: () => void;\n}\n\n/**\n * Replaces the entire rendering of a selected file in `<hub-file-input>`.\n *\n * Where `hubFileIcon` swaps a glyph, this takes over the whole row (or grid tile): thumbnail, name,\n * size, progress bar and buttons. The template receives the item plus the actions it needs, so a\n * custom preview keeps working removal, retry and cancel without reaching into the component.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFilePreview let-item let-remove=\"remove\">\n * <article class=\"attachment\">\n * <img *ngIf=\"item.previewUrl\" [src]=\"item.previewUrl\" alt=\"\" />\n * <span>{{ item.file.name }}</span>\n * <button type=\"button\" (click)=\"remove()\">Remove</button>\n * </article>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFilePreview]'\n})\nexport class HubFilePreviewDirective {\n\t/** Template reference for the item. */\n\treadonly template = inject<TemplateRef<HubFilePreviewContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item` and the action bindings.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFilePreviewDirective, _context: unknown): _context is HubFilePreviewContext {\n\t\treturn true;\n\t}\n}\n","/**\n * Tests a file against an `accept` specification.\n *\n * The native `accept` attribute only filters the operating-system file dialog: files arriving by\n * drag-and-drop or paste bypass it entirely. This function applies the same rules by hand, so a\n * dropped file is held to the constraint the consumer declared.\n *\n * Supported tokens, comma-separated, matched case-insensitively:\n * - an extension — `.pdf`\n * - a wildcard MIME type — `image/*`\n * - an exact MIME type — `application/pdf`\n * - the catch-alls `*` and `*​/*`\n *\n * Note that a MIME token can never match a file the browser could not type (`file.type === ''`,\n * common for unusual extensions); use an extension token for those.\n *\n * @param file - The file to test.\n * @param accept - The `accept` specification. Empty or `*` accepts everything.\n * @returns `true` when the file satisfies at least one token.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n\tconst specification = (accept ?? '').trim();\n\n\tif (!specification || specification === '*' || specification === '*/*') {\n\t\treturn true;\n\t}\n\n\tconst name = file.name.toLowerCase();\n\tconst type = (file.type ?? '').toLowerCase();\n\n\treturn specification\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0)\n\t\t.some((token) => {\n\t\t\tif (token === '*' || token === '*/*') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// An extension, e.g. `.pdf`\n\t\t\tif (token.startsWith('.')) {\n\t\t\t\treturn name.endsWith(token);\n\t\t\t}\n\n\t\t\t// A wildcard MIME type, e.g. `image/*` — the file's type must start with `image/`\n\t\t\tif (token.endsWith('/*')) {\n\t\t\t\treturn type.length > 0 && type.startsWith(token.slice(0, -1));\n\t\t\t}\n\n\t\t\t// An exact MIME type\n\t\t\treturn type === token;\n\t\t});\n}\n","/**\n * Builds the identity key used to detect duplicate selections.\n *\n * Two `File` objects are never referentially equal across separate drops, so identity is derived\n * from the tuple the browser exposes: name, byte size and last-modified timestamp. Collisions are\n * possible in theory (same name, size and mtime) but describe the same file in every practical case.\n *\n * @param file - The file to key.\n * @returns A stable string key for the file.\n */\nexport function fileKey(file: File): string {\n\treturn `${file.name}:${file.size}:${file.lastModified}`;\n}\n","/** The value a `<hub-file-input>` writes to its form control. */\nexport type HubFileValue = File | File[] | null;\n\n/**\n * Normalizes any file-shaped control value to a plain array.\n *\n * Accepts the shapes a control can realistically hold: a single `File` (single mode), an array of\n * files (multiple mode), a native `FileList` (a control fed straight from a DOM event or from the\n * deprecated `<hub-input type=\"file\">`), or `null`/`undefined`.\n *\n * @param value - The raw control value.\n * @returns The files it contains, in order; an empty array when it holds none.\n */\nexport function toFileArray(value: unknown): File[] {\n\tif (value == null) {\n\t\treturn [];\n\t}\n\n\tif (value instanceof File) {\n\t\treturn [value];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is File => entry instanceof File);\n\t}\n\n\tif (typeof FileList !== 'undefined' && value instanceof FileList) {\n\t\treturn Array.from(value);\n\t}\n\n\treturn [];\n}\n","import { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tPLATFORM_ID,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubFileIconDirective } from '../../directives/file-icon.directive';\nimport { HubFileDropzoneNoticeDirective } from '../../directives/file-dropzone-notice.directive';\nimport { HubFilePreviewContext, HubFilePreviewDirective } from '../../directives/file-preview.directive';\nimport { FormTextType, FormTextTypes } from '../../interfaces/common.interface';\nimport {\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from '../../interfaces/file-input.interface';\nimport { HUB_FILE_UPLOADER } from '../../services/file-uploader';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\n\n/**\n * Accessible file field with drag-and-drop, clipboard paste, per-file constraints, previews and\n * optional upload progress.\n *\n * A full `ng-hub-ui-forms` field: it extends {@link HubFieldControl}, so it binds with\n * `formControlName` / `ngModel` and shares the label, helper text and validation chrome with every\n * other control.\n *\n * The **form value stays native** — a `File` in single mode, a `File[]` in multiple mode, `null`\n * when empty — so it can be handed straight to a `FormData`. The rich per-file state (preview URL,\n * upload status, progress, error) lives in the {@link files} signal instead of contaminating the\n * control.\n *\n * Constraints declared as inputs (`accept`, `maxSize`, `minSize`, `maxTotalSize`, `maxFiles`) act as\n * a **filter**: an offending file never reaches the value and surfaces through {@link rejected}.\n * They are enforced by hand rather than delegated to the native `accept` attribute, which only\n * filters the operating-system dialog and is bypassed entirely by a drop or a paste. To make the\n * *control itself* invalid — the right choice when a value can also be patched in programmatically —\n * add the matching validators (`hubAcceptedFiles`, `hubMaxFileSize`, …).\n *\n * Uploading is opt-in and transport-agnostic: register a {@link HubFileUploader} with\n * `provideHubFileUploader()` and the component drives progress, cancel and retry. With no uploader\n * registered it is a pure picker.\n *\n * @example\n * ```html\n * <hub-file-input\n * formControlName=\"attachments\"\n * label=\"Attachments\"\n * [multiple]=\"true\"\n * accept=\"image/*,.pdf\"\n * [maxSize]=\"5 * 1024 * 1024\"\n * [maxFiles]=\"3\"\n * preview=\"grid\"\n * (rejected)=\"notify($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'hub-file-input',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './file-input.component.html',\n\tstyleUrl: './file-input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-file-input-host]': 'true',\n\t\t'(paste)': 'handlePaste($event)'\n\t}\n})\nexport class HubFileInputComponent extends HubFieldControl {\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #uploader = inject(HUB_FILE_UPLOADER, { optional: true });\n\treadonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\treadonly #subscriptions = new Map<string, Subscription>();\n\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _items = signal<HubFileItem[]>([]);\n\n\t/** Depth counter for `dragenter`/`dragleave`: children of the dropzone fire their own events. */\n\t#dragDepth = 0;\n\n\t/** Releases every object URL and aborts every in-flight upload when the field goes away. */\n\tprivate readonly _cleanup = inject(DestroyRef).onDestroy(() => {\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t});\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Whether more than one file can be held. Switches the control value to `File[]`. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accepted file types, e.g. `image/*,.pdf`. Enforced on drop and paste, not just in the dialog. */\n\treadonly accept = input<string>('*');\n\n\t/** Maximum size per file, in bytes. */\n\treadonly maxSize = input<number | null>(null);\n\n\t/** Minimum size per file, in bytes. Rejects the 0-byte files a failed export produces. */\n\treadonly minSize = input<number | null>(null);\n\n\t/** Maximum combined size of every held file, in bytes. */\n\treadonly maxTotalSize = input<number | null>(null);\n\n\t/** Maximum number of files. Only meaningful with `multiple`. */\n\treadonly maxFiles = input<number | null>(null);\n\n\t/** Whether files can be dropped onto the field. */\n\treadonly dragDrop = input(true, { transform: booleanAttribute });\n\n\t/** Whether files can be pasted into the focused field (e.g. a screenshot). */\n\treadonly paste = input(true, { transform: booleanAttribute });\n\n\t/** How the held files are rendered: not at all, as a list, or as a thumbnail grid. */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/** Whether the same file can be selected twice (keyed on name, size and last-modified date). */\n\treadonly allowDuplicates = input(false, { transform: booleanAttribute });\n\n\t/** Opens the device camera instead of the file browser, on the platforms that support it. */\n\treadonly capture = input<'user' | 'environment' | null>(null);\n\n\t/** Whether a newly accepted file starts uploading immediately. Ignored with no uploader registered. */\n\treadonly autoUpload = input(true, { transform: booleanAttribute });\n\n\t/** Overrides the \"browse\" button text coming from the global labels. */\n\treadonly buttonLabel = input<string | null>(null);\n\n\t/** Overrides the dropzone invitation coming from the global labels. */\n\treadonly dropText = input<string | null>(null);\n\n\t/** Overrides the second invitation line coming from the global labels. Pass `''` to hide it. */\n\treadonly dropSubtext = input<string | null>(null);\n\n\t/** Overrides the auto-generated hint that summarizes the active constraints. Pass `''` to hide it. */\n\treadonly hint = input<string | null>(null);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits the native value whenever the selection changes. */\n\treadonly valueChange = output<HubFileValue>();\n\n\t/** Emits the files refused by the declared constraints, with the reason for each. */\n\treadonly rejected = output<HubFileRejection[]>();\n\n\t/** Emits the file removed from the selection. */\n\treadonly fileRemoved = output<File>();\n\n\t/** Emits the full item list whenever an upload changes status or progress. */\n\treadonly uploadStateChange = output<readonly HubFileItem[]>();\n\n\t/** The hidden native file input, kept focusable so the dropzone label activates it. */\n\tprotected readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n\t/** Projected per-file icon template. */\n\tprotected readonly iconTpt = contentChild(HubFileIconDirective);\n\n\t/** Projected per-file preview template, replacing the built-in item rendering. */\n\tprotected readonly previewTpt = contentChild(HubFilePreviewDirective);\n\n\t/** Projected notice rendered between the glyph and the invitation. */\n\tprotected readonly noticeTpt = contentChild(HubFileDropzoneNoticeDirective);\n\n\t/** Whether a drag is currently hovering the dropzone. */\n\tprotected readonly isDragging = signal(false);\n\n\t/** Latest message for the screen-reader live region. */\n\tprotected readonly announcement = signal('');\n\n\t/** The rich, per-file state of the current selection. */\n\treadonly files = this._items.asReadonly();\n\n\t/** Whether at least one file is currently uploading. Gate a submit button on this. */\n\treadonly uploading = computed<boolean>(() => this._items().some((item) => item.status === 'uploading'));\n\n\t/** Whether an uploader is registered, which is what enables progress, cancel and retry. */\n\tprotected readonly hasUploader = !!this.#uploader;\n\n\t/** The resolved, localizable labels. */\n\tprotected readonly labels = computed(() => this.#config.fileInput);\n\n\t/** Text of the browse action. */\n\tprotected readonly browseLabel = computed<string>(() => this.buttonLabel() ?? this.labels().browse);\n\n\t/** The dropzone invitation. */\n\tprotected readonly dropTextLabel = computed<string>(() => this.dropText() ?? this.labels().dropHere);\n\n\t/** The second invitation line. Empty renders nothing. */\n\tprotected readonly dropSubtextLabel = computed<string>(() => this.dropSubtext() ?? this.labels().dropSubtext);\n\n\t/** The hint summarizing the active constraints. */\n\tprotected readonly constraintsHint = computed<string>(() => {\n\t\tconst override = this.hint();\n\n\t\tif (override != null) {\n\t\t\treturn override;\n\t\t}\n\n\t\tconst accept = this.accept();\n\n\t\treturn this.labels().constraints({\n\t\t\taccept: !accept || accept === '*' || accept === '*/*' ? null : accept,\n\t\t\tmaxSize: this.maxSize(),\n\t\t\tmaxFiles: this.multiple() ? this.maxFiles() : null\n\t\t});\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && !this.disabled());\n\n\t/**\n\t * Derives the native validation errors from the held files rather than from the DOM.\n\t *\n\t * The hidden native input is emptied after every `change` so the same file can be picked twice,\n\t * and it never sees a dropped or pasted file at all. Its `validity` therefore reports\n\t * `valueMissing` even when files are held — reading it would mark a satisfied field as required.\n\t *\n\t * @param _target - Ignored; the file state is the source of truth.\n\t */\n\tprotected override updateNativeErrors(_target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._nativeErrors.set(this.required() && this._items().length === 0 ? { required: true } : null);\n\t}\n\n\t/**\n\t * Resolves a human-readable message for a failed upload.\n\t *\n\t * @param item - The item in the `error` state.\n\t * @returns The error message.\n\t */\n\tprotected errorText(item: HubFileItem): string {\n\t\tconst error = item.error as { message?: string } | null;\n\n\t\treturn error?.message ?? String(error ?? '');\n\t}\n\n\twriteValue(value: HubFileValue | FileList): void {\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items.set(toFileArray(value).map((file) => this.#createItem(file)));\n\t}\n\n\t/** Opens the native file dialog. */\n\topen(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.nativeInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Removes a file from the selection, aborting its upload and releasing its preview.\n\t *\n\t * @param id - The id of the item to remove.\n\t */\n\tremove(id: string): void {\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!item || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#revokePreview(item);\n\t\tthis._items.update((items) => items.filter((candidate) => candidate.id !== id));\n\t\tthis.#emitValue();\n\t\tthis.fileRemoved.emit(item.file);\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\n\t}\n\n\t/** Removes every file, aborting any upload in flight. */\n\tclear(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis._items.set([]);\n\t\tthis.#emitValue();\n\t\tthis.#announce(this.labels().filesSelected(0));\n\t}\n\n\t/** Uploads every file that has not been uploaded yet. No-op without a registered uploader. */\n\tupload(): void {\n\t\tthis._items()\n\t\t\t.filter((item) => item.status === 'ready' || item.status === 'error')\n\t\t\t.forEach((item) => this.#startUpload(item.id));\n\t}\n\n\t/**\n\t * Aborts an in-flight upload, returning the file to the `ready` state.\n\t *\n\t * @param id - The id of the uploading item.\n\t */\n\tcancel(id: string): void {\n\t\tif (!this.#subscriptions.has(id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'ready', progress: null, error: null, response: null });\n\t}\n\n\t/**\n\t * Re-runs the upload of a file, typically after a failure.\n\t *\n\t * @param id - The id of the item to upload again.\n\t */\n\tretry(id: string): void {\n\t\tthis.#startUpload(id);\n\t}\n\n\t/**\n\t * Reads the files chosen through the native dialog.\n\t *\n\t * @param event - The `change` event of the hidden native input.\n\t */\n\tprotected handleNativeChange(event: Event): void {\n\t\tconst native = event.target as HTMLInputElement;\n\n\t\tthis.#addFiles(Array.from(native.files ?? []));\n\n\t\t// Without this, re-picking the very same file fires no second `change` event.\n\t\tnative.value = '';\n\t}\n\n\t/**\n\t * Accepts files dropped onto the dropzone.\n\t *\n\t * @param event - The drop event.\n\t */\n\tprotected handleDrop(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = 0;\n\t\tthis.isDragging.set(false);\n\t\tthis.#addFiles(this.#extractFiles(event.dataTransfer));\n\t\tthis.handleBlur();\n\t}\n\n\t/**\n\t * Highlights the dropzone once a drag carrying files enters it.\n\t *\n\t * @param event - The dragenter event.\n\t */\n\tprotected handleDragEnter(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth++;\n\t\tthis.isDragging.set(true);\n\t}\n\n\t/**\n\t * Keeps the drop target alive. A `dragover` that does not call `preventDefault` refuses the drop.\n\t *\n\t * @param event - The dragover event.\n\t */\n\tprotected handleDragOver(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\t}\n\t}\n\n\t/**\n\t * Un-highlights the dropzone, but only once the drag has left it *and* all of its children.\n\t *\n\t * @param event - The dragleave event.\n\t */\n\tprotected handleDragLeave(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = Math.max(0, this.#dragDepth - 1);\n\n\t\tif (this.#dragDepth === 0) {\n\t\t\tthis.isDragging.set(false);\n\t\t}\n\t}\n\n\t/**\n\t * Accepts files pasted into the focused field, e.g. a screenshot from the clipboard.\n\t *\n\t * @param event - The paste event.\n\t */\n\tprotected handlePaste(event: ClipboardEvent): void {\n\t\tif (!this.paste() || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = this.#extractFiles(event.clipboardData);\n\n\t\tif (files.length > 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.#addFiles(files);\n\t\t}\n\t}\n\n\t/**\n\t * Builds the context handed to a projected `hubFilePreview` template.\n\t *\n\t * @param item - The item being rendered.\n\t * @returns The template context, complete with the actions the item needs.\n\t */\n\tprotected previewContext(item: HubFileItem): HubFilePreviewContext {\n\t\treturn {\n\t\t\t$implicit: item,\n\t\t\tremove: () => this.remove(item.id),\n\t\t\tretry: () => this.retry(item.id),\n\t\t\tcancel: () => this.cancel(item.id)\n\t\t};\n\t}\n\n\t/**\n\t * Validates and appends the incoming files, emitting the new value and any rejections.\n\t *\n\t * In single mode the incoming file replaces the current one, so the constraint checks run against\n\t * an empty baseline rather than against the file about to be discarded.\n\t *\n\t * @param incoming - The files to add.\n\t */\n\t#addFiles(incoming: File[]): void {\n\t\tif (this.disabled() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst multiple = this.multiple();\n\t\tconst current = this._items();\n\t\tconst baseline = multiple ? current : [];\n\t\tconst accepted: HubFileItem[] = [];\n\t\tconst rejections: HubFileRejection[] = [];\n\t\tconst keys = new Set(baseline.map((item) => fileKey(item.file)));\n\n\t\tlet count = baseline.length;\n\t\tlet total = baseline.reduce((sum, item) => sum + item.file.size, 0);\n\n\t\tfor (const file of incoming) {\n\t\t\tconst rejection = this.#reject(file, count, total, keys);\n\n\t\t\tif (rejection) {\n\t\t\t\trejections.push(rejection);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys.add(fileKey(file));\n\t\t\tcount++;\n\t\t\ttotal += file.size;\n\t\t\taccepted.push(this.#createItem(file));\n\t\t}\n\n\t\tif (accepted.length > 0) {\n\t\t\tif (!multiple) {\n\t\t\t\tcurrent.forEach((item) => this.#abort(item.id));\n\t\t\t\tcurrent.forEach((item) => this.#revokePreview(item));\n\t\t\t}\n\n\t\t\tthis._items.set([...baseline, ...accepted]);\n\t\t\tthis.#emitValue();\n\n\t\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\t\taccepted.forEach((item) => this.#startUpload(item.id));\n\t\t\t}\n\t\t}\n\n\t\tif (rejections.length > 0) {\n\t\t\tthis.rejected.emit(rejections);\n\t\t}\n\n\t\tthis.#announce(this.#summarize(accepted.length, rejections));\n\t}\n\n\t/**\n\t * Applies the declared constraints to a single candidate file.\n\t *\n\t * @param file - The candidate.\n\t * @param count - How many files are already accepted.\n\t * @param total - The combined size of the already-accepted files.\n\t * @param keys - Identity keys of the already-accepted files, for duplicate detection.\n\t * @returns The rejection, or `null` when the file passes every constraint.\n\t */\n\t#reject(file: File, count: number, total: number, keys: Set<string>): HubFileRejection | null {\n\t\tconst build = (reason: HubFileRejectionReason, limit: string | number | null): HubFileRejection => ({\n\t\t\tfile,\n\t\t\treason,\n\t\t\tlimit\n\t\t});\n\n\t\tif (!this.allowDuplicates() && keys.has(fileKey(file))) {\n\t\t\treturn build('duplicate', null);\n\t\t}\n\n\t\tif (!matchesAccept(file, this.accept())) {\n\t\t\treturn build('accept', this.accept());\n\t\t}\n\n\t\tconst minSize = this.minSize();\n\n\t\tif (minSize != null && file.size < minSize) {\n\t\t\treturn build('minSize', minSize);\n\t\t}\n\n\t\tconst maxSize = this.maxSize();\n\n\t\tif (maxSize != null && file.size > maxSize) {\n\t\t\treturn build('maxSize', maxSize);\n\t\t}\n\n\t\tconst maxFiles = this.multiple() ? this.maxFiles() : 1;\n\n\t\tif (maxFiles != null && count + 1 > maxFiles) {\n\t\t\treturn build('maxFiles', maxFiles);\n\t\t}\n\n\t\tconst maxTotalSize = this.maxTotalSize();\n\n\t\tif (maxTotalSize != null && total + file.size > maxTotalSize) {\n\t\t\treturn build('maxTotalSize', maxTotalSize);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is a previewable image.\n\t *\n\t * @param file - The accepted file.\n\t * @returns The new item, in the `ready` state.\n\t */\n\t#createItem(file: File): HubFileItem {\n\t\tconst previewable = this.#isBrowser && this.preview() !== 'none' && file.type.startsWith('image/');\n\n\t\treturn {\n\t\t\tid: uuid(),\n\t\t\tfile,\n\t\t\tpreviewUrl: previewable ? URL.createObjectURL(file) : null,\n\t\t\tstatus: 'ready',\n\t\t\tprogress: null,\n\t\t\terror: null,\n\t\t\tresponse: null\n\t\t};\n\t}\n\n\t/**\n\t * Releases the object URL of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose preview should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (item.previewUrl && this.#isBrowser) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\t}\n\n\t/** Writes the native value to the form control and emits it. */\n\t#emitValue(): void {\n\t\tconst files = this._items().map((item) => item.file);\n\t\tconst value: HubFileValue = this.multiple() ? files : (files[0] ?? null);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Subscribes to the registered uploader for one item, mapping its events onto the item's status.\n\t *\n\t * @param id - The id of the item to upload.\n\t */\n\t#startUpload(id: string): void {\n\t\tconst uploader = this.#uploader;\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!uploader || !item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'uploading', progress: null, error: null, response: null });\n\n\t\tconst subscription = uploader.upload(item.file, { id }).subscribe({\n\t\t\tnext: (event) => {\n\t\t\t\tif (event.status === 'progress') {\n\t\t\t\t\t// A transport that cannot report a total leaves `progress` null, which the template\n\t\t\t\t\t// renders as an indeterminate bar rather than a bar frozen at 0%.\n\t\t\t\t\tconst progress = event.total ? Math.round((event.loaded / event.total) * 100) : null;\n\t\t\t\t\tthis.#patch(id, { status: 'uploading', progress });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.status === 'done') {\n\t\t\t\t\t// The body is what identifies the stored file server-side; without keeping it the\n\t\t\t\t\t// application has no way to reference what it just uploaded.\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null, response: event.response ?? null });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.#patch(id, { status: 'error', error: event.error });\n\t\t\t},\n\t\t\terror: (error: unknown) => this.#patch(id, { status: 'error', error }),\n\t\t\tcomplete: () => {\n\t\t\t\t// An uploader that completes without emitting `done` still finished successfully.\n\t\t\t\tconst current = this._items().find((candidate) => candidate.id === id);\n\n\t\t\t\tif (current?.status === 'uploading') {\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.#subscriptions.set(id, subscription);\n\t}\n\n\t/**\n\t * Unsubscribes from an item's upload, which aborts the underlying request.\n\t *\n\t * @param id - The id of the item.\n\t */\n\t#abort(id: string): void {\n\t\tthis.#subscriptions.get(id)?.unsubscribe();\n\t\tthis.#subscriptions.delete(id);\n\t}\n\n\t/**\n\t * Immutably updates one item and notifies listeners of the new upload state.\n\t *\n\t * @param id - The id of the item to update.\n\t * @param patch - The fields to overwrite.\n\t */\n\t#patch(\n\t\tid: string,\n\t\tpatch: Partial<Pick<HubFileItem, 'status' | 'progress' | 'error' | 'response'>> & { status: HubFileStatus }\n\t): void {\n\t\tlet changed = false;\n\n\t\tthis._items.update((items) =>\n\t\t\titems.map((item) => {\n\t\t\t\tif (item.id !== id) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\n\t\t\t\tchanged = true;\n\t\t\t\treturn { ...item, ...patch };\n\t\t\t})\n\t\t);\n\n\t\tif (changed) {\n\t\t\tthis.uploadStateChange.emit(this._items());\n\t\t}\n\t}\n\n\t/**\n\t * Extracts the files carried by a drop or a paste.\n\t *\n\t * Reads `items` when present so non-file payloads (dragged text, HTML) are skipped, and falls\n\t * back to `files` otherwise.\n\t *\n\t * @param transfer - The `DataTransfer` of the event.\n\t * @returns The files it carries.\n\t */\n\t#extractFiles(transfer: DataTransfer | null): File[] {\n\t\tif (!transfer) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (transfer.items?.length) {\n\t\t\treturn Array.from(transfer.items)\n\t\t\t\t.filter((item) => item.kind === 'file')\n\t\t\t\t.map((item) => item.getAsFile())\n\t\t\t\t.filter((file): file is File => file !== null);\n\t\t}\n\n\t\treturn Array.from(transfer.files ?? []);\n\t}\n\n\t/**\n\t * Whether a drag event carries files, as opposed to text or a page element.\n\t *\n\t * @param event - The drag event.\n\t * @returns `true` when the payload includes files.\n\t */\n\t#carriesFiles(event: DragEvent): boolean {\n\t\treturn Array.from(event.dataTransfer?.types ?? []).includes('Files');\n\t}\n\n\t/**\n\t * Builds the live-region message describing the outcome of an add.\n\t *\n\t * @param acceptedCount - How many files were accepted.\n\t * @param rejections - The files that were refused.\n\t * @returns The message to announce.\n\t */\n\t#summarize(acceptedCount: number, rejections: HubFileRejection[]): string {\n\t\tconst labels = this.labels();\n\t\tconst parts: string[] = [];\n\n\t\tif (acceptedCount > 0) {\n\t\t\tparts.push(labels.filesSelected(this._items().length));\n\t\t}\n\n\t\trejections.forEach((rejection) => parts.push(labels.rejection(rejection)));\n\n\t\treturn parts.join(' ');\n\t}\n\n\t/**\n\t * Publishes a message to the live region, forcing a re-announcement of identical text.\n\t *\n\t * @param message - The message to announce.\n\t */\n\t#announce(message: string): void {\n\t\tif (!message) {\n\t\t\treturn;\n\t\t}\n\n\t\t// A screen reader ignores a live region whose text did not change; the zero-width space makes\n\t\t// two consecutive identical messages differ.\n\t\tthis.announcement.set(this.announcement() === message ? `${message}​` : message);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-file-input\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<!--\n\t\t\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with\n\t\t\tthe keyboard opens the file dialog through the platform, so no role, tabindex or key\n\t\t\thandler is needed. The \"browse\" affordance is a <span>, not a <button>, because a button\n\t\t\tinside a label would open the dialog twice.\n\t\t-->\n\t\t<label\n\t\t\tclass=\"hub-file-input__dropzone\"\n\t\t\t[for]=\"id\"\n\t\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t\t(dragenter)=\"handleDragEnter($event)\"\n\t\t\t(dragover)=\"handleDragOver($event)\"\n\t\t\t(dragleave)=\"handleDragLeave($event)\"\n\t\t\t(drop)=\"handleDrop($event)\"\n\t\t>\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hub-file-input__native\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[attr.capture]=\"capture()\"\n\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t[attr.aria-describedby]=\"constraintsHint() ? id + '-hint' : null\"\n\t\t\t\t(change)=\"handleNativeChange($event)\"\n\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t\t@if (noticeTpt(); as notice) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"notice.template\"></ng-container>\n\t\t\t}\n\n\t\t\t<span class=\"hub-file-input__prompt\">\n\t\t\t\t@if (dragDrop()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-text\">{{ dropTextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t@if (dropSubtextLabel()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-subtext\">{{ dropSubtextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t\t</span>\n\n\t\t\t@if (constraintsHint()) {\n\t\t\t\t<span class=\"hub-file-input__hint\" [id]=\"id + '-hint'\">{{ constraintsHint() }}</span>\n\t\t\t}\n\t\t</label>\n\n\t\t@if (preview() !== 'none' && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"preview() === 'grid'\">\n\t\t\t\t@for (item of _items(); track item.id) {\n\t\t\t\t\t<li class=\"hub-file-input__item\" [attr.data-status]=\"item.status\">\n\t\t\t\t\t\t@if (previewTpt(); as tpt) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"previewContext(item)\"\n\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<span class=\"hub-file-input__thumb\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t@if (item.previewUrl) {\n\t\t\t\t\t\t\t\t\t<img class=\"hub-file-input__image\" [src]=\"item.previewUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t} @else if (iconTpt(); as icon) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"icon.template\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__file-icon\"></span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__meta\">\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__name\" [title]=\"item.file.name\">{{ item.file.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__size\">{{ labels().formatSize(item.file.size) }}</span>\n\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"item.progress === null\"\n\t\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"item.progress\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress-bar\"\n\t\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"item.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__error\">{{ errorText(item) }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__actions\">\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--cancel\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().cancel\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"cancel(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--retry\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().retry\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"retry(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (!disabled() && item.status !== 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--remove\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().remove\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"remove(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\n\t\t\t@if (_items().length > 1 && !disabled()) {\n\t\t\t\t<button type=\"button\" class=\"hub-file-input__clear\" (click)=\"clear()\">{{ labels().clear }}</button>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n\n\t<span class=\"hub-file-input__live\" aria-live=\"polite\">{{ announcement() }}</span>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Inverts a HEX color, or returns the best contrasting black/white when `bw` is enabled.\n */\n@Pipe({\n\tname: 'hubInvertColor'\n})\nexport class HubInvertColorPipe implements PipeTransform {\n\t/**\n\t * @param hex - HEX color (`#rgb` or `#rrggbb`).\n\t * @param bw - When `true`, returns `#000000` or `#FFFFFF` for maximum contrast.\n\t * @returns The inverted (or contrasting) HEX color.\n\t */\n\ttransform(hex: string, bw: boolean = false): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// Convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\n\t\t// Invert color components.\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\n\t\t// Pad each with zeros and return.\n\t\treturn '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { joinButLast } from '../utils/utils';\n\n/**\n * Joins an array using a separator for all but the last element, which uses a dedicated glue.\n */\n@Pipe({\n\tname: 'hubJoinButLast'\n})\nexport class HubJoinButLastPipe implements PipeTransform {\n\t/**\n\t * @param values - Values to join.\n\t * @param glue - Separator between all but the last element.\n\t * @param lastGlue - Separator before the last element.\n\t * @returns The joined string.\n\t */\n\ttransform(values: any[], glue?: string, lastGlue?: string): string {\n\t\treturn joinButLast(values, glue, lastGlue);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { get } from '../utils/utils';\n\n/**\n * Maps an array of objects to an array of values read from a dot-separated path.\n */\n@Pipe({\n\tname: 'hubMap'\n})\nexport class HubMapPipe implements PipeTransform {\n\t/**\n\t * @param value - Array of objects.\n\t * @param path - Dot-separated path read from each item.\n\t * @returns The array of resolved values.\n\t */\n\ttransform(value: any[], path: string): any[] {\n\t\treturn value.map((item) => get(item, path));\n\t}\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Marks a URL as a trusted resource URL via the `DomSanitizer`.\n */\n@Pipe({\n\tname: 'hubSafeUrl'\n})\nexport class HubSafeUrlPipe implements PipeTransform {\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\n\t/**\n\t * @param value - The raw URL.\n\t * @returns A `SafeUrl` trusted as a resource URL.\n\t */\n\ttransform(value: string): SafeUrl {\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { camelToSnakeUpper } from '../utils/utils';\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n */\n@Pipe({\n\tname: 'hubSnakeUpper'\n})\nexport class HubSnakeUpperPipe implements PipeTransform {\n\t/**\n\t * @param value - camelCase identifier.\n\t * @returns The UPPER_SNAKE_CASE representation.\n\t */\n\ttransform(value: string): unknown {\n\t\treturn camelToSnakeUpper(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/** Matches a single letter, including accented and special Latin characters. */\nconst LETTERS_REGEXP = /^[a-zA-ZáéíóúüñçÁÉÍÓÚÜÑÇ]$/;\n\n/**\n * Capitalizes the first letter of a string, skipping leading non-letter characters.\n */\n@Pipe({\n\tname: 'hubUcfirst'\n})\nexport class HubUcfirstPipe implements PipeTransform {\n\t/**\n\t * @param value - Input string.\n\t * @returns The string with its first letter uppercased.\n\t */\n\ttransform(value: string = ''): string {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst stringArray = value.split('');\n\n\t\tfor (let i = 0; i < stringArray.length; i++) {\n\t\t\tif (LETTERS_REGEXP.test(stringArray[i])) {\n\t\t\t\tstringArray[i] = stringArray[i].toUpperCase();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn stringArray.join('');\n\t}\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { areEqual } from '../utils/utils';\n\n/**\n * Cross-field validator that checks whether two controls of a `FormGroup` hold equal values.\n *\n * Sets the `equal` error on the group when the values differ. Returns `null` (valid) when either\n * control is empty, so the requirement is only enforced once both have a value.\n *\n * @param primaryControlName - Name of the first control.\n * @param secondaryControlName - Name of the second control.\n * @returns A validator function for use on a `FormGroup`.\n *\n * @example\n * ```ts\n * new FormGroup({\n * password: new FormControl(''),\n * confirm: new FormControl('')\n * }, { validators: hubAreEqual('password', 'confirm') });\n * ```\n */\nexport function hubAreEqual(primaryControlName: string, secondaryControlName: string): ValidatorFn {\n\treturn (group: AbstractControl): ValidationErrors | null => {\n\t\tconst primaryControl = group.get(primaryControlName);\n\t\tconst secondaryControl = group.get(secondaryControlName);\n\n\t\tif (!primaryControl?.value || !secondaryControl?.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!areEqual(primaryControl.value, secondaryControl.value)) {\n\t\t\treturn { equal: true };\n\t\t}\n\n\t\treturn null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { matchesAccept } from '../utils/file-accept';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that every file held by the control matches an `accept` specification.\n *\n * Complements the `accept` input of `<hub-file-input>`, which *filters* offending files before they\n * reach the value. This validator instead makes the control **invalid**, which is what you want when\n * files can also arrive from outside the component (patched value, restored draft, another control).\n *\n * Sets the `fileAccept` error with `{ accept, files }`, where `files` lists the offending names.\n * An empty control is valid — pair it with `Validators.required` to demand a file.\n *\n * @param accept - The accept specification, e.g. `'image/*,.pdf'`.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubAcceptedFiles('image/*,.pdf')]);\n * ```\n */\nexport function hubAcceptedFiles(accept: string): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => !matchesAccept(file, accept));\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { fileAccept: { accept, files: offending.map((file) => file.name) } };\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control exceeds a maximum size.\n *\n * Sets the `fileMaxSize` error with `{ max, actual, files }`, where `actual` is the size of the\n * largest offending file and `files` lists the offending names. An empty control is valid.\n *\n * @param maxBytes - The maximum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMaxFileSize(5 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxFileSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size > maxBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMaxSize: {\n\t\t\t\tmax: maxBytes,\n\t\t\t\tactual: Math.max(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control falls below a minimum size.\n *\n * Useful to reject empty or truncated uploads (a 0-byte file is a common symptom of a failed export).\n * Sets the `fileMinSize` error with `{ min, actual, files }`, where `actual` is the size of the\n * smallest offending file. An empty control is valid.\n *\n * @param minBytes - The minimum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMinFileSize(1)]);\n * ```\n */\nexport function hubMinFileSize(minBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size < minBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMinSize: {\n\t\t\t\tmin: minBytes,\n\t\t\t\tactual: Math.min(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the combined size of every file held by the control stays within a budget.\n *\n * This is the constraint a request-body limit actually enforces, and it is not implied by a\n * per-file maximum: ten files of 2 MB pass `hubMaxFileSize(5 MB)` and still blow a 10 MB request.\n *\n * Sets the `fileMaxTotalSize` error with `{ max, actual }`. An empty control is valid.\n *\n * @param maxBytes - The maximum combined size, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxTotalSize(20 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxTotalSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst files = toFileArray(control.value);\n\n\t\tif (files.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst total = files.reduce((sum, file) => sum + file.size, 0);\n\n\t\treturn total > maxBytes ? { fileMaxTotalSize: { max: maxBytes, actual: total } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at most `max` files.\n *\n * Sets the `fileMaxFiles` error with `{ max, actual }`. An empty control is valid.\n *\n * @param max - The maximum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxFiles(3)]);\n * ```\n */\nexport function hubMaxFiles(max: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count > max ? { fileMaxFiles: { max, actual: count } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at least `min` files.\n *\n * Unlike the other file validators, this one **does** reject an empty control: holding zero files\n * is precisely what a minimum forbids. It therefore subsumes `Validators.required`, and adding both\n * only produces two errors for the same cause.\n *\n * Sets the `fileMinFiles` error with `{ min, actual }`.\n *\n * @param min - The minimum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMinFiles(2)]);\n * ```\n */\nexport function hubMinFiles(min: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count < min ? { fileMinFiles: { min, actual: count } } : null;\n\t};\n}\n","import { ViewContainerRef } from '@angular/core';\nimport { HubInputComponent } from '../components/input/input.component';\nimport { HubSelectComponent } from '../select/select.component';\n\n/** A `{ value, label }` option for select-kind controls. */\nexport interface HubFormControlOption {\n\tvalue: unknown;\n\tlabel: string;\n}\n\n/**\n * Framework-neutral description of a primitive control to render dynamically.\n *\n * The shape mirrors (structurally) the contract other ng-hub-ui libraries expose\n * for optional control hosting (e.g. `ng-hub-ui-paginable`'s table), so this\n * adapter can be wired into them without either package importing the other.\n */\nexport interface HubFormControlConfig {\n\tkind: 'input' | 'select';\n\tvalue: unknown;\n\ttype?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n\tcssClass?: string;\n\toptions?: ReadonlyArray<HubFormControlOption>;\n\tonValueChange: (value: unknown) => void;\n}\n\n/** Live handle to a control created by {@link hubFormControlAdapter}. */\nexport interface HubFormControlHandle {\n\t/** Pushes a new value into the control (external updates). */\n\tsetValue(value: unknown): void;\n\t/** Destroys the control and releases its resources. */\n\tdestroy(): void;\n}\n\n/** Adapter that renders primitive controls with the ng-hub-ui-forms components. */\nexport interface HubFormControlAdapter {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle;\n}\n\n/**\n * Ready-made {@link HubFormControlAdapter} backed by `HubInputComponent` /\n * `HubSelectComponent`.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional form-controls\n * token, e.g. `provideHubPaginableFormControls(hubFormControlAdapter)`. The host\n * library keeps **zero hard dependency** on `ng-hub-ui-forms`; only an app that\n * opts in pulls these components.\n *\n * Requires `provideHubForms()` (or the default config) to be available in the\n * environment so the field components can resolve their configuration.\n */\nexport const hubFormControlAdapter: HubFormControlAdapter = {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle {\n\t\tif (config.kind === 'select') {\n\t\t\tconst ref = container.createComponent(HubSelectComponent);\n\t\t\tref.setInput(\n\t\t\t\t'items',\n\t\t\t\t(config.options ?? []).map((option) => ({ ...option }))\n\t\t\t);\n\t\t\tref.setInput('bindLabel', 'label');\n\t\t\tref.setInput('bindValue', 'value');\n\t\t\tref.setInput('clearable', false);\n\t\t\tref.setInput('searchable', false);\n\t\t\tif (config.placeholder) {\n\t\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t\t}\n\t\t\tif (config.cssClass) {\n\t\t\t\tref.setInput('classlist', config.cssClass);\n\t\t\t}\n\t\t\tref.instance.writeValue(config.value);\n\t\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\t\tref.changeDetectorRef.detectChanges();\n\n\t\t\treturn {\n\t\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\t\tdestroy: () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tref.destroy();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst ref = container.createComponent(HubInputComponent);\n\t\tref.setInput('type', config.type ?? 'text');\n\t\tif (config.placeholder) {\n\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t}\n\t\tif (config.cssClass) {\n\t\t\tref.setInput('classlist', config.cssClass);\n\t\t}\n\t\tref.instance.writeValue(config.value as never);\n\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\tref.changeDetectorRef.detectChanges();\n\n\t\treturn {\n\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\tdestroy: () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t};\n\t}\n};\n","/*\n * Public API Surface of ng-hub-ui-forms\n */\n\n// Shared base\nexport { HubFormControl } from './lib/shared/hub-form-control';\nexport { HubFieldControl } from './lib/shared/hub-field-control';\nexport { HubGroupControl } from './lib/shared/hub-group-control';\nexport type { HubGroupErrorTrigger } from './lib/shared/hub-group-control';\nexport { defaultInvalidFeedback } from './lib/shared/hub-error-display';\n\n// Configuration\nexport { HUB_FORMS_CONFIG, defaultHubFormsConfig, provideHubForms } from './lib/services/forms-config';\nexport type { HubFormsConfig } from './lib/services/forms-config';\nexport { HUB_FILE_UPLOADER, provideHubFileUploader } from './lib/services/file-uploader';\n\n// Components\nexport { HubInputComponent } from './lib/components/input/input.component';\nexport { HubOtpInputComponent } from './lib/components/otp/otp.component';\nexport type { HubOtpMode } from './lib/components/otp/otp.component';\nexport { HubTextareaComponent } from './lib/components/textarea/textarea.component';\nexport { HubSliderComponent } from './lib/components/slider/slider.component';\nexport type { HubSliderValue } from './lib/components/slider/slider.component';\nexport { HubSegmentedComponent } from './lib/components/segmented/segmented.component';\nexport type { HubSegmentedOption, HubSegmentedSize } from './lib/components/segmented/segmented.component';\nexport { HubFieldsetComponent } from './lib/components/fieldset/fieldset.component';\nexport { HubFormComponent } from './lib/components/form/form.component';\nexport { HubLegendComponent } from './lib/components/legend/legend.component';\nexport { HubSelectComponent } from './lib/select/select.component';\nexport { HubDatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport { HubTimepickerComponent } from './lib/components/timepicker/timepicker.component';\nexport { HubFileInputComponent } from './lib/components/file-input/file-input.component';\n\n// Select — dropdown customization passthrough (vendored ng-select template directives)\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\nexport {\n\tNgOptionTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgClearButtonTemplateDirective\n} from './lib/select/vendor/lib/ng-templates.directive';\n\n// Directives\nexport { HubFormTextDirective } from './lib/directives/form-text.directive';\nexport { HubValidationErrorDirective } from './lib/directives/validation-error.directive';\nexport { HubLegendDirective } from './lib/directives/legend.directive';\nexport { HubAutoresizeDirective } from './lib/directives/autoresize.directive';\nexport { HubInputPrefixDirective } from './lib/directives/input-prefix.directive';\nexport { HubInputSuffixDirective } from './lib/directives/input-suffix.directive';\nexport { HubPrependDirective } from './lib/directives/prepend.directive';\nexport { HubAppendDirective } from './lib/directives/append.directive';\nexport { HubSelectSuffixDirective } from './lib/directives/select-suffix.directive';\nexport { HubFileIconDirective } from './lib/directives/file-icon.directive';\nexport type { HubFileIconContext } from './lib/directives/file-icon.directive';\nexport { HubFilePreviewDirective } from './lib/directives/file-preview.directive';\nexport type { HubFilePreviewContext } from './lib/directives/file-preview.directive';\nexport { HubSegmentedOptionDirective } from './lib/directives/segmented-option.directive';\nexport type { HubSegmentedOptionContext } from './lib/directives/segmented-option.directive';\nexport { HubFileDropzoneNoticeDirective } from './lib/directives/file-dropzone-notice.directive';\n\n// Pipes\nexport { HubInvertColorPipe } from './lib/pipes/invert-color.pipe';\nexport { HubJoinButLastPipe } from './lib/pipes/join-but-last.pipe';\nexport { HubMapPipe } from './lib/pipes/map.pipe';\nexport { HubSafeUrlPipe } from './lib/pipes/safe-url.pipe';\nexport { HubSnakeUpperPipe } from './lib/pipes/snake-upper.pipe';\nexport { HubUcfirstPipe } from './lib/pipes/ucfirst.pipe';\n\n// Validators\nexport { hubAreEqual } from './lib/validators/are-equal.validator';\nexport { hubAcceptedFiles } from './lib/validators/accepted-files.validator';\nexport { hubMaxFileSize } from './lib/validators/max-file-size.validator';\nexport { hubMinFileSize } from './lib/validators/min-file-size.validator';\nexport { hubMaxTotalSize } from './lib/validators/max-total-size.validator';\nexport { hubMaxFiles } from './lib/validators/max-files.validator';\nexport { hubMinFiles } from './lib/validators/min-files.validator';\n\n// Interfaces & types\nexport type { FormTextType, HubLabelType } from './lib/interfaces/common.interface';\nexport { FormTextTypes, HubLabelTypes } from './lib/interfaces/common.interface';\nexport type { HubInputFormat, HubPasswordLabels, HubPasswordStrengthScore } from './lib/interfaces/input.interface';\nexport { HubInputFormats, defaultHubPasswordLabels } from './lib/interfaces/input.interface';\nexport type { HubSelectFormat } from './lib/interfaces/select.interface';\nexport { HubSelectFormats } from './lib/interfaces/select.interface';\nexport type {\n\tHubDatepickerMode,\n\tHubDatepickerGranularity,\n\tHubDatepickerValueFormat,\n\tHubDateRange,\n\tHubDateValue,\n\tHubDatepickerLabels,\n\tHubDatepickerConfig\n} from './lib/interfaces/datepicker.interface';\nexport { defaultHubDatepickerConfig, defaultHubDatepickerLabels } from './lib/interfaces/datepicker.interface';\nexport type {\n\tHubFileConstraints,\n\tHubFileInputLabels,\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from './lib/interfaces/file-input.interface';\nexport { defaultHubFileInputLabels } from './lib/interfaces/file-input.interface';\nexport type { HubFileUploader, HubFileUploadEvent } from './lib/interfaces/file-uploader.interface';\n\n// Utilities\nexport { formatFileSize } from './lib/utils/file-size';\nexport { matchesAccept } from './lib/utils/file-accept';\nexport { fileKey } from './lib/utils/file-key';\nexport { toFileArray } from './lib/utils/file-value';\nexport type { HubFileValue } from './lib/utils/file-value';\nexport {\n\tareEqual,\n\tcamelToSnakeUpper,\n\tcontrolHasMinOrMaxValidator,\n\tget,\n\tgetActiveElement,\n\tgetMinOrMaxValueFromValidator,\n\tisDefined,\n\tisString,\n\tjoinButLast,\n\trunInZone,\n\tuuid\n} from './lib/utils/utils';\nexport { applyMask, isMaskActive } from './lib/utils/mask';\nexport type { HubMaskResult } from './lib/utils/mask';\nexport { scorePasswordStrength } from './lib/utils/password-strength';\n\n// Integrations — agnostic adapter for hosting form controls in other libraries\nexport { hubFormControlAdapter } from './lib/integrations/form-control-adapter';\nexport type {\n\tHubFormControlAdapter,\n\tHubFormControlConfig,\n\tHubFormControlHandle,\n\tHubFormControlOption\n} from './lib/integrations/form-control-adapter';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isDefined","searchHelper.stripSpecialChars","tap","i1"],"mappings":"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G;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAA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"}
1
+ {"version":3,"file":"ng-hub-ui-forms.mjs","sources":["../../../projects/forms/src/lib/utils/utils.ts","../../../projects/forms/src/lib/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/directives/validation-error.directive.ts","../../../projects/forms/src/lib/interfaces/datepicker.interface.ts","../../../projects/forms/src/lib/utils/file-size.ts","../../../projects/forms/src/lib/interfaces/file-input.interface.ts","../../../projects/forms/src/lib/interfaces/input.interface.ts","../../../projects/forms/src/lib/shared/hub-error-display.ts","../../../projects/forms/src/lib/services/forms-config.ts","../../../projects/forms/src/lib/shared/hub-field-control.ts","../../../projects/forms/src/lib/shared/hub-group-control.ts","../../../projects/forms/src/lib/services/file-uploader.ts","../../../projects/forms/src/lib/interfaces/common.interface.ts","../../../projects/forms/src/lib/directives/input-prefix.directive.ts","../../../projects/forms/src/lib/directives/input-suffix.directive.ts","../../../projects/forms/src/lib/directives/append.directive.ts","../../../projects/forms/src/lib/directives/prepend.directive.ts","../../../projects/forms/src/lib/utils/mask.ts","../../../projects/forms/src/lib/utils/password-strength.ts","../../../projects/forms/src/lib/components/input/input.component.ts","../../../projects/forms/src/lib/components/input/input.component.html","../../../projects/forms/src/lib/components/otp/otp.component.ts","../../../projects/forms/src/lib/directives/autoresize.directive.ts","../../../projects/forms/src/lib/components/textarea/textarea.component.ts","../../../projects/forms/src/lib/components/textarea/textarea.component.html","../../../projects/forms/src/lib/components/slider/slider.component.ts","../../../projects/forms/src/lib/components/slider/slider.component.html","../../../projects/forms/src/lib/directives/segmented-option.directive.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.html","../../../projects/forms/src/lib/directives/legend.directive.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.html","../../../projects/forms/src/lib/components/form/form.component.ts","../../../projects/forms/src/lib/components/form/form.component.html","../../../projects/forms/src/lib/components/legend/legend.component.ts","../../../projects/forms/src/lib/interfaces/select.interface.ts","../../../projects/forms/src/lib/directives/select-suffix.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/value-utils.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-templates.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/config.service.ts","../../../projects/forms/src/lib/select/vendor/lib/console.service.ts","../../../projects/forms/src/lib/select/vendor/lib/id.ts","../../../projects/forms/src/lib/select/vendor/lib/search-helper.ts","../../../projects/forms/src/lib/select/vendor/lib/items-list.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.service.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-option.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.types.ts","../../../projects/forms/src/lib/select/vendor/lib/selection-model.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.html","../../../projects/forms/src/lib/select/select.component.ts","../../../projects/forms/src/lib/select/select.component.html","../../../projects/forms/src/lib/components/datepicker/date-utils.ts","../../../projects/forms/src/lib/components/datepicker/time-utils.ts","../../../projects/forms/src/lib/components/datepicker/period-grid.component.ts","../../../projects/forms/src/lib/components/datepicker/time-field.component.ts","../../../projects/forms/src/lib/components/datepicker/value-format.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.html","../../../projects/forms/src/lib/components/timepicker/timepicker.component.ts","../../../projects/forms/src/lib/directives/file-icon.directive.ts","../../../projects/forms/src/lib/directives/file-dropzone-notice.directive.ts","../../../projects/forms/src/lib/directives/file-preview.directive.ts","../../../projects/forms/src/lib/utils/file-accept.ts","../../../projects/forms/src/lib/utils/file-key.ts","../../../projects/forms/src/lib/utils/file-value.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.html","../../../projects/forms/src/lib/pipes/invert-color.pipe.ts","../../../projects/forms/src/lib/pipes/join-but-last.pipe.ts","../../../projects/forms/src/lib/pipes/map.pipe.ts","../../../projects/forms/src/lib/pipes/safe-url.pipe.ts","../../../projects/forms/src/lib/pipes/snake-upper.pipe.ts","../../../projects/forms/src/lib/pipes/ucfirst.pipe.ts","../../../projects/forms/src/lib/validators/are-equal.validator.ts","../../../projects/forms/src/lib/validators/accepted-files.validator.ts","../../../projects/forms/src/lib/validators/max-file-size.validator.ts","../../../projects/forms/src/lib/validators/min-file-size.validator.ts","../../../projects/forms/src/lib/validators/max-total-size.validator.ts","../../../projects/forms/src/lib/validators/max-files.validator.ts","../../../projects/forms/src/lib/validators/min-files.validator.ts","../../../projects/forms/src/lib/integrations/form-control-adapter.ts","../../../projects/forms/src/public-api.ts","../../../projects/forms/src/ng-hub-ui-forms.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { AbstractControl, FormControl } from '@angular/forms';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Checks if a value is a string.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is a string.\n */\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a value is defined and not null.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is neither `undefined` nor `null`.\n */\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Operator that runs the source observable within a specified Angular zone.\n *\n * @param zone - The `NgZone` instance used to run emissions.\n * @returns An `OperatorFunction` that re-enters the given zone for every notification.\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst onNext = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst onError = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst onComplete = () => zone.run(() => observer.complete());\n\n\t\t\treturn source.subscribe(onNext, onError, onComplete);\n\t\t});\n\t};\n}\n\n/**\n * Joins an array of strings using a separator for all but the last element, which uses `lastSeparator`.\n *\n * @param texts - Strings to join.\n * @param separator - Separator used between all but the last element. Defaults to `', '`.\n * @param lastSeparator - Separator used before the last element. Defaults to `' and '`.\n * @returns The joined string.\n */\nexport function joinButLast(texts: string[], separator = ', ', lastSeparator = ' and '): string {\n\tif (texts.length < 2) {\n\t\treturn texts.join();\n\t}\n\n\treturn `${texts.slice(0, texts.length - 1).join(separator)} ${lastSeparator} ${texts[texts.length - 1]}`;\n}\n\n/**\n * Checks if two values are equal, taking different types into account.\n *\n * Primitives are compared with strict equality; everything else is compared by JSON serialization.\n *\n * @param first - First value.\n * @param second - Second value.\n * @returns `true` when both values are considered equal.\n */\nexport function areEqual(first: any, second: any): boolean {\n\tconst primitives = ['string', 'number', 'boolean'];\n\n\tif (!primitives.includes(typeof first) || !primitives.includes(typeof second)) {\n\t\treturn JSON.stringify(first) === JSON.stringify(second);\n\t} else {\n\t\treturn first === second;\n\t}\n}\n\n/**\n * Checks whether a control declares a `min` or `max` validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns `true` when the validator is present.\n */\nexport function controlHasMinOrMaxValidator(control: AbstractControl, type: 'min' | 'max'): boolean {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn false;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors;\n}\n\n/**\n * Reads the configured `min`/`max` value from a control's validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns The configured bound, or `null` when not present.\n */\nexport function getMinOrMaxValueFromValidator(control: AbstractControl, type: 'min' | 'max'): number | null {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn null;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors ? errors[type][type] : null;\n}\n\n/**\n * Retrieves a value from an object following a dot-separated path, with an optional fallback.\n *\n * @param object - Source object.\n * @param path - Dot-separated path (e.g. `'a.b.c'`).\n * @param fallback - Value returned when the path cannot be resolved. Defaults to `null`.\n * @returns The resolved value, or the fallback.\n */\nexport function get(object: { [key: string]: any }, path: string, fallback: any = null): any {\n\tconst dotIndex = path.indexOf('.');\n\n\tif (!isDefined(object)) {\n\t\treturn fallback || undefined;\n\t}\n\n\tif (dotIndex === -1) {\n\t\tif (path.length && path in object) {\n\t\t\treturn object[path];\n\t\t}\n\n\t\treturn fallback || undefined;\n\t}\n\n\treturn get(object[path.substring(0, dotIndex)], path.substring(dotIndex + 1), fallback);\n}\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n *\n * @param value - camelCase identifier.\n * @returns The UPPER_SNAKE_CASE representation.\n */\nexport function camelToSnakeUpper(value: string): string {\n\treturn value.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\n/**\n * Generates a UUID using `crypto.randomUUID()` when available, falling back to a timestamp-based id.\n *\n * @returns A unique string identifier.\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID();\n\t} catch (error) {\n\t\treturn (Date.now() + Math.floor(Math.random() * 10000)).toString();\n\t}\n}\n\n/**\n * Returns the active element within the given root, descending into shadow roots when needed.\n *\n * @param root - The document or shadow root to search. Defaults to `document`.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot = document): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\n","import { AfterContentInit, Directive, input, model, OnDestroy, OnInit } from '@angular/core';\nimport {\n\tControlContainer,\n\tFormControlDirective,\n\tFormControlName,\n\tFormControlStatus,\n\tNgControl,\n\tValidators\n} from '@angular/forms';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { isDefined } from '../utils/utils';\n\n/**\n * Base class for every form field in `ng-hub-ui-forms`.\n *\n * Provides the shared `ControlValueAccessor`-adjacent plumbing used by the field components:\n * reactive `required` tracking derived from the bound control's validators, programmatic\n * show/hide/toggle helpers exposed on the underlying `AbstractControl`, and lifecycle wiring.\n *\n * Subclasses must provide the injected `NgControl` and `ControlContainer` instances.\n */\n@Directive({\n\thost: {\n\t\t'[class.hidden-control]': 'hidden'\n\t}\n})\nexport abstract class HubFormControl implements OnInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Name of the form control when used within a form group/array.\n\t */\n\treadonly formControlName = input<string>();\n\n\t/**\n\t * Whether the control is required. Derived from the bound control's validators when reactive.\n\t */\n\treadonly required = model<boolean | null>(null);\n\n\t/**\n\t * Whether the control is hidden.\n\t */\n\thidden: boolean = false;\n\n\tprotected _destroy$ = new Subject();\n\tprotected _isFormControl: boolean = false;\n\tprotected abstract _control: NgControl;\n\tprotected abstract _controlContainer: ControlContainer;\n\n\t/**\n\t * Shows the control.\n\t */\n\tshow = () => {\n\t\tthis.hidden = false;\n\t};\n\n\t/**\n\t * Hides the control.\n\t */\n\thide = () => {\n\t\tthis.hidden = true;\n\t};\n\n\t/**\n\t * Toggles the control visibility.\n\t */\n\ttoggle = () => {\n\t\tthis.hidden = !this.hidden;\n\t};\n\n\tngOnInit(): void {\n\t\tif (this._control) {\n\t\t\tthis.setShowAndHideFunctions();\n\t\t\tthis._isFormControl = !!this.formControlName();\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (this._control && !this._control.control && formControlName) {\n\t\t\tthrow new Error(`Can't find form control with name ${formControlName}`);\n\t\t}\n\n\t\t// Derive `required` from the reactive control's validators for BOTH reactive\n\t\t// bindings (`formControlName` and `[formControl]`); template-driven bindings\n\t\t// (ngModel) keep honoring the inline `required` input instead.\n\t\tconst isReactiveBinding = this._control instanceof FormControlName || this._control instanceof FormControlDirective;\n\n\t\tif (this._control?.control && isReactiveBinding) {\n\t\t\tconst control = this._control.control;\n\n\t\t\tif (isDefined(this.required())) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`You're using the inline property \"required\" with a reactive control. The property will be overwritten with the validators of the control.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\tcontrol.statusChanges\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t\t\ttap((status: FormControlStatus) => {\n\t\t\t\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.subscribe();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next(null);\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Attaches `show`, `hide` and `toggle` helpers to the underlying form control object.\n\t *\n\t * Best-effort: if the control cannot be resolved (e.g. the container is not yet initialized),\n\t * the helpers are simply not attached. This never throws — a missing convenience must not break\n\t * rendering.\n\t */\n\tprotected setShowAndHideFunctions() {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (!formControlName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = this._controlContainer?.control?.get(formControlName) as any;\n\n\t\tif (!control) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontrol['show'] = this.show;\n\t\tcontrol['hide'] = this.hide;\n\t\tcontrol['toggle'] = this.toggle;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as form helper text projected into a form field.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\">\n * <ng-template hubFormText>We'll never share your email.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFormText]'\n})\nexport class HubFormTextDirective {\n\t/** Template reference for the helper text. */\n\treadonly template = inject(TemplateRef);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the validation error message for a specific error key.\n *\n * Used by form fields and form containers to override the default message rendered\n * for a given validation error (e.g. `required`, `min`, `equal`).\n *\n * @example\n * ```html\n * <hub-input formControlName=\"age\">\n * <ng-template hubValidationError key=\"min\">Must be at least 18.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubValidationError]'\n})\nexport class HubValidationErrorDirective {\n\t/** Unique key for the validation error (e.g. `'required'`, `'min'`). */\n\treadonly key = input.required<string>();\n\n\t/** Template reference for the error message. */\n\treadonly template = inject(TemplateRef);\n}\n","/**\n * Selection mode for `<hub-datepicker>`: how many points are picked, and how they relate.\n *\n * - `'single'` — one point.\n * - `'range'` — two independent points, each with its own date and its own time.\n * - `'day-time-range'` — **one** date and two times within it: the day, from 09:00 to 11:00.\n * This is what booking a room, a slot or a shift actually is, and `'range'` cannot express it\n * — its two ends are free to land on different days. The value is still a\n * {@link HubDateRange}, so serialization, `min`/`max` and `valueFormat` are unchanged; what\n * the mode adds is the guarantee that both ends share a calendar day, enforced by a control\n * that cannot express anything else rather than by a validator that rejects it afterwards.\n * Implies a time: a granularity coarser than `hour` is raised to it.\n */\nexport type HubDatepickerMode = 'single' | 'range' | 'day-time-range';\n\n/**\n * Precision carried by each selected point, from a whole year down to a second.\n *\n * Orthogonal to {@link HubDatepickerMode}: `mode` says how many points are selected,\n * `granularity` says how precise each one is. Selects the panel too — `year` and `month`\n * render a 12-cell period grid, `day` and finer render the day grid (plus a time strip\n * from `hour` onwards).\n */\nexport type HubDatepickerGranularity = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';\n\n/**\n * How a picked point is serialized into the bound form control.\n *\n * - `'iso'` — an ISO 8601 string whose shape follows the granularity: `2026`, `2026-09`,\n * `2026-09-01`, or `2026-09-01T09:30:00+02:00` once a time is carried. **The time is the\n * reader's local wall clock and the offset is that of the emitted date** (so a January and\n * an August value in Madrid carry `+01:00` and `+02:00` respectively).\n * - `'date'` — a native `Date` truncated to the granularity, in the reader's zone.\n * - `'timestamp'` — epoch milliseconds of that same `Date`.\n * - A function — full escape hatch, receives the truncated `Date`.\n */\nexport type HubDatepickerValueFormat = 'iso' | 'date' | 'timestamp' | ((date: Date) => unknown);\n\n/**\n * A selected range. `T` follows {@link HubDatepickerValueFormat} and defaults to `string`, so\n * an existing `HubDateRange` annotation keeps meaning exactly what it meant (ISO strings).\n *\n * In `day-time-range` mode both ends are guaranteed to fall on the same calendar day.\n */\nexport interface HubDateRange<T = string> {\n\tstart: T | null;\n\tend: T | null;\n}\n\n/**\n * The CVA value of `<hub-datepicker>`: a single point in `single` mode, a {@link HubDateRange}\n * in `range` and `day-time-range` modes. `T` defaults to `string` — consumers on the default\n * `valueFormat` of `'iso'` keep typing their control as `HubDateValue` and keep receiving\n * strings.\n */\nexport type HubDateValue<T = string> = T | HubDateRange<T> | null;\n\n/**\n * Localizable, overridable labels for the datepicker (button text + accessibility names).\n * Month names, weekday names and the AM/PM day period come from the `Intl` API and need no\n * translation.\n */\nexport interface HubDatepickerLabels {\n\t/** Aria label for the calendar trigger button. */\n\topenCalendar: string;\n\t/** Aria label for the previous-month button. */\n\tpreviousMonth: string;\n\t/** Aria label for the next-month button. */\n\tnextMonth: string;\n\t/** Aria label for the previous-year button. */\n\tpreviousYear: string;\n\t/** Aria label for the next-year button. */\n\tnextYear: string;\n\t/** Text + aria label for the \"today\" shortcut button. */\n\ttoday: string;\n\t/** Text + aria label for the \"clear\" button. */\n\tclear: string;\n\t/** Text + aria label for the \"done\" button, shown when a time is being picked. */\n\tdone: string;\n\t/** Aria label for the hour spinbutton. */\n\thour: string;\n\t/** Aria label for the minute spinbutton. */\n\tminute: string;\n\t/** Aria label for the second spinbutton. */\n\tsecond: string;\n\t/** Aria label for the AM/PM toggle. */\n\tmeridiem: string;\n\t/** Row label for the time strip in `single` mode. */\n\ttime: string;\n\t/** Row label for the start time in `range` mode. */\n\tstartTime: string;\n\t/** Row label for the end time in `range` mode. */\n\tendTime: string;\n}\n\n/** Global datepicker defaults, set via {@link provideHubForms}. */\nexport interface HubDatepickerConfig {\n\t/** First weekday (0 = Sunday, 1 = Monday…). */\n\tfirstDayOfWeek: number;\n\t/** Weekday header width. */\n\tweekdayFormat: 'short' | 'narrow' | 'long';\n\t/** `Intl` options used to format the displayed value. */\n\tdisplayFormat: Intl.DateTimeFormatOptions;\n\t/** Separator between the two dates of a range in the input display. */\n\trangeSeparator: string;\n\t/** Precision each picked point carries. */\n\tgranularity: HubDatepickerGranularity;\n\t/** How a picked point is serialized into the control. */\n\tvalueFormat: HubDatepickerValueFormat;\n\t/** Minute increment of the minute spinbutton. */\n\tminuteStep: number;\n\t/** Second increment of the second spinbutton. */\n\tsecondStep: number;\n\t/** Force a 12- or 24-hour clock. `undefined` derives it from the locale. */\n\thourFormat: '12' | '24' | undefined;\n\t/** `Intl` options composed over {@link displayFormat} when the granularity carries a time. */\n\ttimeDisplayFormat: Intl.DateTimeFormatOptions;\n\t/** Localizable labels. */\n\tlabels: HubDatepickerLabels;\n}\n\n/** Built-in (English) datepicker labels. */\nexport const defaultHubDatepickerLabels: HubDatepickerLabels = {\n\topenCalendar: 'Open calendar',\n\tpreviousMonth: 'Previous month',\n\tnextMonth: 'Next month',\n\tpreviousYear: 'Previous year',\n\tnextYear: 'Next year',\n\ttoday: 'Today',\n\tclear: 'Clear',\n\tdone: 'Done',\n\thour: 'Hour',\n\tminute: 'Minute',\n\tsecond: 'Second',\n\tmeridiem: 'AM/PM',\n\ttime: 'Time',\n\tstartTime: 'Start time',\n\tendTime: 'End time'\n};\n\n/** Built-in datepicker defaults. */\nexport const defaultHubDatepickerConfig: HubDatepickerConfig = {\n\tfirstDayOfWeek: 1,\n\tweekdayFormat: 'short',\n\tdisplayFormat: { year: 'numeric', month: '2-digit', day: '2-digit' },\n\trangeSeparator: ' – ',\n\tgranularity: 'day',\n\tvalueFormat: 'iso',\n\tminuteStep: 5,\n\tsecondStep: 1,\n\thourFormat: undefined,\n\ttimeDisplayFormat: { hour: '2-digit', minute: '2-digit' },\n\tlabels: defaultHubDatepickerLabels\n};\n","/** Binary size units, ascending. */\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * Formats a byte count as human-readable text using binary multiples (1 KB = 1024 B).\n *\n * Values below 10 in their unit keep one decimal (`1.4 MB`); larger ones are rounded (`24 MB`).\n * The decimal separator follows the given locale, or the runtime's default when omitted.\n *\n * @param bytes - The size in bytes.\n * @param locale - BCP 47 locale used to format the number. Defaults to the runtime locale.\n * @returns The formatted size, or an empty string when `bytes` is not a finite, non-negative number.\n */\nexport function formatFileSize(bytes: number, locale?: string): string {\n\tif (!Number.isFinite(bytes) || bytes < 0) {\n\t\treturn '';\n\t}\n\n\tif (bytes < 1024) {\n\t\treturn `${bytes} ${FILE_SIZE_UNITS[0]}`;\n\t}\n\n\tlet value = bytes;\n\tlet unit = 0;\n\n\twhile (value >= 1024 && unit < FILE_SIZE_UNITS.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit++;\n\t}\n\n\tconst formatted = new Intl.NumberFormat(locale, { maximumFractionDigits: value < 10 ? 1 : 0 }).format(value);\n\n\treturn `${formatted} ${FILE_SIZE_UNITS[unit]}`;\n}\n","import { formatFileSize } from '../utils/file-size';\n\n/** Why a file was refused by `<hub-file-input>` before it ever reached the form value. */\nexport type HubFileRejectionReason = 'accept' | 'maxSize' | 'minSize' | 'maxFiles' | 'maxTotalSize' | 'duplicate';\n\n/** A file the component refused, together with the constraint that refused it. */\nexport interface HubFileRejection {\n\t/** The refused file. */\n\tfile: File;\n\t/** The constraint that refused it. */\n\treason: HubFileRejectionReason;\n\t/** The configured limit that was violated (`accept` string, byte count, file count), when applicable. */\n\tlimit: string | number | null;\n}\n\n/** Lifecycle of a single accepted file. `uploading`/`done`/`error` only occur when an uploader is registered. */\nexport type HubFileStatus = 'ready' | 'uploading' | 'done' | 'error';\n\n/**\n * The rich, per-file state exposed by `<hub-file-input>` through its `files()` signal.\n *\n * This is deliberately **not** the form-control value: the control holds plain `File` objects so it\n * can be handed straight to a `FormData`. Preview URLs, upload status and progress live here.\n */\nexport interface HubFileItem {\n\t/** Stable id for the lifetime of the item; used by `remove`, `cancel` and `retry`. */\n\treadonly id: string;\n\t/** The underlying native file. */\n\treadonly file: File;\n\t/** Object URL of the thumbnail, for image files in a browser. `null` otherwise. */\n\treadonly previewUrl: string | null;\n\t/** Current lifecycle status. */\n\treadonly status: HubFileStatus;\n\t/**\n\t * Upload progress from 0 to 100, or `null` when the total size is unknown — the case when the\n\t * transport does not report a total (e.g. `HttpClient` emits `total: undefined`). A `null`\n\t * progress must render as an indeterminate bar, never as 0%.\n\t */\n\treadonly progress: number | null;\n\t/** The error thrown by the uploader, when `status` is `'error'`. */\n\treadonly error: unknown | null;\n\t/**\n\t * The body the uploader reported on `done` — typically the record the server created, whose id\n\t * the application needs to reference the stored file. `null` until the upload succeeds, and\n\t * again after a `retry` restarts it.\n\t */\n\treadonly response: unknown | null;\n}\n\n/** How the accepted files are previewed below the dropzone. */\nexport type HubFilePreview = 'none' | 'list' | 'grid';\n\n/** The active restrictions of a `<hub-file-input>`, handed to the `constraints` label. */\nexport interface HubFileConstraints {\n\t/** The `accept` specification, or `null` when everything is allowed. */\n\taccept: string | null;\n\t/** Maximum size per file in bytes, or `null`. */\n\tmaxSize: number | null;\n\t/** Maximum number of files, or `null`. */\n\tmaxFiles: number | null;\n}\n\n/**\n * Localizable, overridable labels for `<hub-file-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover both visible text and the\n * accessible names of the internal buttons.\n */\nexport interface HubFileInputLabels {\n\t/** Text of the button that opens the native file dialog. */\n\tbrowse: string;\n\t/** Invitation rendered inside the dropzone. */\n\tdropHere: string;\n\t/**\n\t * Second line of the invitation, under {@link dropHere}. Empty by default, so it renders\n\t * nothing. A dropzone that sets it usually stacks the prompt too, with\n\t * `--hub-file-input-prompt-direction: column`.\n\t */\n\tdropSubtext: string;\n\t/** Accessible name of the per-file remove button. */\n\tremove: string;\n\t/** Text + accessible name of the \"remove all\" button. */\n\tclear: string;\n\t/** Accessible name of the per-file retry button (uploader only). */\n\tretry: string;\n\t/** Accessible name of the per-file cancel button (uploader only). */\n\tcancel: string;\n\t/** Screen-reader summary of the current selection. */\n\tfilesSelected: (count: number) => string;\n\t/** Renders a byte count as human-readable text. */\n\tformatSize: (bytes: number) => string;\n\t/** Renders the reason a file was refused; announced in the live region. */\n\trejection: (rejection: HubFileRejection) => string;\n\t/** Renders the hint that summarizes the active restrictions under the dropzone. */\n\tconstraints: (constraints: HubFileConstraints) => string;\n}\n\n/** Built-in (English) file-input labels. */\nexport const defaultHubFileInputLabels: HubFileInputLabels = {\n\tbrowse: 'Browse files',\n\tdropHere: 'Drag files here, or',\n\tdropSubtext: '',\n\tremove: 'Remove file',\n\tclear: 'Remove all',\n\tretry: 'Retry upload',\n\tcancel: 'Cancel upload',\n\tfilesSelected: (count: number) => (count === 1 ? '1 file selected' : `${count} files selected`),\n\tformatSize: (bytes: number) => formatFileSize(bytes),\n\trejection: ({ file, reason, limit }: HubFileRejection) => {\n\t\tswitch (reason) {\n\t\t\tcase 'accept':\n\t\t\t\treturn `${file.name}: file type not allowed.`;\n\t\t\tcase 'maxSize':\n\t\t\t\treturn `${file.name}: exceeds the maximum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'minSize':\n\t\t\t\treturn `${file.name}: below the minimum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'maxFiles':\n\t\t\t\treturn `${file.name}: at most ${limit} files can be selected.`;\n\t\t\tcase 'maxTotalSize':\n\t\t\t\treturn `${file.name}: the total size would exceed ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'duplicate':\n\t\t\t\treturn `${file.name}: already selected.`;\n\t\t\tdefault:\n\t\t\t\treturn `${file.name}: rejected.`;\n\t\t}\n\t},\n\tconstraints: ({ accept, maxSize, maxFiles }: HubFileConstraints) => {\n\t\tconst parts: string[] = [];\n\n\t\tif (accept) {\n\t\t\tparts.push(accept);\n\t\t}\n\n\t\tif (maxSize != null) {\n\t\t\tparts.push(`up to ${formatFileSize(maxSize)} each`);\n\t\t}\n\n\t\tif (maxFiles != null) {\n\t\t\tparts.push(maxFiles === 1 ? '1 file max' : `${maxFiles} files max`);\n\t\t}\n\n\t\treturn parts.join(' · ');\n\t}\n};\n","/**\n * Supported formats (native input types) for the `<hub-input>` component.\n */\nexport type HubInputFormat =\n\t'text' | 'number' | 'password' | 'email' | 'tel' | 'url' | 'color' | 'checkbox' | 'switch' | 'counter' | 'file';\n\n/**\n * Enum mirror of {@link HubInputFormat} for ergonomic template usage.\n */\nexport enum HubInputFormats {\n\tText = 'text',\n\tNumber = 'number',\n\tPassword = 'password',\n\tEmail = 'email',\n\tTel = 'tel',\n\tUrl = 'url',\n\tColor = 'color',\n\tCheckbox = 'checkbox',\n\tSwitch = 'switch',\n\tCounter = 'counter',\n\tFile = 'file'\n}\n\n/** Strength score produced by the password strength meter (0 = empty/none, 4 = strongest). */\nexport type HubPasswordStrengthScore = 0 | 1 | 2 | 3 | 4;\n\n/**\n * Localizable, overridable labels and hooks for the password format of `<hub-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover the accessible names of the\n * reveal toggle, the Caps Lock hint and the strength-meter level names.\n */\nexport interface HubPasswordLabels {\n\t/** Accessible name of the toggle while the value is masked. */\n\tshowPasswordLabel: string;\n\t/** Accessible name of the toggle while the value is revealed. */\n\thidePasswordLabel: string;\n\t/** Hint shown while Caps Lock is active and the field is focused. */\n\tcapsLockWarning: string;\n\t/** Strength level names, weakest to strongest (scores 1–4). */\n\tstrengthLabels: [string, string, string, string];\n\t/**\n\t * Optional scoring override for the strength meter. Called synchronously on every value\n\t * change — keep it cheap, or debounce upstream before plugging an expensive scorer\n\t * (zxcvbn-grade).\n\t */\n\tstrengthFn?: (value: string) => HubPasswordStrengthScore;\n}\n\n/** Built-in (English) password labels. */\nexport const defaultHubPasswordLabels: HubPasswordLabels = {\n\tshowPasswordLabel: 'Show password',\n\thidePasswordLabel: 'Hide password',\n\tcapsLockWarning: 'Caps Lock is on',\n\tstrengthLabels: ['Weak', 'Fair', 'Good', 'Strong']\n};\n","import { formatFileSize } from '../utils/file-size';\n\n/**\n * Default, human-readable messages for the most common Angular validation errors.\n *\n * Consumers can override this per field (via the `invalidFeedbackTemplateFn` input) or globally\n * (via {@link provideHubForms}). The function receives the error `key` and its `value` (the payload\n * Angular stores for that error) and returns the message string (HTML allowed).\n *\n * @param key - The validation error key (e.g. `required`, `min`, `minlength`, `equal`).\n * @param value - The error payload as stored on the control's `errors` object.\n * @returns A localized-by-default English message describing the error.\n */\nexport function defaultInvalidFeedback(key: string, value: any): string {\n\tswitch (key) {\n\t\tcase 'fileAccept':\n\t\t\treturn `Only ${value?.accept ?? 'certain'} files are allowed.`;\n\t\tcase 'fileMaxSize':\n\t\t\treturn `Each file must be at most ${formatFileSize(value?.max)}.`;\n\t\tcase 'fileMinSize':\n\t\t\treturn `Each file must be at least ${formatFileSize(value?.min)}.`;\n\t\tcase 'fileMaxTotalSize':\n\t\t\treturn `The files must add up to at most ${formatFileSize(value?.max)}.`;\n\t\tcase 'fileMaxFiles':\n\t\t\treturn `Select at most ${value?.max ?? ''} files.`;\n\t\tcase 'fileMinFiles':\n\t\t\treturn `Select at least ${value?.min ?? ''} files.`;\n\t\tcase 'required':\n\t\t\treturn 'This field is required.';\n\t\tcase 'email':\n\t\t\treturn 'Enter a valid email address.';\n\t\tcase 'pattern':\n\t\t\treturn 'The value has an invalid format.';\n\t\tcase 'equal':\n\t\t\treturn 'The values do not match.';\n\t\tcase 'min':\n\t\t\treturn `The value must be greater than or equal to ${value?.min ?? value}.`;\n\t\tcase 'max':\n\t\t\treturn `The value must be less than or equal to ${value?.max ?? value}.`;\n\t\tcase 'minlength':\n\t\t\treturn `Use at least ${value?.requiredLength ?? ''} characters.`;\n\t\tcase 'maxlength':\n\t\t\treturn `Use at most ${value?.requiredLength ?? ''} characters.`;\n\t\tcase 'step':\n\t\t\treturn 'The value does not match the allowed step.';\n\t\tdefault:\n\t\t\treturn `The field has the following error: ${key}.`;\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { defaultHubDatepickerConfig, HubDatepickerConfig } from '../interfaces/datepicker.interface';\nimport { defaultHubFileInputLabels, HubFileInputLabels } from '../interfaces/file-input.interface';\nimport { defaultHubPasswordLabels, HubPasswordLabels } from '../interfaces/input.interface';\nimport { defaultInvalidFeedback } from '../shared/hub-error-display';\n\n/**\n * Global configuration contract for `ng-hub-ui-forms`.\n */\nexport interface HubFormsConfig {\n\t/**\n\t * Builds the message shown for a given validation error.\n\t *\n\t * @param key - The validation error key (e.g. `required`, `min`).\n\t * @param value - The error payload stored on the control.\n\t * @returns The message string (HTML allowed).\n\t */\n\tinvalidFeedbackTemplateFn: (key: string, value: any) => string;\n\n\t/**\n\t * Whether fields render the opt-in valid/success state by default once they\n\t * are touched and valid. `false` keeps the success state off everywhere\n\t * (only invalid is automatic); a per-field `showValid` input overrides this.\n\t */\n\tshowValid: boolean;\n\n\t/** Global datepicker defaults (locale labels, formats, first day of week…). */\n\tdatepicker: HubDatepickerConfig;\n\n\t/** Global file-input labels (button text, accessible names, size and rejection formatting). */\n\tfileInput: HubFileInputLabels;\n\n\t/** Global password labels (toggle accessible names, Caps Lock hint, strength levels). */\n\tpassword: HubPasswordLabels;\n}\n\n/**\n * Default configuration used when {@link provideHubForms} is not called.\n */\nexport const defaultHubFormsConfig: HubFormsConfig = {\n\tinvalidFeedbackTemplateFn: defaultInvalidFeedback,\n\tshowValid: false,\n\tdatepicker: defaultHubDatepickerConfig,\n\tfileInput: defaultHubFileInputLabels,\n\tpassword: defaultHubPasswordLabels\n};\n\n/**\n * Injection token holding the resolved {@link HubFormsConfig}.\n *\n * Falls back to {@link defaultHubFormsConfig} when no provider is registered, so the library works\n * out of the box without bootstrapping.\n */\nexport const HUB_FORMS_CONFIG = new InjectionToken<HubFormsConfig>('HUB_FORMS_CONFIG', {\n\tprovidedIn: 'root',\n\tfactory: () => defaultHubFormsConfig\n});\n\n/**\n * Registers a global configuration for `ng-hub-ui-forms`.\n *\n * @param config - Partial configuration; unspecified fields keep their defaults.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's providers).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [\n * provideHubForms({\n * invalidFeedbackTemplateFn: (key) => myI18n.translate(`errors.${key}`)\n * })\n * ]\n * });\n * ```\n */\nexport function provideHubForms(config?: DeepPartial<HubFormsConfig>): EnvironmentProviders {\n\tconst datepicker: HubDatepickerConfig = {\n\t\t...defaultHubFormsConfig.datepicker,\n\t\t...config?.datepicker,\n\t\tlabels: { ...defaultHubFormsConfig.datepicker.labels, ...config?.datepicker?.labels }\n\t};\n\n\tconst fileInput: HubFileInputLabels = {\n\t\t...defaultHubFormsConfig.fileInput,\n\t\t...(config?.fileInput as Partial<HubFileInputLabels> | undefined)\n\t};\n\n\tconst password: HubPasswordLabels = {\n\t\t...defaultHubFormsConfig.password,\n\t\t...(config?.password as Partial<HubPasswordLabels> | undefined)\n\t};\n\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_FORMS_CONFIG,\n\t\t\tuseValue: { ...defaultHubFormsConfig, ...config, datepicker, fileInput, password } as HubFormsConfig\n\t\t}\n\t]);\n}\n\n/** Recursively-optional version of a type, for partial config overrides. */\ntype DeepPartial<T> = {\n\t[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { ControlContainer, ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { HubFormTextDirective } from '../directives/form-text.directive';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\nimport { HubFormControl } from './hub-form-control';\nimport { isDefined, uuid } from '../utils/utils';\n\n/**\n * Shared base for single-value form fields (input, textarea, slider, select…).\n *\n * Extends {@link HubFormControl} with the `ControlValueAccessor` plumbing and the automatic\n * validation-error display that every field shares:\n *\n * - Injects the bound `NgControl` / `ControlContainer` and registers itself as value accessor.\n * - Exposes `isInvalid` / `errors`, resolving from the reactive control or from native validity.\n * - Collects projected `hubValidationError` templates and resolves messages through the per-field\n * override, the global {@link provideHubForms} config, or the built-in defaults.\n * - Keeps the (OnPush) view in sync with the control via `control.events` + `markForCheck`.\n *\n * Subclasses only implement the value-specific bits: the `_value` signal, `writeValue`, the change\n * handler and their own template/inputs.\n */\n@Directive({\n\thost: {\n\t\t'(focusout)': 'handleBlur($event)'\n\t}\n})\nexport abstract class HubFieldControl extends HubFormControl implements ControlValueAccessor, AfterContentInit {\n\tprotected readonly _elementRef = inject(ElementRef);\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\n\tprotected readonly _control = inject(NgControl, { self: true, optional: true })!;\n\tprotected readonly _controlContainer = inject(ControlContainer, { skipSelf: true, host: true, optional: true })!;\n\n\t/** Resolved templates that override the default message of a given error key. */\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/** Stable unique id linking the label and the control. */\n\treadonly id = uuid();\n\n\t/** Query for a projected `hubFormText` helper template. */\n\treadonly formTextTmp = contentChild(HubFormTextDirective, { read: TemplateRef });\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\t/** Whether the field is disabled. */\n\treadonly disabled = model(false);\n\n\t/** Per-field override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/**\n\t * Opt-in success state. When `true`, a touched + valid field renders the\n\t * `--valid` styling (success border + ring). Defaults to the global\n\t * {@link HubFormsConfig.showValid}; the success state is never automatic\n\t * unless enabled. Has no effect while the field is invalid.\n\t */\n\treadonly showValid = input(this.#config.showValid);\n\n\t/** Optional success message shown below the control while {@link showsValid}. */\n\treadonly validFeedback = input<string | null>(null);\n\n\tonChange: (value: any) => void = () => {};\n\tonTouched: () => void = () => {};\n\n\tprotected readonly _nativeErrors = signal<ValidationErrors | null>(null);\n\tprotected readonly _nativeTouched = signal(false);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this._control) {\n\t\t\tthis._control.valueAccessor = this;\n\t\t}\n\t}\n\n\t/** Whether the field should display its error feedback (touched + invalid). */\n\tget isInvalid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.invalid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !!this._nativeErrors();\n\t}\n\n\t/** Whether the field is touched and valid (independent of the opt-in). */\n\tget isValid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.valid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !this._nativeErrors();\n\t}\n\n\t/** Whether the opt-in success state should be displayed (touched + valid + `showValid`). */\n\tget showsValid(): boolean {\n\t\treturn this.showValid() && this.isValid;\n\t}\n\n\t/** Current validation errors, from the reactive control or from native validity. */\n\tget errors(): ValidationErrors | null {\n\t\tif (this._control) {\n\t\t\treturn this._control.errors ?? null;\n\t\t}\n\n\t\treturn this._nativeErrors();\n\t}\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\n\t\t// Re-render on touched/pristine/status/value changes of the bound reactive control.\n\t\t// `markAllAsTouched()` on a parent form would otherwise not reach this OnPush component,\n\t\t// leaving the error feedback stale.\n\t\tthis._control?.control?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n\n\t/**\n\t * Marks the field as touched when focus leaves it.\n\t *\n\t * @param event - The originating focus event.\n\t */\n\thandleBlur(event?: FocusEvent): void {\n\t\tif (!this._control) {\n\t\t\tthis._nativeTouched.set(true);\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t}\n\n\t\tthis.onTouched?.();\n\t}\n\n\tregisterOnChange(fn: (value: any) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * Resolves the message for a given validation error, honoring per-field and global overrides.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this.#config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\tabstract writeValue(value: any): void;\n\n\t/**\n\t * Derives native validation errors when the field is used without a reactive control.\n\t *\n\t * @param target - The DOM element to read validity from, if available.\n\t */\n\tprotected updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet el = target as HTMLInputElement | HTMLTextAreaElement | null;\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tel = this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`) as\n\t\t\t\tHTMLInputElement | HTMLTextAreaElement | null;\n\t\t}\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tthis._nativeErrors.set(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst validity = el.validity;\n\t\tconst errors: ValidationErrors = {};\n\t\tconst valueLength = (el.value ?? '').length;\n\n\t\tif (validity.valueMissing) errors['required'] = true;\n\t\tif (validity.typeMismatch) errors[el.type || 'type'] = true;\n\t\tif (validity.patternMismatch) errors['pattern'] = true;\n\t\tif (validity.tooShort) errors['minlength'] = { requiredLength: el.minLength, actualLength: valueLength };\n\t\tif (validity.tooLong) errors['maxlength'] = { requiredLength: el.maxLength, actualLength: valueLength };\n\t\tif (validity.rangeUnderflow && 'min' in el) errors['min'] = { min: (el as HTMLInputElement).min, actual: el.value };\n\t\tif (validity.rangeOverflow && 'max' in el) errors['max'] = { max: (el as HTMLInputElement).max, actual: el.value };\n\t\tif (validity.stepMismatch && 'step' in el) errors['step'] = { step: (el as HTMLInputElement).step, actual: el.value };\n\t\tif (validity.badInput) errors['badInput'] = true;\n\n\t\tthis._nativeErrors.set(isDefined(errors) && Object.keys(errors).length ? errors : null);\n\t}\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, ValidationErrors } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\n\n/** When a container reveals its group-level validation errors. */\nexport type HubGroupErrorTrigger = 'touched' | 'submit' | 'always';\n\n/**\n * Shared base for form *containers* (`hub-form`, `hub-fieldset`, `hub-legend`).\n *\n * Resolves a target `FormGroup`/`FormArray` — provided explicitly via the `group` input or by name\n * from the parent `ControlContainer` — and automatically surfaces its **group-level** validation\n * errors (those set on the group itself by cross-field validators such as `hubAreEqual`), the same\n * way the field components surface control-level errors.\n *\n * It intentionally ignores child-control errors: those are rendered by the individual fields.\n */\n@Directive()\nexport abstract class HubGroupControl implements AfterContentInit, OnDestroy {\n\tprotected readonly _config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\tprivate readonly _parent = inject(ControlContainer, { optional: true, skipSelf: true });\n\tprivate readonly _self = inject(ControlContainer, { optional: true, self: true });\n\n\tprotected _destroy$ = new Subject<void>();\n\n\t/** Explicit target group/array. Takes precedence over name resolution. */\n\treadonly group = input<AbstractControl | null>(null);\n\n\t/** Name of the target group/array within the parent container (alternative to `group`). */\n\treadonly groupName = input<string>();\n\n\t/** When to reveal the group-level errors. `touched` (default) or `always`. */\n\treadonly errorTrigger = input<HubGroupErrorTrigger>('touched');\n\n\t/** Per-container override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/**\n\t * The currently bound group control. A `computed` (not an `effect`-fed signal) so it resolves\n\t * synchronously on first render — otherwise a `<form [formGroup]>` would briefly bind `null` and\n\t * the projected `formControlName` fields would fail to locate their controls.\n\t */\n\tprotected readonly _control = computed<AbstractControl | null>(() => {\n\t\tconst explicit = this.group();\n\n\t\tif (explicit) {\n\t\t\treturn explicit;\n\t\t}\n\n\t\tconst name = this.groupName();\n\n\t\tif (name) {\n\t\t\treturn this._parent?.control?.get(name) ?? null;\n\t\t}\n\n\t\t// `_self` covers `form[hubForm]` (the `formGroup` directive lives on the same host);\n\t\t// `_parent` covers a container nested inside an outer form/group.\n\t\treturn this._self?.control ?? this._parent?.control ?? null;\n\t});\n\n\t/** Whether the owning form has been submitted (set by `hub-form`; drives the `submit` trigger). */\n\tprotected readonly _submitted = signal(false);\n\n\tconstructor() {\n\t\t// Keep the OnPush view in sync with the resolved control's touched/status changes.\n\t\teffect(() => this.#subscribe(this._control()));\n\t}\n\n\t/** Whether the group's own (cross-field) errors should be displayed. */\n\tget isInvalid(): boolean {\n\t\tconst control = this._control();\n\n\t\tif (!control || !control.errors) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (this.errorTrigger()) {\n\t\t\tcase 'always':\n\t\t\t\treturn true;\n\t\t\tcase 'submit':\n\t\t\t\treturn this._submitted();\n\t\t\tdefault:\n\t\t\t\treturn control.touched || this._submitted();\n\t\t}\n\t}\n\n\t/** The group's own validation errors (excludes child-control errors). */\n\tget errors(): ValidationErrors | null {\n\t\treturn this._control()?.errors ?? null;\n\t}\n\n\tngAfterContentInit(): void {\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Resolves the message for a given group-level validation error.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this._config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\t/**\n\t * (Re)subscribes to the bound control's events so the OnPush view refreshes on touched/status\n\t * changes (e.g. a parent `markAllAsTouched()`).\n\t *\n\t * @param control - The newly resolved control, if any.\n\t */\n\t#subscribe(control: AbstractControl | null): void {\n\t\tthis._destroy$.next();\n\n\t\tcontrol?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { HubFileUploader } from '../interfaces/file-uploader.interface';\n\n/**\n * Injection token holding the {@link HubFileUploader} that `<hub-file-input>` delegates uploads to.\n *\n * It has **no default**: when nothing is registered, the component resolves it as `null` and behaves\n * as a pure picker — no automatic upload, no progress bar, no cancel or retry. Register one with\n * {@link provideHubFileUploader}.\n */\nexport const HUB_FILE_UPLOADER = new InjectionToken<HubFileUploader>('HUB_FILE_UPLOADER');\n\n/**\n * Registers the uploader that `<hub-file-input>` uses to send files.\n *\n * The library defines the contract, not the transport: an uploader that knows your endpoint, field\n * name, headers and retry policy is application code. Implement {@link HubFileUploader} there and\n * hand it over here.\n *\n * Passing a class provides it in the same injector and aliases the token to that single instance, so\n * the uploader can inject `HttpClient` and hold its own state.\n *\n * @param uploader - The uploader class (dependency-injected) or a ready-made instance.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's `providers`).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideHttpClient(), provideHubFileUploader(ApiFileUploader)]\n * });\n * ```\n */\nexport function provideHubFileUploader(uploader: HubFileUploader | Type<HubFileUploader>): EnvironmentProviders {\n\tif (typeof uploader === 'function') {\n\t\tconst uploaderType = uploader as Type<HubFileUploader>;\n\n\t\treturn makeEnvironmentProviders([uploaderType, { provide: HUB_FILE_UPLOADER, useExisting: uploaderType }]);\n\t}\n\n\treturn makeEnvironmentProviders([{ provide: HUB_FILE_UPLOADER, useValue: uploader }]);\n}\n","/**\n * Possible display types for form helper text.\n */\nexport type FormTextType = 'bottom' | 'tooltip';\n\n/**\n * Enum for form helper text display types.\n */\nexport enum FormTextTypes {\n\tBottom = 'bottom',\n\tTooltip = 'tooltip'\n}\n\n/**\n * Possible label display types shared by the form field components.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal'\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Projects content into the **inline-start** affix area of a `<hub-input>` (left in\n * LTR, right in RTL). Use it for a leading icon — a `<hub-icon>`, currency symbol,\n * inline `<svg>` or even a small button.\n *\n * The input automatically reserves inline padding so its text never overlaps the\n * affix, and themes a projected `<hub-icon>` with its `--hub-input-icon-*` tokens.\n *\n * ```html\n * <hub-input placeholder=\"Search…\">\n * <hub-icon hubInputPrefix name=\"fa:solid:magnifying-glass\" />\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubInputPrefix]',\n\thost: { class: 'hub-input__affix-content' }\n})\nexport class HubInputPrefixDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Projects content into the **inline-end** affix area of a `<hub-input>` (right in\n * LTR, left in RTL). Use it for a trailing icon or a unit label. For a clear\n * button, prefer the built-in `[clearable]` input instead of projecting one.\n *\n * The input automatically reserves inline padding so its text never overlaps the\n * affix, and themes a projected `<hub-icon>` with its `--hub-input-icon-*` tokens.\n *\n * ```html\n * <hub-input>\n * <hub-icon hubInputSuffix name=\"fa:solid:circle-info\" />\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubInputSuffix]',\n\thost: { class: 'hub-input__affix-content' }\n})\nexport class HubInputSuffixDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks content attached to the **inline-end edge** of a field (right in LTR, left in RTL) —\n * an icon, a button, another field, anything richer than the text an `append` string can carry.\n * This is the slot for whatever operates on the field's value: search it, calculate it, copy it,\n * configure it, or say what unit it is in.\n *\n * **A field is allowed too, not only an action.** `hub-input`, `hub-select`, `hub-textarea` and\n * `hub-datepicker` may be projected here and close flush against the host field, which is how a\n * price and the period it is a price of stay one statement — \"180 € a month\" — instead of two\n * fields the reader has to put back together. It works a level deeper than for a button: a field\n * keeps its box on the control inside it rather than on its host, so the host gives up the border\n * and padding it should never have taken and the inner control takes the squaring. Only those\n * four, and only as a **direct child** of the template — wrap one in a `<div>` and it falls back\n * to the treatment an action gets.\n *\n * Works on every field that renders as a box with a value: `<hub-input>`, `<hub-select>`,\n * `<hub-textarea>` and `<hub-datepicker>`. Composes with the `append` input, which stays the\n * shorter way to attach plain text: the strings render first, this last, so an action always\n * ends up outermost — a unit labels the field, the button acts on it.\n *\n * Deliberately not the same slot as the input's `[hubInputSuffix]`. That one sits *inside* the\n * box, which is right for an icon or a unit but wrong for a control: inside a field it competes\n * for the same corner as the clear button (and, in a select, the dropdown arrow), and a click\n * landing on the wrong one of them does something nobody asked for. This one attaches outside\n * the box and shares its border, so the two read as one field with an action on it.\n *\n * Declared as a template rather than plain projected content because a field's `<ng-content>`\n * is already spoken for — the select's carries `<ng-option>` through to its engine — so\n * anything projected plainly would land in the wrong place. Rendering from a template also\n * keeps the action after the control in the DOM, so tabbing reaches the field before the button\n * acting on it.\n *\n * ```html\n * <hub-input formControlName=\"query\" label=\"Search\">\n * <ng-template hubAppend>\n * <button type=\"button\" (click)=\"search()\"><hub-icon name=\"fa:solid:magnifying-glass\" /></button>\n * </ng-template>\n * </hub-input>\n * ```\n */\n@Directive({ selector: '[hubAppend]' })\nexport class HubAppendDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks content attached to the **inline-start edge** of a field (left in LTR, right in RTL) —\n * an icon, a button, another field, anything richer than the text a `prepend` string can carry.\n *\n * **A field is allowed too, not only an action.** `hub-input`, `hub-select`, `hub-textarea` and\n * `hub-datepicker` may be projected here and close flush against the host field, which is how a\n * price and the period it is a price of stay one statement — \"180 € a month\" — instead of two\n * fields the reader has to put back together. It works a level deeper than for a button: a field\n * keeps its box on the control inside it rather than on its host, so the host gives up the border\n * and padding it should never have taken and the inner control takes the squaring. Only those\n * four, and only as a **direct child** of the template — wrap one in a `<div>` and it falls back\n * to the treatment an action gets.\n *\n * Works on every field that renders as a box with a value: `<hub-input>`, `<hub-select>`,\n * `<hub-textarea>` and `<hub-datepicker>`. Composes with the `prepend` input, which stays the\n * shorter way to attach plain text: the strings render first, this last, so the projected\n * content is always the outermost element on that side.\n *\n * Declared as a template rather than plain projected content because a field's `<ng-content>`\n * is already spoken for — the select's carries `<ng-option>` through to its engine, and the\n * input projects its in-field affixes — so anything projected plainly would land in the wrong\n * place. Rendering from a template also fixes the DOM order, which is what keeps tabbing sane\n * around an attached button.\n *\n * Whatever is projected wears the field's border, radius and height rather than its own, so a\n * `hubButton` does not draw a second, thicker seam beside the control — and a projected field\n * hands that over from its host to the control inside it, for the same reason.\n *\n * ```html\n * <hub-input formControlName=\"amount\" label=\"Amount\">\n * <ng-template hubPrepend>\n * <button type=\"button\" (click)=\"pickCurrency()\"><hub-icon name=\"fa:solid:coins\" /></button>\n * </ng-template>\n * </hub-input>\n * ```\n */\n@Directive({ selector: '[hubPrepend]' })\nexport class HubPrependDirective {}\n","/**\n * Pattern-mask utilities for `hub-input`.\n *\n * A mask is a template string where these tokens accept user input and every other\n * character is a literal separator that is inserted automatically as the user types:\n *\n * | Token | Accepts |\n * |-------|------------------------|\n * | `0` | a digit (`0`–`9`) |\n * | `A` | a letter (`a`–`z`/`A`–`Z`) |\n * | `*` | a letter or a digit |\n *\n * Examples: card `0000 0000 0000 0000`, date `00/00/0000`, IBAN `AA00 0000 0000 0000 0000 0000`,\n * phone `+00 000 000 000`.\n */\n\n/** Predicate per mask token. */\nconst MASK_TOKENS: Record<string, (char: string) => boolean> = {\n\t'0': (char) => /\\d/.test(char),\n\tA: (char) => /[a-zA-Z]/.test(char),\n\t'*': (char) => /[a-zA-Z0-9]/.test(char)\n};\n\n/** Result of applying a mask: the formatted string and its raw (separator-free) value. */\nexport interface HubMaskResult {\n\t/** The value formatted with literals inserted, e.g. `1234 5678`. */\n\treadonly masked: string;\n\t/** Only the characters that filled tokens, e.g. `12345678`. */\n\treadonly unmasked: string;\n}\n\n/**\n * Returns whether a mask string actually contains at least one input token.\n *\n * @param mask Mask template (may be empty).\n * @returns True when the mask has a `0`, `A` or `*` token.\n */\nexport function isMaskActive(mask: string | null | undefined): boolean {\n\treturn !!mask && [...mask].some((char) => char in MASK_TOKENS);\n}\n\n/**\n * Formats a raw input string against a mask template.\n *\n * The input may already contain literals from a previous pass (live re-formatting):\n * non-matching characters are skipped, and literals present in the input are consumed.\n * Formatting stops as soon as the input is exhausted, so no trailing separators are shown\n * before the user has typed the next character.\n *\n * @param value Raw user input (with or without separators).\n * @param mask Mask template.\n * @returns The masked and unmasked representations.\n */\nexport function applyMask(value: string | null | undefined, mask: string): HubMaskResult {\n\tconst chars = [...String(value ?? '')];\n\tlet masked = '';\n\tlet unmasked = '';\n\tlet cursor = 0;\n\n\tfor (let position = 0; position < mask.length; position++) {\n\t\tif (cursor >= chars.length) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst maskChar = mask[position];\n\t\tconst matches = MASK_TOKENS[maskChar];\n\n\t\tif (matches) {\n\t\t\t// Advance to the next input character that satisfies this token.\n\t\t\twhile (cursor < chars.length && !matches(chars[cursor])) {\n\t\t\t\tcursor++;\n\t\t\t}\n\t\t\tif (cursor >= chars.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmasked += chars[cursor];\n\t\t\tunmasked += chars[cursor];\n\t\t\tcursor++;\n\t\t} else {\n\t\t\t// Literal separator: insert it, and consume it from the input if present.\n\t\t\tmasked += maskChar;\n\t\t\tif (chars[cursor] === maskChar) {\n\t\t\t\tcursor++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { masked, unmasked };\n}\n","import { HubPasswordStrengthScore } from '../interfaces/input.interface';\n\n/**\n * Default password-strength heuristic: one point each for length ≥ 8, mixed case, a digit and a\n * symbol. Deliberately simple and dependency-free; override per app via\n * `provideHubForms({ password: { strengthFn } })` for zxcvbn-grade scoring.\n *\n * The symbol rule (`[^A-Za-z0-9]`) is ASCII-only, so accented and non-Latin letters (e.g. `é`,\n * `ñ`) count as symbols too — a minor over-count, not a correctness issue for this heuristic.\n */\nexport function scorePasswordStrength(value: string): HubPasswordStrengthScore {\n\tif (!value) {\n\t\treturn 0;\n\t}\n\n\tlet score = 0;\n\n\tif (value.length >= 8) {\n\t\tscore++;\n\t}\n\n\tif (/[a-z]/.test(value) && /[A-Z]/.test(value)) {\n\t\tscore++;\n\t}\n\n\tif (/\\d/.test(value)) {\n\t\tscore++;\n\t}\n\n\tif (/[^A-Za-z0-9]/.test(value)) {\n\t\tscore++;\n\t}\n\n\treturn score as HubPasswordStrengthScore;\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tmodel,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, Validators } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubInputFormat, HubInputFormats, HubPasswordStrengthScore } from '../../interfaces/input.interface';\nimport { HubInputPrefixDirective } from '../../directives/input-prefix.directive';\nimport { HubInputSuffixDirective } from '../../directives/input-suffix.directive';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { controlHasMinOrMaxValidator, isDefined } from '../../utils/utils';\nimport { applyMask, isMaskActive } from '../../utils/mask';\nimport { scorePasswordStrength } from '../../utils/password-strength';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/**\n * Accessible form field with automatic validation-error display.\n *\n * Works both with Reactive Forms (`formControlName` / `[formControl]`) and as a standalone\n * value-bound control. When invalid and touched, it renders the control's errors using the\n * default messages, the global {@link provideHubForms} config, the per-field\n * `invalidFeedbackTemplateFn` input, or projected `hubValidationError` templates.\n *\n * Formats: `text`, `number`, `password`, `email`, `tel`, `url`, `color`, `checkbox`, `switch`,\n * `counter` and `file`. Label types: `stacked`, `floating`, `horizontal`. Text-like formats support\n * prepend / append addons (input groups). Numeric formats auto-attach `min`/`max` validators when\n * bound to a reactive control.\n *\n * The `file` format is **deprecated since 22.6.0** in favour of `<hub-file-input>`: it is a bare\n * picker that cannot enforce `accept` on a drop, and has no size limits, no preview and no per-file\n * removal. It keeps working until the next major.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <hub-input formControlName=\"accept\" type=\"switch\" label=\"Accept terms\" />\n * <hub-input formControlName=\"qty\" type=\"counter\" label=\"Quantity\" [min]=\"1\" [max]=\"9\" />\n * ```\n */\n@Component({\n\tselector: 'hub-input',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './input.component.html',\n\tstyleUrl: './input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-input-host]': 'true'\n\t}\n})\nexport class HubInputComponent extends HubFieldControl {\n\tprotected readonly _inputFormats = HubInputFormats;\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubInputValue>('');\n\n\t/**\n\t * Whether the password value is currently revealed (password format only). Two-way\n\t * bindable, so the reveal state can be driven or observed from outside.\n\t */\n\treadonly passwordRevealed = model(false);\n\n\t/** Resolved password labels from the global forms config. */\n\tprotected readonly _passwordLabels = inject(HUB_FORMS_CONFIG).password;\n\n\t/** Whether the reveal toggle button is rendered (password format only). */\n\treadonly passwordToggle = input(true, { transform: booleanAttribute });\n\n\t/** Whether the integrated reveal toggle should render right now. */\n\tprotected readonly showsPasswordToggle = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Password && this.passwordToggle()\n\t);\n\n\t/** Whether a revealed password re-masks when focus leaves the field. */\n\treadonly hideOnBlur = input(true, { transform: booleanAttribute });\n\n\t/** Whether the Caps Lock hint renders while Caps Lock is active (password format only). */\n\treadonly capsLockWarning = input(true, { transform: booleanAttribute });\n\n\t/** Whether Caps Lock is currently detected as active on the focused password field. */\n\tprotected readonly capsLockOn = signal(false);\n\n\t/** Whether the Caps Lock hint should render right now. */\n\tprotected readonly showsCapsLock = computed<boolean>(\n\t\t() => this.capsLockOn() && this.capsLockWarning() && this.type() === this._inputFormats.Password\n\t);\n\n\t/** Whether the opt-in strength meter renders under the field (password format only). */\n\treadonly passwordStrength = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Current strength score of the typed value. Clamped to `[0, 4]` here — at the source —\n\t * so a misconfigured custom `strengthFn` returning an out-of-range number (e.g. `5` or\n\t * `-1`) cannot corrupt the label lookup or the template's segment/`data-level` rendering.\n\t */\n\tprotected readonly strengthScore = computed<HubPasswordStrengthScore>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !value) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst raw = (this._passwordLabels.strengthFn ?? scorePasswordStrength)(value);\n\t\treturn Math.min(Math.max(raw, 0), 4) as HubPasswordStrengthScore;\n\t});\n\n\t/** Whether the strength meter should render right now. */\n\tprotected readonly showsStrength = computed<boolean>(() => {\n\t\tconst value = this._value();\n\t\treturn (\n\t\t\tthis.passwordStrength() && this.type() === this._inputFormats.Password && typeof value === 'string' && value !== ''\n\t\t);\n\t});\n\n\t/** Level name for the current score; a non-empty value never drops below the weakest label. */\n\tprotected readonly strengthLabel = computed<string>(\n\t\t() => this._passwordLabels.strengthLabels[Math.max(this.strengthScore(), 1) - 1]\n\t);\n\n\t/** Segment indexes of the strength bar. */\n\tprotected readonly _strengthSegments = [1, 2, 3, 4] as const;\n\n\t/** Native input type. */\n\treadonly type = input<HubInputFormat>(this._inputFormats.Text);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `floating`, `horizontal`). */\n\treadonly labelType = model<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = model<string>('');\n\n\t/** Native `autocomplete` attribute (text-like formats), e.g. `current-password` or `new-password`. */\n\treadonly autocomplete = input<string>('');\n\n\t/** Minimum value (numeric / counter inputs). */\n\treadonly min = model<number | undefined>(undefined);\n\n\t/** Maximum value (numeric / counter inputs). */\n\treadonly max = model<number | undefined>(undefined);\n\n\t/** Step value (numeric / counter inputs). */\n\treadonly step = input(1, { transform: numberAttribute });\n\n\t/** Whether the input is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Text shown before the control as an input-group addon (text-like formats). */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as an input-group addon (text-like formats). */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected inline-start affix (`[hubInputPrefix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly prefixDir = contentChild(HubInputPrefixDirective);\n\n\t/** Projected inline-end affix (`[hubInputSuffix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly suffixDir = contentChild(HubInputSuffixDirective);\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Whether content is attached to the leading edge, which squares off that corner. */\n\tprotected readonly hasPrependTpl = computed<boolean>(() => !!this._prependTpl());\n\n\t/** Whether content is attached to the trailing edge. */\n\tprotected readonly hasAppendTpl = computed<boolean>(() => !!this._appendTpl());\n\n\t/**\n\t * When true, a clear (✕) button is rendered inside the field once it holds a\n\t * value; activating it resets the control. The glyph comes from the\n\t * `--hub-input-clear-icon` CSS token, so it can be restyled without touching\n\t * the template.\n\t */\n\treadonly clearable = input(false, { transform: booleanAttribute });\n\n\t/** Whether the internal clear button should be shown right now. */\n\tprotected readonly showClear = computed<boolean>(\n\t\t() => this.clearable() && !this.disabled() && !this.readonly() && this._value() != null && this._value() !== ''\n\t);\n\n\t/** Whether an inline-start affix (projected prefix) is present. */\n\tprotected readonly hasPrefix = computed<boolean>(() => !!this.prefixDir());\n\n\t/** Whether an inline-end affix (projected suffix or the clear button) is present. */\n\tprotected readonly hasSuffix = computed<boolean>(() => !!this.suffixDir() || this.showClear());\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Pattern mask for text-like formats. Tokens: `0` = digit, `A` = letter, `*` =\n\t * alphanumeric; any other character is an auto-inserted literal separator.\n\t * Example: `0000 0000 0000 0000` (card), `00/00/0000` (date).\n\t */\n\treadonly mask = input<string>('');\n\n\t/**\n\t * When a `mask` is set, controls the form value: `false` (default) stores the\n\t * formatted text (e.g. `1234 5678`); `true` stores only the typed characters\n\t * (e.g. `12345678`).\n\t */\n\treadonly unmaskValue = input(false, { transform: booleanAttribute });\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubInputValue>();\n\n\t/** Emits the current value when Enter is pressed. */\n\treadonly enter = output<HubInputValue>();\n\n\t/** Debounce in milliseconds before {@link search} fires. `0` emits on every keystroke. */\n\treadonly debounceTime = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Debounced typeahead event: emits the current term (stringified) `debounceTime`\n\t * ms after the user stops typing. Wire it to drive search / autocomplete without\n\t * rolling your own debounce. Text-like formats only; `valueChange` stays synchronous.\n\t */\n\treadonly search = output<string>();\n\n\t/** Pending typeahead-debounce timer. */\n\t#searchTimer?: ReturnType<typeof setTimeout>;\n\n\t/** Last term emitted via {@link search}, used to skip duplicate emits. */\n\t#lastSearchTerm: string | null = null;\n\n\t/** Clears any pending debounce timer when the component is destroyed. */\n\tprivate readonly _searchCleanup = inject(DestroyRef).onDestroy(() => clearTimeout(this.#searchTimer));\n\n\t/**\n\t * Accepted file types (file format), e.g. `image/*,.pdf`.\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`, which enforces `accept` on drops and pastes\n\t * too. Removed in the next major.\n\t */\n\treadonly accept = input<string>('*');\n\n\t/**\n\t * Whether multiple files can be selected (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`. Removed in the next major.\n\t */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text of the file-picker button (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>` and its `buttonLabel`. Removed in the next major.\n\t */\n\treadonly buttonLabel = input<string>('Choose file');\n\n\t/** Reference to the hidden native file input. */\n\tprotected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n\t/** Whether the current format renders a checkable control (checkbox / switch). */\n\tprotected readonly isCheckable = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Checkbox || this.type() === this._inputFormats.Switch\n\t);\n\n\t/** Whether the current format renders a typeable text-like control (drives the `search` event). */\n\tprotected readonly isTextLike = computed<boolean>(() => {\n\t\tconst t = this.type();\n\t\treturn (\n\t\t\tt !== this._inputFormats.Checkbox &&\n\t\t\tt !== this._inputFormats.Switch &&\n\t\t\tt !== this._inputFormats.Counter &&\n\t\t\tt !== this._inputFormats.Color &&\n\t\t\tt !== this._inputFormats.File\n\t\t);\n\t});\n\n\t/** Display label for the selected file(s). */\n\tprotected readonly fileLabel = computed<string>(() => {\n\t\tconst v = this._value();\n\n\t\tif (v instanceof File) {\n\t\t\treturn v.name;\n\t\t}\n\n\t\tif (typeof FileList !== 'undefined' && v instanceof FileList) {\n\t\t\treturn v.length === 1 ? v[0].name : `${v.length} files`;\n\t\t}\n\n\t\treturn '';\n\t});\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether a leading addon is present. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0);\n\n\t/** Whether a trailing addon is present. */\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0);\n\n\t/** Resolves the actual native `type` attribute, accounting for password reveal. */\n\tprotected readonly resolvedType = computed<string>(() => {\n\t\t// Readonly must not auto-expose the secret by falling through to type=\"text\"; an\n\t\t// explicit toggle click may still reveal it.\n\t\tif (this.type() === this._inputFormats.Password) {\n\t\t\treturn this.passwordRevealed() ? 'text' : 'password';\n\t\t}\n\n\t\tif (this.readonly()) {\n\t\t\treturn this._inputFormats.Text;\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Counter) {\n\t\t\treturn this._inputFormats.Number;\n\t\t}\n\n\t\treturn this.type();\n\t});\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\t\tthis.#attachNumericValidators();\n\t\tthis.#warnDeprecatedFileFormat();\n\t}\n\n\twriteValue(value: HubInputValue): void {\n\t\tif (this.isCheckable()) {\n\t\t\tthis._value.set(!!value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Display masked values formatted, regardless of whether the form stores the\n\t\t// masked or unmasked representation.\n\t\tif (isMaskActive(this.mask()) && value != null && typeof value === 'string') {\n\t\t\tthis._value.set(applyMask(value, this.mask()).masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Reads the new value from an input/model event and propagates it to the form and outputs.\n\t *\n\t * @param event - A DOM event or the raw value emitted by `ngModelChange`.\n\t */\n\tsetValue(event: any): void {\n\t\tconst hasTarget = !!event?.target;\n\t\tlet newValue: HubInputValue;\n\n\t\tif (this.isCheckable()) {\n\t\t\tnewValue = hasTarget ? !!event.target.checked : !!event;\n\t\t} else if (this.type() === this._inputFormats.Number || this.type() === this._inputFormats.Counter) {\n\t\t\tnewValue = hasTarget\n\t\t\t\t? isNaN(event.target.valueAsNumber)\n\t\t\t\t\t? null\n\t\t\t\t\t: event.target.valueAsNumber\n\t\t\t\t: isNaN(Number(event))\n\t\t\t\t\t? null\n\t\t\t\t\t: Number(event);\n\t\t} else {\n\t\t\tnewValue = hasTarget ? event.target.value : event;\n\t\t}\n\n\t\t// Apply the pattern mask for text-like formats: the field shows the formatted\n\t\t// value while the form receives the formatted or unmasked value per `unmaskValue`.\n\t\tif (isMaskActive(this.mask()) && typeof newValue === 'string') {\n\t\t\tconst { masked, unmasked } = applyMask(newValue, this.mask());\n\t\t\tthis._value.set(masked);\n\t\t\tif (hasTarget && event.target) {\n\t\t\t\tevent.target.value = masked;\n\t\t\t}\n\t\t\tconst formValue = this.unmaskValue() ? unmasked : masked;\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t\tthis.onChange?.(formValue);\n\t\t\tthis.valueChange.emit(formValue);\n\t\t\tthis.#scheduleSearch(masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(newValue);\n\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\tthis.onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\t\tthis.#scheduleSearch(newValue);\n\t}\n\n\t/**\n\t * Schedules a debounced {@link search} emit for text-like formats. Coalesces rapid\n\t * keystrokes into a single emit after {@link debounceTime} ms and skips no-op repeats.\n\t *\n\t * @param value - The latest control value.\n\t */\n\t#scheduleSearch(value: HubInputValue): void {\n\t\tif (!this.isTextLike()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst term = value == null ? '' : String(value);\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis.#searchTimer = setTimeout(() => {\n\t\t\tif (term === this.#lastSearchTerm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastSearchTerm = term;\n\t\t\tthis.search.emit(term);\n\t\t}, this.debounceTime());\n\t}\n\n\t/** Increments the counter value, clamped to `max`. */\n\tprotected add(): void {\n\t\tconst current = Number(this._value() ?? this.min() ?? 0);\n\t\tconst next = current + this.step();\n\t\tconst max = this.max();\n\n\t\tthis.setValue(isDefined(max) && next > max! ? max! : next);\n\t}\n\n\t/** Decrements the counter value, clamped to `min`. */\n\tprotected subtract(): void {\n\t\tconst current = Number(this._value() ?? this.max() ?? 0);\n\t\tconst next = current - this.step();\n\t\tconst min = this.min();\n\n\t\tthis.setValue(isDefined(min) && next < min! ? min! : next);\n\t}\n\n\t/** Toggles password visibility. */\n\tprotected togglePassword(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.passwordRevealed.update((revealed) => !revealed);\n\t\t}\n\t}\n\n\t/**\n\t * Tracks the Caps Lock modifier from key events. `getModifierState` is the only reliable\n\t * signal — there is no global Caps Lock state exposed to the page.\n\t */\n\tprotected updateCapsLock(event: KeyboardEvent): void {\n\t\tif (this.type() !== this._inputFormats.Password || !this.capsLockWarning()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.capsLockOn.set(event.getModifierState?.('CapsLock') ?? false);\n\t}\n\n\t/**\n\t * Re-masks the password when focus leaves the whole group. `focusout` fires when focus moves\n\t * onto the toggle too, so the handler ignores transitions that stay inside the group —\n\t * otherwise clicking \"hide\" would re-mask on blur and immediately re-reveal on click.\n\t */\n\tprotected handleGroupFocusOut(event: FocusEvent): void {\n\t\tif (this.type() !== this._inputFormats.Password) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = event.currentTarget as HTMLElement;\n\n\t\tif (group.contains(event.relatedTarget as Node | null)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.capsLockOn.set(false);\n\n\t\tif (this.hideOnBlur() && this.passwordRevealed()) {\n\t\t\tthis.passwordRevealed.set(false);\n\t\t}\n\t}\n\n\t/** Opens the native file dialog. */\n\tprotected triggerFile(): void {\n\t\tif (!this.disabled() && !this.readonly()) {\n\t\t\tthis.fileInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Reads the selected file(s) from the native input and propagates them.\n\t *\n\t * @param event - The native `change` event of the file input.\n\t */\n\tprotected setFileValue(event: Event): void {\n\t\tconst files = (event.target as HTMLInputElement).files;\n\t\tconst value: HubInputValue = !files || files.length === 0 ? null : this.multiple() ? files : files.item(0);\n\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/** Resets a text-like control to empty via the internal clear button. */\n\tprotected clear(): void {\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis._value.set('');\n\t\tthis.onChange?.('');\n\t\tthis.valueChange.emit('');\n\t\tthis.search.emit('');\n\t}\n\n\t/** Clears the selected file(s). */\n\tprotected clearFile(): void {\n\t\tconst native = this.fileInput()?.nativeElement;\n\n\t\tif (native) {\n\t\t\tnative.value = '';\n\t\t}\n\n\t\tthis._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\n\t}\n\n\t/**\n\t * Warns once, in development only, that the `file` format is deprecated.\n\t *\n\t * It still works, but it cannot enforce `accept` on a drop, has no size limits, no preview and\n\t * no per-file removal. `<hub-file-input>` supersedes it.\n\t */\n\t#warnDeprecatedFileFormat(): void {\n\t\tif (isDevMode() && this.type() === this._inputFormats.File) {\n\t\t\tconsole.warn(\n\t\t\t\t'[ng-hub-ui-forms] <hub-input type=\"file\"> is deprecated since 22.6.0 and will be removed in the next major. Use <hub-file-input> instead.'\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Auto-attaches `Validators.min` / `Validators.max` to the bound reactive control when `min` /\n\t * `max` are set and not already present, so the inline bounds become real validation.\n\t */\n\t#attachNumericValidators(): void {\n\t\tconst control = this._control?.control;\n\n\t\tif (!control || !this._isFormControl) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tlet changed = false;\n\n\t\tif (isDefined(min) && !controlHasMinOrMaxValidator(control, 'min')) {\n\t\t\tcontrol.addValidators(Validators.min(min!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (isDefined(max) && !controlHasMinOrMaxValidator(control, 'max')) {\n\t\t\tcontrol.addValidators(Validators.max(max!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) {\n\t\t\tcontrol.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input (string or string[]) to a string list.\n\t *\n\t * @param value - The raw addon input.\n\t * @returns The list of addon strings (empty when none).\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-input\"\n\t[class.hub-field--horizontal]=\"!isCheckable() && (labelType() === _labelTypes.Horizontal || (!label() && required()))\"\n\t[class.hub-input--checkable]=\"isCheckable()\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t/>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<span class=\"hub-input__check-label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</span>\n\t\t\t}\n\t\t</label>\n\t} @else {\n\t\t@if ((label() || required()) && labelType() !== _labelTypes.Floating) {\n\t\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t\t{{ label() }}\n\t\t\t\t@if (required()) {\n\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t}\n\n\t\t<div class=\"hub-field__body hub-input__row\">\n\t\t\t@switch (type()) {\n\t\t\t\t@case (_inputFormats.Counter) {\n\t\t\t\t\t<div class=\"hub-input__group hub-input__counter\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (min() != null && $any(_value()) <= $any(min()))\"\n\t\t\t\t\t\t\taria-label=\"Decrease\"\n\t\t\t\t\t\t\t(click)=\"subtract()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t&minus;\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--counter\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t\t[attr.min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[attr.max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (max() != null && $any(_value()) >= $any(max()))\"\n\t\t\t\t\t\t\taria-label=\"Increase\"\n\t\t\t\t\t\t\t(click)=\"add()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.Color) {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.File) {\n\t\t\t\t\t<div class=\"hub-input__file\" [class.hub-input__file--invalid]=\"isInvalid\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#fileInput\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-native\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t(change)=\"setFileValue($event)\"\n\t\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-button\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"triggerFile()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ buttonLabel() }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<span class=\"hub-input__file-name\">{{ fileLabel() || placeholder() }}</span>\n\t\t\t\t\t\t@if (fileLabel() && !disabled() && !readonly()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__file-clear\" aria-label=\"Clear\" (click)=\"clearFile()\">\n\t\t\t\t\t\t\t\t&times;\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@default {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-input__group\"\n\t\t\t\t\t\t[class.hub-input__group--floating]=\"labelType() === _labelTypes.Floating\"\n\t\t\t\t\t\t[class.hub-input__group--has-prefix]=\"hasPrefix()\"\n\t\t\t\t\t\t[class.hub-input__group--has-suffix]=\"hasSuffix()\"\n\t\t\t\t\t\t[class.hub-input__group--has-prepend]=\"hasPrepend() || hasPrependTpl()\"\n\t\t\t\t\t\t[class.hub-input__group--has-append]=\"hasAppend() || hasAppendTpl()\"\n\t\t\t\t\t\t[class.hub-input__group--has-toggle]=\"showsPasswordToggle()\"\n\t\t\t\t\t\t(focusout)=\"handleGroupFocusOut($event)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t\t\t\t<span class=\"hub-input__attached hub-input__attached--prepend\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t\t\t\t<span class=\"hub-input__addon hub-input__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<span class=\"hub-input__affix hub-input__affix--prefix\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<ng-content select=\"[hubInputPrefix]\"></ng-content>\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"hub-field__control\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[type]=\"resolvedType()\"\n\t\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t\t(keyup.enter)=\"enter.emit(_value())\"\n\t\t\t\t\t\t\t(keydown)=\"updateCapsLock($event)\"\n\t\t\t\t\t\t\t(keyup)=\"updateCapsLock($event)\"\n\t\t\t\t\t\t\t[placeholder]=\"labelType() === _labelTypes.Floating ? placeholder() || ' ' : placeholder()\"\n\t\t\t\t\t\t\t[attr.min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[attr.max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"autocomplete() || null\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t@if (showClear()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__clear\" aria-label=\"Clear\" (click)=\"clear()\"></button>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<span class=\"hub-input__affix hub-input__affix--suffix\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<ng-content select=\"[hubInputSuffix]\"></ng-content>\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t\t\t\t<span class=\"hub-input__addon hub-input__addon--append\">{{ addon }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<!-- Attached content goes last: addons label the field, an action acts on it. -->\n\t\t\t\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t\t\t\t<span class=\"hub-input__attached hub-input__attached--append\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (showsPasswordToggle()) {\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"hub-input__password-toggle\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"\n\t\t\t\t\t\t\t\t\tpasswordRevealed() ? _passwordLabels.hidePasswordLabel : _passwordLabels.showPasswordLabel\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[attr.aria-pressed]=\"passwordRevealed()\"\n\t\t\t\t\t\t\t\t(click)=\"togglePassword()\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__password-icon\"\n\t\t\t\t\t\t\t\t\t[class.hub-input__password-icon--visible]=\"passwordRevealed()\"\n\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (labelType() === _labelTypes.Floating && (label() || required())) {\n\t\t\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-input__label--floating\">\n\t\t\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (showsCapsLock()) {\n\t\t<div class=\"hub-field__form-text hub-input__capslock\" role=\"status\">{{ _passwordLabels.capsLockWarning }}</div>\n\t}\n\n\t@if (showsStrength()) {\n\t\t<div class=\"hub-input__strength\" [attr.data-level]=\"strengthScore()\">\n\t\t\t<div class=\"hub-input__strength-bar\" role=\"presentation\">\n\t\t\t\t@for (segment of _strengthSegments; track segment) {\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"hub-input__strength-segment\"\n\t\t\t\t\t\t[class.hub-input__strength-segment--active]=\"strengthScore() >= segment\"\n\t\t\t\t\t></span>\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<span class=\"hub-input__strength-label\" aria-live=\"polite\">{{ strengthLabel() }}</span>\n\t\t</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tElementRef,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Character set accepted by the OTP field. */\nexport type HubOtpMode = 'numeric' | 'alphanumeric' | 'alpha';\n\n/**\n * Segmented one-time-code input (`hub-otp-input`): a row of single-character cells for\n * entering verification / 2FA codes. Supports auto-advance, backspace navigation, arrow\n * keys, and pasting the whole code at once. Implements `ControlValueAccessor`, so the\n * form value is the concatenated string.\n *\n * ```html\n * <hub-otp-input formControlName=\"code\" [length]=\"6\" label=\"Verification code\" />\n * <hub-otp-input formControlName=\"pin\" [length]=\"4\" mode=\"numeric\" [secret]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-otp-input',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-otp-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-otp\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div class=\"hub-otp__cells\" role=\"group\" [attr.aria-label]=\"label() || null\" (focusout)=\"onFocusOut($event)\">\n\t\t\t\t\t@for (index of cells(); track index) {\n\t\t\t\t\t\t@if (separatorEvery() && index > 0 && index % separatorEvery() === 0) {\n\t\t\t\t\t\t\t<span class=\"hub-otp__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#cell\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-otp__cell\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[type]=\"secret() ? 'password' : 'text'\"\n\t\t\t\t\t\t\t[attr.inputmode]=\"mode() === 'numeric' ? 'numeric' : 'text'\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"index === 0 ? 'one-time-code' : 'off'\"\n\t\t\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"ariaCellLabel() + ' ' + (index + 1)\"\n\t\t\t\t\t\t\tmaxlength=\"1\"\n\t\t\t\t\t\t\t[value]=\"chars()[index]\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(input)=\"onInput(index, $event)\"\n\t\t\t\t\t\t\t(keydown)=\"onKeydown(index, $event)\"\n\t\t\t\t\t\t\t(paste)=\"onPaste(index, $event)\"\n\t\t\t\t\t\t\t(focus)=\"select(index)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ formText() }}</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{\n\t\t\t\t\t\t\t\t\t\tgetInvalidFeedbackTemplate(error.key, error.value)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './otp.component.scss'\n})\nexport class HubOtpInputComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Number of cells / characters in the code. */\n\treadonly length = input(6, { transform: numberAttribute });\n\n\t/** Accepted character set. */\n\treadonly mode = input<HubOtpMode>('numeric');\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the cells. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Masks the characters like a password. */\n\treadonly secret = input(false, { transform: booleanAttribute });\n\n\t/** Renders the cells read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Inserts a visual separator every N cells (0 = none). */\n\treadonly separatorEvery = input(0, { transform: numberAttribute });\n\n\t/** The separator character shown between groups. */\n\treadonly separator = input<string>('-');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Emits the full code once every cell is filled. */\n\treadonly completed = output<string>();\n\n\t/** The current value, stored as a plain string. */\n\treadonly #value = signal<string>('');\n\n\t/** References to the cell inputs, for focus management. */\n\tprivate readonly _cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n\t/** Index list driving the `@for`. */\n\treadonly cells = computed<number[]>(() => Array.from({ length: Math.max(1, this.length()) }, (_, index) => index));\n\n\t/** Per-cell characters derived from the current value. */\n\treadonly chars = computed<string[]>(() => {\n\t\tconst value = this.#value();\n\t\treturn Array.from({ length: Math.max(1, this.length()) }, (_, index) => value[index] ?? '');\n\t});\n\n\t/** Regex matching a single accepted character for the active mode. */\n\treadonly #pattern = computed<RegExp>(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'alpha':\n\t\t\t\treturn /[a-zA-Z]/;\n\t\t\tcase 'alphanumeric':\n\t\t\t\treturn /[a-zA-Z0-9]/;\n\t\t\tdefault:\n\t\t\t\treturn /[0-9]/;\n\t\t}\n\t});\n\n\t/** ARIA label prefix for each cell. */\n\treadonly ariaCellLabel = computed<string>(() => (this.mode() === 'numeric' ? 'Digit' : 'Character'));\n\n\twriteValue(value: unknown): void {\n\t\tconst raw = typeof value === 'string' ? value : value == null ? '' : String(value);\n\t\tthis.#value.set(this.#sanitize(raw).slice(0, this.length()));\n\t}\n\n\t/** Handles typing into a cell: keep the last valid char, advance focus, and emit. */\n\tprotected onInput(index: number, event: Event): void {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tconst typed = this.#sanitize(target.value);\n\t\tconst char = typed.slice(-1);\n\t\tconst chars = [...this.chars()];\n\n\t\tif (!char) {\n\t\t\tchars[index] = '';\n\t\t\ttarget.value = '';\n\t\t\tthis.#commit(chars.join(''));\n\t\t\treturn;\n\t\t}\n\n\t\tchars[index] = char;\n\t\ttarget.value = char;\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(index + 1);\n\t}\n\n\t/** Handles navigation / deletion keys. */\n\tprotected onKeydown(index: number, event: KeyboardEvent): void {\n\t\tconst chars = [...this.chars()];\n\n\t\tif (event.key === 'Backspace') {\n\t\t\tif (chars[index]) {\n\t\t\t\tchars[index] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t} else if (index > 0) {\n\t\t\t\tchars[index - 1] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t\tthis.#focus(index - 1);\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowLeft' && index > 0) {\n\t\t\tthis.#focus(index - 1);\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowRight' && index < this.length() - 1) {\n\t\t\tthis.#focus(index + 1);\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t/** Distributes a pasted code across the cells starting at the current one. */\n\tprotected onPaste(index: number, event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pasted = this.#sanitize(event.clipboardData?.getData('text') ?? '');\n\t\tif (!pasted) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst chars = [...this.chars()];\n\t\tlet cursor = index;\n\t\tfor (const char of pasted) {\n\t\t\tif (cursor >= this.length()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchars[cursor] = char;\n\t\t\tcursor++;\n\t\t}\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(Math.min(cursor, this.length() - 1));\n\t}\n\n\t/** Selects the cell content on focus for quick overwrite. */\n\tprotected select(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.select();\n\t}\n\n\t/** Marks the field as touched when focus leaves the whole group. */\n\tprotected onFocusOut(event: FocusEvent): void {\n\t\tconst next = event.relatedTarget as Node | null;\n\t\tconst group = event.currentTarget as HTMLElement;\n\t\tif (!next || !group.contains(next)) {\n\t\t\tthis.onTouched();\n\t\t}\n\t}\n\n\t/** Keeps only characters allowed by the active mode. */\n\t#sanitize(value: string): string {\n\t\tconst pattern = this.#pattern();\n\t\treturn [...value].filter((char) => pattern.test(char)).join('');\n\t}\n\n\t/** Stores, propagates and (when full) signals completion. */\n\t#commit(value: string): void {\n\t\tconst next = value.slice(0, this.length());\n\t\tthis.#value.set(next);\n\t\tthis.onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t\tif (next.length === this.length()) {\n\t\t\tthis.completed.emit(next);\n\t\t}\n\t}\n\n\t/** Moves focus to the cell at `index`, if it exists. */\n\t#focus(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.focus();\n\t}\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\n\n/**\n * Auto-resizes a `<textarea>` to fit its content height.\n *\n * @example\n * ```html\n * <textarea hubAutoresize></textarea>\n * ```\n */\n@Directive({\n\tselector: 'textarea[hubAutoresize]',\n\thost: {\n\t\t'(:focusin)': 'onChange()',\n\t\t'(:focusout)': 'onChange()',\n\t\t'(:input)': 'onChange()'\n\t}\n})\nexport class HubAutoresizeDirective implements OnInit {\n\treadonly #elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n\n\t/** Whether auto-resizing is enabled. */\n\treadonly hubAutoresize = input(true, { transform: booleanAttribute });\n\n\tonChange(): void {\n\t\tthis.resize();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.#elementRef.nativeElement.scrollHeight) {\n\t\t\tsetTimeout(() => this.resize(), 1);\n\t\t}\n\t}\n\n\t/** Resizes the textarea to fit its content. */\n\tresize(): void {\n\t\tif (this.hubAutoresize()) {\n\t\t\tconst el = this.#elementRef.nativeElement;\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 4 + 'px';\n\t\t}\n\t}\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HubAutoresizeDirective } from '../../directives/autoresize.directive';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Accessible multi-line text field with optional auto-resize, character counter and automatic\n * validation-error display.\n *\n * Shares all the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}.\n *\n * @example\n * ```html\n * <hub-textarea formControlName=\"bio\" label=\"Biography\" [rows]=\"4\" [maxlength]=\"280\" [counter]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-textarea',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule, HubAutoresizeDirective],\n\ttemplateUrl: './textarea.component.html',\n\tstyleUrl: './textarea.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-textarea-host]': 'true'\n\t}\n})\nexport class HubTextareaComponent extends HubFieldControl {\n\t/** Text shown before the control as a group addon. A string is one; an array a run. */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Normalized addon lists. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether anything is attached to each edge, which squares off that side. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0 || !!this._prependTpl());\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0 || !!this._appendTpl());\n\n\t/** Drops empty entries so `prepend=\"\"` renders nothing rather than an empty box. */\n\t#toAddonList(value: string | string[]): string[] {\n\t\treturn Array.isArray(value) ? value.filter((item) => item != null && item !== '') : value ? [value] : [];\n\t}\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<string>('');\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = input<string>('');\n\n\t/** Number of visible text rows. */\n\treadonly rows = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Number of visible columns. When set, the textarea stops stretching to full width. */\n\treadonly cols = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Maximum number of characters. Drives both the native limit and the counter. */\n\treadonly maxlength = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Whether the textarea grows to fit its content. */\n\treadonly autoresize = input(false, { transform: booleanAttribute });\n\n\t/** Whether to show a character counter below the control. */\n\treadonly counter = input(false, { transform: booleanAttribute });\n\n\t/** Whether the textarea is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported in the MVP. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Current character counter text (e.g. `12 / 280`). */\n\tprotected readonly counterText = computed<string>(() => {\n\t\tconst length = (this._value() ?? '').length;\n\t\tconst max = this.maxlength();\n\n\t\treturn max != null ? `${length} / ${max}` : `${length}`;\n\t});\n\n\twriteValue(value: string | null): void {\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Updates the value from the textarea and propagates it to the form and outputs.\n\t *\n\t * @param value - The new textarea value.\n\t */\n\tsetValue(value: string): void {\n\t\tthis._value.set(value ?? '');\n\t\tthis.updateNativeErrors(this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`));\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-textarea\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\tclass=\"hub-textarea__group\"\n\t\t\t[class.hub-textarea__group--has-prepend]=\"hasPrepend()\"\n\t\t\t[class.hub-textarea__group--has-append]=\"hasAppend()\"\n\t\t>\n\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-textarea__attached hub-textarea__attached--prepend\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t<span class=\"hub-textarea__addon hub-textarea__addon--prepend\">{{ addon }}</span>\n\t\t\t}\n\t\t\t<textarea\n\t\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[id]=\"id\"\n\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t[ngModel]=\"_value()\"\n\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t[attr.rows]=\"rows()\"\n\t\t\t[attr.cols]=\"cols()\"\n\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[readonly]=\"readonly()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[style.width]=\"cols() ? 'auto' : '100%'\"\n\t\t\t></textarea>\n\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t<span class=\"hub-textarea__addon hub-textarea__addon--append\">{{ addon }}</span>\n\t\t\t}\n\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-textarea__attached hub-textarea__attached--append\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (counter()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Value of `<hub-slider>`: a number in single mode, a `[lower, upper]` tuple in range mode. */\nexport type HubSliderValue = number | [number, number];\n\n/**\n * Accessible numeric slider with an optional value bubble. Supports a single thumb or a\n * **dual-thumb range** (`range`), whose value is a `[lower, upper]` tuple.\n *\n * Shares the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}. The filled track and bubbles are\n * positioned from the `--hub-slider-from` / `--hub-slider-to` percentages.\n *\n * @example\n * ```html\n * <hub-slider formControlName=\"volume\" label=\"Volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n * <hub-slider formControlName=\"price\" label=\"Price\" [range]=\"true\" [min]=\"0\" [max]=\"1000\" />\n * ```\n */\n@Component({\n\tselector: 'hub-slider',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './slider.component.html',\n\tstyleUrl: './slider.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-slider-host]': 'true'\n\t}\n})\nexport class HubSliderComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubSliderValue>(0);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Whether the slider selects a `[lower, upper]` range with two thumbs. */\n\treadonly range = input(false, { transform: booleanAttribute });\n\n\t/** Minimum value. */\n\treadonly min = input<number, string | number>(0, { transform: numberAttribute });\n\n\t/** Maximum value. */\n\treadonly max = input<number, string | number>(100, { transform: numberAttribute });\n\n\t/** Step increment. */\n\treadonly step = input<number, string | number>(1, { transform: numberAttribute });\n\n\t/** Whether to show the value bubble(s) above the thumb(s). */\n\treadonly showValue = input(true, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubSliderValue>();\n\n\t/** Current single value (single mode). */\n\tprotected readonly single = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : v;\n\t});\n\n\t/** Lower bound of the current range (range mode). */\n\tprotected readonly lower = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : this.min();\n\t});\n\n\t/** Upper bound of the current range (range mode). */\n\tprotected readonly upper = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[1] : this.max();\n\t});\n\n\t/** Single-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly percent = computed<number>(() => this.#toPercent(this.single()));\n\n\t/** Lower-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly lowerPercent = computed<number>(() => this.#toPercent(this.lower()));\n\n\t/** Upper-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly upperPercent = computed<number>(() => this.#toPercent(this.upper()));\n\n\twriteValue(value: HubSliderValue | null): void {\n\t\tif (this.range()) {\n\t\t\tconst tuple = Array.isArray(value) ? value : [this.min(), this.max()];\n\t\t\tthis._value.set([+tuple[0], +tuple[1]]);\n\t\t} else {\n\t\t\tthis._value.set(+((value as number) ?? 0));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the single value and propagates it.\n\t *\n\t * @param value - The new value (string from the DOM or number).\n\t */\n\tsetValue(value: string | number): void {\n\t\tthis.#emit(+value);\n\t}\n\n\t/**\n\t * Updates the lower thumb (clamped not to cross the upper thumb).\n\t *\n\t * @param value - The new lower value.\n\t */\n\tsetLower(value: string | number): void {\n\t\tconst next = Math.min(+value, this.upper());\n\t\tthis.#emit([next, this.upper()]);\n\t}\n\n\t/**\n\t * Updates the upper thumb (clamped not to cross the lower thumb).\n\t *\n\t * @param value - The new upper value.\n\t */\n\tsetUpper(value: string | number): void {\n\t\tconst next = Math.max(+value, this.lower());\n\t\tthis.#emit([this.lower(), next]);\n\t}\n\n\t#emit(value: HubSliderValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t#toPercent(value: number): number {\n\t\tconst span = this.max() - this.min();\n\t\tconst ratio = span === 0 ? 0 : ((value - this.min()) / span) * 100;\n\n\t\treturn Math.min(100, Math.max(0, ratio));\n\t}\n}\n","<div\n\tclass=\"hub-field hub-slider\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n\t[style.--hub-slider-percent]=\"percent()\"\n\t[style.--hub-slider-from]=\"lowerPercent()\"\n\t[style.--hub-slider-to]=\"upperPercent()\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div\n\t\tclass=\"hub-field__body hub-slider__range\"\n\t\t[class.hub-slider__range--dual]=\"range()\"\n\t\t[class.hub-slider__range--flush]=\"!showValue()\"\n\t>\n\t\t@if (range()) {\n\t\t\t<div class=\"hub-slider__rail\" aria-hidden=\"true\"></div>\n\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--lower\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"lower()\"\n\t\t\t\t(input)=\"setLower($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range start\"\n\t\t\t\t[attr.aria-valuetext]=\"lower()\"\n\t\t\t/>\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--upper\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"upper()\"\n\t\t\t\t(input)=\"setUpper($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range end\"\n\t\t\t\t[attr.aria-valuetext]=\"upper()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--lower\" aria-hidden=\"true\">{{ lower() }}</span>\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--upper\" aria-hidden=\"true\">{{ upper() }}</span>\n\t\t\t}\n\t\t} @else {\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"single()\"\n\t\t\t\t(input)=\"setValue($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-valuetext]=\"single()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble\" aria-hidden=\"true\">{{ single() }}</span>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubSegmentedOption } from '../components/segmented/segmented.component';\n\n/** Context handed to a projected `hubSegmentedOption` template. */\nexport interface HubSegmentedOptionContext {\n\t/** The option being rendered. */\n\t$implicit: HubSegmentedOption;\n\t/** Whether the option is currently selected. */\n\tselected: boolean;\n\t/** Position of the option within the control. */\n\tindex: number;\n}\n\n/**\n * Replaces the rendering of each option's content in `<hub-segmented>`.\n *\n * By default a segment renders its `label` as plain text; this template takes over the\n * inside of the segment button (icons, badges, rich markup) while the component keeps\n * owning selection state, keyboard navigation and ARIA semantics.\n *\n * @example\n * ```html\n * <hub-segmented formControlName=\"view\" [options]=\"views\">\n * <ng-template hubSegmentedOption let-option let-selected=\"selected\">\n * <hub-icon [name]=\"option.value\" [label]=\"option.label\" />\n * {{ option.label }}\n * </ng-template>\n * </hub-segmented>\n * ```\n */\n@Directive({\n\tselector: '[hubSegmentedOption]'\n})\nexport class HubSegmentedOptionDirective {\n\t/** Template reference for the option content. */\n\treadonly template = inject<TemplateRef<HubSegmentedOptionContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-option` and the extra bindings.\n\t */\n\tstatic ngTemplateContextGuard(\n\t\t_directive: HubSegmentedOptionDirective,\n\t\t_context: unknown\n\t): _context is HubSegmentedOptionContext {\n\t\treturn true;\n\t}\n}\n","import {\n\tafterNextRender,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tPLATFORM_ID,\n\tviewChild,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubSegmentedOptionDirective } from '../../directives/segmented-option.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { resolveHubAccent } from 'ng-hub-ui-utils';\n\n/** A single choice rendered by {@link HubSegmentedComponent}. */\nexport interface HubSegmentedOption {\n\t/** Value written to the form control when this option is selected. */\n\tvalue: unknown;\n\t/** Visible label for the segment. */\n\tlabel: string;\n\t/** When `true`, the segment is rendered but cannot be selected. */\n\tdisabled?: boolean;\n}\n\n/** Density of the segmented control. */\nexport type HubSegmentedSize = 'sm' | 'md' | 'lg';\n\n/**\n * Segmented button bar (`hub-segmented`): a compact group of 2..n options rendered as an inline\n * (or vertical) segmented control. A full `ng-hub-ui-forms` field — it extends\n * {@link HubFieldControl}, so it binds with `formControlName` / `ngModel` and shares the label,\n * helper text and validation chrome with every other field.\n *\n * Two selection modes:\n * - **single** (default): exclusive choice following the WAI-ARIA radiogroup pattern\n * (`role=\"radiogroup\"` wrapping `role=\"radio\"` buttons). Arrow keys move focus **and** select.\n * The value is the scalar of the chosen option.\n * - **multiple** (`[multiple]=\"true\"`): a toggle group (`role=\"group\"` wrapping\n * `aria-pressed` buttons). Clicking toggles membership; arrow keys only move focus.\n * The value is an array of the selected option values.\n *\n * ```html\n * <hub-segmented\n * formControlName=\"view\"\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'grid', label: 'Grid' }]\"\n * />\n *\n * <hub-segmented formControlName=\"tags\" [multiple]=\"true\" [vertical]=\"true\" [options]=\"tags\" />\n * ```\n */\n@Component({\n\tselector: 'hub-segmented',\n\tstandalone: true,\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './segmented.component.html',\n\tstyleUrl: './segmented.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-segmented-host]': 'true'\n\t}\n})\nexport class HubSegmentedComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\n\t/** The selectable options, in render order. */\n\treadonly options = input<HubSegmentedOption[]>([]);\n\n\t/** Optional `hubSegmentedOption` template replacing each option's content. */\n\tprotected readonly optionTpt = contentChild(HubSegmentedOptionDirective);\n\n\t/** Visual density. */\n\treadonly size = input<HubSegmentedSize>('md');\n\n\t/**\n\t * Accent for the selected pill. Accepts ANY colour value:\n\t * - a built-in semantic name (`primary`, `success`, …) or any registered accent → resolves to\n\t * the matching `--hub-sys-color-*` design-system token;\n\t * - a literal colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `rebeccapurple`) → used as-is.\n\t * Both the sliding indicator and the multiple-mode pill follow it, and the selected label gets a\n\t * derived contrast colour automatically. Empty string (default) keeps the neutral white-pill look.\n\t */\n\treadonly color = input<string>('');\n\n\t/**\n\t * Resolves {@link color} to a paintable accent for the `--hub-segmented-accent` slot: a bareword\n\t * becomes a `--hub-sys-color-*` token with the word as raw fallback (so named CSS colours work\n\t * too), while a literal `#hex` / `rgb()` / `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly accentVar = computed<string | null>(() => resolveHubAccent(this.color()));\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** When `true`, options toggle independently and the value is an array. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** When `true`, the segments stack vertically instead of sitting in a row. */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Currently selected value — a scalar in single mode, an array in multiple mode. */\n\treadonly value = model<unknown>();\n\n\t/** The rendered option buttons, used to move focus during keyboard navigation. */\n\tprivate readonly _buttons = viewChildren<ElementRef<HTMLButtonElement>>('optionButton');\n\n\t/** The segmented bar element — the positioning context for the sliding indicator. */\n\tprivate readonly _bar = viewChild<ElementRef<HTMLElement>>('segmentedBar');\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// The sliding indicator is a browser-only affordance (it measures rendered geometry) and\n\t\t// applies to single mode only. Guard SSR so no DOM reads happen off the browser.\n\t\tif (this._isBrowser) {\n\t\t\t// Re-measure whenever anything that moves or resizes the selected pill changes.\n\t\t\tafterRenderEffect(() => {\n\t\t\t\t// Track the geometry-affecting state so the effect re-runs on any of them.\n\t\t\t\tthis.value();\n\t\t\t\tthis.options();\n\t\t\t\tthis.size();\n\t\t\t\tthis.vertical();\n\t\t\t\tthis.multiple();\n\t\t\t\tthis._buttons();\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\n\t\t\t// Initial placement plus a ResizeObserver so the pill follows layout/reflow changes\n\t\t\t// (container resize, font swaps, wrapping) that no signal reports.\n\t\t\tafterNextRender(() => {\n\t\t\t\tconst bar = this._bar()?.nativeElement;\n\t\t\t\tif (!bar) return;\n\n\t\t\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\t\t\tconst observer = new ResizeObserver(() => this.updateIndicator());\n\t\t\t\t\tobserver.observe(bar);\n\t\t\t\t\tthis._destroyRef.onDestroy(() => observer.disconnect());\n\t\t\t\t}\n\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Index of the option that owns the group's tab stop (roving tabindex): the first selected\n\t * option, or the first enabled option when nothing is selected yet.\n\t */\n\treadonly rovingIndex = computed<number>(() => {\n\t\tconst options = this.options();\n\t\tconst selected = options.findIndex((option) => this.isSelected(option));\n\t\tif (selected >= 0) return selected;\n\t\treturn options.findIndex((option) => !option.disabled);\n\t});\n\n\t/** Whether the given option is currently selected (mode-aware). */\n\tisSelected(option: HubSegmentedOption): boolean {\n\t\tif (this.multiple()) {\n\t\t\tconst current = this.value();\n\t\t\treturn Array.isArray(current) && current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t}\n\n\t\treturn this.#isSameValue(option.value, this.value());\n\t}\n\n\t/**\n\t * Selects (single) or toggles (multiple) an option and notifies the form. No-op when the\n\t * control or the option is disabled.\n\t */\n\tselect(option: HubSegmentedOption): void {\n\t\tif (this.disabled() || option.disabled) return;\n\n\t\tif (this.multiple()) {\n\t\t\tconst current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n\t\t\tconst exists = current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t\tconst next = exists\n\t\t\t\t? current.filter((entry) => !this.#isSameValue(entry, option.value))\n\t\t\t\t: [...current, option.value];\n\t\t\tthis.value.set(next);\n\t\t\tthis.onChange(next);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#isSameValue(option.value, this.value())) return;\n\t\tthis.value.set(option.value);\n\t\tthis.onChange(option.value);\n\t}\n\n\t/**\n\t * Keyboard navigation. In single mode the arrow keys move to (and select) the next / previous\n\t * enabled option (radiogroup pattern); in multiple mode they only move focus and selection is\n\t * left to the native button click (`Space` / `Enter`). `Home` / `End` jump to the first / last\n\t * enabled option.\n\t */\n\tonKeydown(event: KeyboardEvent): void {\n\t\tif (this.disabled()) return;\n\t\tconst options = this.options();\n\t\tif (options.length === 0) return;\n\n\t\tconst current = this.rovingIndex();\n\t\tlet target: number | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#nextEnabled(current, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#nextEnabled(current, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#nextEnabled(-1, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#nextEnabled(options.length, -1);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (target === null) return;\n\t\tevent.preventDefault();\n\n\t\tif (!this.multiple()) {\n\t\t\tthis.select(options[target]);\n\t\t}\n\n\t\tthis._buttons()[target]?.nativeElement.focus();\n\t}\n\n\t/** Writes an incoming value from the form model (coerces to an array in multiple mode). */\n\toverride writeValue(value: unknown): void {\n\t\tif (this.multiple()) {\n\t\t\tthis.value.set(Array.isArray(value) ? value : []);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(value);\n\t}\n\n\t/**\n\t * Measures the selected option (single mode) and writes its position and size onto the bar as\n\t * `--hub-segmented-indicator-{x,y,width,height}` px custom properties, which the sliding\n\t * indicator reads. Collapses the indicator (width/height 0) in multiple mode or when nothing is\n\t * selected. Browser-only — invoked from `afterRenderEffect` / `afterNextRender` / the\n\t * `ResizeObserver`, so the DOM is always up to date when it runs.\n\t */\n\tprivate updateIndicator(): void {\n\t\tconst bar = this._bar()?.nativeElement;\n\t\tif (!bar) return;\n\n\t\tconst collapse = (): void => {\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-width', '0px');\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-height', '0px');\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.options().findIndex((option) => this.isSelected(option));\n\t\tconst button = index >= 0 ? this._buttons()[index]?.nativeElement : undefined;\n\n\t\tif (!button) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tbar.style.setProperty('--hub-segmented-indicator-x', `${button.offsetLeft}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-y', `${button.offsetTop}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-width', `${button.offsetWidth}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-height', `${button.offsetHeight}px`);\n\t}\n\n\t/**\n\t * Finds the next enabled option starting from `from`, moving in `step` direction.\n\t * Wraps around the ends and returns `null` when no enabled option exists.\n\t */\n\t#nextEnabled(from: number, step: number): number | null {\n\t\tconst options = this.options();\n\t\tconst count = options.length;\n\t\tfor (let offset = 1; offset <= count; offset++) {\n\t\t\tconst index = (((from + step * offset) % count) + count) % count;\n\t\t\tif (!options[index].disabled) return index;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Value equality used across selection — reference / `Object.is` semantics. */\n\t#isSameValue(a: unknown, b: unknown): boolean {\n\t\treturn Object.is(a, b);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-segmented-field\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\t#segmentedBar\n\t\t\t[id]=\"id\"\n\t\t\tclass=\"hub-segmented\"\n\t\t\t[class.hub-segmented--sm]=\"size() === 'sm'\"\n\t\t\t[class.hub-segmented--lg]=\"size() === 'lg'\"\n\t\t\t[class.hub-segmented--vertical]=\"vertical()\"\n\t\t\t[class.hub-segmented--multiple]=\"multiple()\"\n\t\t\t[class.hub-segmented--disabled]=\"disabled()\"\n\t\t\t[attr.data-variant]=\"color() || null\"\n\t\t\t[style.--hub-segmented-accent]=\"accentVar()\"\n\t\t\t[attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n\t\t\t[attr.aria-required]=\"multiple() ? null : required() ? 'true' : null\"\n\t\t\t[attr.aria-disabled]=\"disabled() ? 'true' : null\"\n\t\t\t(keydown)=\"onKeydown($event)\"\n\t\t>\n\t\t\t@if (!multiple()) {\n\t\t\t\t<span class=\"hub-segmented__indicator\" aria-hidden=\"true\"></span>\n\t\t\t}\n\n\t\t\t@for (option of options(); track option.value; let index = $index) {\n\t\t\t\t<button\n\t\t\t\t\t#optionButton\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-segmented__option\"\n\t\t\t\t\t[class.hub-segmented__option--selected]=\"isSelected(option)\"\n\t\t\t\t\t[attr.role]=\"multiple() ? null : 'radio'\"\n\t\t\t\t\t[attr.aria-checked]=\"multiple() ? null : isSelected(option)\"\n\t\t\t\t\t[attr.aria-pressed]=\"multiple() ? isSelected(option) : null\"\n\t\t\t\t\t[disabled]=\"disabled() || !!option.disabled\"\n\t\t\t\t\t[tabindex]=\"rovingIndex() === index ? 0 : -1\"\n\t\t\t\t\t(click)=\"select(option)\"\n\t\t\t\t>\n\t\t\t\t\t@if (optionTpt(); as tpt) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: option, selected: isSelected(option), index }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the legend content of a `<hub-fieldset>`.\n *\n * @example\n * ```html\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n * ```\n */\n@Directive({\n\tselector: '[hubLegend]'\n})\nexport class HubLegendDirective {\n\t/** Template reference for the legend content. */\n\treadonly template = inject(TemplateRef);\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, contentChild, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Groups related fields under a `<fieldset>`/`<legend>` and **automatically displays the\n * group-level (cross-field) validation errors** of the bound `FormGroup`/`FormArray`.\n *\n * Bind the target group explicitly with `[group]` (recommended) or by `groupName` resolved from the\n * parent container. Errors set on the group itself — e.g. by `hubAreEqual` — are rendered without\n * any extra wiring, mirroring how the field components show control-level errors.\n *\n * @example\n * ```html\n * <hub-fieldset legend=\"Credentials\" [group]=\"form.controls.credentials\">\n * <hub-input formControlName=\"password\" type=\"password\" label=\"Password\" />\n * <hub-input formControlName=\"confirm\" type=\"password\" label=\"Confirm\" />\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './fieldset.component.html',\n\tstyleUrl: './fieldset.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-fieldset-host]': 'true'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/** Legend text. Ignored when a `hubLegend` template is projected. */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Query for a projected `hubLegend` template. */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n}\n","<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t@if (legend() || legendTmp()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t@if (legendTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"legendTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ legend() }}\n\t\t\t}\n\t\t</legend>\n\t}\n\n\t<div class=\"hub-fieldset__content\">\n\t\t<ng-content></ng-content>\n\t</div>\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</fieldset>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Applied to a reactive `<form [formGroup]>`, **automatically displays the form-level validation\n * errors** (cross-field errors set on the root group) and centralizes submit handling.\n *\n * Because it sits on the same host as the `formGroup` directive, projected `formControlName` fields\n * resolve their control normally — no extra wiring. On submit it prevents the default navigation,\n * marks the whole tree as touched (so every field reveals its errors) and reveals the form-level\n * errors. Bind the form's own `(submit)` event for your handler — there is no custom output, which\n * keeps the API idiomatic and avoids the double-emit you get when a directive output shadows the\n * native `submit` event on a `<form>`.\n *\n * @example\n * ```html\n * <form [formGroup]=\"form\" hubForm (submit)=\"save()\">\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <button type=\"submit\">Save</button>\n * </form>\n * ```\n */\n@Component({\n\tselector: 'form[hubForm]',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-form-host]': 'true',\n\t\t'[class.hub-form--invalid]': 'isInvalid',\n\t\t'(submit)': 'handleSubmit($event)'\n\t}\n})\nexport class HubFormComponent extends HubGroupControl {\n\t/**\n\t * Augments the native form submit: prevents the default navigation, marks the tree as touched\n\t * and flips the submitted state so form-level errors appear. The consumer's own `(submit)`\n\t * binding still fires for their handler.\n\t *\n\t * @param event - The native submit event.\n\t */\n\tprotected handleSubmit(event: Event): void {\n\t\tevent.preventDefault();\n\t\tthis._control()?.markAllAsTouched();\n\t\tthis._submitted.set(true);\n\t}\n}\n","<ng-content></ng-content>\n\n@if (isInvalid) {\n\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t<ul>\n\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t<li>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</li>\n\t\t\t}\n\t\t</ul>\n\t</div>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Presentational legend for a `<hub-fieldset>` (or any grouped section), with optional\n * required/invalid state styling.\n *\n * Use it inside a `hubLegend` template, or standalone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <ng-template hubLegend>\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\n * </ng-template>\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-legend',\n\ttemplate: `<span class=\"hub-legend\" [class.hub-legend--invalid]=\"invalid()\">\n\t\t<ng-content></ng-content>\n\t\t@if (required()) {\n\t\t\t<span class=\"hub-legend__required\" aria-hidden=\"true\">*</span>\n\t\t}\n\t</span>`,\n\tstyleUrl: './legend.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { '[class.hub-legend-host]': 'true' }\n})\nexport class HubLegendComponent {\n\t/** Whether to render the required indicator. */\n\treadonly required = input(false, { transform: booleanAttribute });\n\n\t/** Whether to render the invalid state styling. */\n\treadonly invalid = input(false, { transform: booleanAttribute });\n}\n","/**\n * Rendering formats for `<hub-select>`.\n *\n * - `dropdown` — the ng-select engine (search, virtual scroll, tags…).\n * - `buttons` — a toggle-button group (single or multiple, per `multiple`).\n * - `checkbox` — a list of checkboxes (always multiple).\n * - `radio` — a list of radios (always single).\n */\nexport type HubSelectFormat = 'dropdown' | 'buttons' | 'checkbox' | 'radio';\n\n/**\n * Enum mirror of {@link HubSelectFormat} for ergonomic template usage.\n */\nexport enum HubSelectFormats {\n\tDropdown = 'dropdown',\n\tButtons = 'buttons',\n\tCheckbox = 'checkbox',\n\tRadio = 'radio'\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marks the action **attached to the inline-end edge** of a `<hub-select>` (right in LTR,\n * left in RTL) — a button that acts on whatever is selected: configure it, look it up,\n * create a new one.\n *\n * Deliberately not the same slot as `[hubInputSuffix]`. An input's affix sits *inside*\n * the box, which is right for an icon or a unit but wrong for a control: inside a select\n * it would compete for the same corner as the dropdown arrow and the clear button, and a\n * click landing on the wrong one of the three opens a panel when somebody meant to open a\n * dialog. This one is attached outside the box and shares its border, so the two read as\n * one field with an action on it.\n *\n * Declared as a template rather than projected content because the select's catch-all\n * `<ng-content>` — which carries `<ng-option>` through to the engine — is declared first\n * and would swallow it. Rendering from a template also keeps the action after the control\n * in the DOM, so tabbing reaches the field before the button acting on it.\n *\n * ```html\n * <hub-select [items]=\"products\">\n * <ng-template hubSelectSuffix>\n * <button hubButton variant=\"outline\" color=\"neutral\" (click)=\"configure()\">\n * <hub-icon name=\"pencil-simple\" />\n * </button>\n * </ng-template>\n * </hub-select>\n * ```\n *\n * @deprecated since 22.16.0 — use `[hubAppend]`, which does the same thing on every field that\n * takes one rather than only on the select. Shipped in 22.15.0 and superseded one release later:\n * generalising the slot left the select with two names for one concept, and retiring the narrower\n * one now costs less than documenting the difference forever. This keeps working and renders\n * through the same slot; `[hubAppend]` wins if both are present.\n */\n@Directive({ selector: '[hubSelectSuffix]' })\nexport class HubSelectSuffixDirective {}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst unescapedHTMLExp = /[&<>\"']/g;\nconst hasUnescapedHTMLExp = RegExp(unescapedHTMLExp.source);\nconst htmlEscapes = {\n\t'&': '&amp;',\n\t'<': '&lt;',\n\t'>': '&gt;',\n\t'\"': '&quot;',\n\t\"'\": '&#39;',\n};\n\nexport function escapeHTML(value: string) {\n\treturn value && hasUnescapedHTMLExp.test(value) ? value.replace(unescapedHTMLExp, (chr) => htmlEscapes[chr]) : value;\n}\n\nexport function isDefined(value: any) {\n\treturn value !== undefined && value !== null;\n}\n\nexport function isObject(value: any) {\n\treturn typeof value === 'object' && isDefined(value);\n}\n\nexport function isPromise(value: any) {\n\treturn value instanceof Promise;\n}\n\nexport function isFunction(value: any) {\n\treturn value instanceof Function;\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Directive, effect, ElementRef, inject, input, TemplateRef } from '@angular/core';\nimport { escapeHTML } from './value-utils';\n\n@Directive({\n\tselector: '[ngItemLabel]',\n\tstandalone: true,\n})\nexport class NgItemLabelDirective {\n\tprivate element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tngItemLabel = input<string>();\n\tescape = input(true);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tthis.element.nativeElement.innerHTML = this.escape()\n\t\t\t\t? escapeHTML(this.ngItemLabel())\n\t\t\t\t: this.ngItemLabel();\n\t\t})\n\t}\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-option-tmp]',\n\tstandalone: true,\n})\nexport class NgOptionTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-optgroup-tmp]',\n\tstandalone: true,\n})\nexport class NgOptgroupTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-label-tmp]',\n\tstandalone: true,\n})\nexport class NgLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-multi-label-tmp]',\n\tstandalone: true,\n})\nexport class NgMultiLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-header-tmp]',\n\tstandalone: true,\n})\nexport class NgHeaderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-footer-tmp]',\n\tstandalone: true,\n})\nexport class NgFooterTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-notfound-tmp]',\n\tstandalone: true,\n})\nexport class NgNotFoundTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-placeholder-tmp]',\n\tstandalone: true,\n})\nexport class NgPlaceholderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-typetosearch-tmp]',\n\tstandalone: true,\n})\nexport class NgTypeToSearchTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingtext-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingTextTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-tag-tmp]',\n\tstandalone: true,\n})\nexport class NgTagTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingspinner-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingSpinnerTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ng-clearbutton-tmp]', standalone: true })\nexport class NgClearButtonTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n\tplaceholder: string;\n\tfixedPlaceholder = true;\n\tnotFoundText = 'No items found';\n\ttypeToSearchText = 'Type to search';\n\taddTagText = 'Add item';\n\tloadingText = 'Loading...';\n\tclearAllText = 'Clear all';\n\tariaLabelDropdown = 'Options List';\n\tdisableVirtualScroll = true;\n\topenOnEnter = true;\n\tappendTo: string;\n\tbindValue: string;\n\tbindLabel: string;\n\tappearance = 'underline';\n\tclearSearchOnAdd: boolean;\n\tdeselectOnClick: boolean;\n\ttabFocusOnClear = true;\n\t/**\n\t * Controls which DOM event is used to detect outside clicks for closing the dropdown.\n\t * Defaults to 'click'. Set to 'mousedown' to handle early outside interactions\n\t * (useful when backdrops load on click and would otherwise close the dropdown).\n\t */\n\toutsideClickEvent: 'click' | 'mousedown' = 'click';\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\twarn(message: string) {\n\t\tconsole.warn(message);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport function newId() {\n\t// First character is an 'a', it's good practice to tag id to begin with a letter\n\treturn 'axxxxxxxxxxx'.replace(/[x]/g, () => {\n\t\tconst val = (Math.random() * 16) | 0;\n\t\treturn val.toString(16);\n\t});\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst diacritics = {\n\t'\\u24B6': 'A',\n\t'\\uFF21': 'A',\n\t'\\u00C0': 'A',\n\t'\\u00C1': 'A',\n\t'\\u00C2': 'A',\n\t'\\u1EA6': 'A',\n\t'\\u1EA4': 'A',\n\t'\\u1EAA': 'A',\n\t'\\u1EA8': 'A',\n\t'\\u00C3': 'A',\n\t'\\u0100': 'A',\n\t'\\u0102': 'A',\n\t'\\u1EB0': 'A',\n\t'\\u1EAE': 'A',\n\t'\\u1EB4': 'A',\n\t'\\u1EB2': 'A',\n\t'\\u0226': 'A',\n\t'\\u01E0': 'A',\n\t'\\u00C4': 'A',\n\t'\\u01DE': 'A',\n\t'\\u1EA2': 'A',\n\t'\\u00C5': 'A',\n\t'\\u01FA': 'A',\n\t'\\u01CD': 'A',\n\t'\\u0200': 'A',\n\t'\\u0202': 'A',\n\t'\\u1EA0': 'A',\n\t'\\u1EAC': 'A',\n\t'\\u1EB6': 'A',\n\t'\\u1E00': 'A',\n\t'\\u0104': 'A',\n\t'\\u023A': 'A',\n\t'\\u2C6F': 'A',\n\t'\\uA732': 'AA',\n\t'\\u00C6': 'AE',\n\t'\\u01FC': 'AE',\n\t'\\u01E2': 'AE',\n\t'\\uA734': 'AO',\n\t'\\uA736': 'AU',\n\t'\\uA738': 'AV',\n\t'\\uA73A': 'AV',\n\t'\\uA73C': 'AY',\n\t'\\u24B7': 'B',\n\t'\\uFF22': 'B',\n\t'\\u1E02': 'B',\n\t'\\u1E04': 'B',\n\t'\\u1E06': 'B',\n\t'\\u0243': 'B',\n\t'\\u0182': 'B',\n\t'\\u0181': 'B',\n\t'\\u24B8': 'C',\n\t'\\uFF23': 'C',\n\t'\\u0106': 'C',\n\t'\\u0108': 'C',\n\t'\\u010A': 'C',\n\t'\\u010C': 'C',\n\t'\\u00C7': 'C',\n\t'\\u1E08': 'C',\n\t'\\u0187': 'C',\n\t'\\u023B': 'C',\n\t'\\uA73E': 'C',\n\t'\\u24B9': 'D',\n\t'\\uFF24': 'D',\n\t'\\u1E0A': 'D',\n\t'\\u010E': 'D',\n\t'\\u1E0C': 'D',\n\t'\\u1E10': 'D',\n\t'\\u1E12': 'D',\n\t'\\u1E0E': 'D',\n\t'\\u0110': 'D',\n\t'\\u018B': 'D',\n\t'\\u018A': 'D',\n\t'\\u0189': 'D',\n\t'\\uA779': 'D',\n\t'\\u01F1': 'DZ',\n\t'\\u01C4': 'DZ',\n\t'\\u01F2': 'Dz',\n\t'\\u01C5': 'Dz',\n\t'\\u24BA': 'E',\n\t'\\uFF25': 'E',\n\t'\\u00C8': 'E',\n\t'\\u00C9': 'E',\n\t'\\u00CA': 'E',\n\t'\\u1EC0': 'E',\n\t'\\u1EBE': 'E',\n\t'\\u1EC4': 'E',\n\t'\\u1EC2': 'E',\n\t'\\u1EBC': 'E',\n\t'\\u0112': 'E',\n\t'\\u1E14': 'E',\n\t'\\u1E16': 'E',\n\t'\\u0114': 'E',\n\t'\\u0116': 'E',\n\t'\\u00CB': 'E',\n\t'\\u1EBA': 'E',\n\t'\\u011A': 'E',\n\t'\\u0204': 'E',\n\t'\\u0206': 'E',\n\t'\\u1EB8': 'E',\n\t'\\u1EC6': 'E',\n\t'\\u0228': 'E',\n\t'\\u1E1C': 'E',\n\t'\\u0118': 'E',\n\t'\\u1E18': 'E',\n\t'\\u1E1A': 'E',\n\t'\\u0190': 'E',\n\t'\\u018E': 'E',\n\t'\\u24BB': 'F',\n\t'\\uFF26': 'F',\n\t'\\u1E1E': 'F',\n\t'\\u0191': 'F',\n\t'\\uA77B': 'F',\n\t'\\u24BC': 'G',\n\t'\\uFF27': 'G',\n\t'\\u01F4': 'G',\n\t'\\u011C': 'G',\n\t'\\u1E20': 'G',\n\t'\\u011E': 'G',\n\t'\\u0120': 'G',\n\t'\\u01E6': 'G',\n\t'\\u0122': 'G',\n\t'\\u01E4': 'G',\n\t'\\u0193': 'G',\n\t'\\uA7A0': 'G',\n\t'\\uA77D': 'G',\n\t'\\uA77E': 'G',\n\t'\\u24BD': 'H',\n\t'\\uFF28': 'H',\n\t'\\u0124': 'H',\n\t'\\u1E22': 'H',\n\t'\\u1E26': 'H',\n\t'\\u021E': 'H',\n\t'\\u1E24': 'H',\n\t'\\u1E28': 'H',\n\t'\\u1E2A': 'H',\n\t'\\u0126': 'H',\n\t'\\u2C67': 'H',\n\t'\\u2C75': 'H',\n\t'\\uA78D': 'H',\n\t'\\u24BE': 'I',\n\t'\\uFF29': 'I',\n\t'\\u00CC': 'I',\n\t'\\u00CD': 'I',\n\t'\\u00CE': 'I',\n\t'\\u0128': 'I',\n\t'\\u012A': 'I',\n\t'\\u012C': 'I',\n\t'\\u0130': 'I',\n\t'\\u00CF': 'I',\n\t'\\u1E2E': 'I',\n\t'\\u1EC8': 'I',\n\t'\\u01CF': 'I',\n\t'\\u0208': 'I',\n\t'\\u020A': 'I',\n\t'\\u1ECA': 'I',\n\t'\\u012E': 'I',\n\t'\\u1E2C': 'I',\n\t'\\u0197': 'I',\n\t'\\u24BF': 'J',\n\t'\\uFF2A': 'J',\n\t'\\u0134': 'J',\n\t'\\u0248': 'J',\n\t'\\u24C0': 'K',\n\t'\\uFF2B': 'K',\n\t'\\u1E30': 'K',\n\t'\\u01E8': 'K',\n\t'\\u1E32': 'K',\n\t'\\u0136': 'K',\n\t'\\u1E34': 'K',\n\t'\\u0198': 'K',\n\t'\\u2C69': 'K',\n\t'\\uA740': 'K',\n\t'\\uA742': 'K',\n\t'\\uA744': 'K',\n\t'\\uA7A2': 'K',\n\t'\\u24C1': 'L',\n\t'\\uFF2C': 'L',\n\t'\\u013F': 'L',\n\t'\\u0139': 'L',\n\t'\\u013D': 'L',\n\t'\\u1E36': 'L',\n\t'\\u1E38': 'L',\n\t'\\u013B': 'L',\n\t'\\u1E3C': 'L',\n\t'\\u1E3A': 'L',\n\t'\\u0141': 'L',\n\t'\\u023D': 'L',\n\t'\\u2C62': 'L',\n\t'\\u2C60': 'L',\n\t'\\uA748': 'L',\n\t'\\uA746': 'L',\n\t'\\uA780': 'L',\n\t'\\u01C7': 'LJ',\n\t'\\u01C8': 'Lj',\n\t'\\u24C2': 'M',\n\t'\\uFF2D': 'M',\n\t'\\u1E3E': 'M',\n\t'\\u1E40': 'M',\n\t'\\u1E42': 'M',\n\t'\\u2C6E': 'M',\n\t'\\u019C': 'M',\n\t'\\u24C3': 'N',\n\t'\\uFF2E': 'N',\n\t'\\u01F8': 'N',\n\t'\\u0143': 'N',\n\t'\\u00D1': 'N',\n\t'\\u1E44': 'N',\n\t'\\u0147': 'N',\n\t'\\u1E46': 'N',\n\t'\\u0145': 'N',\n\t'\\u1E4A': 'N',\n\t'\\u1E48': 'N',\n\t'\\u0220': 'N',\n\t'\\u019D': 'N',\n\t'\\uA790': 'N',\n\t'\\uA7A4': 'N',\n\t'\\u01CA': 'NJ',\n\t'\\u01CB': 'Nj',\n\t'\\u24C4': 'O',\n\t'\\uFF2F': 'O',\n\t'\\u00D2': 'O',\n\t'\\u00D3': 'O',\n\t'\\u00D4': 'O',\n\t'\\u1ED2': 'O',\n\t'\\u1ED0': 'O',\n\t'\\u1ED6': 'O',\n\t'\\u1ED4': 'O',\n\t'\\u00D5': 'O',\n\t'\\u1E4C': 'O',\n\t'\\u022C': 'O',\n\t'\\u1E4E': 'O',\n\t'\\u014C': 'O',\n\t'\\u1E50': 'O',\n\t'\\u1E52': 'O',\n\t'\\u014E': 'O',\n\t'\\u022E': 'O',\n\t'\\u0230': 'O',\n\t'\\u00D6': 'O',\n\t'\\u022A': 'O',\n\t'\\u1ECE': 'O',\n\t'\\u0150': 'O',\n\t'\\u01D1': 'O',\n\t'\\u020C': 'O',\n\t'\\u020E': 'O',\n\t'\\u01A0': 'O',\n\t'\\u1EDC': 'O',\n\t'\\u1EDA': 'O',\n\t'\\u1EE0': 'O',\n\t'\\u1EDE': 'O',\n\t'\\u1EE2': 'O',\n\t'\\u1ECC': 'O',\n\t'\\u1ED8': 'O',\n\t'\\u01EA': 'O',\n\t'\\u01EC': 'O',\n\t'\\u00D8': 'O',\n\t'\\u01FE': 'O',\n\t'\\u0186': 'O',\n\t'\\u019F': 'O',\n\t'\\uA74A': 'O',\n\t'\\uA74C': 'O',\n\t'\\u01A2': 'OI',\n\t'\\uA74E': 'OO',\n\t'\\u0222': 'OU',\n\t'\\u24C5': 'P',\n\t'\\uFF30': 'P',\n\t'\\u1E54': 'P',\n\t'\\u1E56': 'P',\n\t'\\u01A4': 'P',\n\t'\\u2C63': 'P',\n\t'\\uA750': 'P',\n\t'\\uA752': 'P',\n\t'\\uA754': 'P',\n\t'\\u24C6': 'Q',\n\t'\\uFF31': 'Q',\n\t'\\uA756': 'Q',\n\t'\\uA758': 'Q',\n\t'\\u024A': 'Q',\n\t'\\u24C7': 'R',\n\t'\\uFF32': 'R',\n\t'\\u0154': 'R',\n\t'\\u1E58': 'R',\n\t'\\u0158': 'R',\n\t'\\u0210': 'R',\n\t'\\u0212': 'R',\n\t'\\u1E5A': 'R',\n\t'\\u1E5C': 'R',\n\t'\\u0156': 'R',\n\t'\\u1E5E': 'R',\n\t'\\u024C': 'R',\n\t'\\u2C64': 'R',\n\t'\\uA75A': 'R',\n\t'\\uA7A6': 'R',\n\t'\\uA782': 'R',\n\t'\\u24C8': 'S',\n\t'\\uFF33': 'S',\n\t'\\u1E9E': 'S',\n\t'\\u015A': 'S',\n\t'\\u1E64': 'S',\n\t'\\u015C': 'S',\n\t'\\u1E60': 'S',\n\t'\\u0160': 'S',\n\t'\\u1E66': 'S',\n\t'\\u1E62': 'S',\n\t'\\u1E68': 'S',\n\t'\\u0218': 'S',\n\t'\\u015E': 'S',\n\t'\\u2C7E': 'S',\n\t'\\uA7A8': 'S',\n\t'\\uA784': 'S',\n\t'\\u24C9': 'T',\n\t'\\uFF34': 'T',\n\t'\\u1E6A': 'T',\n\t'\\u0164': 'T',\n\t'\\u1E6C': 'T',\n\t'\\u021A': 'T',\n\t'\\u0162': 'T',\n\t'\\u1E70': 'T',\n\t'\\u1E6E': 'T',\n\t'\\u0166': 'T',\n\t'\\u01AC': 'T',\n\t'\\u01AE': 'T',\n\t'\\u023E': 'T',\n\t'\\uA786': 'T',\n\t'\\uA728': 'TZ',\n\t'\\u24CA': 'U',\n\t'\\uFF35': 'U',\n\t'\\u00D9': 'U',\n\t'\\u00DA': 'U',\n\t'\\u00DB': 'U',\n\t'\\u0168': 'U',\n\t'\\u1E78': 'U',\n\t'\\u016A': 'U',\n\t'\\u1E7A': 'U',\n\t'\\u016C': 'U',\n\t'\\u00DC': 'U',\n\t'\\u01DB': 'U',\n\t'\\u01D7': 'U',\n\t'\\u01D5': 'U',\n\t'\\u01D9': 'U',\n\t'\\u1EE6': 'U',\n\t'\\u016E': 'U',\n\t'\\u0170': 'U',\n\t'\\u01D3': 'U',\n\t'\\u0214': 'U',\n\t'\\u0216': 'U',\n\t'\\u01AF': 'U',\n\t'\\u1EEA': 'U',\n\t'\\u1EE8': 'U',\n\t'\\u1EEE': 'U',\n\t'\\u1EEC': 'U',\n\t'\\u1EF0': 'U',\n\t'\\u1EE4': 'U',\n\t'\\u1E72': 'U',\n\t'\\u0172': 'U',\n\t'\\u1E76': 'U',\n\t'\\u1E74': 'U',\n\t'\\u0244': 'U',\n\t'\\u24CB': 'V',\n\t'\\uFF36': 'V',\n\t'\\u1E7C': 'V',\n\t'\\u1E7E': 'V',\n\t'\\u01B2': 'V',\n\t'\\uA75E': 'V',\n\t'\\u0245': 'V',\n\t'\\uA760': 'VY',\n\t'\\u24CC': 'W',\n\t'\\uFF37': 'W',\n\t'\\u1E80': 'W',\n\t'\\u1E82': 'W',\n\t'\\u0174': 'W',\n\t'\\u1E86': 'W',\n\t'\\u1E84': 'W',\n\t'\\u1E88': 'W',\n\t'\\u2C72': 'W',\n\t'\\u24CD': 'X',\n\t'\\uFF38': 'X',\n\t'\\u1E8A': 'X',\n\t'\\u1E8C': 'X',\n\t'\\u24CE': 'Y',\n\t'\\uFF39': 'Y',\n\t'\\u1EF2': 'Y',\n\t'\\u00DD': 'Y',\n\t'\\u0176': 'Y',\n\t'\\u1EF8': 'Y',\n\t'\\u0232': 'Y',\n\t'\\u1E8E': 'Y',\n\t'\\u0178': 'Y',\n\t'\\u1EF6': 'Y',\n\t'\\u1EF4': 'Y',\n\t'\\u01B3': 'Y',\n\t'\\u024E': 'Y',\n\t'\\u1EFE': 'Y',\n\t'\\u24CF': 'Z',\n\t'\\uFF3A': 'Z',\n\t'\\u0179': 'Z',\n\t'\\u1E90': 'Z',\n\t'\\u017B': 'Z',\n\t'\\u017D': 'Z',\n\t'\\u1E92': 'Z',\n\t'\\u1E94': 'Z',\n\t'\\u01B5': 'Z',\n\t'\\u0224': 'Z',\n\t'\\u2C7F': 'Z',\n\t'\\u2C6B': 'Z',\n\t'\\uA762': 'Z',\n\t'\\u24D0': 'a',\n\t'\\uFF41': 'a',\n\t'\\u1E9A': 'a',\n\t'\\u00E0': 'a',\n\t'\\u00E1': 'a',\n\t'\\u00E2': 'a',\n\t'\\u1EA7': 'a',\n\t'\\u1EA5': 'a',\n\t'\\u1EAB': 'a',\n\t'\\u1EA9': 'a',\n\t'\\u00E3': 'a',\n\t'\\u0101': 'a',\n\t'\\u0103': 'a',\n\t'\\u1EB1': 'a',\n\t'\\u1EAF': 'a',\n\t'\\u1EB5': 'a',\n\t'\\u1EB3': 'a',\n\t'\\u0227': 'a',\n\t'\\u01E1': 'a',\n\t'\\u00E4': 'a',\n\t'\\u01DF': 'a',\n\t'\\u1EA3': 'a',\n\t'\\u00E5': 'a',\n\t'\\u01FB': 'a',\n\t'\\u01CE': 'a',\n\t'\\u0201': 'a',\n\t'\\u0203': 'a',\n\t'\\u1EA1': 'a',\n\t'\\u1EAD': 'a',\n\t'\\u1EB7': 'a',\n\t'\\u1E01': 'a',\n\t'\\u0105': 'a',\n\t'\\u2C65': 'a',\n\t'\\u0250': 'a',\n\t'\\uA733': 'aa',\n\t'\\u00E6': 'ae',\n\t'\\u01FD': 'ae',\n\t'\\u01E3': 'ae',\n\t'\\uA735': 'ao',\n\t'\\uA737': 'au',\n\t'\\uA739': 'av',\n\t'\\uA73B': 'av',\n\t'\\uA73D': 'ay',\n\t'\\u24D1': 'b',\n\t'\\uFF42': 'b',\n\t'\\u1E03': 'b',\n\t'\\u1E05': 'b',\n\t'\\u1E07': 'b',\n\t'\\u0180': 'b',\n\t'\\u0183': 'b',\n\t'\\u0253': 'b',\n\t'\\u24D2': 'c',\n\t'\\uFF43': 'c',\n\t'\\u0107': 'c',\n\t'\\u0109': 'c',\n\t'\\u010B': 'c',\n\t'\\u010D': 'c',\n\t'\\u00E7': 'c',\n\t'\\u1E09': 'c',\n\t'\\u0188': 'c',\n\t'\\u023C': 'c',\n\t'\\uA73F': 'c',\n\t'\\u2184': 'c',\n\t'\\u24D3': 'd',\n\t'\\uFF44': 'd',\n\t'\\u1E0B': 'd',\n\t'\\u010F': 'd',\n\t'\\u1E0D': 'd',\n\t'\\u1E11': 'd',\n\t'\\u1E13': 'd',\n\t'\\u1E0F': 'd',\n\t'\\u0111': 'd',\n\t'\\u018C': 'd',\n\t'\\u0256': 'd',\n\t'\\u0257': 'd',\n\t'\\uA77A': 'd',\n\t'\\u01F3': 'dz',\n\t'\\u01C6': 'dz',\n\t'\\u24D4': 'e',\n\t'\\uFF45': 'e',\n\t'\\u00E8': 'e',\n\t'\\u00E9': 'e',\n\t'\\u00EA': 'e',\n\t'\\u1EC1': 'e',\n\t'\\u1EBF': 'e',\n\t'\\u1EC5': 'e',\n\t'\\u1EC3': 'e',\n\t'\\u1EBD': 'e',\n\t'\\u0113': 'e',\n\t'\\u1E15': 'e',\n\t'\\u1E17': 'e',\n\t'\\u0115': 'e',\n\t'\\u0117': 'e',\n\t'\\u00EB': 'e',\n\t'\\u1EBB': 'e',\n\t'\\u011B': 'e',\n\t'\\u0205': 'e',\n\t'\\u0207': 'e',\n\t'\\u1EB9': 'e',\n\t'\\u1EC7': 'e',\n\t'\\u0229': 'e',\n\t'\\u1E1D': 'e',\n\t'\\u0119': 'e',\n\t'\\u1E19': 'e',\n\t'\\u1E1B': 'e',\n\t'\\u0247': 'e',\n\t'\\u025B': 'e',\n\t'\\u01DD': 'e',\n\t'\\u24D5': 'f',\n\t'\\uFF46': 'f',\n\t'\\u1E1F': 'f',\n\t'\\u0192': 'f',\n\t'\\uA77C': 'f',\n\t'\\u24D6': 'g',\n\t'\\uFF47': 'g',\n\t'\\u01F5': 'g',\n\t'\\u011D': 'g',\n\t'\\u1E21': 'g',\n\t'\\u011F': 'g',\n\t'\\u0121': 'g',\n\t'\\u01E7': 'g',\n\t'\\u0123': 'g',\n\t'\\u01E5': 'g',\n\t'\\u0260': 'g',\n\t'\\uA7A1': 'g',\n\t'\\u1D79': 'g',\n\t'\\uA77F': 'g',\n\t'\\u24D7': 'h',\n\t'\\uFF48': 'h',\n\t'\\u0125': 'h',\n\t'\\u1E23': 'h',\n\t'\\u1E27': 'h',\n\t'\\u021F': 'h',\n\t'\\u1E25': 'h',\n\t'\\u1E29': 'h',\n\t'\\u1E2B': 'h',\n\t'\\u1E96': 'h',\n\t'\\u0127': 'h',\n\t'\\u2C68': 'h',\n\t'\\u2C76': 'h',\n\t'\\u0265': 'h',\n\t'\\u0195': 'hv',\n\t'\\u24D8': 'i',\n\t'\\uFF49': 'i',\n\t'\\u00EC': 'i',\n\t'\\u00ED': 'i',\n\t'\\u00EE': 'i',\n\t'\\u0129': 'i',\n\t'\\u012B': 'i',\n\t'\\u012D': 'i',\n\t'\\u00EF': 'i',\n\t'\\u1E2F': 'i',\n\t'\\u1EC9': 'i',\n\t'\\u01D0': 'i',\n\t'\\u0209': 'i',\n\t'\\u020B': 'i',\n\t'\\u1ECB': 'i',\n\t'\\u012F': 'i',\n\t'\\u1E2D': 'i',\n\t'\\u0268': 'i',\n\t'\\u0131': 'i',\n\t'\\u24D9': 'j',\n\t'\\uFF4A': 'j',\n\t'\\u0135': 'j',\n\t'\\u01F0': 'j',\n\t'\\u0249': 'j',\n\t'\\u24DA': 'k',\n\t'\\uFF4B': 'k',\n\t'\\u1E31': 'k',\n\t'\\u01E9': 'k',\n\t'\\u1E33': 'k',\n\t'\\u0137': 'k',\n\t'\\u1E35': 'k',\n\t'\\u0199': 'k',\n\t'\\u2C6A': 'k',\n\t'\\uA741': 'k',\n\t'\\uA743': 'k',\n\t'\\uA745': 'k',\n\t'\\uA7A3': 'k',\n\t'\\u24DB': 'l',\n\t'\\uFF4C': 'l',\n\t'\\u0140': 'l',\n\t'\\u013A': 'l',\n\t'\\u013E': 'l',\n\t'\\u1E37': 'l',\n\t'\\u1E39': 'l',\n\t'\\u013C': 'l',\n\t'\\u1E3D': 'l',\n\t'\\u1E3B': 'l',\n\t'\\u017F': 'l',\n\t'\\u0142': 'l',\n\t'\\u019A': 'l',\n\t'\\u026B': 'l',\n\t'\\u2C61': 'l',\n\t'\\uA749': 'l',\n\t'\\uA781': 'l',\n\t'\\uA747': 'l',\n\t'\\u01C9': 'lj',\n\t'\\u24DC': 'm',\n\t'\\uFF4D': 'm',\n\t'\\u1E3F': 'm',\n\t'\\u1E41': 'm',\n\t'\\u1E43': 'm',\n\t'\\u0271': 'm',\n\t'\\u026F': 'm',\n\t'\\u24DD': 'n',\n\t'\\uFF4E': 'n',\n\t'\\u01F9': 'n',\n\t'\\u0144': 'n',\n\t'\\u00F1': 'n',\n\t'\\u1E45': 'n',\n\t'\\u0148': 'n',\n\t'\\u1E47': 'n',\n\t'\\u0146': 'n',\n\t'\\u1E4B': 'n',\n\t'\\u1E49': 'n',\n\t'\\u019E': 'n',\n\t'\\u0272': 'n',\n\t'\\u0149': 'n',\n\t'\\uA791': 'n',\n\t'\\uA7A5': 'n',\n\t'\\u01CC': 'nj',\n\t'\\u24DE': 'o',\n\t'\\uFF4F': 'o',\n\t'\\u00F2': 'o',\n\t'\\u00F3': 'o',\n\t'\\u00F4': 'o',\n\t'\\u1ED3': 'o',\n\t'\\u1ED1': 'o',\n\t'\\u1ED7': 'o',\n\t'\\u1ED5': 'o',\n\t'\\u00F5': 'o',\n\t'\\u1E4D': 'o',\n\t'\\u022D': 'o',\n\t'\\u1E4F': 'o',\n\t'\\u014D': 'o',\n\t'\\u1E51': 'o',\n\t'\\u1E53': 'o',\n\t'\\u014F': 'o',\n\t'\\u022F': 'o',\n\t'\\u0231': 'o',\n\t'\\u00F6': 'o',\n\t'\\u022B': 'o',\n\t'\\u1ECF': 'o',\n\t'\\u0151': 'o',\n\t'\\u01D2': 'o',\n\t'\\u020D': 'o',\n\t'\\u020F': 'o',\n\t'\\u01A1': 'o',\n\t'\\u1EDD': 'o',\n\t'\\u1EDB': 'o',\n\t'\\u1EE1': 'o',\n\t'\\u1EDF': 'o',\n\t'\\u1EE3': 'o',\n\t'\\u1ECD': 'o',\n\t'\\u1ED9': 'o',\n\t'\\u01EB': 'o',\n\t'\\u01ED': 'o',\n\t'\\u00F8': 'o',\n\t'\\u01FF': 'o',\n\t'\\u0254': 'o',\n\t'\\uA74B': 'o',\n\t'\\uA74D': 'o',\n\t'\\u0275': 'o',\n\t'\\u01A3': 'oi',\n\t'\\u0223': 'ou',\n\t'\\uA74F': 'oo',\n\t'\\u24DF': 'p',\n\t'\\uFF50': 'p',\n\t'\\u1E55': 'p',\n\t'\\u1E57': 'p',\n\t'\\u01A5': 'p',\n\t'\\u1D7D': 'p',\n\t'\\uA751': 'p',\n\t'\\uA753': 'p',\n\t'\\uA755': 'p',\n\t'\\u24E0': 'q',\n\t'\\uFF51': 'q',\n\t'\\u024B': 'q',\n\t'\\uA757': 'q',\n\t'\\uA759': 'q',\n\t'\\u24E1': 'r',\n\t'\\uFF52': 'r',\n\t'\\u0155': 'r',\n\t'\\u1E59': 'r',\n\t'\\u0159': 'r',\n\t'\\u0211': 'r',\n\t'\\u0213': 'r',\n\t'\\u1E5B': 'r',\n\t'\\u1E5D': 'r',\n\t'\\u0157': 'r',\n\t'\\u1E5F': 'r',\n\t'\\u024D': 'r',\n\t'\\u027D': 'r',\n\t'\\uA75B': 'r',\n\t'\\uA7A7': 'r',\n\t'\\uA783': 'r',\n\t'\\u24E2': 's',\n\t'\\uFF53': 's',\n\t'\\u00DF': 's',\n\t'\\u015B': 's',\n\t'\\u1E65': 's',\n\t'\\u015D': 's',\n\t'\\u1E61': 's',\n\t'\\u0161': 's',\n\t'\\u1E67': 's',\n\t'\\u1E63': 's',\n\t'\\u1E69': 's',\n\t'\\u0219': 's',\n\t'\\u015F': 's',\n\t'\\u023F': 's',\n\t'\\uA7A9': 's',\n\t'\\uA785': 's',\n\t'\\u1E9B': 's',\n\t'\\u24E3': 't',\n\t'\\uFF54': 't',\n\t'\\u1E6B': 't',\n\t'\\u1E97': 't',\n\t'\\u0165': 't',\n\t'\\u1E6D': 't',\n\t'\\u021B': 't',\n\t'\\u0163': 't',\n\t'\\u1E71': 't',\n\t'\\u1E6F': 't',\n\t'\\u0167': 't',\n\t'\\u01AD': 't',\n\t'\\u0288': 't',\n\t'\\u2C66': 't',\n\t'\\uA787': 't',\n\t'\\uA729': 'tz',\n\t'\\u24E4': 'u',\n\t'\\uFF55': 'u',\n\t'\\u00F9': 'u',\n\t'\\u00FA': 'u',\n\t'\\u00FB': 'u',\n\t'\\u0169': 'u',\n\t'\\u1E79': 'u',\n\t'\\u016B': 'u',\n\t'\\u1E7B': 'u',\n\t'\\u016D': 'u',\n\t'\\u00FC': 'u',\n\t'\\u01DC': 'u',\n\t'\\u01D8': 'u',\n\t'\\u01D6': 'u',\n\t'\\u01DA': 'u',\n\t'\\u1EE7': 'u',\n\t'\\u016F': 'u',\n\t'\\u0171': 'u',\n\t'\\u01D4': 'u',\n\t'\\u0215': 'u',\n\t'\\u0217': 'u',\n\t'\\u01B0': 'u',\n\t'\\u1EEB': 'u',\n\t'\\u1EE9': 'u',\n\t'\\u1EEF': 'u',\n\t'\\u1EED': 'u',\n\t'\\u1EF1': 'u',\n\t'\\u1EE5': 'u',\n\t'\\u1E73': 'u',\n\t'\\u0173': 'u',\n\t'\\u1E77': 'u',\n\t'\\u1E75': 'u',\n\t'\\u0289': 'u',\n\t'\\u24E5': 'v',\n\t'\\uFF56': 'v',\n\t'\\u1E7D': 'v',\n\t'\\u1E7F': 'v',\n\t'\\u028B': 'v',\n\t'\\uA75F': 'v',\n\t'\\u028C': 'v',\n\t'\\uA761': 'vy',\n\t'\\u24E6': 'w',\n\t'\\uFF57': 'w',\n\t'\\u1E81': 'w',\n\t'\\u1E83': 'w',\n\t'\\u0175': 'w',\n\t'\\u1E87': 'w',\n\t'\\u1E85': 'w',\n\t'\\u1E98': 'w',\n\t'\\u1E89': 'w',\n\t'\\u2C73': 'w',\n\t'\\u24E7': 'x',\n\t'\\uFF58': 'x',\n\t'\\u1E8B': 'x',\n\t'\\u1E8D': 'x',\n\t'\\u24E8': 'y',\n\t'\\uFF59': 'y',\n\t'\\u1EF3': 'y',\n\t'\\u00FD': 'y',\n\t'\\u0177': 'y',\n\t'\\u1EF9': 'y',\n\t'\\u0233': 'y',\n\t'\\u1E8F': 'y',\n\t'\\u00FF': 'y',\n\t'\\u1EF7': 'y',\n\t'\\u1E99': 'y',\n\t'\\u1EF5': 'y',\n\t'\\u01B4': 'y',\n\t'\\u024F': 'y',\n\t'\\u1EFF': 'y',\n\t'\\u24E9': 'z',\n\t'\\uFF5A': 'z',\n\t'\\u017A': 'z',\n\t'\\u1E91': 'z',\n\t'\\u017C': 'z',\n\t'\\u017E': 'z',\n\t'\\u1E93': 'z',\n\t'\\u1E95': 'z',\n\t'\\u01B6': 'z',\n\t'\\u0225': 'z',\n\t'\\u0240': 'z',\n\t'\\u2C6C': 'z',\n\t'\\uA763': 'z',\n\t'\\u0386': '\\u0391',\n\t'\\u0388': '\\u0395',\n\t'\\u0389': '\\u0397',\n\t'\\u038A': '\\u0399',\n\t'\\u03AA': '\\u0399',\n\t'\\u038C': '\\u039F',\n\t'\\u038E': '\\u03A5',\n\t'\\u03AB': '\\u03A5',\n\t'\\u038F': '\\u03A9',\n\t'\\u03AC': '\\u03B1',\n\t'\\u03AD': '\\u03B5',\n\t'\\u03AE': '\\u03B7',\n\t'\\u03AF': '\\u03B9',\n\t'\\u03CA': '\\u03B9',\n\t'\\u0390': '\\u03B9',\n\t'\\u03CC': '\\u03BF',\n\t'\\u03CD': '\\u03C5',\n\t'\\u03CB': '\\u03C5',\n\t'\\u03B0': '\\u03C5',\n\t'\\u03C9': '\\u03C9',\n\t'\\u03C2': '\\u03C3',\n};\n\nexport function stripSpecialChars(text: string): string {\n\tconst match = (a: string): string => diacritics[a] || a;\n\t// eslint-disable-next-line no-control-regex\n\treturn text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map<string | NgOption, NgOption[]>;\n\nexport class ItemsList {\n\tprivate _groups: OptionGroups;\n\n\tconstructor(\n\t\tprivate _ngSelect: NgSelectComponent,\n\t\tprivate _selectionModel: SelectionModel,\n\t) {}\n\n\tprivate _items: NgOption[] = [];\n\n\tget items(): NgOption[] {\n\t\treturn this._items;\n\t}\n\n\tprivate _filteredItems: NgOption[] = [];\n\n\tget filteredItems(): NgOption[] {\n\t\treturn this._filteredItems;\n\t}\n\n\tprivate _markedIndex = -1;\n\n\tget markedIndex(): number {\n\t\treturn this._markedIndex;\n\t}\n\n\tget selectedItems() {\n\t\treturn this._selectionModel.value;\n\t}\n\n\tget markedItem(): NgOption {\n\t\treturn this._filteredItems[this._markedIndex];\n\t}\n\n\tget noItemsToSelect(): boolean {\n\t\treturn this._ngSelect.hideSelected() && this._items.length === this.selectedItems.length;\n\t}\n\n\tget maxItemsSelected(): boolean {\n\t\treturn this._ngSelect.multiple() && this._ngSelect.maxSelectedItems() <= this.selectedItems.length;\n\t}\n\n\tget lastSelectedItem() {\n\t\tlet i = this.selectedItems.length - 1;\n\t\tfor (; i >= 0; i--) {\n\t\t\tconst item = this.selectedItems[i];\n\t\t\tif (!item.disabled) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetItems(items: readonly any[]) {\n\t\tthis._items = items.map((item, index) => this.mapItem(item, index));\n\t\tconst groupBy = this._ngSelect.groupBy();\n\t\tif (groupBy) {\n\t\t\tthis._groups = this._groupBy(this._items, groupBy);\n\t\t\tthis._items = this._flatten(this._groups);\n\t\t} else {\n\t\t\tthis._groups = new Map();\n\t\t\tthis._groups.set(undefined, this._items);\n\t\t}\n\t\tthis._filteredItems = [...this._items];\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (item.selected || this.maxItemsSelected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tif (!multiple) {\n\t\t\tthis.clearSelected(false);\n\t\t}\n\n\t\tthis._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel());\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._hideSelected(item);\n\t\t}\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tthis._selectionModel.unselect(item, multiple);\n\t\tif (this._ngSelect.hideSelected() && isDefined(item.index) && multiple) {\n\t\t\tthis._showSelected(item);\n\t\t}\n\t}\n\n\tfindItem(value: any): NgOption {\n\t\tlet findBy: (item: NgOption) => boolean;\n\t\tif (this._ngSelect.compareWith()) {\n\t\t\tfindBy = (item) => this._ngSelect.compareWith()(item.value, value);\n\t\t} else if (this._ngSelect.bindValue()) {\n\t\t\tfindBy = (item) => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue()) === value;\n\t\t} else {\n\t\t\tfindBy = (item) =>\n\t\t\t\titem.value === value || (!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel()));\n\t\t}\n\t\treturn this._items.find((item) => findBy(item));\n\t}\n\n\taddItem(item: any) {\n\t\tconst option = this.mapItem(item, this._items.length);\n\t\tthis._items.push(option);\n\t\tthis._filteredItems.push(option);\n\t\treturn option;\n\t}\n\n\tclearSelected(keepDisabled: boolean) {\n\t\tthis._selectionModel.clear(keepDisabled);\n\t\tthis._items.forEach((item) => {\n\t\t\titem.selected = keepDisabled && item.selected && item.disabled;\n\t\t\titem.marked = false;\n\t\t});\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis.resetFilteredItems();\n\t\t}\n\t}\n\n\tfindByLabel(term: string) {\n\t\tterm = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\treturn this.filteredItems.find((item) => {\n\t\t\tconst label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n\t\t\treturn label.substr(0, term.length) === term;\n\t\t});\n\t}\n\n\tfilter(term: string): void {\n\t\tif (!term) {\n\t\t\tthis.resetFilteredItems();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._filteredItems = [];\n\t\tterm = this._ngSelect.searchFn() ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\tconst match = this._ngSelect.searchFn() || this._defaultSearchFn;\n\t\tconst hideSelected = this._ngSelect.hideSelected();\n\n\t\tfor (const key of Array.from(this._groups.keys())) {\n\t\t\tconst matchedItems = [];\n\t\t\tfor (const item of this._groups.get(key)) {\n\t\t\t\tif (hideSelected && ((item.parent && item.parent.selected) || item.selected)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst searchItem = this._ngSelect.searchFn() ? item.value : item;\n\t\t\t\tif (match(term, searchItem)) {\n\t\t\t\t\tmatchedItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (matchedItems.length > 0) {\n\t\t\t\tconst [last] = matchedItems.slice(-1);\n\t\t\t\tif (last.parent) {\n\t\t\t\t\tconst head = this._items.find((x) => x === last.parent);\n\t\t\t\t\tthis._filteredItems.push(head);\n\t\t\t\t}\n\t\t\t\tthis._filteredItems.push(...matchedItems);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetFilteredItems() {\n\t\tif (this._filteredItems.length === this._items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected() && this.selectedItems.length > 0) {\n\t\t\tthis._filteredItems = this._items.filter((x) => !x.selected);\n\t\t} else {\n\t\t\tthis._filteredItems = this._items;\n\t\t}\n\t}\n\n\tunmarkItem() {\n\t\tthis._markedIndex = -1;\n\t}\n\n\tmarkNextItem() {\n\t\tthis._stepToItem(+1);\n\t}\n\n\tmarkPreviousItem() {\n\t\tthis._stepToItem(-1);\n\t}\n\n\tmarkItem(item: NgOption) {\n\t\tthis._markedIndex = this._filteredItems.indexOf(item);\n\t}\n\n\tmarkSelectedOrDefault(markDefault?: boolean) {\n\t\tif (this._filteredItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastMarkedIndex = this._getLastMarkedIndex();\n\t\tif (lastMarkedIndex > -1) {\n\t\t\tthis._markedIndex = lastMarkedIndex;\n\t\t} else {\n\t\t\tthis._markedIndex = markDefault ? this.filteredItems.findIndex((x) => !x.disabled) : -1;\n\t\t}\n\t}\n\n\tresolveNested(option: any, key: string): any {\n\t\tif (!isObject(option)) {\n\t\t\treturn option;\n\t\t}\n\t\tif (key.indexOf('.') === -1) {\n\t\t\treturn option[key];\n\t\t} else {\n\t\t\tconst keys: string[] = key.split('.');\n\t\t\tlet value = option;\n\t\t\tfor (let i = 0, len = keys.length; i < len; ++i) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tvalue = value[keys[i]];\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tmapItem(item: any, index: number): NgOption {\n\t\tconst hasNgOptionLabel = isObject(item) && '$ngOptionLabel' in item;\n\t\tconst hasNgOptionValue = isObject(item) && '$ngOptionValue' in item;\n\t\tconst label = hasNgOptionLabel ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel());\n\t\tconst value = hasNgOptionValue ? item.$ngOptionValue : item;\n\t\treturn {\n\t\t\tindex,\n\t\t\tlabel: isDefined(label) ? label.toString() : '',\n\t\t\tvalue,\n\t\t\tdisabled: item && item.disabled ? item.disabled : false,\n\t\t\thtmlId: `${this._ngSelect.dropdownId}-${index}`,\n\t\t};\n\t}\n\n\tmapSelectedItems() {\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tfor (const selected of this.selectedItems) {\n\t\t\tconst bindValue = this._ngSelect.bindValue();\n\t\t\tconst value = bindValue ? this.resolveNested(selected.value, bindValue) : selected.value;\n\t\t\tconst valueFound = isDefined(value);\n\t\t\tlet item = valueFound ? this.findItem(value) : null;\n\n\t\t\tif (!item && !valueFound && this._ngSelect.compareWith()) {\n\t\t\t\titem = this._items.find((item) => this._ngSelect.compareWith()(item.value, selected.value));\n\t\t\t}\n\n\t\t\tthis._selectionModel.unselect(selected, multiple);\n\t\t\tthis._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel());\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => this.selectedItems.indexOf(x) === -1);\n\t\t}\n\t}\n\n\tprivate _showSelected(item: NgOption) {\n\t\tthis._filteredItems.push(item);\n\t\tif (item.parent) {\n\t\t\tconst parent = item.parent;\n\t\t\tconst parentExists = this._filteredItems.find((x) => x === parent);\n\t\t\tif (!parentExists) {\n\t\t\t\tthis._filteredItems.push(parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tfor (const child of item.children) {\n\t\t\t\tchild.selected = false;\n\t\t\t\tthis._filteredItems.push(child);\n\t\t\t}\n\t\t}\n\t\tthis._filteredItems = [...this._filteredItems.sort((a, b) => a.index - b.index)];\n\t}\n\n\tprivate _hideSelected(item: NgOption) {\n\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item);\n\t\tif (item.parent) {\n\t\t\tconst children = item.parent.children;\n\t\t\tif (children.every((x) => x.selected)) {\n\t\t\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item.parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => x.parent !== item);\n\t\t}\n\t}\n\n\tprivate _defaultSearchFn(search: string, opt: NgOption) {\n\t\tconst label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n\t\treturn label.indexOf(search) > -1;\n\t}\n\n\tprivate _getNextItemIndex(steps: number) {\n\t\tif (steps > 0) {\n\t\t\treturn this._markedIndex >= this._filteredItems.length - 1 ? 0 : this._markedIndex + 1;\n\t\t}\n\t\treturn this._markedIndex <= 0 ? this._filteredItems.length - 1 : this._markedIndex - 1;\n\t}\n\n\tprivate _stepToItem(steps: number) {\n\t\tif (this._filteredItems.length === 0 || this._filteredItems.every((x) => x.disabled)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._markedIndex = this._getNextItemIndex(steps);\n\t\tif (this.markedItem.disabled) {\n\t\t\tthis._stepToItem(steps);\n\t\t}\n\t}\n\n\tprivate _getLastMarkedIndex() {\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (this._markedIndex > -1 && this.markedItem === undefined) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n\t\tif (this.lastSelectedItem && selectedIndex < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn Math.max(this.markedIndex, selectedIndex);\n\t}\n\n\tprivate _groupBy(items: NgOption[], prop: string | ((value: any) => any)): OptionGroups {\n\t\tconst groups = new Map<string | NgOption, NgOption[]>();\n\t\tif (items.length === 0) {\n\t\t\treturn groups;\n\t\t}\n\n\t\t// Check if items are already grouped by given key.\n\t\tconst firstValue = items[0].value;\n\t\tif (firstValue != null && Array.isArray(firstValue[<string>prop])) {\n\t\t\tfor (const item of items) {\n\t\t\t\tconst children = (item.value?.[<string>prop] || []).map((x, index) => this.mapItem(x, index));\n\t\t\t\tgroups.set(item, children);\n\t\t\t}\n\t\t\treturn groups;\n\t\t}\n\n\t\tconst isFnKey = isFunction(this._ngSelect.groupBy());\n\t\tconst keyFn = (item: NgOption) => {\n\t\t\tconst key = isFnKey ? (<(value: any) => any>prop)(item.value) : item.value?.[<string>prop];\n\t\t\treturn isDefined(key) ? key : undefined;\n\t\t};\n\n\t\t// Group items by key.\n\t\tfor (const item of items) {\n\t\t\tconst key = keyFn(item);\n\t\t\tconst group = groups.get(key);\n\t\t\tif (group) {\n\t\t\t\tgroup.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(key, [item]);\n\t\t\t}\n\t\t}\n\t\treturn groups;\n\t}\n\n\tprivate _flatten(groups: OptionGroups) {\n\t\tconst isGroupByFn = isFunction(this._ngSelect.groupBy());\n\t\tconst items = [];\n\t\tfor (const key of Array.from(groups.keys())) {\n\t\t\tlet i = items.length;\n\t\t\tif (key === undefined) {\n\t\t\t\tconst withoutGroup = groups.get(undefined) || [];\n\t\t\t\titems.push(\n\t\t\t\t\t...withoutGroup.map((x) => {\n\t\t\t\t\t\tx.index = i++;\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isObjectKey = isObject(key);\n\t\t\tconst parent: NgOption = {\n\t\t\t\tlabel: isObjectKey ? '' : String(key),\n\t\t\t\tchildren: undefined,\n\t\t\t\tparent: null,\n\t\t\t\tindex: i++,\n\t\t\t\tdisabled: !this._ngSelect.selectableGroup(),\n\t\t\t\thtmlId: newId(),\n\t\t\t};\n\t\t\tconst groupKey = isGroupByFn ? this._ngSelect.bindLabel() : <string>this._ngSelect.groupBy();\n\t\t\tconst groupValue =\n\t\t\t\tthis._ngSelect.groupValue() ||\n\t\t\t\t(() => {\n\t\t\t\t\tif (isObjectKey) {\n\t\t\t\t\t\treturn (<NgOption>key).value;\n\t\t\t\t\t}\n\t\t\t\t\treturn { [groupKey]: key };\n\t\t\t\t});\n\t\t\tconst children = groups.get(key).map((x) => {\n\t\t\t\tx.parent = parent;\n\t\t\t\tx.children = undefined;\n\t\t\t\tx.index = i++;\n\t\t\t\treturn x;\n\t\t\t});\n\t\t\tparent.children = children;\n\t\t\tparent.value = groupValue(\n\t\t\t\tkey,\n\t\t\t\tchildren.map((x) => x.value),\n\t\t\t);\n\t\t\titems.push(parent);\n\t\t\titems.push(...children);\n\t\t}\n\t\treturn items;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n\tscrollHeight: number;\n\ttopPadding: number;\n\tstart: number;\n\tend: number;\n}\n\nexport interface PanelDimensions {\n\titemHeight: number;\n\tpanelHeight: number;\n\titemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\tprivate _dimensions: PanelDimensions = {\n\t\titemHeight: 0,\n\t\tpanelHeight: 0,\n\t\titemsPerViewport: 0,\n\t};\n\n\tget dimensions() {\n\t\treturn this._dimensions;\n\t}\n\n\tcalculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n\t\tconst d = this._dimensions;\n\t\tconst scrollHeight = d.itemHeight * itemsLength;\n\n\t\tconst scrollTop = Math.max(0, scrollPos);\n\t\tconst indexByScrollTop = (scrollTop / scrollHeight) * itemsLength;\n\t\tlet end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n\t\tconst maxStartEnd = end;\n\t\tconst maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n\t\tlet start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n\t\tlet topPadding = d.itemHeight * Math.ceil(start) - d.itemHeight * Math.min(start, buffer);\n\t\ttopPadding = !isNaN(topPadding) ? topPadding : 0;\n\t\tstart = !isNaN(start) ? start : -1;\n\t\tend = !isNaN(end) ? end : -1;\n\t\tstart -= buffer;\n\t\tstart = Math.max(0, start);\n\t\tend += buffer;\n\t\tend = Math.min(itemsLength, end);\n\n\t\treturn {\n\t\t\ttopPadding,\n\t\t\tscrollHeight,\n\t\t\tstart,\n\t\t\tend,\n\t\t};\n\t}\n\n\tsetDimensions(itemHeight: number, panelHeight: number) {\n\t\tconst itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n\t\tthis._dimensions = {\n\t\t\titemHeight,\n\t\t\tpanelHeight,\n\t\t\titemsPerViewport,\n\t\t};\n\t}\n\n\tgetScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n\t\tconst { panelHeight } = this.dimensions;\n\t\tconst itemBottom = itemTop + itemHeight;\n\t\tconst top = lastScroll;\n\t\tconst bottom = top + panelHeight;\n\n\t\tif (panelHeight >= itemBottom && lastScroll === itemTop) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (itemBottom > bottom) {\n\t\t\treturn top + itemBottom - bottom;\n\t\t} else if (itemTop <= top) {\n\t\t\treturn itemTop;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { animationFrameScheduler, asapScheduler, fromEvent } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\nimport { DropdownPosition, NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst CSS_POSITIONS: readonly string[] = ['top', 'right', 'bottom', 'left'];\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tselector: 'ng-dropdown-panel',\n\ttemplate: `\n\t\t@if (headerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-header\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t\t<div #scroll role=\"listbox\" class=\"ng-dropdown-panel-items scroll-host\" [attr.aria-label]=\"ariaLabelDropdown()\">\n\t\t\t<div #padding [class.total-padding]=\"virtualScroll()\"></div>\n\t\t\t<div #content [class.scrollable-content]=\"virtualScroll() && items().length\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\t\t</div>\n\t\t@if (footerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-footer\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"footerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges {\n\treadonly items = input<NgOption[]>([]);\n\treadonly showAddTag = input(false, { transform: booleanAttribute });\n\treadonly markedItem = input<NgOption>(undefined);\n\treadonly position = input<DropdownPosition>('auto');\n\treadonly appendTo = input<string>(undefined);\n\treadonly bufferAmount = input<number>(undefined);\n\treadonly virtualScroll = input(false, { transform: booleanAttribute });\n\treadonly headerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly footerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly filterValue = input<string>(null);\n\treadonly ariaLabelDropdown = input<string | null>(null);\n\t/**\n\t * Which DOM event to listen to for outside click detection\n\t */\n\treadonly outsideClickEvent = input<'click' | 'mousedown'>('click');\n\treadonly popover = input(false, { transform: booleanAttribute });\n\treadonly update = output<any[]>();\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>();\n\treadonly scrollToEnd = output<void>();\n\treadonly outsideClick = output<void>();\n\tprivate _renderer = inject(Renderer2);\n\tprivate _zone = inject(NgZone);\n\tprivate _panelService = inject(NgDropdownPanelService);\n\tprivate _document = inject(DOCUMENT, { optional: true })!;\n\tprivate _destroyRef = inject(DestroyRef);\n\tprivate _dropdown = inject(ElementRef<HTMLElement>).nativeElement;\n\tprivate readonly contentElementRef = viewChild('content', { read: ElementRef });\n\tprivate readonly scrollElementRef = viewChild('scroll', { read: ElementRef });\n\tprivate readonly paddingElementRef = viewChild('padding', { read: ElementRef });\n\n\tprivate readonly _virtualPadding = computed(() => this.paddingElementRef()?.nativeElement);\n\tprivate readonly _scrollablePanel = computed(() => this.scrollElementRef()?.nativeElement);\n\tprivate readonly _contentPanel = computed(() => this.contentElementRef()?.nativeElement);\n\n\tprivate _select: HTMLElement | undefined;\n\tprivate _parent: HTMLElement;\n\tprivate _scrollToEndFired = false;\n\tprivate _updateScrollHeight = false;\n\tprivate _lastScrollPosition = 0;\n\n\tconstructor() {\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tif (this.appendTo()) {\n\t\t\t\tthis._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _currentPosition: DropdownPosition;\n\n\tget currentPosition(): DropdownPosition {\n\t\treturn this._currentPosition;\n\t}\n\n\tprivate _itemsLength: number;\n\n\tprivate get itemsLength() {\n\t\treturn this._itemsLength;\n\t}\n\n\tprivate set itemsLength(value: number) {\n\t\tif (value !== this._itemsLength) {\n\t\t\tthis._itemsLength = value;\n\t\t\tthis._onItemsLengthChanged();\n\t\t}\n\t}\n\n\tprivate get _startOffset() {\n\t\tif (this.markedItem()) {\n\t\t\tconst { itemHeight, panelHeight } = this._panelService.dimensions;\n\t\t\tconst offset = this.markedItem().index * itemHeight;\n\t\t\treturn panelHeight > offset ? 0 : offset;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tngOnInit() {\n\t\tthis._select = this._dropdown.parentElement;\n\t\tthis._handleScroll();\n\t\tthis._handleOutsideClick();\n\t\tthis._appendDropdown();\n\t\tthis._setupMousedownListener();\n\t\tthis._handleWindowScroll();\n\t\tthis._showPopoverIfNeeded();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.items) {\n\t\t\tconst change = changes.items;\n\t\t\tthis._onItemsOrShowAddTagChange(change.currentValue, this.showAddTag(), change.firstChange);\n\t\t}\n\t\tif (changes.showAddTag) {\n\t\t\tconst change = changes.showAddTag;\n\t\t\tthis._onItemsOrShowAddTagChange(this.items(), change.currentValue, change.firstChange);\n\t\t}\n\t}\n\n\tscrollTo(option: NgOption, startFromOption = false) {\n\t\tif (!option) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.items().indexOf(option);\n\t\tif (index < 0 || index >= this.itemsLength) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet scrollTo;\n\t\tif (this.virtualScroll()) {\n\t\t\tconst itemHeight = this._panelService.dimensions.itemHeight;\n\t\t\tscrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n\t\t} else {\n\t\t\tconst item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n\t\t\tconst lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n\t\t\tscrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n\t\t}\n\n\t\tif (isDefined(scrollTo)) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTo;\n\t\t}\n\t}\n\n\tscrollToTag() {\n\t\tconst panel = this._scrollablePanel();\n\t\tpanel.scrollTop = panel.scrollHeight - panel.clientHeight;\n\t}\n\n\tadjustPosition() {\n\t\tthis._updateYPosition();\n\t}\n\n\tprivate _handleDropdownPosition() {\n\t\tthis._currentPosition = this._calculateCurrentPosition(this._dropdown);\n\t\tif (CSS_POSITIONS.includes(this._currentPosition)) {\n\t\t\tthis._updateDropdownClass(this._currentPosition);\n\t\t} else {\n\t\t\tthis._updateDropdownClass('bottom');\n\t\t}\n\n\t\tif (this.appendTo() || this.popover()) {\n\t\t\tthis._updateYPosition();\n\t\t}\n\n\t\tthis._dropdown.style.opacity = '1';\n\t}\n\n\tprivate _updateDropdownClass(currentPosition: string) {\n\t\tCSS_POSITIONS.forEach((position) => {\n\t\t\tconst REMOVE_CSS_CLASS = `ng-select-${position}`;\n\t\t\tthis._renderer.removeClass(this._dropdown, REMOVE_CSS_CLASS);\n\t\t\tthis._renderer.removeClass(this._select, REMOVE_CSS_CLASS);\n\t\t});\n\n\t\tconst ADD_CSS_CLASS = `ng-select-${currentPosition}`;\n\t\tthis._renderer.addClass(this._dropdown, ADD_CSS_CLASS);\n\t\tthis._renderer.addClass(this._select, ADD_CSS_CLASS);\n\t}\n\n\tprivate _handleScroll() {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tconst scrollablePanel = this._scrollablePanel();\n\t\t\tif (!scrollablePanel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfromEvent(scrollablePanel, 'scroll')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (scrollablePanel && 'scrollTop' in scrollablePanel) {\n\t\t\t\t\t\tthis._onContentScrolled(scrollablePanel.scrollTop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleOutsideClick() {\n\t\tif (!this._document) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, this.outsideClickEvent(), { capture: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe(($event) => this._checkToClose($event));\n\t\t});\n\t}\n\n\tprivate _checkToClose($event: any) {\n\t\tif (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst path = $event.path || ($event.composedPath && $event.composedPath());\n\t\tif ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.run(() => this.outsideClick.emit());\n\t}\n\n\tprivate _onItemsOrShowAddTagChange(items: NgOption[] = [], showAddTag: boolean, firstChange: boolean) {\n\t\tthis._scrollToEndFired = false;\n\t\tthis.itemsLength = items.length;\n\t\tif (showAddTag && items.length) {\n\t\t\tthis.itemsLength++;\n\t\t}\n\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._updateItemsRange(firstChange);\n\t\t} else {\n\t\t\tthis._setVirtualHeight();\n\t\t\tthis._updateItems(firstChange);\n\t\t}\n\t}\n\n\tprivate _updateItems(firstChange: boolean) {\n\t\tthis.update.emit(this.items());\n\t\tif (firstChange === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\t\tthis._panelService.setDimensions(0, panelHeight);\n\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\tthis.scrollTo(this.markedItem(), firstChange);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _updateItemsRange(firstChange: boolean) {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tthis._measureDimensions().then(() => {\n\t\t\t\tif (firstChange) {\n\t\t\t\t\tthis._renderItemsRange(this._startOffset);\n\t\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis._renderItemsRange();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _onContentScrolled(scrollTop: number) {\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._renderItemsRange(scrollTop);\n\t\t}\n\t\tthis._lastScrollPosition = scrollTop;\n\t\tthis._fireScrollToEnd(scrollTop);\n\t}\n\n\tprivate _updateVirtualHeight(height: number) {\n\t\tif (this._updateScrollHeight) {\n\t\t\tthis._virtualPadding().style.height = `${height}px`;\n\t\t\tthis._updateScrollHeight = false;\n\t\t}\n\t}\n\n\tprivate _setVirtualHeight() {\n\t\tif (!this._virtualPadding()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._virtualPadding().style.height = `0px`;\n\t}\n\n\tprivate _onItemsLengthChanged() {\n\t\tthis._updateScrollHeight = true;\n\t}\n\n\tprivate _renderItemsRange(scrollTop = null) {\n\t\tif (scrollTop && this._lastScrollPosition === scrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\tscrollTop = scrollTop || this._scrollablePanel().scrollTop;\n\t\tconst range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount());\n\t\tthis._updateVirtualHeight(range.scrollHeight);\n\t\tthis._contentPanel().style.transform = `translateY(${range.topPadding}px)`;\n\n\t\tthis._zone.run(() => {\n\t\t\tthis.update.emit(this.items().slice(range.start, range.end));\n\t\t\tthis.scroll.emit({ start: range.start, end: range.end });\n\t\t});\n\n\t\tif (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTop;\n\t\t\tthis._lastScrollPosition = scrollTop;\n\t\t}\n\t}\n\n\tprivate _measureDimensions(): Promise<PanelDimensions> {\n\t\tif (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n\t\t\treturn Promise.resolve(this._panelService.dimensions);\n\t\t}\n\n\t\tconst [first] = this.items();\n\t\tthis.update.emit([first]);\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\tconst option = this._dropdown.querySelector(`#${first.htmlId}`);\n\t\t\tconst optionHeight = option.clientHeight;\n\t\t\tthis._virtualPadding().style.height = `${optionHeight * this.itemsLength}px`;\n\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\tthis._panelService.setDimensions(optionHeight, panelHeight);\n\n\t\t\treturn this._panelService.dimensions;\n\t\t});\n\t}\n\n\tprivate _fireScrollToEnd(scrollTop: number) {\n\t\tif (this._scrollToEndFired || scrollTop === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst padding = this.virtualScroll() ? this._virtualPadding() : this._contentPanel();\n\n\t\tif (scrollTop + this._dropdown.clientHeight >= padding.clientHeight - 1) {\n\t\t\tthis._zone.run(() => this.scrollToEnd.emit());\n\t\t\tthis._scrollToEndFired = true;\n\t\t}\n\t}\n\n\tprivate _calculateCurrentPosition(dropdownEl: HTMLElement) {\n\t\tconst position = this.position();\n\t\tif (position !== 'auto') {\n\t\t\treturn position;\n\t\t}\n\t\tconst selectRect: ClientRect = this._select.getBoundingClientRect();\n\t\tconst scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n\t\tconst offsetTop = selectRect.top + window.pageYOffset;\n\t\tconst height = selectRect.height;\n\t\tconst dropdownHeight = dropdownEl.getBoundingClientRect().height;\n\t\tif (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n\t\t\treturn 'top';\n\t\t} else {\n\t\t\treturn 'bottom';\n\t\t}\n\t}\n\n\tprivate _appendDropdown() {\n\t\tif (!this.appendTo()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parent = this._dropdown.shadowRoot\n\t\t\t? this._dropdown.shadowRoot.querySelector(this.appendTo())\n\t\t\t: document.querySelector(this.appendTo());\n\t\tif (!this._parent) {\n\t\t\tthrow new Error(`appendTo selector ${this.appendTo()} did not found any parent element`);\n\t\t}\n\t\tthis._updateXPosition();\n\t\tthis._parent.appendChild(this._dropdown);\n\t}\n\n\tprivate _updateXPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst isRTL = document.documentElement.dir === 'rtl';\n\t\tconst offsetLeft = select.left - parent.left;\n\n\t\tif (isRTL) {\n\t\t\tconst offsetRight = parent.right - select.right;\n\t\t\tthis._dropdown.style.right = offsetRight + 'px';\n\t\t\tthis._dropdown.style.left = 'auto';\n\t\t} else {\n\t\t\tthis._dropdown.style.left = offsetLeft + 'px';\n\t\t\tthis._dropdown.style.right = 'auto';\n\t\t}\n\n\t\tthis._dropdown.style.width = select.width + 'px';\n\t\tthis._dropdown.style.minWidth = select.width + 'px';\n\t}\n\n\tprivate _updateYPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst selectContainer = this._select.querySelector('.ng-select-container') as HTMLElement;\n\t\tconst containerRect = selectContainer?.getBoundingClientRect() ?? select;\n\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst offsetBottom = parent.bottom - containerRect.top;\n\t\t\tthis._dropdown.style.bottom = offsetBottom + 'px';\n\t\t\tthis._dropdown.style.top = 'auto';\n\t\t} else if (this._currentPosition === 'bottom') {\n\t\t\tconst offsetTop = containerRect.bottom - parent.top;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = 'auto';\n\t\t}\n\t}\n\n\tprivate _setupMousedownListener(): void {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._dropdown, 'mousedown')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe((event: MouseEvent) => {\n\t\t\t\t\tconst target = event.target as HTMLElement;\n\t\t\t\t\tif (target.tagName === 'INPUT') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleWindowScroll() {\n\t\tif (!this.appendTo() && !this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, 'scroll', { capture: true, passive: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis._updateXPosition();\n\t\t\t\t\tthis._updateYPosition();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _showPopoverIfNeeded() {\n\t\tif (!this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this._dropdown.showPopover === 'function') {\n\t\t\tthis._renderer.setAttribute(this._dropdown, 'popover', 'manual');\n\t\t\tthis._dropdown.showPopover();\n\t\t\tthis._parent = globalThis.document.body;\n\t\t\tthis._updateXPosition();\n\t\t\tthis._updateYPosition();\n\t\t}\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tafterEveryRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n} from '@angular/core';\n\n@Component({\n\tselector: 'ng-option',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `<ng-content />`,\n})\nexport class NgOptionComponent implements OnInit {\n\n\tpublic readonly value = input<any>();\n\tpublic readonly disabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\tpublic readonly elementRef = inject(ElementRef<HTMLElement>);\n\n\tpublic readonly label = signal<string>('');\n\n\t/** True when this component's inputs are initialized (after first change detection). */\n\tpublic readonly isInitialized = signal<boolean>(false);\n\n\tconstructor() {\n\t\tafterEveryRender(() => {\n\t\t\t// Update label signal after render (innerHTML updated by template bindings)\n\t\t\tconst currentLabel = (this.elementRef.nativeElement.innerHTML || '').trim();\n\t\t\tif (currentLabel !== this.label()) {\n\t\t\t\tthis.label.set(currentLabel);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.isInitialized.set(true);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport interface NgOption {\n\t[name: string]: any;\n\n\tindex?: number;\n\thtmlId?: string;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tmarked?: boolean;\n\tlabel?: string;\n\tvalue?: string | any;\n\tparent?: NgOption;\n\tchildren?: NgOption[];\n}\n\nexport enum KeyCode {\n\tTab = 'Tab',\n\tEnter = 'Enter',\n\tEsc = 'Escape',\n\tSpace = ' ',\n\tArrowUp = 'ArrowUp',\n\tArrowDown = 'ArrowDown',\n\tBackspace = 'Backspace',\n}\n\nexport type DropdownPosition = 'top' | 'right' | 'bottom' | 'left' | 'auto';\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n\treturn new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n\tvalue: NgOption[];\n\tselect(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n\tunselect(item: NgOption, multiple: boolean);\n\tclear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n\tprivate _selected: NgOption[] = [];\n\n\tget value(): NgOption[] {\n\t\treturn this._selected;\n\t}\n\n\tselect(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n\t\titem.selected = true;\n\t\tif (!item.children || (!multiple && groupAsModel)) {\n\t\t\tthis._selected.push(item);\n\t\t}\n\t\tif (multiple) {\n\t\t\tif (item.parent) {\n\t\t\t\tconst childrenCount = item.parent.children.length;\n\t\t\t\tconst selectedCount = item.parent.children.filter((x) => x.selected).length;\n\t\t\t\titem.parent.selected = childrenCount === selectedCount;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, true);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t\tif (groupAsModel && this._activeChildren(item)) {\n\t\t\t\t\tthis._selected = [...this._selected.filter((x) => x.parent !== item), item];\n\t\t\t\t} else {\n\t\t\t\t\tthis._selected = [...this._selected, ...item.children.filter((x) => !x.disabled)];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tunselect(item: NgOption, multiple: boolean) {\n\t\tthis._selected = this._selected.filter((x) => x !== item);\n\t\titem.selected = false;\n\t\tif (multiple) {\n\t\t\tif (item.parent && item.parent.selected) {\n\t\t\t\tconst children = item.parent.children;\n\t\t\t\tthis._removeParent(item.parent);\n\t\t\t\tthis._removeChildren(item.parent);\n\t\t\t\tthis._selected.push(...children.filter((x) => x !== item && !x.disabled));\n\t\t\t\titem.parent.selected = false;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, false);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(keepDisabled: boolean) {\n\t\tthis._selected = keepDisabled ? this._selected.filter((x) => x.disabled) : [];\n\t}\n\n\tprivate _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n\t\tfor (const child of children) {\n\t\t\tif (child.disabled) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchild.selected = selected;\n\t\t}\n\t}\n\n\tprivate _removeChildren(parent: NgOption) {\n\t\tthis._selected = [\n\t\t\t...this._selected.filter((x) => x.parent !== parent),\n\t\t\t...parent.children.filter((x) => x.parent === parent && x.disabled && x.selected),\n\t\t];\n\t}\n\n\tprivate _removeParent(parent: NgOption) {\n\t\tthis._selected = this._selected.filter((x) => x !== parent);\n\t}\n\n\tprivate _activeChildren(item: NgOption): boolean {\n\t\treturn item.children.every((x) => !x.disabled || x.selected);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tAfterViewInit,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostAttributeToken,\n\tHostListener,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tsignal,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgItemLabelDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgPlaceholderTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n} from './ng-templates.directive';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgSelectConfig } from './config.service';\nimport { ConsoleService } from './console.service';\nimport { newId } from './id';\nimport { ItemsList } from './items-list';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\nimport { NgOptionComponent } from './ng-option.component';\nimport { DropdownPosition, KeyCode, NgOption } from './ng-select.types';\nimport { DefaultSelectionModelFactory, SelectionModelFactory } from './selection-model';\nimport { isDefined, isFunction, isObject, isPromise } from './value-utils';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken<SelectionModelFactory>('ng-select-selection-model');\nexport type AddTagFn = (term: string) => any | Promise<any>;\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | any, children: any[]) => string | any;\n\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n\treturn value == null ? undefined : booleanAttribute(value);\n}\n\n@Component({\n\tselector: 'ng-select',\n\texportAs: 'ngSelect',\n\ttemplateUrl: './ng-select.component.html',\n\tstyleUrls: ['./ng-select.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => NgSelectComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\tNgDropdownPanelService,\n\t],\n\tencapsulation: ViewEncapsulation.None\t,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, NgItemLabelDirective, NgDropdownPanelComponent],\n\thost: {\n\t\t'[class.ng-select]': 'true',\n\t\t'[class.ng-select-single]': '!multiple()',\n\t\t'[class.ng-select-typeahead]': 'typeahead()',\n\t\t'[class.ng-select-multiple]': 'multiple()',\n\t\t'[class.ng-select-taggable]': 'addTag()',\n\t\t'[class.ng-select-searchable]': 'searchable()',\n\t\t'[class.ng-select-clearable]': 'clearable()',\n\t\t'[class.ng-select-filtered]': 'filtered',\n\t\t'[class.ng-select-disabled]': 'disabled()',\n\t},\n})\nexport class NgSelectComponent implements OnChanges, OnInit, AfterViewInit, ControlValueAccessor {\n\treadonly classes = inject(new HostAttributeToken('class'), { optional: true });\n\treadonly config = inject(NgSelectConfig);\n\tprivate readonly _cd = inject(ChangeDetectorRef);\n\tprivate readonly _console = inject(ConsoleService);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\n\t// signals\n\tpublic readonly _disabled = signal<boolean>(false);\n\t// inputs: underscored input() + alias + linkedSignal() for stable public names (back compat)\n\treadonly _ariaLabelDropdown = input<string>(undefined, { alias: 'ariaLabelDropdown' });\n\treadonly ariaLabelDropdown = linkedSignal(() => this._ariaLabelDropdown());\n\n\treadonly _ariaLabel = input<string | undefined>(undefined, { alias: 'ariaLabel' });\n\treadonly ariaLabel = linkedSignal(() => this._ariaLabel());\n\n\treadonly _markFirst = input(true, { alias: 'markFirst', transform: booleanAttribute });\n\treadonly markFirst = linkedSignal(() => this._markFirst());\n\n\treadonly _placeholder = input<string>(this.config.placeholder, { alias: 'placeholder' });\n\treadonly placeholder = linkedSignal(() => this._placeholder());\n\n\treadonly _fixedPlaceholder = input<boolean>(true, { alias: 'fixedPlaceholder' });\n\treadonly fixedPlaceholder = linkedSignal(() => this._fixedPlaceholder());\n\n\treadonly _notFoundText = input<string>(undefined, { alias: 'notFoundText' });\n\treadonly notFoundText = linkedSignal(() => this._notFoundText());\n\n\treadonly _typeToSearchText = input<string>(undefined, { alias: 'typeToSearchText' });\n\treadonly typeToSearchText = linkedSignal(() => this._typeToSearchText());\n\n\treadonly _preventToggleOnRightClick = input<boolean>(false, { alias: 'preventToggleOnRightClick' });\n\treadonly preventToggleOnRightClick = linkedSignal(() => this._preventToggleOnRightClick());\n\n\treadonly _addTagText = input<string>(undefined, { alias: 'addTagText' });\n\treadonly addTagText = linkedSignal(() => this._addTagText());\n\n\treadonly _loadingText = input<string>(undefined, { alias: 'loadingText' });\n\treadonly loadingText = linkedSignal(() => this._loadingText());\n\n\treadonly _clearAllText = input<string>(undefined, { alias: 'clearAllText' });\n\treadonly clearAllText = linkedSignal(() => this._clearAllText());\n\n\treadonly _dropdownPosition = input<DropdownPosition>('auto', { alias: 'dropdownPosition' });\n\treadonly dropdownPosition = linkedSignal(() => this._dropdownPosition());\n\n\treadonly _appendTo = input<string>(undefined, { alias: 'appendTo' });\n\treadonly appendTo = linkedSignal(() => this._appendTo());\n\n\treadonly _outsideClickEvent = input<'click' | 'mousedown'>(this.config.outsideClickEvent, { alias: 'outsideClickEvent' });\n\treadonly outsideClickEvent = linkedSignal(() => this._outsideClickEvent());\n\n\treadonly _loading = input(false, { alias: 'loading', transform: booleanAttribute });\n\treadonly loading = linkedSignal(() => this._loading());\n\n\treadonly _closeOnSelect = input(true, { alias: 'closeOnSelect', transform: booleanAttribute });\n\treadonly closeOnSelect = linkedSignal(() => this._closeOnSelect());\n\n\treadonly _hideSelected = input(false, { alias: 'hideSelected', transform: booleanAttribute });\n\treadonly hideSelected = linkedSignal(() => this._hideSelected());\n\n\treadonly _selectOnTab = input(false, { alias: 'selectOnTab', transform: booleanAttribute });\n\treadonly selectOnTab = linkedSignal(() => this._selectOnTab());\n\n\treadonly _openOnEnter = input(undefined, { alias: 'openOnEnter', transform: booleanAttribute });\n\treadonly openOnEnter = linkedSignal(() => this._openOnEnter());\n\n\treadonly _maxSelectedItems = input<number, unknown>(undefined, { alias: 'maxSelectedItems', transform: numberAttribute });\n\treadonly maxSelectedItems = linkedSignal(() => this._maxSelectedItems());\n\n\treadonly _groupBy = input<string | ((value: any) => any)>(undefined, { alias: 'groupBy' });\n\treadonly groupBy = linkedSignal(() => this._groupBy());\n\n\treadonly _groupValue = input<GroupValueFn>(undefined, { alias: 'groupValue' });\n\treadonly groupValue = linkedSignal(() => this._groupValue());\n\n\treadonly _bufferAmount = input(4, { alias: 'bufferAmount', transform: numberAttribute });\n\treadonly bufferAmount = linkedSignal(() => this._bufferAmount());\n\n\treadonly _virtualScroll = input<boolean | undefined, unknown>(undefined, {\n\t\talias: 'virtualScroll',\n\t\ttransform: optionalBooleanAttribute,\n\t});\n\treadonly virtualScroll = linkedSignal(() => this._virtualScroll());\n\treadonly dropdownVirtualScroll = computed(() => {\n\t\tconst value = this._virtualScroll();\n\t\treturn isDefined(value) ? value : this.isVirtualScrollDisabled(this.config);\n\t});\n\n\treadonly _selectableGroup = input(false, { alias: 'selectableGroup', transform: booleanAttribute });\n\treadonly selectableGroup = linkedSignal(() => this._selectableGroup());\n\n\treadonly _tabFocusOnClearButton = input<boolean | undefined>(undefined, { alias: 'tabFocusOnClearButton' });\n\treadonly tabFocusOnClearButton = linkedSignal(() => this._tabFocusOnClearButton());\n\n\treadonly _selectableGroupAsModel = input(true, { alias: 'selectableGroupAsModel', transform: booleanAttribute });\n\treadonly selectableGroupAsModel = linkedSignal(() => this._selectableGroupAsModel());\n\n\treadonly _searchFn = input(null, { alias: 'searchFn' });\n\treadonly searchFn = linkedSignal(() => this._searchFn());\n\n\treadonly _trackByFn = input(null, { alias: 'trackByFn' });\n\treadonly trackByFn = linkedSignal(() => this._trackByFn());\n\n\treadonly _clearOnBackspace = input(true, { alias: 'clearOnBackspace', transform: booleanAttribute });\n\treadonly clearOnBackspace = linkedSignal(() => this._clearOnBackspace());\n\n\treadonly _labelForId = input(null, { alias: 'labelForId' });\n\treadonly labelForId = linkedSignal(() => this._labelForId());\n\n\treadonly _inputAttrs = input<Record<string, string>>({}, { alias: 'inputAttrs' });\n\treadonly inputAttrs = linkedSignal(() => this._inputAttrs());\n\n\treadonly _tabIndex = input<number, unknown>(undefined, { alias: 'tabIndex', transform: numberAttribute });\n\treadonly tabIndex = linkedSignal(() => this._tabIndex());\n\n\treadonly _readonly = input(false, { alias: 'readonly', transform: booleanAttribute });\n\treadonly readonly = linkedSignal(() => this._readonly());\n\n\treadonly _searchWhileComposing = input(true, { alias: 'searchWhileComposing', transform: booleanAttribute });\n\treadonly searchWhileComposing = linkedSignal(() => this._searchWhileComposing());\n\n\treadonly _minTermLength = input(0, { alias: 'minTermLength', transform: numberAttribute });\n\treadonly minTermLength = linkedSignal(() => this._minTermLength());\n\n\treadonly _editableSearchTerm = input(false, { alias: 'editableSearchTerm', transform: booleanAttribute });\n\treadonly editableSearchTerm = linkedSignal(() => this._editableSearchTerm());\n\n\treadonly _ngClass = input(null, { alias: 'ngClass' });\n\treadonly ngClass = linkedSignal(() => this._ngClass());\n\n\treadonly _typeahead = input<Subject<string>>(undefined, { alias: 'typeahead' });\n\treadonly typeahead = linkedSignal(() => this._typeahead());\n\n\treadonly _multiple = input(false, { alias: 'multiple', transform: booleanAttribute });\n\treadonly multiple = linkedSignal(() => this._multiple());\n\n\treadonly _addTag = input<boolean | AddTagFn>(false, { alias: 'addTag' });\n\treadonly addTag = linkedSignal(() => this._addTag());\n\n\treadonly _searchable = input(true, { alias: 'searchable', transform: booleanAttribute });\n\treadonly searchable = linkedSignal(() => this._searchable());\n\n\treadonly _clearable = input(true, { alias: 'clearable', transform: booleanAttribute });\n\treadonly clearable = linkedSignal(() => this._clearable());\n\n\treadonly _clearKeepsDisabledOptions = input(true, { alias: 'clearKeepsDisabledOptions', transform: booleanAttribute });\n\treadonly clearKeepsDisabledOptions = linkedSignal(() => this._clearKeepsDisabledOptions());\n\n\treadonly _deselectOnClick = input<boolean>(undefined, { alias: 'deselectOnClick' });\n\treadonly deselectOnClick = linkedSignal(() => this._deselectOnClick());\n\n\treadonly _clearSearchOnAdd = input(undefined, { alias: 'clearSearchOnAdd' });\n\treadonly clearSearchOnAdd = linkedSignal(() => this._clearSearchOnAdd());\n\n\treadonly _compareWith = input(undefined, {\n\t\talias: 'compareWith',\n\t\ttransform: (fn: CompareWithFn | undefined) => {\n\t\t\tif (fn !== undefined && fn !== null && !isFunction(fn)) {\n\t\t\t\tthrow Error('`compareWith` must be a function.');\n\t\t\t}\n\t\t\treturn fn;\n\t\t},\n\t});\n\treadonly compareWith = linkedSignal(() => this._compareWith());\n\n\treadonly _keyDownFn = input<(_: KeyboardEvent) => boolean>((_: KeyboardEvent) => true, { alias: 'keyDownFn' });\n\treadonly keyDownFn = linkedSignal(() => this._keyDownFn());\n\n\treadonly _popover = input(false, { alias: 'popover', transform: booleanAttribute });\n\treadonly popover = linkedSignal(() => this._popover());\n\n\t// models\n\treadonly bindLabel = model<string>(undefined);\n\treadonly bindValue = model<string>(undefined);\n\treadonly appearance = model<string>(undefined);\n\treadonly isOpen = model<boolean | undefined>(false);\n\treadonly items = model<readonly any[]>([]);\n\n\t// output events\n\treadonly blurEvent = output<any>({ alias: 'blur' });\n\treadonly focusEvent = output<any>({ alias: 'focus' });\n\treadonly changeEvent = output<any>({ alias: 'change' });\n\treadonly openEvent = output({ alias: 'open' });\n\treadonly closeEvent = output({ alias: 'close' });\n\treadonly searchEvent = output<{\n\t\tterm: string;\n\t\titems: any[];\n\t}>({ alias: 'search' });\n\treadonly clearEvent = output({ alias: 'clear' });\n\treadonly addEvent = output<any>({ alias: 'add' });\n\treadonly removeEvent = output<any>({ alias: 'remove' });\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>({ alias: 'scroll' });\n\treadonly scrollToEnd = output<any>({ alias: 'scrollToEnd' });\n\n\t// computed\n\treadonly disabled = computed(() => this.readonly() || this._disabled());\n\treadonly clearSearchOnAddValue = computed(() => {\n\t\tif (isDefined(this.clearSearchOnAdd())) {\n\t\t\treturn this.clearSearchOnAdd();\n\t\t}\n\t\tif (isDefined(this.config.clearSearchOnAdd)) {\n\t\t\treturn this.config.clearSearchOnAdd;\n\t\t}\n\t\treturn this.closeOnSelect();\n\t});\n\treadonly deselectOnClickValue = computed(() => {\n\t\tif (isDefined(this.deselectOnClick())) {\n\t\t\treturn this.deselectOnClick();\n\t\t}\n\t\tif (isDefined(this.config.deselectOnClick)) {\n\t\t\treturn this.config.deselectOnClick;\n\t\t}\n\t\treturn this.multiple();\n\t});\n\t// content child queries\n\treadonly optionTemplate = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\treadonly optgroupTemplate = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\treadonly labelTemplate = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\treadonly multiLabelTemplate = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\treadonly headerTemplate = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\treadonly footerTemplate = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\treadonly notFoundTemplate = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\treadonly placeholderTemplate = contentChild(NgPlaceholderTemplateDirective, { read: TemplateRef });\n\treadonly typeToSearchTemplate = contentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef });\n\treadonly loadingTextTemplate = contentChild(NgLoadingTextTemplateDirective, { read: TemplateRef });\n\treadonly tagTemplate = contentChild(NgTagTemplateDirective, { read: TemplateRef });\n\treadonly loadingSpinnerTemplate = contentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef });\n\treadonly clearButtonTemplate = contentChild(NgClearButtonTemplateDirective, { read: TemplateRef });\n\treadonly ngOptions = contentChildren(NgOptionComponent, { descendants: true });\n\n\t// view children queries\n\treadonly dropdownPanel = viewChild(forwardRef(() => NgDropdownPanelComponent));\n\treadonly searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\treadonly clearButton = viewChild<ElementRef<HTMLSpanElement>>('clearButton');\n\t// public variables\n\treadonly dropdownId = newId();\n\treadonly element: HTMLElement;\n\n\t// variables\n\tescapeHTML = true;\n\titemsList: ItemsList;\n\tviewPortItems: NgOption[] = [];\n\ttabFocusOnClear = signal<boolean>(true);\n\tprivate readonly autoFocus = inject(new HostAttributeToken('autofocus'), { optional: true });\n\t// private variables\n\tprivate readonly _defaultLabel = 'label';\n\tprivate readonly _editableSearchTermActive = computed(() => this.editableSearchTerm() && !this.multiple());\n\tprivate _focused: boolean;\n\tprivate _injector = inject(Injector);\n\tprivate _isComposing = false;\n\tprivate _itemsAreUsed: boolean;\n\tprivate readonly _keyPress$ = new Subject<string>();\n\tprivate _manualOpen: boolean;\n\tprivate _pressedKeys: string[] = [];\n\tprivate _primitive: any;\n\tprivate readonly _searchTerm = signal<string>(null);\n\tprivate readonly _validTerm = computed(() => {\n\t\tconst term = this._searchTerm()?.trim();\n\t\treturn term && term.length >= this.minTermLength();\n\t});\n\n\t/** Adds/removes `ng-select-opened` on the host — assigned in the constructor. */\n\tprivate _reflectOpenState!: (open: boolean) => void;\n\n\tconstructor() {\n\t\tconst config = this.config;\n\t\tconst newSelectionModel = inject<SelectionModelFactory | undefined>(SELECTION_MODEL_FACTORY, { optional: true });\n\t\tconst _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\t\tconst _renderer = inject(Renderer2);\n\n\t\tthis._mergeGlobalConfig(config);\n\t\tthis.itemsList = new ItemsList(this, newSelectionModel ? newSelectionModel() : DefaultSelectionModelFactory());\n\t\tthis.element = _elementRef.nativeElement;\n\n\t\t// Reflect the open state imperatively — the same mechanism the dropdown\n\t\t// panel uses for `ng-select-bottom/top`. As a `host` binding this class\n\t\t// only applied when the PARENT view happened to be refreshed: open()\n\t\t// ends in a LOCAL `_cd.detectChanges()`, which updates the own template\n\t\t// (panel, aria-expanded) but neither applies host bindings nor flushes\n\t\t// effects — so themes keyed on `.ng-select-opened` (the caret flip)\n\t\t// never engaged until some unrelated global tick. open()/close() call\n\t\t// `_reflectOpenState` synchronously; this effect covers the remaining\n\t\t// signal writes (`[isOpen]` input–driven manual mode).\n\t\tthis._reflectOpenState = (open: boolean) => {\n\t\t\tif (open) {\n\t\t\t\t_renderer.addClass(this.element, 'ng-select-opened');\n\t\t\t} else {\n\t\t\t\t_renderer.removeClass(this.element, 'ng-select-opened');\n\t\t\t}\n\t\t};\n\t\teffect(() => this._reflectOpenState(this.isOpen() ?? false));\n\t}\n\n\tget filtered() {\n\t\treturn (!!this.searchTerm && this.searchable()) || this._isComposing;\n\t}\n\n\tget focused() {\n\t\treturn this._focused;\n\t}\n\n\tget searchTerm() {\n\t\treturn this._searchTerm();\n\t}\n\n\tget selectedItems(): NgOption[] {\n\t\treturn this.itemsList.selectedItems;\n\t}\n\n\tget selectedValues() {\n\t\treturn this.selectedItems.map((x) => x.value);\n\t}\n\n\tget hasValue() {\n\t\treturn this.selectedItems.length > 0;\n\t}\n\n\tget currentPanelPosition(): DropdownPosition {\n\t\tif (this.dropdownPanel()) {\n\t\t\treturn this.dropdownPanel().currentPosition;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tget showAddTag() {\n\t\tif (!this._validTerm()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst term = this.searchTerm.toLowerCase().trim();\n\t\treturn (\n\t\t\tthis.addTag() &&\n\t\t\t!this.itemsList.filteredItems.some((x) => x.label.toLowerCase() === term) &&\n\t\t\t((!this.hideSelected() && this.isOpen()) || !this.selectedItems.some((x) => x.label.toLowerCase() === term)) &&\n\t\t\t!this.loading()\n\t\t);\n\t}\n\n\tclearItem = (item: any) => {\n\t\tconst option = this.selectedItems.find((x) => x.value === item);\n\t\tthis.unselect(option);\n\t};\n\n\tngOnInit() {\n\t\tthis._handleKeyPresses();\n\t\tthis._setInputAttributes();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.multiple) {\n\t\t\tthis.itemsList.clearSelected(false);\n\t\t}\n\t\tif (changes.items) {\n\t\t\tthis._itemsAreUsed = true;\n\t\t\tthis._setItems(changes.items.currentValue || []);\n\t\t}\n\t\tif (changes.isOpen) {\n\t\t\tthis._manualOpen = isDefined(changes.isOpen.currentValue);\n\t\t}\n\t\tif (changes.groupBy) {\n\t\t\tif (!changes.items) {\n\t\t\t\tthis._setItems([...this.items()]);\n\t\t\t}\n\t\t}\n\t\tif (changes.inputAttrs) {\n\t\t\tthis._setInputAttributes();\n\t\t}\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\tngAfterViewInit() {\n\t\tif (!this._itemsAreUsed) {\n\t\t\tthis.escapeHTML = false;\n\t\t\tthis._setItemsFromNgOptions();\n\t\t}\n\n\t\tif (isDefined(this.autoFocus)) {\n\t\t\tthis.focus();\n\t\t}\n\t}\n\n\t@HostListener('keydown', ['$event'])\n\thandleKeyDown($event: KeyboardEvent) {\n\t\tconst keyName = $event.key;\n\t\tif (Object.values(KeyCode).includes(keyName as KeyCode)) {\n\t\t\tif (this.keyDownFn()($event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.handleKeyCode($event);\n\t\t} else if (keyName && keyName.length === 1) {\n\t\t\tthis._keyPress$.next(keyName.toLocaleLowerCase());\n\t\t}\n\t}\n\n\thandleKeyCode($event: KeyboardEvent) {\n\t\tconst target = $event.target;\n\n\t\tif (this.clearButton() && this.clearButton().nativeElement === target) {\n\t\t\tthis.handleKeyCodeClear($event);\n\t\t} else {\n\t\t\tthis.handleKeyCodeInput($event);\n\t\t}\n\t}\n\n\thandleKeyCodeInput($event: KeyboardEvent) {\n\t\tswitch ($event.key) {\n\t\t\tcase KeyCode.ArrowDown:\n\t\t\t\tthis._handleArrowDown($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.ArrowUp:\n\t\t\t\tthis._handleArrowUp($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Space:\n\t\t\t\tthis._handleSpace($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Enter:\n\t\t\t\tthis._handleEnter($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Tab:\n\t\t\t\tthis._handleTab($event);\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Esc:\n\t\t\t\tthis.close();\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t\tcase KeyCode.Backspace:\n\t\t\t\tthis._handleBackspace();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\thandleKeyCodeClear($event: KeyboardEvent) {\n\t\tswitch ($event.key) {\n\t\t\tcase KeyCode.Enter:\n\t\t\t\tthis.handleClearClick();\n\t\t\t\t$event.preventDefault();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\thandleMousedown($event: MouseEvent) {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.preventToggleOnRightClick() && $event.button === 2) {\n\t\t\treturn false;\n\t\t}\n\t\tconst target = $event.target as HTMLElement;\n\t\tif (target.tagName !== 'INPUT') {\n\t\t\t$event.preventDefault();\n\t\t}\n\n\t\tif (target.classList.contains('ng-clear-wrapper')) {\n\t\t\t// Don't handle clear on mousedown - let click event handle it\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.classList.contains('ng-arrow-wrapper')) {\n\t\t\tthis.handleArrowClick();\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.classList.contains('ng-value-icon')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._focused) {\n\t\t\tthis.focus();\n\t\t}\n\n\t\tif (this.searchable()) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\thandleArrowClick() {\n\t\tif (this.isOpen()) {\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\thandleClearClick(_event?: MouseEvent) {\n\t\tif (this.hasValue) {\n\t\t\tthis.itemsList.clearSelected(this.clearKeepsDisabledOptions());\n\t\t\tthis._updateNgModel();\n\t\t}\n\t\tthis._clearSearch();\n\t\tthis.focus();\n\t\tthis.clearEvent.emit();\n\n\t\tthis._onSelectionChanged();\n\t}\n\n\tclearModel() {\n\t\tif (!this.clearable()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.clearSelected(false);\n\t\tthis._updateNgModel();\n\t}\n\n\twriteValue(value: any | any[]): void {\n\t\tthis.itemsList.clearSelected(false);\n\t\tthis._handleWriteValue(value);\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._cd.markForCheck();\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(state: boolean): void {\n\t\tthis._disabled.set(state);\n\t\tthis._cd.markForCheck();\n\t}\n\n\ttoggle() {\n\t\tif (!this.isOpen()) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\topen() {\n\t\tif (this.disabled() || this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.typeahead()?.observed && !this.addTag() && this.itemsList.noItemsToSelect) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isOpen.set(true);\n\t\tthis._reflectOpenState(true);\n\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\tthis.openEvent.emit();\n\t\tif (!this.searchTerm) {\n\t\t\tthis.focus();\n\t\t}\n\t\tthis.detectChanges();\n\t}\n\n\tclose() {\n\t\tif (!this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isOpen.set(false);\n\t\tthis._reflectOpenState(false);\n\t\tthis._isComposing = false;\n\t\tif (!this._editableSearchTermActive()) {\n\t\t\tthis._clearSearch();\n\t\t} else {\n\t\t\tthis.itemsList.resetFilteredItems();\n\t\t}\n\t\tthis.itemsList.unmarkItem();\n\t\tthis._onTouched();\n\t\tthis.closeEvent.emit();\n\t\tthis.detectChanges();\n\t}\n\n\ttoggleItem(item: NgOption) {\n\t\tif (!item || item.disabled || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.deselectOnClickValue() && item.selected) {\n\t\t\tthis.unselect(item);\n\t\t} else {\n\t\t\tthis.select(item);\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\tthis.itemsList.select(item);\n\t\t\tif (this.clearSearchOnAddValue() && !this._editableSearchTermActive()) {\n\t\t\t\tthis._clearSearch();\n\t\t\t}\n\n\t\t\tthis._updateNgModel();\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.addEvent.emit(item.value);\n\t\t\t}\n\t\t}\n\n\t\tif (this.closeOnSelect() || this.itemsList.noItemsToSelect) {\n\t\t\tthis.close();\n\t\t}\n\n\t\tthis._onSelectionChanged();\n\t}\n\n\tfocus() {\n\t\tthis.searchInput().nativeElement.focus();\n\t}\n\n\tblur() {\n\t\tthis.searchInput().nativeElement.blur();\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.itemsList.unselect(item);\n\t\tthis.focus();\n\t\tthis._updateNgModel();\n\t\tthis.removeEvent.emit(item.value);\n\t\tthis._onSelectionChanged();\n\t}\n\n\tselectTag() {\n\t\tlet tag;\n\t\tif (isFunction(this.addTag())) {\n\t\t\ttag = (<AddTagFn>this.addTag())(this.searchTerm);\n\t\t} else {\n\t\t\ttag = this._primitive ? this.searchTerm : { [this.bindLabel()]: this.searchTerm };\n\t\t}\n\n\t\tconst handleTag = (item) =>\n\t\t\tthis.typeahead()?.observed || !this.isOpen() ? this.itemsList.mapItem(item, null) : this.itemsList.addItem(item);\n\t\tif (isPromise(tag)) {\n\t\t\t// The same guard the synchronous branch has always had. An `addTag` that\n\t\t\t// resolves with nothing is saying \"there is nothing to add\" — a creation\n\t\t\t// dialog dismissed, a request refused — and selecting it anyway turned that\n\t\t\t// into an option built out of `false` or `null`, added to the list and\n\t\t\t// written into the form. The caller had said no and the field answered with\n\t\t\t// a record that does not exist.\n\t\t\ttag.then((item) => {\n\t\t\t\tif (item) {\n\t\t\t\t\tthis.select(handleTag(item));\n\t\t\t\t}\n\t\t\t}).catch(() => {});\n\t\t} else if (tag) {\n\t\t\tthis.select(handleTag(tag));\n\t\t}\n\t}\n\n\tshowClear() {\n\t\treturn this.clearable() && (this.hasValue || this.searchTerm) && !this.disabled();\n\t}\n\n\tfocusOnClear() {\n\t\tthis.blur();\n\t\tif (this.clearButton()) {\n\t\t\tthis.clearButton().nativeElement.focus();\n\t\t}\n\t}\n\n\ttrackByOption = (_: number, item: NgOption) => {\n\t\tif (this.trackByFn()) {\n\t\t\treturn this.trackByFn()(item.value);\n\t\t}\n\n\t\treturn item;\n\t};\n\n\tshowNoItemsFound() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn (\n\t\t\t((empty && !this.typeahead()?.observed && !this.loading()) ||\n\t\t\t\t(empty && this.typeahead()?.observed && this._validTerm() && !this.loading())) &&\n\t\t\t!this.showAddTag\n\t\t);\n\t}\n\n\tshowTypeToSearch() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn empty && this.typeahead()?.observed && !this._validTerm() && !this.loading();\n\t}\n\n\tonCompositionStart() {\n\t\tthis._isComposing = true;\n\t}\n\n\tonCompositionEnd(term: string) {\n\t\tthis._isComposing = false;\n\t\tif (this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.filter(term);\n\t}\n\n\tfilter(term: string) {\n\t\tif (this._isComposing && !this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._searchTerm.set(term);\n\t\tif (this.typeahead()?.observed && (this._validTerm() || this.minTermLength() === 0)) {\n\t\t\tthis.typeahead().next(term);\n\t\t}\n\n\t\tif (!this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(term);\n\t\t\tif (this.isOpen()) {\n\t\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t\t}\n\t\t}\n\n\t\tthis.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((x) => x.value) });\n\t\tthis.open();\n\t}\n\n\tonInputFocus($event: FocusEvent) {\n\t\tif (this._focused) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\n\t\tthis.element.classList.add('ng-select-focused');\n\t\tthis.focusEvent.emit($event);\n\t\tthis._focused = true;\n\t}\n\n\tonInputBlur($event: FocusEvent) {\n\t\tthis.element.classList.remove('ng-select-focused');\n\t\tthis.blurEvent.emit($event);\n\t\tif (!this.isOpen() && !this.disabled()) {\n\t\t\tthis._onTouched();\n\t\t}\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._focused = false;\n\t}\n\n\tonItemHover(item: NgOption) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.markItem(item);\n\t}\n\n\tdetectChanges() {\n\t\tif (!(<any>this._cd).destroyed) {\n\t\t\tthis._cd.detectChanges();\n\t\t}\n\t}\n\n\tprivate _onChange = (_: any) => {};\n\n\tprivate _onTouched = () => {};\n\n\tprivate _setSearchTermFromItems() {\n\t\tconst selected = this.selectedItems?.[0];\n\t\tthis._searchTerm.set(selected?.label ?? null);\n\t}\n\n\tprivate _setItems(items: readonly any[]) {\n\t\tconst firstItem = items[0];\n\t\tthis.bindLabel.set(this.bindLabel() || this._defaultLabel);\n\t\tthis._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel() === this._defaultLabel;\n\t\tthis.itemsList.setItems(items);\n\t\tif (items.length > 0 && this.hasValue) {\n\t\t\tthis.itemsList.mapSelectedItems();\n\t\t}\n\t\tif (this.isOpen() && isDefined(this.searchTerm) && !this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(this.searchTerm);\n\t\t}\n\t\tif (this.typeahead()?.observed || this.isOpen()) {\n\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t}\n\t}\n\n\tprivate _setItemsFromNgOptions() {\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst options = this.ngOptions();\n\t\t\t\t// Wait until all ng-option inputs are initialized (avoids _groupBy crash when values load async)\n\t\t\t\tif (options.length > 0 && !options.every((opt) => opt.isInitialized())) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.bindLabel.set(this._defaultLabel);\n\t\t\t\tconst items =\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t$ngOptionValue: option.value(),\n\t\t\t\t\t\t$ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n\t\t\t\t\t\tdisabled: option.disabled(),\n\t\t\t\t\t})) ?? [];\n\t\t\t\tthis.items.set(items);\n\t\t\t\tthis.itemsList.setItems(items);\n\t\t\t\tif (this.hasValue) {\n\t\t\t\t\tthis.itemsList.mapSelectedItems();\n\t\t\t\t}\n\t\t\t\tthis._cd.detectChanges();\n\n\t\t\t\toptions\n\t\t\t\t\t// find item for each option\n\t\t\t\t\t.map((option) => ({\n\t\t\t\t\t\toption,\n\t\t\t\t\t\titem: this.itemsList.findItem(option.value()),\n\t\t\t\t\t}))\n\t\t\t\t\t// filter non found items\n\t\t\t\t\t.filter(({ item }) => isDefined(item))\n\t\t\t\t\t// process to update disabled and label\n\t\t\t\t\t.forEach(({ option, item }) => {\n\t\t\t\t\t\titem.disabled = option.disabled();\n\t\t\t\t\t\titem.label = option.label() || item.label;\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this._injector },\n\t\t);\n\t}\n\n\tprivate _isValidWriteValue(value: any): boolean {\n\t\tif (!isDefined(value) || (this.multiple() && value === '') || (Array.isArray(value) && value.length === 0)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst validateBinding = (item: any): boolean => {\n\t\t\tif (!isDefined(this.compareWith()) && isObject(item) && this.bindValue()) {\n\t\t\t\tthis._console.warn(\n\t\t\t\t\t`Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthis._console.warn('Multiple select ngModel should be array.');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn value.every((item) => validateBinding(item));\n\t\t} else {\n\t\t\treturn validateBinding(value);\n\t\t}\n\t}\n\n\tprivate _handleWriteValue(ngModel: any | any[]) {\n\t\tif (!this._isValidWriteValue(ngModel)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst select = (val: any) => {\n\t\t\tlet item = this.itemsList.findItem(val);\n\t\t\tif (item) {\n\t\t\t\tthis.itemsList.select(item);\n\t\t\t} else {\n\t\t\t\tconst isValObject = isObject(val);\n\t\t\t\tconst isPrimitive = !isValObject && !this.bindValue();\n\t\t\t\tif (isValObject || isPrimitive) {\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(val, null));\n\t\t\t\t} else if (this.bindValue()) {\n\t\t\t\t\titem = {\n\t\t\t\t\t\t[this.bindLabel()]: null,\n\t\t\t\t\t\t[this.bindValue()]: val,\n\t\t\t\t\t};\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(item, null));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\t(<any[]>ngModel).forEach((item) => select(item));\n\t\t} else {\n\t\t\tselect(ngModel);\n\t\t}\n\t}\n\n\tprivate _handleKeyPresses() {\n\t\tif (this.searchable()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._keyPress$\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttap((letter) => this._pressedKeys.push(letter)),\n\t\t\t\tdebounceTime(200),\n\t\t\t\tfilter(() => this._pressedKeys.length > 0),\n\t\t\t\tmap(() => this._pressedKeys.join('')),\n\t\t\t)\n\t\t\t.subscribe((term) => {\n\t\t\t\tconst item = this.itemsList.findByLabel(term);\n\t\t\t\tif (item) {\n\t\t\t\t\tif (this.isOpen()) {\n\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\tthis.itemsList.markItem(item);\n\t\t\t\t\t\t\tthis._scrollToMarked();\n\t\t\t\t\t\t\tthis._cd.markForCheck();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.select(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._pressedKeys = [];\n\t\t\t});\n\t}\n\n\tprivate _setInputAttributes() {\n\t\tconst input = this.searchInput().nativeElement;\n\t\tconst attributes = {\n\t\t\ttype: 'text',\n\t\t\tautocorrect: 'off',\n\t\t\tautocapitalize: 'off',\n\t\t\tautocomplete: 'off',\n\t\t\t'aria-controls': this.dropdownId,\n\t\t\t...this.inputAttrs(),\n\t\t};\n\n\t\tfor (const key of Object.keys(attributes)) {\n\t\t\tinput.setAttribute(key, attributes[key]);\n\t\t}\n\t}\n\n\tprivate _setTabFocusOnClear() {\n\t\tthis.tabFocusOnClear.set(isDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear);\n\t}\n\n\tprivate _updateNgModel() {\n\t\tconst model = [];\n\t\tfor (const item of this.selectedItems) {\n\t\t\tif (this.bindValue()) {\n\t\t\t\tlet value = null;\n\t\t\t\tif (item.children) {\n\t\t\t\t\tconst groupKey = this.groupValue() ? this.bindValue() : <string>this.groupBy();\n\t\t\t\t\tvalue = item.value[groupKey || <string>this.groupBy()];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = this.itemsList.resolveNested(item.value, this.bindValue());\n\t\t\t\t}\n\t\t\t\tmodel.push(value);\n\t\t\t} else {\n\t\t\t\tmodel.push(item.value);\n\t\t\t}\n\t\t}\n\n\t\tconst selected = this.selectedItems.map((x) => x.value);\n\t\tif (this.multiple()) {\n\t\t\tthis._onChange(model);\n\t\t\tthis.changeEvent.emit(selected);\n\t\t} else {\n\t\t\tthis._onChange(isDefined(model[0]) ? model[0] : null);\n\t\t\tthis.changeEvent.emit(selected[0]);\n\t\t}\n\n\t\tthis._cd.markForCheck();\n\t}\n\n\tprivate _clearSearch() {\n\t\tif (!this.searchTerm) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._changeSearch(null);\n\t\tthis.itemsList.resetFilteredItems();\n\t}\n\n\tprivate _changeSearch(searchTerm: string) {\n\t\tthis._searchTerm.set(searchTerm);\n\t\tif (this.typeahead()?.observed) {\n\t\t\tthis.typeahead().next(searchTerm);\n\t\t}\n\t}\n\n\tprivate _scrollToMarked() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollTo(this.itemsList.markedItem);\n\t}\n\n\tprivate _scrollToTag() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollToTag();\n\t}\n\n\tprivate _onSelectionChanged() {\n\t\tconst appendTo = this.appendTo() ?? this.config.appendTo;\n\t\tif (this.isOpen() && this.deselectOnClickValue() && appendTo) {\n\t\t\t// Make sure items are rendered.\n\t\t\tthis._cd.detectChanges();\n\t\t\tthis.dropdownPanel().adjustPosition();\n\t\t}\n\t}\n\n\tprivate _handleTab($event: KeyboardEvent) {\n\t\tif (this.isOpen() === false) {\n\t\t\tif (this.showClear() && !$event.shiftKey && this.tabFocusOnClear()) {\n\t\t\t\tthis.focusOnClear();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (!this.addTag()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.selectOnTab()) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprivate _handleEnter($event: KeyboardEvent) {\n\t\tconst openOnEnter = this.openOnEnter() ?? this.config.openOnEnter;\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t}\n\t\t} else if (openOnEnter) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleSpace($event: KeyboardEvent) {\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowDown($event: KeyboardEvent) {\n\t\tif (this._nextItemIsTag(+1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markNextItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowUp($event: KeyboardEvent) {\n\t\tif (!this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._nextItemIsTag(-1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markPreviousItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _nextItemIsTag(nextStep: number): boolean {\n\t\tconst nextIndex = this.itemsList.markedIndex + nextStep;\n\t\treturn (\n\t\t\tthis.addTag() && this.searchTerm && this.itemsList.markedItem && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n\t\t);\n\t}\n\n\tprivate _handleBackspace() {\n\t\tif (this.searchTerm || !this.clearable() || !this.clearOnBackspace() || !this.hasValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tthis.unselect(this.itemsList.lastSelectedItem);\n\t\t} else {\n\t\t\tthis.clearModel();\n\t\t}\n\t}\n\n\tprivate _mergeGlobalConfig(config: NgSelectConfig) {\n\t\tthis.bindValue.set(this.bindValue() || config.bindValue);\n\t\tthis.bindLabel.set(this.bindLabel() || config.bindLabel);\n\t\tthis.appearance.set(this.appearance() || config.appearance);\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\t/**\n\t * Gets virtual scroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if virtual scroll is enabled, `false` otherwise\n\t */\n\tprivate getVirtualScroll(config: NgSelectConfig): boolean {\n\t\treturn isDefined(this._virtualScroll()) ? this._virtualScroll()! : this.isVirtualScrollDisabled(config);\n\t}\n\n\t/**\n\t * Gets disableVirtualScroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if disableVirtualScroll is enabled, `false` otherwise\n\t */\n\tprivate isVirtualScrollDisabled(config: NgSelectConfig) {\n\t\treturn isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;\n\t}\n}\n","<div\n\t(mousedown)=\"handleMousedown($event)\"\n\t[class.ng-appearance-outline]=\"appearance() === 'outline'\"\n\t[class.ng-appearance-fill]=\"appearance() === 'fill'\"\n\t[class.ng-has-value]=\"hasValue\"\n\tclass=\"ng-select-container\">\n\t<div class=\"ng-value-container\">\n\t\t@if ((selectedItems.length === 0 && !searchTerm) || (fixedPlaceholder() ?? config.fixedPlaceholder)) {\n\t\t\t<ng-template #defaultPlaceholderTemplate>\n\t\t\t\t<div class=\"ng-placeholder\">{{ placeholder() ?? config.placeholder }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"placeholderTemplate() || defaultPlaceholderTemplate\"> </ng-template>\n\t\t}\n\n\t\t@if ((!multiLabelTemplate() || !multiple()) && selectedItems.length > 0) {\n\t\t\t@for (item of selectedItems; track trackByOption($index, item)) {\n\t\t\t\t<div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\">\n\t\t\t\t\t<ng-template #defaultLabelTemplate>\n\t\t\t\t\t\t<span class=\"ng-value-icon left\" (click)=\"unselect(item)\" aria-hidden=\"true\">×</span>\n\t\t\t\t\t\t<span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"labelTemplate() || defaultLabelTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\n\t\t@if (multiple() && multiLabelTemplate() && selectedValues.length > 0) {\n\t\t\t<ng-template [ngTemplateOutlet]=\"multiLabelTemplate()\" [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n\t\t\t</ng-template>\n\t\t}\n\n\t\t<div class=\"ng-input\">\n\t\t\t<input\n\t\t\t\t#searchInput\n\t\t\t\t(blur)=\"onInputBlur($event)\"\n\t\t\t\t(change)=\"$event.stopPropagation()\"\n\t\t\t\t(compositionend)=\"onCompositionEnd(searchInput.value)\"\n\t\t\t\t(compositionstart)=\"onCompositionStart()\"\n\t\t\t\t(focus)=\"onInputFocus($event)\"\n\t\t\t\t(input)=\"filter(searchInput.value)\"\n\t\t\t\t[attr.aria-activedescendant]=\"isOpen() ? itemsList?.markedItem?.htmlId : null\"\n\t\t\t\t[attr.aria-controls]=\"isOpen() ? dropdownId : null\"\n\t\t\t\t[attr.aria-expanded]=\"isOpen()\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\t\t[attr.id]=\"labelForId()\"\n\t\t\t\t[attr.tabindex]=\"tabIndex()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readOnly]=\"!searchable() || itemsList.maxItemsSelected\"\n\t\t\t\t[value]=\"searchTerm ?? ''\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\trole=\"combobox\" />\n\t\t</div>\n\t</div>\n\n\t@if (loading()) {\n\t\t<ng-template #defaultLoadingSpinnerTemplate>\n\t\t\t<div class=\"ng-spinner-loader\"></div>\n\t\t</ng-template>\n\t\t<ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate() || defaultLoadingSpinnerTemplate\"></ng-template>\n\t}\n\n\t@if (showClear()) {\n\t\t<span\n\t\t\tclass=\"ng-clear-wrapper\"\n\t\t\trole=\"button\"\n\t\t\ttabindex=\"0\"\n\t\t\t[attr.tabindex]=\"tabFocusOnClear() ? 0 : -1\"\n\t\t\ttitle=\"{{ clearAllText() || config.clearAllText }}\"\n\t\t\t#clearButton\n\t\t\t(click)=\"handleClearClick($event)\">\n\t\t\t@if (clearButtonTemplate()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"clearButtonTemplate()\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t<span class=\"ng-clear\" aria-hidden=\"true\">×</span>\n\t\t\t}\n\t\t</span>\n\t}\n\n\t<span class=\"ng-arrow-wrapper\">\n\t\t<span class=\"ng-arrow\"></span>\n\t</span>\n</div>\n\n@if (isOpen()) {\n\t@let appendToValue = appendTo() || config.appendTo;\n\t<ng-dropdown-panel\n\t\tclass=\"ng-dropdown-panel\"\n\t\t[virtualScroll]=\"dropdownVirtualScroll()\"\n\t\t[bufferAmount]=\"bufferAmount()\"\n\t\t[appendTo]=\"appendToValue\"\n\t\t[position]=\"dropdownPosition()\"\n\t\t[outsideClickEvent]=\"outsideClickEvent()\"\n\t\t[headerTemplate]=\"headerTemplate()\"\n\t\t[footerTemplate]=\"footerTemplate()\"\n\t\t[filterValue]=\"searchTerm\"\n\t\t[items]=\"itemsList.filteredItems\"\n\t\t[showAddTag]=\"showAddTag\"\n\t\t[markedItem]=\"itemsList.markedItem\"\n\t\t(update)=\"viewPortItems = $event\"\n\t\t(scroll)=\"scroll.emit($event)\"\n\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t(outsideClick)=\"close()\"\n\t\t[class.ng-select-multiple]=\"multiple()\"\n\t\t[class]=\"appendToValue ? (ngClass() ? ngClass() : classes) : null\"\n\t\t[id]=\"dropdownId\"\n\t\t[ariaLabelDropdown]=\"ariaLabelDropdown() ?? config.ariaLabelDropdown\"\n\t\t[popover]=\"popover()\">\n\t\t<ng-container>\n\t\t\t@for (item of viewPortItems; track trackByOption($index, item)) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[attr.role]=\"item.children ? 'group' : 'option'\"\n\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t(mouseover)=\"onItemHover(item)\"\n\t\t\t\t\t[class.ng-option-disabled]=\"item.disabled\"\n\t\t\t\t\t[class.ng-option-selected]=\"item.selected\"\n\t\t\t\t\t[class.ng-optgroup]=\"item.children\"\n\t\t\t\t\t[class.ng-option]=\"!item.children\"\n\t\t\t\t\t[class.ng-option-child]=\"!!item.parent\"\n\t\t\t\t\t[class.ng-option-marked]=\"item === itemsList.markedItem\"\n\t\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t\t[attr.id]=\"item?.htmlId\"\n\t\t\t\t\t[attr.aria-setsize]=\"itemsList.filteredItems.length\"\n\t\t\t\t\t[attr.aria-posinset]=\"(item.index ?? 0) + 1\">\n\t\t\t\t\t<ng-template #defaultOptionTemplate>\n\t\t\t\t\t\t<span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\titem.children ? optgroupTemplate() || defaultOptionTemplate : optionTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, item$: item, index: item.index, searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (showAddTag) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[class.ng-option-marked]=\"!itemsList.markedItem\"\n\t\t\t\t\t(mouseover)=\"itemsList.unmarkItem()\"\n\t\t\t\t\trole=\"option\"\n\t\t\t\t\t[attr.aria-selected]=\"false\"\n\t\t\t\t\t(click)=\"selectTag()\">\n\t\t\t\t\t<ng-template #defaultTagTemplate>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t><span class=\"ng-tag-label\">{{ addTagText() || config.addTagText }}</span\n\t\t\t\t\t\t\t>\"{{ searchTerm }}\"</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"tagTemplate() || defaultTagTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-container>\n\t\t@if (showNoItemsFound()) {\n\t\t\t<ng-template #defaultNotFoundTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ notFoundText() ?? config.notFoundText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"notFoundTemplate() || defaultNotFoundTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t\t@if (showTypeToSearch()) {\n\t\t\t<ng-template #defaultTypeToSearchTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ typeToSearchText() || config.typeToSearchText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"typeToSearchTemplate() || defaultTypeToSearchTemplate\"></ng-template>\n\t\t}\n\t\t@if (loading() && itemsList.filteredItems.length === 0) {\n\t\t\t<ng-template #defaultLoadingTextTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ loadingText() || config.loadingText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"loadingTextTemplate() || defaultLoadingTextTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t</ng-dropdown-panel>\n}\n\n<!-- Always present aria-live region -->\n<div aria-atomic=\"true\" aria-live=\"polite\" class=\"ng-visually-hidden\" role=\"status\">\n\t@if (isOpen() && showNoItemsFound()) {\n\t\t{{ notFoundText() ?? config.notFoundText }}\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../interfaces/common.interface';\nimport { HubSelectFormat, HubSelectFormats } from '../interfaces/select.interface';\nimport { HubSelectSuffixDirective } from '../directives/select-suffix.directive';\nimport { HubAppendDirective } from '../directives/append.directive';\nimport { HubPrependDirective } from '../directives/prepend.directive';\nimport { HubFieldControl } from '../shared/hub-field-control';\nimport { areEqual, get } from '../utils/utils';\nimport { NgSelectComponent } from './vendor/lib/ng-select.component';\nimport { NgSelectConfig } from './vendor/lib/config.service';\nimport { NgOptionComponent } from './vendor/lib/ng-option.component';\nimport {\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective\n} from './vendor/lib/ng-templates.directive';\n\n/**\n * Accessible select / multiselect / autocomplete built on the vendored ng-select engine, with the\n * `ng-hub-ui-forms` conventions on top: CVA binding, automatic error display (via\n * {@link HubFieldControl}), label, helper text and `--hub-select-*` token theming.\n *\n * The underlying ng-select DOM is themed in place from this component's stylesheet\n * (`ViewEncapsulation.None`) using hub tokens — no external `::ng-deep` overrides, and the vendored\n * source stays untouched so the upstream sync remains automatic.\n *\n * @example\n * ```html\n * <hub-select formControlName=\"country\" label=\"Country\" [items]=\"countries\" bindLabel=\"name\" bindValue=\"code\" />\n * ```\n */\n@Component({\n\tselector: 'hub-select',\n\timports: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tFormsModule,\n\t\tNgSelectComponent,\n\t\tNgOptionComponent,\n\t\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective\n\t],\n\ttemplateUrl: './select.component.html',\n\tstyleUrl: './select.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-select-host]': 'true'\n\t}\n})\nexport class HubSelectComponent extends HubFieldControl {\n\t/**\n\t * The app's global select configuration, read here rather than left to the engine: the\n\t * vendored source is re-synced from upstream, so a fallback that lives in its template is\n\t * one sync away from disappearing. See {@link placeholder}.\n\t */\n\tprotected readonly _ngSelectConfig = inject(NgSelectConfig);\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _selectFormats = HubSelectFormats;\n\tprotected readonly _value = signal<any>(null);\n\n\t// ── Customization templates ──────────────────────────────────────────────\n\t// ng-select resolves its templates with `contentChild` (no `descendants`),\n\t// which does NOT see through this wrapper's `<ng-content>`. We grab the\n\t// consumer-projected templates here and re-declare them as direct content of\n\t// the inner ng-select (see the template), forwarding each with its context —\n\t// so `<ng-template ng-option-tmp>` etc. work through `<hub-select>`.\n\tprotected readonly _optionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\n\t/** Deprecated select-only slot, superseded by `[hubAppend]`. */\n\tprotected readonly _legacySuffixTpl = contentChild(HubSelectSuffixDirective, { read: TemplateRef });\n\n\t/** Projected inline-start content (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected inline-end content (`[hubAppend]`), falling back to the deprecated slot. */\n\tprotected readonly _appendTpl = computed(() => this._genericAppendTpl() ?? this._legacySuffixTpl());\n\n\t/** The generic slot on its own, so `[hubAppend]` wins when both are declared. */\n\tprivate readonly _genericAppendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Whether content is attached to the trailing edge. */\n\tprotected readonly hasAppendTpl = computed<boolean>(() => !!this._appendTpl());\n\n\t/** Whether content is attached to the leading edge. */\n\tprotected readonly hasPrependTpl = computed<boolean>(() => !!this._prependTpl());\n\n\t/**\n\t * Text shown before the control as a group addon — the same contract as `hub-input`, so a\n\t * currency, a unit or a protocol reads identically whichever field carries it. A single\n\t * string is one addon; an array is a run of them.\n\t *\n\t * Distinct from `[hubSelectSuffix]`: an addon is a static label sharing the field's border,\n\t * while the suffix is an interactive control. Both can be present.\n\t */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether a leading addon is present. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prepend().length > 0);\n\n\t/** Whether a trailing addon is present. */\n\tprotected readonly hasAppend = computed<boolean>(() => this._append().length > 0);\n\n\t/**\n\t * Rendering format (`dropdown`, `buttons`, `checkbox`, `radio`).\n\t *\n\t * @deprecated The non-dropdown values (`buttons` / `checkbox` / `radio`) are deprecated and\n\t * will be removed in the next major — use `<hub-segmented>` instead, which is the dedicated,\n\t * lightweight control for inline options as segments/buttons (single **and** multiple selection,\n\t * horizontal **and** vertical, with label / helper text). Migration: `format=\"buttons\"` →\n\t * `<hub-segmented>`; `format=\"checkbox\"` → `<hub-segmented [multiple]=\"true\">`; `format=\"radio\"`\n\t * → `<hub-segmented [vertical]=\"true\">`. Only `dropdown` (the default) will remain on `hub-select`.\n\t */\n\treadonly format = input<HubSelectFormat>(this._selectFormats.Dropdown);\n\n\t/**\n\t * Lay out the `buttons`/`checkbox`/`radio` options vertically.\n\t *\n\t * @deprecated Tied to the deprecated non-dropdown `format` values — use `<hub-segmented [vertical]=\"true\">` instead.\n\t */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Items to choose from. */\n\treadonly items = input<any[]>([]);\n\n\t/** Property used as the visible label for object items. */\n\treadonly bindLabel = input<string | undefined>(undefined);\n\n\t/** Property used as the bound value for object items. */\n\treadonly bindValue = input<string | undefined>(undefined);\n\n\t/** Property (or fn) used to group items. */\n\treadonly groupBy = input<string | undefined>(undefined);\n\n\t/**\n\t * How typing matches an item, when matching its label is not enough.\n\t *\n\t * The underlying select has always taken one; this wrapper did not pass it on, so a\n\t * consumer who wanted to search by something the option shows but the label does not\n\t * — the building a room is in, the code beside a name — had to smuggle it into\n\t * `bindLabel` and then hide it again with a label template.\n\t */\n\treadonly searchFn = input<((term: string, item: any) => boolean) | undefined>(\n\t\tundefined\n\t);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/**\n\t * Placeholder text. Left undefined so the engine falls back to the app's `NgSelectConfig`,\n\t * which carries no placeholder of its own unless the app sets one. See {@link notFoundText}.\n\t */\n\treadonly placeholder = input<string | undefined>(undefined);\n\n\t/** Whether multiple selection is allowed. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Whether the options can be searched. */\n\treadonly searchable = input(true, { transform: booleanAttribute });\n\n\t/** Whether the selection can be cleared. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\n\n\t/** Whether the dropdown closes after a selection. */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Keep the placeholder visible even when a value is selected. Defaults to `false` (the\n\t * placeholder hides on selection) — ng-select v23 defaults this to `true`, which is not the\n\t * conventional behavior.\n\t */\n\treadonly fixedPlaceholder = input(false, { transform: booleanAttribute });\n\n\t/** Whether the control shows a loading state. */\n\treadonly loading = input(false, { transform: booleanAttribute });\n\n\t/** Whether the control is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text shown when no items match. Left undefined so the engine falls back to the app's\n\t * `NgSelectConfig`, which is where a translated build sets it once for every select.\n\t */\n\treadonly notFoundText = input<string | undefined>(undefined);\n\n\t/**\n\t * Where the dropdown panel is rendered, as a CSS selector. Defaults to\n\t * `'body'` so the panel escapes `overflow`/`transform` ancestors (cards,\n\t * scroll containers, modals) and is never clipped. Pass `undefined` to\n\t * render it inline within the component instead.\n\t */\n\treadonly appendTo = input<string | undefined>('body');\n\n\t/**\n\t * Allows creating new items from the search term (dropdown format). `true`\n\t * adds the term as-is; a function maps the term to a new item (sync or\n\t * `Promise`).\n\t */\n\treadonly addTag = input<boolean | ((term: string) => any | Promise<any>)>(false);\n\n\t/**\n\t * Label of the \"add item\" row shown while typing when `addTag` is enabled. Left undefined\n\t * so the engine falls back to the app's `NgSelectConfig`. See {@link notFoundText}.\n\t */\n\treadonly addTagText = input<string | undefined>(undefined);\n\n\t/** Minimum search-term length before filtering (or `typeahead`) kicks in. */\n\treadonly minTermLength = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Subject that receives search-term changes for async/server-side loading\n\t * (dropdown format). When provided, the control stops filtering client-side\n\t * and pushes each term here; feed the results back through `items`.\n\t *\n\t * Note: the vendor also pushes `null` through the Subject when it clears the\n\t * search box (e.g. right after a selection) — filter it out if you only\n\t * expect strings.\n\t */\n\treadonly typeahead = input<Subject<string> | undefined>(undefined);\n\n\t/**\n\t * Custom equality between an item and the bound value (e.g. objects compared\n\t * by id). When omitted, the vendor's built-in comparison applies.\n\t */\n\treadonly compareWith = input<((a: any, b: any) => boolean) | undefined>(undefined);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** ARIA attributes forwarded to the vendor's combobox search input. */\n\tprotected readonly a11yInputAttrs = computed<Record<string, string>>(() => {\n\t\tconst attrs: Record<string, string> = {};\n\t\tif (this.required()) {\n\t\t\tattrs['aria-required'] = 'true';\n\t\t}\n\t\treturn attrs;\n\t});\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<any>();\n\n\t/** Emits when the control gains focus (dropdown format). */\n\treadonly onFocus = output<any>();\n\n\t/** Emits when the control loses focus (dropdown format). */\n\treadonly onBlur = output<any>();\n\n\t/** Emits when the dropdown opens. */\n\treadonly onOpen = output<void>();\n\n\t/** Emits when the dropdown closes. */\n\treadonly onClose = output<void>();\n\n\t/** Emits when the value is cleared. */\n\treadonly onClear = output<void>();\n\n\t/** Emits on search-term changes (use with `typeahead`/async data). */\n\treadonly onSearch = output<{ term: string; items: any[] }>();\n\n\t/** Emits when an item is added to the selection. */\n\treadonly onAdd = output<any>();\n\n\t/** Emits when an item is removed from the selection. */\n\treadonly onRemove = output<any>();\n\n\t/** Emits while the dropdown list scrolls (virtual scroll window). */\n\treadonly scroll = output<{ start: number; end: number }>();\n\n\t/** Emits when the dropdown list is scrolled to the end (infinite loading). */\n\treadonly scrollToEnd = output<any>();\n\n\t/** Whether the current format selects multiple values. */\n\tprotected readonly isMulti = computed<boolean>(() => {\n\t\tswitch (this.format()) {\n\t\t\tcase this._selectFormats.Checkbox:\n\t\t\t\treturn true;\n\t\t\tcase this._selectFormats.Radio:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn this.multiple();\n\t\t}\n\t});\n\n\twriteValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t}\n\n\t/**\n\t * Propagates the value to the form and outputs.\n\t *\n\t * @param value - The new value emitted by the control.\n\t */\n\tsetValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Resolves the visible label of an item, honoring `bindLabel`.\n\t *\n\t * @param item - The source item.\n\t * @returns The label to display.\n\t */\n\tprotected itemLabel(item: any): any {\n\t\tconst bind = this.bindLabel();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Resolves the bound value of an item, honoring `bindValue`.\n\t *\n\t * @param item - The source item.\n\t * @returns The value stored when the item is selected.\n\t */\n\tprotected itemValue(item: any): any {\n\t\tconst bind = this.bindValue();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Whether an item is currently selected (used by the buttons/checkbox/radio formats).\n\t *\n\t * @param item - The source item.\n\t * @returns `true` when the item's value is part of the current selection.\n\t */\n\tprotected isSelected(item: any): boolean {\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\treturn Array.isArray(this._value()) && this._value().some((v: any) => areEqual(v, value));\n\t\t}\n\n\t\treturn areEqual(this._value(), value);\n\t}\n\n\t/**\n\t * Toggles an item's selection for the buttons/checkbox/radio formats.\n\t *\n\t * @param item - The item to toggle.\n\t */\n\tprotected toggleItem(item: any): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\tconst current: any[] = Array.isArray(this._value()) ? [...this._value()] : [];\n\t\t\tconst index = current.findIndex((v) => areEqual(v, value));\n\n\t\t\tif (index >= 0) {\n\t\t\t\tcurrent.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tcurrent.push(value);\n\t\t\t}\n\n\t\t\tthis.setValue(current);\n\t\t\treturn;\n\t\t}\n\n\t\t// Single selection: clicking the selected item clears it when clearable.\n\t\tif (this.isSelected(item)) {\n\t\t\tthis.setValue(this.clearable() ? null : value);\n\t\t} else {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input to a list, dropping empties so `prepend=\"\"` renders nothing\n\t * rather than an empty box.\n\t *\n\t * @param value - A single addon or a run of them.\n\t * @returns The addons to render, in order.\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-select\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t@switch (format()) {\n\t\t\t@case (_selectFormats.Dropdown) {\n\t\t\t\t<!-- [disabled] is claimed by the NgModel below (alias of its isDisabled input), not by\n\t\t\t\t ng-select — the engine's own `disabled` is a computed fed by setDisabledState.\n\t\t\t\t Dropping [ngModel] here would silently un-wire the disabled state. -->\n\t\t\t\t<!--\n\t\t\t\t\tThe control and its attached action are one field: the group is what makes\n\t\t\t\t\tthem share a line and a border, so a select with a button beside it does not\n\t\t\t\t\tread as two unrelated things that happen to be adjacent.\n\t\t\t\t-->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__group\"\n\t\t\t\t\t[class.hub-select__group--has-prepend]=\"hasPrepend() || hasPrependTpl()\"\n\t\t\t\t\t[class.hub-select__group--has-append]=\"hasAppend() || hasAppendTpl()\"\n\t\t\t\t>\n\t\t\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t\t\t<span class=\"hub-select__attached hub-select__attached--prepend\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t\t@for (addon of _prepend(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-select__addon hub-select__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<ng-select\n\t\t\t\t\t\tclass=\"hub-select__control\"\n\t\t\t\t\t\t[class.hub-select__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[labelForId]=\"$any(id)\"\n\t\t\t\t\t\t[items]=\"items()\"\n\t\t\t\t\t\t[bindLabel]=\"$any(bindLabel())\"\n\t\t\t\t\t\t[searchFn]=\"$any(searchFn())\"\n\t\t\t\t\t\t[bindValue]=\"$any(bindValue())\"\n\t\t\t\t\t\t[groupBy]=\"$any(groupBy())\"\n\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t[searchable]=\"searchable()\"\n\t\t\t\t\t\t[clearable]=\"clearable()\"\n\t\t\t\t\t\t[closeOnSelect]=\"closeOnSelect()\"\n\t\t\t\t\t\t[fixedPlaceholder]=\"fixedPlaceholder()\"\n\t\t\t\t\t\t[loading]=\"loading()\"\n\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[placeholder]=\"placeholder() ?? _ngSelectConfig.placeholder\"\n\t\t\t\t\t\t[notFoundText]=\"notFoundText()\"\n\t\t\t\t\t\t[appendTo]=\"appendTo()\"\n\t\t\t\t\t\t[addTag]=\"$any(addTag())\"\n\t\t\t\t\t\t[addTagText]=\"addTagText()\"\n\t\t\t\t\t\t[minTermLength]=\"minTermLength()\"\n\t\t\t\t\t\t[typeahead]=\"$any(typeahead())\"\n\t\t\t\t\t\t[compareWith]=\"$any(compareWith())\"\n\t\t\t\t\t\t[inputAttrs]=\"a11yInputAttrs()\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t(focus)=\"onFocus.emit($event)\"\n\t\t\t\t\t\t(blur)=\"onBlur.emit($event)\"\n\t\t\t\t\t\t(open)=\"onOpen.emit()\"\n\t\t\t\t\t\t(close)=\"onClose.emit()\"\n\t\t\t\t\t\t(clear)=\"onClear.emit()\"\n\t\t\t\t\t\t(search)=\"onSearch.emit($event)\"\n\t\t\t\t\t\t(add)=\"onAdd.emit($event)\"\n\t\t\t\t\t\t(remove)=\"onRemove.emit($event)\"\n\t\t\t\t\t\t(scroll)=\"scroll.emit($event)\"\n\t\t\t\t\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (_optionTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template\n\t\t\t\t\t\t\t\tng-option-tmp\n\t\t\t\t\t\t\t\tlet-item=\"item\"\n\t\t\t\t\t\t\t\tlet-item$=\"item$\"\n\t\t\t\t\t\t\t\tlet-index=\"index\"\n\t\t\t\t\t\t\t\tlet-searchTerm=\"searchTerm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpl\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item, item$, index, searchTerm }\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_optgroupTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template\n\t\t\t\t\t\t\t\tng-optgroup-tmp\n\t\t\t\t\t\t\t\tlet-item=\"item\"\n\t\t\t\t\t\t\t\tlet-item$=\"item$\"\n\t\t\t\t\t\t\t\tlet-index=\"index\"\n\t\t\t\t\t\t\t\tlet-searchTerm=\"searchTerm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpl\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item, item$, index, searchTerm }\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_labelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\" let-label=\"label\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, clear, label }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_multiLabelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ items, clear }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_headerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-header-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_footerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-footer-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_notFoundTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<ng-content></ng-content>\n\t\t\t\t\t</ng-select>\n\t\t\t\t\t@for (addon of _append(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-select__addon hub-select__addon--append\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<!--\n\t\t\t\t\t\tThe action goes last, after any append addon, mirroring where hub-input puts\n\t\t\t\t\t\tits password toggle: addons label the field, the action acts on it.\n\t\t\t\t\t-->\n\t\t\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t\t\t<span class=\"hub-select__attached hub-select__attached--append\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@case (_selectFormats.Buttons) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__buttons\"\n\t\t\t\t\t[class.hub-select__buttons--vertical]=\"vertical()\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-select__button\"\n\t\t\t\t\t\t\t[class.hub-select__button--selected]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ itemLabel(item) }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__options\"\n\t\t\t\t\t[class.hub-select__options--vertical]=\"vertical()\"\n\t\t\t\t\t[attr.role]=\"format() === _selectFormats.Radio ? 'radiogroup' : 'group'\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<label class=\"hub-select__option\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-select__option-input\"\n\t\t\t\t\t\t\t\t[type]=\"format() === _selectFormats.Radio ? 'radio' : 'checkbox'\"\n\t\t\t\t\t\t\t\t[name]=\"id\"\n\t\t\t\t\t\t\t\t[checked]=\"isSelected(item)\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t\t(change)=\"toggleItem(item)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"hub-select__option-label\">{{ itemLabel(item) }}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</div>\n","/**\n * Minimal native-`Date` helpers for the calendar. Keeps the library free of a date dependency.\n * All helpers operate on local time and treat a day as a calendar day (time ignored).\n */\n\n/** A single cell in the rendered calendar grid. */\nexport interface CalendarDay {\n\t/** The date this cell represents. */\n\tdate: Date;\n\t/** Day-of-month number (1–31). */\n\tday: number;\n\t/** Whether the date belongs to the month currently displayed. */\n\tcurrentMonth: boolean;\n\t/** Whether the date is today. */\n\ttoday: boolean;\n}\n\n/**\n * Formats a `Date` as an ISO `YYYY-MM-DD` string.\n *\n * @param date - The date to format.\n * @returns The ISO date string.\n */\nexport function formatISO(date: Date): string {\n\tconst m = `${date.getMonth() + 1}`.padStart(2, '0');\n\tconst d = `${date.getDate()}`.padStart(2, '0');\n\n\treturn `${date.getFullYear()}-${m}-${d}`;\n}\n\n/**\n * Whether two dates fall on the same calendar day.\n *\n * @param a - First date (nullable).\n * @param b - Second date (nullable).\n * @returns `true` when both are non-null and on the same day.\n */\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n\treturn !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\n/**\n * Returns a copy of `date` shifted by `months` (clamping the day to the target month length).\n *\n * @param date - Base date.\n * @param months - Months to add (can be negative).\n * @returns The shifted date.\n */\nexport function addMonths(date: Date, months: number): Date {\n\tconst result = new Date(date.getFullYear(), date.getMonth() + months, 1);\n\tconst lastDay = new Date(result.getFullYear(), result.getMonth() + 1, 0).getDate();\n\n\tresult.setDate(Math.min(date.getDate(), lastDay));\n\n\treturn result;\n}\n\n/**\n * Builds the 6×7 calendar grid for the month containing `viewDate`.\n *\n * @param viewDate - Any date within the month to render.\n * @param firstDayOfWeek - First weekday (0 = Sunday, 1 = Monday…). Defaults to Monday.\n * @returns A flat list of 42 {@link CalendarDay} cells (6 weeks).\n */\nexport function buildCalendarGrid(viewDate: Date, firstDayOfWeek = 1): CalendarDay[] {\n\tconst year = viewDate.getFullYear();\n\tconst month = viewDate.getMonth();\n\tconst firstOfMonth = new Date(year, month, 1);\n\tconst offset = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;\n\tconst start = new Date(year, month, 1 - offset);\n\tconst today = new Date();\n\tconst days: CalendarDay[] = [];\n\n\tfor (let i = 0; i < 42; i++) {\n\t\tconst date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);\n\n\t\tdays.push({\n\t\t\tdate,\n\t\t\tday: date.getDate(),\n\t\t\tcurrentMonth: date.getMonth() === month,\n\t\t\ttoday: isSameDay(date, today)\n\t\t});\n\t}\n\n\treturn days;\n}\n\n/**\n * Returns localized weekday names ordered from `firstDayOfWeek`.\n *\n * @param locale - BCP-47 locale (e.g. `en-US`).\n * @param firstDayOfWeek - First weekday (0 = Sunday, 1 = Monday…).\n * @param format - Weekday width.\n * @returns Seven weekday labels.\n */\nexport function weekdayLabels(locale: string, firstDayOfWeek = 1, format: 'short' | 'narrow' | 'long' = 'short'): string[] {\n\tconst formatter = new Intl.DateTimeFormat(locale, { weekday: format });\n\tconst labels: string[] = [];\n\n\t// 2024-01-07 is a Sunday → use it as the week anchor.\n\tfor (let i = 0; i < 7; i++) {\n\t\tconst date = new Date(2024, 0, 7 + ((firstDayOfWeek + i) % 7));\n\t\tlabels.push(formatter.format(date));\n\t}\n\n\treturn labels;\n}\n\n/** Day-level comparison: returns -1, 0 or 1 like `Array.sort`. */\nexport function compareDay(a: Date, b: Date): number {\n\tconst da = new Date(a.getFullYear(), a.getMonth(), a.getDate()).getTime();\n\tconst db = new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime();\n\n\treturn da < db ? -1 : da > db ? 1 : 0;\n}\n\n/** Whether `date` is strictly before `ref` (day level). */\nexport function isBeforeDay(date: Date, ref: Date): boolean {\n\treturn compareDay(date, ref) < 0;\n}\n\n/** Whether `date` is strictly after `ref` (day level). */\nexport function isAfterDay(date: Date, ref: Date): boolean {\n\treturn compareDay(date, ref) > 0;\n}\n\n/**\n * Whether `date` lies strictly between `start` and `end` (exclusive of the endpoints).\n *\n * @param date - The candidate date.\n * @param start - Range start, or `null`.\n * @param end - Range end, or `null`.\n * @returns `true` when the date is inside the open range.\n */\nexport function isInRange(date: Date, start: Date | null, end: Date | null): boolean {\n\treturn !!start && !!end && isAfterDay(date, start) && isBeforeDay(date, end);\n}\n","/**\n * Granularity-aware helpers for the datepicker: truncation, bounds, parsing and ISO\n * serialization across the whole `year → second` axis.\n *\n * **Everything here works in the reader's local zone, by date parts.** A `Date` is never built\n * from a bare `YYYY-MM-DD` string through `new Date(...)`, because the spec reads that as UTC\n * midnight — which in Spain is the previous afternoon. The only place the engine is trusted to\n * parse is a string that already carries an offset, where it is unambiguous.\n */\n\nimport { HubDatepickerGranularity } from '../../interfaces/datepicker.interface';\n\n/** Granularity units ordered coarsest to finest. */\nconst UNITS: readonly HubDatepickerGranularity[] = ['year', 'month', 'day', 'hour', 'minute', 'second'] as const;\n\nconst pad = (n: number, width = 2): string => `${Math.abs(n)}`.padStart(width, '0');\n\n/** Position of a granularity on the coarse→fine axis. */\nexport function unitIndex(granularity: HubDatepickerGranularity): number {\n\treturn UNITS.indexOf(granularity);\n}\n\n/** Whether a granularity carries a time-of-day (`hour` and finer). */\nexport function carriesTime(granularity: HubDatepickerGranularity): boolean {\n\treturn unitIndex(granularity) >= unitIndex('hour');\n}\n\n/** Whether a granularity is coarser than a day (`year`, `month`) and so uses the period grid. */\nexport function isPeriodUnit(granularity: HubDatepickerGranularity): boolean {\n\treturn unitIndex(granularity) < unitIndex('day');\n}\n\n/**\n * Truncates a date down to the given granularity, keeping every coarser part.\n *\n * @param date - The date to truncate.\n * @param granularity - The precision to keep.\n * @returns A new local `Date` at the start of the unit.\n */\nexport function startOfUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\tconst y = date.getFullYear();\n\tconst mo = date.getMonth();\n\tconst d = date.getDate();\n\tconst h = date.getHours();\n\tconst mi = date.getMinutes();\n\n\tswitch (granularity) {\n\t\tcase 'year':\n\t\t\treturn new Date(y, 0, 1);\n\t\tcase 'month':\n\t\t\treturn new Date(y, mo, 1);\n\t\tcase 'day':\n\t\t\treturn new Date(y, mo, d);\n\t\tcase 'hour':\n\t\t\treturn new Date(y, mo, d, h);\n\t\tcase 'minute':\n\t\t\treturn new Date(y, mo, d, h, mi);\n\t\tcase 'second':\n\t\t\treturn new Date(y, mo, d, h, mi, date.getSeconds());\n\t}\n}\n\n/** Start of the unit immediately after the one containing `date`. */\nfunction startOfNextUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\tconst s = startOfUnit(date, granularity);\n\n\tswitch (granularity) {\n\t\tcase 'year':\n\t\t\treturn new Date(s.getFullYear() + 1, 0, 1);\n\t\tcase 'month':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth() + 1, 1);\n\t\tcase 'day':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate() + 1);\n\t\tcase 'hour':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours() + 1);\n\t\tcase 'minute':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours(), s.getMinutes() + 1);\n\t\tcase 'second':\n\t\t\treturn new Date(s.getFullYear(), s.getMonth(), s.getDate(), s.getHours(), s.getMinutes(), s.getSeconds() + 1);\n\t}\n}\n\n/**\n * Last representable instant of the unit containing `date` (one millisecond before the next).\n *\n * @param date - Any date inside the unit.\n * @param granularity - The unit.\n * @returns A new local `Date` at the end of the unit.\n */\nexport function endOfUnit(date: Date, granularity: HubDatepickerGranularity): Date {\n\treturn new Date(startOfNextUnit(date, granularity).getTime() - 1);\n}\n\n/** Instant comparison: -1, 0 or 1 like `Array.sort`. */\nexport function compareInstant(a: Date, b: Date): number {\n\tconst ta = a.getTime();\n\tconst tb = b.getTime();\n\n\treturn ta < tb ? -1 : ta > tb ? 1 : 0;\n}\n\n/** Comparison at a given precision: two dates in the same unit compare equal. */\nexport function compareAt(a: Date, b: Date, granularity: HubDatepickerGranularity): number {\n\treturn compareInstant(startOfUnit(a, granularity), startOfUnit(b, granularity));\n}\n\n/**\n * Formats the UTC offset of a **specific date** as `+HH:mm`.\n *\n * Deliberately derived from the date itself and never from `new Date()`: the offset of a zone\n * changes with daylight saving, so a January and an August value in Madrid must not be stamped\n * with the same one.\n *\n * @param date - The date whose offset is wanted.\n * @returns The offset, e.g. `+02:00` or `-05:00`.\n */\nexport function formatOffset(date: Date): string {\n\tconst minutesEastOfUtc = -date.getTimezoneOffset();\n\tconst sign = minutesEastOfUtc < 0 ? '-' : '+';\n\tconst abs = Math.abs(minutesEastOfUtc);\n\n\treturn `${sign}${pad(Math.floor(abs / 60))}:${pad(abs % 60)}`;\n}\n\n/**\n * Serializes a date as ISO 8601 at the given granularity, in the reader's local zone.\n *\n * Coarse units yield a partial ISO date (`2026`, `2026-09`, `2026-09-01`); anything carrying a\n * time yields a full timestamp with an explicit offset (`2026-09-01T09:30:00+02:00`).\n *\n * @param date - The date to serialize (truncated internally).\n * @param granularity - The precision to emit.\n * @returns The ISO string.\n */\nexport function formatISOAt(date: Date, granularity: HubDatepickerGranularity): string {\n\tconst t = startOfUnit(date, granularity);\n\tconst year = `${t.getFullYear()}`.padStart(4, '0');\n\n\tif (granularity === 'year') {\n\t\treturn year;\n\t}\n\n\tconst month = pad(t.getMonth() + 1);\n\n\tif (granularity === 'month') {\n\t\treturn `${year}-${month}`;\n\t}\n\n\tconst day = pad(t.getDate());\n\n\tif (granularity === 'day') {\n\t\treturn `${year}-${month}-${day}`;\n\t}\n\n\tconst time = `${pad(t.getHours())}:${pad(t.getMinutes())}:${pad(t.getSeconds())}`;\n\n\treturn `${year}-${month}-${day}T${time}${formatOffset(t)}`;\n}\n\n/** Matches a date, with an optional time and an optional offset. */\nconst ISO_DATE_TIME = /^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.\\d+)?(Z|[+-]\\d{2}:?\\d{2})?)?$/;\n\n/**\n * Parses any accepted input shape into a local `Date`.\n *\n * Dispatches on shape so a bare calendar date is never handed to `new Date(string)`:\n *\n * | Input | Read as |\n * | --- | --- |\n * | `\"2026\"` | 1 January, local midnight |\n * | `\"2026-09\"` | 1st of the month, local midnight |\n * | `\"2026-09-01\"` | Local midnight |\n * | `\"2026-09-01T09:30\"` (no offset) | That local wall clock |\n * | `\"…+02:00\"` / `\"…Z\"` | An instant — unambiguous, so the engine parses it |\n * | `Date` | As-is |\n * | `number` | **Always** epoch milliseconds |\n *\n * @param value - The raw value.\n * @param parse - Optional consumer-supplied parser that overrides all of the above.\n * @returns A local `Date`, or `null` when the value is empty or unparseable.\n */\nexport function parseFlexible(value: unknown, parse?: ((raw: unknown) => Date | null) | null): Date | null {\n\tif (parse) {\n\t\tconst custom = parse(value);\n\n\t\treturn custom instanceof Date && !isNaN(custom.getTime()) ? custom : null;\n\t}\n\n\tif (value == null || value === '') {\n\t\treturn null;\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn isNaN(value.getTime()) ? null : value;\n\t}\n\n\tif (typeof value === 'number') {\n\t\treturn Number.isFinite(value) ? new Date(value) : null;\n\t}\n\n\tif (typeof value !== 'string') {\n\t\treturn null;\n\t}\n\n\tconst yearOnly = /^(\\d{4})$/.exec(value);\n\n\tif (yearOnly) {\n\t\treturn new Date(+yearOnly[1], 0, 1);\n\t}\n\n\tconst yearMonth = /^(\\d{4})-(\\d{2})$/.exec(value);\n\n\tif (yearMonth) {\n\t\treturn new Date(+yearMonth[1], +yearMonth[2] - 1, 1);\n\t}\n\n\tconst match = ISO_DATE_TIME.exec(value);\n\n\tif (match) {\n\t\tconst [, y, mo, d, h, mi, s, offset] = match;\n\n\t\tif (offset) {\n\t\t\tconst instant = new Date(value);\n\n\t\t\treturn isNaN(instant.getTime()) ? null : instant;\n\t\t}\n\n\t\treturn new Date(+y, +mo - 1, +d, +(h ?? 0), +(mi ?? 0), +(s ?? 0));\n\t}\n\n\tconst fallback = new Date(value);\n\n\treturn isNaN(fallback.getTime()) ? null : fallback;\n}\n\n/**\n * Whether the whole unit containing `date` falls outside the bounds.\n *\n * A day that merely *starts* before `min` is still selectable — only a day with no allowed\n * instant in it is refused, so `min = 2026-09-01T14:00` leaves 1 September clickable and lets\n * the time controls do the finer refusing.\n *\n * @param date - The candidate.\n * @param min - Earliest allowed instant, or `null`.\n * @param max - Latest allowed instant, or `null`.\n * @param granularity - The unit the candidate represents.\n * @returns `true` when no instant of the unit is allowed.\n */\nexport function unitOutOfBounds(\n\tdate: Date,\n\tmin: Date | null,\n\tmax: Date | null,\n\tgranularity: HubDatepickerGranularity\n): boolean {\n\tif (min && compareInstant(endOfUnit(date, granularity), min) < 0) {\n\t\treturn true;\n\t}\n\n\treturn !!max && compareInstant(startOfUnit(date, granularity), max) > 0;\n}\n\n/**\n * Pulls a date back inside `[min, max]`, returning it untouched when already inside.\n *\n * @param date - The candidate.\n * @param min - Earliest allowed instant, or `null`.\n * @param max - Latest allowed instant, or `null`.\n * @returns The clamped date.\n */\nexport function clampToBounds(date: Date, min: Date | null, max: Date | null): Date {\n\tif (min && compareInstant(date, min) < 0) {\n\t\treturn new Date(min.getTime());\n\t}\n\n\tif (max && compareInstant(date, max) > 0) {\n\t\treturn new Date(max.getTime());\n\t}\n\n\treturn date;\n}\n\n/**\n * Moves a spinbutton value by one step, snapping to the step grid and wrapping at `cycle`.\n *\n * A value already off the grid snaps to the neighbouring multiple rather than keeping its\n * offset, so `09:07` with a 5-minute step goes to `09:10` up and `09:05` down.\n *\n * @param value - Current value.\n * @param step - Step size (values below 1 are treated as 1).\n * @param direction - `1` to increase, `-1` to decrease.\n * @param cycle - Exclusive upper bound the value wraps at (24 for hours, 60 for minutes).\n * @returns The next value.\n */\nexport function stepValue(value: number, step: number, direction: 1 | -1, cycle: number): number {\n\tconst size = Math.max(1, Math.floor(step));\n\tconst next = direction > 0 ? Math.floor(value / size) * size + size : Math.ceil(value / size) * size - size;\n\n\treturn ((next % cycle) + cycle) % cycle;\n}\n\n/**\n * Whether the locale (or an explicit override) wants a 12-hour clock.\n *\n * @param locale - BCP-47 locale.\n * @param hourFormat - Explicit override, or `undefined` to derive from the locale.\n * @returns `true` for a 12-hour clock.\n */\nexport function resolveHour12(locale: string, hourFormat: '12' | '24' | undefined): boolean {\n\tif (hourFormat === '12') {\n\t\treturn true;\n\t}\n\n\tif (hourFormat === '24') {\n\t\treturn false;\n\t}\n\n\treturn !!new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions().hour12;\n}\n\n/**\n * Localized AM/PM labels, taken from `Intl` like month and weekday names — so the day period\n * never needs a translation entry.\n *\n * @param locale - BCP-47 locale.\n * @returns A `[am, pm]` tuple.\n */\nexport function meridiemLabels(locale: string): [string, string] {\n\tconst formatter = new Intl.DateTimeFormat(locale, { hour: 'numeric', hour12: true });\n\tconst at = (hour: number, fallback: string): string =>\n\t\tformatter.formatToParts(new Date(2026, 0, 1, hour)).find((part) => part.type === 'dayPeriod')?.value ?? fallback;\n\n\treturn [at(9, 'AM'), at(21, 'PM')];\n}\n\n/**\n * Replaces the time-of-day of `date` with the given parts, keeping its calendar date.\n *\n * The result is read back from the constructed `Date` rather than assumed: on a daylight-saving\n * spring-forward day the requested wall clock may not exist (02:30 rolls to 03:30), and the\n * component must show the time it actually emits.\n *\n * @param date - The date whose calendar day is kept.\n * @param hours - Hours (0–23).\n * @param minutes - Minutes (0–59).\n * @param seconds - Seconds (0–59).\n * @returns A new local `Date`.\n */\nexport function withTime(date: Date, hours: number, minutes: number, seconds = 0): Date {\n\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, seconds);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { HubDatepickerGranularity, HubDatepickerLabels } from '../../interfaces/datepicker.interface';\nimport { compareAt, startOfUnit, unitOutOfBounds } from './time-utils';\n\n/** A cell of the month / year grid, enriched with its selection and range state. */\nexport interface PeriodCell {\n\t/** First instant of the period this cell represents. */\n\tdate: Date;\n\t/** Localized label (month name, or the year number). */\n\tlabel: string;\n\t/** Whether the period contains today. */\n\tcurrent: boolean;\n\t/** Whether the year falls outside the decade being shown (the two padding cells). */\n\toutside: boolean;\n\tdisabled: boolean;\n\tselected: boolean;\n\trangeStart: boolean;\n\trangeEnd: boolean;\n\tinRange: boolean;\n\tfocused: boolean;\n}\n\n/**\n * A year page shows one decade plus a padding year at each end, so 12 cells fill the 3×4 layout\n * and the neighbouring decades stay one click away — the same trick the day grid already uses to\n * show the tail of the previous month and the head of the next.\n */\nconst YEARS_PER_PAGE = 12;\n\n/** First year of the decade containing `year`. */\nexport function decadeStart(year: number): number {\n\treturn Math.floor(year / 10) * 10;\n}\n\n/**\n * The coarse-unit panel of `<hub-datepicker>`: a 12-cell grid of months, or of years.\n *\n * Internal to the datepicker and not part of the public API. It mirrors the day grid's keyboard\n * model at a coarser step (`←/→` ±1, `↑/↓` ±3 for one row, `Home`/`End` to the row ends,\n * `PageUp`/`PageDown` to the previous or next year / block) so the two panels do not ask the user\n * to learn different calendars.\n */\n@Component({\n\tselector: 'hub-datepicker-period',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { class: 'hub-datepicker__period' },\n\ttemplate: `\n\t\t<div class=\"hub-datepicker__period-grid\" role=\"grid\" (keydown)=\"onKeydown($event)\">\n\t\t\t@for (cell of cells(); track cell.date.getTime()) {\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\tclass=\"hub-datepicker__period-cell\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--outside]=\"cell.outside\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--current]=\"cell.current\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__period-cell--in-range]=\"cell.inRange\"\n\t\t\t\t\t[attr.data-time]=\"cell.date.getTime()\"\n\t\t\t\t\t[attr.tabindex]=\"cell.focused ? 0 : -1\"\n\t\t\t\t\t[attr.aria-selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[disabled]=\"cell.disabled\"\n\t\t\t\t\t(click)=\"pick.emit(cell.date)\"\n\t\t\t\t>\n\t\t\t\t\t{{ cell.label }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t`\n})\nexport class HubDatepickerPeriodGridComponent {\n\t/** Which coarse unit the grid renders. */\n\treadonly granularity = input.required<Extract<HubDatepickerGranularity, 'year' | 'month'>>();\n\n\t/** Any date inside the year (for months) or the block (for years) being shown. */\n\treadonly viewDate = input.required<Date>();\n\n\t/** Cell holding keyboard focus. */\n\treadonly focusedDate = input.required<Date>();\n\n\t/** Selected point, or range start. */\n\treadonly selectionStart = input<Date | null>(null);\n\n\t/** Range end, or `null` outside `range` mode. */\n\treadonly selectionEnd = input<Date | null>(null);\n\n\t/** Whether the picker is in `range` mode. */\n\treadonly range = input(false);\n\n\t/** BCP-47 locale, used for month names. */\n\treadonly locale = input.required<string>();\n\n\treadonly min = input<Date | null>(null);\n\treadonly max = input<Date | null>(null);\n\n\t/** Resolved labels (unused today, kept so the grid can gain aria text without a new input). */\n\treadonly labels = input.required<HubDatepickerLabels>();\n\n\t/** Emits the first instant of the picked period. */\n\treadonly pick = output<Date>();\n\n\t/** Emits the date that should receive focus after an arrow key. */\n\treadonly focusMove = output<Date>();\n\n\t/** Emits when `Escape` is pressed. */\n\treadonly dismiss = output<void>();\n\n\t/** First period of the currently displayed page — January for months, the padding year for years. */\n\tprotected readonly pageStart = computed<Date>(() => {\n\t\tconst year = this.viewDate().getFullYear();\n\n\t\treturn this.granularity() === 'month' ? new Date(year, 0, 1) : new Date(decadeStart(year) - 1, 0, 1);\n\t});\n\n\tprotected readonly cells = computed<PeriodCell[]>(() => {\n\t\tconst granularity = this.granularity();\n\t\tconst start = this.pageStart();\n\t\tconst focused = this.focusedDate();\n\t\tconst selectionStart = this.selectionStart();\n\t\tconst selectionEnd = this.selectionEnd();\n\t\tconst isRange = this.range();\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst today = new Date();\n\t\tconst monthNames = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n\t\tconst decade = decadeStart(this.viewDate().getFullYear());\n\n\t\treturn Array.from({ length: YEARS_PER_PAGE }, (_, index) => {\n\t\t\tconst date =\n\t\t\t\tgranularity === 'month' ? new Date(start.getFullYear(), index, 1) : new Date(start.getFullYear() + index, 0, 1);\n\n\t\t\tconst isStart = !!selectionStart && compareAt(date, selectionStart, granularity) === 0;\n\t\t\tconst isEnd = !!selectionEnd && compareAt(date, selectionEnd, granularity) === 0;\n\n\t\t\treturn {\n\t\t\t\tdate,\n\t\t\t\tlabel: granularity === 'month' ? monthNames.format(date) : `${date.getFullYear()}`,\n\t\t\t\tcurrent: compareAt(date, today, granularity) === 0,\n\t\t\t\toutside: granularity === 'year' && (date.getFullYear() < decade || date.getFullYear() > decade + 9),\n\t\t\t\tdisabled: unitOutOfBounds(date, min, max, granularity),\n\t\t\t\tselected: !isRange && isStart,\n\t\t\t\trangeStart: isRange && isStart,\n\t\t\t\trangeEnd: isRange && isEnd,\n\t\t\t\tinRange:\n\t\t\t\t\tisRange &&\n\t\t\t\t\t!!selectionStart &&\n\t\t\t\t\t!!selectionEnd &&\n\t\t\t\t\tcompareAt(date, selectionStart, granularity) > 0 &&\n\t\t\t\t\tcompareAt(date, selectionEnd, granularity) < 0,\n\t\t\t\tfocused: compareAt(date, focused, granularity) === 0\n\t\t\t};\n\t\t});\n\t});\n\n\t/**\n\t * Keyboard navigation, mirroring the day grid one unit coarser.\n\t *\n\t * @param event - The originating key event (handled on the grid container).\n\t */\n\tprotected onKeydown(event: KeyboardEvent): void {\n\t\tconst grid = event.currentTarget as HTMLElement;\n\t\tconst focused = startOfUnit(this.focusedDate(), this.granularity());\n\t\t// Column comes from the cell's position on the page, not from the month or year number:\n\t\t// a year page starts on a padding year, so the two do not line up.\n\t\tconst focusedIndex = this.cells().findIndex((cell) => cell.focused);\n\t\tconst column = (focusedIndex < 0 ? 0 : focusedIndex) % 3;\n\t\tlet next: Date | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tnext = this.#shift(focused, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tnext = this.#shift(focused, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#shift(focused, -3);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#shift(focused, 3);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#shift(focused, -column);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#shift(focused, 2 - column);\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = this.#shift(focused, -this.#pageSize());\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = this.#shift(focused, this.#pageSize());\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst cell = this.cells().find((c) => c.focused);\n\n\t\t\t\tif (cell && !cell.disabled) {\n\t\t\t\t\tthis.pick.emit(cell.date);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.dismiss.emit();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.focusMove.emit(next);\n\n\t\t// Move DOM focus to the newly focused cell once the grid has re-rendered.\n\t\tconst time = next.getTime();\n\t\tsetTimeout(() => grid.querySelector<HTMLElement>(`[data-time=\"${time}\"]`)?.focus(), 0);\n\t}\n\n\t#shift(date: Date, delta: number): Date {\n\t\treturn this.granularity() === 'month'\n\t\t\t? new Date(date.getFullYear(), date.getMonth() + delta, 1)\n\t\t\t: new Date(date.getFullYear() + delta, 0, 1);\n\t}\n\n\t/** One page: a year of months, or a decade of years. */\n\t#pageSize(): number {\n\t\treturn this.granularity() === 'month' ? 12 : 10;\n\t}\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, ViewEncapsulation } from '@angular/core';\nimport { HubDatepickerGranularity, HubDatepickerLabels } from '../../interfaces/datepicker.interface';\nimport { clampToBounds, compareInstant, meridiemLabels, stepValue, withTime } from './time-utils';\n\n/**\n * The time strip of `<hub-datepicker>`: hour, minute and (at second granularity) second, plus an\n * AM/PM toggle on a 12-hour clock.\n *\n * Internal to the datepicker and not part of the public API. It exists as a component rather than\n * inline template because `range` mode renders it twice — once per endpoint — and duplicating a\n * keyboard model is how the two halves drift apart.\n *\n * Each field is an ARIA `spinbutton`: arrows step by the configured amount, `PageUp`/`PageDown`\n * jump a full cycle of the next unit up, `Home`/`End` reach the extremes, and a typed value is\n * committed on blur or `Enter`. A step that would take the value outside `[min, max]` is refused\n * rather than clamped, so holding an arrow cannot silently walk past a bound.\n *\n * The emitted `Date` keeps the calendar day of the incoming one; only the time changes.\n */\n@Component({\n\tselector: 'hub-datepicker-time',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { class: 'hub-datepicker__time' },\n\ttemplate: `\n\t\t<span class=\"hub-datepicker__time-label\" [id]=\"labelId\">{{ label() }}</span>\n\n\t\t<span class=\"hub-datepicker__time-fields\" role=\"group\" [attr.aria-labelledby]=\"labelId\">\n\t\t\t<input\n\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\ttype=\"text\"\n\t\t\t\trole=\"spinbutton\"\n\t\t\t\tinputmode=\"numeric\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tsize=\"2\"\n\t\t\t\t[attr.aria-label]=\"labels().hour\"\n\t\t\t\t[attr.aria-valuenow]=\"value().getHours()\"\n\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t[attr.aria-valuemax]=\"23\"\n\t\t\t\t[attr.aria-valuetext]=\"hourValueText()\"\n\t\t\t\t[value]=\"displayHours()\"\n\t\t\t\t(keydown)=\"onKeydown($event, 'hour')\"\n\t\t\t\t(blur)=\"commit($event, 'hour')\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-datepicker__time-separator\" aria-hidden=\"true\">:</span>\n\n\t\t\t<input\n\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\ttype=\"text\"\n\t\t\t\trole=\"spinbutton\"\n\t\t\t\tinputmode=\"numeric\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tsize=\"2\"\n\t\t\t\t[attr.aria-label]=\"labels().minute\"\n\t\t\t\t[attr.aria-valuenow]=\"value().getMinutes()\"\n\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t[attr.aria-valuemax]=\"59\"\n\t\t\t\t[value]=\"pad(value().getMinutes())\"\n\t\t\t\t(keydown)=\"onKeydown($event, 'minute')\"\n\t\t\t\t(blur)=\"commit($event, 'minute')\"\n\t\t\t/>\n\n\t\t\t@if (showsSeconds()) {\n\t\t\t\t<span class=\"hub-datepicker__time-separator\" aria-hidden=\"true\">:</span>\n\n\t\t\t\t<input\n\t\t\t\t\tclass=\"hub-datepicker__time-field\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\trole=\"spinbutton\"\n\t\t\t\t\tinputmode=\"numeric\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tsize=\"2\"\n\t\t\t\t\t[attr.aria-label]=\"labels().second\"\n\t\t\t\t\t[attr.aria-valuenow]=\"value().getSeconds()\"\n\t\t\t\t\t[attr.aria-valuemin]=\"0\"\n\t\t\t\t\t[attr.aria-valuemax]=\"59\"\n\t\t\t\t\t[value]=\"pad(value().getSeconds())\"\n\t\t\t\t\t(keydown)=\"onKeydown($event, 'second')\"\n\t\t\t\t\t(blur)=\"commit($event, 'second')\"\n\t\t\t\t/>\n\t\t\t}\n\n\t\t\t@if (hour12()) {\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__time-meridiem\"\n\t\t\t\t\t[attr.aria-label]=\"labels().meridiem\"\n\t\t\t\t\t[attr.aria-pressed]=\"isPm()\"\n\t\t\t\t\t(click)=\"toggleMeridiem()\"\n\t\t\t\t>\n\t\t\t\t\t{{ meridiemLabel() }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</span>\n\t`\n})\nexport class HubDatepickerTimeFieldComponent {\n\t/** The date whose time is being edited. Only the time-of-day is ever changed. */\n\treadonly value = model.required<Date>();\n\n\t/** Row label (\"Start time\", \"End time\", \"Time\"). */\n\treadonly label = input<string>('');\n\n\t/** Precision in play — `second` reveals the third field. */\n\treadonly granularity = input.required<HubDatepickerGranularity>();\n\n\t/** BCP-47 locale, used for the AM/PM wording. */\n\treadonly locale = input.required<string>();\n\n\t/** Whether to render a 12-hour clock with a meridiem toggle. */\n\treadonly hour12 = input.required<boolean>();\n\n\t/** Minute increment. */\n\treadonly minuteStep = input.required<number>();\n\n\t/** Second increment. */\n\treadonly secondStep = input.required<number>();\n\n\t/** Earliest allowed instant, or `null`. */\n\treadonly min = input<Date | null>(null);\n\n\t/** Latest allowed instant, or `null`. */\n\treadonly max = input<Date | null>(null);\n\n\t/** Resolved labels. */\n\treadonly labels = input.required<HubDatepickerLabels>();\n\n\t/** Links the row label to the field group. */\n\tprotected readonly labelId = `hub-dp-time-${Math.random().toString(36).slice(2, 9)}`;\n\n\tprotected readonly showsSeconds = computed(() => this.granularity() === 'second');\n\tprotected readonly isPm = computed(() => this.value().getHours() >= 12);\n\tprotected readonly meridiemLabel = computed(() => meridiemLabels(this.locale())[this.isPm() ? 1 : 0]);\n\n\tprotected readonly displayHours = computed(() => {\n\t\tconst hours = this.value().getHours();\n\n\t\treturn this.hour12() ? `${hours % 12 === 0 ? 12 : hours % 12}` : this.pad(hours);\n\t});\n\n\t/** Spoken form of the hour, so a 12-hour clock announces its day period too. */\n\tprotected readonly hourValueText = computed(() =>\n\t\tthis.hour12() ? `${this.displayHours()} ${this.meridiemLabel()}` : this.displayHours()\n\t);\n\n\tprotected pad(value: number): string {\n\t\treturn `${value}`.padStart(2, '0');\n\t}\n\n\t/**\n\t * Spinbutton keyboard model, shared by the three fields.\n\t *\n\t * @param event - The originating key event.\n\t * @param field - Which field it came from.\n\t */\n\tprotected onKeydown(event: KeyboardEvent, field: 'hour' | 'minute' | 'second'): void {\n\t\tconst current = this.value();\n\t\tlet next: Date | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#step(current, field, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#step(current, field, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = this.#jump(current, field, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = this.#jump(current, field, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#set(current, field, 0);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#set(current, field, field === 'hour' ? 23 : 59);\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.commit(event, field);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tthis.#apply(next);\n\t}\n\n\t/**\n\t * Commits a typed value, ignoring anything that is not a number in range and restoring the\n\t * field to the model on the way out.\n\t *\n\t * @param event - The blur or `Enter` event.\n\t * @param field - Which field it came from.\n\t */\n\tprotected commit(event: Event, field: 'hour' | 'minute' | 'second'): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst typed = parseInt(input.value, 10);\n\n\t\tif (!isNaN(typed)) {\n\t\t\tthis.#apply(this.#set(this.value(), field, this.#fromDisplayed(typed, field)));\n\t\t}\n\n\t\t// Re-render from the model: a rejected or clamped entry must not linger in the box.\n\t\tinput.value =\n\t\t\tfield === 'hour'\n\t\t\t\t? this.displayHours()\n\t\t\t\t: this.pad(field === 'minute' ? this.value().getMinutes() : this.value().getSeconds());\n\t}\n\n\t/** Flips AM↔PM by moving the hour half a day. */\n\tprotected toggleMeridiem(): void {\n\t\tconst current = this.value();\n\n\t\tthis.#apply(withTime(current, (current.getHours() + 12) % 24, current.getMinutes(), current.getSeconds()));\n\t}\n\n\t/** Translates a typed hour on a 12-hour clock back to its 24-hour value. */\n\t#fromDisplayed(typed: number, field: 'hour' | 'minute' | 'second'): number {\n\t\tif (field !== 'hour' || !this.hour12()) {\n\t\t\treturn typed;\n\t\t}\n\n\t\tconst base = typed % 12;\n\n\t\treturn this.isPm() ? base + 12 : base;\n\t}\n\n\t#set(date: Date, field: 'hour' | 'minute' | 'second', raw: number): Date {\n\t\tconst bounded = Math.max(0, Math.min(field === 'hour' ? 23 : 59, raw));\n\n\t\tswitch (field) {\n\t\t\tcase 'hour':\n\t\t\t\treturn withTime(date, bounded, date.getMinutes(), date.getSeconds());\n\t\t\tcase 'minute':\n\t\t\t\treturn withTime(date, date.getHours(), bounded, date.getSeconds());\n\t\t\tcase 'second':\n\t\t\t\treturn withTime(date, date.getHours(), date.getMinutes(), bounded);\n\t\t}\n\t}\n\n\t#step(date: Date, field: 'hour' | 'minute' | 'second', direction: 1 | -1): Date {\n\t\tswitch (field) {\n\t\t\tcase 'hour':\n\t\t\t\treturn this.#set(date, 'hour', stepValue(date.getHours(), 1, direction, 24));\n\t\t\tcase 'minute':\n\t\t\t\treturn this.#set(date, 'minute', stepValue(date.getMinutes(), this.minuteStep(), direction, 60));\n\t\t\tcase 'second':\n\t\t\t\treturn this.#set(date, 'second', stepValue(date.getSeconds(), this.secondStep(), direction, 60));\n\t\t}\n\t}\n\n\t/** `PageUp`/`PageDown`: a full cycle of the next unit up. */\n\t#jump(date: Date, field: 'hour' | 'minute' | 'second', direction: 1 | -1): Date {\n\t\tif (field === 'hour') {\n\t\t\treturn this.#set(date, 'hour', (date.getHours() + direction * 12 + 24) % 24);\n\t\t}\n\n\t\tconst value = field === 'minute' ? date.getMinutes() : date.getSeconds();\n\n\t\treturn this.#set(date, field, (value + direction * 60 + 60) % 60);\n\t}\n\n\t/**\n\t * Writes a candidate time to the model, refusing it outright when it would leave the bounds.\n\t *\n\t * Refusing rather than clamping is deliberate: clamping a repeated arrow press would pin the\n\t * value to the bound and read as the control being stuck.\n\t */\n\t#apply(next: Date | null): void {\n\t\tif (!next) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\n\t\tif (compareInstant(clampToBounds(next, min, max), next) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(next);\n\t}\n}\n","/**\n * The value axis of the datepicker: turning a picked `Date` into whatever shape the bound\n * control expects, and reading it back.\n *\n * Kept apart from parsing (`time-utils`) and from display formatting (the component) because the\n * three are independent concerns that happen to meet on the same date.\n */\n\nimport { HubDatepickerGranularity, HubDatepickerValueFormat } from '../../interfaces/datepicker.interface';\nimport { formatISOAt, startOfUnit } from './time-utils';\n\n/**\n * Serializes a picked date into the control value.\n *\n * The date is truncated to the granularity first, so a `'date'` or `'timestamp'` value never\n * smuggles a precision the picker did not offer — a day-granularity pick is always local\n * midnight, whatever time the underlying `Date` happened to carry.\n *\n * @param date - The picked date, or `null`.\n * @param granularity - Precision to keep.\n * @param valueFormat - Target shape.\n * @returns The serialized value, or `null`.\n */\nexport function serializeValue(\n\tdate: Date | null,\n\tgranularity: HubDatepickerGranularity,\n\tvalueFormat: HubDatepickerValueFormat\n): unknown {\n\tif (!date) {\n\t\treturn null;\n\t}\n\n\tconst truncated = startOfUnit(date, granularity);\n\n\tif (typeof valueFormat === 'function') {\n\t\treturn valueFormat(truncated);\n\t}\n\n\tswitch (valueFormat) {\n\t\tcase 'date':\n\t\t\treturn truncated;\n\t\tcase 'timestamp':\n\t\t\treturn truncated.getTime();\n\t\tcase 'iso':\n\t\tdefault:\n\t\t\treturn formatISOAt(truncated, granularity);\n\t}\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { formatDate, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinject,\n\tinput,\n\tLOCALE_ID,\n\tcontentChild,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubDatepickerGranularity,\n\tHubDatepickerLabels,\n\tHubDatepickerMode,\n\tHubDatepickerValueFormat,\n\tHubDateRange,\n\tHubDateValue\n} from '../../interfaces/datepicker.interface';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { addMonths, buildCalendarGrid, isBeforeDay, isInRange, isSameDay, weekdayLabels } from './date-utils';\nimport { decadeStart, HubDatepickerPeriodGridComponent } from './period-grid.component';\nimport { HubDatepickerTimeFieldComponent } from './time-field.component';\nimport {\n\tcarriesTime,\n\tclampToBounds,\n\tcompareInstant,\n\tisPeriodUnit,\n\tparseFlexible,\n\tresolveHour12,\n\tstartOfUnit,\n\tunitOutOfBounds,\n\twithTime\n} from './time-utils';\nimport { serializeValue } from './value-format';\n\n/** A calendar cell enriched with its selection / range / disabled / focus state. */\ninterface DatepickerCell {\n\tdate: Date;\n\tday: number;\n\tcurrentMonth: boolean;\n\ttoday: boolean;\n\tdisabled: boolean;\n\tselected: boolean;\n\trangeStart: boolean;\n\trangeEnd: boolean;\n\tinRange: boolean;\n\t/** Inside the band a half-open range would take if it closed on the previewed cell. */\n\tpreview: boolean;\n\t/** The previewed cell itself — the end the range would take right now. */\n\tpreviewEnd: boolean;\n\tfocused: boolean;\n}\n\n/**\n * Accessible, fully customizable date / range picker built from scratch on native `Date` + CDK\n * Overlay (no date dependency). Shares the `ng-hub-ui-forms` conventions (CVA, auto error display,\n * label, helper text, `--hub-datepicker-*` theming) and adds:\n *\n * - `single` and `range` selection (`mode`).\n * - A granularity axis from a whole year down to a second (`granularity`), which also selects the\n * panel: `year` and `month` render a 12-cell period grid, `day` and finer render the calendar\n * (plus a time strip from `hour` onwards).\n * - Three independent format axes: `parse` (how values come in), `valueFormat` (what the bound\n * control holds) and `displayFormat` (what the user reads).\n * - `min` / `max` bounds — honouring the time, not just the day — and a `disabledDates` predicate.\n * - Keyboard navigation (arrows, Home/End, PageUp/Down, Enter, Escape) in every panel.\n * - `Today`, `Clear` and — while picking a time — `Done` shortcuts.\n * - Full i18n: locale-driven month, weekday and AM/PM names plus overridable `labels`,\n * `displayFormat`, `weekdayFormat`, `firstDayOfWeek` and `rangeSeparator` — per instance or\n * globally via {@link provideHubForms}.\n *\n * ## The zone of the emitted value\n *\n * Every calculation happens in **the reader's local zone, by date parts**. At `day` granularity\n * and coarser the value is a bare ISO date (`2026-09-01`) with no zone attached, exactly as it has\n * always been. From `hour` onwards it is a full ISO 8601 timestamp carrying **the local wall clock\n * and the offset of that very date** — `2026-09-01T09:00:00+02:00` in Madrid in September,\n * `+01:00` for the same clock in January. A consumer that wants UTC converts losslessly with\n * `new Date(value).toISOString()`.\n *\n * @example\n * ```html\n * <!-- unchanged default: a plain YYYY-MM-DD string -->\n * <hub-datepicker formControlName=\"stay\" mode=\"range\" label=\"Stay\" [min]=\"today\" />\n *\n * <!-- an access window: each endpoint carries its own time -->\n * <hub-datepicker formControlName=\"window\" mode=\"range\" granularity=\"minute\" [minuteStep]=\"15\" />\n * ```\n */\n@Component({\n\tselector: 'hub-datepicker',\n\timports: [NgTemplateOutlet, KeyValuePipe, OverlayModule, HubDatepickerTimeFieldComponent, HubDatepickerPeriodGridComponent],\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrl: './datepicker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-datepicker-host]': 'true'\n\t}\n})\nexport class HubDatepickerComponent extends HubFieldControl {\n\treadonly #localeId = inject(LOCALE_ID);\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/**\n\t * The selection, as local `Date`s. This — not the serialized value — is the component's single\n\t * source of truth: keeping `Date`s means the emitted shape is derived once, on the way out, and\n\t * a `valueFormat` change never has to round-trip through a string.\n\t */\n\tprotected readonly _start = signal<Date | null>(null);\n\tprotected readonly _end = signal<Date | null>(null);\n\n\t/**\n\t * Time-of-day held for each endpoint while no day has been picked yet, so the time strip is\n\t * editable from the moment the panel opens and the choice survives the first day click.\n\t */\n\tprotected readonly _startDraft = signal<Date>(startOfUnit(new Date(), 'day'));\n\tprotected readonly _endDraft = signal<Date>(startOfUnit(new Date(), 'day'));\n\n\t/** Month (or year / block) currently shown in the panel. */\n\tprotected readonly _viewDate = signal<Date>(new Date());\n\n\t/** Date that currently holds keyboard focus inside the grid. */\n\tprotected readonly _focusedDate = signal<Date>(new Date());\n\n\t/**\n\t * Cell a half-open range is currently being measured against — the pointer's, or the one\n\t * keyboard navigation last moved to.\n\t *\n\t * Fed by both so the two input methods give the same affordance, and held separately from\n\t * `_focusedDate` rather than derived from it: focus survives the pointer leaving the grid,\n\t * and a band that stayed lit across the whole panel while the cursor was elsewhere would be\n\t * claiming an end the user is no longer choosing.\n\t */\n\tprotected readonly _previewTarget = signal<Date | null>(null);\n\n\t/** Whether the calendar overlay is open. */\n\tprotected readonly _open = signal(false);\n\n\t// ── Inputs ──────────────────────────────────────────────────────────────────\n\n\t/** Selection mode (`single` or `range`). */\n\treadonly mode = input<HubDatepickerMode>('single');\n\n\t/**\n\t * Precision each picked point carries. Also selects the panel. Defaults to `day`, which is the\n\t * behaviour every existing call site already has.\n\t */\n\treadonly granularity = input<HubDatepickerGranularity | undefined>(undefined);\n\n\t/** How a picked point is serialized into the bound control. Defaults to `'iso'`. */\n\treadonly valueFormat = input<HubDatepickerValueFormat | undefined>(undefined);\n\n\t/**\n\t * Consumer-supplied parser for incoming values, overriding the built-in detection (ISO string\n\t * of any width, `Date`, or epoch milliseconds). Applies to `min` and `max` too.\n\t */\n\treadonly parse = input<((raw: unknown) => Date | null) | null>(null);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder shown when nothing is selected. */\n\treadonly placeholder = input<string>('');\n\n\t/** BCP-47 locale for the display value and month/weekday names. */\n\treadonly locale = input<string>(this.#localeId || 'en-US');\n\n\t/** First weekday (0 = Sunday, 1 = Monday…). Falls back to the global config. */\n\treadonly firstDayOfWeek = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Weekday header width. Falls back to the global config. */\n\treadonly weekdayFormat = input<'short' | 'narrow' | 'long' | undefined>(undefined);\n\n\t/**\n\t * How the selected value is displayed in the input. Accepts `Intl` options (the original\n\t * contract), an Angular date pattern such as `'dd/MM/yyyy HH:mm'`, or a formatting function.\n\t * Falls back to the global config.\n\t */\n\treadonly displayFormat = input<Intl.DateTimeFormatOptions | string | ((date: Date) => string) | undefined>(undefined);\n\n\t/**\n\t * `Intl` options composed **over** {@link displayFormat} once the granularity carries a time, so\n\t * the day part of the display keeps whatever `displayFormat` already said.\n\t */\n\treadonly timeDisplayFormat = input<Intl.DateTimeFormatOptions | undefined>(undefined);\n\n\t/** Minute increment of the minute spinbutton. Falls back to the global config. */\n\treadonly minuteStep = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Second increment of the second spinbutton. Falls back to the global config. */\n\treadonly secondStep = input<number | undefined, unknown>(undefined, {\n\t\ttransform: (v) => (v == null ? undefined : numberAttribute(v))\n\t});\n\n\t/** Force a 12- or 24-hour clock. Defaults to whatever the locale wants. */\n\treadonly hourFormat = input<'12' | '24' | undefined>(undefined);\n\n\t/** Separator between the two dates of a range. Falls back to the global config. */\n\treadonly rangeSeparator = input<string | undefined>(undefined);\n\n\t/** Earliest selectable instant (ISO string, `Date` or epoch millis). */\n\treadonly min = input<string | Date | number | null>(null);\n\n\t/** Latest selectable instant (ISO string, `Date` or epoch millis). */\n\treadonly max = input<string | Date | number | null>(null);\n\n\t/** Predicate marking individual dates as non-selectable. */\n\treadonly disabledDates = input<((date: Date) => boolean) | null>(null);\n\n\t/** Whether to show the clear shortcut. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\n\n\t/** Whether to show the \"today\" shortcut. */\n\treadonly showToday = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Whether picking closes the calendar. Honoured at `day` granularity and coarser; a\n\t * time-carrying granularity always keeps the panel open, because closing on the day click would\n\t * strand the time controls the user has not reached yet.\n\t */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/** Per-instance label overrides (merged over the global config). */\n\treadonly labels = input<Partial<HubDatepickerLabels>>({});\n\n\t/** Whether the picker is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Text shown before the control as a group addon. A string is one; an array a run. */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as a group addon. See {@link prepend}. */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected content attached to the leading edge (`[hubPrepend]`). */\n\tprotected readonly _prependTpl = contentChild(HubPrependDirective, { read: TemplateRef });\n\n\t/** Projected content attached to the trailing edge (`[hubAppend]`). */\n\tprotected readonly _appendTpl = contentChild(HubAppendDirective, { read: TemplateRef });\n\n\t/** Normalized addon lists. */\n\tprotected readonly _prependAddons = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\tprotected readonly _appendAddons = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether anything is attached to each edge, which squares off that side. */\n\tprotected readonly hasPrepend = computed<boolean>(() => this._prependAddons().length > 0 || !!this._prependTpl());\n\tprotected readonly hasAppend = computed<boolean>(() => this._appendAddons().length > 0 || !!this._appendTpl());\n\n\t// ── Outputs ─────────────────────────────────────────────────────────────────\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubDateValue<any>>();\n\n\t/** Emits when the calendar opens. */\n\treadonly opened = output<void>();\n\n\t/** Emits when the calendar closes. */\n\treadonly closed = output<void>();\n\n\t/** Emits the first day of the displayed month when navigating. */\n\treadonly viewChange = output<Date>();\n\n\t/** Emits when the value is cleared. */\n\treadonly cleared = output<void>();\n\n\t// ── Resolved config (input ?? global) ────────────────────────────────────────\n\n\tprotected readonly _labels = computed<HubDatepickerLabels>(() => ({ ...this.#config.labels, ...this.labels() }));\n\tprotected readonly _firstDayOfWeek = computed(() => this.firstDayOfWeek() ?? this.#config.firstDayOfWeek);\n\tprotected readonly _weekdayFormat = computed(() => this.weekdayFormat() ?? this.#config.weekdayFormat);\n\tprotected readonly _displayFormat = computed(() => this.displayFormat() ?? this.#config.displayFormat);\n\tprotected readonly _timeDisplayFormat = computed(() => this.timeDisplayFormat() ?? this.#config.timeDisplayFormat);\n\tprotected readonly _rangeSeparator = computed(() => this.rangeSeparator() ?? this.#config.rangeSeparator);\n\t/**\n\t * Precision each point carries.\n\t *\n\t * `day-time-range` raises anything coarser than an hour: the mode is defined as a day plus\n\t * two times within it, so a granularity carrying no time contradicts it, and the mode is the\n\t * more specific of the two statements. Raising it keeps a misconfigured control usable\n\t * instead of rendering two time strips that cannot exist.\n\t */\n\tprotected readonly _granularity = computed<HubDatepickerGranularity>(() => {\n\t\tconst declared = this.granularity() ?? this.#config.granularity;\n\n\t\treturn this.mode() === 'day-time-range' && !carriesTime(declared) ? 'hour' : declared;\n\t});\n\tprotected readonly _valueFormat = computed(() => this.valueFormat() ?? this.#config.valueFormat);\n\tprotected readonly _minuteStep = computed(() => this.minuteStep() ?? this.#config.minuteStep);\n\tprotected readonly _secondStep = computed(() => this.secondStep() ?? this.#config.secondStep);\n\tprotected readonly _hourFormat = computed(() => this.hourFormat() ?? this.#config.hourFormat);\n\n\tprotected readonly _minDate = computed(() => parseFlexible(this.min(), this.parse()));\n\tprotected readonly _maxDate = computed(() => parseFlexible(this.max(), this.parse()));\n\n\t// ── Derived panel state ───────────────────────────────────────────────────────\n\n\t/** Whether the granularity carries a time-of-day, and so shows the time strip. */\n\tprotected readonly _hasTime = computed(() => carriesTime(this._granularity()));\n\n\t/** Whether the granularity is coarser than a day, and so uses the period grid. */\n\tprotected readonly _isPeriod = computed(() => isPeriodUnit(this._granularity()));\n\n\t/**\n\t * Whether the day grid picks TWO days. False in `day-time-range`, which picks one — the\n\t * grid then behaves exactly as it does in `single` mode, and the second point is a time\n\t * rather than a date.\n\t */\n\tprotected readonly _isRange = computed(() => this.mode() === 'range');\n\n\t/** One date, two times within it. */\n\tprotected readonly _isDayTimeRange = computed(() => this.mode() === 'day-time-range');\n\n\t/**\n\t * Whether the value is a {@link HubDateRange} — true for both two-ended modes. Kept apart\n\t * from {@link _isRange} because the two questions have different answers here: the value has\n\t * two ends, but the day grid only ever picks one day.\n\t */\n\tprotected readonly _emitsRange = computed(() => this._isRange() || this._isDayTimeRange());\n\n\tprotected readonly _hour12 = computed(() => resolveHour12(this.locale(), this._hourFormat()));\n\n\t/** Last range actually published, so an abandoned half-selection has somewhere to return to. */\n\t#committed: { start: Date | null; end: Date | null } = { start: null, end: null };\n\n\tprotected readonly rangeStart = computed<Date | null>(() => this._start());\n\tprotected readonly rangeEnd = computed<Date | null>(() => (this._isRange() ? this._end() : null));\n\n\t/**\n\t * Time shown in the start row — the selection when there is one, the draft until then.\n\t *\n\t * The draft is clamped into `[min, max]` before it is shown. Without this it starts at local\n\t * midnight, which a bound like `min=\"now\"` puts out of range from the outset — and since a step\n\t * that would leave the bounds is refused, *every* arrow press would then be refused and the\n\t * spinbuttons would read as dead until a day was picked.\n\t */\n\tprotected readonly startTimeValue = computed<Date>(\n\t\t() => this._start() ?? clampToBounds(this._startDraft(), this._minDate(), this._maxDate())\n\t);\n\n\tprotected readonly endTimeValue = computed<Date>(\n\t\t() => this._end() ?? clampToBounds(this._endDraft(), this._minDate(), this._maxDate())\n\t);\n\n\t/** Locale-formatted display string for the input. */\n\tprotected readonly displayValue = computed<string>(() => {\n\t\tconst format = this.#resolveDisplay();\n\t\tconst start = this._start();\n\n\t\t// One day and two times reads as \"01/09/2026, 09:00 – 11:00\": naming the day twice would\n\t\t// be noise, since the mode guarantees it is the same one. Falls back to the generic\n\t\t// two-ended shape when `displayFormat` is a pattern or a function — the caller said\n\t\t// exactly what they wanted, and this is not the place to second-guess it.\n\t\tif (this._isDayTimeRange()) {\n\t\t\tif (!start) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst end = this._end();\n\t\t\tconst time = this.#resolveTimeDisplay();\n\n\t\t\tif (!end) {\n\t\t\t\treturn format(start);\n\t\t\t}\n\n\t\t\treturn `${format(start)}${this._rangeSeparator()}${time ? time(end) : format(end)}`;\n\t\t}\n\n\t\tif (!this._isRange()) {\n\t\t\treturn start ? format(start) : '';\n\t\t}\n\n\t\tconst end = this._end();\n\n\t\tif (!start && !end) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${start ? format(start) : ''}${this._rangeSeparator()}${end ? format(end) : ''}`;\n\t});\n\n\tprotected readonly weekdays = computed<string[]>(() =>\n\t\tweekdayLabels(this.locale(), this._firstDayOfWeek(), this._weekdayFormat())\n\t);\n\n\tprotected readonly monthYearLabel = computed<string>(() =>\n\t\tnew Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(this._viewDate())\n\t);\n\n\t/** Header title of the period panel: the year for months, the decade for years. */\n\tprotected readonly periodLabel = computed<string>(() => {\n\t\tconst year = this._viewDate().getFullYear();\n\n\t\tif (this._granularity() === 'month') {\n\t\t\treturn `${year}`;\n\t\t}\n\n\t\tconst start = decadeStart(year);\n\n\t\t// The page renders a padding year at each end; the title names the decade itself.\n\t\treturn `${start} – ${start + 9}`;\n\t});\n\n\t/**\n\t * The band a half-open range would take if it closed right now, ordered low to high.\n\t *\n\t * Only a range with a start and no end has one: before the first pick there is no anchor to\n\t * measure from, and once both ends are committed the preview has nothing left to say. The\n\t * target is normalized against the anchor because a range can be drawn backwards — picking\n\t * the later day first and sweeping left is as natural as the other way round.\n\t */\n\tprotected readonly previewRange = computed<{ from: Date; to: Date } | null>(() => {\n\t\tconst anchor = this._start();\n\t\tconst target = this._previewTarget();\n\n\t\tif (!this._isRange() || !anchor || this._end() || !target) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn isBeforeDay(target, anchor) ? { from: target, to: anchor } : { from: anchor, to: target };\n\t});\n\n\t/** Enriched 6×7 grid for the displayed month. */\n\tprotected readonly grid = computed<DatepickerCell[]>(() => {\n\t\tconst start = this._start();\n\t\tconst end = this.rangeEnd();\n\t\tconst focused = this._focusedDate();\n\t\tconst min = this._minDate();\n\t\tconst max = this._maxDate();\n\t\tconst disabledFn = this.disabledDates();\n\t\tconst isRange = this._isRange();\n\t\tconst preview = this.previewRange();\n\n\t\treturn buildCalendarGrid(this._viewDate(), this._firstDayOfWeek()).map((c) => ({\n\t\t\t...c,\n\t\t\tdisabled: unitOutOfBounds(c.date, min, max, 'day') || (disabledFn ? disabledFn(c.date) : false),\n\t\t\tselected: !isRange && isSameDay(c.date, start),\n\t\t\trangeStart: isRange && isSameDay(c.date, start),\n\t\t\trangeEnd: isRange && isSameDay(c.date, end),\n\t\t\tinRange: isRange && isInRange(c.date, start, end),\n\t\t\t// The anchor already paints as `rangeStart`, so the band starts after it — same\n\t\t\t// exclusive shape as `inRange`, with the previewed end drawn on top of it.\n\t\t\tpreview: !!preview && isInRange(c.date, preview.from, preview.to),\n\t\t\tpreviewEnd:\n\t\t\t\t!!preview && !isSameDay(c.date, start) && (isSameDay(c.date, preview.from) || isSameDay(c.date, preview.to)),\n\t\t\tfocused: isSameDay(c.date, focused)\n\t\t}));\n\t});\n\n\t// ── CVA ───────────────────────────────────────────────────────────────────────\n\n\twriteValue(value: unknown): void {\n\t\tconst granularity = this._granularity();\n\t\tconst parse = this.parse();\n\n\t\tif (this._emitsRange()) {\n\t\t\tconst range = (value ?? {}) as HubDateRange<unknown>;\n\t\t\tconst start = parseFlexible(range?.start ?? null, parse);\n\t\t\tconst incomingEnd = parseFlexible(range?.end ?? null, parse);\n\n\t\t\t// A `day-time-range` cannot express a span that crosses midnight, so an incoming one\n\t\t\t// is pulled onto the start's day, keeping the time the caller asked for. Silent on\n\t\t\t// purpose — `writeValue` must not write back — exactly like the granularity\n\t\t\t// truncation on the line below, which has always rewritten what it was handed.\n\t\t\tconst end =\n\t\t\t\tthis._isDayTimeRange() && start && incomingEnd\n\t\t\t\t\t? withTime(start, incomingEnd.getHours(), incomingEnd.getMinutes(), incomingEnd.getSeconds())\n\t\t\t\t\t: incomingEnd;\n\n\t\t\tthis._start.set(start ? startOfUnit(start, granularity) : null);\n\t\t\tthis._end.set(end ? startOfUnit(end, granularity) : null);\n\t\t\tthis.#committed = { start: this._start(), end: this._end() };\n\t\t\tthis.#anchor(start ?? new Date());\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst date = parseFlexible(value, parse);\n\n\t\tthis._start.set(date ? startOfUnit(date, granularity) : null);\n\t\tthis._end.set(null);\n\t\tthis.#anchor(date ?? new Date());\n\t}\n\n\t// ── Panel ──────────────────────────────────────────────────────────────────────\n\n\t/** Opens the calendar (no-op when disabled/read-only). */\n\tprotected open(): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#anchor(this._start() ?? new Date());\n\t\tthis._open.set(true);\n\t\tthis.opened.emit();\n\t}\n\n\t/** Closes the calendar and marks the control as touched. */\n\tprotected close(): void {\n\t\tif (!this._open()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#rollbackPendingRange();\n\t\tthis._open.set(false);\n\t\tthis._previewTarget.set(null);\n\t\tthis.onTouched?.();\n\t\tthis.closed.emit();\n\t}\n\n\t/** Toggles the calendar. */\n\tprotected toggleCalendar(): void {\n\t\tthis._open() ? this.close() : this.open();\n\t}\n\n\t/** Shifts the displayed month by `delta` and emits {@link viewChange}. */\n\tprotected shiftMonth(delta: number): void {\n\t\tconst next = addMonths(this._viewDate(), delta);\n\n\t\tthis._viewDate.set(next);\n\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t}\n\n\t/** Shifts the period panel by one page: a year for months, a decade for years. */\n\tprotected shiftPeriod(delta: number): void {\n\t\tconst view = this._viewDate();\n\t\tconst step = this._granularity() === 'month' ? delta : delta * 10;\n\t\tconst next = new Date(view.getFullYear() + step, view.getMonth(), 1);\n\n\t\tthis._viewDate.set(next);\n\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t}\n\n\t/** Jumps the view to today (and focuses it). */\n\tprotected goToToday(): void {\n\t\tconst today = new Date();\n\n\t\tthis._viewDate.set(today);\n\t\tthis._focusedDate.set(today);\n\t\tthis.viewChange.emit(new Date(today.getFullYear(), today.getMonth(), 1));\n\t}\n\n\t/** Clears the value. */\n\tprotected clear(): void {\n\t\tthis._start.set(null);\n\t\tthis._end.set(null);\n\t\tthis._previewTarget.set(null);\n\t\tthis.#emit();\n\t\tthis.cleared.emit();\n\t}\n\n\t// ── Selection ───────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Selects a day cell. In `single` mode it sets the value; in `range` mode it sets the start\n\t * (resetting the range) or completes it, keeping start ≤ end.\n\t *\n\t * @param cell - The picked cell.\n\t */\n\tprotected selectDay(cell: DatepickerCell): void {\n\t\tif (cell.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._focusedDate.set(cell.date);\n\t\tthis.#select(cell.date);\n\t}\n\n\t/**\n\t * Measures the pending range against the cell under the pointer.\n\t *\n\t * A disabled cell is skipped rather than cleared: sweeping across a blocked day on the way\n\t * to a valid one would otherwise make the band flicker off and back on.\n\t *\n\t * @param cell - The cell the pointer entered.\n\t */\n\tprotected previewDay(cell: DatepickerCell): void {\n\t\tif (!cell.disabled) {\n\t\t\tthis._previewTarget.set(cell.date);\n\t\t}\n\t}\n\n\t/** Drops the pending band — the pointer left the grid, or the range is no longer half-open. */\n\tprotected clearPreview(): void {\n\t\tthis._previewTarget.set(null);\n\t}\n\n\t/**\n\t * Selects a period cell (a month or a year) from the coarse panel.\n\t *\n\t * @param date - First instant of the picked period.\n\t */\n\tprotected selectPeriod(date: Date): void {\n\t\tthis._focusedDate.set(date);\n\t\tthis.#select(date);\n\t}\n\n\t/** Writes a new start time, emitting only once a day has actually been picked. */\n\tprotected onStartTimeChange(next: Date): void {\n\t\tif (this._start()) {\n\t\t\tthis._start.set(next);\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._startDraft.set(next);\n\t}\n\n\t/** Writes a new end time, emitting only once the range end has actually been picked. */\n\tprotected onEndTimeChange(next: Date): void {\n\t\tif (this._end()) {\n\t\t\tthis._end.set(next);\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis._endDraft.set(next);\n\t}\n\n\t/**\n\t * Keyboard navigation within the day grid.\n\t *\n\t * @param event - The originating keyboard event (handled on the grid container).\n\t */\n\tprotected onGridKeydown(event: KeyboardEvent): void {\n\t\tconst grid = event.currentTarget as HTMLElement;\n\t\tlet next: Date | null = null;\n\t\tconst focused = this._focusedDate();\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tnext = this.#addDays(focused, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\tnext = this.#addDays(focused, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\tnext = this.#addDays(focused, -7);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tnext = this.#addDays(focused, 7);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\tnext = this.#addDays(focused, -((focused.getDay() - this._firstDayOfWeek() + 7) % 7));\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\tnext = this.#addDays(focused, 6 - ((focused.getDay() - this._firstDayOfWeek() + 7) % 7));\n\t\t\t\tbreak;\n\t\t\tcase 'PageUp':\n\t\t\t\tnext = addMonths(focused, event.shiftKey ? -12 : -1);\n\t\t\t\tbreak;\n\t\t\tcase 'PageDown':\n\t\t\t\tnext = addMonths(focused, event.shiftKey ? 12 : 1);\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst cell = this.grid().find((c) => isSameDay(c.date, focused));\n\t\t\t\tif (cell) this.selectDay(cell);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase 'Escape':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close();\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis._focusedDate.set(next);\n\t\t// Keyboard navigation measures the pending range too, so arrowing towards the end date\n\t\t// shows the same band the pointer would.\n\t\tthis._previewTarget.set(next);\n\n\t\tif (next.getMonth() !== this._viewDate().getMonth() || next.getFullYear() !== this._viewDate().getFullYear()) {\n\t\t\tthis._viewDate.set(next);\n\t\t\tthis.viewChange.emit(new Date(next.getFullYear(), next.getMonth(), 1));\n\t\t}\n\n\t\t// Move DOM focus to the newly focused cell after the grid re-renders.\n\t\tconst time = next.getTime();\n\t\tsetTimeout(() => grid.querySelector<HTMLElement>(`[data-time=\"${time}\"]`)?.focus(), 0);\n\t}\n\n\t/** Moves the period grid's focus without selecting. */\n\tprotected onPeriodFocusMove(date: Date): void {\n\t\tthis._focusedDate.set(date);\n\n\t\tif (date.getFullYear() !== this._viewDate().getFullYear()) {\n\t\t\tthis._viewDate.set(date);\n\t\t\tthis.viewChange.emit(new Date(date.getFullYear(), date.getMonth(), 1));\n\t\t}\n\t}\n\n\t// ── Internals ─────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Applies a picked calendar point to the selection, attaching the working time-of-day and\n\t * ordering the range endpoints **by instant** — which is what makes a same-day 21:00 → 09:00\n\t * pair reorder itself instead of being kept in click order.\n\t */\n\t#select(picked: Date): void {\n\t\tconst granularity = this._granularity();\n\t\tconst min = this._minDate();\n\t\tconst max = this._maxDate();\n\t\tconst compose = (time: Date): Date =>\n\t\t\tstartOfUnit(\n\t\t\t\tclampToBounds(\n\t\t\t\t\tthis._hasTime() ? withTime(picked, time.getHours(), time.getMinutes(), time.getSeconds()) : picked,\n\t\t\t\t\tmin,\n\t\t\t\t\tmax\n\t\t\t\t),\n\t\t\t\tgranularity\n\t\t\t);\n\n\t\t// One day, both ends. The two times are already on screen, so picking the day settles\n\t\t// the whole span at once — and there is no second day to wait for, which is the entire\n\t\t// difference from `range`.\n\t\tif (this._isDayTimeRange()) {\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis._end.set(compose(this.endTimeValue()));\n\t\t\tthis.#reorderIfNeeded();\n\t\t\tthis.#emit();\n\n\t\t\t// Never auto-closes: the times are the rest of the answer.\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._isRange()) {\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis.#emit();\n\n\t\t\tif (this.closeOnSelect() && !this._hasTime()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst start = this._start();\n\t\tconst end = this._end();\n\n\t\tif (!start || end) {\n\t\t\t// Begin a new range.\n\t\t\tthis._start.set(compose(this.startTimeValue()));\n\t\t\tthis._end.set(null);\n\t\t\tthis.#emit();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst candidate = compose(this.endTimeValue());\n\t\tconst [a, b] = compareInstant(candidate, start) < 0 ? [candidate, start] : [start, candidate];\n\n\t\tthis._start.set(a);\n\t\tthis._end.set(b);\n\t\tthis.#emit();\n\n\t\tif (!this._hasTime()) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/**\n\t * Drops a range that was only half picked when the panel closed.\n\t *\n\t * The first click of a span is a question, not an answer, and {@link #emit} never published\n\t * it. Leaving it on screen would show a selection the model does not hold, so the panel goes\n\t * back to the last value that was actually committed.\n\t */\n\t#rollbackPendingRange(): void {\n\t\tif (!this._emitsRange() || !this._start() || this._end()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._start.set(this.#committed.start);\n\t\tthis._end.set(this.#committed.end);\n\t}\n\n\t/** Keeps the two endpoints ordered after a time edit has moved one past the other. */\n\t#reorderIfNeeded(): void {\n\t\tconst start = this._start();\n\t\tconst end = this._end();\n\n\t\tif (start && end && compareInstant(start, end) > 0) {\n\t\t\tthis._start.set(end);\n\t\t\tthis._end.set(start);\n\t\t}\n\t}\n\n\t/** Points the view and the keyboard focus at a date. */\n\t#anchor(date: Date): void {\n\t\tthis._viewDate.set(date);\n\t\tthis._focusedDate.set(date);\n\t}\n\n\t/** Drops empty entries so `prepend=\"\"` renders nothing rather than an empty box. */\n\t#toAddonList(value: string | string[]): string[] {\n\t\treturn Array.isArray(value) ? value.filter((item) => item != null && item !== '') : value ? [value] : [];\n\t}\n\n\t#addDays(date: Date, days: number): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n\t}\n\n\t/**\n\t * Resolves {@link displayFormat} into a formatting function, narrowed to the granularity: the\n\t * time options are composed over it once a time is carried, and the parts finer than the unit\n\t * are dropped when it is coarser than a day.\n\t *\n\t * The narrowing matters because the default `displayFormat` names a day. Without it a month\n\t * picker emitting `2026-09` would read `09/01/2026` in the field — showing a day nobody chose.\n\t *\n\t * An explicit pattern string or function is never narrowed: the caller said exactly what they\n\t * wanted.\n\t */\n\t#resolveDisplay(): (date: Date) => string {\n\t\tconst format = this._displayFormat();\n\t\tconst locale = this.locale();\n\n\t\tif (typeof format === 'function') {\n\t\t\treturn format;\n\t\t}\n\n\t\tif (typeof format === 'string') {\n\t\t\treturn (date: Date) => formatDate(date, format, locale);\n\t\t}\n\n\t\tconst formatter = new Intl.DateTimeFormat(locale, this.#narrowOptions(format));\n\n\t\treturn (date: Date) => formatter.format(date);\n\t}\n\n\t/**\n\t * Formatter for the trailing end of a `day-time-range` — the time alone, since the date is\n\t * already on the other side of the separator.\n\t *\n\t * Returns `null` when `displayFormat` is a pattern string or a function: those describe a\n\t * whole point, there is no time half to extract from them, and the caller asked for exactly\n\t * that shape.\n\t *\n\t * @returns A time-only formatter, or `null` when the display format is caller-supplied.\n\t */\n\t#resolveTimeDisplay(): ((date: Date) => string) | null {\n\t\tif (typeof this._displayFormat() !== 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst formatter = new Intl.DateTimeFormat(this.locale(), {\n\t\t\t...this._timeDisplayFormat(),\n\t\t\t...(this._granularity() === 'second' ? { second: '2-digit' } : {}),\n\t\t\thour12: this._hour12()\n\t\t});\n\n\t\treturn (date: Date) => formatter.format(date);\n\t}\n\n\t/**\n\t * Fits `Intl` options to the current granularity, adding the time parts or removing the ones\n\t * finer than the picked unit.\n\t *\n\t * @param format - The resolved `Intl` options.\n\t * @returns Options describing exactly the precision the picker offers.\n\t */\n\t#narrowOptions(format: Intl.DateTimeFormatOptions): Intl.DateTimeFormatOptions {\n\t\tconst granularity = this._granularity();\n\n\t\tif (granularity === 'year') {\n\t\t\treturn { year: format.year ?? 'numeric' };\n\t\t}\n\n\t\tif (granularity === 'month') {\n\t\t\treturn { year: format.year ?? 'numeric', month: format.month ?? '2-digit' };\n\t\t}\n\n\t\tif (!this._hasTime()) {\n\t\t\treturn format;\n\t\t}\n\n\t\t// `hour12` is threaded through so the input cannot read `02:30 PM` while the panel that\n\t\t// produced it reads `14:30`.\n\t\treturn {\n\t\t\t...format,\n\t\t\t...this._timeDisplayFormat(),\n\t\t\t...(granularity === 'second' ? { second: '2-digit' } : {}),\n\t\t\thour12: this._hour12()\n\t\t};\n\t}\n\n\t/** Serializes the current selection and pushes it to the control and to {@link valueChange}. */\n\t#emit(): void {\n\t\tconst granularity = this._granularity();\n\t\tconst valueFormat = this._valueFormat();\n\t\tconst start = this._start();\n\n\t\tif (this._emitsRange()) {\n\t\t\tconst end = this._end();\n\n\t\t\t// A half-open range is not an answer, so it is not published. Emitting the first pick\n\t\t\t// used to destroy a complete value the instant the user began choosing a new span —\n\t\t\t// and if they then clicked away, the control was left holding `{ start, end: null }`,\n\t\t\t// a shape no consumer asked for and every consumer has to defend against. The pick\n\t\t\t// stays on screen; the model keeps what it had until the second end lands.\n\t\t\tif (start && !end) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value =\n\t\t\t\tstart || end\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstart: serializeValue(start, granularity, valueFormat),\n\t\t\t\t\t\t\tend: serializeValue(end, granularity, valueFormat)\n\t\t\t\t\t\t}\n\t\t\t\t\t: null;\n\n\t\t\tthis.#committed = { start, end };\n\t\t\tthis.onChange?.(value);\n\t\t\tthis.valueChange.emit(value as HubDateValue<any>);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = serializeValue(start, granularity, valueFormat);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value as HubDateValue<any>);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-datepicker\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--readonly]=\"readonly()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\tclass=\"hub-datepicker__group\"\n\t\t\t[class.hub-datepicker__group--has-prepend]=\"hasPrepend()\"\n\t\t\t[class.hub-datepicker__group--has-append]=\"hasAppend()\"\n\t\t>\n\t\t\t@if (_prependTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-datepicker__attached hub-datepicker__attached--prepend\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t\t@for (addon of _prependAddons(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__addon hub-datepicker__addon--prepend\">{{ addon }}</span>\n\t\t\t}\n\t\t\t<div class=\"hub-datepicker__trigger\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n\t\t\t<input\n\t\t\tclass=\"hub-field__control hub-datepicker__input\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"text\"\n\t\t\treadonly\n\t\t\t[value]=\"displayValue()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t(blur)=\"handleBlur($event)\"\n\t\t/>\n\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">\n\t\t\t\t&times;\n\t\t\t</button>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t></button>\n\t\t\t</div>\n\t\t\t@for (addon of _appendAddons(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__addon hub-datepicker__addon--append\">{{ addon }}</span>\n\t\t\t}\n\t\t\t@if (_appendTpl(); as tpl) {\n\t\t\t\t<span class=\"hub-datepicker__attached hub-datepicker__attached--append\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\n\t\t\t\t</span>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n\n<ng-template\n\tcdkConnectedOverlay\n\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t[cdkConnectedOverlayOpen]=\"_open()\"\n\t[cdkConnectedOverlayHasBackdrop]=\"true\"\n\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t[cdkConnectedOverlayOffsetY]=\"4\"\n\t(backdropClick)=\"close()\"\n\t(detach)=\"close()\"\n>\n\t<div class=\"hub-datepicker__panel\" role=\"dialog\" [attr.aria-label]=\"_isPeriod() ? periodLabel() : monthYearLabel()\">\n\t\t@if (_isPeriod()) {\n\t\t\t<header class=\"hub-datepicker__header\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().previousYear\"\n\t\t\t\t\t(click)=\"shiftPeriod(-1)\"\n\t\t\t\t>\n\t\t\t\t\t‹\n\t\t\t\t</button>\n\t\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ periodLabel() }}</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().nextYear\"\n\t\t\t\t\t(click)=\"shiftPeriod(1)\"\n\t\t\t\t>\n\t\t\t\t\t›\n\t\t\t\t</button>\n\t\t\t</header>\n\n\t\t\t<hub-datepicker-period\n\t\t\t\t[granularity]=\"$any(_granularity())\"\n\t\t\t\t[viewDate]=\"_viewDate()\"\n\t\t\t\t[focusedDate]=\"_focusedDate()\"\n\t\t\t\t[selectionStart]=\"rangeStart()\"\n\t\t\t\t[selectionEnd]=\"rangeEnd()\"\n\t\t\t\t[range]=\"_isRange()\"\n\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t(pick)=\"selectPeriod($event)\"\n\t\t\t\t(focusMove)=\"onPeriodFocusMove($event)\"\n\t\t\t\t(dismiss)=\"close()\"\n\t\t\t/>\n\t\t} @else {\n\t\t\t<header class=\"hub-datepicker__header\">\n\t\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().previousYear\"\n\t\t\t\t\t\t(click)=\"shiftMonth(-12)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t«\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().previousMonth\"\n\t\t\t\t\t\t(click)=\"shiftMonth(-1)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t‹\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ monthYearLabel() }}</span>\n\t\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().nextMonth\"\n\t\t\t\t\t\t(click)=\"shiftMonth(1)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t›\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-datepicker__nav\"\n\t\t\t\t\t\t[attr.aria-label]=\"_labels().nextYear\"\n\t\t\t\t\t\t(click)=\"shiftMonth(12)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t»\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</header>\n\n\t\t\t<div class=\"hub-datepicker__weekdays\" aria-hidden=\"true\">\n\t\t\t\t@for (wd of weekdays(); track $index) {\n\t\t\t\t\t<span class=\"hub-datepicker__weekday\">{{ wd }}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t<div class=\"hub-datepicker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\" (mouseleave)=\"clearPreview()\">\n\t\t\t\t@for (cell of grid(); track cell.date.getTime()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\tclass=\"hub-datepicker__cell\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--outside]=\"!cell.currentMonth\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--today]=\"cell.today\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--in-range]=\"cell.inRange\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--preview]=\"cell.preview\"\n\t\t\t\t\t\t[class.hub-datepicker__cell--preview-end]=\"cell.previewEnd\"\n\t\t\t\t\t\t[attr.data-time]=\"cell.date.getTime()\"\n\t\t\t\t\t\t[attr.tabindex]=\"cell.focused ? 0 : -1\"\n\t\t\t\t\t\t[attr.aria-selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t\t[disabled]=\"cell.disabled\"\n\t\t\t\t\t\t(click)=\"selectDay(cell)\"\n\t\t\t\t\t\t(mouseenter)=\"previewDay(cell)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cell.day }}\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (_hasTime()) {\n\t\t\t<div class=\"hub-datepicker__times\">\n\t\t\t\t<hub-datepicker-time\n\t\t\t\t\t[value]=\"startTimeValue()\"\n\t\t\t\t\t(valueChange)=\"onStartTimeChange($event)\"\n\t\t\t\t\t[label]=\"_emitsRange() ? _labels().startTime : _labels().time\"\n\t\t\t\t\t[granularity]=\"_granularity()\"\n\t\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t\t[hour12]=\"_hour12()\"\n\t\t\t\t\t[minuteStep]=\"_minuteStep()\"\n\t\t\t\t\t[secondStep]=\"_secondStep()\"\n\t\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t/>\n\n\t\t\t\t@if (_emitsRange()) {\n\t\t\t\t\t<hub-datepicker-time\n\t\t\t\t\t\t[value]=\"endTimeValue()\"\n\t\t\t\t\t\t(valueChange)=\"onEndTimeChange($event)\"\n\t\t\t\t\t\t[label]=\"_labels().endTime\"\n\t\t\t\t\t\t[granularity]=\"_granularity()\"\n\t\t\t\t\t\t[locale]=\"locale()\"\n\t\t\t\t\t\t[hour12]=\"_hour12()\"\n\t\t\t\t\t\t[minuteStep]=\"_minuteStep()\"\n\t\t\t\t\t\t[secondStep]=\"_secondStep()\"\n\t\t\t\t\t\t[min]=\"_minDate()\"\n\t\t\t\t\t\t[max]=\"_maxDate()\"\n\t\t\t\t\t\t[labels]=\"_labels()\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\n\t\t@if (showToday() || clearable() || _hasTime()) {\n\t\t\t<footer class=\"hub-datepicker__footer\">\n\t\t\t\t@if (showToday()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action\" (click)=\"goToToday()\">{{ _labels().today }}</button>\n\t\t\t\t}\n\t\t\t\t@if (clearable()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action\" (click)=\"clear()\">{{ _labels().clear }}</button>\n\t\t\t\t}\n\t\t\t\t@if (_hasTime()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__action hub-datepicker__action--primary\" (click)=\"close()\">\n\t\t\t\t\t\t{{ _labels().done }}\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</footer>\n\t\t}\n\t</div>\n</ng-template>\n","import { KeyValuePipe } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport {\n\tFormTextType,\n\tFormTextTypes,\n\tHubLabelType,\n\tHubLabelTypes\n} from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Time field (`hub-timepicker`): a time of day, as `HH:MM`.\n *\n * The family had a date and no hour, so every product that needed one reached for a text\n * field with an `HH:MM` pattern. A pattern is the wrong tool three times over: it gives no\n * numeric keyboard on a phone, it offers nothing when the field is focused, and it lets\n * \"8:00\" through until the form is submitted rather than saying so while it is typed.\n *\n * Built on the platform's `<input type=\"time\">`, which brings the keyboard, the stepper and\n * the locale's own 12- or 24-hour presentation, and normalises what it publishes to `HH:MM`\n * — so what a form holds does not change with the reader's locale.\n *\n * ```html\n * <hub-timepicker formControlName=\"opensAt\" label=\"Abre a las\" />\n * <hub-timepicker formControlName=\"closesAt\" [step]=\"900\" [min]=\"'08:00'\" [max]=\"'22:00'\" />\n * ```\n */\n@Component({\n\tselector: 'hub-timepicker',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-timepicker-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-timepicker\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\" [attr.for]=\"id\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"time\"\n\t\t\t\t\tclass=\"hub-field__control hub-timepicker__control\"\n\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t[value]=\"value() ?? ''\"\n\t\t\t\t\t[attr.min]=\"min() || null\"\n\t\t\t\t\t[attr.max]=\"max() || null\"\n\t\t\t\t\t[attr.step]=\"step() || null\"\n\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[readOnly]=\"readonly()\"\n\t\t\t\t\t(input)=\"onInput($event)\"\n\t\t\t\t\t(blur)=\"onTouched()\"\n\t\t\t\t/>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-field__form-text\"\n\t\t\t\t\t\t[class.hub-field__form-text--disabled]=\"disabled()\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ formText() }}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{\n\t\t\t\t\t\t\t\t\t\tgetInvalidFeedbackTemplate(error.key, error.value)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './timepicker.component.scss'\n})\nexport class HubTimepickerComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Extra classes forwarded to the host, as every field of the family accepts. */\n\treadonly classlist = input<string>('');\n\n\t/** What the bound control holds, as `HH:MM`. */\n\tprotected readonly value = signal<string | null>(null);\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(HubLabelTypes.Stacked);\n\n\t/** Helper text shown below the field. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Earliest time the field accepts, as `HH:MM`. */\n\treadonly min = input<string>('');\n\n\t/** Latest time the field accepts, as `HH:MM`. */\n\treadonly max = input<string>('');\n\n\t/**\n\t * Granularity in **seconds**, which is what the platform's `step` means here.\n\t *\n\t * 900 offers quarter hours; 60 — the default the browser applies — offers minutes and\n\t * hides the seconds field. Anything under 60 makes the control show seconds, which is\n\t * a precision an opening time never has.\n\t */\n\treadonly step = input(0, { transform: numberAttribute });\n\n\t/** Renders the field read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Publishes `HH:MM`, and nothing else.\n\t *\n\t * The control's own value already is `HH:MM` — or `HH:MM:SS` when a sub-minute step is\n\t * asked for — so the seconds are trimmed here rather than left for every consumer to\n\t * decide about. An empty field publishes null and not the empty string: \"no time\" is\n\t * an absence, and a string of length zero would sail past a `required` written as a\n\t * null check.\n\t */\n\t/** @inheritDoc */\n\twriteValue(value: unknown): void {\n\t\t// Trimmed on the way in as well as out: a control fed \"09:00:00\" from an API — or a\n\t\t// full ISO instant — must still show the hour rather than nothing at all, because\n\t\t// `<input type=\"time\">` silently ignores a value it cannot parse.\n\t\tconst text = typeof value === 'string' ? value : '';\n\t\tconst match = text.match(/(\\d{2}:\\d{2})/);\n\n\t\tthis.value.set(match ? match[1] : null);\n\t}\n\n\tprotected onInput(event: Event): void {\n\t\tconst raw = (event.target as HTMLInputElement).value;\n\n\t\tconst time = raw ? raw.slice(0, 5) : null;\n\n\t\tthis.value.set(time);\n\t\tthis.onChange(time);\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFileIcon` template. */\nexport interface HubFileIconContext {\n\t/** The item whose icon is being rendered. */\n\t$implicit: HubFileItem;\n}\n\n/**\n * Overrides the glyph `<hub-file-input>` renders next to a non-image file.\n *\n * The library never depends on `ng-hub-ui-icons`: it draws a neutral document glyph from the\n * `--hub-file-input-file-icon` CSS token and lets you project anything richer — a `<hub-icon>` from\n * any pack, an inline `<svg>`, an emoji — through this template. The item is the implicit context,\n * so the glyph can vary with `file.type`.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFileIcon let-item>\n * <hub-icon [name]=\"item.file.type === 'application/pdf' ? 'fa:solid:file-pdf' : 'fa:solid:file'\" />\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileIcon]'\n})\nexport class HubFileIconDirective {\n\t/** Template reference for the icon. */\n\treadonly template = inject<TemplateRef<HubFileIconContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the implicit context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item`.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFileIconDirective, _context: unknown): _context is HubFileIconContext {\n\t\treturn true;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Projects arbitrary markup inside a `<hub-file-input>` dropzone, between the glyph and the\n * invitation.\n *\n * The slot exists for a notice the consumer computes per instance — \"2 documents still missing\",\n * a badge, a warning — which neither `dropText` (the invitation) nor `hint` (the constraints\n * summary, rendered at the bottom) can express, and which is too instance-specific to live in the\n * global labels.\n *\n * Renders nothing when the template is absent, so the dropzone is unchanged for every consumer\n * that does not project one.\n *\n * @example\n * ```html\n * <hub-file-input [multiple]=\"true\">\n * <ng-template hubFileDropzoneNotice>\n * <strong class=\"missing\">2 documents still missing</strong>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileDropzoneNotice]'\n})\nexport class HubFileDropzoneNoticeDirective {\n\t/** Template reference for the notice. */\n\treadonly template = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFilePreview` template. */\nexport interface HubFilePreviewContext {\n\t/** The item being rendered. */\n\t$implicit: HubFileItem;\n\t/** Removes this item from the selection (and cancels its upload, if any). */\n\tremove: () => void;\n\t/** Re-runs the upload of this item. No-op when no uploader is registered. */\n\tretry: () => void;\n\t/** Aborts the in-flight upload of this item. No-op when it is not uploading. */\n\tcancel: () => void;\n}\n\n/**\n * Replaces the entire rendering of a selected file in `<hub-file-input>`.\n *\n * Where `hubFileIcon` swaps a glyph, this takes over the whole row (or grid tile): thumbnail, name,\n * size, progress bar and buttons. The template receives the item plus the actions it needs, so a\n * custom preview keeps working removal, retry and cancel without reaching into the component.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFilePreview let-item let-remove=\"remove\">\n * <article class=\"attachment\">\n * <img *ngIf=\"item.previewUrl\" [src]=\"item.previewUrl\" alt=\"\" />\n * <span>{{ item.file.name }}</span>\n * <button type=\"button\" (click)=\"remove()\">Remove</button>\n * </article>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFilePreview]'\n})\nexport class HubFilePreviewDirective {\n\t/** Template reference for the item. */\n\treadonly template = inject<TemplateRef<HubFilePreviewContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item` and the action bindings.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFilePreviewDirective, _context: unknown): _context is HubFilePreviewContext {\n\t\treturn true;\n\t}\n}\n","/**\n * Tests a file against an `accept` specification.\n *\n * The native `accept` attribute only filters the operating-system file dialog: files arriving by\n * drag-and-drop or paste bypass it entirely. This function applies the same rules by hand, so a\n * dropped file is held to the constraint the consumer declared.\n *\n * Supported tokens, comma-separated, matched case-insensitively:\n * - an extension — `.pdf`\n * - a wildcard MIME type — `image/*`\n * - an exact MIME type — `application/pdf`\n * - the catch-alls `*` and `*​/*`\n *\n * Note that a MIME token can never match a file the browser could not type (`file.type === ''`,\n * common for unusual extensions); use an extension token for those.\n *\n * @param file - The file to test.\n * @param accept - The `accept` specification. Empty or `*` accepts everything.\n * @returns `true` when the file satisfies at least one token.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n\tconst specification = (accept ?? '').trim();\n\n\tif (!specification || specification === '*' || specification === '*/*') {\n\t\treturn true;\n\t}\n\n\tconst name = file.name.toLowerCase();\n\tconst type = (file.type ?? '').toLowerCase();\n\n\treturn specification\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0)\n\t\t.some((token) => {\n\t\t\tif (token === '*' || token === '*/*') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// An extension, e.g. `.pdf`\n\t\t\tif (token.startsWith('.')) {\n\t\t\t\treturn name.endsWith(token);\n\t\t\t}\n\n\t\t\t// A wildcard MIME type, e.g. `image/*` — the file's type must start with `image/`\n\t\t\tif (token.endsWith('/*')) {\n\t\t\t\treturn type.length > 0 && type.startsWith(token.slice(0, -1));\n\t\t\t}\n\n\t\t\t// An exact MIME type\n\t\t\treturn type === token;\n\t\t});\n}\n","/**\n * Builds the identity key used to detect duplicate selections.\n *\n * Two `File` objects are never referentially equal across separate drops, so identity is derived\n * from the tuple the browser exposes: name, byte size and last-modified timestamp. Collisions are\n * possible in theory (same name, size and mtime) but describe the same file in every practical case.\n *\n * @param file - The file to key.\n * @returns A stable string key for the file.\n */\nexport function fileKey(file: File): string {\n\treturn `${file.name}:${file.size}:${file.lastModified}`;\n}\n","/** The value a `<hub-file-input>` writes to its form control. */\nexport type HubFileValue = File | File[] | null;\n\n/**\n * Normalizes any file-shaped control value to a plain array.\n *\n * Accepts the shapes a control can realistically hold: a single `File` (single mode), an array of\n * files (multiple mode), a native `FileList` (a control fed straight from a DOM event or from the\n * deprecated `<hub-input type=\"file\">`), or `null`/`undefined`.\n *\n * @param value - The raw control value.\n * @returns The files it contains, in order; an empty array when it holds none.\n */\nexport function toFileArray(value: unknown): File[] {\n\tif (value == null) {\n\t\treturn [];\n\t}\n\n\tif (value instanceof File) {\n\t\treturn [value];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is File => entry instanceof File);\n\t}\n\n\tif (typeof FileList !== 'undefined' && value instanceof FileList) {\n\t\treturn Array.from(value);\n\t}\n\n\treturn [];\n}\n","import { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tPLATFORM_ID,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubFileIconDirective } from '../../directives/file-icon.directive';\nimport { HubFileDropzoneNoticeDirective } from '../../directives/file-dropzone-notice.directive';\nimport { HubFilePreviewContext, HubFilePreviewDirective } from '../../directives/file-preview.directive';\nimport { FormTextType, FormTextTypes } from '../../interfaces/common.interface';\nimport {\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from '../../interfaces/file-input.interface';\nimport { HUB_FILE_UPLOADER } from '../../services/file-uploader';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\n\n/**\n * Accessible file field with drag-and-drop, clipboard paste, per-file constraints, previews and\n * optional upload progress.\n *\n * A full `ng-hub-ui-forms` field: it extends {@link HubFieldControl}, so it binds with\n * `formControlName` / `ngModel` and shares the label, helper text and validation chrome with every\n * other control.\n *\n * The **form value stays native** — a `File` in single mode, a `File[]` in multiple mode, `null`\n * when empty — so it can be handed straight to a `FormData`. The rich per-file state (preview URL,\n * upload status, progress, error) lives in the {@link files} signal instead of contaminating the\n * control.\n *\n * Constraints declared as inputs (`accept`, `maxSize`, `minSize`, `maxTotalSize`, `maxFiles`) act as\n * a **filter**: an offending file never reaches the value and surfaces through {@link rejected}.\n * They are enforced by hand rather than delegated to the native `accept` attribute, which only\n * filters the operating-system dialog and is bypassed entirely by a drop or a paste. To make the\n * *control itself* invalid — the right choice when a value can also be patched in programmatically —\n * add the matching validators (`hubAcceptedFiles`, `hubMaxFileSize`, …).\n *\n * Uploading is opt-in and transport-agnostic: register a {@link HubFileUploader} with\n * `provideHubFileUploader()` and the component drives progress, cancel and retry. With no uploader\n * registered it is a pure picker.\n *\n * @example\n * ```html\n * <hub-file-input\n * formControlName=\"attachments\"\n * label=\"Attachments\"\n * [multiple]=\"true\"\n * accept=\"image/*,.pdf\"\n * [maxSize]=\"5 * 1024 * 1024\"\n * [maxFiles]=\"3\"\n * preview=\"grid\"\n * (rejected)=\"notify($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'hub-file-input',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './file-input.component.html',\n\tstyleUrl: './file-input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-file-input-host]': 'true',\n\t\t'(paste)': 'handlePaste($event)'\n\t}\n})\nexport class HubFileInputComponent extends HubFieldControl {\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #uploader = inject(HUB_FILE_UPLOADER, { optional: true });\n\treadonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\treadonly #subscriptions = new Map<string, Subscription>();\n\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _items = signal<HubFileItem[]>([]);\n\n\t/** Depth counter for `dragenter`/`dragleave`: children of the dropzone fire their own events. */\n\t#dragDepth = 0;\n\n\t/** Releases every object URL and aborts every in-flight upload when the field goes away. */\n\tprivate readonly _cleanup = inject(DestroyRef).onDestroy(() => {\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t});\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Whether more than one file can be held. Switches the control value to `File[]`. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accepted file types, e.g. `image/*,.pdf`. Enforced on drop and paste, not just in the dialog. */\n\treadonly accept = input<string>('*');\n\n\t/** Maximum size per file, in bytes. */\n\treadonly maxSize = input<number | null>(null);\n\n\t/** Minimum size per file, in bytes. Rejects the 0-byte files a failed export produces. */\n\treadonly minSize = input<number | null>(null);\n\n\t/** Maximum combined size of every held file, in bytes. */\n\treadonly maxTotalSize = input<number | null>(null);\n\n\t/** Maximum number of files. Only meaningful with `multiple`. */\n\treadonly maxFiles = input<number | null>(null);\n\n\t/** Whether files can be dropped onto the field. */\n\treadonly dragDrop = input(true, { transform: booleanAttribute });\n\n\t/** Whether files can be pasted into the focused field (e.g. a screenshot). */\n\treadonly paste = input(true, { transform: booleanAttribute });\n\n\t/** How the held files are rendered: not at all, as a list, or as a thumbnail grid. */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/** Whether the same file can be selected twice (keyed on name, size and last-modified date). */\n\treadonly allowDuplicates = input(false, { transform: booleanAttribute });\n\n\t/** Opens the device camera instead of the file browser, on the platforms that support it. */\n\treadonly capture = input<'user' | 'environment' | null>(null);\n\n\t/** Whether a newly accepted file starts uploading immediately. Ignored with no uploader registered. */\n\treadonly autoUpload = input(true, { transform: booleanAttribute });\n\n\t/** Overrides the \"browse\" button text coming from the global labels. */\n\treadonly buttonLabel = input<string | null>(null);\n\n\t/** Overrides the dropzone invitation coming from the global labels. */\n\treadonly dropText = input<string | null>(null);\n\n\t/** Overrides the second invitation line coming from the global labels. Pass `''` to hide it. */\n\treadonly dropSubtext = input<string | null>(null);\n\n\t/** Overrides the auto-generated hint that summarizes the active constraints. Pass `''` to hide it. */\n\treadonly hint = input<string | null>(null);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits the native value whenever the selection changes. */\n\treadonly valueChange = output<HubFileValue>();\n\n\t/** Emits the files refused by the declared constraints, with the reason for each. */\n\treadonly rejected = output<HubFileRejection[]>();\n\n\t/** Emits the file removed from the selection. */\n\treadonly fileRemoved = output<File>();\n\n\t/** Emits the full item list whenever an upload changes status or progress. */\n\treadonly uploadStateChange = output<readonly HubFileItem[]>();\n\n\t/** The hidden native file input, kept focusable so the dropzone label activates it. */\n\tprotected readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n\t/** Projected per-file icon template. */\n\tprotected readonly iconTpt = contentChild(HubFileIconDirective);\n\n\t/** Projected per-file preview template, replacing the built-in item rendering. */\n\tprotected readonly previewTpt = contentChild(HubFilePreviewDirective);\n\n\t/** Projected notice rendered between the glyph and the invitation. */\n\tprotected readonly noticeTpt = contentChild(HubFileDropzoneNoticeDirective);\n\n\t/** Whether a drag is currently hovering the dropzone. */\n\tprotected readonly isDragging = signal(false);\n\n\t/** Latest message for the screen-reader live region. */\n\tprotected readonly announcement = signal('');\n\n\t/** The rich, per-file state of the current selection. */\n\treadonly files = this._items.asReadonly();\n\n\t/** Whether at least one file is currently uploading. Gate a submit button on this. */\n\treadonly uploading = computed<boolean>(() => this._items().some((item) => item.status === 'uploading'));\n\n\t/** Whether an uploader is registered, which is what enables progress, cancel and retry. */\n\tprotected readonly hasUploader = !!this.#uploader;\n\n\t/** The resolved, localizable labels. */\n\tprotected readonly labels = computed(() => this.#config.fileInput);\n\n\t/** Text of the browse action. */\n\tprotected readonly browseLabel = computed<string>(() => this.buttonLabel() ?? this.labels().browse);\n\n\t/** The dropzone invitation. */\n\tprotected readonly dropTextLabel = computed<string>(() => this.dropText() ?? this.labels().dropHere);\n\n\t/** The second invitation line. Empty renders nothing. */\n\tprotected readonly dropSubtextLabel = computed<string>(() => this.dropSubtext() ?? this.labels().dropSubtext);\n\n\t/** The hint summarizing the active constraints. */\n\tprotected readonly constraintsHint = computed<string>(() => {\n\t\tconst override = this.hint();\n\n\t\tif (override != null) {\n\t\t\treturn override;\n\t\t}\n\n\t\tconst accept = this.accept();\n\n\t\treturn this.labels().constraints({\n\t\t\taccept: !accept || accept === '*' || accept === '*/*' ? null : accept,\n\t\t\tmaxSize: this.maxSize(),\n\t\t\tmaxFiles: this.multiple() ? this.maxFiles() : null\n\t\t});\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && !this.disabled());\n\n\t/**\n\t * Derives the native validation errors from the held files rather than from the DOM.\n\t *\n\t * The hidden native input is emptied after every `change` so the same file can be picked twice,\n\t * and it never sees a dropped or pasted file at all. Its `validity` therefore reports\n\t * `valueMissing` even when files are held — reading it would mark a satisfied field as required.\n\t *\n\t * @param _target - Ignored; the file state is the source of truth.\n\t */\n\tprotected override updateNativeErrors(_target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._nativeErrors.set(this.required() && this._items().length === 0 ? { required: true } : null);\n\t}\n\n\t/**\n\t * Resolves a human-readable message for a failed upload.\n\t *\n\t * @param item - The item in the `error` state.\n\t * @returns The error message.\n\t */\n\tprotected errorText(item: HubFileItem): string {\n\t\tconst error = item.error as { message?: string } | null;\n\n\t\treturn error?.message ?? String(error ?? '');\n\t}\n\n\twriteValue(value: HubFileValue | FileList): void {\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items.set(toFileArray(value).map((file) => this.#createItem(file)));\n\t}\n\n\t/** Opens the native file dialog. */\n\topen(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.nativeInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Removes a file from the selection, aborting its upload and releasing its preview.\n\t *\n\t * @param id - The id of the item to remove.\n\t */\n\tremove(id: string): void {\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!item || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#revokePreview(item);\n\t\tthis._items.update((items) => items.filter((candidate) => candidate.id !== id));\n\t\tthis.#emitValue();\n\t\tthis.fileRemoved.emit(item.file);\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\n\t}\n\n\t/** Removes every file, aborting any upload in flight. */\n\tclear(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis._items.set([]);\n\t\tthis.#emitValue();\n\t\tthis.#announce(this.labels().filesSelected(0));\n\t}\n\n\t/** Uploads every file that has not been uploaded yet. No-op without a registered uploader. */\n\tupload(): void {\n\t\tthis._items()\n\t\t\t.filter((item) => item.status === 'ready' || item.status === 'error')\n\t\t\t.forEach((item) => this.#startUpload(item.id));\n\t}\n\n\t/**\n\t * Aborts an in-flight upload, returning the file to the `ready` state.\n\t *\n\t * @param id - The id of the uploading item.\n\t */\n\tcancel(id: string): void {\n\t\tif (!this.#subscriptions.has(id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'ready', progress: null, error: null, response: null });\n\t}\n\n\t/**\n\t * Re-runs the upload of a file, typically after a failure.\n\t *\n\t * @param id - The id of the item to upload again.\n\t */\n\tretry(id: string): void {\n\t\tthis.#startUpload(id);\n\t}\n\n\t/**\n\t * Reads the files chosen through the native dialog.\n\t *\n\t * @param event - The `change` event of the hidden native input.\n\t */\n\tprotected handleNativeChange(event: Event): void {\n\t\tconst native = event.target as HTMLInputElement;\n\n\t\tthis.#addFiles(Array.from(native.files ?? []));\n\n\t\t// Without this, re-picking the very same file fires no second `change` event.\n\t\tnative.value = '';\n\t}\n\n\t/**\n\t * Accepts files dropped onto the dropzone.\n\t *\n\t * @param event - The drop event.\n\t */\n\tprotected handleDrop(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = 0;\n\t\tthis.isDragging.set(false);\n\t\tthis.#addFiles(this.#extractFiles(event.dataTransfer));\n\t\tthis.handleBlur();\n\t}\n\n\t/**\n\t * Highlights the dropzone once a drag carrying files enters it.\n\t *\n\t * @param event - The dragenter event.\n\t */\n\tprotected handleDragEnter(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth++;\n\t\tthis.isDragging.set(true);\n\t}\n\n\t/**\n\t * Keeps the drop target alive. A `dragover` that does not call `preventDefault` refuses the drop.\n\t *\n\t * @param event - The dragover event.\n\t */\n\tprotected handleDragOver(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\t}\n\t}\n\n\t/**\n\t * Un-highlights the dropzone, but only once the drag has left it *and* all of its children.\n\t *\n\t * @param event - The dragleave event.\n\t */\n\tprotected handleDragLeave(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = Math.max(0, this.#dragDepth - 1);\n\n\t\tif (this.#dragDepth === 0) {\n\t\t\tthis.isDragging.set(false);\n\t\t}\n\t}\n\n\t/**\n\t * Accepts files pasted into the focused field, e.g. a screenshot from the clipboard.\n\t *\n\t * @param event - The paste event.\n\t */\n\tprotected handlePaste(event: ClipboardEvent): void {\n\t\tif (!this.paste() || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = this.#extractFiles(event.clipboardData);\n\n\t\tif (files.length > 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.#addFiles(files);\n\t\t}\n\t}\n\n\t/**\n\t * Builds the context handed to a projected `hubFilePreview` template.\n\t *\n\t * @param item - The item being rendered.\n\t * @returns The template context, complete with the actions the item needs.\n\t */\n\tprotected previewContext(item: HubFileItem): HubFilePreviewContext {\n\t\treturn {\n\t\t\t$implicit: item,\n\t\t\tremove: () => this.remove(item.id),\n\t\t\tretry: () => this.retry(item.id),\n\t\t\tcancel: () => this.cancel(item.id)\n\t\t};\n\t}\n\n\t/**\n\t * Validates and appends the incoming files, emitting the new value and any rejections.\n\t *\n\t * In single mode the incoming file replaces the current one, so the constraint checks run against\n\t * an empty baseline rather than against the file about to be discarded.\n\t *\n\t * @param incoming - The files to add.\n\t */\n\t#addFiles(incoming: File[]): void {\n\t\tif (this.disabled() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst multiple = this.multiple();\n\t\tconst current = this._items();\n\t\tconst baseline = multiple ? current : [];\n\t\tconst accepted: HubFileItem[] = [];\n\t\tconst rejections: HubFileRejection[] = [];\n\t\tconst keys = new Set(baseline.map((item) => fileKey(item.file)));\n\n\t\tlet count = baseline.length;\n\t\tlet total = baseline.reduce((sum, item) => sum + item.file.size, 0);\n\n\t\tfor (const file of incoming) {\n\t\t\tconst rejection = this.#reject(file, count, total, keys);\n\n\t\t\tif (rejection) {\n\t\t\t\trejections.push(rejection);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys.add(fileKey(file));\n\t\t\tcount++;\n\t\t\ttotal += file.size;\n\t\t\taccepted.push(this.#createItem(file));\n\t\t}\n\n\t\tif (accepted.length > 0) {\n\t\t\tif (!multiple) {\n\t\t\t\tcurrent.forEach((item) => this.#abort(item.id));\n\t\t\t\tcurrent.forEach((item) => this.#revokePreview(item));\n\t\t\t}\n\n\t\t\tthis._items.set([...baseline, ...accepted]);\n\t\t\tthis.#emitValue();\n\n\t\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\t\taccepted.forEach((item) => this.#startUpload(item.id));\n\t\t\t}\n\t\t}\n\n\t\tif (rejections.length > 0) {\n\t\t\tthis.rejected.emit(rejections);\n\t\t}\n\n\t\tthis.#announce(this.#summarize(accepted.length, rejections));\n\t}\n\n\t/**\n\t * Applies the declared constraints to a single candidate file.\n\t *\n\t * @param file - The candidate.\n\t * @param count - How many files are already accepted.\n\t * @param total - The combined size of the already-accepted files.\n\t * @param keys - Identity keys of the already-accepted files, for duplicate detection.\n\t * @returns The rejection, or `null` when the file passes every constraint.\n\t */\n\t#reject(file: File, count: number, total: number, keys: Set<string>): HubFileRejection | null {\n\t\tconst build = (reason: HubFileRejectionReason, limit: string | number | null): HubFileRejection => ({\n\t\t\tfile,\n\t\t\treason,\n\t\t\tlimit\n\t\t});\n\n\t\tif (!this.allowDuplicates() && keys.has(fileKey(file))) {\n\t\t\treturn build('duplicate', null);\n\t\t}\n\n\t\tif (!matchesAccept(file, this.accept())) {\n\t\t\treturn build('accept', this.accept());\n\t\t}\n\n\t\tconst minSize = this.minSize();\n\n\t\tif (minSize != null && file.size < minSize) {\n\t\t\treturn build('minSize', minSize);\n\t\t}\n\n\t\tconst maxSize = this.maxSize();\n\n\t\tif (maxSize != null && file.size > maxSize) {\n\t\t\treturn build('maxSize', maxSize);\n\t\t}\n\n\t\tconst maxFiles = this.multiple() ? this.maxFiles() : 1;\n\n\t\tif (maxFiles != null && count + 1 > maxFiles) {\n\t\t\treturn build('maxFiles', maxFiles);\n\t\t}\n\n\t\tconst maxTotalSize = this.maxTotalSize();\n\n\t\tif (maxTotalSize != null && total + file.size > maxTotalSize) {\n\t\t\treturn build('maxTotalSize', maxTotalSize);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is a previewable image.\n\t *\n\t * @param file - The accepted file.\n\t * @returns The new item, in the `ready` state.\n\t */\n\t#createItem(file: File): HubFileItem {\n\t\tconst previewable = this.#isBrowser && this.preview() !== 'none' && file.type.startsWith('image/');\n\n\t\treturn {\n\t\t\tid: uuid(),\n\t\t\tfile,\n\t\t\tpreviewUrl: previewable ? URL.createObjectURL(file) : null,\n\t\t\tstatus: 'ready',\n\t\t\tprogress: null,\n\t\t\terror: null,\n\t\t\tresponse: null\n\t\t};\n\t}\n\n\t/**\n\t * Releases the object URL of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose preview should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (item.previewUrl && this.#isBrowser) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\t}\n\n\t/** Writes the native value to the form control and emits it. */\n\t#emitValue(): void {\n\t\tconst files = this._items().map((item) => item.file);\n\t\tconst value: HubFileValue = this.multiple() ? files : (files[0] ?? null);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Subscribes to the registered uploader for one item, mapping its events onto the item's status.\n\t *\n\t * @param id - The id of the item to upload.\n\t */\n\t#startUpload(id: string): void {\n\t\tconst uploader = this.#uploader;\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!uploader || !item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'uploading', progress: null, error: null, response: null });\n\n\t\tconst subscription = uploader.upload(item.file, { id }).subscribe({\n\t\t\tnext: (event) => {\n\t\t\t\tif (event.status === 'progress') {\n\t\t\t\t\t// A transport that cannot report a total leaves `progress` null, which the template\n\t\t\t\t\t// renders as an indeterminate bar rather than a bar frozen at 0%.\n\t\t\t\t\tconst progress = event.total ? Math.round((event.loaded / event.total) * 100) : null;\n\t\t\t\t\tthis.#patch(id, { status: 'uploading', progress });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.status === 'done') {\n\t\t\t\t\t// The body is what identifies the stored file server-side; without keeping it the\n\t\t\t\t\t// application has no way to reference what it just uploaded.\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null, response: event.response ?? null });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.#patch(id, { status: 'error', error: event.error });\n\t\t\t},\n\t\t\terror: (error: unknown) => this.#patch(id, { status: 'error', error }),\n\t\t\tcomplete: () => {\n\t\t\t\t// An uploader that completes without emitting `done` still finished successfully.\n\t\t\t\tconst current = this._items().find((candidate) => candidate.id === id);\n\n\t\t\t\tif (current?.status === 'uploading') {\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.#subscriptions.set(id, subscription);\n\t}\n\n\t/**\n\t * Unsubscribes from an item's upload, which aborts the underlying request.\n\t *\n\t * @param id - The id of the item.\n\t */\n\t#abort(id: string): void {\n\t\tthis.#subscriptions.get(id)?.unsubscribe();\n\t\tthis.#subscriptions.delete(id);\n\t}\n\n\t/**\n\t * Immutably updates one item and notifies listeners of the new upload state.\n\t *\n\t * @param id - The id of the item to update.\n\t * @param patch - The fields to overwrite.\n\t */\n\t#patch(\n\t\tid: string,\n\t\tpatch: Partial<Pick<HubFileItem, 'status' | 'progress' | 'error' | 'response'>> & { status: HubFileStatus }\n\t): void {\n\t\tlet changed = false;\n\n\t\tthis._items.update((items) =>\n\t\t\titems.map((item) => {\n\t\t\t\tif (item.id !== id) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\n\t\t\t\tchanged = true;\n\t\t\t\treturn { ...item, ...patch };\n\t\t\t})\n\t\t);\n\n\t\tif (changed) {\n\t\t\tthis.uploadStateChange.emit(this._items());\n\t\t}\n\t}\n\n\t/**\n\t * Extracts the files carried by a drop or a paste.\n\t *\n\t * Reads `items` when present so non-file payloads (dragged text, HTML) are skipped, and falls\n\t * back to `files` otherwise.\n\t *\n\t * @param transfer - The `DataTransfer` of the event.\n\t * @returns The files it carries.\n\t */\n\t#extractFiles(transfer: DataTransfer | null): File[] {\n\t\tif (!transfer) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (transfer.items?.length) {\n\t\t\treturn Array.from(transfer.items)\n\t\t\t\t.filter((item) => item.kind === 'file')\n\t\t\t\t.map((item) => item.getAsFile())\n\t\t\t\t.filter((file): file is File => file !== null);\n\t\t}\n\n\t\treturn Array.from(transfer.files ?? []);\n\t}\n\n\t/**\n\t * Whether a drag event carries files, as opposed to text or a page element.\n\t *\n\t * @param event - The drag event.\n\t * @returns `true` when the payload includes files.\n\t */\n\t#carriesFiles(event: DragEvent): boolean {\n\t\treturn Array.from(event.dataTransfer?.types ?? []).includes('Files');\n\t}\n\n\t/**\n\t * Builds the live-region message describing the outcome of an add.\n\t *\n\t * @param acceptedCount - How many files were accepted.\n\t * @param rejections - The files that were refused.\n\t * @returns The message to announce.\n\t */\n\t#summarize(acceptedCount: number, rejections: HubFileRejection[]): string {\n\t\tconst labels = this.labels();\n\t\tconst parts: string[] = [];\n\n\t\tif (acceptedCount > 0) {\n\t\t\tparts.push(labels.filesSelected(this._items().length));\n\t\t}\n\n\t\trejections.forEach((rejection) => parts.push(labels.rejection(rejection)));\n\n\t\treturn parts.join(' ');\n\t}\n\n\t/**\n\t * Publishes a message to the live region, forcing a re-announcement of identical text.\n\t *\n\t * @param message - The message to announce.\n\t */\n\t#announce(message: string): void {\n\t\tif (!message) {\n\t\t\treturn;\n\t\t}\n\n\t\t// A screen reader ignores a live region whose text did not change; the zero-width space makes\n\t\t// two consecutive identical messages differ.\n\t\tthis.announcement.set(this.announcement() === message ? `${message}​` : message);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-file-input\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<!--\n\t\t\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with\n\t\t\tthe keyboard opens the file dialog through the platform, so no role, tabindex or key\n\t\t\thandler is needed. The \"browse\" affordance is a <span>, not a <button>, because a button\n\t\t\tinside a label would open the dialog twice.\n\t\t-->\n\t\t<label\n\t\t\tclass=\"hub-file-input__dropzone\"\n\t\t\t[for]=\"id\"\n\t\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t\t(dragenter)=\"handleDragEnter($event)\"\n\t\t\t(dragover)=\"handleDragOver($event)\"\n\t\t\t(dragleave)=\"handleDragLeave($event)\"\n\t\t\t(drop)=\"handleDrop($event)\"\n\t\t>\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hub-file-input__native\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[attr.capture]=\"capture()\"\n\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t[attr.aria-describedby]=\"constraintsHint() ? id + '-hint' : null\"\n\t\t\t\t(change)=\"handleNativeChange($event)\"\n\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t\t@if (noticeTpt(); as notice) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"notice.template\"></ng-container>\n\t\t\t}\n\n\t\t\t<span class=\"hub-file-input__prompt\">\n\t\t\t\t@if (dragDrop()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-text\">{{ dropTextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t@if (dropSubtextLabel()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-subtext\">{{ dropSubtextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t\t</span>\n\n\t\t\t@if (constraintsHint()) {\n\t\t\t\t<span class=\"hub-file-input__hint\" [id]=\"id + '-hint'\">{{ constraintsHint() }}</span>\n\t\t\t}\n\t\t</label>\n\n\t\t@if (preview() !== 'none' && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"preview() === 'grid'\">\n\t\t\t\t@for (item of _items(); track item.id) {\n\t\t\t\t\t<li class=\"hub-file-input__item\" [attr.data-status]=\"item.status\">\n\t\t\t\t\t\t@if (previewTpt(); as tpt) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"previewContext(item)\"\n\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<span class=\"hub-file-input__thumb\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t@if (item.previewUrl) {\n\t\t\t\t\t\t\t\t\t<img class=\"hub-file-input__image\" [src]=\"item.previewUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t} @else if (iconTpt(); as icon) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"icon.template\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__file-icon\"></span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__meta\">\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__name\" [title]=\"item.file.name\">{{ item.file.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__size\">{{ labels().formatSize(item.file.size) }}</span>\n\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"item.progress === null\"\n\t\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"item.progress\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress-bar\"\n\t\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"item.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__error\">{{ errorText(item) }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__actions\">\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--cancel\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().cancel\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"cancel(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--retry\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().retry\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"retry(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (!disabled() && item.status !== 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--remove\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().remove\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"remove(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\n\t\t\t@if (_items().length > 1 && !disabled()) {\n\t\t\t\t<button type=\"button\" class=\"hub-file-input__clear\" (click)=\"clear()\">{{ labels().clear }}</button>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"hub-field__feedback-text\"\n\t\t\t\t\t\t\t\t[innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n\n\t<span class=\"hub-file-input__live\" aria-live=\"polite\">{{ announcement() }}</span>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Inverts a HEX color, or returns the best contrasting black/white when `bw` is enabled.\n */\n@Pipe({\n\tname: 'hubInvertColor'\n})\nexport class HubInvertColorPipe implements PipeTransform {\n\t/**\n\t * @param hex - HEX color (`#rgb` or `#rrggbb`).\n\t * @param bw - When `true`, returns `#000000` or `#FFFFFF` for maximum contrast.\n\t * @returns The inverted (or contrasting) HEX color.\n\t */\n\ttransform(hex: string, bw: boolean = false): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// Convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\n\t\t// Invert color components.\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\n\t\t// Pad each with zeros and return.\n\t\treturn '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { joinButLast } from '../utils/utils';\n\n/**\n * Joins an array using a separator for all but the last element, which uses a dedicated glue.\n */\n@Pipe({\n\tname: 'hubJoinButLast'\n})\nexport class HubJoinButLastPipe implements PipeTransform {\n\t/**\n\t * @param values - Values to join.\n\t * @param glue - Separator between all but the last element.\n\t * @param lastGlue - Separator before the last element.\n\t * @returns The joined string.\n\t */\n\ttransform(values: any[], glue?: string, lastGlue?: string): string {\n\t\treturn joinButLast(values, glue, lastGlue);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { get } from '../utils/utils';\n\n/**\n * Maps an array of objects to an array of values read from a dot-separated path.\n */\n@Pipe({\n\tname: 'hubMap'\n})\nexport class HubMapPipe implements PipeTransform {\n\t/**\n\t * @param value - Array of objects.\n\t * @param path - Dot-separated path read from each item.\n\t * @returns The array of resolved values.\n\t */\n\ttransform(value: any[], path: string): any[] {\n\t\treturn value.map((item) => get(item, path));\n\t}\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Marks a URL as a trusted resource URL via the `DomSanitizer`.\n */\n@Pipe({\n\tname: 'hubSafeUrl'\n})\nexport class HubSafeUrlPipe implements PipeTransform {\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\n\t/**\n\t * @param value - The raw URL.\n\t * @returns A `SafeUrl` trusted as a resource URL.\n\t */\n\ttransform(value: string): SafeUrl {\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { camelToSnakeUpper } from '../utils/utils';\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n */\n@Pipe({\n\tname: 'hubSnakeUpper'\n})\nexport class HubSnakeUpperPipe implements PipeTransform {\n\t/**\n\t * @param value - camelCase identifier.\n\t * @returns The UPPER_SNAKE_CASE representation.\n\t */\n\ttransform(value: string): unknown {\n\t\treturn camelToSnakeUpper(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/** Matches a single letter, including accented and special Latin characters. */\nconst LETTERS_REGEXP = /^[a-zA-ZáéíóúüñçÁÉÍÓÚÜÑÇ]$/;\n\n/**\n * Capitalizes the first letter of a string, skipping leading non-letter characters.\n */\n@Pipe({\n\tname: 'hubUcfirst'\n})\nexport class HubUcfirstPipe implements PipeTransform {\n\t/**\n\t * @param value - Input string.\n\t * @returns The string with its first letter uppercased.\n\t */\n\ttransform(value: string = ''): string {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst stringArray = value.split('');\n\n\t\tfor (let i = 0; i < stringArray.length; i++) {\n\t\t\tif (LETTERS_REGEXP.test(stringArray[i])) {\n\t\t\t\tstringArray[i] = stringArray[i].toUpperCase();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn stringArray.join('');\n\t}\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { areEqual } from '../utils/utils';\n\n/**\n * Cross-field validator that checks whether two controls of a `FormGroup` hold equal values.\n *\n * Sets the `equal` error on the group when the values differ. Returns `null` (valid) when either\n * control is empty, so the requirement is only enforced once both have a value.\n *\n * @param primaryControlName - Name of the first control.\n * @param secondaryControlName - Name of the second control.\n * @returns A validator function for use on a `FormGroup`.\n *\n * @example\n * ```ts\n * new FormGroup({\n * password: new FormControl(''),\n * confirm: new FormControl('')\n * }, { validators: hubAreEqual('password', 'confirm') });\n * ```\n */\nexport function hubAreEqual(primaryControlName: string, secondaryControlName: string): ValidatorFn {\n\treturn (group: AbstractControl): ValidationErrors | null => {\n\t\tconst primaryControl = group.get(primaryControlName);\n\t\tconst secondaryControl = group.get(secondaryControlName);\n\n\t\tif (!primaryControl?.value || !secondaryControl?.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!areEqual(primaryControl.value, secondaryControl.value)) {\n\t\t\treturn { equal: true };\n\t\t}\n\n\t\treturn null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { matchesAccept } from '../utils/file-accept';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that every file held by the control matches an `accept` specification.\n *\n * Complements the `accept` input of `<hub-file-input>`, which *filters* offending files before they\n * reach the value. This validator instead makes the control **invalid**, which is what you want when\n * files can also arrive from outside the component (patched value, restored draft, another control).\n *\n * Sets the `fileAccept` error with `{ accept, files }`, where `files` lists the offending names.\n * An empty control is valid — pair it with `Validators.required` to demand a file.\n *\n * @param accept - The accept specification, e.g. `'image/*,.pdf'`.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubAcceptedFiles('image/*,.pdf')]);\n * ```\n */\nexport function hubAcceptedFiles(accept: string): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => !matchesAccept(file, accept));\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { fileAccept: { accept, files: offending.map((file) => file.name) } };\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control exceeds a maximum size.\n *\n * Sets the `fileMaxSize` error with `{ max, actual, files }`, where `actual` is the size of the\n * largest offending file and `files` lists the offending names. An empty control is valid.\n *\n * @param maxBytes - The maximum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMaxFileSize(5 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxFileSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size > maxBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMaxSize: {\n\t\t\t\tmax: maxBytes,\n\t\t\t\tactual: Math.max(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control falls below a minimum size.\n *\n * Useful to reject empty or truncated uploads (a 0-byte file is a common symptom of a failed export).\n * Sets the `fileMinSize` error with `{ min, actual, files }`, where `actual` is the size of the\n * smallest offending file. An empty control is valid.\n *\n * @param minBytes - The minimum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMinFileSize(1)]);\n * ```\n */\nexport function hubMinFileSize(minBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size < minBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMinSize: {\n\t\t\t\tmin: minBytes,\n\t\t\t\tactual: Math.min(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the combined size of every file held by the control stays within a budget.\n *\n * This is the constraint a request-body limit actually enforces, and it is not implied by a\n * per-file maximum: ten files of 2 MB pass `hubMaxFileSize(5 MB)` and still blow a 10 MB request.\n *\n * Sets the `fileMaxTotalSize` error with `{ max, actual }`. An empty control is valid.\n *\n * @param maxBytes - The maximum combined size, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxTotalSize(20 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxTotalSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst files = toFileArray(control.value);\n\n\t\tif (files.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst total = files.reduce((sum, file) => sum + file.size, 0);\n\n\t\treturn total > maxBytes ? { fileMaxTotalSize: { max: maxBytes, actual: total } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at most `max` files.\n *\n * Sets the `fileMaxFiles` error with `{ max, actual }`. An empty control is valid.\n *\n * @param max - The maximum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxFiles(3)]);\n * ```\n */\nexport function hubMaxFiles(max: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count > max ? { fileMaxFiles: { max, actual: count } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at least `min` files.\n *\n * Unlike the other file validators, this one **does** reject an empty control: holding zero files\n * is precisely what a minimum forbids. It therefore subsumes `Validators.required`, and adding both\n * only produces two errors for the same cause.\n *\n * Sets the `fileMinFiles` error with `{ min, actual }`.\n *\n * @param min - The minimum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMinFiles(2)]);\n * ```\n */\nexport function hubMinFiles(min: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count < min ? { fileMinFiles: { min, actual: count } } : null;\n\t};\n}\n","import { ViewContainerRef } from '@angular/core';\nimport { HubInputComponent } from '../components/input/input.component';\nimport { HubSelectComponent } from '../select/select.component';\n\n/** A `{ value, label }` option for select-kind controls. */\nexport interface HubFormControlOption {\n\tvalue: unknown;\n\tlabel: string;\n}\n\n/**\n * Framework-neutral description of a primitive control to render dynamically.\n *\n * The shape mirrors (structurally) the contract other ng-hub-ui libraries expose\n * for optional control hosting (e.g. `ng-hub-ui-paginable`'s table), so this\n * adapter can be wired into them without either package importing the other.\n */\nexport interface HubFormControlConfig {\n\tkind: 'input' | 'select';\n\tvalue: unknown;\n\ttype?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n\tcssClass?: string;\n\toptions?: ReadonlyArray<HubFormControlOption>;\n\tonValueChange: (value: unknown) => void;\n}\n\n/** Live handle to a control created by {@link hubFormControlAdapter}. */\nexport interface HubFormControlHandle {\n\t/** Pushes a new value into the control (external updates). */\n\tsetValue(value: unknown): void;\n\t/** Destroys the control and releases its resources. */\n\tdestroy(): void;\n}\n\n/** Adapter that renders primitive controls with the ng-hub-ui-forms components. */\nexport interface HubFormControlAdapter {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle;\n}\n\n/**\n * A control the adapter creates is embedded, not stacked.\n *\n * Field hosts carry `margin-bottom: var(--hub-field-stack-gap)` so that fields written one\n * under another in a form breathe. A control created *into another component's chrome* —\n * a table's search group, a paginator's row — is not in that list and never was: the gap\n * made the group taller than the field, so anything stretching beside it came out taller\n * too. A table's search button overshot its own field by exactly that margin.\n *\n * Zeroed on the host through the token the family already exposes, so nothing has to write\n * a rule that reaches into the control — and so every library that wires this adapter gets\n * it, rather than each one discovering it separately.\n */\nfunction markEmbedded(element: HTMLElement): void {\n\telement.style.setProperty('--hub-field-stack-gap', '0');\n}\n\n/**\n * Ready-made {@link HubFormControlAdapter} backed by `HubInputComponent` /\n * `HubSelectComponent`.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional form-controls\n * token, e.g. `provideHubPaginableFormControls(hubFormControlAdapter)`. The host\n * library keeps **zero hard dependency** on `ng-hub-ui-forms`; only an app that\n * opts in pulls these components.\n *\n * Requires `provideHubForms()` (or the default config) to be available in the\n * environment so the field components can resolve their configuration.\n */\n\nexport const hubFormControlAdapter: HubFormControlAdapter = {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle {\n\t\tif (config.kind === 'select') {\n\t\t\tconst ref = container.createComponent(HubSelectComponent);\n\t\t\tmarkEmbedded(ref.location.nativeElement as HTMLElement);\n\t\t\tref.setInput(\n\t\t\t\t'items',\n\t\t\t\t(config.options ?? []).map((option) => ({ ...option }))\n\t\t\t);\n\t\t\tref.setInput('bindLabel', 'label');\n\t\t\tref.setInput('bindValue', 'value');\n\t\t\tref.setInput('clearable', false);\n\t\t\tref.setInput('searchable', false);\n\t\t\tif (config.placeholder) {\n\t\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t\t}\n\t\t\tif (config.cssClass) {\n\t\t\t\tref.setInput('classlist', config.cssClass);\n\t\t\t}\n\t\t\tref.instance.writeValue(config.value);\n\t\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\t\tref.changeDetectorRef.detectChanges();\n\n\t\t\treturn {\n\t\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\t\tdestroy: () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tref.destroy();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst ref = container.createComponent(HubInputComponent);\n\t\tmarkEmbedded(ref.location.nativeElement as HTMLElement);\n\t\tref.setInput('type', config.type ?? 'text');\n\t\tif (config.placeholder) {\n\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t}\n\t\tif (config.cssClass) {\n\t\t\tref.setInput('classlist', config.cssClass);\n\t\t}\n\t\tref.instance.writeValue(config.value as never);\n\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\tref.changeDetectorRef.detectChanges();\n\n\t\treturn {\n\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\tdestroy: () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t};\n\t}\n};\n","/*\n * Public API Surface of ng-hub-ui-forms\n */\n\n// Shared base\nexport { HubFormControl } from './lib/shared/hub-form-control';\nexport { HubFieldControl } from './lib/shared/hub-field-control';\nexport { HubGroupControl } from './lib/shared/hub-group-control';\nexport type { HubGroupErrorTrigger } from './lib/shared/hub-group-control';\nexport { defaultInvalidFeedback } from './lib/shared/hub-error-display';\n\n// Configuration\nexport { HUB_FORMS_CONFIG, defaultHubFormsConfig, provideHubForms } from './lib/services/forms-config';\nexport type { HubFormsConfig } from './lib/services/forms-config';\nexport { HUB_FILE_UPLOADER, provideHubFileUploader } from './lib/services/file-uploader';\n\n// Components\nexport { HubInputComponent } from './lib/components/input/input.component';\nexport { HubOtpInputComponent } from './lib/components/otp/otp.component';\nexport type { HubOtpMode } from './lib/components/otp/otp.component';\nexport { HubTextareaComponent } from './lib/components/textarea/textarea.component';\nexport { HubSliderComponent } from './lib/components/slider/slider.component';\nexport type { HubSliderValue } from './lib/components/slider/slider.component';\nexport { HubSegmentedComponent } from './lib/components/segmented/segmented.component';\nexport type { HubSegmentedOption, HubSegmentedSize } from './lib/components/segmented/segmented.component';\nexport { HubFieldsetComponent } from './lib/components/fieldset/fieldset.component';\nexport { HubFormComponent } from './lib/components/form/form.component';\nexport { HubLegendComponent } from './lib/components/legend/legend.component';\nexport { HubSelectComponent } from './lib/select/select.component';\nexport { HubDatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport { HubTimepickerComponent } from './lib/components/timepicker/timepicker.component';\nexport { HubFileInputComponent } from './lib/components/file-input/file-input.component';\n\n// Select — dropdown customization passthrough (vendored ng-select template directives)\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\nexport {\n\tNgOptionTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgClearButtonTemplateDirective\n} from './lib/select/vendor/lib/ng-templates.directive';\n\n// Directives\nexport { HubFormTextDirective } from './lib/directives/form-text.directive';\nexport { HubValidationErrorDirective } from './lib/directives/validation-error.directive';\nexport { HubLegendDirective } from './lib/directives/legend.directive';\nexport { HubAutoresizeDirective } from './lib/directives/autoresize.directive';\nexport { HubInputPrefixDirective } from './lib/directives/input-prefix.directive';\nexport { HubInputSuffixDirective } from './lib/directives/input-suffix.directive';\nexport { HubPrependDirective } from './lib/directives/prepend.directive';\nexport { HubAppendDirective } from './lib/directives/append.directive';\nexport { HubSelectSuffixDirective } from './lib/directives/select-suffix.directive';\nexport { HubFileIconDirective } from './lib/directives/file-icon.directive';\nexport type { HubFileIconContext } from './lib/directives/file-icon.directive';\nexport { HubFilePreviewDirective } from './lib/directives/file-preview.directive';\nexport type { HubFilePreviewContext } from './lib/directives/file-preview.directive';\nexport { HubSegmentedOptionDirective } from './lib/directives/segmented-option.directive';\nexport type { HubSegmentedOptionContext } from './lib/directives/segmented-option.directive';\nexport { HubFileDropzoneNoticeDirective } from './lib/directives/file-dropzone-notice.directive';\n\n// Pipes\nexport { HubInvertColorPipe } from './lib/pipes/invert-color.pipe';\nexport { HubJoinButLastPipe } from './lib/pipes/join-but-last.pipe';\nexport { HubMapPipe } from './lib/pipes/map.pipe';\nexport { HubSafeUrlPipe } from './lib/pipes/safe-url.pipe';\nexport { HubSnakeUpperPipe } from './lib/pipes/snake-upper.pipe';\nexport { HubUcfirstPipe } from './lib/pipes/ucfirst.pipe';\n\n// Validators\nexport { hubAreEqual } from './lib/validators/are-equal.validator';\nexport { hubAcceptedFiles } from './lib/validators/accepted-files.validator';\nexport { hubMaxFileSize } from './lib/validators/max-file-size.validator';\nexport { hubMinFileSize } from './lib/validators/min-file-size.validator';\nexport { hubMaxTotalSize } from './lib/validators/max-total-size.validator';\nexport { hubMaxFiles } from './lib/validators/max-files.validator';\nexport { hubMinFiles } from './lib/validators/min-files.validator';\n\n// Interfaces & types\nexport type { FormTextType, HubLabelType } from './lib/interfaces/common.interface';\nexport { FormTextTypes, HubLabelTypes } from './lib/interfaces/common.interface';\nexport type { HubInputFormat, HubPasswordLabels, HubPasswordStrengthScore } from './lib/interfaces/input.interface';\nexport { HubInputFormats, defaultHubPasswordLabels } from './lib/interfaces/input.interface';\nexport type { HubSelectFormat } from './lib/interfaces/select.interface';\nexport { HubSelectFormats } from './lib/interfaces/select.interface';\nexport type {\n\tHubDatepickerMode,\n\tHubDatepickerGranularity,\n\tHubDatepickerValueFormat,\n\tHubDateRange,\n\tHubDateValue,\n\tHubDatepickerLabels,\n\tHubDatepickerConfig\n} from './lib/interfaces/datepicker.interface';\nexport { defaultHubDatepickerConfig, defaultHubDatepickerLabels } from './lib/interfaces/datepicker.interface';\nexport type {\n\tHubFileConstraints,\n\tHubFileInputLabels,\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from './lib/interfaces/file-input.interface';\nexport { defaultHubFileInputLabels } from './lib/interfaces/file-input.interface';\nexport type { HubFileUploader, HubFileUploadEvent } from './lib/interfaces/file-uploader.interface';\n\n// Utilities\nexport { formatFileSize } from './lib/utils/file-size';\nexport { matchesAccept } from './lib/utils/file-accept';\nexport { fileKey } from './lib/utils/file-key';\nexport { toFileArray } from './lib/utils/file-value';\nexport type { HubFileValue } from './lib/utils/file-value';\nexport {\n\tareEqual,\n\tcamelToSnakeUpper,\n\tcontrolHasMinOrMaxValidator,\n\tget,\n\tgetActiveElement,\n\tgetMinOrMaxValueFromValidator,\n\tisDefined,\n\tisString,\n\tjoinButLast,\n\trunInZone,\n\tuuid\n} from './lib/utils/utils';\nexport { applyMask, isMaskActive } from './lib/utils/mask';\nexport type { HubMaskResult } from './lib/utils/mask';\nexport { scorePasswordStrength } from './lib/utils/password-strength';\n\n// Integrations — agnostic adapter for hosting form controls in other libraries\nexport { hubFormControlAdapter } from './lib/integrations/form-control-adapter';\nexport type {\n\tHubFormControlAdapter,\n\tHubFormControlConfig,\n\tHubFormControlHandle,\n\tHubFormControlOption\n} from './lib/integrations/form-control-adapter';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isDefined","searchHelper.stripSpecialChars","tap","i1"],"mappings":"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G;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAA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"}