ng-hub-ui-forms 22.35.2 → 22.36.0
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/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/interfaces/common.interface.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/utils/utils.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/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/legend/legend.component.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/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-templates.directive.ts","../../../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-kind.ts","../../../projects/forms/src/lib/utils/current-file.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 { 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';\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. An inline\n\t\t// `required` alongside a reactive control is silently overridden by the\n\t\t// validators — documented behaviour, said in the README rather than written\n\t\t// into the console of an application this library does not own.\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\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","/**\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 *\n * `visually-hidden` is the one that is not a placement: the label is rendered and stays\n * bound to the control, so it is announced, but it is clipped out of the page. It exists\n * because the alternative a design without room for a label leaves is a control with no\n * accessible name at all — a toolbar search box, a compact grid cell — and a placeholder\n * is not a name.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal' | 'visually-hidden';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal',\n\tVisuallyHidden = 'visually-hidden'\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/**\n * How the held files are previewed: not at all, as a list below the dropzone, as tiles below it\n * (`grid`), or as tiles inside the field (`inline`) — one tile filling the field, the shape a logo,\n * an avatar or a single document takes, or with `multiple` a grid ending in an add tile. Only\n * `inline` shows the files a record already has, through `currentFile`.\n */\nexport type HubFilePreview = 'none' | 'list' | 'grid' | 'inline';\n\n/**\n * A file the record already has on the server, shown by `preview=\"inline\"` while nothing is picked.\n *\n * Only `url` is required. `name` and `type` are for the cases where the URL does not reveal them —\n * `/api/contracts/42/file` says nothing about being a PDF called `contract.pdf`. When they are\n * missing, the name is taken from the URL's last segment if it carries an extension, and the MIME\n * type from a `data:` URL.\n */\nexport interface HubCurrentFile {\n\t/** Where the file lives: a URL, a `data:` URL or an object URL. Rendered as the image when it is one. */\n\turl: string;\n\t/** The file name shown in the field and read out by assistive technology. */\n\tname?: string | null;\n\t/** The MIME type, e.g. `application/pdf`. Picks the icon when the file is not an image. */\n\ttype?: string | null;\n}\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/**\n\t * Accessible name of the button that removes the file shown by `preview=\"inline\"`. It names the\n\t * file because the button sits over it, and \"Remove file\" alone would not say which one.\n\t */\n\tremoveFile: (name: string) => string;\n\t/** Accessible name of the control that opens a tile's file — enlarged, or in a new tab. */\n\topen: (name: string) => string;\n\t/** Visible text of the pill that replaces one tile's file. */\n\treplace: string;\n\t/** Accessible name of that pill, naming the file it replaces. */\n\treplaceFile: (name: string) => string;\n\t/** Accessible name of the button that closes the enlarged image. */\n\tclose: string;\n\t/** The file counter shown with `maxFiles`: how many files the field holds out of how many it takes. */\n\tcount: (count: number, max: number) => string;\n\t/** Stand-in name for a stored file whose name neither `currentFile` nor its URL gives. */\n\tcurrentFile: 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\tremoveFile: (name: string) => `Remove ${name}`,\n\topen: (name: string) => `Open ${name}`,\n\treplace: 'Replace',\n\treplaceFile: (name: string) => `Replace ${name}`,\n\tclose: 'Close',\n\tcount: (count: number, max: number) => `${count} of ${max} files`,\n\tcurrentFile: 'Current 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/**\n * A preset colour offered by the `color` format of `<hub-input>` through its `swatches` input.\n *\n * `value` is what the control receives, verbatim, when the swatch is picked — keep it in the\n * format the form stores. `label` is the name a screen reader announces and the tooltip shows;\n * without it the value itself is announced, which is fine for `#ff0000` and useless for a brand\n * palette, so name the swatches whenever the colour has a name.\n */\nexport interface HubColorSwatch {\n\t/** The colour written to the control verbatim: any CSS colour the parser reads (`#7c3aed`, `rgb(…)`, `hsl(…)`, `oklch(…)`, a keyword). */\n\tvalue: string;\n\t/** Readable name of the colour; falls back to `value`. */\n\tlabel?: string;\n}\n\n/** A swatch as `swatches` accepts it: a bare colour string, or a {@link HubColorSwatch} to give it a name. */\nexport type HubColorSwatchInput = string | HubColorSwatch;\n\n/**\n * Application-wide settings of the `color` format of `<hub-input>`.\n *\n * Set them through {@link provideHubForms}; a field's own `swatches` and `customColorLabel` inputs\n * still win.\n */\nexport interface HubColorConfig {\n\t/**\n\t * The palette a colour field draws when it is given no `swatches` of its own; empty by default,\n\t * which leaves those fields on the native picker. Concrete colours only: whatever is picked is\n\t * written to the form, so it has to be a value that can be stored — never a `var(--hub-…)`,\n\t * which means nothing outside the page that set it. {@link HUB_COLOR_PALETTES} has some ready.\n\t */\n\tswatches: ReadonlyArray<HubColorSwatchInput>;\n\t/** Accessible name of the last swatch, the one that opens the native picker for a colour not in the list. */\n\tcustomColorLabel: string;\n\t/**\n\t * Accessible name of the colour square of the classic picker (no palette), the button that opens\n\t * the native picker. The field's label already names the hex text beside it.\n\t */\n\tpickerLabel: string;\n}\n\n/** Name of a palette in {@link HUB_COLOR_PALETTES}. */\nexport type HubColorPaletteName = 'tailwind' | 'material' | 'pastel' | 'neutral' | 'status';\n\n/**\n * Freezes a palette and each of its swatches. The palettes are shared by every consumer of the\n * library, so one app pushing to or relabelling a list must not repaint it for the rest.\n *\n * @param swatches - The palette's swatches, in display order.\n * @returns The same swatches, frozen.\n */\nfunction freezePalette(swatches: HubColorSwatch[]): ReadonlyArray<Readonly<HubColorSwatch>> {\n\treturn Object.freeze(swatches.map((swatch) => Object.freeze(swatch)));\n}\n\n/**\n * Ready-made colour lists for the `swatches` input of `<hub-input type=\"color\">`, or for the\n * application palette in `provideHubForms({ color: { swatches } })`.\n *\n * Every value is a lowercase sRGB hex, so the stored value opens in the native picker unchanged and\n * the grid can work out which ink reads on it. Every swatch carries an English name for screen\n * readers; map the list to relabel it in another language.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"status\" type=\"color\" [swatches]=\"palettes.status\" [allowCustomColor]=\"false\" />\n * ```\n */\nexport const HUB_COLOR_PALETTES: Readonly<Record<HubColorPaletteName, ReadonlyArray<Readonly<HubColorSwatch>>>> = Object.freeze(\n\t{\n\t\t/**\n\t\t * Source: Tailwind CSS v3, the 500 step for sixteen hues plus slate. That step sits mid-way in\n\t\t * lightness on every ramp, so no colour shouts over the others; `rose` is left out as too close\n\t\t * to red and pink to tell apart as a swatch.\n\t\t */\n\t\ttailwind: freezePalette([\n\t\t\t{ value: '#ef4444', label: 'Red' },\n\t\t\t{ value: '#f97316', label: 'Orange' },\n\t\t\t{ value: '#f59e0b', label: 'Amber' },\n\t\t\t{ value: '#eab308', label: 'Yellow' },\n\t\t\t{ value: '#84cc16', label: 'Lime' },\n\t\t\t{ value: '#22c55e', label: 'Green' },\n\t\t\t{ value: '#10b981', label: 'Emerald' },\n\t\t\t{ value: '#14b8a6', label: 'Teal' },\n\t\t\t{ value: '#06b6d4', label: 'Cyan' },\n\t\t\t{ value: '#0ea5e9', label: 'Sky' },\n\t\t\t{ value: '#3b82f6', label: 'Blue' },\n\t\t\t{ value: '#6366f1', label: 'Indigo' },\n\t\t\t{ value: '#8b5cf6', label: 'Violet' },\n\t\t\t{ value: '#a855f7', label: 'Purple' },\n\t\t\t{ value: '#d946ef', label: 'Fuchsia' },\n\t\t\t{ value: '#ec4899', label: 'Pink' },\n\t\t\t{ value: '#64748b', label: 'Slate' }\n\t\t]),\n\t\t/** Source: Material Design 2014 colour system, the 500 tone of each of its nineteen hues. */\n\t\tmaterial: freezePalette([\n\t\t\t{ value: '#f44336', label: 'Red' },\n\t\t\t{ value: '#e91e63', label: 'Pink' },\n\t\t\t{ value: '#9c27b0', label: 'Purple' },\n\t\t\t{ value: '#673ab7', label: 'Deep purple' },\n\t\t\t{ value: '#3f51b5', label: 'Indigo' },\n\t\t\t{ value: '#2196f3', label: 'Blue' },\n\t\t\t{ value: '#03a9f4', label: 'Light blue' },\n\t\t\t{ value: '#00bcd4', label: 'Cyan' },\n\t\t\t{ value: '#009688', label: 'Teal' },\n\t\t\t{ value: '#4caf50', label: 'Green' },\n\t\t\t{ value: '#8bc34a', label: 'Light green' },\n\t\t\t{ value: '#cddc39', label: 'Lime' },\n\t\t\t{ value: '#ffeb3b', label: 'Yellow' },\n\t\t\t{ value: '#ffc107', label: 'Amber' },\n\t\t\t{ value: '#ff9800', label: 'Orange' },\n\t\t\t{ value: '#ff5722', label: 'Deep orange' },\n\t\t\t{ value: '#795548', label: 'Brown' },\n\t\t\t{ value: '#9e9e9e', label: 'Grey' },\n\t\t\t{ value: '#607d8b', label: 'Blue grey' }\n\t\t]),\n\t\t/**\n\t\t * Source: Tailwind CSS v3, the 200 step of the same hues as `tailwind`. Light enough that the\n\t\t * check mark is drawn dark on every one.\n\t\t */\n\t\tpastel: freezePalette([\n\t\t\t{ value: '#fecaca', label: 'Pastel red' },\n\t\t\t{ value: '#fed7aa', label: 'Pastel orange' },\n\t\t\t{ value: '#fde68a', label: 'Pastel amber' },\n\t\t\t{ value: '#fef08a', label: 'Pastel yellow' },\n\t\t\t{ value: '#d9f99d', label: 'Pastel lime' },\n\t\t\t{ value: '#bbf7d0', label: 'Pastel green' },\n\t\t\t{ value: '#a7f3d0', label: 'Pastel emerald' },\n\t\t\t{ value: '#99f6e4', label: 'Pastel teal' },\n\t\t\t{ value: '#a5f3fc', label: 'Pastel cyan' },\n\t\t\t{ value: '#bae6fd', label: 'Pastel sky' },\n\t\t\t{ value: '#bfdbfe', label: 'Pastel blue' },\n\t\t\t{ value: '#c7d2fe', label: 'Pastel indigo' },\n\t\t\t{ value: '#ddd6fe', label: 'Pastel violet' },\n\t\t\t{ value: '#e9d5ff', label: 'Pastel purple' },\n\t\t\t{ value: '#f5d0fe', label: 'Pastel fuchsia' },\n\t\t\t{ value: '#fbcfe8', label: 'Pastel pink' },\n\t\t\t{ value: '#e2e8f0', label: 'Pastel slate' }\n\t\t]),\n\t\t/** Source: Tailwind CSS v3 `neutral` ramp, 50 to 950: a pure grey from near-white to near-black. */\n\t\tneutral: freezePalette([\n\t\t\t{ value: '#fafafa', label: 'Grey 50' },\n\t\t\t{ value: '#f5f5f5', label: 'Grey 100' },\n\t\t\t{ value: '#e5e5e5', label: 'Grey 200' },\n\t\t\t{ value: '#d4d4d4', label: 'Grey 300' },\n\t\t\t{ value: '#a3a3a3', label: 'Grey 400' },\n\t\t\t{ value: '#737373', label: 'Grey 500' },\n\t\t\t{ value: '#525252', label: 'Grey 600' },\n\t\t\t{ value: '#404040', label: 'Grey 700' },\n\t\t\t{ value: '#262626', label: 'Grey 800' },\n\t\t\t{ value: '#171717', label: 'Grey 900' },\n\t\t\t{ value: '#0a0a0a', label: 'Grey 950' }\n\t\t]),\n\t\t/**\n\t\t * Source: Tailwind CSS v3 — green, red and blue at 600, amber and slate at 500. The darker\n\t\t * step keeps the three alarm colours apart from the pale amber; amber-600 would read orange.\n\t\t */\n\t\tstatus: freezePalette([\n\t\t\t{ value: '#16a34a', label: 'Success' },\n\t\t\t{ value: '#f59e0b', label: 'Warning' },\n\t\t\t{ value: '#dc2626', label: 'Danger' },\n\t\t\t{ value: '#2563eb', label: 'Info' },\n\t\t\t{ value: '#64748b', label: 'Neutral' }\n\t\t])\n\t}\n);\n\n/**\n * Built-in colour settings. No application palette: a colour field without `swatches` of its own\n * stays the native picker, as it always was. Set one with\n * `provideHubForms({ color: { swatches: HUB_COLOR_PALETTES.tailwind } })`.\n */\nexport const defaultHubColorConfig: HubColorConfig = {\n\tswatches: [],\n\tcustomColorLabel: 'Custom color',\n\tpickerLabel: 'Choose color'\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 {\n\tdefaultHubColorConfig,\n\tdefaultHubPasswordLabels,\n\tHubColorConfig,\n\tHubPasswordLabels\n} 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\t/**\n\t * Global colour settings: an application palette for colour fields without `swatches` of their\n\t * own (none by default, so they stay the classic hex field), and the accessible names of the\n\t * grid's custom-colour swatch and of the classic field's colour square.\n\t */\n\tcolor: HubColorConfig;\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\tcolor: defaultHubColorConfig\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\tconst color: HubColorConfig = {\n\t\t...defaultHubFormsConfig.color,\n\t\t...(config?.color as Partial<HubColorConfig> | 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, color } 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 { 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 the global document when there\n * is one; on a server render there is not, and nothing has focus there anyway.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot | null = globalThis.document ?? null): 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 {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\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 { FormTextType, FormTextTypes } from '../interfaces/common.interface';\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/** Helper text for the field. Where it is shown is {@link formTextType}'s business. */\n\treadonly formText = input<string>('');\n\n\t/**\n\t * Where the helper text is shown: under the control (`bottom`, the default) or behind\n\t * a question mark at the end of the label row (`tooltip`).\n\t *\n\t * The rule the product settled on: one sentence goes below, where it is read without\n\t * being asked for; anything longer goes in the tooltip, because a paragraph under\n\t * every field turns a form into a document and pushes the next field off the screen.\n\t */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\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\t/**\n\t * Whether the helper text is carried by the label-row trigger instead of the block\n\t * below the control.\n\t *\n\t * Gated on `formText()` having content, and that is the whole reason a projected\n\t * `hubFormText` template still renders below in tooltip mode: the tooltip takes a\n\t * string, so asking it to carry markup would drop the markup silently. A field with\n\t * a template keeps its helper text where the template can actually be shown.\n\t */\n\tprotected readonly showsFormTextTooltip = computed(\n\t\t() => this.formTextType() === FormTextTypes.Tooltip && !!this.formText()\n\t);\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","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 opens straight into the dropdown 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 opens straight into the dropdown engine, and the input\n * 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\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tlinkedSignal,\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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tdefaultHubColorConfig,\n\tHubColorSwatchInput,\n\tHubInputFormat,\n\tHubInputFormats,\n\tHubPasswordStrengthScore\n} 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';\nimport { HubTooltipDirective, parseColor, readableOn, toHex } from 'ng-hub-ui-utils';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/** A swatch as the template draws it: normalized once, so the view never re-derives it per check. */\ninterface HubResolvedSwatch {\n\t/** The colour written to the control, verbatim. */\n\tvalue: string;\n\t/** Accessible name: the given label, or the value. */\n\tlabel: string;\n\t/** Comparison key, so `#7C3AED`, `#7c3aed` and `rgb(124 58 237)` count as the same colour. */\n\tkey: string;\n\t/** Colour of the selection mark on this swatch (`#000000` or `#ffffff`). */\n\tink: string;\n}\n\n/** Hex colour as a person types it: optional `#`, then 3 or 6 digits, any case. */\nconst HEX_TEXT = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/**\n * Normalises typed hex to lowercase `#rrggbb`, the only notation `<input type=\"color\">` accepts,\n * so what the text field writes to the form is also what the picker can open on.\n *\n * @param text - Text from the hex field.\n * @returns The normalised colour, or `null` when the text is not a hex colour (yet).\n */\nfunction normalizeHexText(text: string): string | null {\n\tconst digits = HEX_TEXT.exec(text.trim())?.[1];\n\n\tif (!digits) {\n\t\treturn null;\n\t}\n\n\tconst full = digits.length === 3 ? [...digits].map((digit) => digit + digit).join('') : digits;\n\treturn `#${full.toLowerCase()}`;\n}\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`. The `color` format is a hex text field with the colour in a square at its\n * start that opens the browser's native picker; given a palette (per field, or for the whole\n * application) it becomes a radio group of colour swatches the size of a field, ending in a cell that\n * opens the native picker. 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, HubTooltipDirective],\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 _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/**\n\t * Render the value as plain text, with no field styling around it.\n\t *\n\t * For the value that belongs in a form but is not the reader's to change: a figure\n\t * the server settled, a field a plan has locked, the whole of a record shown for\n\t * consultation. It stays a real `<input>` — so the label keeps pointing at a control\n\t * and the text stays selectable — and only loses the box, which on something that\n\t * refuses input was a promise it could not keep.\n\t *\n\t * Implies `readonly`: a field with no box that still accepted typing would be an\n\t * invisible input.\n\t */\n\treadonly plaintext = input(false, { transform: booleanAttribute });\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/**\n\t * Mixed state of a `checkbox`: neither on nor off, the answer a \"select all\"\n\t * gives while only some of its children are selected.\n\t *\n\t * It is two-way because the reader resolves it: clicking a mixed checkbox picks\n\t * a side, so the model clears itself and the caller hears about it. The `switch`\n\t * format ignores it — a switch is on or off, and ARIA gives it no third state.\n\t */\n\treadonly indeterminate = model(false);\n\n\t/** Mixed state as the native checkbox should actually receive it. */\n\tprotected readonly isIndeterminate = computed<boolean>(\n\t\t() => this.indeterminate() && this.type() === this._inputFormats.Checkbox\n\t);\n\n\t/**\n\t * Read-only as the control actually behaves, which is what the template binds to.\n\t *\n\t * `plaintext` implies it, so the two never have to be passed together and cannot be\n\t * passed in disagreement.\n\t */\n\tprotected readonly _isReadonly = computed<boolean>(() => this.readonly() || this.plaintext());\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._isReadonly() && 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/**\n\t * Colours offered by the `color` format. With any, the field is a grid of swatches the size of a\n\t * field instead of the native picker; `HUB_COLOR_PALETTES` has some ready.\n\t *\n\t * Any CSS colour the parser reads (`#7c3aed`, `rgb(…)`, `hsl(…)`, `oklch(…)`, a keyword), bare or\n\t * as `{ value, label }` to give it a name a screen reader can say. The control receives the string\n\t * exactly as given. An entry that is not a colour is dropped, with a warning in development.\n\t * `null` — the default — takes the application palette from `provideHubForms({ color })`, and\n\t * with none set, the native picker. `[]` asks for the native picker even under an app palette.\n\t */\n\treadonly swatches = input<ReadonlyArray<HubColorSwatchInput> | null>(null);\n\n\t/**\n\t * Whether the swatch grid ends with a cell that opens the native picker, for a colour that is\n\t * not in the list.\n\t *\n\t * On by default because the `color` format has always accepted any colour: a palette should\n\t * shorten the common case, not quietly narrow what the field can hold — and a value saved\n\t * before the palette changed needs somewhere to show as selected. Turn it off for a closed\n\t * palette (label colours, brand colours), where only the listed values are valid.\n\t */\n\treadonly allowCustomColor = input(true, { transform: booleanAttribute });\n\n\t/** Accessible name of the custom-colour swatch. Falls back to the global `color.customColorLabel`. */\n\treadonly customColorLabel = input<string>('');\n\n\t/** Global colour settings; guarded because a hand-provided `HUB_FORMS_CONFIG` may predate them. */\n\treadonly #colorConfig = inject(HUB_FORMS_CONFIG).color ?? defaultHubColorConfig;\n\n\t/**\n\t * Whether the colour format draws the swatch grid rather than the native picker: only when a\n\t * palette is in force and at least one of its entries is a colour. A grid of nothing but the\n\t * custom cell would be the native picker with extra steps, so an empty or all-invalid list keeps\n\t * the classic control.\n\t */\n\tprotected readonly showsSwatches = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Color && this._swatches().length > 0\n\t);\n\n\t/**\n\t * The palette in force, normalized for the template. Entries the colour parser cannot read are\n\t * dropped here: a swatch has to be a colour the form can store and the mark's ink can be worked\n\t * out for, and a `var(--brand)` is neither once it leaves the page that defined it.\n\t */\n\tprotected readonly _swatches = computed<HubResolvedSwatch[]>(() => {\n\t\tconst resolved: HubResolvedSwatch[] = [];\n\n\t\tfor (const swatch of this.swatches() ?? this.#colorConfig.swatches) {\n\t\t\tconst value = typeof swatch === 'string' ? swatch : swatch?.value;\n\n\t\t\tif (typeof value !== 'string' || !parseColor(value)) {\n\t\t\t\tif (isDevMode()) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[ng-hub-ui-forms] hub-input: ignoring swatch ${JSON.stringify(value ?? swatch)}, which is not a CSS colour.`\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 label = (typeof swatch === 'string' ? '' : swatch.label) || value;\n\t\t\tresolved.push({ value, label, key: this.#colorKey(value), ink: readableOn(value) });\n\t\t}\n\n\t\treturn resolved;\n\t});\n\n\t/**\n\t * Index of the checked cell: a preset, the custom cell (`swatches.length`) when the value is any\n\t * other colour and custom colours are allowed, or `-1` when nothing is checked — which includes a\n\t * value that is not a colour at all, since no cell could honestly show it.\n\t */\n\tprotected readonly checkedSwatch = computed<number>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !parseColor(value)) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst key = this.#colorKey(value);\n\t\tconst index = this._swatches().findIndex((swatch) => swatch.key === key);\n\n\t\tif (index >= 0) {\n\t\t\treturn index;\n\t\t}\n\n\t\treturn this.allowCustomColor() ? this._swatches().length : -1;\n\t});\n\n\t/** Whether the custom cell holds the current value. */\n\tprotected readonly customChecked = computed<boolean>(\n\t\t() => this.allowCustomColor() && this.checkedSwatch() === this._swatches().length\n\t);\n\n\t/** The current value while it is a custom colour, for the custom cell's fill; empty otherwise. */\n\tprotected readonly customValue = computed<string>(() => (this.customChecked() ? String(this._value()) : ''));\n\n\t/** Ink of the selection mark on the custom cell, which only has a mark while it holds a colour. */\n\tprotected readonly customInk = computed<string | null>(() => (this.customValue() ? readableOn(this.customValue()) : null));\n\n\t/** Accessible name of the custom cell, carrying the colour once it holds one. */\n\tprotected readonly customSwatchName = computed<string>(() => {\n\t\tconst label = this.customColorLabel() || this.#colorConfig.customColorLabel;\n\t\treturn this.customValue() ? `${label} ${this.customValue()}` : label;\n\t});\n\n\t/** The native picker only speaks `#rrggbb`; anything it cannot show opens it on black. */\n\tprotected readonly customHex = computed<string>(() => (toHex(this.customValue()) ?? '#000000').slice(0, 7));\n\n\t/** The cell Tab lands on — the checked one, or the first when none is (roving tabindex). */\n\tprotected readonly tabbableSwatch = computed<number>(() => Math.max(this.checkedSwatch(), 0));\n\n\t/** Whether the swatches wrapped onto more than one row, which drops the field box. */\n\tprotected readonly swatchesWrapped = signal(false);\n\n\t/** The swatch radio group, observed for wrapping. */\n\tprotected readonly swatchList = viewChild<ElementRef<HTMLElement>>('swatchList');\n\n\t/** The native picker behind the custom cell. */\n\tprotected readonly customColorInput = viewChild<ElementRef<HTMLInputElement>>('customColorInput');\n\n\t/** The native picker under the square of the classic colour field. */\n\tprotected readonly classicColorInput = viewChild<ElementRef<HTMLInputElement>>('classicColorInput');\n\n\t/**\n\t * Accessible name of the classic field's colour square. Read with a fallback because a\n\t * hand-provided colour config may predate it.\n\t */\n\tprotected readonly pickerLabel = this.#colorConfig.pickerLabel ?? defaultHubColorConfig.pickerLabel;\n\n\t/**\n\t * The value as lowercase `#rrggbb`, for the classic field's square, text and native picker; empty\n\t * when the value is not a colour. Values in other notations (`rgb(…)`, a keyword) are converted,\n\t * since the native picker only speaks hex.\n\t */\n\tprotected readonly classicHex = computed<string>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !value) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn normalizeHexText(value) ?? toHex(value)?.slice(0, 7).toLowerCase() ?? '';\n\t});\n\n\t/**\n\t * What the classic field's hex text shows. It follows the value, except while the text already\n\t * spells that same colour: typing `#abc` writes `#aabbcc` to the form, and rewriting the text\n\t * then would break the next keystroke. Blur settles it back to the normalised value.\n\t */\n\tprotected readonly colorText = linkedSignal<string, string>({\n\t\tsource: this.classicHex,\n\t\tcomputation: (hex, previous) => (previous && normalizeHexText(previous.value) === hex ? previous.value : hex)\n\t});\n\n\t/** Watches the swatch list's size; created lazily, only in a browser that has one. */\n\t#swatchObserver: ResizeObserver | null = null;\n\n\t/** The list element currently observed, so a re-rendered list is swapped in rather than piled up. */\n\t#observedSwatchList: HTMLElement | null = null;\n\n\t/**\n\t * Keeps the wrap state honest. Render effects never run on the server, so this is browser-only by\n\t * construction; it re-runs when the palette changes and when the list element comes or goes (the\n\t * format or the palette toggled), and the observer covers every resize in between.\n\t */\n\tprivate readonly _swatchWrapWatch = afterRenderEffect(() => {\n\t\tthis._swatches();\n\t\tthis.allowCustomColor();\n\t\tthis.#watchSwatchWrap(this.swatchList()?.nativeElement ?? null);\n\t});\n\n\t/** Disconnects the swatch observer with the component. */\n\tprivate readonly _swatchCleanup = inject(DestroyRef).onDestroy(() => this.#swatchObserver?.disconnect());\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}\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\t// A click on a mixed checkbox is the reader picking a side, and the\n\t\t\t// browser has already dropped the native mixed state. Keeping the input\n\t\t\t// true here would fight it back on the next render.\n\t\t\tif (this.indeterminate()) {\n\t\t\t\tthis.indeterminate.set(false);\n\t\t\t}\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/**\n\t * Picks a swatch cell: a preset writes its value, the custom cell opens the native picker.\n\t *\n\t * @param index - Cell index; `swatches.length` is the custom cell.\n\t */\n\tprotected activateSwatch(index: number): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst swatch = this._swatches()[index];\n\n\t\tif (swatch) {\n\t\t\tthis.setValue(swatch.value);\n\t\t} else if (this.allowCustomColor()) {\n\t\t\tthis.#openPicker(this.customColorInput()?.nativeElement);\n\t\t}\n\t}\n\n\t/** Opens the native picker from the classic field's square, unless the field is locked. */\n\tprotected openClassicPicker(): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#openPicker(this.classicColorInput()?.nativeElement);\n\t}\n\n\t/**\n\t * Takes a keystroke in the classic field's hex text. A valid colour reaches the form at once,\n\t * normalised; anything else stays in the text only, until blur puts the last valid value back.\n\t *\n\t * @param event - The text field's `input` event.\n\t */\n\tprotected typeColorText(event: Event): void {\n\t\tconst text = (event.target as HTMLInputElement).value;\n\t\tconst hex = normalizeHexText(text);\n\n\t\tthis.colorText.set(text);\n\n\t\tif (hex && hex !== this._value()) {\n\t\t\tthis.setValue(hex);\n\t\t}\n\t}\n\n\t/**\n\t * Settles the classic field's hex text on blur: back to the value in normalised form, which drops\n\t * a half-typed or invalid entry and spells a short one out in full.\n\t *\n\t * @param event - The text field's `blur` event.\n\t */\n\tprotected commitColorText(event: FocusEvent): void {\n\t\tthis.colorText.set(this.classicHex());\n\t\tthis.handleBlur(event);\n\t}\n\n\t/**\n\t * Radio-group keyboard model: arrows move and check, Home and End jump to the ends, Space checks.\n\t *\n\t * Landing on the custom cell only moves focus — opening a dialog because somebody arrowed past it\n\t * would trap them in it. Space or Enter opens it; Enter does nothing on a preset, as on any radio.\n\t * Left and Right follow the reading direction, so under RTL Left is the next cell.\n\t *\n\t * @param event - The keydown on a cell.\n\t * @param index - Index of that cell; `swatches.length` is the custom cell.\n\t */\n\tprotected handleSwatchKeydown(event: KeyboardEvent, index: number): void {\n\t\tconst count = this._swatches().length + (this.allowCustomColor() ? 1 : 0);\n\t\tconst isCustom = index === this._swatches().length;\n\t\tconst rtl = getComputedStyle(event.currentTarget as Element).direction === 'rtl';\n\t\tlet target: number;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = index + 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = index - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\ttarget = rtl ? index - 1 : index + 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\ttarget = rtl ? index + 1 : index - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = 0;\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = count - 1;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase 'Enter':\n\t\t\t\tif (event.key === ' ' || isCustom) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.activateSwatch(index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\ttarget = (target + count) % count;\n\t\tthis.#swatchCells()[target]?.focus();\n\n\t\tif (target < this._swatches().length) {\n\t\t\tthis.activateSwatch(target);\n\t\t}\n\t}\n\n\t/**\n\t * Writes the colour chosen in a native picker: the one behind the grid's custom cell, or the one\n\t * under the classic field's square.\n\t *\n\t * @param event - The picker's `input` event, which fires live while the colour is dragged.\n\t */\n\tprotected pickNativeColor(event: Event): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setValue((event.target as HTMLInputElement).value);\n\t}\n\n\t/**\n\t * Native validation for the swatch grid, used only without a reactive control. The grid is a\n\t * `div`, which has no `validity` to read, so `required` is the one constraint worth checking.\n\t */\n\tprotected override updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (!this.showsSwatches()) {\n\t\t\tsuper.updateNativeErrors(target);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this._value();\n\t\tthis._nativeErrors.set(this.required() && (value == null || value === '') ? { required: true } : null);\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 * 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 * Opens a native colour picker from the element standing in for it. `showPicker()` is what lets a\n\t * press on another element open it; `click()` covers browsers without it, or refusing it here.\n\t *\n\t * @param native - The hidden `<input type=\"color\">` to open, if rendered.\n\t */\n\t#openPicker(native: HTMLInputElement | undefined): void {\n\t\tif (!native) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof native.showPicker === 'function') {\n\t\t\t\tnative.showPicker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Refused (a cross-origin frame, say): the click below still opens it.\n\t\t}\n\n\t\tnative.click();\n\t}\n\n\t/** The swatch cells in DOM order, the custom cell last. */\n\t#swatchCells(): HTMLElement[] {\n\t\treturn Array.from(this.swatchList()?.nativeElement.querySelectorAll<HTMLElement>('.hub-input__swatch') ?? []);\n\t}\n\n\t/**\n\t * Points the observer at the current list (none when the grid is not rendered) and measures.\n\t *\n\t * @param list - The rendered swatch list, or `null`.\n\t */\n\t#watchSwatchWrap(list: HTMLElement | null): void {\n\t\tif (list !== this.#observedSwatchList) {\n\t\t\tthis.#swatchObserver?.disconnect();\n\t\t\tthis.#observedSwatchList = list;\n\n\t\t\tif (list && typeof ResizeObserver !== 'undefined') {\n\t\t\t\tthis.#swatchObserver ??= new ResizeObserver(() => this.#measureSwatchWrap());\n\t\t\t\tthis.#swatchObserver.observe(list);\n\t\t\t}\n\t\t}\n\n\t\tthis.#measureSwatchWrap();\n\t}\n\n\t/**\n\t * Wrapped when the last cell starts lower than the first. It answers the same question as comparing\n\t * the content height with one row, without computing a row height that zoom and sub-pixel rounding\n\t * would blur. The box keeps its border width in both states, so dropping the chrome never gives the\n\t * cells more room and cannot flip the answer back on the next observation.\n\t */\n\t#measureSwatchWrap(): void {\n\t\tconst cells = this.#observedSwatchList ? this.#swatchCells() : [];\n\t\tthis.swatchesWrapped.set(cells.length > 1 && cells[cells.length - 1].offsetTop > cells[0].offsetTop);\n\t}\n\n\t/**\n\t * Comparison key of a colour, so `#7C3AED`, `#7c3aed` and `rgb(124 58 237)` are the same swatch:\n\t * its hex form, or the trimmed lowercase text for the one kind of value the parser cannot read — a\n\t * form value that is not a colour (swatches themselves are validated before they get here).\n\t *\n\t * @param value - A CSS colour string.\n\t * @returns The key to compare swatches with.\n\t */\n\t#colorKey(value: string): string {\n\t\treturn toHex(value) ?? value.trim().toLowerCase();\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() && !plaintext()\"\n\t[class.hub-field--plaintext]=\"plaintext()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t@if (showsFormTextTooltip()) {\n\t\t\t<!--\n\t\t\t\tThe mark has to sit OUTSIDE the check's `<label>`, which here wraps the control\n\t\t\t\titself: nested in it, activating the mark would toggle the switch — and a switch\n\t\t\t\tcarrying a two-sentence warning is exactly the one that must not flip because\n\t\t\t\tsomebody asked what it does.\n\t\t\t-->\n\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubCheckTpl\" />\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t></button>\n\t\t\t</div>\n\t\t} @else {\n\t\t\t<ng-container [ngTemplateOutlet]=\"hubCheckTpl\" />\n\t\t}\n\n\t\t<ng-template #hubCheckTpl>\n\t\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t\t[indeterminate]=\"isIndeterminate()\"\n\t\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t/>\n\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"hub-input__check-label\"\n\t\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t</ng-template>\n\t} @else {\n\t\t@if (showsFormTextTooltip()) {\n\t\t\t<!--\n\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t-->\n\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t@if ((label() || required()) && (labelType() !== _labelTypes.Floating || type() === _inputFormats.Color)) {\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t></button>\n\t\t\t</div>\n\t\t} @else if ((label() || required()) && (labelType() !== _labelTypes.Floating || type() === _inputFormats.Color)) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t}\n\n\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t<!--\n\t\t\t\tA swatch grid is a radio group, which a `<label for>` cannot label: it names the\n\t\t\t\tgroup through `aria-labelledby` instead, hence the id.\n\t\t\t-->\n\t\t\t<label\n\t\t\t\t[attr.for]=\"showsSwatches() ? null : id\"\n\t\t\t\t[id]=\"id + '-label'\"\n\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t>\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</ng-template>\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() || _isReadonly() || (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−\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]=\"_isReadonly()\"\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() || _isReadonly() || (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@if (showsSwatches()) {\n\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\tOne value out of a set: a radio group, with one Tab stop and arrows to move.\n\t\t\t\t\t\t\tThe box is the field's own control skin, so a row of swatches reads as one\n\t\t\t\t\t\t\tmore input in the column; it drops the box once the cells wrap.\n\t\t\t\t\t\t-->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#swatchList\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__swatches\"\n\t\t\t\t\t\t\t[class.hub-input__swatches--wrapped]=\"swatchesWrapped()\"\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\trole=\"radiogroup\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[attr.aria-labelledby]=\"label() ? id + '-label' : null\"\n\t\t\t\t\t\t\t[attr.aria-required]=\"required() ? true : null\"\n\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t[attr.aria-readonly]=\"_isReadonly() || null\"\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\t@for (swatch of _swatches(); track $index) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch\"\n\t\t\t\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\t\t\t\t[attr.aria-checked]=\"checkedSwatch() === $index\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"swatch.label\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t\t\t[attr.title]=\"swatch.label\"\n\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"disabled() ? null : tabbableSwatch() === $index ? 0 : -1\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"swatch.value\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-ink]=\"swatch.ink\"\n\t\t\t\t\t\t\t\t\t(click)=\"activateSwatch($index)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleSwatchKeydown($event, $index)\"\n\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (allowCustomColor()) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch hub-input__swatch--custom\"\n\t\t\t\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\t\t\t\t[attr.aria-checked]=\"customChecked()\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"customSwatchName()\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t\t\t[attr.title]=\"customSwatchName()\"\n\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"disabled() ? null : tabbableSwatch() === _swatches().length ? 0 : -1\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"customValue() || null\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-ink]=\"customInk()\"\n\t\t\t\t\t\t\t\t\t(click)=\"activateSwatch(_swatches().length)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleSwatchKeydown($event, _swatches().length)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<!-- Out of the tab order and the accessibility tree: the cell is the control, this only hosts the picker. -->\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#customColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch-native\"\n\t\t\t\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"customHex()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t\t\t\t\t\t(input)=\"pickNativeColor($event)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\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}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\tNo palette: a text field for the hex code, with the colour it holds in a square\n\t\t\t\t\t\t\tat its start. The square comes first so Tab meets it where the eye does; it opens\n\t\t\t\t\t\t\tthe browser's picker, which sits hidden under it so the dialog opens there.\n\t\t\t\t\t\t-->\n\t\t\t\t\t\t<div class=\"hub-input__color\">\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__color-swatch\"\n\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"classicHex() || null\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"pickerLabel\"\n\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"_isReadonly() || null\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t(click)=\"openClassicPicker()\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t#classicColorInput\n\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\tclass=\"hub-input__color-native\"\n\t\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t[value]=\"classicHex() || '#000000'\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t\t\t\t(input)=\"pickNativeColor($event)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t\t[value]=\"colorText()\"\n\t\t\t\t\t\t\t\t(input)=\"typeColorText($event)\"\n\t\t\t\t\t\t\t\t(blur)=\"commitColorText($event)\"\n\t\t\t\t\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t\t\t\t\tmaxlength=\"7\"\n\t\t\t\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t[readonly]=\"_isReadonly()\"\n\t\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\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() || _isReadonly()\"\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() && !_isReadonly()) {\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×\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]=\"_isReadonly()\"\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 (!showsFormTextTooltip() && (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\tElementRef,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, NgTemplateOutlet, HubTooltipDirective],\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 (showsFormTextTooltip()) {\n\t\t\t\t<!--\n\t\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t\t-->\n\t\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t\t></button>\n\t\t\t\t</div>\n\t\t\t} @else if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\n\t\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t\t<label\n\t\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t>\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</ng-template>\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 (!showsFormTextTooltip() && 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\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/** 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 { 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';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, HubTooltipDirective],\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 _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/**\n\t * Render the value as plain text, with no field styling around it.\n\t *\n\t * The multi-line half of the same idea `HubInputComponent.plaintext` carries: a value\n\t * that belongs in the form but is not the reader's to change. It stays a real\n\t * `<textarea>`, so the label keeps pointing at a control and the text stays\n\t * selectable, and it only loses the box. Implies `readonly`.\n\t */\n\treadonly plaintext = input(false, { transform: booleanAttribute });\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() && !plaintext()\"\n\t[class.hub-field--plaintext]=\"plaintext()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t[attr.rows]=\"rows()\"\n\t\t\t\t[attr.cols]=\"cols()\"\n\t\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readonly]=\"readonly() || plaintext()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\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<!-- A counter tells you how much room is left to type, which promises typing. -->\n\t@if (counter() && !plaintext()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (!showsFormTextTooltip() && (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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, HubTooltipDirective],\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 _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/** 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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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 (!showsFormTextTooltip() && (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 { HubTooltipDirective, 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, HubTooltipDirective],\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/** 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\t// A direction flip re-lays the options out without resizing anything, so the\n\t\t\t\t// ResizeObserver never fires and the pill stays at the coordinate it was last\n\t\t\t\t// measured at — which under RTL can be a whole bar away from the option it marks.\n\t\t\t\t//\n\t\t\t\t// Watched across the whole subtree rather than on the document root alone: an\n\t\t\t\t// application may flip `dir` on a container instead of on `<html>` — an RTL island\n\t\t\t\t// inside an LTR page is an ordinary thing to build, and it is the only shape a\n\t\t\t\t// docs example can demonstrate. `attributeFilter` keeps the cost to a rejected\n\t\t\t\t// check on attribute mutations that are not `dir`.\n\t\t\t\tif (typeof MutationObserver !== 'undefined') {\n\t\t\t\t\tconst root = bar.ownerDocument.documentElement;\n\t\t\t\t\tconst observer = new MutationObserver(() => this.updateIndicator());\n\t\t\t\t\tif (root) observer.observe(root, { attributes: true, attributeFilter: ['dir'], subtree: true });\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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-label]=\"label() || null\"\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 (!showsFormTextTooltip() && (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 * @deprecated Project a `<hub-legend>` element as a direct child of the fieldset instead. The slot\n * existed only so a legend could carry markup, and `<hub-legend>` carries markup on its own —\n * without an `ng-template`, without a second directive to import, and producing the same DOM the\n * `legend` input produces, so the library has one answer to \"how is a legend written\". The slot\n * keeps working until it is removed in **23.0.0**; a fieldset that still uses it renders exactly as\n * before, so nothing breaks by doing nothing before then.\n *\n * @example\n * ```html\n * <!-- before -->\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n *\n * <!-- after -->\n * <hub-fieldset formGroupName=\"address\">\n * <hub-legend>Shipping address <span class=\"badge\">required</span></hub-legend>\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 { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * The legend of a `<hub-fieldset>` (or any grouped section), with optional required/invalid state\n * styling.\n *\n * Project it as a direct child of the fieldset: it is lifted into the native `<legend>` element,\n * which is also what `<hub-fieldset legend=\"…\">` builds for you — so a text legend and a rich one\n * are the same element with the same classes. It also stands alone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\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","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcontentChild,\n\tElementRef,\n\tinject,\n\tinput,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\nimport { HubLegendComponent } from '../legend/legend.component';\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 * Usable in two interchangeable forms from the same class:\n * - As an attribute on the native element: `<fieldset hubFieldset legend=\"…\">`. **Preferred** — the\n * host already is the `<fieldset>`, so the grouping costs one element instead of two.\n * - As an element: `<hub-fieldset legend=\"…\">`, which emits its own `<fieldset>` inside the host.\n *\n * The attribute form is deliberately restricted to `<fieldset>`: on a `<div>` it would render a\n * group with a legend but none of the grouping semantics assistive technology reads from a fieldset.\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 * ## The legend is always a `<hub-legend>`\n *\n * `legend=\"…\"` is shorthand: it builds one for you. When the legend needs more than a string — a\n * required marker, an icon, a badge — project the element yourself and it lands in the same place:\n *\n * ```html\n * <fieldset hubFieldset [group]=\"form.controls.address\">\n * <hub-legend [required]=\"true\">Shipping address</hub-legend>\n * …\n * </fieldset>\n * ```\n *\n * The older `<ng-template hubLegend>` slot still works and is deprecated; see\n * {@link HubLegendDirective}.\n *\n * @example\n * ```html\n * <fieldset hubFieldset 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 * </fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset, fieldset[hubFieldset]',\n\timports: [NgTemplateOutlet, KeyValuePipe, HubLegendComponent],\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\t'[class.hub-fieldset]': '!_isElementForm',\n\t\t'[class.hub-fieldset--invalid]': '!_isElementForm && isInvalid'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/**\n\t * Whether this instance is the `<hub-fieldset>` element form (as opposed to `[hubFieldset]` on a\n\t * native `<fieldset>`). Read once from the host tag at construction — a static host fact — so the\n\t * view knows whether it still owes the consumer a `<fieldset>` or the host already is one, and so\n\t * the appearance classes land on the element that actually is the fieldset in either form.\n\t */\n\tprotected readonly _isElementForm = inject(ElementRef).nativeElement.nodeName === 'HUB-FIELDSET';\n\n\t/**\n\t * Legend text. Rendered inside a `<hub-legend>`, so a text legend and a projected one are the\n\t * same element. Ignored when a `<hub-legend>` is projected, or a `hubLegend` template is.\n\t */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Query for a projected `hubLegend` template.\n\t *\n\t * @deprecated Project a `<hub-legend>` element instead — the slot exists only so the legend can\n\t * carry markup, and `<hub-legend>` carries markup without an `ng-template` and without an extra\n\t * import. Removed in 23.0.0.\n\t */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n\n\t/**\n\t * A `<hub-legend>` projected as a direct child, which is the way a legend that needs more than\n\t * text is written. Queried rather than merely projected because the `<legend>` element must not\n\t * be emitted at all when the group has no legend of any kind.\n\t */\n\tprotected readonly _projectedLegend = contentChild(HubLegendComponent);\n}\n","<ng-template #body>\n\t@if (legend() || legendTmp() || _projectedLegend()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t<ng-content select=\"hub-legend\"></ng-content>\n\t\t\t@if (!_projectedLegend()) {\n\t\t\t\t@if (legendTmp(); as tpl) {\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n\t\t\t\t} @else {\n\t\t\t\t\t<hub-legend>{{ legend() }}</hub-legend>\n\t\t\t\t}\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</ng-template>\n\n@if (_isElementForm) {\n\t<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t\t<ng-container [ngTemplateOutlet]=\"body\"></ng-container>\n\t</fieldset>\n} @else {\n\t<ng-container [ngTemplateOutlet]=\"body\"></ng-container>\n}\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","/**\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 opens straight into the dropdown 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'&': '&',\n\t'<': '<',\n\t'>': '>',\n\t'\"': '"',\n\t\"'\": '''\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() ? escapeHTML(this.ngItemLabel()) : 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, isDevMode } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\t/**\n\t * The engine's write-value diagnostics are advice for whoever wrote the form, so they are\n\t * kept — a dropped model is worse in silence — but held to development, where that person\n\t * is the one reading, and attributed so the message is traceable to this package.\n\t */\n\twarn(message: string) {\n\t\tif (!isDevMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconsole.warn(`[ng-hub-ui-forms] ${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 ||\n\t\t\t\t(!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\t// Both branches measure from the parent's top edge. An unpositioned `body` is not the\n\t\t// panel's containing block: `bottom` would resolve against the viewport-sized initial\n\t\t// containing block, so on a page taller than the viewport the panel landed far off-screen.\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst dropdownHeight = this._dropdown.getBoundingClientRect().height;\n\t\t\tconst offsetTop = containerRect.top - parent.top - dropdownHeight;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = '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\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,\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)\n\t\t\t? !isObject(firstItem)\n\t\t\t: 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(\n\t\t\tisDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear\n\t\t);\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() &&\n\t\t\tthis.searchTerm &&\n\t\t\tthis.itemsList.markedItem &&\n\t\t\t(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>\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>\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\n\t\t\t\t[ngTemplateOutlet]=\"multiLabelTemplate()\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\"\n\t\t\t>\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\t/>\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>\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>\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>\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\n\t\t\t\t\t\t\t\t? optgroupTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\t\t: 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>\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>\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>\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>\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>\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 { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Hub-named slots for the parts of a `<hub-select>` a consumer can re-draw.\n *\n * `hub-select` is built on a vendored copy of ng-select (see `PATCHES.md`), whose own slot\n * directives are attribute selectors in the `ng-*` namespace: `ng-option-tmp`, `ng-label-tmp` and\n * ten more. Those were re-exported, so the public surface of `ng-hub-ui-forms` invited consumers to\n * write markup named after an internal dependency that is re-synced from upstream on a schedule and\n * that no promise here covers. The directives in this file are the surface the library actually\n * owns: same slots, same template contexts, hub names, and nothing in `vendor/` changed — so the\n * automated sync stays as low-conflict as it was.\n *\n * Each is a plain marker over an `<ng-template>`; `hub-select` queries it and forwards the template\n * into the engine with the context documented on each directive.\n */\n\n/**\n * Draws one option in the dropdown list.\n *\n * Context: `item` (the raw item), `item$` (the engine's wrapper, carrying `selected`/`disabled`),\n * `index`, `searchTerm`.\n *\n * @example\n * ```html\n * <hub-select [items]=\"users\" bindLabel=\"name\">\n * <ng-template hubSelectOption let-item=\"item\" let-search=\"searchTerm\">\n * <img [src]=\"item.avatar\" alt=\"\" /> {{ item.name }}\n * </ng-template>\n * </hub-select>\n * ```\n */\n@Directive({ selector: '[hubSelectOption]' })\nexport class HubSelectOptionDirective {\n\t/** Template reference for the option content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a group header when the list is grouped with `groupBy`.\n *\n * Context: `item`, `item$`, `index`, `searchTerm`.\n */\n@Directive({ selector: '[hubSelectOptgroup]' })\nexport class HubSelectOptgroupDirective {\n\t/** Template reference for the group header content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws the selected value inside the closed control, in single-select mode.\n *\n * Context: `item`, `label`, `clear`.\n */\n@Directive({ selector: '[hubSelectLabel]' })\nexport class HubSelectLabelDirective {\n\t/** Template reference for the selected-value content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws all selected values at once in multiple mode, replacing the per-value chips.\n *\n * Context: `items`, `clear`.\n */\n@Directive({ selector: '[hubSelectMultiLabel]' })\nexport class HubSelectMultiLabelDirective {\n\t/** Template reference for the multi-value content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a fixed block above the option list.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectHeader]' })\nexport class HubSelectHeaderDirective {\n\t/** Template reference for the dropdown header. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a fixed block below the option list.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectFooter]' })\nexport class HubSelectFooterDirective {\n\t/** Template reference for the dropdown footer. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"no items found\" message.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectNotFound]' })\nexport class HubSelectNotFoundDirective {\n\t/** Template reference for the empty-result content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"type to search\" hint shown before `minTermLength` characters have been typed.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectTypeToSearch]' })\nexport class HubSelectTypeToSearchDirective {\n\t/** Template reference for the type-to-search hint. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"loading…\" message shown while a typeahead is in flight and no item has arrived.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectLoadingText]' })\nexport class HubSelectLoadingTextDirective {\n\t/** Template reference for the loading message. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the spinner drawn in the control while `loading` is set.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectLoadingSpinner]' })\nexport class HubSelectLoadingSpinnerDirective {\n\t/** Template reference for the loading spinner. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"add <term>\" row offered when `addTag` is enabled.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectTag]' })\nexport class HubSelectTagDirective {\n\t/** Template reference for the add-tag row. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the clear (×) control.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectClearButton]' })\nexport class HubSelectClearButtonDirective {\n\t/** Template reference for the clear control. */\n\treadonly template = inject(TemplateRef);\n}\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 { 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 {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective\n} from './vendor/lib/ng-templates.directive';\nimport {\n\tHubSelectClearButtonDirective,\n\tHubSelectFooterDirective,\n\tHubSelectHeaderDirective,\n\tHubSelectLabelDirective,\n\tHubSelectLoadingSpinnerDirective,\n\tHubSelectLoadingTextDirective,\n\tHubSelectMultiLabelDirective,\n\tHubSelectNotFoundDirective,\n\tHubSelectOptgroupDirective,\n\tHubSelectOptionDirective,\n\tHubSelectTagDirective,\n\tHubSelectTypeToSearchDirective\n} from './select-templates.directive';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective,\n\t\tNgTypeToSearchTemplateDirective,\n\t\tNgLoadingTextTemplateDirective,\n\t\tNgLoadingSpinnerTemplateDirective,\n\t\tNgTagTemplateDirective,\n\t\tNgClearButtonTemplateDirective,\n\t\tHubTooltipDirective\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 _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 hubSelectOption>` etc. work through `<hub-select>`.\n\t//\n\t// Each slot is queried twice: once for the hub-named directive that is the supported way to\n\t// write it, and once for the vendored `ng-*-tmp` attribute that used to be the only way. The\n\t// hub one wins; the vendored one is deprecated and disappears in 23.0.0 along with its export.\n\tprivate readonly _hubOptionTpl = contentChild(HubSelectOptionDirective, { read: TemplateRef });\n\tprivate readonly _ngOptionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optionTpl = computed(() => this._hubOptionTpl() ?? this._ngOptionTpl());\n\n\tprivate readonly _hubOptgroupTpl = contentChild(HubSelectOptgroupDirective, { read: TemplateRef });\n\tprivate readonly _ngOptgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = computed(() => this._hubOptgroupTpl() ?? this._ngOptgroupTpl());\n\n\tprivate readonly _hubLabelTpl = contentChild(HubSelectLabelDirective, { read: TemplateRef });\n\tprivate readonly _ngLabelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = computed(() => this._hubLabelTpl() ?? this._ngLabelTpl());\n\n\tprivate readonly _hubMultiLabelTpl = contentChild(HubSelectMultiLabelDirective, { read: TemplateRef });\n\tprivate readonly _ngMultiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = computed(() => this._hubMultiLabelTpl() ?? this._ngMultiLabelTpl());\n\n\tprivate readonly _hubHeaderTpl = contentChild(HubSelectHeaderDirective, { read: TemplateRef });\n\tprivate readonly _ngHeaderTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = computed(() => this._hubHeaderTpl() ?? this._ngHeaderTpl());\n\n\tprivate readonly _hubFooterTpl = contentChild(HubSelectFooterDirective, { read: TemplateRef });\n\tprivate readonly _ngFooterTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = computed(() => this._hubFooterTpl() ?? this._ngFooterTpl());\n\n\tprivate readonly _hubNotFoundTpl = contentChild(HubSelectNotFoundDirective, { read: TemplateRef });\n\tprivate readonly _ngNotFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = computed(() => this._hubNotFoundTpl() ?? this._ngNotFoundTpl());\n\n\t// The five slots below were exported but never forwarded: written inside a `<hub-select>` they\n\t// belonged to this wrapper's content, and the engine's own `contentChild` cannot see through an\n\t// `<ng-content>`, so they did nothing at all. They are forwarded now, under hub names.\n\tprivate readonly _hubTypeToSearchTpl = contentChild(HubSelectTypeToSearchDirective, { read: TemplateRef });\n\tprivate readonly _ngTypeToSearchTpl = contentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef });\n\tprotected readonly _typeToSearchTpl = computed(() => this._hubTypeToSearchTpl() ?? this._ngTypeToSearchTpl());\n\n\tprivate readonly _hubLoadingTextTpl = contentChild(HubSelectLoadingTextDirective, { read: TemplateRef });\n\tprivate readonly _ngLoadingTextTpl = contentChild(NgLoadingTextTemplateDirective, { read: TemplateRef });\n\tprotected readonly _loadingTextTpl = computed(() => this._hubLoadingTextTpl() ?? this._ngLoadingTextTpl());\n\n\tprivate readonly _hubLoadingSpinnerTpl = contentChild(HubSelectLoadingSpinnerDirective, { read: TemplateRef });\n\tprivate readonly _ngLoadingSpinnerTpl = contentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef });\n\tprotected readonly _loadingSpinnerTpl = computed(() => this._hubLoadingSpinnerTpl() ?? this._ngLoadingSpinnerTpl());\n\n\tprivate readonly _hubTagTpl = contentChild(HubSelectTagDirective, { read: TemplateRef });\n\tprivate readonly _ngTagTpl = contentChild(NgTagTemplateDirective, { read: TemplateRef });\n\tprotected readonly _tagTpl = computed(() => this._hubTagTpl() ?? this._ngTagTpl());\n\n\tprivate readonly _hubClearButtonTpl = contentChild(HubSelectClearButtonDirective, { read: TemplateRef });\n\tprivate readonly _ngClearButtonTpl = contentChild(NgClearButtonTemplateDirective, { read: TemplateRef });\n\tprotected readonly _clearButtonTpl = computed(() => this._hubClearButtonTpl() ?? this._ngClearButtonTpl());\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>(undefined);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/**\n\t * Label display type (`stacked`, `floating`, `horizontal`).\n\t *\n\t * `floating` lays the label inside the control and lifts it once the field is focused or\n\t * holds a value — the same contract as `hub-input`, so a form can float every label instead\n\t * of floating the text fields and stacking the selects beside them.\n\t *\n\t * Only the `dropdown` format can float: the deprecated `buttons` / `checkbox` / `radio`\n\t * formats have no box to float into, and fall back to a stacked label rather than losing it.\n\t */\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/** 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/**\n\t * Whether the control currently holds focus.\n\t *\n\t * Tracked here rather than read off the engine's `ng-select-focused` host class, because the\n\t * floating label is a SIBLING of the control and the state has to reach the group that wraps\n\t * both. A CSS-only reading would need `:has()`, which fails silently where it is unsupported —\n\t * and a label that never lifts looks exactly like a label that was never asked to.\n\t */\n\tprivate readonly _focused = signal<boolean>(false);\n\n\t/**\n\t * Whether the label is laid inside the control. Only the dropdown format has a box to float\n\t * into; the deprecated ones fall back to a stacked label rather than dropping it.\n\t */\n\tprotected readonly showsFloatingLabel = computed<boolean>(\n\t\t() =>\n\t\t\tthis.labelType() === this._labelTypes.Floating &&\n\t\t\tthis.format() === this._selectFormats.Dropdown &&\n\t\t\t(!!this.label() || !!this.required())\n\t);\n\n\t/** Whether the control holds a value. An empty multiselect is empty, not filled. */\n\tprotected readonly isFilled = computed<boolean>(() => {\n\t\tconst value = this._value();\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.length > 0;\n\t\t}\n\n\t\treturn value !== null && value !== undefined && value !== '';\n\t});\n\n\t/**\n\t * Whether the floating label sits lifted rather than over the value. Focus counts as well as\n\t * a value: while the panel is open the placeholder and the search term need the room.\n\t */\n\tprotected readonly isLabelRaised = computed<boolean>(() => this._focused() || this.isFilled());\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 * Records focus for the floating label, then republishes the engine's event untouched.\n\t *\n\t * Named apart from the base class's `handleBlur`, which is the host-level `focusout` that marks\n\t * the field touched: these two ride the engine's own focus events and answer a different\n\t * question — where the label should sit, not whether the control has been visited.\n\t *\n\t * @param event - The focus event emitted by the control.\n\t */\n\tprotected handleControlFocus(event: any): void {\n\t\tthis._focused.set(true);\n\t\tthis.onFocus.emit(event);\n\t}\n\n\t/**\n\t * Records the loss of focus for the floating label, then republishes the engine's event.\n\t *\n\t * @param event - The blur event emitted by the control.\n\t */\n\tprotected handleControlBlur(event: any): void {\n\t\tthis._focused.set(false);\n\t\tthis.onBlur.emit(event);\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if ((label() || required()) && !showsFloatingLabel()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if ((label() || required()) && !showsFloatingLabel()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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--floating]=\"showsFloatingLabel()\"\n\t\t\t\t\t[class.hub-select__group--raised]=\"showsFloatingLabel() && isLabelRaised()\"\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<!--\n\t\t\t\t\t\tThe floating label hangs off a zero-width anchor placed exactly where the\n\t\t\t\t\t\tcontrol starts, not off the group. A group can open with an addon or an\n\t\t\t\t\t\tattached button, and a label pinned to the group's own leading edge would\n\t\t\t\t\t\tprint on top of it.\n\t\t\t\t\t-->\n\t\t\t\t\t@if (showsFloatingLabel()) {\n\t\t\t\t\t\t<span class=\"hub-select__label-anchor\">\n\t\t\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-select__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</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)=\"handleControlFocus($event)\"\n\t\t\t\t\t\t(blur)=\"handleControlBlur($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@if (_typeToSearchTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-typetosearch-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (_loadingTextTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-loadingtext-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 (_loadingSpinnerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-loadingspinner-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (_tagTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-tag-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 (_clearButtonTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-clearbutton-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (!showsFormTextTooltip() && (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 { 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\tDestroyRef,\n\tElementRef,\n\tsignal,\n\tTemplateRef,\n\tViewContainerRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HUB_DROPDOWN_POSITIONS, HubTooltipDirective, OverlayRef, OverlayService } from 'ng-hub-ui-utils';\nimport { 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: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tHubDatepickerTimeFieldComponent,\n\t\tHubDatepickerPeriodGridComponent,\n\t\tHubTooltipDirective\n\t],\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 #overlays = inject(OverlayService);\n\treadonly #viewContainerRef = inject(ViewContainerRef);\n\n\t/** The field's own box: what the calendar hangs off. */\n\tprivate readonly _trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n\n\t/** The calendar, rendered into the overlay rather than into the field. */\n\tprivate readonly _panel = viewChild.required<TemplateRef<unknown>>('panel');\n\n\t/** Live overlay while the calendar is up; `null` when it is closed. */\n\t#overlayRef: OverlayRef | null = null;\n\n\tconstructor() {\n\t\tsuper();\n\t\t// The panel lives in `document.body`, outside this component's own tree, so nothing removes\n\t\t// it when the field goes away: a datepicker destroyed while open would leave its calendar\n\t\t// on screen, attached to a field that no longer exists.\n\t\tinject(DestroyRef).onDestroy(() => this.#closeOverlay());\n\t}\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\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 month is written in the panel's header.\n\t *\n\t * `short` by default, and that default is what keeps the panel still: the panel is as\n\t * wide as its widest child, and with the month spelled out that child was the header —\n\t * so the calendar grew and shrank as you paged through the year while the day grid it\n\t * frames never moved. Measured in Spanish at 1rem: «Septiembre de 2026» needs 152px\n\t * against the 104px the header has left over once the two nav groups have taken theirs,\n\t * so nothing but an abbreviation fits. Ask for `long` where the panel has room and the\n\t * spelled-out month is worth the movement.\n\t */\n\treadonly monthFormat = input<'short' | 'long'>('short');\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/** 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/**\n\t * Whether the input is focused. Tracked rather than read from `:focus` because the calendar\n\t * is an overlay: opening it moves focus out of the input, and a label driven by the pseudo\n\t * class would drop back over the value at exactly the moment the reader is choosing a date.\n\t */\n\tprivate readonly _focused = signal<boolean>(false);\n\n\t/** Whether the label is laid inside the control rather than stacked above it. */\n\tprotected readonly showsFloatingLabel = computed<boolean>(\n\t\t() => this.labelType() === this._labelTypes.Floating && (!!this.label() || !!this.required())\n\t);\n\n\t/**\n\t * Whether the floating label sits lifted rather than standing in for the placeholder. The\n\t * open panel counts alongside focus and a value: while the calendar is up the field is in\n\t * use, and a label sliding back down under it would read as the value being cleared.\n\t */\n\tprotected readonly isLabelRaised = computed<boolean>(() => this._focused() || this._open() || !!this.displayValue());\n\n\t/** Tracks focus for {@link isLabelRaised}. */\n\tprotected setFocused(focused: boolean): void {\n\t\tthis._focused.set(focused);\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(), {\n\t\t\tmonth: this.monthFormat(),\n\t\t\tyear: 'numeric'\n\t\t}).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.#openOverlay();\n\t\tthis.opened.emit();\n\t}\n\n\t/**\n\t * Puts the calendar on screen, hung off the field's own box.\n\t *\n\t * `start` and `end` in the position list are logical, and the strategy reads the direction from\n\t * the origin — so a field inside an RTL container opens its calendar against the right edge\n\t * without a second list of positions. The offset mirrors what this component asked the CDK for\n\t * before the swap, so any visual difference means the swap is wrong rather than better.\n\t */\n\t#openOverlay(): void {\n\t\tif (this.#overlayRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst position = this.#overlays\n\t\t\t.position()\n\t\t\t.flexibleConnectedTo(this._trigger().nativeElement)\n\t\t\t.withPositions(HUB_DROPDOWN_POSITIONS.map((p) => ({ ...p, offsetY: 4 })));\n\n\t\tconst ref = this.#overlays.create({\n\t\t\tpositionStrategy: position,\n\t\t\thasBackdrop: true,\n\t\t\tbackdropClass: 'hub-datepicker__backdrop',\n\t\t\tpanelClass: 'hub-datepicker__overlay'\n\t\t});\n\n\t\tref.onBackdropClick(() => this.close());\n\t\t// The panel does not take focus — opened from a click, focus stays where it was — so the\n\t\t// grid's own keydown never hears Escape. The overlay listens on the document and tells the\n\t\t// topmost open one, which is how the CDK behaved before the swap.\n\t\tref.onKeydown((event) => {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t});\n\t\tref.attach(this._panel(), this.#viewContainerRef);\n\t\tthis.#overlayRef = ref;\n\t}\n\n\t/** Takes the calendar off screen and releases the overlay it lived in. */\n\t#closeOverlay(): void {\n\t\tthis.#overlayRef?.dispose();\n\t\tthis.#overlayRef = null;\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.#closeOverlay();\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (!showsFloatingLabel() && (label() || required())) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (!showsFloatingLabel() && (label() || required())) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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--floating]=\"showsFloatingLabel()\"\n\t\t\t[class.hub-datepicker__group--raised]=\"showsFloatingLabel() && isLabelRaised()\"\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\" #trigger>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"hub-field__control hub-datepicker__input\"\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[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\treadonly\n\t\t\t\t\t[value]=\"displayValue()\"\n\t\t\t\t\t[placeholder]=\"showsFloatingLabel() && !isLabelRaised() ? '' : placeholder()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t\t\t(focus)=\"setFocused(true)\"\n\t\t\t\t\t(blur)=\"setFocused(false); handleBlur($event)\"\n\t\t\t\t/>\n\t\t\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">\n\t\t\t\t\t\t×\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t\t></button>\n\t\t\t\t@if (showsFloatingLabel()) {\n\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-datepicker__label--floating\">\n\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</label>\n\t\t\t\t}\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 (!showsFormTextTooltip() && (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 #panel>\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, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, NgTemplateOutlet, HubTooltipDirective],\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 (showsFormTextTooltip()) {\n\t\t\t\t<!--\n\t\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t\t-->\n\t\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t\t></button>\n\t\t\t\t</div>\n\t\t\t} @else if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\n\t\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t\t<label\n\t\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t\t[attr.for]=\"id\"\n\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t>\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</ng-template>\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-timepicker__group\"\n\t\t\t\t\t[class.hub-timepicker__group--has-prepend]=\"hasPrepend()\"\n\t\t\t\t\t[class.hub-timepicker__group--has-append]=\"hasAppend()\"\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-timepicker__attached hub-timepicker__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 _prependAddons(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-timepicker__addon hub-timepicker__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-timepicker__control\"\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[value]=\"value() ?? ''\"\n\t\t\t\t\t\t[attr.min]=\"min() || null\"\n\t\t\t\t\t\t[attr.max]=\"max() || null\"\n\t\t\t\t\t\t[attr.step]=\"step() || null\"\n\t\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[readOnly]=\"readonly()\"\n\t\t\t\t\t\t(input)=\"onInput($event)\"\n\t\t\t\t\t\t(blur)=\"onTouched()\"\n\t\t\t\t\t/>\n\t\t\t\t\t@for (addon of _appendAddons(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-timepicker__addon hub-timepicker__addon--append\">{{ addon }}</span>\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-timepicker__attached hub-timepicker__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\n\t\t\t\t@if (!showsFormTextTooltip() && formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\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\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/** 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// ── Group addons and attached content ───────────────────────────────────────\n\n\t/**\n\t * Text shown before the control as a group addon — a unit, a currency, a label. A string, or\n\t * an array for a run of them.\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/** 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\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/** 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/**\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 * The families `<hub-file-input>` tells apart when it has to draw a file instead of showing it.\n *\n * Named \"kind\" rather than \"type\" on purpose: `type` already means the MIME type everywhere a file\n * is described (`File.type`, `HubCurrentFile.type`), and the two must not be confused.\n */\nexport type HubFileKind =\n\t'pdf' | 'document' | 'spreadsheet' | 'presentation' | 'archive' | 'audio' | 'video' | 'code' | 'image' | 'generic';\n\n/** MIME types matched exactly. Checked before the extension, which only fills in for a missing type. */\nconst KIND_BY_MIME: Readonly<Record<string, HubFileKind>> = {\n\t'application/pdf': 'pdf',\n\n\t'application/msword': 'document',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'document',\n\t'application/vnd.oasis.opendocument.text': 'document',\n\t'application/rtf': 'document',\n\t'text/rtf': 'document',\n\t'text/plain': 'document',\n\t'text/markdown': 'document',\n\n\t'application/vnd.ms-excel': 'spreadsheet',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'spreadsheet',\n\t'application/vnd.oasis.opendocument.spreadsheet': 'spreadsheet',\n\t'text/csv': 'spreadsheet',\n\t'text/tab-separated-values': 'spreadsheet',\n\n\t'application/vnd.ms-powerpoint': 'presentation',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'presentation',\n\t'application/vnd.oasis.opendocument.presentation': 'presentation',\n\n\t'application/zip': 'archive',\n\t'application/x-zip-compressed': 'archive',\n\t'application/vnd.rar': 'archive',\n\t'application/x-rar-compressed': 'archive',\n\t'application/x-7z-compressed': 'archive',\n\t'application/x-tar': 'archive',\n\t'application/gzip': 'archive',\n\t'application/x-gzip': 'archive',\n\t'application/x-bzip2': 'archive',\n\t'application/x-xz': 'archive',\n\n\t'application/json': 'code',\n\t'application/xml': 'code',\n\t'text/xml': 'code',\n\t'text/html': 'code',\n\t'text/css': 'code',\n\t'text/javascript': 'code',\n\t'application/javascript': 'code',\n\t'application/typescript': 'code',\n\t'application/x-yaml': 'code',\n\t'text/yaml': 'code',\n\t'application/x-sh': 'code'\n};\n\n/** Extensions, lower case and without the dot, for files the browser could not type. */\nconst KIND_BY_EXTENSION: Readonly<Record<string, HubFileKind>> = {\n\tpdf: 'pdf',\n\t...Object.fromEntries(['doc', 'docx', 'odt', 'rtf', 'txt', 'md', 'pages'].map((ext) => [ext, 'document'])),\n\t...Object.fromEntries(['xls', 'xlsx', 'ods', 'csv', 'tsv', 'numbers'].map((ext) => [ext, 'spreadsheet'])),\n\t...Object.fromEntries(['ppt', 'pptx', 'odp', 'key'].map((ext) => [ext, 'presentation'])),\n\t...Object.fromEntries(['zip', 'rar', '7z', 'tar', 'gz', 'tgz', 'bz2', 'xz'].map((ext) => [ext, 'archive'])),\n\t...Object.fromEntries(['mp3', 'wav', 'ogg', 'oga', 'flac', 'aac', 'm4a', 'opus', 'weba'].map((ext) => [ext, 'audio'])),\n\t...Object.fromEntries(['mp4', 'webm', 'mov', 'avi', 'mkv', 'm4v', 'ogv'].map((ext) => [ext, 'video'])),\n\t...Object.fromEntries(\n\t\t[\n\t\t\t'json',\n\t\t\t'xml',\n\t\t\t'html',\n\t\t\t'htm',\n\t\t\t'css',\n\t\t\t'scss',\n\t\t\t'js',\n\t\t\t'mjs',\n\t\t\t'ts',\n\t\t\t'jsx',\n\t\t\t'tsx',\n\t\t\t'yml',\n\t\t\t'yaml',\n\t\t\t'sh',\n\t\t\t'py',\n\t\t\t'java',\n\t\t\t'c',\n\t\t\t'cpp',\n\t\t\t'cs',\n\t\t\t'php',\n\t\t\t'rb',\n\t\t\t'go',\n\t\t\t'rs',\n\t\t\t'sql'\n\t\t].map((ext) => [ext, 'code'])\n\t),\n\t...Object.fromEntries(\n\t\t[\n\t\t\t'png',\n\t\t\t'jpg',\n\t\t\t'jpeg',\n\t\t\t'gif',\n\t\t\t'webp',\n\t\t\t'avif',\n\t\t\t'svg',\n\t\t\t'bmp',\n\t\t\t'ico',\n\t\t\t'apng',\n\t\t\t'heic',\n\t\t\t'heif',\n\t\t\t'tif',\n\t\t\t'tiff',\n\t\t\t'psd',\n\t\t\t'raw',\n\t\t\t'dng'\n\t\t].map((ext) => [ext, 'image'])\n\t)\n} as Record<string, HubFileKind>;\n\n/**\n * The image formats every current browser paints in an `<img>`. HEIC, TIFF or PSD are images too,\n * but an `<img>` pointed at one renders a broken frame, so they get the image icon instead.\n */\nconst PREVIEWABLE_MIME = new Set([\n\t'image/png',\n\t'image/jpeg',\n\t'image/gif',\n\t'image/webp',\n\t'image/avif',\n\t'image/svg+xml',\n\t'image/bmp',\n\t'image/x-icon',\n\t'image/vnd.microsoft.icon',\n\t'image/apng'\n]);\n\nconst PREVIEWABLE_EXTENSION = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'svg', 'bmp', 'ico', 'apng']);\n\n/**\n * The extension of a file name, lower case and without the dot.\n *\n * A leading dot is not an extension: `.env` is a name, not an `env` file.\n *\n * @param name - The file name.\n * @returns The extension, or `''` when there is none.\n */\nexport function fileExtension(name: string | null | undefined): string {\n\tconst value = name ?? '';\n\tconst dot = value.lastIndexOf('.');\n\n\treturn dot > 0 ? value.slice(dot + 1).toLowerCase() : '';\n}\n\n/**\n * Tells which family a file belongs to, from its MIME type and, when that says nothing, its name.\n *\n * The MIME type wins because it describes the content, while a name is only a claim. It falls back\n * to the extension when the type is empty — what a browser reports for anything it cannot\n * recognise — or a catch-all such as `application/octet-stream`.\n *\n * @param type - The MIME type, possibly empty.\n * @param name - The file name, used for its extension.\n * @returns The family; `generic` when neither the type nor the extension identifies it.\n */\nexport function fileKind(type: string | null | undefined, name: string | null | undefined): HubFileKind {\n\tconst mime = (type ?? '').toLowerCase().split(';')[0].trim();\n\tconst byMime = KIND_BY_MIME[mime];\n\n\tif (byMime) {\n\t\treturn byMime;\n\t}\n\n\tif (mime.startsWith('image/')) {\n\t\treturn 'image';\n\t}\n\n\tif (mime.startsWith('audio/')) {\n\t\treturn 'audio';\n\t}\n\n\tif (mime.startsWith('video/')) {\n\t\treturn 'video';\n\t}\n\n\treturn KIND_BY_EXTENSION[fileExtension(name)] ?? 'generic';\n}\n\n/**\n * Whether a browser can paint the file in an `<img>`.\n *\n * @param type - The MIME type, possibly empty.\n * @param name - The file name, used when the type is empty.\n * @returns `true` for the formats in {@link PREVIEWABLE_MIME}, or their extensions.\n */\nexport function isPreviewableImage(type: string | null | undefined, name: string | null | undefined): boolean {\n\tconst mime = (type ?? '').toLowerCase().split(';')[0].trim();\n\n\tif (mime.startsWith('image/')) {\n\t\treturn PREVIEWABLE_MIME.has(mime);\n\t}\n\n\treturn !mime || mime === 'application/octet-stream' ? PREVIEWABLE_EXTENSION.has(fileExtension(name)) : false;\n}\n\n/**\n * Whether an `accept` specification only lets images through, so a stored file of unknown type in\n * that field can be assumed to be one.\n *\n * @param accept - The `accept` specification of the field.\n * @returns `true` when every token names an image MIME type, a wildcard `image/*` or an image extension.\n */\nexport function acceptsOnlyImages(accept: string | null | undefined): boolean {\n\tconst tokens = (accept ?? '')\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0);\n\n\treturn (\n\t\ttokens.length > 0 &&\n\t\ttokens.every((token) =>\n\t\t\ttoken.startsWith('.') ? KIND_BY_EXTENSION[token.slice(1)] === 'image' : token.startsWith('image/')\n\t\t)\n\t);\n}\n","import { HubCurrentFile } from '../interfaces/file-input.interface';\nimport { fileExtension } from './file-kind';\n\n/**\n * The file name a URL ends in, when it plainly ends in one.\n *\n * Only a last segment with an extension counts: `/api/companies/1/logo` would otherwise put \"logo\"\n * on screen as if it were a file name, and \"1\" for `/files/1`. `data:` and `blob:` URLs carry no name.\n *\n * @param url - The URL of the stored file.\n * @returns The decoded last path segment, or `null`.\n */\nexport function urlFileName(url: string): string | null {\n\tif (/^(data|blob):/i.test(url)) {\n\t\treturn null;\n\t}\n\n\tconst path = url.split(/[?#]/)[0];\n\tlet segment = path.slice(path.lastIndexOf('/') + 1);\n\n\ttry {\n\t\tsegment = decodeURIComponent(segment);\n\t} catch {\n\t\t// A malformed escape leaves the raw segment, which is still the best name available.\n\t}\n\n\treturn fileExtension(segment) ? segment : null;\n}\n\n/**\n * The MIME type a `data:` URL declares.\n *\n * @param url - The URL of the stored file.\n * @returns The lower-cased MIME type, or `null` for any other URL.\n */\nexport function dataUrlType(url: string): string | null {\n\tconst match = /^data:([^;,]+)/i.exec(url);\n\n\treturn match ? match[1].toLowerCase() : null;\n}\n\n/**\n * Normalizes the `currentFile` input into one shape, filling the name and the type in from the URL\n * where the consumer left them out.\n *\n * @param value - A bare URL, a {@link HubCurrentFile}, or nothing.\n * @returns The stored file with every key present, or `null` when there is no URL.\n */\nexport function resolveCurrentFile(value: string | HubCurrentFile | null | undefined): HubCurrentFile | null {\n\tconst source: HubCurrentFile | null = typeof value === 'string' ? { url: value } : (value ?? null);\n\tconst url = source?.url?.trim();\n\n\tif (!source || !url) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\turl,\n\t\tname: source.name || urlFileName(url),\n\t\ttype: source.type || dataUrlType(url)\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\tlinkedSignal,\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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubCurrentFile,\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 { resolveCurrentFile, urlFileName } from '../../utils/current-file';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { acceptsOnlyImages, fileExtension, fileKind, HubFileKind, isPreviewableImage } from '../../utils/file-kind';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\n\n/**\n * One tile of `preview=\"inline\"` or `preview=\"grid\"`: a picked file or a stored one, drawn the same\n * way — its image, or its kind icon and its name.\n */\ninterface HubFileTile {\n\t/** Stable identity for `@for`: `item:<id>` or `current:<url>`. */\n\treadonly key: string;\n\t/** The name shown and read out; the field's label, or the stand-in, when the name is unknown. */\n\treadonly name: string;\n\t/** The name without its extension, the part that gives way to an ellipsis when space runs out. */\n\treadonly stem: string;\n\t/** The extension with its dot, kept whole so a truncated name still says what the file is. */\n\treadonly ext: string;\n\t/** The family, which picks the icon when there is no image to paint. */\n\treadonly kind: HubFileKind;\n\t/** The image to paint, or `null` to draw the kind icon and the name instead. */\n\treadonly src: string | null;\n\t/** The held item, or `null` for a stored file. */\n\treadonly item: HubFileItem | null;\n\t/** The stored file, or `null` for a held item. */\n\treadonly current: HubCurrentFile | null;\n}\n\n/** Where the dropzone goes: the full box, the add tile at the end of the grid, or nowhere. */\ntype HubDropzonePlacement = 'zone' | 'add' | 'none';\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. Files the record already has (`currentFile`) are shown next to the picked ones but never\n * reach the value either.\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, HubTooltipDirective],\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\t/**\n\t * Object URLs minted on demand to open a picked file that is not painted — a PDF, or an image\n\t * with `imagePreview` off — in a new tab. Minted only when the user asks, released with the file.\n\t */\n\treadonly #openUrls = new Map<string, string>();\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\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/** The tile a pending pick replaces, set by its \"Replace\" pill and consumed by the next `change`. */\n\t#replaceTarget: string | null = null;\n\n\t/** Raised by the pill for the one click it forwards to the native input. */\n\t#armingReplace = false;\n\n\t/** The control that opened the enlarged image, to give focus back when it closes. */\n\t#viewerOpener: HTMLElement | null = null;\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/**\n\t * How the label is presented.\n\t *\n\t * A dropzone has no floating or horizontal arrangement to offer — `floating` reuses the room\n\t * an empty text control's value occupies, and this field has none — so those two render the\n\t * stacked label they have always rendered. `visually-hidden` is the value that does something\n\t * here: the label stays bound to the native input and keeps naming it, out of sight.\n\t */\n\treadonly labelType = input<HubLabelType>(HubLabelTypes.Stacked);\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/**\n\t * Maximum number of files. Only meaningful with `multiple`. With `preview=\"inline\"` the stored\n\t * files in view count too, a counter shows how many are taken, and the add tile goes away at\n\t * the limit.\n\t */\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/**\n\t * How the held files are rendered: not at all, as a list, or as tiles — under the dropzone with\n\t * `grid`, inside the field with `inline`. An `inline` tile alone fills the field; with `multiple`\n\t * the tiles form a grid whose last tile adds more files.\n\t */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/**\n\t * The files the record already has, shown by `preview=\"inline\"` among the picked ones: a URL,\n\t * whose name and type are read from the URL itself, a {@link HubCurrentFile} when the URL does not\n\t * reveal them, or a list of either with `multiple` (a single field shows the first). Display only:\n\t * a stored file never reaches the form value, which stays a native `File`, `File[]` or `null`.\n\t * Whenever one leaves the field — removed, or replaced by a picked file — {@link currentFileRemoved}\n\t * emits it, and it stays hidden until this input changes.\n\t */\n\treadonly currentFile = input<string | HubCurrentFile | readonly (string | HubCurrentFile)[] | null>(null);\n\n\t/**\n\t * Whether images are painted as images. Off, every file is drawn as its kind icon and no object\n\t * URL is minted for a thumbnail — the lighter choice for long lists of photos.\n\t */\n\treadonly imagePreview = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Whether the field is read-only: its files stay in view and can be opened, but none can be\n\t * picked, dropped, pasted, replaced or removed. Unlike `disabled`, the field keeps its focus and\n\t * is still submitted.\n\t */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Whether the user may remove what the field holds — the picked files or the stored ones. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\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/** 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 a picked file that left the selection — removed, or replaced through its tile. */\n\treadonly fileRemoved = output<File>();\n\n\t/**\n\t * Emits a stored file that left the field — removed, or replaced by a picked file. The form value\n\t * never held it, so this is the application's cue to delete it on the server.\n\t */\n\treadonly currentFileRemoved = output<HubCurrentFile>();\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/** The dialog that shows a picked image enlarged. */\n\tprotected readonly viewer = viewChild<ElementRef<HTMLDialogElement>>('viewer');\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 tile whose image the viewer shows, or `null` while it is closed. */\n\tprotected readonly _viewing = signal<HubFileTile | null>(null);\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 user may pick, drop, paste or replace a file. */\n\tprotected readonly _canChange = computed<boolean>(() => !this.disabled() && !this.readonly());\n\n\t/** Whether the user may remove what the field holds. */\n\tprotected readonly _canRemove = computed<boolean>(() => this._canChange() && this.clearable());\n\n\t/** Whether the files sit inside the field (`preview=\"inline\"`), single or multiple. */\n\tprotected readonly _isInline = computed<boolean>(() => this.preview() === 'inline');\n\n\t/** One file filling the whole field. */\n\tprotected readonly _inlineSingle = computed<boolean>(() => this._isInline() && !this.multiple());\n\n\t/** A grid of tiles inside the field, ending in the add tile. */\n\tprotected readonly _inlineMultiple = computed<boolean>(() => this._isInline() && this.multiple());\n\n\t/**\n\t * Which files a list renders: `list` always, and `grid` only when a projected `hubFilePreview`\n\t * template asks for its own item rendering — otherwise `grid` draws tiles.\n\t */\n\tprotected readonly _listPreview = computed<'list' | 'grid' | null>(() => {\n\t\tconst preview = this.preview();\n\n\t\tif (preview === 'list') {\n\t\t\treturn 'list';\n\t\t}\n\n\t\treturn preview === 'grid' && this.previewTpt() ? 'grid' : null;\n\t});\n\n\t/**\n\t * Stored files the user removed or replaced, by URL. `linkedSignal` empties it whenever\n\t * `currentFile` changes, so the next record's stored files come back into view on their own.\n\t */\n\treadonly #dismissed = linkedSignal<unknown, ReadonlySet<string>>({\n\t\tsource: this.currentFile,\n\t\tcomputation: () => new Set<string>()\n\t});\n\n\t/**\n\t * Picked files that replaced a stored one, keyed by item id, so the new file takes the stored\n\t * file's place in the grid instead of moving to the end.\n\t */\n\treadonly #anchors = signal<ReadonlyMap<string, string>>(new Map());\n\n\t/** Images that failed to load; their tiles draw the image icon instead. */\n\treadonly #broken = signal<ReadonlySet<string>>(new Set());\n\n\t/** Every stored file the input names, resolved, in its order — dismissed ones included. */\n\treadonly #allCurrents = computed<HubCurrentFile[]>(() =>\n\t\tthis._isInline()\n\t\t\t? [this.currentFile()]\n\t\t\t\t\t.flat()\n\t\t\t\t\t.map((value) => resolveCurrentFile(value))\n\t\t\t\t\t.filter((current): current is HubCurrentFile => current !== null)\n\t\t\t: []\n\t);\n\n\t/** The stored files still in view. A single field shows the first only. */\n\tprotected readonly _currents = computed<HubCurrentFile[]>(() => {\n\t\tconst dismissed = this.#dismissed();\n\t\tconst visible = this.#allCurrents().filter((current) => !dismissed.has(current.url));\n\n\t\treturn this.multiple() ? visible : visible.slice(0, 1);\n\t});\n\n\t/**\n\t * The tiles, in the order they are shown. In an inline grid the stored files come first, in the\n\t * input's order, and a picked file that replaced one of them takes its place; the other picked\n\t * files follow in the value's order. A single field shows its held file, or else its stored one.\n\t */\n\tprotected readonly _tiles = computed<HubFileTile[]>(() => {\n\t\tconst preview = this.preview();\n\t\tconst items = this._items();\n\n\t\tif (preview === 'grid') {\n\t\t\treturn this.previewTpt() ? [] : items.map((item) => this.#itemTile(item));\n\t\t}\n\n\t\tif (preview !== 'inline') {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.multiple()) {\n\t\t\tconst item = items[0];\n\n\t\t\treturn item ? [this.#itemTile(item)] : this._currents().map((current) => this.#currentTile(current));\n\t\t}\n\n\t\tconst dismissed = this.#dismissed();\n\t\tconst byAnchor = new Map<string, HubFileItem>();\n\n\t\tfor (const item of items) {\n\t\t\tconst url = this.#anchors().get(item.id);\n\n\t\t\tif (url) {\n\t\t\t\tbyAnchor.set(url, item);\n\t\t\t}\n\t\t}\n\n\t\tconst tiles: HubFileTile[] = [];\n\t\tconst placed = new Set<string>();\n\n\t\tfor (const current of this.#allCurrents()) {\n\t\t\tconst replacement = byAnchor.get(current.url);\n\n\t\t\tif (!dismissed.has(current.url)) {\n\t\t\t\ttiles.push(this.#currentTile(current));\n\t\t\t} else if (replacement) {\n\t\t\t\ttiles.push(this.#itemTile(replacement));\n\t\t\t\tplaced.add(replacement.id);\n\t\t\t}\n\t\t}\n\n\t\treturn [...tiles, ...items.filter((item) => !placed.has(item.id)).map((item) => this.#itemTile(item))];\n\t});\n\n\t/** How many files the field holds: the picked ones, plus the stored ones an inline grid shows. */\n\tprotected readonly _heldCount = computed<number>(\n\t\t() => this._items().length + (this._inlineMultiple() ? this._currents().length : 0)\n\t);\n\n\t/** Whether an inline grid is full, which takes its add tile away. */\n\tprotected readonly _atLimit = computed<boolean>(() => {\n\t\tconst max = this.maxFiles();\n\n\t\treturn this._inlineMultiple() && max != null && this._heldCount() >= max;\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && this._canChange() && !this._atLimit());\n\n\t/**\n\t * Where the dropzone goes. List and grid always keep it. Inline keeps it while the field is\n\t * empty, turns it into the add tile at the end of a grid, and drops it for a filled single field,\n\t * a full grid, or one that cannot take files.\n\t */\n\tprotected readonly _dropzone = computed<HubDropzonePlacement>(() => {\n\t\tif (!this._isInline() || this._tiles().length === 0) {\n\t\t\treturn 'zone';\n\t\t}\n\n\t\treturn this._inlineMultiple() && this._canChange() && !this._atLimit() ? 'add' : 'none';\n\t});\n\n\t/** Whether the \"3 of 5 files\" counter is shown. */\n\tprotected readonly _showCount = computed<boolean>(() => this._inlineMultiple() && this.maxFiles() != null);\n\n\t/** The ids the native input is described by: the constraints hint and the counter. */\n\tprotected readonly _describedBy = computed<string | null>(() => {\n\t\tconst ids = [\n\t\t\tthis.constraintsHint() && this._dropzone() !== 'none' ? `${this.id}-hint` : null,\n\t\t\tthis._showCount() ? `${this.id}-count` : null\n\t\t].filter((id): id is string => id !== null);\n\n\t\treturn ids.length ? ids.join(' ') : null;\n\t});\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.#anchors.set(new Map());\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._canChange()) {\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.#unanchor(id);\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.#anchors.set(new Map());\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. A pick started from a tile's \"Replace\" pill\n\t * swaps that tile's file; any other pick adds.\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\t\tconst files = Array.from(native.files ?? []);\n\t\tconst target = this.#replaceTarget ? this._tiles().find((tile) => tile.key === this.#replaceTarget) : null;\n\n\t\tthis.#replaceTarget = null;\n\n\t\tif (target && files[0]) {\n\t\t\tthis.#replace(target, files[0]);\n\t\t} else {\n\t\t\tthis.#addFiles(files);\n\t\t}\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 field.\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._canChange() || this._atLimit()) {\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 * Opens a picked file: an image enlarged in the viewer, anything else in a new tab. Stored files\n\t * never come through here — their tile is a plain link to their URL.\n\t *\n\t * @param tile - The tile being opened.\n\t * @param event - The click, whose target gets focus back when the viewer closes.\n\t */\n\tprotected openTile(tile: HubFileTile, event: Event): void {\n\t\tif (!tile.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (tile.src) {\n\t\t\tthis.#viewerOpener = event.currentTarget as HTMLElement;\n\t\t\tthis._viewing.set(tile);\n\t\t\tthis.viewer()?.nativeElement.showModal();\n\t\t\treturn;\n\t\t}\n\n\t\tconst url = this.#openUrl(tile.item);\n\n\t\tif (url) {\n\t\t\twindow.open(url, '_blank', 'noopener');\n\t\t}\n\t}\n\n\t/** Closes the enlarged image. */\n\tprotected closeViewer(): void {\n\t\tthis.viewer()?.nativeElement.close();\n\t}\n\n\t/**\n\t * Closes the viewer on a click on its backdrop, which lands on the `<dialog>` itself.\n\t *\n\t * @param event - The click inside the dialog.\n\t */\n\tprotected handleViewerClick(event: MouseEvent): void {\n\t\tif (event.target === this.viewer()?.nativeElement) {\n\t\t\tthis.closeViewer();\n\t\t}\n\t}\n\n\t/**\n\t * Clears the viewer and hands focus back to the tile that opened it. The `close` event covers\n\t * every way out: the close button, the backdrop, and Escape.\n\t */\n\tprotected handleViewerClose(): void {\n\t\tthis._viewing.set(null);\n\t\tthis.#viewerOpener?.focus();\n\t\tthis.#viewerOpener = null;\n\t}\n\n\t/**\n\t * Starts replacing one tile's file: remembers the tile and opens the dialog. The next `change`\n\t * swaps that file in place; a cancelled dialog forgets the tile.\n\t *\n\t * @param tile - The tile whose file is being replaced.\n\t */\n\tprotected replaceTile(tile: HubFileTile): void {\n\t\tif (!this._canChange()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#replaceTarget = tile.key;\n\t\tthis.#armingReplace = true;\n\t\tthis.nativeInput()?.nativeElement.click();\n\t\tthis.#armingReplace = false;\n\t}\n\n\t/** Forgets the pending replacement when the file dialog is dismissed without a pick. */\n\tprotected cancelReplace(): void {\n\t\tthis.#replaceTarget = null;\n\t}\n\n\t/**\n\t * Removes a tile's file — a picked one from the value, a stored one from view, announced through\n\t * {@link currentFileRemoved} — and moves focus to the tile that takes its place, or to the field.\n\t *\n\t * @param tile - The tile to remove.\n\t * @param index - Its position, to find the tile focus moves to.\n\t */\n\tprotected removeTile(tile: HubFileTile, index: number): void {\n\t\tif (!this._canRemove() || tile.item?.status === 'uploading') {\n\t\t\treturn;\n\t\t}\n\n\t\t// The other tiles keep their DOM nodes (`@for` tracks by key), so the one to focus next can be\n\t\t// picked before the removal and is still the same element after it.\n\t\tconst host = this._elementRef.nativeElement as HTMLElement;\n\t\tconst opens = Array.from(host.querySelectorAll<HTMLElement>('.hub-file-input__tile-open'));\n\t\tconst next = opens[index + 1] ?? opens[index - 1] ?? null;\n\n\t\tif (tile.item) {\n\t\t\tthis.remove(tile.item.id);\n\t\t} else if (tile.current) {\n\t\t\tthis.#dismiss(tile.current.url);\n\t\t\tthis.currentFileRemoved.emit(tile.current);\n\t\t}\n\n\t\t(next ?? this.nativeInput()?.nativeElement)?.focus();\n\t}\n\n\t/**\n\t * Delete and Backspace remove the focused tile, the way a chip or a tag is removed in a field.\n\t *\n\t * @param event - The keydown on the tile's open control.\n\t * @param tile - The tile.\n\t * @param index - Its position.\n\t */\n\tprotected handleTileKeydown(event: KeyboardEvent, tile: HubFileTile, index: number): void {\n\t\tif (event.key !== 'Delete' && event.key !== 'Backspace') {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.removeTile(tile, index);\n\t}\n\n\t/**\n\t * Falls back to the image icon when an image does not load — a stored URL that is gone, or a\n\t * guess from `accept` that turned out wrong.\n\t *\n\t * @param src - The URL that failed.\n\t */\n\tprotected markBroken(src: string): void {\n\t\tthis.#broken.update((broken) => new Set(broken).add(src));\n\t}\n\n\t/**\n\t * Keeps a read-only field from opening the file dialog, and tells a plain pick from a replacing\n\t * one. The native input stays enabled so it can still take focus, and a click on it — including\n\t * the one a label forwards — is what opens the dialog.\n\t *\n\t * @param event - The click reaching the native input.\n\t */\n\tprotected guardNativeClick(event: Event): void {\n\t\tif (this.readonly()) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif (!this.#armingReplace) {\n\t\t\tthis.#replaceTarget = null;\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 * A single inline field holds one tile, so a new file replaces it — the stored one included,\n\t * which is then announced as removed. Elsewhere in single mode the incoming file replaces the\n\t * current one, so the constraint checks run against an empty baseline rather than against the\n\t * 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._canChange() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst shown = this._inlineSingle() ? this._tiles()[0] : undefined;\n\n\t\tif (shown) {\n\t\t\tthis.#replace(shown, incoming[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 + (this._inlineMultiple() ? this._currents().length : 0);\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 * Swaps one tile's file for a new one, in place. It is a removal and an addition in one step, so\n\t * it emits what a removal emits — {@link fileRemoved} for a picked file, {@link currentFileRemoved}\n\t * for a stored one — and checks the new file against the constraints as if the old one were gone.\n\t *\n\t * @param tile - The tile being replaced.\n\t * @param file - The file taking its place.\n\t */\n\t#replace(tile: HubFileTile, file: File): void {\n\t\tconst items = this._items();\n\t\tconst others = tile.item ? items.filter((item) => item.id !== tile.item!.id) : items;\n\t\tconst count = this.multiple() ? this._heldCount() - 1 : 0;\n\t\tconst total = others.reduce((sum, item) => sum + item.file.size, 0);\n\t\tconst rejection = this.#reject(file, count, total, new Set(others.map((item) => fileKey(item.file))));\n\n\t\tif (rejection) {\n\t\t\tthis.rejected.emit([rejection]);\n\t\t\tthis.#announce(this.labels().rejection(rejection));\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this.#createItem(file);\n\n\t\tif (tile.item) {\n\t\t\tconst old = tile.item;\n\t\t\tconst anchor = this.#anchors().get(old.id);\n\n\t\t\tthis.#abort(old.id);\n\t\t\tthis.#revokePreview(old);\n\t\t\tthis.#unanchor(old.id);\n\t\t\tthis._items.set(items.map((item) => (item.id === old.id ? next : item)));\n\n\t\t\tif (anchor) {\n\t\t\t\tthis.#anchor(next.id, anchor);\n\t\t\t}\n\n\t\t\tthis.#emitValue();\n\t\t\tthis.fileRemoved.emit(old.file);\n\t\t} else if (tile.current) {\n\t\t\tthis.#dismiss(tile.current.url);\n\t\t\tthis._items.set(this.multiple() ? [...items, next] : [next]);\n\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.#anchor(next.id, tile.current.url);\n\t\t\t}\n\n\t\t\tthis.#emitValue();\n\t\t\tthis.currentFileRemoved.emit(tile.current);\n\t\t}\n\n\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\tthis.#startUpload(next.id);\n\t\t}\n\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\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 * Describes a held item as a tile.\n\t *\n\t * @param item - The held item.\n\t * @returns Its tile.\n\t */\n\t#itemTile(item: HubFileItem): HubFileTile {\n\t\tconst { name, type } = item.file;\n\n\t\treturn this.#tile(`item:${item.id}`, name, fileKind(type, name), item.previewUrl, item, null);\n\t}\n\n\t/**\n\t * Describes a stored file as a tile, guessing its kind from its type, its name or its URL.\n\t *\n\t * @param current - The stored file.\n\t * @returns Its tile.\n\t */\n\t#currentTile(current: HubCurrentFile): HubFileTile {\n\t\t// An explicit name without an extension (\"Signed contract\") says nothing about the type; the\n\t\t// URL may still end in one.\n\t\tconst hint = fileExtension(current.name) ? current.name : urlFileName(current.url);\n\t\tlet kind = fileKind(current.type, hint);\n\t\tlet previewable = isPreviewableImage(current.type, hint);\n\n\t\t// `/api/companies/1/logo` reveals nothing, but in a field that only accepts images the stored\n\t\t// file is one. If the guess is wrong the `<img>` fails and the image icon takes its place.\n\t\tif (kind === 'generic' && acceptsOnlyImages(this.accept())) {\n\t\t\tkind = 'image';\n\t\t\tpreviewable = true;\n\t\t}\n\n\t\t// A stored file with no name — a bare `data:` URL, an opaque API path — is the field's own value,\n\t\t// so it takes the field's label (\"Remove Logo\"); the generic stand-in is for a field with none.\n\t\tconst name = current.name || this.label() || this.labels().currentFile;\n\n\t\treturn this.#tile(`current:${current.url}`, name, kind, previewable ? current.url : null, null, current);\n\t}\n\n\t/**\n\t * Builds a tile, splitting off the extension so the stem alone gives way to the ellipsis, and\n\t * dropping the image when previews are off or it already failed to load.\n\t *\n\t * @param key - The tile's identity.\n\t * @param name - The name to show.\n\t * @param kind - The file family.\n\t * @param src - The image URL, or `null` when there is no image to paint.\n\t * @param item - The held item, if any.\n\t * @param current - The stored file, if any.\n\t * @returns The tile.\n\t */\n\t#tile(\n\t\tkey: string,\n\t\tname: string,\n\t\tkind: HubFileKind,\n\t\tsrc: string | null,\n\t\titem: HubFileItem | null,\n\t\tcurrent: HubCurrentFile | null\n\t): HubFileTile {\n\t\tconst dot = fileExtension(name) ? name.lastIndexOf('.') : -1;\n\t\tconst painted = src && this.imagePreview() && !this.#broken().has(src) ? src : null;\n\n\t\treturn {\n\t\t\tkey,\n\t\t\tname,\n\t\t\tstem: dot > 0 ? name.slice(0, dot) : name,\n\t\t\text: dot > 0 ? name.slice(dot) : '',\n\t\t\tkind,\n\t\t\tsrc: painted,\n\t\t\titem,\n\t\t\tcurrent\n\t\t};\n\t}\n\n\t/**\n\t * Hides a stored file until `currentFile` changes.\n\t *\n\t * @param url - Its URL.\n\t */\n\t#dismiss(url: string): void {\n\t\tthis.#dismissed.update((dismissed) => new Set(dismissed).add(url));\n\t}\n\n\t/**\n\t * Pins a picked file to the place of the stored file it replaced.\n\t *\n\t * @param id - The item id.\n\t * @param url - The stored file's URL.\n\t */\n\t#anchor(id: string, url: string): void {\n\t\tthis.#anchors.update((anchors) => new Map(anchors).set(id, url));\n\t}\n\n\t/**\n\t * Forgets where a picked file was pinned.\n\t *\n\t * @param id - The item id.\n\t */\n\t#unanchor(id: string): void {\n\t\tif (this.#anchors().has(id)) {\n\t\t\tthis.#anchors.update((anchors) => {\n\t\t\t\tconst next = new Map(anchors);\n\n\t\t\t\tnext.delete(id);\n\n\t\t\t\treturn next;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * The URL a picked file opens at in a new tab: its thumbnail's, or one minted now, on demand.\n\t *\n\t * @param item - The held item.\n\t * @returns The URL, or `null` outside a browser.\n\t */\n\t#openUrl(item: HubFileItem): string | null {\n\t\tif (!this.#isBrowser) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet url = item.previewUrl ?? this.#openUrls.get(item.id) ?? null;\n\n\t\tif (!url) {\n\t\t\turl = URL.createObjectURL(item.file);\n\t\t\tthis.#openUrls.set(item.id, url);\n\t\t}\n\n\t\treturn url;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is an image a browser can paint and\n\t * previews are on. HEIC, TIFF and the like are left without one: an `<img>` pointed at them\n\t * renders a broken frame.\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 =\n\t\t\tthis.#isBrowser && this.preview() !== 'none' && this.imagePreview() && isPreviewableImage(file.type, file.name);\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 URLs of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose URLs should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (!this.#isBrowser) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.previewUrl) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\n\t\tconst openUrl = this.#openUrls.get(item.id);\n\n\t\tif (openUrl) {\n\t\t\tURL.revokeObjectURL(openUrl);\n\t\t\tthis.#openUrls.delete(item.id);\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}\\u200b` : 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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\n\n\t<div\n\t\tclass=\"hub-field__body\"\n\t\t[class.hub-file-input__body--inline]=\"_inlineSingle()\"\n\t\t[class.hub-file-input__body--inline-multiple]=\"_inlineMultiple()\"\n\t>\n\t\t<!-- The frame listens for the drag, so a drop lands anywhere on the field, tiles included. -->\n\t\t<div\n\t\t\tclass=\"hub-file-input__frame\"\n\t\t\t[class.hub-file-input__frame--dragover]=\"isDragging()\"\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@if (_dropzone() === 'zone') {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"dropzoneTpl\" [ngTemplateOutletContext]=\"{ $implicit: false }\" />\n\t\t\t}\n\n\t\t\t@if (_tiles().length > 0) {\n\t\t\t\t<ul class=\"hub-file-input__tiles\" [class.hub-file-input__tiles--single]=\"_inlineSingle()\">\n\t\t\t\t\t@for (tile of _tiles(); track tile.key; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-file-input__tile\"\n\t\t\t\t\t\t\t[class.hub-file-input__tile--changeable]=\"_canChange() && tile.item?.status !== 'uploading'\"\n\t\t\t\t\t\t\t[attr.data-file-kind]=\"tile.kind\"\n\t\t\t\t\t\t\t[attr.data-status]=\"tile.item?.status ?? null\"\n\t\t\t\t\t\t\t[attr.title]=\"tile.name\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\tActivating a tile opens its file: a stored one is a link to its URL, in a new tab;\n\t\t\t\t\t\t\t\ta picked image opens enlarged; any other picked file opens in a new tab. Replacing\n\t\t\t\t\t\t\t\thas its own button, the pill, so one gesture never means two things.\n\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t@if (tile.current) {\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-open\"\n\t\t\t\t\t\t\t\t\t[href]=\"tile.current.url\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().open(tile.name)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleTileKeydown($event, tile, index)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tileBodyTpl\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: tile }\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-open\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().open(tile.name)\"\n\t\t\t\t\t\t\t\t\t(click)=\"openTile(tile, $event)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleTileKeydown($event, tile, index)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tileBodyTpl\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: tile }\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (_canChange() && tile.item?.status !== 'uploading') {\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-veil\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-replace\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().replaceFile(tile.name)\"\n\t\t\t\t\t\t\t\t\t(click)=\"replaceTile(tile)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ labels().replace }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (tile.item?.status === 'uploading') {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress hub-file-input__tile-progress\"\n\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"tile.item?.progress === null\"\n\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"tile.item?.progress\"\n\t\t\t\t\t\t\t\t>\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-bar\"\n\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"tile.item?.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (tile.item?.status === 'error') {\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-error\">{{ errorText(tile.item!) }}</span>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-actions\">\n\t\t\t\t\t\t\t\t@if (tile.item?.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t@if (hasUploader) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--cancel\"\n\t\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\t(click)=\"cancel(tile.item!.id)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@if (tile.item?.status === 'error') {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--retry\"\n\t\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\t(click)=\"retry(tile.item!.id)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (_canRemove()) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--remove\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().removeFile(tile.name)\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"removeTile(tile, index)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\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</li>\n\t\t\t\t\t}\n\n\t\t\t\t\t@if (_dropzone() === 'add') {\n\t\t\t\t\t\t<li class=\"hub-file-input__tile hub-file-input__tile--add\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"dropzoneTpl\" [ngTemplateOutletContext]=\"{ $implicit: true }\" />\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\t@if (_isInline()) {\n\t\t\t\t<!--\n\t\t\t\t\tInline keeps the native input out of the label, after the tiles: it is never re-created\n\t\t\t\t\twhen the field fills or empties, focus can always return to it, and its place in the tab\n\t\t\t\t\torder is the add tile's.\n\t\t\t\t-->\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"nativeTpl\" />\n\t\t\t}\n\n\t\t\t@if (_showCount()) {\n\t\t\t\t<p class=\"hub-file-input__count\" [id]=\"id + '-count'\">{{ labels().count(_heldCount(), maxFiles()!) }}</p>\n\t\t\t}\n\t\t</div>\n\n\t\t@if (_listPreview() && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"_listPreview() === '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 (_canRemove() && 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 && _canRemove()) {\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 (!showsFormTextTooltip() && (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\n\t<!--\n\t\tThe enlarged image. A native modal <dialog> does the hard parts: Escape closes it, the page\n\t\tbehind turns inert so focus stays inside, and it sits in the top layer above any stacking\n\t\tcontext. Focus goes back to the tile on close, whichever way it closes.\n\t-->\n\t<dialog\n\t\t#viewer\n\t\tclass=\"hub-file-input__viewer\"\n\t\t[attr.aria-label]=\"_viewing()?.name ?? null\"\n\t\t(close)=\"handleViewerClose()\"\n\t\t(click)=\"handleViewerClick($event)\"\n\t>\n\t\t@if (_viewing(); as viewing) {\n\t\t\t<figure class=\"hub-file-input__viewer-figure\">\n\t\t\t\t<img class=\"hub-file-input__viewer-image\" [src]=\"viewing.src\" [alt]=\"viewing.name\" />\n\t\t\t\t<figcaption class=\"hub-file-input__viewer-caption\">{{ viewing.name }}</figcaption>\n\t\t\t</figure>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--close\"\n\t\t\t[attr.aria-label]=\"labels().close\"\n\t\t\t(click)=\"closeViewer()\"\n\t\t\tautofocus\n\t\t></button>\n\t</dialog>\n</div>\n\n<!--\n\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with the\n\tkeyboard opens the file dialog through the platform, so no role, tabindex or key handler is\n\tneeded. The \"browse\" affordance is a <span>, not a <button>, because a button inside a label would\n\topen the dialog twice. As the add tile it keeps only the glyph and the browse text.\n-->\n<ng-template #dropzoneTpl let-add>\n\t<label\n\t\tclass=\"hub-file-input__dropzone\"\n\t\t[for]=\"id\"\n\t\t[class.hub-file-input__dropzone--add]=\"add\"\n\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t[class.hub-file-input__dropzone--readonly]=\"readonly()\"\n\t>\n\t\t@if (!_isInline()) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"nativeTpl\" />\n\t\t}\n\n\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t@if (add) {\n\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t} @else {\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\t\t}\n\n\t\t@if (constraintsHint()) {\n\t\t\t<span class=\"hub-file-input__hint\" [class.hub-file-input__hint--hidden]=\"add\" [id]=\"id + '-hint'\">{{\n\t\t\t\tconstraintsHint()\n\t\t\t}}</span>\n\t\t}\n\t</label>\n</ng-template>\n\n<ng-template #nativeTpl>\n\t<input\n\t\t#nativeInput\n\t\ttype=\"file\"\n\t\tclass=\"hub-file-input__native\"\n\t\t[id]=\"id\"\n\t\t[accept]=\"accept()\"\n\t\t[multiple]=\"multiple()\"\n\t\t[disabled]=\"disabled()\"\n\t\t[attr.capture]=\"capture()\"\n\t\t[attr.tabindex]=\"_dropzone() === 'none' ? -1 : null\"\n\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t[attr.aria-describedby]=\"_describedBy()\"\n\t\t(click)=\"guardNativeClick($event)\"\n\t\t(cancel)=\"cancelReplace()\"\n\t\t(change)=\"handleNativeChange($event)\"\n\t\t(blur)=\"handleBlur($event)\"\n\t/>\n</ng-template>\n\n<ng-template #tileBodyTpl let-tile>\n\t@if (tile.src) {\n\t\t<img class=\"hub-file-input__tile-image\" [src]=\"tile.src\" alt=\"\" (error)=\"markBroken(tile.src)\" />\n\t} @else {\n\t\t<span class=\"hub-file-input__tile-file\">\n\t\t\t<span class=\"hub-file-input__kind-icon\" aria-hidden=\"true\"></span>\n\t\t\t<span class=\"hub-file-input__tile-name\">\n\t\t\t\t<span class=\"hub-file-input__tile-stem\">{{ tile.stem }}</span>\n\t\t\t\t@if (tile.ext) {\n\t\t\t\t\t<span class=\"hub-file-input__tile-ext\">{{ tile.ext }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t</span>\n\t}\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { HubRgb, parseColor, readableOn, toHex } from 'ng-hub-ui-utils';\n\n/**\n * Inverts a colour, 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 color - Any CSS colour: hex (3/4/6/8 digits, `#` optional), `rgb()`, `hsl()`,\n\t * `oklch()`, `oklab()` or a named colour.\n\t * @param bw - When `true`, returns the black or white that reads best on `color`.\n\t * @param metric - How `bw` decides. `'lightness'` (default) matches the\n\t * `--hub-sys-color-*-on` design-system token; `'apca'` and `'wcag'` score the two\n\t * candidates instead.\n\t * @returns The inverted (or contrasting) colour as a hex string, or `#000000` when the\n\t * input is empty or is not a colour this can resolve.\n\t */\n\ttransform(color: string, bw: boolean = false, metric: 'lightness' | 'apca' | 'wcag' = 'lightness'): string {\n\t\tconst rgb = this.resolve(color);\n\t\tif (!rgb) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (bw) {\n\t\t\treturn readableOn(rgb, metric);\n\t\t}\n\n\t\treturn toHex({ r: 255 - rgb.r, g: 255 - rgb.g, b: 255 - rgb.b, a: rgb.a })!;\n\t}\n\n\t/**\n\t * Resolves the input, retrying with a `#` prefix so bare hex digits keep working — the\n\t * pipe has accepted `'336699'` since it shipped and consumers rely on it.\n\t */\n\tprivate resolve(color: string): HubRgb | null {\n\t\tif (!color) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parseColor(color) ?? parseColor(`#${color}`);\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 slots\nexport {\n\tHubSelectOptionDirective,\n\tHubSelectOptgroupDirective,\n\tHubSelectLabelDirective,\n\tHubSelectMultiLabelDirective,\n\tHubSelectHeaderDirective,\n\tHubSelectFooterDirective,\n\tHubSelectNotFoundDirective,\n\tHubSelectTypeToSearchDirective,\n\tHubSelectLoadingTextDirective,\n\tHubSelectLoadingSpinnerDirective,\n\tHubSelectTagDirective,\n\tHubSelectClearButtonDirective\n} from './lib/select/select-templates.directive';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\n\n/**\n * @deprecated Use `<hub-select>` with `[items]` (or the `hubSelect*` slots) instead. `<ng-option>`\n * belongs to the vendored ng-select engine, an internal detail this package re-syncs from upstream.\n * Removed in 23.0.0.\n */\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\n\n/**\n * @deprecated Use the `hubSelect*` slot directives above. These are the vendored ng-select\n * attributes (`ng-option-tmp` and friends) and name an internal dependency, not this library's API.\n * Each has a one-to-one replacement — `ng-option-tmp` → `hubSelectOption`, `ng-label-tmp` →\n * `hubSelectLabel`, and so on, with the same template context. They keep working until they are\n * removed in 23.0.0.\n */\nexport {\n\t/** @deprecated Use `HubSelectOptionDirective` (`[hubSelectOption]`). Removed in 23.0.0. */\n\tNgOptionTemplateDirective,\n\t/** @deprecated Use `HubSelectOptgroupDirective` (`[hubSelectOptgroup]`). Removed in 23.0.0. */\n\tNgOptgroupTemplateDirective,\n\t/** @deprecated Use `HubSelectLabelDirective` (`[hubSelectLabel]`). Removed in 23.0.0. */\n\tNgLabelTemplateDirective,\n\t/** @deprecated Use `HubSelectMultiLabelDirective` (`[hubSelectMultiLabel]`). Removed in 23.0.0. */\n\tNgMultiLabelTemplateDirective,\n\t/** @deprecated Use `HubSelectHeaderDirective` (`[hubSelectHeader]`). Removed in 23.0.0. */\n\tNgHeaderTemplateDirective,\n\t/** @deprecated Use `HubSelectFooterDirective` (`[hubSelectFooter]`). Removed in 23.0.0. */\n\tNgFooterTemplateDirective,\n\t/** @deprecated Use `HubSelectNotFoundDirective` (`[hubSelectNotFound]`). Removed in 23.0.0. */\n\tNgNotFoundTemplateDirective,\n\t/** @deprecated Use `HubSelectTypeToSearchDirective` (`[hubSelectTypeToSearch]`). Removed in 23.0.0. */\n\tNgTypeToSearchTemplateDirective,\n\t/** @deprecated Use `HubSelectLoadingTextDirective` (`[hubSelectLoadingText]`). Removed in 23.0.0. */\n\tNgLoadingTextTemplateDirective,\n\t/** @deprecated Use `HubSelectLoadingSpinnerDirective` (`[hubSelectLoadingSpinner]`). Removed in 23.0.0. */\n\tNgLoadingSpinnerTemplateDirective,\n\t/** @deprecated Use `HubSelectTagDirective` (`[hubSelectTag]`). Removed in 23.0.0. */\n\tNgTagTemplateDirective,\n\t/** @deprecated Use `HubSelectClearButtonDirective` (`[hubSelectClearButton]`). Removed in 23.0.0. */\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 {\n\tHubColorConfig,\n\tHubColorPaletteName,\n\tHubColorSwatch,\n\tHubColorSwatchInput,\n\tHubInputFormat,\n\tHubPasswordLabels,\n\tHubPasswordStrengthScore\n} from './lib/interfaces/input.interface';\nexport {\n\tHUB_COLOR_PALETTES,\n\tHubInputFormats,\n\tdefaultHubColorConfig,\n\tdefaultHubPasswordLabels\n} 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\tHubCurrentFile,\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 { fileKind } from './lib/utils/file-kind';\nexport type { HubFileKind } from './lib/utils/file-kind';\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"],"mappings":"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AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;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,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,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EA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"}
|
|
1
|
+
{"version":3,"file":"ng-hub-ui-forms.mjs","sources":["../../../projects/forms/src/lib/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/interfaces/common.interface.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/utils/utils.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/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/legend/legend.component.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/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-templates.directive.ts","../../../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-kind.ts","../../../projects/forms/src/lib/utils/current-file.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 { 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';\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. An inline\n\t\t// `required` alongside a reactive control is silently overridden by the\n\t\t// validators — documented behaviour, said in the README rather than written\n\t\t// into the console of an application this library does not own.\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\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","/**\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 *\n * `visually-hidden` is the one that is not a placement: the label is rendered and stays\n * bound to the control, so it is announced, but it is clipped out of the page. It exists\n * because the alternative a design without room for a label leaves is a control with no\n * accessible name at all — a toolbar search box, a compact grid cell — and a placeholder\n * is not a name.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal' | 'visually-hidden';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal',\n\tVisuallyHidden = 'visually-hidden'\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/**\n * How the held files are previewed: not at all, as a list below the dropzone, as tiles below it\n * (`grid`), or as tiles inside the field (`inline`) — one tile filling the field, the shape a logo,\n * an avatar or a single document takes, or with `multiple` a grid ending in an add tile. Only\n * `inline` shows the files a record already has, through `currentFile`.\n */\nexport type HubFilePreview = 'none' | 'list' | 'grid' | 'inline';\n\n/**\n * A file the record already has on the server, shown by `preview=\"inline\"` while nothing is picked.\n *\n * Only `url` is required. `name` and `type` are for the cases where the URL does not reveal them —\n * `/api/contracts/42/file` says nothing about being a PDF called `contract.pdf`. When they are\n * missing, the name is taken from the URL's last segment if it carries an extension, and the MIME\n * type from a `data:` URL.\n */\nexport interface HubCurrentFile {\n\t/** Where the file lives: a URL, a `data:` URL or an object URL. Rendered as the image when it is one. */\n\turl: string;\n\t/** The file name shown in the field and read out by assistive technology. */\n\tname?: string | null;\n\t/** The MIME type, e.g. `application/pdf`. Picks the icon when the file is not an image. */\n\ttype?: string | null;\n}\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/**\n\t * Accessible name of the button that removes the file shown by `preview=\"inline\"`. It names the\n\t * file because the button sits over it, and \"Remove file\" alone would not say which one.\n\t */\n\tremoveFile: (name: string) => string;\n\t/** Accessible name of the control that opens a tile's file — enlarged, or in a new tab. */\n\topen: (name: string) => string;\n\t/** Visible text of the pill that replaces one tile's file. */\n\treplace: string;\n\t/** Accessible name of that pill, naming the file it replaces. */\n\treplaceFile: (name: string) => string;\n\t/** Accessible name of the button that closes the enlarged image. */\n\tclose: string;\n\t/** The file counter shown with `maxFiles`: how many files the field holds out of how many it takes. */\n\tcount: (count: number, max: number) => string;\n\t/** Stand-in name for a stored file whose name neither `currentFile` nor its URL gives. */\n\tcurrentFile: 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\tremoveFile: (name: string) => `Remove ${name}`,\n\topen: (name: string) => `Open ${name}`,\n\treplace: 'Replace',\n\treplaceFile: (name: string) => `Replace ${name}`,\n\tclose: 'Close',\n\tcount: (count: number, max: number) => `${count} of ${max} files`,\n\tcurrentFile: 'Current 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/**\n * A preset colour offered by the `color` format of `<hub-input>` through its `swatches` input.\n *\n * `value` is what the control receives, verbatim, when the swatch is picked — keep it in the\n * format the form stores. `label` is the name a screen reader announces and the tooltip shows;\n * without it the value itself is announced, which is fine for `#ff0000` and useless for a brand\n * palette, so name the swatches whenever the colour has a name.\n */\nexport interface HubColorSwatch {\n\t/** The colour written to the control verbatim: any CSS colour the parser reads (`#7c3aed`, `rgb(…)`, `hsl(…)`, `oklch(…)`, a keyword). */\n\tvalue: string;\n\t/** Readable name of the colour; falls back to `value`. */\n\tlabel?: string;\n}\n\n/** A swatch as `swatches` accepts it: a bare colour string, or a {@link HubColorSwatch} to give it a name. */\nexport type HubColorSwatchInput = string | HubColorSwatch;\n\n/**\n * Application-wide settings of the `color` format of `<hub-input>`.\n *\n * Set them through {@link provideHubForms}; a field's own `swatches` and `customColorLabel` inputs\n * still win.\n */\nexport interface HubColorConfig {\n\t/**\n\t * The palette a colour field draws when it is given no `swatches` of its own; empty by default,\n\t * which leaves those fields on the native picker. Concrete colours only: whatever is picked is\n\t * written to the form, so it has to be a value that can be stored — never a `var(--hub-…)`,\n\t * which means nothing outside the page that set it. {@link HUB_COLOR_PALETTES} has some ready.\n\t */\n\tswatches: ReadonlyArray<HubColorSwatchInput>;\n\t/** Accessible name of the last swatch, the one that opens the native picker for a colour not in the list. */\n\tcustomColorLabel: string;\n\t/**\n\t * Accessible name of the colour square of the classic picker (no palette), the button that opens\n\t * the native picker. The field's label already names the hex text beside it.\n\t */\n\tpickerLabel: string;\n}\n\n/** Name of a palette in {@link HUB_COLOR_PALETTES}. */\nexport type HubColorPaletteName = 'tailwind' | 'material' | 'pastel' | 'neutral' | 'status';\n\n/**\n * Freezes a palette and each of its swatches. The palettes are shared by every consumer of the\n * library, so one app pushing to or relabelling a list must not repaint it for the rest.\n *\n * @param swatches - The palette's swatches, in display order.\n * @returns The same swatches, frozen.\n */\nfunction freezePalette(swatches: HubColorSwatch[]): ReadonlyArray<Readonly<HubColorSwatch>> {\n\treturn Object.freeze(swatches.map((swatch) => Object.freeze(swatch)));\n}\n\n/**\n * Ready-made colour lists for the `swatches` input of `<hub-input type=\"color\">`, or for the\n * application palette in `provideHubForms({ color: { swatches } })`.\n *\n * Every value is a lowercase sRGB hex, so the stored value opens in the native picker unchanged and\n * the grid can work out which ink reads on it. Every swatch carries an English name for screen\n * readers; map the list to relabel it in another language.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"status\" type=\"color\" [swatches]=\"palettes.status\" [allowCustomColor]=\"false\" />\n * ```\n */\nexport const HUB_COLOR_PALETTES: Readonly<Record<HubColorPaletteName, ReadonlyArray<Readonly<HubColorSwatch>>>> = Object.freeze(\n\t{\n\t\t/**\n\t\t * Source: Tailwind CSS v3, the 500 step for sixteen hues plus slate. That step sits mid-way in\n\t\t * lightness on every ramp, so no colour shouts over the others; `rose` is left out as too close\n\t\t * to red and pink to tell apart as a swatch.\n\t\t */\n\t\ttailwind: freezePalette([\n\t\t\t{ value: '#ef4444', label: 'Red' },\n\t\t\t{ value: '#f97316', label: 'Orange' },\n\t\t\t{ value: '#f59e0b', label: 'Amber' },\n\t\t\t{ value: '#eab308', label: 'Yellow' },\n\t\t\t{ value: '#84cc16', label: 'Lime' },\n\t\t\t{ value: '#22c55e', label: 'Green' },\n\t\t\t{ value: '#10b981', label: 'Emerald' },\n\t\t\t{ value: '#14b8a6', label: 'Teal' },\n\t\t\t{ value: '#06b6d4', label: 'Cyan' },\n\t\t\t{ value: '#0ea5e9', label: 'Sky' },\n\t\t\t{ value: '#3b82f6', label: 'Blue' },\n\t\t\t{ value: '#6366f1', label: 'Indigo' },\n\t\t\t{ value: '#8b5cf6', label: 'Violet' },\n\t\t\t{ value: '#a855f7', label: 'Purple' },\n\t\t\t{ value: '#d946ef', label: 'Fuchsia' },\n\t\t\t{ value: '#ec4899', label: 'Pink' },\n\t\t\t{ value: '#64748b', label: 'Slate' }\n\t\t]),\n\t\t/** Source: Material Design 2014 colour system, the 500 tone of each of its nineteen hues. */\n\t\tmaterial: freezePalette([\n\t\t\t{ value: '#f44336', label: 'Red' },\n\t\t\t{ value: '#e91e63', label: 'Pink' },\n\t\t\t{ value: '#9c27b0', label: 'Purple' },\n\t\t\t{ value: '#673ab7', label: 'Deep purple' },\n\t\t\t{ value: '#3f51b5', label: 'Indigo' },\n\t\t\t{ value: '#2196f3', label: 'Blue' },\n\t\t\t{ value: '#03a9f4', label: 'Light blue' },\n\t\t\t{ value: '#00bcd4', label: 'Cyan' },\n\t\t\t{ value: '#009688', label: 'Teal' },\n\t\t\t{ value: '#4caf50', label: 'Green' },\n\t\t\t{ value: '#8bc34a', label: 'Light green' },\n\t\t\t{ value: '#cddc39', label: 'Lime' },\n\t\t\t{ value: '#ffeb3b', label: 'Yellow' },\n\t\t\t{ value: '#ffc107', label: 'Amber' },\n\t\t\t{ value: '#ff9800', label: 'Orange' },\n\t\t\t{ value: '#ff5722', label: 'Deep orange' },\n\t\t\t{ value: '#795548', label: 'Brown' },\n\t\t\t{ value: '#9e9e9e', label: 'Grey' },\n\t\t\t{ value: '#607d8b', label: 'Blue grey' }\n\t\t]),\n\t\t/**\n\t\t * Source: Tailwind CSS v3, the 200 step of the same hues as `tailwind`. Light enough that the\n\t\t * check mark is drawn dark on every one.\n\t\t */\n\t\tpastel: freezePalette([\n\t\t\t{ value: '#fecaca', label: 'Pastel red' },\n\t\t\t{ value: '#fed7aa', label: 'Pastel orange' },\n\t\t\t{ value: '#fde68a', label: 'Pastel amber' },\n\t\t\t{ value: '#fef08a', label: 'Pastel yellow' },\n\t\t\t{ value: '#d9f99d', label: 'Pastel lime' },\n\t\t\t{ value: '#bbf7d0', label: 'Pastel green' },\n\t\t\t{ value: '#a7f3d0', label: 'Pastel emerald' },\n\t\t\t{ value: '#99f6e4', label: 'Pastel teal' },\n\t\t\t{ value: '#a5f3fc', label: 'Pastel cyan' },\n\t\t\t{ value: '#bae6fd', label: 'Pastel sky' },\n\t\t\t{ value: '#bfdbfe', label: 'Pastel blue' },\n\t\t\t{ value: '#c7d2fe', label: 'Pastel indigo' },\n\t\t\t{ value: '#ddd6fe', label: 'Pastel violet' },\n\t\t\t{ value: '#e9d5ff', label: 'Pastel purple' },\n\t\t\t{ value: '#f5d0fe', label: 'Pastel fuchsia' },\n\t\t\t{ value: '#fbcfe8', label: 'Pastel pink' },\n\t\t\t{ value: '#e2e8f0', label: 'Pastel slate' }\n\t\t]),\n\t\t/** Source: Tailwind CSS v3 `neutral` ramp, 50 to 950: a pure grey from near-white to near-black. */\n\t\tneutral: freezePalette([\n\t\t\t{ value: '#fafafa', label: 'Grey 50' },\n\t\t\t{ value: '#f5f5f5', label: 'Grey 100' },\n\t\t\t{ value: '#e5e5e5', label: 'Grey 200' },\n\t\t\t{ value: '#d4d4d4', label: 'Grey 300' },\n\t\t\t{ value: '#a3a3a3', label: 'Grey 400' },\n\t\t\t{ value: '#737373', label: 'Grey 500' },\n\t\t\t{ value: '#525252', label: 'Grey 600' },\n\t\t\t{ value: '#404040', label: 'Grey 700' },\n\t\t\t{ value: '#262626', label: 'Grey 800' },\n\t\t\t{ value: '#171717', label: 'Grey 900' },\n\t\t\t{ value: '#0a0a0a', label: 'Grey 950' }\n\t\t]),\n\t\t/**\n\t\t * Source: Tailwind CSS v3 — green, red and blue at 600, amber and slate at 500. The darker\n\t\t * step keeps the three alarm colours apart from the pale amber; amber-600 would read orange.\n\t\t */\n\t\tstatus: freezePalette([\n\t\t\t{ value: '#16a34a', label: 'Success' },\n\t\t\t{ value: '#f59e0b', label: 'Warning' },\n\t\t\t{ value: '#dc2626', label: 'Danger' },\n\t\t\t{ value: '#2563eb', label: 'Info' },\n\t\t\t{ value: '#64748b', label: 'Neutral' }\n\t\t])\n\t}\n);\n\n/**\n * Built-in colour settings. No application palette: a colour field without `swatches` of its own\n * stays the native picker, as it always was. Set one with\n * `provideHubForms({ color: { swatches: HUB_COLOR_PALETTES.tailwind } })`.\n */\nexport const defaultHubColorConfig: HubColorConfig = {\n\tswatches: [],\n\tcustomColorLabel: 'Custom color',\n\tpickerLabel: 'Choose color'\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 {\n\tdefaultHubColorConfig,\n\tdefaultHubPasswordLabels,\n\tHubColorConfig,\n\tHubPasswordLabels\n} 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\t/**\n\t * Global colour settings: an application palette for colour fields without `swatches` of their\n\t * own (none by default, so they stay the classic hex field), and the accessible names of the\n\t * grid's custom-colour swatch and of the classic field's colour square.\n\t */\n\tcolor: HubColorConfig;\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\tcolor: defaultHubColorConfig\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\tconst color: HubColorConfig = {\n\t\t...defaultHubFormsConfig.color,\n\t\t...(config?.color as Partial<HubColorConfig> | 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, color } 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 { 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 the global document when there\n * is one; on a server render there is not, and nothing has focus there anyway.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot | null = globalThis.document ?? null): 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 {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\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 { FormTextType, FormTextTypes } from '../interfaces/common.interface';\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/** Helper text for the field. Where it is shown is {@link formTextType}'s business. */\n\treadonly formText = input<string>('');\n\n\t/**\n\t * Where the helper text is shown: under the control (`bottom`, the default) or behind\n\t * a question mark at the end of the label row (`tooltip`).\n\t *\n\t * The rule the product settled on: one sentence goes below, where it is read without\n\t * being asked for; anything longer goes in the tooltip, because a paragraph under\n\t * every field turns a form into a document and pushes the next field off the screen.\n\t */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\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\t/**\n\t * Whether the helper text is carried by the label-row trigger instead of the block\n\t * below the control.\n\t *\n\t * Gated on `formText()` having content, and that is the whole reason a projected\n\t * `hubFormText` template still renders below in tooltip mode: the tooltip takes a\n\t * string, so asking it to carry markup would drop the markup silently. A field with\n\t * a template keeps its helper text where the template can actually be shown.\n\t */\n\tprotected readonly showsFormTextTooltip = computed(\n\t\t() => this.formTextType() === FormTextTypes.Tooltip && !!this.formText()\n\t);\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","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 opens straight into the dropdown 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 opens straight into the dropdown engine, and the input\n * 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\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tlinkedSignal,\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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tdefaultHubColorConfig,\n\tHubColorSwatchInput,\n\tHubInputFormat,\n\tHubInputFormats,\n\tHubPasswordStrengthScore\n} 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';\nimport { HubTooltipDirective, parseColor, readableOn, toHex } from 'ng-hub-ui-utils';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/** A swatch as the template draws it: normalized once, so the view never re-derives it per check. */\ninterface HubResolvedSwatch {\n\t/** The colour written to the control, verbatim. */\n\tvalue: string;\n\t/** Accessible name: the given label, or the value. */\n\tlabel: string;\n\t/** Comparison key, so `#7C3AED`, `#7c3aed` and `rgb(124 58 237)` count as the same colour. */\n\tkey: string;\n\t/** Colour of the selection mark on this swatch (`#000000` or `#ffffff`). */\n\tink: string;\n}\n\n/** Hex colour as a person types it: optional `#`, then 3 or 6 digits, any case. */\nconst HEX_TEXT = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/**\n * Normalises typed hex to lowercase `#rrggbb`, the only notation `<input type=\"color\">` accepts,\n * so what the text field writes to the form is also what the picker can open on.\n *\n * @param text - Text from the hex field.\n * @returns The normalised colour, or `null` when the text is not a hex colour (yet).\n */\nfunction normalizeHexText(text: string): string | null {\n\tconst digits = HEX_TEXT.exec(text.trim())?.[1];\n\n\tif (!digits) {\n\t\treturn null;\n\t}\n\n\tconst full = digits.length === 3 ? [...digits].map((digit) => digit + digit).join('') : digits;\n\treturn `#${full.toLowerCase()}`;\n}\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`. The `color` format is a hex text field with the colour in a square at its\n * start that opens the browser's native picker; given a palette (per field, or for the whole\n * application) it becomes a radio group of colour swatches the size of a field, ending in a cell that\n * opens the native picker. 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, HubTooltipDirective],\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 _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/**\n\t * Render the value as plain text, with no field styling around it.\n\t *\n\t * For the value that belongs in a form but is not the reader's to change: a figure\n\t * the server settled, a field a plan has locked, the whole of a record shown for\n\t * consultation. It stays a real `<input>` — so the label keeps pointing at a control\n\t * and the text stays selectable — and only loses the box, which on something that\n\t * refuses input was a promise it could not keep.\n\t *\n\t * Implies `readonly`: a field with no box that still accepted typing would be an\n\t * invisible input.\n\t */\n\treadonly plaintext = input(false, { transform: booleanAttribute });\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/**\n\t * Mixed state of a `checkbox`: neither on nor off, the answer a \"select all\"\n\t * gives while only some of its children are selected.\n\t *\n\t * It is two-way because the reader resolves it: clicking a mixed checkbox picks\n\t * a side, so the model clears itself and the caller hears about it. The `switch`\n\t * format ignores it — a switch is on or off, and ARIA gives it no third state.\n\t */\n\treadonly indeterminate = model(false);\n\n\t/** Mixed state as the native checkbox should actually receive it. */\n\tprotected readonly isIndeterminate = computed<boolean>(\n\t\t() => this.indeterminate() && this.type() === this._inputFormats.Checkbox\n\t);\n\n\t/**\n\t * Read-only as the control actually behaves, which is what the template binds to.\n\t *\n\t * `plaintext` implies it, so the two never have to be passed together and cannot be\n\t * passed in disagreement.\n\t */\n\tprotected readonly _isReadonly = computed<boolean>(() => this.readonly() || this.plaintext());\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._isReadonly() && 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/**\n\t * Colours offered by the `color` format. With any, the field is a grid of swatches the size of a\n\t * field instead of the native picker; `HUB_COLOR_PALETTES` has some ready.\n\t *\n\t * Any CSS colour the parser reads (`#7c3aed`, `rgb(…)`, `hsl(…)`, `oklch(…)`, a keyword), bare or\n\t * as `{ value, label }` to give it a name a screen reader can say. The control receives the string\n\t * exactly as given. An entry that is not a colour is dropped, with a warning in development.\n\t * `null` — the default — takes the application palette from `provideHubForms({ color })`, and\n\t * with none set, the native picker. `[]` asks for the native picker even under an app palette.\n\t */\n\treadonly swatches = input<ReadonlyArray<HubColorSwatchInput> | null>(null);\n\n\t/**\n\t * Whether the swatch grid ends with a cell that opens the native picker, for a colour that is\n\t * not in the list.\n\t *\n\t * On by default because the `color` format has always accepted any colour: a palette should\n\t * shorten the common case, not quietly narrow what the field can hold — and a value saved\n\t * before the palette changed needs somewhere to show as selected. Turn it off for a closed\n\t * palette (label colours, brand colours), where only the listed values are valid.\n\t */\n\treadonly allowCustomColor = input(true, { transform: booleanAttribute });\n\n\t/** Accessible name of the custom-colour swatch. Falls back to the global `color.customColorLabel`. */\n\treadonly customColorLabel = input<string>('');\n\n\t/** Global colour settings; guarded because a hand-provided `HUB_FORMS_CONFIG` may predate them. */\n\treadonly #colorConfig = inject(HUB_FORMS_CONFIG).color ?? defaultHubColorConfig;\n\n\t/**\n\t * Whether the colour format draws the swatch grid rather than the native picker: only when a\n\t * palette is in force and at least one of its entries is a colour. A grid of nothing but the\n\t * custom cell would be the native picker with extra steps, so an empty or all-invalid list keeps\n\t * the classic control.\n\t */\n\tprotected readonly showsSwatches = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Color && this._swatches().length > 0\n\t);\n\n\t/**\n\t * The palette in force, normalized for the template. Entries the colour parser cannot read are\n\t * dropped here: a swatch has to be a colour the form can store and the mark's ink can be worked\n\t * out for, and a `var(--brand)` is neither once it leaves the page that defined it.\n\t */\n\tprotected readonly _swatches = computed<HubResolvedSwatch[]>(() => {\n\t\tconst resolved: HubResolvedSwatch[] = [];\n\n\t\tfor (const swatch of this.swatches() ?? this.#colorConfig.swatches) {\n\t\t\tconst value = typeof swatch === 'string' ? swatch : swatch?.value;\n\n\t\t\tif (typeof value !== 'string' || !parseColor(value)) {\n\t\t\t\tif (isDevMode()) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[ng-hub-ui-forms] hub-input: ignoring swatch ${JSON.stringify(value ?? swatch)}, which is not a CSS colour.`\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 label = (typeof swatch === 'string' ? '' : swatch.label) || value;\n\t\t\tresolved.push({ value, label, key: this.#colorKey(value), ink: readableOn(value) });\n\t\t}\n\n\t\treturn resolved;\n\t});\n\n\t/**\n\t * Index of the checked cell: a preset, the custom cell (`swatches.length`) when the value is any\n\t * other colour and custom colours are allowed, or `-1` when nothing is checked — which includes a\n\t * value that is not a colour at all, since no cell could honestly show it.\n\t */\n\tprotected readonly checkedSwatch = computed<number>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !parseColor(value)) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst key = this.#colorKey(value);\n\t\tconst index = this._swatches().findIndex((swatch) => swatch.key === key);\n\n\t\tif (index >= 0) {\n\t\t\treturn index;\n\t\t}\n\n\t\treturn this.allowCustomColor() ? this._swatches().length : -1;\n\t});\n\n\t/** Whether the custom cell holds the current value. */\n\tprotected readonly customChecked = computed<boolean>(\n\t\t() => this.allowCustomColor() && this.checkedSwatch() === this._swatches().length\n\t);\n\n\t/** The current value while it is a custom colour, for the custom cell's fill; empty otherwise. */\n\tprotected readonly customValue = computed<string>(() => (this.customChecked() ? String(this._value()) : ''));\n\n\t/** Ink of the selection mark on the custom cell, which only has a mark while it holds a colour. */\n\tprotected readonly customInk = computed<string | null>(() => (this.customValue() ? readableOn(this.customValue()) : null));\n\n\t/** Accessible name of the custom cell, carrying the colour once it holds one. */\n\tprotected readonly customSwatchName = computed<string>(() => {\n\t\tconst label = this.customColorLabel() || this.#colorConfig.customColorLabel;\n\t\treturn this.customValue() ? `${label} ${this.customValue()}` : label;\n\t});\n\n\t/** The native picker only speaks `#rrggbb`; anything it cannot show opens it on black. */\n\tprotected readonly customHex = computed<string>(() => (toHex(this.customValue()) ?? '#000000').slice(0, 7));\n\n\t/** The cell Tab lands on — the checked one, or the first when none is (roving tabindex). */\n\tprotected readonly tabbableSwatch = computed<number>(() => Math.max(this.checkedSwatch(), 0));\n\n\t/** Whether the swatches wrapped onto more than one row, which drops the field box. */\n\tprotected readonly swatchesWrapped = signal(false);\n\n\t/** The swatch radio group, observed for wrapping. */\n\tprotected readonly swatchList = viewChild<ElementRef<HTMLElement>>('swatchList');\n\n\t/** The native picker behind the custom cell. */\n\tprotected readonly customColorInput = viewChild<ElementRef<HTMLInputElement>>('customColorInput');\n\n\t/** The native picker under the square of the classic colour field. */\n\tprotected readonly classicColorInput = viewChild<ElementRef<HTMLInputElement>>('classicColorInput');\n\n\t/**\n\t * Accessible name of the classic field's colour square. Read with a fallback because a\n\t * hand-provided colour config may predate it.\n\t */\n\tprotected readonly pickerLabel = this.#colorConfig.pickerLabel ?? defaultHubColorConfig.pickerLabel;\n\n\t/**\n\t * The value as lowercase `#rrggbb`, for the classic field's square, text and native picker; empty\n\t * when the value is not a colour. Values in other notations (`rgb(…)`, a keyword) are converted,\n\t * since the native picker only speaks hex.\n\t */\n\tprotected readonly classicHex = computed<string>(() => {\n\t\tconst value = this._value();\n\n\t\tif (typeof value !== 'string' || !value) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn normalizeHexText(value) ?? toHex(value)?.slice(0, 7).toLowerCase() ?? '';\n\t});\n\n\t/**\n\t * What the classic field's hex text shows. It follows the value, except while the text already\n\t * spells that same colour: typing `#abc` writes `#aabbcc` to the form, and rewriting the text\n\t * then would break the next keystroke. Blur settles it back to the normalised value.\n\t */\n\tprotected readonly colorText = linkedSignal<string, string>({\n\t\tsource: this.classicHex,\n\t\tcomputation: (hex, previous) => (previous && normalizeHexText(previous.value) === hex ? previous.value : hex)\n\t});\n\n\t/** Watches the swatch list's size; created lazily, only in a browser that has one. */\n\t#swatchObserver: ResizeObserver | null = null;\n\n\t/** The list element currently observed, so a re-rendered list is swapped in rather than piled up. */\n\t#observedSwatchList: HTMLElement | null = null;\n\n\t/**\n\t * Keeps the wrap state honest. Render effects never run on the server, so this is browser-only by\n\t * construction; it re-runs when the palette changes and when the list element comes or goes (the\n\t * format or the palette toggled), and the observer covers every resize in between.\n\t */\n\tprivate readonly _swatchWrapWatch = afterRenderEffect(() => {\n\t\tthis._swatches();\n\t\tthis.allowCustomColor();\n\t\tthis.#watchSwatchWrap(this.swatchList()?.nativeElement ?? null);\n\t});\n\n\t/** Disconnects the swatch observer with the component. */\n\tprivate readonly _swatchCleanup = inject(DestroyRef).onDestroy(() => this.#swatchObserver?.disconnect());\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}\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\t// A click on a mixed checkbox is the reader picking a side, and the\n\t\t\t// browser has already dropped the native mixed state. Keeping the input\n\t\t\t// true here would fight it back on the next render.\n\t\t\tif (this.indeterminate()) {\n\t\t\t\tthis.indeterminate.set(false);\n\t\t\t}\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/**\n\t * Picks a swatch cell: a preset writes its value, the custom cell opens the native picker.\n\t *\n\t * @param index - Cell index; `swatches.length` is the custom cell.\n\t */\n\tprotected activateSwatch(index: number): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst swatch = this._swatches()[index];\n\n\t\tif (swatch) {\n\t\t\tthis.setValue(swatch.value);\n\t\t} else if (this.allowCustomColor()) {\n\t\t\tthis.#openPicker(this.customColorInput()?.nativeElement);\n\t\t}\n\t}\n\n\t/** Opens the native picker from the classic field's square, unless the field is locked. */\n\tprotected openClassicPicker(): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#openPicker(this.classicColorInput()?.nativeElement);\n\t}\n\n\t/**\n\t * Takes a keystroke in the classic field's hex text. A valid colour reaches the form at once,\n\t * normalised; anything else stays in the text only, until blur puts the last valid value back.\n\t *\n\t * @param event - The text field's `input` event.\n\t */\n\tprotected typeColorText(event: Event): void {\n\t\tconst text = (event.target as HTMLInputElement).value;\n\t\tconst hex = normalizeHexText(text);\n\n\t\tthis.colorText.set(text);\n\n\t\tif (hex && hex !== this._value()) {\n\t\t\tthis.setValue(hex);\n\t\t}\n\t}\n\n\t/**\n\t * Settles the classic field's hex text on blur: back to the value in normalised form, which drops\n\t * a half-typed or invalid entry and spells a short one out in full.\n\t *\n\t * @param event - The text field's `blur` event.\n\t */\n\tprotected commitColorText(event: FocusEvent): void {\n\t\tthis.colorText.set(this.classicHex());\n\t\tthis.handleBlur(event);\n\t}\n\n\t/**\n\t * Radio-group keyboard model: arrows move and check, Home and End jump to the ends, Space checks.\n\t *\n\t * Landing on the custom cell only moves focus — opening a dialog because somebody arrowed past it\n\t * would trap them in it. Space or Enter opens it; Enter does nothing on a preset, as on any radio.\n\t * Left and Right follow the reading direction, so under RTL Left is the next cell.\n\t *\n\t * @param event - The keydown on a cell.\n\t * @param index - Index of that cell; `swatches.length` is the custom cell.\n\t */\n\tprotected handleSwatchKeydown(event: KeyboardEvent, index: number): void {\n\t\tconst count = this._swatches().length + (this.allowCustomColor() ? 1 : 0);\n\t\tconst isCustom = index === this._swatches().length;\n\t\tconst rtl = getComputedStyle(event.currentTarget as Element).direction === 'rtl';\n\t\tlet target: number;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = index + 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = index - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowRight':\n\t\t\t\ttarget = rtl ? index - 1 : index + 1;\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\t\ttarget = rtl ? index + 1 : index - 1;\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = 0;\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = count - 1;\n\t\t\t\tbreak;\n\t\t\tcase ' ':\n\t\t\tcase 'Enter':\n\t\t\t\tif (event.key === ' ' || isCustom) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.activateSwatch(index);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\ttarget = (target + count) % count;\n\t\tthis.#swatchCells()[target]?.focus();\n\n\t\tif (target < this._swatches().length) {\n\t\t\tthis.activateSwatch(target);\n\t\t}\n\t}\n\n\t/**\n\t * Writes the colour chosen in a native picker: the one behind the grid's custom cell, or the one\n\t * under the classic field's square.\n\t *\n\t * @param event - The picker's `input` event, which fires live while the colour is dragged.\n\t */\n\tprotected pickNativeColor(event: Event): void {\n\t\tif (this.disabled() || this._isReadonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setValue((event.target as HTMLInputElement).value);\n\t}\n\n\t/**\n\t * Native validation for the swatch grid, used only without a reactive control. The grid is a\n\t * `div`, which has no `validity` to read, so `required` is the one constraint worth checking.\n\t */\n\tprotected override updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (!this.showsSwatches()) {\n\t\t\tsuper.updateNativeErrors(target);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this._value();\n\t\tthis._nativeErrors.set(this.required() && (value == null || value === '') ? { required: true } : null);\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 * 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 * Opens a native colour picker from the element standing in for it. `showPicker()` is what lets a\n\t * press on another element open it; `click()` covers browsers without it, or refusing it here.\n\t *\n\t * @param native - The hidden `<input type=\"color\">` to open, if rendered.\n\t */\n\t#openPicker(native: HTMLInputElement | undefined): void {\n\t\tif (!native) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof native.showPicker === 'function') {\n\t\t\t\tnative.showPicker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Refused (a cross-origin frame, say): the click below still opens it.\n\t\t}\n\n\t\tnative.click();\n\t}\n\n\t/** The swatch cells in DOM order, the custom cell last. */\n\t#swatchCells(): HTMLElement[] {\n\t\treturn Array.from(this.swatchList()?.nativeElement.querySelectorAll<HTMLElement>('.hub-input__swatch') ?? []);\n\t}\n\n\t/**\n\t * Points the observer at the current list (none when the grid is not rendered) and measures.\n\t *\n\t * @param list - The rendered swatch list, or `null`.\n\t */\n\t#watchSwatchWrap(list: HTMLElement | null): void {\n\t\tif (list !== this.#observedSwatchList) {\n\t\t\tthis.#swatchObserver?.disconnect();\n\t\t\tthis.#observedSwatchList = list;\n\n\t\t\tif (list && typeof ResizeObserver !== 'undefined') {\n\t\t\t\tthis.#swatchObserver ??= new ResizeObserver(() => this.#measureSwatchWrap());\n\t\t\t\tthis.#swatchObserver.observe(list);\n\t\t\t}\n\t\t}\n\n\t\tthis.#measureSwatchWrap();\n\t}\n\n\t/**\n\t * Wrapped when the last cell starts lower than the first. It answers the same question as comparing\n\t * the content height with one row, without computing a row height that zoom and sub-pixel rounding\n\t * would blur. The box keeps its border width in both states, so dropping the chrome never gives the\n\t * cells more room and cannot flip the answer back on the next observation.\n\t */\n\t#measureSwatchWrap(): void {\n\t\tconst cells = this.#observedSwatchList ? this.#swatchCells() : [];\n\t\tthis.swatchesWrapped.set(cells.length > 1 && cells[cells.length - 1].offsetTop > cells[0].offsetTop);\n\t}\n\n\t/**\n\t * Comparison key of a colour, so `#7C3AED`, `#7c3aed` and `rgb(124 58 237)` are the same swatch:\n\t * its hex form, or the trimmed lowercase text for the one kind of value the parser cannot read — a\n\t * form value that is not a colour (swatches themselves are validated before they get here).\n\t *\n\t * @param value - A CSS colour string.\n\t * @returns The key to compare swatches with.\n\t */\n\t#colorKey(value: string): string {\n\t\treturn toHex(value) ?? value.trim().toLowerCase();\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() && !plaintext()\"\n\t[class.hub-field--plaintext]=\"plaintext()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t@if (showsFormTextTooltip()) {\n\t\t\t<!--\n\t\t\t\tThe mark has to sit OUTSIDE the check's `<label>`, which here wraps the control\n\t\t\t\titself: nested in it, activating the mark would toggle the switch — and a switch\n\t\t\t\tcarrying a two-sentence warning is exactly the one that must not flip because\n\t\t\t\tsomebody asked what it does.\n\t\t\t-->\n\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubCheckTpl\" />\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t></button>\n\t\t\t</div>\n\t\t} @else {\n\t\t\t<ng-container [ngTemplateOutlet]=\"hubCheckTpl\" />\n\t\t}\n\n\t\t<ng-template #hubCheckTpl>\n\t\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t\t[indeterminate]=\"isIndeterminate()\"\n\t\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t/>\n\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"hub-input__check-label\"\n\t\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t</ng-template>\n\t} @else {\n\t\t@if (showsFormTextTooltip()) {\n\t\t\t<!--\n\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t-->\n\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t@if ((label() || required()) && (labelType() !== _labelTypes.Floating || type() === _inputFormats.Color)) {\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t></button>\n\t\t\t</div>\n\t\t} @else if ((label() || required()) && (labelType() !== _labelTypes.Floating || type() === _inputFormats.Color)) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t}\n\n\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t<!--\n\t\t\t\tA swatch grid is a radio group, which a `<label for>` cannot label: it names the\n\t\t\t\tgroup through `aria-labelledby` instead, hence the id.\n\t\t\t-->\n\t\t\t<label\n\t\t\t\t[attr.for]=\"showsSwatches() ? null : id\"\n\t\t\t\t[id]=\"id + '-label'\"\n\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t>\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</ng-template>\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() || _isReadonly() || (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−\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]=\"_isReadonly()\"\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() || _isReadonly() || (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@if (showsSwatches()) {\n\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\tOne value out of a set: a radio group, with one Tab stop and arrows to move.\n\t\t\t\t\t\t\tThe box is the field's own control skin, so a row of swatches reads as one\n\t\t\t\t\t\t\tmore input in the column; it drops the box once the cells wrap.\n\t\t\t\t\t\t-->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#swatchList\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__swatches\"\n\t\t\t\t\t\t\t[class.hub-input__swatches--wrapped]=\"swatchesWrapped()\"\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\trole=\"radiogroup\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[attr.aria-labelledby]=\"label() ? id + '-label' : null\"\n\t\t\t\t\t\t\t[attr.aria-required]=\"required() ? true : null\"\n\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t[attr.aria-readonly]=\"_isReadonly() || null\"\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\t@for (swatch of _swatches(); track $index) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch\"\n\t\t\t\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\t\t\t\t[attr.aria-checked]=\"checkedSwatch() === $index\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"swatch.label\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t\t\t[attr.title]=\"swatch.label\"\n\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"disabled() ? null : tabbableSwatch() === $index ? 0 : -1\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"swatch.value\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-ink]=\"swatch.ink\"\n\t\t\t\t\t\t\t\t\t(click)=\"activateSwatch($index)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleSwatchKeydown($event, $index)\"\n\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (allowCustomColor()) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch hub-input__swatch--custom\"\n\t\t\t\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\t\t\t\t[attr.aria-checked]=\"customChecked()\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"customSwatchName()\"\n\t\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"disabled() || null\"\n\t\t\t\t\t\t\t\t\t[attr.title]=\"customSwatchName()\"\n\t\t\t\t\t\t\t\t\t[attr.tabindex]=\"disabled() ? null : tabbableSwatch() === _swatches().length ? 0 : -1\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"customValue() || null\"\n\t\t\t\t\t\t\t\t\t[style.--hub-input-swatch-ink]=\"customInk()\"\n\t\t\t\t\t\t\t\t\t(click)=\"activateSwatch(_swatches().length)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleSwatchKeydown($event, _swatches().length)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<!-- Out of the tab order and the accessibility tree: the cell is the control, this only hosts the picker. -->\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#customColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-input__swatch-native\"\n\t\t\t\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"customHex()\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t\t\t\t\t\t(input)=\"pickNativeColor($event)\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\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}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\tNo palette: a text field for the hex code, with the colour it holds in a square\n\t\t\t\t\t\t\tat its start. The square comes first so Tab meets it where the eye does; it opens\n\t\t\t\t\t\t\tthe browser's picker, which sits hidden under it so the dialog opens there.\n\t\t\t\t\t\t-->\n\t\t\t\t\t\t<div class=\"hub-input__color\">\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__color-swatch\"\n\t\t\t\t\t\t\t\t[style.--hub-input-swatch-color]=\"classicHex() || null\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"pickerLabel\"\n\t\t\t\t\t\t\t\t[attr.aria-disabled]=\"_isReadonly() || null\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t(click)=\"openClassicPicker()\"\n\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t#classicColorInput\n\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\tclass=\"hub-input__color-native\"\n\t\t\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t[value]=\"classicHex() || '#000000'\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || _isReadonly()\"\n\t\t\t\t\t\t\t\t(input)=\"pickNativeColor($event)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t\t[value]=\"colorText()\"\n\t\t\t\t\t\t\t\t(input)=\"typeColorText($event)\"\n\t\t\t\t\t\t\t\t(blur)=\"commitColorText($event)\"\n\t\t\t\t\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t\t\t\t\tmaxlength=\"7\"\n\t\t\t\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t\t[readonly]=\"_isReadonly()\"\n\t\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\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() || _isReadonly()\"\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() && !_isReadonly()) {\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×\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]=\"_isReadonly()\"\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 (!showsFormTextTooltip() && (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\tElementRef,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChildren,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, NgTemplateOutlet, HubTooltipDirective],\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 (showsFormTextTooltip()) {\n\t\t\t\t<!--\n\t\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t\t-->\n\t\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t\t></button>\n\t\t\t\t</div>\n\t\t\t} @else if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\n\t\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t\t<label\n\t\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t>\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</ng-template>\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 (!showsFormTextTooltip() && 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\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/** 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 { 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';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, HubTooltipDirective],\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 _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/**\n\t * Render the value as plain text, with no field styling around it.\n\t *\n\t * The multi-line half of the same idea `HubInputComponent.plaintext` carries: a value\n\t * that belongs in the form but is not the reader's to change. It stays a real\n\t * `<textarea>`, so the label keeps pointing at a control and the text stays\n\t * selectable, and it only loses the box. Implies `readonly`.\n\t */\n\treadonly plaintext = input(false, { transform: booleanAttribute });\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() && !plaintext()\"\n\t[class.hub-field--plaintext]=\"plaintext()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t[attr.rows]=\"rows()\"\n\t\t\t\t[attr.cols]=\"cols()\"\n\t\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readonly]=\"readonly() || plaintext()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\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<!-- A counter tells you how much room is left to type, which promises typing. -->\n\t@if (counter() && !plaintext()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (!showsFormTextTooltip() && (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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, HubTooltipDirective],\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 _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/** 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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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 (!showsFormTextTooltip() && (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 { HubTooltipDirective, 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, HubTooltipDirective],\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/** 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\t// A direction flip re-lays the options out without resizing anything, so the\n\t\t\t\t// ResizeObserver never fires and the pill stays at the coordinate it was last\n\t\t\t\t// measured at — which under RTL can be a whole bar away from the option it marks.\n\t\t\t\t//\n\t\t\t\t// Watched across the whole subtree rather than on the document root alone: an\n\t\t\t\t// application may flip `dir` on a container instead of on `<html>` — an RTL island\n\t\t\t\t// inside an LTR page is an ordinary thing to build, and it is the only shape a\n\t\t\t\t// docs example can demonstrate. `attributeFilter` keeps the cost to a rejected\n\t\t\t\t// check on attribute mutations that are not `dir`.\n\t\t\t\tif (typeof MutationObserver !== 'undefined') {\n\t\t\t\t\tconst root = bar.ownerDocument.documentElement;\n\t\t\t\t\tconst observer = new MutationObserver(() => this.updateIndicator());\n\t\t\t\t\tif (root) observer.observe(root, { attributes: true, attributeFilter: ['dir'], subtree: true });\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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-label]=\"label() || null\"\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 (!showsFormTextTooltip() && (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 * @deprecated Project a `<hub-legend>` element as a direct child of the fieldset instead. The slot\n * existed only so a legend could carry markup, and `<hub-legend>` carries markup on its own —\n * without an `ng-template`, without a second directive to import, and producing the same DOM the\n * `legend` input produces, so the library has one answer to \"how is a legend written\". The slot\n * keeps working until it is removed in **23.0.0**; a fieldset that still uses it renders exactly as\n * before, so nothing breaks by doing nothing before then.\n *\n * @example\n * ```html\n * <!-- before -->\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n *\n * <!-- after -->\n * <hub-fieldset formGroupName=\"address\">\n * <hub-legend>Shipping address <span class=\"badge\">required</span></hub-legend>\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 { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * The legend of a `<hub-fieldset>` (or any grouped section), with optional required/invalid state\n * styling.\n *\n * Project it as a direct child of the fieldset: it is lifted into the native `<legend>` element,\n * which is also what `<hub-fieldset legend=\"…\">` builds for you — so a text legend and a rich one\n * are the same element with the same classes. It also stands alone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\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","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcontentChild,\n\tElementRef,\n\tinject,\n\tinput,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\nimport { HubLegendComponent } from '../legend/legend.component';\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 * Usable in two interchangeable forms from the same class:\n * - As an attribute on the native element: `<fieldset hubFieldset legend=\"…\">`. **Preferred** — the\n * host already is the `<fieldset>`, so the grouping costs one element instead of two.\n * - As an element: `<hub-fieldset legend=\"…\">`, which emits its own `<fieldset>` inside the host.\n *\n * The attribute form is deliberately restricted to `<fieldset>`: on a `<div>` it would render a\n * group with a legend but none of the grouping semantics assistive technology reads from a fieldset.\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 * ## The legend is always a `<hub-legend>`\n *\n * `legend=\"…\"` is shorthand: it builds one for you. When the legend needs more than a string — a\n * required marker, an icon, a badge — project the element yourself and it lands in the same place:\n *\n * ```html\n * <fieldset hubFieldset [group]=\"form.controls.address\">\n * <hub-legend [required]=\"true\">Shipping address</hub-legend>\n * …\n * </fieldset>\n * ```\n *\n * The older `<ng-template hubLegend>` slot still works and is deprecated; see\n * {@link HubLegendDirective}.\n *\n * @example\n * ```html\n * <fieldset hubFieldset 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 * </fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset, fieldset[hubFieldset]',\n\timports: [NgTemplateOutlet, KeyValuePipe, HubLegendComponent],\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\t'[class.hub-fieldset]': '!_isElementForm',\n\t\t'[class.hub-fieldset--invalid]': '!_isElementForm && isInvalid'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/**\n\t * Whether this instance is the `<hub-fieldset>` element form (as opposed to `[hubFieldset]` on a\n\t * native `<fieldset>`). Read once from the host tag at construction — a static host fact — so the\n\t * view knows whether it still owes the consumer a `<fieldset>` or the host already is one, and so\n\t * the appearance classes land on the element that actually is the fieldset in either form.\n\t */\n\tprotected readonly _isElementForm = inject(ElementRef).nativeElement.nodeName === 'HUB-FIELDSET';\n\n\t/**\n\t * Legend text. Rendered inside a `<hub-legend>`, so a text legend and a projected one are the\n\t * same element. Ignored when a `<hub-legend>` is projected, or a `hubLegend` template is.\n\t */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Query for a projected `hubLegend` template.\n\t *\n\t * @deprecated Project a `<hub-legend>` element instead — the slot exists only so the legend can\n\t * carry markup, and `<hub-legend>` carries markup without an `ng-template` and without an extra\n\t * import. Removed in 23.0.0.\n\t */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n\n\t/**\n\t * A `<hub-legend>` projected as a direct child, which is the way a legend that needs more than\n\t * text is written. Queried rather than merely projected because the `<legend>` element must not\n\t * be emitted at all when the group has no legend of any kind.\n\t */\n\tprotected readonly _projectedLegend = contentChild(HubLegendComponent);\n}\n","<ng-template #body>\n\t@if (legend() || legendTmp() || _projectedLegend()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t<ng-content select=\"hub-legend\"></ng-content>\n\t\t\t@if (!_projectedLegend()) {\n\t\t\t\t@if (legendTmp(); as tpl) {\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n\t\t\t\t} @else {\n\t\t\t\t\t<hub-legend>{{ legend() }}</hub-legend>\n\t\t\t\t}\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</ng-template>\n\n@if (_isElementForm) {\n\t<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t\t<ng-container [ngTemplateOutlet]=\"body\"></ng-container>\n\t</fieldset>\n} @else {\n\t<ng-container [ngTemplateOutlet]=\"body\"></ng-container>\n}\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","/**\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 opens straight into the dropdown 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'&': '&',\n\t'<': '<',\n\t'>': '>',\n\t'\"': '"',\n\t\"'\": '''\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() ? escapeHTML(this.ngItemLabel()) : 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, isDevMode } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\t/**\n\t * The engine's write-value diagnostics are advice for whoever wrote the form, so they are\n\t * kept — a dropped model is worse in silence — but held to development, where that person\n\t * is the one reading, and attributed so the message is traceable to this package.\n\t */\n\twarn(message: string) {\n\t\tif (!isDevMode()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconsole.warn(`[ng-hub-ui-forms] ${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 ||\n\t\t\t\t(!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\t// Both branches measure from the parent's top edge. An unpositioned `body` is not the\n\t\t// panel's containing block: `bottom` would resolve against the viewport-sized initial\n\t\t// containing block, so on a page taller than the viewport the panel landed far off-screen.\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst dropdownHeight = this._dropdown.getBoundingClientRect().height;\n\t\t\tconst offsetTop = containerRect.top - parent.top - dropdownHeight;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = '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\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,\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)\n\t\t\t? !isObject(firstItem)\n\t\t\t: 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(\n\t\t\tisDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear\n\t\t);\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() &&\n\t\t\tthis.searchTerm &&\n\t\t\tthis.itemsList.markedItem &&\n\t\t\t(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>\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>\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\n\t\t\t\t[ngTemplateOutlet]=\"multiLabelTemplate()\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\"\n\t\t\t>\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\t/>\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>\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>\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>\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\n\t\t\t\t\t\t\t\t? optgroupTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\t\t: 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>\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>\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>\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>\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>\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 { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Hub-named slots for the parts of a `<hub-select>` a consumer can re-draw.\n *\n * `hub-select` is built on a vendored copy of ng-select (see `PATCHES.md`), whose own slot\n * directives are attribute selectors in the `ng-*` namespace: `ng-option-tmp`, `ng-label-tmp` and\n * ten more. Those were re-exported, so the public surface of `ng-hub-ui-forms` invited consumers to\n * write markup named after an internal dependency that is re-synced from upstream on a schedule and\n * that no promise here covers. The directives in this file are the surface the library actually\n * owns: same slots, same template contexts, hub names, and nothing in `vendor/` changed — so the\n * automated sync stays as low-conflict as it was.\n *\n * Each is a plain marker over an `<ng-template>`; `hub-select` queries it and forwards the template\n * into the engine with the context documented on each directive.\n */\n\n/**\n * Draws one option in the dropdown list.\n *\n * Context: `item` (the raw item), `item$` (the engine's wrapper, carrying `selected`/`disabled`),\n * `index`, `searchTerm`.\n *\n * @example\n * ```html\n * <hub-select [items]=\"users\" bindLabel=\"name\">\n * <ng-template hubSelectOption let-item=\"item\" let-search=\"searchTerm\">\n * <img [src]=\"item.avatar\" alt=\"\" /> {{ item.name }}\n * </ng-template>\n * </hub-select>\n * ```\n */\n@Directive({ selector: '[hubSelectOption]' })\nexport class HubSelectOptionDirective {\n\t/** Template reference for the option content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a group header when the list is grouped with `groupBy`.\n *\n * Context: `item`, `item$`, `index`, `searchTerm`.\n */\n@Directive({ selector: '[hubSelectOptgroup]' })\nexport class HubSelectOptgroupDirective {\n\t/** Template reference for the group header content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws the selected value inside the closed control, in single-select mode.\n *\n * Context: `item`, `label`, `clear`.\n */\n@Directive({ selector: '[hubSelectLabel]' })\nexport class HubSelectLabelDirective {\n\t/** Template reference for the selected-value content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws all selected values at once in multiple mode, replacing the per-value chips.\n *\n * Context: `items`, `clear`.\n */\n@Directive({ selector: '[hubSelectMultiLabel]' })\nexport class HubSelectMultiLabelDirective {\n\t/** Template reference for the multi-value content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a fixed block above the option list.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectHeader]' })\nexport class HubSelectHeaderDirective {\n\t/** Template reference for the dropdown header. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Draws a fixed block below the option list.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectFooter]' })\nexport class HubSelectFooterDirective {\n\t/** Template reference for the dropdown footer. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"no items found\" message.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectNotFound]' })\nexport class HubSelectNotFoundDirective {\n\t/** Template reference for the empty-result content. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"type to search\" hint shown before `minTermLength` characters have been typed.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectTypeToSearch]' })\nexport class HubSelectTypeToSearchDirective {\n\t/** Template reference for the type-to-search hint. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"loading…\" message shown while a typeahead is in flight and no item has arrived.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectLoadingText]' })\nexport class HubSelectLoadingTextDirective {\n\t/** Template reference for the loading message. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the spinner drawn in the control while `loading` is set.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectLoadingSpinner]' })\nexport class HubSelectLoadingSpinnerDirective {\n\t/** Template reference for the loading spinner. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the \"add <term>\" row offered when `addTag` is enabled.\n *\n * Context: `searchTerm`.\n */\n@Directive({ selector: '[hubSelectTag]' })\nexport class HubSelectTagDirective {\n\t/** Template reference for the add-tag row. */\n\treadonly template = inject(TemplateRef);\n}\n\n/**\n * Replaces the clear (×) control.\n *\n * No context.\n */\n@Directive({ selector: '[hubSelectClearButton]' })\nexport class HubSelectClearButtonDirective {\n\t/** Template reference for the clear control. */\n\treadonly template = inject(TemplateRef);\n}\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 { 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 {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective\n} from './vendor/lib/ng-templates.directive';\nimport {\n\tHubSelectClearButtonDirective,\n\tHubSelectFooterDirective,\n\tHubSelectHeaderDirective,\n\tHubSelectLabelDirective,\n\tHubSelectLoadingSpinnerDirective,\n\tHubSelectLoadingTextDirective,\n\tHubSelectMultiLabelDirective,\n\tHubSelectNotFoundDirective,\n\tHubSelectOptgroupDirective,\n\tHubSelectOptionDirective,\n\tHubSelectTagDirective,\n\tHubSelectTypeToSearchDirective\n} from './select-templates.directive';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective,\n\t\tNgTypeToSearchTemplateDirective,\n\t\tNgLoadingTextTemplateDirective,\n\t\tNgLoadingSpinnerTemplateDirective,\n\t\tNgTagTemplateDirective,\n\t\tNgClearButtonTemplateDirective,\n\t\tHubTooltipDirective\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 _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 hubSelectOption>` etc. work through `<hub-select>`.\n\t//\n\t// Each slot is queried twice: once for the hub-named directive that is the supported way to\n\t// write it, and once for the vendored `ng-*-tmp` attribute that used to be the only way. The\n\t// hub one wins; the vendored one is deprecated and disappears in 23.0.0 along with its export.\n\tprivate readonly _hubOptionTpl = contentChild(HubSelectOptionDirective, { read: TemplateRef });\n\tprivate readonly _ngOptionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optionTpl = computed(() => this._hubOptionTpl() ?? this._ngOptionTpl());\n\n\tprivate readonly _hubOptgroupTpl = contentChild(HubSelectOptgroupDirective, { read: TemplateRef });\n\tprivate readonly _ngOptgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = computed(() => this._hubOptgroupTpl() ?? this._ngOptgroupTpl());\n\n\tprivate readonly _hubLabelTpl = contentChild(HubSelectLabelDirective, { read: TemplateRef });\n\tprivate readonly _ngLabelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = computed(() => this._hubLabelTpl() ?? this._ngLabelTpl());\n\n\tprivate readonly _hubMultiLabelTpl = contentChild(HubSelectMultiLabelDirective, { read: TemplateRef });\n\tprivate readonly _ngMultiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = computed(() => this._hubMultiLabelTpl() ?? this._ngMultiLabelTpl());\n\n\tprivate readonly _hubHeaderTpl = contentChild(HubSelectHeaderDirective, { read: TemplateRef });\n\tprivate readonly _ngHeaderTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = computed(() => this._hubHeaderTpl() ?? this._ngHeaderTpl());\n\n\tprivate readonly _hubFooterTpl = contentChild(HubSelectFooterDirective, { read: TemplateRef });\n\tprivate readonly _ngFooterTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = computed(() => this._hubFooterTpl() ?? this._ngFooterTpl());\n\n\tprivate readonly _hubNotFoundTpl = contentChild(HubSelectNotFoundDirective, { read: TemplateRef });\n\tprivate readonly _ngNotFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = computed(() => this._hubNotFoundTpl() ?? this._ngNotFoundTpl());\n\n\t// The five slots below were exported but never forwarded: written inside a `<hub-select>` they\n\t// belonged to this wrapper's content, and the engine's own `contentChild` cannot see through an\n\t// `<ng-content>`, so they did nothing at all. They are forwarded now, under hub names.\n\tprivate readonly _hubTypeToSearchTpl = contentChild(HubSelectTypeToSearchDirective, { read: TemplateRef });\n\tprivate readonly _ngTypeToSearchTpl = contentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef });\n\tprotected readonly _typeToSearchTpl = computed(() => this._hubTypeToSearchTpl() ?? this._ngTypeToSearchTpl());\n\n\tprivate readonly _hubLoadingTextTpl = contentChild(HubSelectLoadingTextDirective, { read: TemplateRef });\n\tprivate readonly _ngLoadingTextTpl = contentChild(NgLoadingTextTemplateDirective, { read: TemplateRef });\n\tprotected readonly _loadingTextTpl = computed(() => this._hubLoadingTextTpl() ?? this._ngLoadingTextTpl());\n\n\tprivate readonly _hubLoadingSpinnerTpl = contentChild(HubSelectLoadingSpinnerDirective, { read: TemplateRef });\n\tprivate readonly _ngLoadingSpinnerTpl = contentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef });\n\tprotected readonly _loadingSpinnerTpl = computed(() => this._hubLoadingSpinnerTpl() ?? this._ngLoadingSpinnerTpl());\n\n\tprivate readonly _hubTagTpl = contentChild(HubSelectTagDirective, { read: TemplateRef });\n\tprivate readonly _ngTagTpl = contentChild(NgTagTemplateDirective, { read: TemplateRef });\n\tprotected readonly _tagTpl = computed(() => this._hubTagTpl() ?? this._ngTagTpl());\n\n\tprivate readonly _hubClearButtonTpl = contentChild(HubSelectClearButtonDirective, { read: TemplateRef });\n\tprivate readonly _ngClearButtonTpl = contentChild(NgClearButtonTemplateDirective, { read: TemplateRef });\n\tprotected readonly _clearButtonTpl = computed(() => this._hubClearButtonTpl() ?? this._ngClearButtonTpl());\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>(undefined);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/**\n\t * Label display type (`stacked`, `floating`, `horizontal`).\n\t *\n\t * `floating` lays the label inside the control and lifts it once the field is focused or\n\t * holds a value — the same contract as `hub-input`, so a form can float every label instead\n\t * of floating the text fields and stacking the selects beside them.\n\t *\n\t * Only the `dropdown` format can float: the deprecated `buttons` / `checkbox` / `radio`\n\t * formats have no box to float into, and fall back to a stacked label rather than losing it.\n\t */\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/** 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/**\n\t * Whether the control currently holds focus.\n\t *\n\t * Tracked here rather than read off the engine's `ng-select-focused` host class, because the\n\t * floating label is a SIBLING of the control and the state has to reach the group that wraps\n\t * both. A CSS-only reading would need `:has()`, which fails silently where it is unsupported —\n\t * and a label that never lifts looks exactly like a label that was never asked to.\n\t */\n\tprivate readonly _focused = signal<boolean>(false);\n\n\t/**\n\t * Whether the label is laid inside the control. Only the dropdown format has a box to float\n\t * into; the deprecated ones fall back to a stacked label rather than dropping it.\n\t */\n\tprotected readonly showsFloatingLabel = computed<boolean>(\n\t\t() =>\n\t\t\tthis.labelType() === this._labelTypes.Floating &&\n\t\t\tthis.format() === this._selectFormats.Dropdown &&\n\t\t\t(!!this.label() || !!this.required())\n\t);\n\n\t/** Whether the control holds a value. An empty multiselect is empty, not filled. */\n\tprotected readonly isFilled = computed<boolean>(() => {\n\t\tconst value = this._value();\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.length > 0;\n\t\t}\n\n\t\treturn value !== null && value !== undefined && value !== '';\n\t});\n\n\t/**\n\t * Whether the floating label sits lifted rather than over the value. Focus counts as well as\n\t * a value: while the panel is open the placeholder and the search term need the room.\n\t */\n\tprotected readonly isLabelRaised = computed<boolean>(() => this._focused() || this.isFilled());\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 * Records focus for the floating label, then republishes the engine's event untouched.\n\t *\n\t * Named apart from the base class's `handleBlur`, which is the host-level `focusout` that marks\n\t * the field touched: these two ride the engine's own focus events and answer a different\n\t * question — where the label should sit, not whether the control has been visited.\n\t *\n\t * @param event - The focus event emitted by the control.\n\t */\n\tprotected handleControlFocus(event: any): void {\n\t\tthis._focused.set(true);\n\t\tthis.onFocus.emit(event);\n\t}\n\n\t/**\n\t * Records the loss of focus for the floating label, then republishes the engine's event.\n\t *\n\t * @param event - The blur event emitted by the control.\n\t */\n\tprotected handleControlBlur(event: any): void {\n\t\tthis._focused.set(false);\n\t\tthis.onBlur.emit(event);\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if ((label() || required()) && !showsFloatingLabel()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if ((label() || required()) && !showsFloatingLabel()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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--floating]=\"showsFloatingLabel()\"\n\t\t\t\t\t[class.hub-select__group--raised]=\"showsFloatingLabel() && isLabelRaised()\"\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<!--\n\t\t\t\t\t\tThe floating label hangs off a zero-width anchor placed exactly where the\n\t\t\t\t\t\tcontrol starts, not off the group. A group can open with an addon or an\n\t\t\t\t\t\tattached button, and a label pinned to the group's own leading edge would\n\t\t\t\t\t\tprint on top of it.\n\t\t\t\t\t-->\n\t\t\t\t\t@if (showsFloatingLabel()) {\n\t\t\t\t\t\t<span class=\"hub-select__label-anchor\">\n\t\t\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-select__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</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)=\"handleControlFocus($event)\"\n\t\t\t\t\t\t(blur)=\"handleControlBlur($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@if (_typeToSearchTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-typetosearch-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (_loadingTextTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-loadingtext-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 (_loadingSpinnerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-loadingspinner-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (_tagTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-tag-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 (_clearButtonTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-clearbutton-tmp>\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" />\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 (!showsFormTextTooltip() && (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 { 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\tDestroyRef,\n\tElementRef,\n\tsignal,\n\tTemplateRef,\n\tViewContainerRef,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HUB_DROPDOWN_POSITIONS, HubTooltipDirective, OverlayRef, OverlayService } from 'ng-hub-ui-utils';\nimport { 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: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tHubDatepickerTimeFieldComponent,\n\t\tHubDatepickerPeriodGridComponent,\n\t\tHubTooltipDirective\n\t],\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 #overlays = inject(OverlayService);\n\treadonly #viewContainerRef = inject(ViewContainerRef);\n\n\t/** The field's own box: what the calendar hangs off. */\n\tprivate readonly _trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n\n\t/** The calendar, rendered into the overlay rather than into the field. */\n\tprivate readonly _panel = viewChild.required<TemplateRef<unknown>>('panel');\n\n\t/** Live overlay while the calendar is up; `null` when it is closed. */\n\t#overlayRef: OverlayRef | null = null;\n\n\tconstructor() {\n\t\tsuper();\n\t\t// The panel lives in `document.body`, outside this component's own tree, so nothing removes\n\t\t// it when the field goes away: a datepicker destroyed while open would leave its calendar\n\t\t// on screen, attached to a field that no longer exists.\n\t\tinject(DestroyRef).onDestroy(() => this.#closeOverlay());\n\t}\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\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 month is written in the panel's header.\n\t *\n\t * `short` by default, and that default is what keeps the panel still: the panel is as\n\t * wide as its widest child, and with the month spelled out that child was the header —\n\t * so the calendar grew and shrank as you paged through the year while the day grid it\n\t * frames never moved. Measured in Spanish at 1rem: «Septiembre de 2026» needs 152px\n\t * against the 104px the header has left over once the two nav groups have taken theirs,\n\t * so nothing but an abbreviation fits. Ask for `long` where the panel has room and the\n\t * spelled-out month is worth the movement.\n\t */\n\treadonly monthFormat = input<'short' | 'long'>('short');\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/** 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/**\n\t * Whether the input is focused. Tracked rather than read from `:focus` because the calendar\n\t * is an overlay: opening it moves focus out of the input, and a label driven by the pseudo\n\t * class would drop back over the value at exactly the moment the reader is choosing a date.\n\t */\n\tprivate readonly _focused = signal<boolean>(false);\n\n\t/** Whether the label is laid inside the control rather than stacked above it. */\n\tprotected readonly showsFloatingLabel = computed<boolean>(\n\t\t() => this.labelType() === this._labelTypes.Floating && (!!this.label() || !!this.required())\n\t);\n\n\t/**\n\t * Whether the floating label sits lifted rather than standing in for the placeholder. The\n\t * open panel counts alongside focus and a value: while the calendar is up the field is in\n\t * use, and a label sliding back down under it would read as the value being cleared.\n\t */\n\tprotected readonly isLabelRaised = computed<boolean>(() => this._focused() || this._open() || !!this.displayValue());\n\n\t/** Tracks focus for {@link isLabelRaised}. */\n\tprotected setFocused(focused: boolean): void {\n\t\tthis._focused.set(focused);\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(), {\n\t\t\tmonth: this.monthFormat(),\n\t\t\tyear: 'numeric'\n\t\t}).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.#openOverlay();\n\t\tthis.opened.emit();\n\t}\n\n\t/**\n\t * Puts the calendar on screen, hung off the field's own box.\n\t *\n\t * `start` and `end` in the position list are logical, and the strategy reads the direction from\n\t * the origin — so a field inside an RTL container opens its calendar against the right edge\n\t * without a second list of positions. The offset mirrors what this component asked the CDK for\n\t * before the swap, so any visual difference means the swap is wrong rather than better.\n\t */\n\t#openOverlay(): void {\n\t\tif (this.#overlayRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst position = this.#overlays\n\t\t\t.position()\n\t\t\t.flexibleConnectedTo(this._trigger().nativeElement)\n\t\t\t.withPositions(HUB_DROPDOWN_POSITIONS.map((p) => ({ ...p, offsetY: 4 })));\n\n\t\tconst ref = this.#overlays.create({\n\t\t\tpositionStrategy: position,\n\t\t\thasBackdrop: true,\n\t\t\tbackdropClass: 'hub-datepicker__backdrop',\n\t\t\tpanelClass: 'hub-datepicker__overlay'\n\t\t});\n\n\t\tref.onBackdropClick(() => this.close());\n\t\t// The panel does not take focus — opened from a click, focus stays where it was — so the\n\t\t// grid's own keydown never hears Escape. The overlay listens on the document and tells the\n\t\t// topmost open one, which is how the CDK behaved before the swap.\n\t\tref.onKeydown((event) => {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t});\n\t\tref.attach(this._panel(), this.#viewContainerRef);\n\t\tthis.#overlayRef = ref;\n\t}\n\n\t/** Takes the calendar off screen and releases the overlay it lived in. */\n\t#closeOverlay(): void {\n\t\tthis.#overlayRef?.dispose();\n\t\tthis.#overlayRef = null;\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.#closeOverlay();\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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (!showsFloatingLabel() && (label() || required())) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (!showsFloatingLabel() && (label() || required())) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\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--floating]=\"showsFloatingLabel()\"\n\t\t\t[class.hub-datepicker__group--raised]=\"showsFloatingLabel() && isLabelRaised()\"\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\" #trigger>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"hub-field__control hub-datepicker__input\"\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[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\treadonly\n\t\t\t\t\t[value]=\"displayValue()\"\n\t\t\t\t\t[placeholder]=\"showsFloatingLabel() && !isLabelRaised() ? '' : placeholder()\"\n\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t\t\t(focus)=\"setFocused(true)\"\n\t\t\t\t\t(blur)=\"setFocused(false); handleBlur($event)\"\n\t\t\t\t/>\n\t\t\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">\n\t\t\t\t\t\t×\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t\t></button>\n\t\t\t\t@if (showsFloatingLabel()) {\n\t\t\t\t\t<label [for]=\"id\" class=\"hub-field__label hub-datepicker__label--floating\">\n\t\t\t\t\t\t{{ label() }}\n\t\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</label>\n\t\t\t\t}\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 (!showsFormTextTooltip() && (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 #panel>\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, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { HubAppendDirective } from '../../directives/append.directive';\nimport { HubPrependDirective } from '../../directives/prepend.directive';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\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, NgTemplateOutlet, HubTooltipDirective],\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 (showsFormTextTooltip()) {\n\t\t\t\t<!--\n\t\t\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t\t\t-->\n\t\t\t\t<div class=\"hub-field__label-row\">\n\t\t\t\t\t@if (label() || required()) {\n\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t\t\t></button>\n\t\t\t\t</div>\n\t\t\t} @else if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\n\t\t\t<ng-template #hubFieldLabelTpl>\n\t\t\t\t<label\n\t\t\t\t\tclass=\"hub-field__label\"\n\t\t\t\t\t[attr.for]=\"id\"\n\t\t\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t\t\t>\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</ng-template>\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-timepicker__group\"\n\t\t\t\t\t[class.hub-timepicker__group--has-prepend]=\"hasPrepend()\"\n\t\t\t\t\t[class.hub-timepicker__group--has-append]=\"hasAppend()\"\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-timepicker__attached hub-timepicker__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 _prependAddons(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-timepicker__addon hub-timepicker__addon--prepend\">{{ addon }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-timepicker__control\"\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[value]=\"value() ?? ''\"\n\t\t\t\t\t\t[attr.min]=\"min() || null\"\n\t\t\t\t\t\t[attr.max]=\"max() || null\"\n\t\t\t\t\t\t[attr.step]=\"step() || null\"\n\t\t\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[readOnly]=\"readonly()\"\n\t\t\t\t\t\t(input)=\"onInput($event)\"\n\t\t\t\t\t\t(blur)=\"onTouched()\"\n\t\t\t\t\t/>\n\t\t\t\t\t@for (addon of _appendAddons(); track $index) {\n\t\t\t\t\t\t<span class=\"hub-timepicker__addon hub-timepicker__addon--append\">{{ addon }}</span>\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-timepicker__attached hub-timepicker__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\n\t\t\t\t@if (!showsFormTextTooltip() && formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\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\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/** 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// ── Group addons and attached content ───────────────────────────────────────\n\n\t/**\n\t * Text shown before the control as a group addon — a unit, a currency, a label. A string, or\n\t * an array for a run of them.\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/** 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\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/** 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/**\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 * The families `<hub-file-input>` tells apart when it has to draw a file instead of showing it.\n *\n * Named \"kind\" rather than \"type\" on purpose: `type` already means the MIME type everywhere a file\n * is described (`File.type`, `HubCurrentFile.type`), and the two must not be confused.\n */\nexport type HubFileKind =\n\t'pdf' | 'document' | 'spreadsheet' | 'presentation' | 'archive' | 'audio' | 'video' | 'code' | 'image' | 'generic';\n\n/** MIME types matched exactly. Checked before the extension, which only fills in for a missing type. */\nconst KIND_BY_MIME: Readonly<Record<string, HubFileKind>> = {\n\t'application/pdf': 'pdf',\n\n\t'application/msword': 'document',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'document',\n\t'application/vnd.oasis.opendocument.text': 'document',\n\t'application/rtf': 'document',\n\t'text/rtf': 'document',\n\t'text/plain': 'document',\n\t'text/markdown': 'document',\n\n\t'application/vnd.ms-excel': 'spreadsheet',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'spreadsheet',\n\t'application/vnd.oasis.opendocument.spreadsheet': 'spreadsheet',\n\t'text/csv': 'spreadsheet',\n\t'text/tab-separated-values': 'spreadsheet',\n\n\t'application/vnd.ms-powerpoint': 'presentation',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'presentation',\n\t'application/vnd.oasis.opendocument.presentation': 'presentation',\n\n\t'application/zip': 'archive',\n\t'application/x-zip-compressed': 'archive',\n\t'application/vnd.rar': 'archive',\n\t'application/x-rar-compressed': 'archive',\n\t'application/x-7z-compressed': 'archive',\n\t'application/x-tar': 'archive',\n\t'application/gzip': 'archive',\n\t'application/x-gzip': 'archive',\n\t'application/x-bzip2': 'archive',\n\t'application/x-xz': 'archive',\n\n\t'application/json': 'code',\n\t'application/xml': 'code',\n\t'text/xml': 'code',\n\t'text/html': 'code',\n\t'text/css': 'code',\n\t'text/javascript': 'code',\n\t'application/javascript': 'code',\n\t'application/typescript': 'code',\n\t'application/x-yaml': 'code',\n\t'text/yaml': 'code',\n\t'application/x-sh': 'code'\n};\n\n/** Extensions, lower case and without the dot, for files the browser could not type. */\nconst KIND_BY_EXTENSION: Readonly<Record<string, HubFileKind>> = {\n\tpdf: 'pdf',\n\t...Object.fromEntries(['doc', 'docx', 'odt', 'rtf', 'txt', 'md', 'pages'].map((ext) => [ext, 'document'])),\n\t...Object.fromEntries(['xls', 'xlsx', 'ods', 'csv', 'tsv', 'numbers'].map((ext) => [ext, 'spreadsheet'])),\n\t...Object.fromEntries(['ppt', 'pptx', 'odp', 'key'].map((ext) => [ext, 'presentation'])),\n\t...Object.fromEntries(['zip', 'rar', '7z', 'tar', 'gz', 'tgz', 'bz2', 'xz'].map((ext) => [ext, 'archive'])),\n\t...Object.fromEntries(['mp3', 'wav', 'ogg', 'oga', 'flac', 'aac', 'm4a', 'opus', 'weba'].map((ext) => [ext, 'audio'])),\n\t...Object.fromEntries(['mp4', 'webm', 'mov', 'avi', 'mkv', 'm4v', 'ogv'].map((ext) => [ext, 'video'])),\n\t...Object.fromEntries(\n\t\t[\n\t\t\t'json',\n\t\t\t'xml',\n\t\t\t'html',\n\t\t\t'htm',\n\t\t\t'css',\n\t\t\t'scss',\n\t\t\t'js',\n\t\t\t'mjs',\n\t\t\t'ts',\n\t\t\t'jsx',\n\t\t\t'tsx',\n\t\t\t'yml',\n\t\t\t'yaml',\n\t\t\t'sh',\n\t\t\t'py',\n\t\t\t'java',\n\t\t\t'c',\n\t\t\t'cpp',\n\t\t\t'cs',\n\t\t\t'php',\n\t\t\t'rb',\n\t\t\t'go',\n\t\t\t'rs',\n\t\t\t'sql'\n\t\t].map((ext) => [ext, 'code'])\n\t),\n\t...Object.fromEntries(\n\t\t[\n\t\t\t'png',\n\t\t\t'jpg',\n\t\t\t'jpeg',\n\t\t\t'gif',\n\t\t\t'webp',\n\t\t\t'avif',\n\t\t\t'svg',\n\t\t\t'bmp',\n\t\t\t'ico',\n\t\t\t'apng',\n\t\t\t'heic',\n\t\t\t'heif',\n\t\t\t'tif',\n\t\t\t'tiff',\n\t\t\t'psd',\n\t\t\t'raw',\n\t\t\t'dng'\n\t\t].map((ext) => [ext, 'image'])\n\t)\n} as Record<string, HubFileKind>;\n\n/**\n * The image formats every current browser paints in an `<img>`. HEIC, TIFF or PSD are images too,\n * but an `<img>` pointed at one renders a broken frame, so they get the image icon instead.\n */\nconst PREVIEWABLE_MIME = new Set([\n\t'image/png',\n\t'image/jpeg',\n\t'image/gif',\n\t'image/webp',\n\t'image/avif',\n\t'image/svg+xml',\n\t'image/bmp',\n\t'image/x-icon',\n\t'image/vnd.microsoft.icon',\n\t'image/apng'\n]);\n\nconst PREVIEWABLE_EXTENSION = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'svg', 'bmp', 'ico', 'apng']);\n\n/**\n * The extension of a file name, lower case and without the dot.\n *\n * A leading dot is not an extension: `.env` is a name, not an `env` file.\n *\n * @param name - The file name.\n * @returns The extension, or `''` when there is none.\n */\nexport function fileExtension(name: string | null | undefined): string {\n\tconst value = name ?? '';\n\tconst dot = value.lastIndexOf('.');\n\n\treturn dot > 0 ? value.slice(dot + 1).toLowerCase() : '';\n}\n\n/**\n * Tells which family a file belongs to, from its MIME type and, when that says nothing, its name.\n *\n * The MIME type wins because it describes the content, while a name is only a claim. It falls back\n * to the extension when the type is empty — what a browser reports for anything it cannot\n * recognise — or a catch-all such as `application/octet-stream`.\n *\n * @param type - The MIME type, possibly empty.\n * @param name - The file name, used for its extension.\n * @returns The family; `generic` when neither the type nor the extension identifies it.\n */\nexport function fileKind(type: string | null | undefined, name: string | null | undefined): HubFileKind {\n\tconst mime = (type ?? '').toLowerCase().split(';')[0].trim();\n\tconst byMime = KIND_BY_MIME[mime];\n\n\tif (byMime) {\n\t\treturn byMime;\n\t}\n\n\tif (mime.startsWith('image/')) {\n\t\treturn 'image';\n\t}\n\n\tif (mime.startsWith('audio/')) {\n\t\treturn 'audio';\n\t}\n\n\tif (mime.startsWith('video/')) {\n\t\treturn 'video';\n\t}\n\n\treturn KIND_BY_EXTENSION[fileExtension(name)] ?? 'generic';\n}\n\n/**\n * Whether a browser can paint the file in an `<img>`.\n *\n * @param type - The MIME type, possibly empty.\n * @param name - The file name, used when the type is empty.\n * @returns `true` for the formats in {@link PREVIEWABLE_MIME}, or their extensions.\n */\nexport function isPreviewableImage(type: string | null | undefined, name: string | null | undefined): boolean {\n\tconst mime = (type ?? '').toLowerCase().split(';')[0].trim();\n\n\tif (mime.startsWith('image/')) {\n\t\treturn PREVIEWABLE_MIME.has(mime);\n\t}\n\n\treturn !mime || mime === 'application/octet-stream' ? PREVIEWABLE_EXTENSION.has(fileExtension(name)) : false;\n}\n\n/**\n * Whether an `accept` specification only lets images through, so a stored file of unknown type in\n * that field can be assumed to be one.\n *\n * @param accept - The `accept` specification of the field.\n * @returns `true` when every token names an image MIME type, a wildcard `image/*` or an image extension.\n */\nexport function acceptsOnlyImages(accept: string | null | undefined): boolean {\n\tconst tokens = (accept ?? '')\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0);\n\n\treturn (\n\t\ttokens.length > 0 &&\n\t\ttokens.every((token) =>\n\t\t\ttoken.startsWith('.') ? KIND_BY_EXTENSION[token.slice(1)] === 'image' : token.startsWith('image/')\n\t\t)\n\t);\n}\n","import { HubCurrentFile } from '../interfaces/file-input.interface';\nimport { fileExtension } from './file-kind';\n\n/**\n * The file name a URL ends in, when it plainly ends in one.\n *\n * Only a last segment with an extension counts: `/api/companies/1/logo` would otherwise put \"logo\"\n * on screen as if it were a file name, and \"1\" for `/files/1`. `data:` and `blob:` URLs carry no name.\n *\n * @param url - The URL of the stored file.\n * @returns The decoded last path segment, or `null`.\n */\nexport function urlFileName(url: string): string | null {\n\tif (/^(data|blob):/i.test(url)) {\n\t\treturn null;\n\t}\n\n\tconst path = url.split(/[?#]/)[0];\n\tlet segment = path.slice(path.lastIndexOf('/') + 1);\n\n\ttry {\n\t\tsegment = decodeURIComponent(segment);\n\t} catch {\n\t\t// A malformed escape leaves the raw segment, which is still the best name available.\n\t}\n\n\treturn fileExtension(segment) ? segment : null;\n}\n\n/**\n * The MIME type a `data:` URL declares.\n *\n * @param url - The URL of the stored file.\n * @returns The lower-cased MIME type, or `null` for any other URL.\n */\nexport function dataUrlType(url: string): string | null {\n\tconst match = /^data:([^;,]+)/i.exec(url);\n\n\treturn match ? match[1].toLowerCase() : null;\n}\n\n/**\n * Normalizes the `currentFile` input into one shape, filling the name and the type in from the URL\n * where the consumer left them out.\n *\n * @param value - A bare URL, a {@link HubCurrentFile}, or nothing.\n * @returns The stored file with every key present, or `null` when there is no URL.\n */\nexport function resolveCurrentFile(value: string | HubCurrentFile | null | undefined): HubCurrentFile | null {\n\tconst source: HubCurrentFile | null = typeof value === 'string' ? { url: value } : (value ?? null);\n\tconst url = source?.url?.trim();\n\n\tif (!source || !url) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\turl,\n\t\tname: source.name || urlFileName(url),\n\t\ttype: source.type || dataUrlType(url)\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\tlinkedSignal,\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 { HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubCurrentFile,\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 { resolveCurrentFile, urlFileName } from '../../utils/current-file';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { acceptsOnlyImages, fileExtension, fileKind, HubFileKind, isPreviewableImage } from '../../utils/file-kind';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\nimport { HubTooltipDirective } from 'ng-hub-ui-utils';\n\n/**\n * One tile of `preview=\"inline\"` or `preview=\"grid\"`: a picked file or a stored one, drawn the same\n * way — its image, or its kind icon and its name.\n */\ninterface HubFileTile {\n\t/** Stable identity for `@for`: `item:<id>` or `current:<url>`. */\n\treadonly key: string;\n\t/** The name shown and read out; the field's label, or the stand-in, when the name is unknown. */\n\treadonly name: string;\n\t/** The name without its extension, the part that gives way to an ellipsis when space runs out. */\n\treadonly stem: string;\n\t/** The extension with its dot, kept whole so a truncated name still says what the file is. */\n\treadonly ext: string;\n\t/** The family, which picks the icon when there is no image to paint. */\n\treadonly kind: HubFileKind;\n\t/** The image to paint, or `null` to draw the kind icon and the name instead. */\n\treadonly src: string | null;\n\t/** The held item, or `null` for a stored file. */\n\treadonly item: HubFileItem | null;\n\t/** The stored file, or `null` for a held item. */\n\treadonly current: HubCurrentFile | null;\n}\n\n/** Where the dropzone goes: the full box, the add tile at the end of the grid, or nowhere. */\ntype HubDropzonePlacement = 'zone' | 'add' | 'none';\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. Files the record already has (`currentFile`) are shown next to the picked ones but never\n * reach the value either.\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, HubTooltipDirective],\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\t/**\n\t * Object URLs minted on demand to open a picked file that is not painted — a PDF, or an image\n\t * with `imagePreview` off — in a new tab. Minted only when the user asks, released with the file.\n\t */\n\treadonly #openUrls = new Map<string, string>();\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\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/** The tile a pending pick replaces, set by its \"Replace\" pill and consumed by the next `change`. */\n\t#replaceTarget: string | null = null;\n\n\t/** Raised by the pill for the one click it forwards to the native input. */\n\t#armingReplace = false;\n\n\t/** The control that opened the enlarged image, to give focus back when it closes. */\n\t#viewerOpener: HTMLElement | null = null;\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/**\n\t * How the label is presented.\n\t *\n\t * A dropzone has no floating or horizontal arrangement to offer — `floating` reuses the room\n\t * an empty text control's value occupies, and this field has none — so those two render the\n\t * stacked label they have always rendered. `visually-hidden` is the value that does something\n\t * here: the label stays bound to the native input and keeps naming it, out of sight.\n\t */\n\treadonly labelType = input<HubLabelType>(HubLabelTypes.Stacked);\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/**\n\t * Maximum number of files. Only meaningful with `multiple`. With `preview=\"inline\"` the stored\n\t * files in view count too, a counter shows how many are taken, and the add tile goes away at\n\t * the limit.\n\t */\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/**\n\t * How the held files are rendered: not at all, as a list, or as tiles — under the dropzone with\n\t * `grid`, inside the field with `inline`. An `inline` tile alone fills the field; with `multiple`\n\t * the tiles form a grid whose last tile adds more files.\n\t */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/**\n\t * The files the record already has, shown by `preview=\"inline\"` among the picked ones: a URL,\n\t * whose name and type are read from the URL itself, a {@link HubCurrentFile} when the URL does not\n\t * reveal them, or a list of either with `multiple` (a single field shows the first). Display only:\n\t * a stored file never reaches the form value, which stays a native `File`, `File[]` or `null`.\n\t * Whenever one leaves the field — removed, or replaced by a picked file — {@link currentFileRemoved}\n\t * emits it, and it stays hidden until this input changes.\n\t */\n\treadonly currentFile = input<string | HubCurrentFile | readonly (string | HubCurrentFile)[] | null>(null);\n\n\t/**\n\t * Whether images are painted as images. Off, every file is drawn as its kind icon and no object\n\t * URL is minted for a thumbnail — the lighter choice for long lists of photos.\n\t */\n\treadonly imagePreview = input(true, { transform: booleanAttribute });\n\n\t/**\n\t * Whether the field is read-only: its files stay in view and can be opened, but none can be\n\t * picked, dropped, pasted, replaced or removed. Unlike `disabled`, the field keeps its focus and\n\t * is still submitted.\n\t */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Whether the user may remove what the field holds — the picked files or the stored ones. */\n\treadonly clearable = input(true, { transform: booleanAttribute });\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/** 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 a picked file that left the selection — removed, or replaced through its tile. */\n\treadonly fileRemoved = output<File>();\n\n\t/**\n\t * Emits a stored file that left the field — removed, or replaced by a picked file. The form value\n\t * never held it, so this is the application's cue to delete it on the server.\n\t */\n\treadonly currentFileRemoved = output<HubCurrentFile>();\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/** The dialog that shows a picked image enlarged. */\n\tprotected readonly viewer = viewChild<ElementRef<HTMLDialogElement>>('viewer');\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 tile whose image the viewer shows, or `null` while it is closed. */\n\tprotected readonly _viewing = signal<HubFileTile | null>(null);\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 user may pick, drop, paste or replace a file. */\n\tprotected readonly _canChange = computed<boolean>(() => !this.disabled() && !this.readonly());\n\n\t/** Whether the user may remove what the field holds. */\n\tprotected readonly _canRemove = computed<boolean>(() => this._canChange() && this.clearable());\n\n\t/** Whether the files sit inside the field (`preview=\"inline\"`), single or multiple. */\n\tprotected readonly _isInline = computed<boolean>(() => this.preview() === 'inline');\n\n\t/** One file filling the whole field. */\n\tprotected readonly _inlineSingle = computed<boolean>(() => this._isInline() && !this.multiple());\n\n\t/** A grid of tiles inside the field, ending in the add tile. */\n\tprotected readonly _inlineMultiple = computed<boolean>(() => this._isInline() && this.multiple());\n\n\t/**\n\t * Which files a list renders: `list` always, and `grid` only when a projected `hubFilePreview`\n\t * template asks for its own item rendering — otherwise `grid` draws tiles.\n\t */\n\tprotected readonly _listPreview = computed<'list' | 'grid' | null>(() => {\n\t\tconst preview = this.preview();\n\n\t\tif (preview === 'list') {\n\t\t\treturn 'list';\n\t\t}\n\n\t\treturn preview === 'grid' && this.previewTpt() ? 'grid' : null;\n\t});\n\n\t/**\n\t * Stored files the user removed or replaced, by URL. `linkedSignal` empties it whenever\n\t * `currentFile` changes, so the next record's stored files come back into view on their own.\n\t */\n\treadonly #dismissed = linkedSignal<unknown, ReadonlySet<string>>({\n\t\tsource: this.currentFile,\n\t\tcomputation: () => new Set<string>()\n\t});\n\n\t/**\n\t * Picked files that replaced a stored one, keyed by item id, so the new file takes the stored\n\t * file's place in the grid instead of moving to the end.\n\t */\n\treadonly #anchors = signal<ReadonlyMap<string, string>>(new Map());\n\n\t/** Images that failed to load; their tiles draw the image icon instead. */\n\treadonly #broken = signal<ReadonlySet<string>>(new Set());\n\n\t/** Every stored file the input names, resolved, in its order — dismissed ones included. */\n\treadonly #allCurrents = computed<HubCurrentFile[]>(() =>\n\t\tthis._isInline()\n\t\t\t? [this.currentFile()]\n\t\t\t\t\t.flat()\n\t\t\t\t\t.map((value) => resolveCurrentFile(value))\n\t\t\t\t\t.filter((current): current is HubCurrentFile => current !== null)\n\t\t\t: []\n\t);\n\n\t/** The stored files still in view. A single field shows the first only. */\n\tprotected readonly _currents = computed<HubCurrentFile[]>(() => {\n\t\tconst dismissed = this.#dismissed();\n\t\tconst visible = this.#allCurrents().filter((current) => !dismissed.has(current.url));\n\n\t\treturn this.multiple() ? visible : visible.slice(0, 1);\n\t});\n\n\t/**\n\t * The tiles, in the order they are shown. In an inline grid the stored files come first, in the\n\t * input's order, and a picked file that replaced one of them takes its place; the other picked\n\t * files follow in the value's order. A single field shows its held file, or else its stored one.\n\t */\n\tprotected readonly _tiles = computed<HubFileTile[]>(() => {\n\t\tconst preview = this.preview();\n\t\tconst items = this._items();\n\n\t\tif (preview === 'grid') {\n\t\t\treturn this.previewTpt() ? [] : items.map((item) => this.#itemTile(item));\n\t\t}\n\n\t\tif (preview !== 'inline') {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.multiple()) {\n\t\t\tconst item = items[0];\n\n\t\t\treturn item ? [this.#itemTile(item)] : this._currents().map((current) => this.#currentTile(current));\n\t\t}\n\n\t\tconst dismissed = this.#dismissed();\n\t\tconst byAnchor = new Map<string, HubFileItem>();\n\n\t\tfor (const item of items) {\n\t\t\tconst url = this.#anchors().get(item.id);\n\n\t\t\tif (url) {\n\t\t\t\tbyAnchor.set(url, item);\n\t\t\t}\n\t\t}\n\n\t\tconst tiles: HubFileTile[] = [];\n\t\tconst placed = new Set<string>();\n\n\t\tfor (const current of this.#allCurrents()) {\n\t\t\tconst replacement = byAnchor.get(current.url);\n\n\t\t\tif (!dismissed.has(current.url)) {\n\t\t\t\ttiles.push(this.#currentTile(current));\n\t\t\t} else if (replacement) {\n\t\t\t\ttiles.push(this.#itemTile(replacement));\n\t\t\t\tplaced.add(replacement.id);\n\t\t\t}\n\t\t}\n\n\t\treturn [...tiles, ...items.filter((item) => !placed.has(item.id)).map((item) => this.#itemTile(item))];\n\t});\n\n\t/** How many files the field holds: the picked ones, plus the stored ones an inline grid shows. */\n\tprotected readonly _heldCount = computed<number>(\n\t\t() => this._items().length + (this._inlineMultiple() ? this._currents().length : 0)\n\t);\n\n\t/** Whether an inline grid is full, which takes its add tile away. */\n\tprotected readonly _atLimit = computed<boolean>(() => {\n\t\tconst max = this.maxFiles();\n\n\t\treturn this._inlineMultiple() && max != null && this._heldCount() >= max;\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && this._canChange() && !this._atLimit());\n\n\t/**\n\t * Where the dropzone goes. List and grid always keep it. Inline keeps it while the field is\n\t * empty, turns it into the add tile at the end of a grid, and drops it for a filled single field,\n\t * a full grid, or one that cannot take files.\n\t */\n\tprotected readonly _dropzone = computed<HubDropzonePlacement>(() => {\n\t\tif (!this._isInline() || this._tiles().length === 0) {\n\t\t\treturn 'zone';\n\t\t}\n\n\t\treturn this._inlineMultiple() && this._canChange() && !this._atLimit() ? 'add' : 'none';\n\t});\n\n\t/** Whether the \"3 of 5 files\" counter is shown. */\n\tprotected readonly _showCount = computed<boolean>(() => this._inlineMultiple() && this.maxFiles() != null);\n\n\t/** The ids the native input is described by: the constraints hint and the counter. */\n\tprotected readonly _describedBy = computed<string | null>(() => {\n\t\tconst ids = [\n\t\t\tthis.constraintsHint() && this._dropzone() !== 'none' ? `${this.id}-hint` : null,\n\t\t\tthis._showCount() ? `${this.id}-count` : null\n\t\t].filter((id): id is string => id !== null);\n\n\t\treturn ids.length ? ids.join(' ') : null;\n\t});\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.#anchors.set(new Map());\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._canChange()) {\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.#unanchor(id);\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.#anchors.set(new Map());\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. A pick started from a tile's \"Replace\" pill\n\t * swaps that tile's file; any other pick adds.\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\t\tconst files = Array.from(native.files ?? []);\n\t\tconst target = this.#replaceTarget ? this._tiles().find((tile) => tile.key === this.#replaceTarget) : null;\n\n\t\tthis.#replaceTarget = null;\n\n\t\tif (target && files[0]) {\n\t\t\tthis.#replace(target, files[0]);\n\t\t} else {\n\t\t\tthis.#addFiles(files);\n\t\t}\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 field.\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._canChange() || this._atLimit()) {\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 * Opens a picked file: an image enlarged in the viewer, anything else in a new tab. Stored files\n\t * never come through here — their tile is a plain link to their URL.\n\t *\n\t * @param tile - The tile being opened.\n\t * @param event - The click, whose target gets focus back when the viewer closes.\n\t */\n\tprotected openTile(tile: HubFileTile, event: Event): void {\n\t\tif (!tile.item) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (tile.src) {\n\t\t\tthis.#viewerOpener = event.currentTarget as HTMLElement;\n\t\t\tthis._viewing.set(tile);\n\t\t\tthis.viewer()?.nativeElement.showModal();\n\t\t\treturn;\n\t\t}\n\n\t\tconst url = this.#openUrl(tile.item);\n\n\t\tif (url) {\n\t\t\twindow.open(url, '_blank', 'noopener');\n\t\t}\n\t}\n\n\t/** Closes the enlarged image. */\n\tprotected closeViewer(): void {\n\t\tthis.viewer()?.nativeElement.close();\n\t}\n\n\t/**\n\t * Closes the viewer on a click on its backdrop, which lands on the `<dialog>` itself.\n\t *\n\t * @param event - The click inside the dialog.\n\t */\n\tprotected handleViewerClick(event: MouseEvent): void {\n\t\tif (event.target === this.viewer()?.nativeElement) {\n\t\t\tthis.closeViewer();\n\t\t}\n\t}\n\n\t/**\n\t * Clears the viewer and hands focus back to the tile that opened it. The `close` event covers\n\t * every way out: the close button, the backdrop, and Escape.\n\t */\n\tprotected handleViewerClose(): void {\n\t\tthis._viewing.set(null);\n\t\tthis.#viewerOpener?.focus();\n\t\tthis.#viewerOpener = null;\n\t}\n\n\t/**\n\t * Starts replacing one tile's file: remembers the tile and opens the dialog. The next `change`\n\t * swaps that file in place; a cancelled dialog forgets the tile.\n\t *\n\t * @param tile - The tile whose file is being replaced.\n\t */\n\tprotected replaceTile(tile: HubFileTile): void {\n\t\tif (!this._canChange()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#replaceTarget = tile.key;\n\t\tthis.#armingReplace = true;\n\t\tthis.nativeInput()?.nativeElement.click();\n\t\tthis.#armingReplace = false;\n\t}\n\n\t/** Forgets the pending replacement when the file dialog is dismissed without a pick. */\n\tprotected cancelReplace(): void {\n\t\tthis.#replaceTarget = null;\n\t}\n\n\t/**\n\t * Removes a tile's file — a picked one from the value, a stored one from view, announced through\n\t * {@link currentFileRemoved} — and moves focus to the tile that takes its place, or to the field.\n\t *\n\t * @param tile - The tile to remove.\n\t * @param index - Its position, to find the tile focus moves to.\n\t */\n\tprotected removeTile(tile: HubFileTile, index: number): void {\n\t\tif (!this._canRemove() || tile.item?.status === 'uploading') {\n\t\t\treturn;\n\t\t}\n\n\t\t// The other tiles keep their DOM nodes (`@for` tracks by key), so the one to focus next can be\n\t\t// picked before the removal and is still the same element after it.\n\t\tconst host = this._elementRef.nativeElement as HTMLElement;\n\t\tconst opens = Array.from(host.querySelectorAll<HTMLElement>('.hub-file-input__tile-open'));\n\t\tconst next = opens[index + 1] ?? opens[index - 1] ?? null;\n\n\t\tif (tile.item) {\n\t\t\tthis.remove(tile.item.id);\n\t\t} else if (tile.current) {\n\t\t\tthis.#dismiss(tile.current.url);\n\t\t\tthis.currentFileRemoved.emit(tile.current);\n\t\t}\n\n\t\t(next ?? this.nativeInput()?.nativeElement)?.focus();\n\t}\n\n\t/**\n\t * Delete and Backspace remove the focused tile, the way a chip or a tag is removed in a field.\n\t *\n\t * @param event - The keydown on the tile's open control.\n\t * @param tile - The tile.\n\t * @param index - Its position.\n\t */\n\tprotected handleTileKeydown(event: KeyboardEvent, tile: HubFileTile, index: number): void {\n\t\tif (event.key !== 'Delete' && event.key !== 'Backspace') {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.removeTile(tile, index);\n\t}\n\n\t/**\n\t * Falls back to the image icon when an image does not load — a stored URL that is gone, or a\n\t * guess from `accept` that turned out wrong.\n\t *\n\t * @param src - The URL that failed.\n\t */\n\tprotected markBroken(src: string): void {\n\t\tthis.#broken.update((broken) => new Set(broken).add(src));\n\t}\n\n\t/**\n\t * Keeps a read-only field from opening the file dialog, and tells a plain pick from a replacing\n\t * one. The native input stays enabled so it can still take focus, and a click on it — including\n\t * the one a label forwards — is what opens the dialog.\n\t *\n\t * @param event - The click reaching the native input.\n\t */\n\tprotected guardNativeClick(event: Event): void {\n\t\tif (this.readonly()) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tif (!this.#armingReplace) {\n\t\t\tthis.#replaceTarget = null;\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 * A single inline field holds one tile, so a new file replaces it — the stored one included,\n\t * which is then announced as removed. Elsewhere in single mode the incoming file replaces the\n\t * current one, so the constraint checks run against an empty baseline rather than against the\n\t * 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._canChange() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst shown = this._inlineSingle() ? this._tiles()[0] : undefined;\n\n\t\tif (shown) {\n\t\t\tthis.#replace(shown, incoming[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 + (this._inlineMultiple() ? this._currents().length : 0);\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 * Swaps one tile's file for a new one, in place. It is a removal and an addition in one step, so\n\t * it emits what a removal emits — {@link fileRemoved} for a picked file, {@link currentFileRemoved}\n\t * for a stored one — and checks the new file against the constraints as if the old one were gone.\n\t *\n\t * @param tile - The tile being replaced.\n\t * @param file - The file taking its place.\n\t */\n\t#replace(tile: HubFileTile, file: File): void {\n\t\tconst items = this._items();\n\t\tconst others = tile.item ? items.filter((item) => item.id !== tile.item!.id) : items;\n\t\tconst count = this.multiple() ? this._heldCount() - 1 : 0;\n\t\tconst total = others.reduce((sum, item) => sum + item.file.size, 0);\n\t\tconst rejection = this.#reject(file, count, total, new Set(others.map((item) => fileKey(item.file))));\n\n\t\tif (rejection) {\n\t\t\tthis.rejected.emit([rejection]);\n\t\t\tthis.#announce(this.labels().rejection(rejection));\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this.#createItem(file);\n\n\t\tif (tile.item) {\n\t\t\tconst old = tile.item;\n\t\t\tconst anchor = this.#anchors().get(old.id);\n\n\t\t\tthis.#abort(old.id);\n\t\t\tthis.#revokePreview(old);\n\t\t\tthis.#unanchor(old.id);\n\t\t\tthis._items.set(items.map((item) => (item.id === old.id ? next : item)));\n\n\t\t\tif (anchor) {\n\t\t\t\tthis.#anchor(next.id, anchor);\n\t\t\t}\n\n\t\t\tthis.#emitValue();\n\t\t\tthis.fileRemoved.emit(old.file);\n\t\t} else if (tile.current) {\n\t\t\tthis.#dismiss(tile.current.url);\n\t\t\tthis._items.set(this.multiple() ? [...items, next] : [next]);\n\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.#anchor(next.id, tile.current.url);\n\t\t\t}\n\n\t\t\tthis.#emitValue();\n\t\t\tthis.currentFileRemoved.emit(tile.current);\n\t\t}\n\n\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\tthis.#startUpload(next.id);\n\t\t}\n\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\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 * Describes a held item as a tile.\n\t *\n\t * @param item - The held item.\n\t * @returns Its tile.\n\t */\n\t#itemTile(item: HubFileItem): HubFileTile {\n\t\tconst { name, type } = item.file;\n\n\t\treturn this.#tile(`item:${item.id}`, name, fileKind(type, name), item.previewUrl, item, null);\n\t}\n\n\t/**\n\t * Describes a stored file as a tile, guessing its kind from its type, its name or its URL.\n\t *\n\t * @param current - The stored file.\n\t * @returns Its tile.\n\t */\n\t#currentTile(current: HubCurrentFile): HubFileTile {\n\t\t// An explicit name without an extension (\"Signed contract\") says nothing about the type; the\n\t\t// URL may still end in one.\n\t\tconst hint = fileExtension(current.name) ? current.name : urlFileName(current.url);\n\t\tlet kind = fileKind(current.type, hint);\n\t\tlet previewable = isPreviewableImage(current.type, hint);\n\n\t\t// `/api/companies/1/logo` reveals nothing, but in a field that only accepts images the stored\n\t\t// file is one. If the guess is wrong the `<img>` fails and the image icon takes its place.\n\t\tif (kind === 'generic' && acceptsOnlyImages(this.accept())) {\n\t\t\tkind = 'image';\n\t\t\tpreviewable = true;\n\t\t}\n\n\t\t// A stored file with no name — a bare `data:` URL, an opaque API path — is the field's own value,\n\t\t// so it takes the field's label (\"Remove Logo\"); the generic stand-in is for a field with none.\n\t\tconst name = current.name || this.label() || this.labels().currentFile;\n\n\t\treturn this.#tile(`current:${current.url}`, name, kind, previewable ? current.url : null, null, current);\n\t}\n\n\t/**\n\t * Builds a tile, splitting off the extension so the stem alone gives way to the ellipsis, and\n\t * dropping the image when previews are off or it already failed to load.\n\t *\n\t * @param key - The tile's identity.\n\t * @param name - The name to show.\n\t * @param kind - The file family.\n\t * @param src - The image URL, or `null` when there is no image to paint.\n\t * @param item - The held item, if any.\n\t * @param current - The stored file, if any.\n\t * @returns The tile.\n\t */\n\t#tile(\n\t\tkey: string,\n\t\tname: string,\n\t\tkind: HubFileKind,\n\t\tsrc: string | null,\n\t\titem: HubFileItem | null,\n\t\tcurrent: HubCurrentFile | null\n\t): HubFileTile {\n\t\tconst dot = fileExtension(name) ? name.lastIndexOf('.') : -1;\n\t\tconst painted = src && this.imagePreview() && !this.#broken().has(src) ? src : null;\n\n\t\treturn {\n\t\t\tkey,\n\t\t\tname,\n\t\t\tstem: dot > 0 ? name.slice(0, dot) : name,\n\t\t\text: dot > 0 ? name.slice(dot) : '',\n\t\t\tkind,\n\t\t\tsrc: painted,\n\t\t\titem,\n\t\t\tcurrent\n\t\t};\n\t}\n\n\t/**\n\t * Hides a stored file until `currentFile` changes.\n\t *\n\t * @param url - Its URL.\n\t */\n\t#dismiss(url: string): void {\n\t\tthis.#dismissed.update((dismissed) => new Set(dismissed).add(url));\n\t}\n\n\t/**\n\t * Pins a picked file to the place of the stored file it replaced.\n\t *\n\t * @param id - The item id.\n\t * @param url - The stored file's URL.\n\t */\n\t#anchor(id: string, url: string): void {\n\t\tthis.#anchors.update((anchors) => new Map(anchors).set(id, url));\n\t}\n\n\t/**\n\t * Forgets where a picked file was pinned.\n\t *\n\t * @param id - The item id.\n\t */\n\t#unanchor(id: string): void {\n\t\tif (this.#anchors().has(id)) {\n\t\t\tthis.#anchors.update((anchors) => {\n\t\t\t\tconst next = new Map(anchors);\n\n\t\t\t\tnext.delete(id);\n\n\t\t\t\treturn next;\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * The URL a picked file opens at in a new tab: its thumbnail's, or one minted now, on demand.\n\t *\n\t * @param item - The held item.\n\t * @returns The URL, or `null` outside a browser.\n\t */\n\t#openUrl(item: HubFileItem): string | null {\n\t\tif (!this.#isBrowser) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet url = item.previewUrl ?? this.#openUrls.get(item.id) ?? null;\n\n\t\tif (!url) {\n\t\t\turl = URL.createObjectURL(item.file);\n\t\t\tthis.#openUrls.set(item.id, url);\n\t\t}\n\n\t\treturn url;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is an image a browser can paint and\n\t * previews are on. HEIC, TIFF and the like are left without one: an `<img>` pointed at them\n\t * renders a broken frame.\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 =\n\t\t\tthis.#isBrowser && this.preview() !== 'none' && this.imagePreview() && isPreviewableImage(file.type, file.name);\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 URLs of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose URLs should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (!this.#isBrowser) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.previewUrl) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\n\t\tconst openUrl = this.#openUrls.get(item.id);\n\n\t\tif (openUrl) {\n\t\t\tURL.revokeObjectURL(openUrl);\n\t\t\tthis.#openUrls.delete(item.id);\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}\\u200b` : 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 (showsFormTextTooltip()) {\n\t\t<!--\n\t\t\tThe row exists because the hint does, not because the label does. A field with a\n\t\t\tfloating label — or no label at all — still has helper text to offer, and the mark\n\t\t\tis the only place left to offer it from once the block below stands down.\n\t\t-->\n\t\t<div class=\"hub-field__label-row\">\n\t\t\t@if (label() || required()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t\t\t}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"hub-field__hint\"\n\t\t\t\t[attr.aria-label]=\"formText()\"\n\t\t\t\t[hubTooltip]=\"formText()\"\n\t\t\t\thubTooltipPlacement=\"top\"\n\t\t\t></button>\n\t\t</div>\n\t} @else if (label() || required()) {\n\t\t<ng-container [ngTemplateOutlet]=\"hubFieldLabelTpl\" />\n\t}\n\n\t<ng-template #hubFieldLabelTpl>\n\t\t<label\n\t\t\t[for]=\"id\"\n\t\t\tclass=\"hub-field__label\"\n\t\t\t[class.hub-field__label--visually-hidden]=\"labelType() === _labelTypes.VisuallyHidden\"\n\t\t>\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</ng-template>\n\n\t<div\n\t\tclass=\"hub-field__body\"\n\t\t[class.hub-file-input__body--inline]=\"_inlineSingle()\"\n\t\t[class.hub-file-input__body--inline-multiple]=\"_inlineMultiple()\"\n\t>\n\t\t<!-- The frame listens for the drag, so a drop lands anywhere on the field, tiles included. -->\n\t\t<div\n\t\t\tclass=\"hub-file-input__frame\"\n\t\t\t[class.hub-file-input__frame--dragover]=\"isDragging()\"\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@if (_dropzone() === 'zone') {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"dropzoneTpl\" [ngTemplateOutletContext]=\"{ $implicit: false }\" />\n\t\t\t}\n\n\t\t\t@if (_tiles().length > 0) {\n\t\t\t\t<ul class=\"hub-file-input__tiles\" [class.hub-file-input__tiles--single]=\"_inlineSingle()\">\n\t\t\t\t\t@for (tile of _tiles(); track tile.key; let index = $index) {\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tclass=\"hub-file-input__tile\"\n\t\t\t\t\t\t\t[class.hub-file-input__tile--changeable]=\"_canChange() && tile.item?.status !== 'uploading'\"\n\t\t\t\t\t\t\t[attr.data-file-kind]=\"tile.kind\"\n\t\t\t\t\t\t\t[attr.data-status]=\"tile.item?.status ?? null\"\n\t\t\t\t\t\t\t[attr.title]=\"tile.name\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\tActivating a tile opens its file: a stored one is a link to its URL, in a new tab;\n\t\t\t\t\t\t\t\ta picked image opens enlarged; any other picked file opens in a new tab. Replacing\n\t\t\t\t\t\t\t\thas its own button, the pill, so one gesture never means two things.\n\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t@if (tile.current) {\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-open\"\n\t\t\t\t\t\t\t\t\t[href]=\"tile.current.url\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().open(tile.name)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleTileKeydown($event, tile, index)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tileBodyTpl\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: tile }\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-open\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().open(tile.name)\"\n\t\t\t\t\t\t\t\t\t(click)=\"openTile(tile, $event)\"\n\t\t\t\t\t\t\t\t\t(keydown)=\"handleTileKeydown($event, tile, index)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tileBodyTpl\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: tile }\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (_canChange() && tile.item?.status !== 'uploading') {\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-veil\" aria-hidden=\"true\"></span>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__tile-replace\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().replaceFile(tile.name)\"\n\t\t\t\t\t\t\t\t\t(click)=\"replaceTile(tile)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ labels().replace }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (tile.item?.status === 'uploading') {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress hub-file-input__tile-progress\"\n\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"tile.item?.progress === null\"\n\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"tile.item?.progress\"\n\t\t\t\t\t\t\t\t>\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-bar\"\n\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"tile.item?.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t@if (tile.item?.status === 'error') {\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-error\">{{ errorText(tile.item!) }}</span>\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__tile-actions\">\n\t\t\t\t\t\t\t\t@if (tile.item?.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t@if (hasUploader) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--cancel\"\n\t\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\t(click)=\"cancel(tile.item!.id)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@if (tile.item?.status === 'error') {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--retry\"\n\t\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\t(click)=\"retry(tile.item!.id)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (_canRemove()) {\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--remove\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().removeFile(tile.name)\"\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"removeTile(tile, index)\"\n\t\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t\t}\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</li>\n\t\t\t\t\t}\n\n\t\t\t\t\t@if (_dropzone() === 'add') {\n\t\t\t\t\t\t<li class=\"hub-file-input__tile hub-file-input__tile--add\">\n\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"dropzoneTpl\" [ngTemplateOutletContext]=\"{ $implicit: true }\" />\n\t\t\t\t\t\t</li>\n\t\t\t\t\t}\n\t\t\t\t</ul>\n\t\t\t}\n\n\t\t\t@if (_isInline()) {\n\t\t\t\t<!--\n\t\t\t\t\tInline keeps the native input out of the label, after the tiles: it is never re-created\n\t\t\t\t\twhen the field fills or empties, focus can always return to it, and its place in the tab\n\t\t\t\t\torder is the add tile's.\n\t\t\t\t-->\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"nativeTpl\" />\n\t\t\t}\n\n\t\t\t@if (_showCount()) {\n\t\t\t\t<p class=\"hub-file-input__count\" [id]=\"id + '-count'\">{{ labels().count(_heldCount(), maxFiles()!) }}</p>\n\t\t\t}\n\t\t</div>\n\n\t\t@if (_listPreview() && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"_listPreview() === '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 {\n\t\t\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\t\t\tA nested @if rather than `@else if (iconTpt(); as icon)`: an `as` on an\n\t\t\t\t\t\t\t\t\t\t@else if is only accepted from Angular 20.2, and this package supports\n\t\t\t\t\t\t\t\t\t\tolder ones.\n\t\t\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t\t\t@if (iconTpt(); as icon) {\n\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"icon.template\"\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t\t\t\t} @else {\n\t\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\t}\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 (_canRemove() && 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 && _canRemove()) {\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 (!showsFormTextTooltip() && (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\n\t<!--\n\t\tThe enlarged image. A native modal <dialog> does the hard parts: Escape closes it, the page\n\t\tbehind turns inert so focus stays inside, and it sits in the top layer above any stacking\n\t\tcontext. Focus goes back to the tile on close, whichever way it closes.\n\t-->\n\t<dialog\n\t\t#viewer\n\t\tclass=\"hub-file-input__viewer\"\n\t\t[attr.aria-label]=\"_viewing()?.name ?? null\"\n\t\t(close)=\"handleViewerClose()\"\n\t\t(click)=\"handleViewerClick($event)\"\n\t>\n\t\t@if (_viewing(); as viewing) {\n\t\t\t<figure class=\"hub-file-input__viewer-figure\">\n\t\t\t\t<img class=\"hub-file-input__viewer-image\" [src]=\"viewing.src\" [alt]=\"viewing.name\" />\n\t\t\t\t<figcaption class=\"hub-file-input__viewer-caption\">{{ viewing.name }}</figcaption>\n\t\t\t</figure>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-file-input__chip hub-file-input__chip--close\"\n\t\t\t[attr.aria-label]=\"labels().close\"\n\t\t\t(click)=\"closeViewer()\"\n\t\t\tautofocus\n\t\t></button>\n\t</dialog>\n</div>\n\n<!--\n\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with the\n\tkeyboard opens the file dialog through the platform, so no role, tabindex or key handler is\n\tneeded. The \"browse\" affordance is a <span>, not a <button>, because a button inside a label would\n\topen the dialog twice. As the add tile it keeps only the glyph and the browse text.\n-->\n<ng-template #dropzoneTpl let-add>\n\t<label\n\t\tclass=\"hub-file-input__dropzone\"\n\t\t[for]=\"id\"\n\t\t[class.hub-file-input__dropzone--add]=\"add\"\n\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t[class.hub-file-input__dropzone--readonly]=\"readonly()\"\n\t>\n\t\t@if (!_isInline()) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"nativeTpl\" />\n\t\t}\n\n\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t@if (add) {\n\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t} @else {\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\t\t}\n\n\t\t@if (constraintsHint()) {\n\t\t\t<span class=\"hub-file-input__hint\" [class.hub-file-input__hint--hidden]=\"add\" [id]=\"id + '-hint'\">{{\n\t\t\t\tconstraintsHint()\n\t\t\t}}</span>\n\t\t}\n\t</label>\n</ng-template>\n\n<ng-template #nativeTpl>\n\t<input\n\t\t#nativeInput\n\t\ttype=\"file\"\n\t\tclass=\"hub-file-input__native\"\n\t\t[id]=\"id\"\n\t\t[accept]=\"accept()\"\n\t\t[multiple]=\"multiple()\"\n\t\t[disabled]=\"disabled()\"\n\t\t[attr.capture]=\"capture()\"\n\t\t[attr.tabindex]=\"_dropzone() === 'none' ? -1 : null\"\n\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t[attr.aria-describedby]=\"_describedBy()\"\n\t\t(click)=\"guardNativeClick($event)\"\n\t\t(cancel)=\"cancelReplace()\"\n\t\t(change)=\"handleNativeChange($event)\"\n\t\t(blur)=\"handleBlur($event)\"\n\t/>\n</ng-template>\n\n<ng-template #tileBodyTpl let-tile>\n\t@if (tile.src) {\n\t\t<img class=\"hub-file-input__tile-image\" [src]=\"tile.src\" alt=\"\" (error)=\"markBroken(tile.src)\" />\n\t} @else {\n\t\t<span class=\"hub-file-input__tile-file\">\n\t\t\t<span class=\"hub-file-input__kind-icon\" aria-hidden=\"true\"></span>\n\t\t\t<span class=\"hub-file-input__tile-name\">\n\t\t\t\t<span class=\"hub-file-input__tile-stem\">{{ tile.stem }}</span>\n\t\t\t\t@if (tile.ext) {\n\t\t\t\t\t<span class=\"hub-file-input__tile-ext\">{{ tile.ext }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t</span>\n\t}\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { HubRgb, parseColor, readableOn, toHex } from 'ng-hub-ui-utils';\n\n/**\n * Inverts a colour, 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 color - Any CSS colour: hex (3/4/6/8 digits, `#` optional), `rgb()`, `hsl()`,\n\t * `oklch()`, `oklab()` or a named colour.\n\t * @param bw - When `true`, returns the black or white that reads best on `color`.\n\t * @param metric - How `bw` decides. `'lightness'` (default) matches the\n\t * `--hub-sys-color-*-on` design-system token; `'apca'` and `'wcag'` score the two\n\t * candidates instead.\n\t * @returns The inverted (or contrasting) colour as a hex string, or `#000000` when the\n\t * input is empty or is not a colour this can resolve.\n\t */\n\ttransform(color: string, bw: boolean = false, metric: 'lightness' | 'apca' | 'wcag' = 'lightness'): string {\n\t\tconst rgb = this.resolve(color);\n\t\tif (!rgb) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (bw) {\n\t\t\treturn readableOn(rgb, metric);\n\t\t}\n\n\t\treturn toHex({ r: 255 - rgb.r, g: 255 - rgb.g, b: 255 - rgb.b, a: rgb.a })!;\n\t}\n\n\t/**\n\t * Resolves the input, retrying with a `#` prefix so bare hex digits keep working — the\n\t * pipe has accepted `'336699'` since it shipped and consumers rely on it.\n\t */\n\tprivate resolve(color: string): HubRgb | null {\n\t\tif (!color) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parseColor(color) ?? parseColor(`#${color}`);\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 slots\nexport {\n\tHubSelectOptionDirective,\n\tHubSelectOptgroupDirective,\n\tHubSelectLabelDirective,\n\tHubSelectMultiLabelDirective,\n\tHubSelectHeaderDirective,\n\tHubSelectFooterDirective,\n\tHubSelectNotFoundDirective,\n\tHubSelectTypeToSearchDirective,\n\tHubSelectLoadingTextDirective,\n\tHubSelectLoadingSpinnerDirective,\n\tHubSelectTagDirective,\n\tHubSelectClearButtonDirective\n} from './lib/select/select-templates.directive';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\n\n/**\n * @deprecated Use `<hub-select>` with `[items]` (or the `hubSelect*` slots) instead. `<ng-option>`\n * belongs to the vendored ng-select engine, an internal detail this package re-syncs from upstream.\n * Removed in 23.0.0.\n */\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\n\n/**\n * @deprecated Use the `hubSelect*` slot directives above. These are the vendored ng-select\n * attributes (`ng-option-tmp` and friends) and name an internal dependency, not this library's API.\n * Each has a one-to-one replacement — `ng-option-tmp` → `hubSelectOption`, `ng-label-tmp` →\n * `hubSelectLabel`, and so on, with the same template context. They keep working until they are\n * removed in 23.0.0.\n */\nexport {\n\t/** @deprecated Use `HubSelectOptionDirective` (`[hubSelectOption]`). Removed in 23.0.0. */\n\tNgOptionTemplateDirective,\n\t/** @deprecated Use `HubSelectOptgroupDirective` (`[hubSelectOptgroup]`). Removed in 23.0.0. */\n\tNgOptgroupTemplateDirective,\n\t/** @deprecated Use `HubSelectLabelDirective` (`[hubSelectLabel]`). Removed in 23.0.0. */\n\tNgLabelTemplateDirective,\n\t/** @deprecated Use `HubSelectMultiLabelDirective` (`[hubSelectMultiLabel]`). Removed in 23.0.0. */\n\tNgMultiLabelTemplateDirective,\n\t/** @deprecated Use `HubSelectHeaderDirective` (`[hubSelectHeader]`). Removed in 23.0.0. */\n\tNgHeaderTemplateDirective,\n\t/** @deprecated Use `HubSelectFooterDirective` (`[hubSelectFooter]`). Removed in 23.0.0. */\n\tNgFooterTemplateDirective,\n\t/** @deprecated Use `HubSelectNotFoundDirective` (`[hubSelectNotFound]`). Removed in 23.0.0. */\n\tNgNotFoundTemplateDirective,\n\t/** @deprecated Use `HubSelectTypeToSearchDirective` (`[hubSelectTypeToSearch]`). Removed in 23.0.0. */\n\tNgTypeToSearchTemplateDirective,\n\t/** @deprecated Use `HubSelectLoadingTextDirective` (`[hubSelectLoadingText]`). Removed in 23.0.0. */\n\tNgLoadingTextTemplateDirective,\n\t/** @deprecated Use `HubSelectLoadingSpinnerDirective` (`[hubSelectLoadingSpinner]`). Removed in 23.0.0. */\n\tNgLoadingSpinnerTemplateDirective,\n\t/** @deprecated Use `HubSelectTagDirective` (`[hubSelectTag]`). Removed in 23.0.0. */\n\tNgTagTemplateDirective,\n\t/** @deprecated Use `HubSelectClearButtonDirective` (`[hubSelectClearButton]`). Removed in 23.0.0. */\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 {\n\tHubColorConfig,\n\tHubColorPaletteName,\n\tHubColorSwatch,\n\tHubColorSwatchInput,\n\tHubInputFormat,\n\tHubPasswordLabels,\n\tHubPasswordStrengthScore\n} from './lib/interfaces/input.interface';\nexport {\n\tHUB_COLOR_PALETTES,\n\tHubInputFormats,\n\tdefaultHubColorConfig,\n\tdefaultHubPasswordLabels\n} 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\tHubCurrentFile,\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 { fileKind } from './lib/utils/file-kind';\nexport type { HubFileKind } from './lib/utils/file-kind';\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"],"mappings":"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AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;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,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,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,QAAQ,EA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"}
|